ltmain.sh revision 74c14cd6
1e35772b2Smrg 274c14cd6Smrg# libtool (GNU libtool) 2.4.2 3e35772b2Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4e35772b2Smrg 574c14cd6Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 674c14cd6Smrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7e35772b2Smrg# This is free software; see the source for copying conditions. There is NO 8e35772b2Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9e35772b2Smrg 10e35772b2Smrg# GNU Libtool is free software; you can redistribute it and/or modify 1172b676d7Smrg# it under the terms of the GNU General Public License as published by 1272b676d7Smrg# the Free Software Foundation; either version 2 of the License, or 1372b676d7Smrg# (at your option) any later version. 1472b676d7Smrg# 15e35772b2Smrg# As a special exception to the GNU General Public License, 16e35772b2Smrg# if you distribute this file as part of a program or library that 17e35772b2Smrg# is built using GNU Libtool, you may include this file under the 18e35772b2Smrg# same distribution terms that you use for the rest of that program. 19e35772b2Smrg# 20e35772b2Smrg# GNU Libtool is distributed in the hope that it will be useful, but 2172b676d7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 2272b676d7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 2372b676d7Smrg# General Public License for more details. 2472b676d7Smrg# 2572b676d7Smrg# You should have received a copy of the GNU General Public License 26e35772b2Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 27e35772b2Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28e35772b2Smrg# or obtained by writing to the Free Software Foundation, Inc., 29e35772b2Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 3072b676d7Smrg 31e35772b2Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 32e35772b2Smrg# 33e35772b2Smrg# Provide generalized library-building support services. 34e35772b2Smrg# 3574c14cd6Smrg# --config show all configuration variables 3674c14cd6Smrg# --debug enable verbose shell tracing 3774c14cd6Smrg# -n, --dry-run display commands without modifying any files 3874c14cd6Smrg# --features display basic configuration information and exit 3974c14cd6Smrg# --mode=MODE use operation mode MODE 4074c14cd6Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 4174c14cd6Smrg# --quiet, --silent don't print informational messages 4274c14cd6Smrg# --no-quiet, --no-silent 4374c14cd6Smrg# print informational messages (default) 4474c14cd6Smrg# --no-warn don't display warning messages 4574c14cd6Smrg# --tag=TAG use configuration variables from tag TAG 4674c14cd6Smrg# -v, --verbose print more informational messages than default 4774c14cd6Smrg# --no-verbose don't print the extra informational messages 4874c14cd6Smrg# --version print version information 4974c14cd6Smrg# -h, --help, --help-all print short, long, or detailed help message 50e35772b2Smrg# 51e35772b2Smrg# MODE must be one of the following: 52e35772b2Smrg# 5374c14cd6Smrg# clean remove files from the build directory 5474c14cd6Smrg# compile compile a source file into a libtool object 5574c14cd6Smrg# execute automatically set library path, then run a program 5674c14cd6Smrg# finish complete the installation of libtool libraries 5774c14cd6Smrg# install install libraries or executables 5874c14cd6Smrg# link create a library or an executable 5974c14cd6Smrg# uninstall remove libraries from an installed directory 60e35772b2Smrg# 6174c14cd6Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 6274c14cd6Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63e35772b2Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64e35772b2Smrg# 65e35772b2Smrg# When reporting a bug, please describe a test case to reproduce it and 66e35772b2Smrg# include the following information: 67e35772b2Smrg# 6874c14cd6Smrg# host-triplet: $host 6974c14cd6Smrg# shell: $SHELL 7074c14cd6Smrg# compiler: $LTCC 7174c14cd6Smrg# compiler flags: $LTCFLAGS 7274c14cd6Smrg# linker: $LD (gnu? $with_gnu_ld) 7374c14cd6Smrg# $progname: (GNU libtool) 2.4.2 7474c14cd6Smrg# automake: $automake_version 7574c14cd6Smrg# autoconf: $autoconf_version 76e35772b2Smrg# 77e35772b2Smrg# Report bugs to <bug-libtool@gnu.org>. 7874c14cd6Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 7974c14cd6Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 8072b676d7Smrg 8174c14cd6SmrgPROGRAM=libtool 8272b676d7SmrgPACKAGE=libtool 8374c14cd6SmrgVERSION=2.4.2 84e35772b2SmrgTIMESTAMP="" 8574c14cd6Smrgpackage_revision=1.3337 861fd23544Smrg 87e35772b2Smrg# Be Bourne compatible 881fd23544Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 891fd23544Smrg emulate sh 901fd23544Smrg NULLCMD=: 911fd23544Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 921fd23544Smrg # is contrary to our usage. Disable this feature. 931fd23544Smrg alias -g '${1+"$@"}'='"$@"' 9472b676d7Smrg setopt NO_GLOB_SUBST 951fd23544Smrgelse 961fd23544Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 9772b676d7Smrgfi 981fd23544SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 991fd23544SmrgDUALCASE=1; export DUALCASE # for MKS sh 10072b676d7Smrg 10174c14cd6Smrg# A function that is used when there is no print builtin or printf. 10274c14cd6Smrgfunc_fallback_echo () 10374c14cd6Smrg{ 10474c14cd6Smrg eval 'cat <<_LTECHO_EOF 10574c14cd6Smrg$1 10674c14cd6Smrg_LTECHO_EOF' 10774c14cd6Smrg} 10874c14cd6Smrg 109e35772b2Smrg# NLS nuisances: We save the old values to restore during execute mode. 110e35772b2Smrglt_user_locale= 111e35772b2Smrglt_safe_locale= 1121fd23544Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1131fd23544Smrgdo 1141fd23544Smrg eval "if test \"\${$lt_var+set}\" = set; then 115e35772b2Smrg save_$lt_var=\$$lt_var 116e35772b2Smrg $lt_var=C 1171fd23544Smrg export $lt_var 118e35772b2Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119e35772b2Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1201fd23544Smrg fi" 1211fd23544Smrgdone 12274c14cd6SmrgLC_ALL=C 12374c14cd6SmrgLANGUAGE=C 12474c14cd6Smrgexport LANGUAGE LC_ALL 1251fd23544Smrg 126e35772b2Smrg$lt_unset CDPATH 127e35772b2Smrg 128e35772b2Smrg 12974c14cd6Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 13074c14cd6Smrg# is ksh but when the shell is invoked as "sh" and the current value of 13174c14cd6Smrg# the _XPG environment variable is not equal to 1 (one), the special 13274c14cd6Smrg# positional parameter $0, within a function call, is the name of the 13374c14cd6Smrg# function. 13474c14cd6Smrgprogpath="$0" 135e35772b2Smrg 136e35772b2Smrg 137e35772b2Smrg 138e35772b2Smrg: ${CP="cp -f"} 13974c14cd6Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140e35772b2Smrg: ${MAKE="make"} 141e35772b2Smrg: ${MKDIR="mkdir"} 142e35772b2Smrg: ${MV="mv -f"} 143e35772b2Smrg: ${RM="rm -f"} 144e35772b2Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145e35772b2Smrg: ${Xsed="$SED -e 1s/^X//"} 146e35772b2Smrg 147e35772b2Smrg# Global variables: 148e35772b2SmrgEXIT_SUCCESS=0 149e35772b2SmrgEXIT_FAILURE=1 150e35772b2SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151e35772b2SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152e35772b2Smrg 153e35772b2Smrgexit_status=$EXIT_SUCCESS 15472b676d7Smrg 15572b676d7Smrg# Make sure IFS has a sensible default 15672b676d7Smrglt_nl=' 15772b676d7Smrg' 15872b676d7SmrgIFS=" $lt_nl" 15972b676d7Smrg 160e35772b2Smrgdirname="s,/[^/]*$,," 161e35772b2Smrgbasename="s,^.*/,," 162e35772b2Smrg 16374c14cd6Smrg# func_dirname file append nondir_replacement 16474c14cd6Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 16574c14cd6Smrg# otherwise set result to NONDIR_REPLACEMENT. 16674c14cd6Smrgfunc_dirname () 16774c14cd6Smrg{ 16874c14cd6Smrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 16974c14cd6Smrg if test "X$func_dirname_result" = "X${1}"; then 17074c14cd6Smrg func_dirname_result="${3}" 17174c14cd6Smrg else 17274c14cd6Smrg func_dirname_result="$func_dirname_result${2}" 17374c14cd6Smrg fi 17474c14cd6Smrg} # func_dirname may be replaced by extended shell implementation 17574c14cd6Smrg 17674c14cd6Smrg 17774c14cd6Smrg# func_basename file 17874c14cd6Smrgfunc_basename () 17974c14cd6Smrg{ 18074c14cd6Smrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 18174c14cd6Smrg} # func_basename may be replaced by extended shell implementation 18274c14cd6Smrg 18374c14cd6Smrg 184e35772b2Smrg# func_dirname_and_basename file append nondir_replacement 185e35772b2Smrg# perform func_basename and func_dirname in a single function 186e35772b2Smrg# call: 187e35772b2Smrg# dirname: Compute the dirname of FILE. If nonempty, 188e35772b2Smrg# add APPEND to the result, otherwise set result 189e35772b2Smrg# to NONDIR_REPLACEMENT. 190e35772b2Smrg# value returned in "$func_dirname_result" 191e35772b2Smrg# basename: Compute filename of FILE. 192e35772b2Smrg# value retuned in "$func_basename_result" 193e35772b2Smrg# Implementation must be kept synchronized with func_dirname 194e35772b2Smrg# and func_basename. For efficiency, we do not delegate to 195e35772b2Smrg# those functions but instead duplicate the functionality here. 196e35772b2Smrgfunc_dirname_and_basename () 197e35772b2Smrg{ 19874c14cd6Smrg # Extract subdirectory from the argument. 19974c14cd6Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 20074c14cd6Smrg if test "X$func_dirname_result" = "X${1}"; then 20174c14cd6Smrg func_dirname_result="${3}" 20274c14cd6Smrg else 20374c14cd6Smrg func_dirname_result="$func_dirname_result${2}" 20474c14cd6Smrg fi 20574c14cd6Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 20674c14cd6Smrg} # func_dirname_and_basename may be replaced by extended shell implementation 20774c14cd6Smrg 20874c14cd6Smrg 20974c14cd6Smrg# func_stripname prefix suffix name 21074c14cd6Smrg# strip PREFIX and SUFFIX off of NAME. 21174c14cd6Smrg# PREFIX and SUFFIX must not contain globbing or regex special 21274c14cd6Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 21374c14cd6Smrg# dot (in which case that matches only a dot). 21474c14cd6Smrg# func_strip_suffix prefix name 21574c14cd6Smrgfunc_stripname () 21674c14cd6Smrg{ 21774c14cd6Smrg case ${2} in 21874c14cd6Smrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 21974c14cd6Smrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 22074c14cd6Smrg esac 22174c14cd6Smrg} # func_stripname may be replaced by extended shell implementation 22274c14cd6Smrg 22374c14cd6Smrg 22474c14cd6Smrg# These SED scripts presuppose an absolute path with a trailing slash. 22574c14cd6Smrgpathcar='s,^/\([^/]*\).*$,\1,' 22674c14cd6Smrgpathcdr='s,^/[^/]*,,' 22774c14cd6Smrgremovedotparts=':dotsl 22874c14cd6Smrg s@/\./@/@g 22974c14cd6Smrg t dotsl 23074c14cd6Smrg s,/\.$,/,' 23174c14cd6Smrgcollapseslashes='s@/\{1,\}@/@g' 23274c14cd6Smrgfinalslash='s,/*$,/,' 23374c14cd6Smrg 23474c14cd6Smrg# func_normal_abspath PATH 23574c14cd6Smrg# Remove doubled-up and trailing slashes, "." path components, 23674c14cd6Smrg# and cancel out any ".." path components in PATH after making 23774c14cd6Smrg# it an absolute path. 23874c14cd6Smrg# value returned in "$func_normal_abspath_result" 23974c14cd6Smrgfunc_normal_abspath () 24074c14cd6Smrg{ 24174c14cd6Smrg # Start from root dir and reassemble the path. 24274c14cd6Smrg func_normal_abspath_result= 24374c14cd6Smrg func_normal_abspath_tpath=$1 24474c14cd6Smrg func_normal_abspath_altnamespace= 24574c14cd6Smrg case $func_normal_abspath_tpath in 24674c14cd6Smrg "") 24774c14cd6Smrg # Empty path, that just means $cwd. 24874c14cd6Smrg func_stripname '' '/' "`pwd`" 24974c14cd6Smrg func_normal_abspath_result=$func_stripname_result 25074c14cd6Smrg return 25174c14cd6Smrg ;; 25274c14cd6Smrg # The next three entries are used to spot a run of precisely 25374c14cd6Smrg # two leading slashes without using negated character classes; 25474c14cd6Smrg # we take advantage of case's first-match behaviour. 25574c14cd6Smrg ///*) 25674c14cd6Smrg # Unusual form of absolute path, do nothing. 25774c14cd6Smrg ;; 25874c14cd6Smrg //*) 25974c14cd6Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 26074c14cd6Smrg # and for example Cygwin uses it to access remote file shares 26174c14cd6Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 26274c14cd6Smrg func_normal_abspath_altnamespace=/ 26374c14cd6Smrg ;; 26474c14cd6Smrg /*) 26574c14cd6Smrg # Absolute path, do nothing. 26674c14cd6Smrg ;; 26774c14cd6Smrg *) 26874c14cd6Smrg # Relative path, prepend $cwd. 26974c14cd6Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 27074c14cd6Smrg ;; 27174c14cd6Smrg esac 27274c14cd6Smrg # Cancel out all the simple stuff to save iterations. We also want 27374c14cd6Smrg # the path to end with a slash for ease of parsing, so make sure 27474c14cd6Smrg # there is one (and only one) here. 27574c14cd6Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 27674c14cd6Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 27774c14cd6Smrg while :; do 27874c14cd6Smrg # Processed it all yet? 27974c14cd6Smrg if test "$func_normal_abspath_tpath" = / ; then 28074c14cd6Smrg # If we ascended to the root using ".." the result may be empty now. 28174c14cd6Smrg if test -z "$func_normal_abspath_result" ; then 28274c14cd6Smrg func_normal_abspath_result=/ 28374c14cd6Smrg fi 28474c14cd6Smrg break 28574c14cd6Smrg fi 28674c14cd6Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 28774c14cd6Smrg -e "$pathcar"` 28874c14cd6Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 28974c14cd6Smrg -e "$pathcdr"` 29074c14cd6Smrg # Figure out what to do with it 29174c14cd6Smrg case $func_normal_abspath_tcomponent in 29274c14cd6Smrg "") 29374c14cd6Smrg # Trailing empty path component, ignore it. 29474c14cd6Smrg ;; 29574c14cd6Smrg ..) 29674c14cd6Smrg # Parent dir; strip last assembled component from result. 29774c14cd6Smrg func_dirname "$func_normal_abspath_result" 29874c14cd6Smrg func_normal_abspath_result=$func_dirname_result 29974c14cd6Smrg ;; 30074c14cd6Smrg *) 30174c14cd6Smrg # Actual path component, append it. 30274c14cd6Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 30374c14cd6Smrg ;; 30474c14cd6Smrg esac 30574c14cd6Smrg done 30674c14cd6Smrg # Restore leading double-slash if one was found on entry. 30774c14cd6Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308e35772b2Smrg} 30972b676d7Smrg 31074c14cd6Smrg# func_relative_path SRCDIR DSTDIR 31174c14cd6Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 31274c14cd6Smrg# slash if non-empty, suitable for immediately appending a filename 31374c14cd6Smrg# without needing to append a separator. 31474c14cd6Smrg# value returned in "$func_relative_path_result" 31574c14cd6Smrgfunc_relative_path () 31674c14cd6Smrg{ 31774c14cd6Smrg func_relative_path_result= 31874c14cd6Smrg func_normal_abspath "$1" 31974c14cd6Smrg func_relative_path_tlibdir=$func_normal_abspath_result 32074c14cd6Smrg func_normal_abspath "$2" 32174c14cd6Smrg func_relative_path_tbindir=$func_normal_abspath_result 32274c14cd6Smrg 32374c14cd6Smrg # Ascend the tree starting from libdir 32474c14cd6Smrg while :; do 32574c14cd6Smrg # check if we have found a prefix of bindir 32674c14cd6Smrg case $func_relative_path_tbindir in 32774c14cd6Smrg $func_relative_path_tlibdir) 32874c14cd6Smrg # found an exact match 32974c14cd6Smrg func_relative_path_tcancelled= 33074c14cd6Smrg break 33174c14cd6Smrg ;; 33274c14cd6Smrg $func_relative_path_tlibdir*) 33374c14cd6Smrg # found a matching prefix 33474c14cd6Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 33574c14cd6Smrg func_relative_path_tcancelled=$func_stripname_result 33674c14cd6Smrg if test -z "$func_relative_path_result"; then 33774c14cd6Smrg func_relative_path_result=. 33874c14cd6Smrg fi 33974c14cd6Smrg break 34074c14cd6Smrg ;; 34174c14cd6Smrg *) 34274c14cd6Smrg func_dirname $func_relative_path_tlibdir 34374c14cd6Smrg func_relative_path_tlibdir=${func_dirname_result} 34474c14cd6Smrg if test "x$func_relative_path_tlibdir" = x ; then 34574c14cd6Smrg # Have to descend all the way to the root! 34674c14cd6Smrg func_relative_path_result=../$func_relative_path_result 34774c14cd6Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 34874c14cd6Smrg break 34974c14cd6Smrg fi 35074c14cd6Smrg func_relative_path_result=../$func_relative_path_result 35174c14cd6Smrg ;; 35274c14cd6Smrg esac 35374c14cd6Smrg done 354e35772b2Smrg 35574c14cd6Smrg # Now calculate path; take care to avoid doubling-up slashes. 35674c14cd6Smrg func_stripname '' '/' "$func_relative_path_result" 35774c14cd6Smrg func_relative_path_result=$func_stripname_result 35874c14cd6Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 35974c14cd6Smrg if test "x$func_stripname_result" != x ; then 36074c14cd6Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 36174c14cd6Smrg fi 36274c14cd6Smrg 36374c14cd6Smrg # Normalisation. If bindir is libdir, return empty string, 36474c14cd6Smrg # else relative path ending with a slash; either way, target 36574c14cd6Smrg # file name can be directly appended. 36674c14cd6Smrg if test ! -z "$func_relative_path_result"; then 36774c14cd6Smrg func_stripname './' '' "$func_relative_path_result/" 36874c14cd6Smrg func_relative_path_result=$func_stripname_result 36974c14cd6Smrg fi 37074c14cd6Smrg} 371e35772b2Smrg 372e35772b2Smrg# The name of this program: 373e35772b2Smrgfunc_dirname_and_basename "$progpath" 374e35772b2Smrgprogname=$func_basename_result 375e35772b2Smrg 376e35772b2Smrg# Make sure we have an absolute path for reexecution: 377e35772b2Smrgcase $progpath in 378e35772b2Smrg [\\/]*|[A-Za-z]:\\*) ;; 379e35772b2Smrg *[\\/]*) 380e35772b2Smrg progdir=$func_dirname_result 381e35772b2Smrg progdir=`cd "$progdir" && pwd` 382e35772b2Smrg progpath="$progdir/$progname" 383e35772b2Smrg ;; 384e35772b2Smrg *) 385e35772b2Smrg save_IFS="$IFS" 38674c14cd6Smrg IFS=${PATH_SEPARATOR-:} 387e35772b2Smrg for progdir in $PATH; do 388e35772b2Smrg IFS="$save_IFS" 389e35772b2Smrg test -x "$progdir/$progname" && break 390e35772b2Smrg done 391e35772b2Smrg IFS="$save_IFS" 392e35772b2Smrg test -n "$progdir" || progdir=`pwd` 393e35772b2Smrg progpath="$progdir/$progname" 394e35772b2Smrg ;; 395e35772b2Smrgesac 396e35772b2Smrg 397e35772b2Smrg# Sed substitution that helps us do robust quoting. It backslashifies 398e35772b2Smrg# metacharacters that are still active within double-quoted strings. 399e35772b2SmrgXsed="${SED}"' -e 1s/^X//' 400e35772b2Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401e35772b2Smrg 402e35772b2Smrg# Same as above, but do not quote variable references. 403e35772b2Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404e35772b2Smrg 40574c14cd6Smrg# Sed substitution that turns a string into a regex matching for the 40674c14cd6Smrg# string literally. 40774c14cd6Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 40874c14cd6Smrg 40974c14cd6Smrg# Sed substitution that converts a w32 file name or path 41074c14cd6Smrg# which contains forward slashes, into one that contains 41174c14cd6Smrg# (escaped) backslashes. A very naive implementation. 41274c14cd6Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 41374c14cd6Smrg 414e35772b2Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 415e35772b2Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416e35772b2Smrg# in input to double_quote_subst, that '$' was protected from expansion. 417e35772b2Smrg# Since each input `\' is now two `\'s, look for any number of runs of 418e35772b2Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419e35772b2Smrgbs='\\' 420e35772b2Smrgbs2='\\\\' 421e35772b2Smrgbs4='\\\\\\\\' 422e35772b2Smrgdollar='\$' 423e35772b2Smrgsed_double_backslash="\ 424e35772b2Smrg s/$bs4/&\\ 425e35772b2Smrg/g 426e35772b2Smrg s/^$bs2$dollar/$bs&/ 427e35772b2Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428e35772b2Smrg s/\n//g" 429e35772b2Smrg 430e35772b2Smrg# Standard options: 431e35772b2Smrgopt_dry_run=false 432e35772b2Smrgopt_help=false 433e35772b2Smrgopt_quiet=false 434e35772b2Smrgopt_verbose=false 435e35772b2Smrgopt_warning=: 436e35772b2Smrg 437e35772b2Smrg# func_echo arg... 438e35772b2Smrg# Echo program name prefixed message, along with the current mode 439e35772b2Smrg# name if it has been set yet. 440e35772b2Smrgfunc_echo () 441e35772b2Smrg{ 44274c14cd6Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443e35772b2Smrg} 444e35772b2Smrg 445e35772b2Smrg# func_verbose arg... 446e35772b2Smrg# Echo program name prefixed message in verbose mode only. 447e35772b2Smrgfunc_verbose () 448e35772b2Smrg{ 449e35772b2Smrg $opt_verbose && func_echo ${1+"$@"} 450e35772b2Smrg 451e35772b2Smrg # A bug in bash halts the script if the last line of a function 452e35772b2Smrg # fails when set -e is in force, so we need another command to 453e35772b2Smrg # work around that: 454e35772b2Smrg : 455e35772b2Smrg} 456e35772b2Smrg 45774c14cd6Smrg# func_echo_all arg... 45874c14cd6Smrg# Invoke $ECHO with all args, space-separated. 45974c14cd6Smrgfunc_echo_all () 46074c14cd6Smrg{ 46174c14cd6Smrg $ECHO "$*" 46274c14cd6Smrg} 46374c14cd6Smrg 464e35772b2Smrg# func_error arg... 465e35772b2Smrg# Echo program name prefixed message to standard error. 466e35772b2Smrgfunc_error () 467e35772b2Smrg{ 46874c14cd6Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469e35772b2Smrg} 470e35772b2Smrg 471e35772b2Smrg# func_warning arg... 472e35772b2Smrg# Echo program name prefixed warning message to standard error. 473e35772b2Smrgfunc_warning () 474e35772b2Smrg{ 47574c14cd6Smrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476e35772b2Smrg 477e35772b2Smrg # bash bug again: 478e35772b2Smrg : 479e35772b2Smrg} 480e35772b2Smrg 481e35772b2Smrg# func_fatal_error arg... 482e35772b2Smrg# Echo program name prefixed message to standard error, and exit. 483e35772b2Smrgfunc_fatal_error () 484e35772b2Smrg{ 485e35772b2Smrg func_error ${1+"$@"} 486e35772b2Smrg exit $EXIT_FAILURE 487e35772b2Smrg} 488e35772b2Smrg 489e35772b2Smrg# func_fatal_help arg... 490e35772b2Smrg# Echo program name prefixed message to standard error, followed by 491e35772b2Smrg# a help hint, and exit. 492e35772b2Smrgfunc_fatal_help () 493e35772b2Smrg{ 494e35772b2Smrg func_error ${1+"$@"} 495e35772b2Smrg func_fatal_error "$help" 496e35772b2Smrg} 497e35772b2Smrghelp="Try \`$progname --help' for more information." ## default 498e35772b2Smrg 499e35772b2Smrg 500e35772b2Smrg# func_grep expression filename 501e35772b2Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502e35772b2Smrgfunc_grep () 503e35772b2Smrg{ 504e35772b2Smrg $GREP "$1" "$2" >/dev/null 2>&1 505e35772b2Smrg} 506e35772b2Smrg 507e35772b2Smrg 508e35772b2Smrg# func_mkdir_p directory-path 509e35772b2Smrg# Make sure the entire path to DIRECTORY-PATH is available. 510e35772b2Smrgfunc_mkdir_p () 511e35772b2Smrg{ 512e35772b2Smrg my_directory_path="$1" 513e35772b2Smrg my_dir_list= 514e35772b2Smrg 515e35772b2Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516e35772b2Smrg 517e35772b2Smrg # Protect directory names starting with `-' 518e35772b2Smrg case $my_directory_path in 519e35772b2Smrg -*) my_directory_path="./$my_directory_path" ;; 520e35772b2Smrg esac 521e35772b2Smrg 522e35772b2Smrg # While some portion of DIR does not yet exist... 523e35772b2Smrg while test ! -d "$my_directory_path"; do 524e35772b2Smrg # ...make a list in topmost first order. Use a colon delimited 525e35772b2Smrg # list incase some portion of path contains whitespace. 526e35772b2Smrg my_dir_list="$my_directory_path:$my_dir_list" 527e35772b2Smrg 528e35772b2Smrg # If the last portion added has no slash in it, the list is done 529e35772b2Smrg case $my_directory_path in */*) ;; *) break ;; esac 530e35772b2Smrg 531e35772b2Smrg # ...otherwise throw away the child directory and loop 53274c14cd6Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533e35772b2Smrg done 53474c14cd6Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535e35772b2Smrg 536e35772b2Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 537e35772b2Smrg for my_dir in $my_dir_list; do 538e35772b2Smrg IFS="$save_mkdir_p_IFS" 539e35772b2Smrg # mkdir can fail with a `File exist' error if two processes 540e35772b2Smrg # try to create one of the directories concurrently. Don't 541e35772b2Smrg # stop in that case! 542e35772b2Smrg $MKDIR "$my_dir" 2>/dev/null || : 543e35772b2Smrg done 544e35772b2Smrg IFS="$save_mkdir_p_IFS" 545e35772b2Smrg 546e35772b2Smrg # Bail out if we (or some other process) failed to create a directory. 547e35772b2Smrg test -d "$my_directory_path" || \ 548e35772b2Smrg func_fatal_error "Failed to create \`$1'" 549e35772b2Smrg fi 550e35772b2Smrg} 55172b676d7Smrg 55272b676d7Smrg 55372b676d7Smrg# func_mktempdir [string] 55472b676d7Smrg# Make a temporary directory that won't clash with other running 55572b676d7Smrg# libtool processes, and avoids race conditions if possible. If 55672b676d7Smrg# given, STRING is the basename for that directory. 55772b676d7Smrgfunc_mktempdir () 55872b676d7Smrg{ 55972b676d7Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 56072b676d7Smrg 561e35772b2Smrg if test "$opt_dry_run" = ":"; then 56272b676d7Smrg # Return a directory name, but don't create it in dry-run mode 56372b676d7Smrg my_tmpdir="${my_template}-$$" 56472b676d7Smrg else 56572b676d7Smrg 56672b676d7Smrg # If mktemp works, use that first and foremost 56772b676d7Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 56872b676d7Smrg 56972b676d7Smrg if test ! -d "$my_tmpdir"; then 570e35772b2Smrg # Failing that, at least try and use $RANDOM to avoid a race 571e35772b2Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 57272b676d7Smrg 573e35772b2Smrg save_mktempdir_umask=`umask` 574e35772b2Smrg umask 0077 575e35772b2Smrg $MKDIR "$my_tmpdir" 576e35772b2Smrg umask $save_mktempdir_umask 57772b676d7Smrg fi 57872b676d7Smrg 57972b676d7Smrg # If we're not in dry-run mode, bomb out on failure 580e35772b2Smrg test -d "$my_tmpdir" || \ 581e35772b2Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 58272b676d7Smrg fi 58372b676d7Smrg 58474c14cd6Smrg $ECHO "$my_tmpdir" 58572b676d7Smrg} 58672b676d7Smrg 58772b676d7Smrg 588e35772b2Smrg# func_quote_for_eval arg 589e35772b2Smrg# Aesthetically quote ARG to be evaled later. 590e35772b2Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591e35772b2Smrg# is double-quoted, suitable for a subsequent eval, whereas 592e35772b2Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593e35772b2Smrg# which are still active within double quotes backslashified. 594e35772b2Smrgfunc_quote_for_eval () 59572b676d7Smrg{ 596e35772b2Smrg case $1 in 597e35772b2Smrg *[\\\`\"\$]*) 59874c14cd6Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599e35772b2Smrg *) 600e35772b2Smrg func_quote_for_eval_unquoted_result="$1" ;; 601e35772b2Smrg esac 602e35772b2Smrg 603e35772b2Smrg case $func_quote_for_eval_unquoted_result in 604e35772b2Smrg # Double-quote args containing shell metacharacters to delay 605e35772b2Smrg # word splitting, command substitution and and variable 606e35772b2Smrg # expansion for a subsequent eval. 607e35772b2Smrg # Many Bourne shells cannot handle close brackets correctly 608e35772b2Smrg # in scan sets, so we specify it separately. 609e35772b2Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610e35772b2Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611e35772b2Smrg ;; 612e35772b2Smrg *) 613e35772b2Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 61472b676d7Smrg esac 61572b676d7Smrg} 61672b676d7Smrg 61772b676d7Smrg 618e35772b2Smrg# func_quote_for_expand arg 619e35772b2Smrg# Aesthetically quote ARG to be evaled later; same as above, 620e35772b2Smrg# but do not quote variable references. 621e35772b2Smrgfunc_quote_for_expand () 62272b676d7Smrg{ 623e35772b2Smrg case $1 in 624e35772b2Smrg *[\\\`\"]*) 62574c14cd6Smrg my_arg=`$ECHO "$1" | $SED \ 626e35772b2Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 62772b676d7Smrg *) 628e35772b2Smrg my_arg="$1" ;; 629e35772b2Smrg esac 630e35772b2Smrg 631e35772b2Smrg case $my_arg in 632e35772b2Smrg # Double-quote args containing shell metacharacters to delay 633e35772b2Smrg # word splitting and command substitution for a subsequent eval. 634e35772b2Smrg # Many Bourne shells cannot handle close brackets correctly 635e35772b2Smrg # in scan sets, so we specify it separately. 636e35772b2Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637e35772b2Smrg my_arg="\"$my_arg\"" 638e35772b2Smrg ;; 639e35772b2Smrg esac 640e35772b2Smrg 641e35772b2Smrg func_quote_for_expand_result="$my_arg" 64272b676d7Smrg} 64372b676d7Smrg 64472b676d7Smrg 645e35772b2Smrg# func_show_eval cmd [fail_exp] 646e35772b2Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647e35772b2Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648e35772b2Smrg# is given, then evaluate it. 649e35772b2Smrgfunc_show_eval () 65072b676d7Smrg{ 651e35772b2Smrg my_cmd="$1" 652e35772b2Smrg my_fail_exp="${2-:}" 65372b676d7Smrg 654e35772b2Smrg ${opt_silent-false} || { 655e35772b2Smrg func_quote_for_expand "$my_cmd" 656e35772b2Smrg eval "func_echo $func_quote_for_expand_result" 657e35772b2Smrg } 658e35772b2Smrg 659e35772b2Smrg if ${opt_dry_run-false}; then :; else 660e35772b2Smrg eval "$my_cmd" 661e35772b2Smrg my_status=$? 662e35772b2Smrg if test "$my_status" -eq 0; then :; else 663e35772b2Smrg eval "(exit $my_status); $my_fail_exp" 664e35772b2Smrg fi 66572b676d7Smrg fi 66672b676d7Smrg} 66772b676d7Smrg 668e35772b2Smrg 669e35772b2Smrg# func_show_eval_locale cmd [fail_exp] 670e35772b2Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671e35772b2Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672e35772b2Smrg# is given, then evaluate it. Use the saved locale for evaluation. 673e35772b2Smrgfunc_show_eval_locale () 67472b676d7Smrg{ 675e35772b2Smrg my_cmd="$1" 676e35772b2Smrg my_fail_exp="${2-:}" 677e35772b2Smrg 678e35772b2Smrg ${opt_silent-false} || { 679e35772b2Smrg func_quote_for_expand "$my_cmd" 680e35772b2Smrg eval "func_echo $func_quote_for_expand_result" 681e35772b2Smrg } 682e35772b2Smrg 683e35772b2Smrg if ${opt_dry_run-false}; then :; else 684e35772b2Smrg eval "$lt_user_locale 685e35772b2Smrg $my_cmd" 686e35772b2Smrg my_status=$? 687e35772b2Smrg eval "$lt_safe_locale" 688e35772b2Smrg if test "$my_status" -eq 0; then :; else 689e35772b2Smrg eval "(exit $my_status); $my_fail_exp" 690e35772b2Smrg fi 69172b676d7Smrg fi 692e35772b2Smrg} 69372b676d7Smrg 69474c14cd6Smrg# func_tr_sh 69574c14cd6Smrg# Turn $1 into a string suitable for a shell variable name. 69674c14cd6Smrg# Result is stored in $func_tr_sh_result. All characters 69774c14cd6Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 69874c14cd6Smrg# if $1 begins with a digit, a '_' is prepended as well. 69974c14cd6Smrgfunc_tr_sh () 70074c14cd6Smrg{ 70174c14cd6Smrg case $1 in 70274c14cd6Smrg [0-9]* | *[!a-zA-Z0-9_]*) 70374c14cd6Smrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 70474c14cd6Smrg ;; 70574c14cd6Smrg * ) 70674c14cd6Smrg func_tr_sh_result=$1 70774c14cd6Smrg ;; 70874c14cd6Smrg esac 70974c14cd6Smrg} 710e35772b2Smrg 711e35772b2Smrg 712e35772b2Smrg# func_version 713e35772b2Smrg# Echo version message to standard output and exit. 714e35772b2Smrgfunc_version () 715e35772b2Smrg{ 71674c14cd6Smrg $opt_debug 71774c14cd6Smrg 71874c14cd6Smrg $SED -n '/(C)/!b go 71974c14cd6Smrg :more 72074c14cd6Smrg /\./!{ 72174c14cd6Smrg N 72274c14cd6Smrg s/\n# / / 72374c14cd6Smrg b more 72474c14cd6Smrg } 72574c14cd6Smrg :go 72674c14cd6Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 727e35772b2Smrg s/^# // 728e35772b2Smrg s/^# *$// 729e35772b2Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730e35772b2Smrg p 731e35772b2Smrg }' < "$progpath" 732e35772b2Smrg exit $? 733e35772b2Smrg} 734e35772b2Smrg 735e35772b2Smrg# func_usage 736e35772b2Smrg# Echo short help message to standard output and exit. 737e35772b2Smrgfunc_usage () 738e35772b2Smrg{ 73974c14cd6Smrg $opt_debug 74074c14cd6Smrg 74174c14cd6Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 742e35772b2Smrg s/^# // 743e35772b2Smrg s/^# *$// 744e35772b2Smrg s/\$progname/'$progname'/ 745e35772b2Smrg p 746e35772b2Smrg }' < "$progpath" 74774c14cd6Smrg echo 748e35772b2Smrg $ECHO "run \`$progname --help | more' for full usage" 749e35772b2Smrg exit $? 750e35772b2Smrg} 751e35772b2Smrg 75274c14cd6Smrg# func_help [NOEXIT] 75374c14cd6Smrg# Echo long help message to standard output and exit, 75474c14cd6Smrg# unless 'noexit' is passed as argument. 755e35772b2Smrgfunc_help () 756e35772b2Smrg{ 75774c14cd6Smrg $opt_debug 75874c14cd6Smrg 759e35772b2Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 76074c14cd6Smrg :print 761e35772b2Smrg s/^# // 762e35772b2Smrg s/^# *$// 763e35772b2Smrg s*\$progname*'$progname'* 764e35772b2Smrg s*\$host*'"$host"'* 765e35772b2Smrg s*\$SHELL*'"$SHELL"'* 766e35772b2Smrg s*\$LTCC*'"$LTCC"'* 767e35772b2Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 768e35772b2Smrg s*\$LD*'"$LD"'* 769e35772b2Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 77074c14cd6Smrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 77174c14cd6Smrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772e35772b2Smrg p 77374c14cd6Smrg d 77474c14cd6Smrg } 77574c14cd6Smrg /^# .* home page:/b print 77674c14cd6Smrg /^# General help using/b print 77774c14cd6Smrg ' < "$progpath" 77874c14cd6Smrg ret=$? 77974c14cd6Smrg if test -z "$1"; then 78074c14cd6Smrg exit $ret 78174c14cd6Smrg fi 782e35772b2Smrg} 783e35772b2Smrg 784e35772b2Smrg# func_missing_arg argname 785e35772b2Smrg# Echo program name prefixed message to standard error and set global 786e35772b2Smrg# exit_cmd. 787e35772b2Smrgfunc_missing_arg () 788e35772b2Smrg{ 78974c14cd6Smrg $opt_debug 79074c14cd6Smrg 79174c14cd6Smrg func_error "missing argument for $1." 792e35772b2Smrg exit_cmd=exit 79372b676d7Smrg} 79472b676d7Smrg 79572b676d7Smrg 79674c14cd6Smrg# func_split_short_opt shortopt 79774c14cd6Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 79874c14cd6Smrg# variables after splitting SHORTOPT after the 2nd character. 79974c14cd6Smrgfunc_split_short_opt () 80074c14cd6Smrg{ 80174c14cd6Smrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 80274c14cd6Smrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 80372b676d7Smrg 80474c14cd6Smrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 80574c14cd6Smrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 80674c14cd6Smrg} # func_split_short_opt may be replaced by extended shell implementation 80774c14cd6Smrg 80874c14cd6Smrg 80974c14cd6Smrg# func_split_long_opt longopt 81074c14cd6Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 81174c14cd6Smrg# variables after splitting LONGOPT at the `=' sign. 81274c14cd6Smrgfunc_split_long_opt () 81374c14cd6Smrg{ 81474c14cd6Smrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 81574c14cd6Smrg my_sed_long_arg='1s/^--[^=]*=//' 81674c14cd6Smrg 81774c14cd6Smrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 81874c14cd6Smrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 81974c14cd6Smrg} # func_split_long_opt may be replaced by extended shell implementation 82074c14cd6Smrg 82174c14cd6Smrgexit_cmd=: 822e35772b2Smrg 823e35772b2Smrg 824e35772b2Smrg 82572b676d7Smrg 82672b676d7Smrg 827e35772b2Smrgmagic="%%%MAGIC variable%%%" 828e35772b2Smrgmagic_exe="%%%MAGIC EXE variable%%%" 82972b676d7Smrg 830e35772b2Smrg# Global variables. 831e35772b2Smrgnonopt= 832e35772b2Smrgpreserve_args= 833e35772b2Smrglo2o="s/\\.lo\$/.${objext}/" 834e35772b2Smrgo2lo="s/\\.${objext}\$/.lo/" 835e35772b2Smrgextracted_archives= 836e35772b2Smrgextracted_serial=0 83772b676d7Smrg 838e35772b2Smrg# If this variable is set in any of the actions, the command in it 839e35772b2Smrg# will be execed at the end. This prevents here-documents from being 840e35772b2Smrg# left over by shells. 841e35772b2Smrgexec_cmd= 842e35772b2Smrg 84374c14cd6Smrg# func_append var value 84474c14cd6Smrg# Append VALUE to the end of shell variable VAR. 84574c14cd6Smrgfunc_append () 84674c14cd6Smrg{ 84774c14cd6Smrg eval "${1}=\$${1}\${2}" 84874c14cd6Smrg} # func_append may be replaced by extended shell implementation 84974c14cd6Smrg 85074c14cd6Smrg# func_append_quoted var value 85174c14cd6Smrg# Quote VALUE and append to the end of shell variable VAR, separated 85274c14cd6Smrg# by a space. 85374c14cd6Smrgfunc_append_quoted () 85474c14cd6Smrg{ 85574c14cd6Smrg func_quote_for_eval "${2}" 85674c14cd6Smrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 85774c14cd6Smrg} # func_append_quoted may be replaced by extended shell implementation 85874c14cd6Smrg 85974c14cd6Smrg 86074c14cd6Smrg# func_arith arithmetic-term... 86174c14cd6Smrgfunc_arith () 86274c14cd6Smrg{ 86374c14cd6Smrg func_arith_result=`expr "${@}"` 86474c14cd6Smrg} # func_arith may be replaced by extended shell implementation 86574c14cd6Smrg 86674c14cd6Smrg 86774c14cd6Smrg# func_len string 86874c14cd6Smrg# STRING may not start with a hyphen. 86974c14cd6Smrgfunc_len () 87074c14cd6Smrg{ 87174c14cd6Smrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 87274c14cd6Smrg} # func_len may be replaced by extended shell implementation 87374c14cd6Smrg 87474c14cd6Smrg 87574c14cd6Smrg# func_lo2o object 87674c14cd6Smrgfunc_lo2o () 87774c14cd6Smrg{ 87874c14cd6Smrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 87974c14cd6Smrg} # func_lo2o may be replaced by extended shell implementation 88074c14cd6Smrg 88174c14cd6Smrg 88274c14cd6Smrg# func_xform libobj-or-source 88374c14cd6Smrgfunc_xform () 88474c14cd6Smrg{ 88574c14cd6Smrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 88674c14cd6Smrg} # func_xform may be replaced by extended shell implementation 88774c14cd6Smrg 88874c14cd6Smrg 889e35772b2Smrg# func_fatal_configuration arg... 890e35772b2Smrg# Echo program name prefixed message to standard error, followed by 891e35772b2Smrg# a configuration failure hint, and exit. 892e35772b2Smrgfunc_fatal_configuration () 893e35772b2Smrg{ 894e35772b2Smrg func_error ${1+"$@"} 895e35772b2Smrg func_error "See the $PACKAGE documentation for more information." 896e35772b2Smrg func_fatal_error "Fatal configuration error." 897e35772b2Smrg} 89872b676d7Smrg 8991fd23544Smrg 900e35772b2Smrg# func_config 901e35772b2Smrg# Display the configuration for all the tags in this script. 902e35772b2Smrgfunc_config () 903e35772b2Smrg{ 904e35772b2Smrg re_begincf='^# ### BEGIN LIBTOOL' 905e35772b2Smrg re_endcf='^# ### END LIBTOOL' 906e35772b2Smrg 907e35772b2Smrg # Default configuration. 908e35772b2Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 90972b676d7Smrg 91072b676d7Smrg # Now print the configurations for the tags. 91172b676d7Smrg for tagname in $taglist; do 912e35772b2Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 91372b676d7Smrg done 91472b676d7Smrg 915e35772b2Smrg exit $? 916e35772b2Smrg} 91772b676d7Smrg 918e35772b2Smrg# func_features 919e35772b2Smrg# Display the features supported by this script. 920e35772b2Smrgfunc_features () 921e35772b2Smrg{ 92274c14cd6Smrg echo "host: $host" 92372b676d7Smrg if test "$build_libtool_libs" = yes; then 92474c14cd6Smrg echo "enable shared libraries" 92572b676d7Smrg else 92674c14cd6Smrg echo "disable shared libraries" 92772b676d7Smrg fi 92872b676d7Smrg if test "$build_old_libs" = yes; then 92974c14cd6Smrg echo "enable static libraries" 93072b676d7Smrg else 93174c14cd6Smrg echo "disable static libraries" 93272b676d7Smrg fi 933e35772b2Smrg 93472b676d7Smrg exit $? 935e35772b2Smrg} 93672b676d7Smrg 937e35772b2Smrg# func_enable_tag tagname 938e35772b2Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939e35772b2Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940e35772b2Smrg# variable here. 941e35772b2Smrgfunc_enable_tag () 942e35772b2Smrg{ 943e35772b2Smrg # Global variable: 944e35772b2Smrg tagname="$1" 94572b676d7Smrg 946e35772b2Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947e35772b2Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948e35772b2Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 94972b676d7Smrg 950e35772b2Smrg # Validate tagname. 951e35772b2Smrg case $tagname in 952e35772b2Smrg *[!-_A-Za-z0-9,/]*) 953e35772b2Smrg func_fatal_error "invalid tag name: $tagname" 954e35772b2Smrg ;; 955e35772b2Smrg esac 95672b676d7Smrg 957e35772b2Smrg # Don't test for the "default" C tag, as we know it's 958e35772b2Smrg # there but not specially marked. 959e35772b2Smrg case $tagname in 960e35772b2Smrg CC) ;; 961e35772b2Smrg *) 962e35772b2Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963e35772b2Smrg taglist="$taglist $tagname" 964e35772b2Smrg 965e35772b2Smrg # Evaluate the configuration. Be careful to quote the path 966e35772b2Smrg # and the sed script, to avoid splitting on whitespace, but 967e35772b2Smrg # also don't use non-portable quotes within backquotes within 968e35772b2Smrg # quotes we have to do it in 2 steps: 969e35772b2Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970e35772b2Smrg eval "$extractedcf" 971e35772b2Smrg else 972e35772b2Smrg func_error "ignoring unknown tag $tagname" 973e35772b2Smrg fi 974e35772b2Smrg ;; 975e35772b2Smrg esac 976e35772b2Smrg} 977e35772b2Smrg 97874c14cd6Smrg# func_check_version_match 97974c14cd6Smrg# Ensure that we are using m4 macros, and libtool script from the same 98074c14cd6Smrg# release of libtool. 98174c14cd6Smrgfunc_check_version_match () 982e35772b2Smrg{ 98374c14cd6Smrg if test "$package_revision" != "$macro_revision"; then 98474c14cd6Smrg if test "$VERSION" != "$macro_version"; then 98574c14cd6Smrg if test -z "$macro_version"; then 98674c14cd6Smrg cat >&2 <<_LT_EOF 98774c14cd6Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 98874c14cd6Smrg$progname: definition of this LT_INIT comes from an older release. 98974c14cd6Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 99074c14cd6Smrg$progname: and run autoconf again. 99174c14cd6Smrg_LT_EOF 99274c14cd6Smrg else 99374c14cd6Smrg cat >&2 <<_LT_EOF 99474c14cd6Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 99574c14cd6Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 99674c14cd6Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 99774c14cd6Smrg$progname: and run autoconf again. 99874c14cd6Smrg_LT_EOF 99974c14cd6Smrg fi 100074c14cd6Smrg else 100174c14cd6Smrg cat >&2 <<_LT_EOF 100274c14cd6Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 100374c14cd6Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 100474c14cd6Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 100574c14cd6Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 100674c14cd6Smrg_LT_EOF 100774c14cd6Smrg fi 100874c14cd6Smrg 100974c14cd6Smrg exit $EXIT_MISMATCH 101074c14cd6Smrg fi 101174c14cd6Smrg} 101274c14cd6Smrg 101374c14cd6Smrg 101474c14cd6Smrg# Shorthand for --mode=foo, only valid as the first argument 101574c14cd6Smrgcase $1 in 101674c14cd6Smrgclean|clea|cle|cl) 101774c14cd6Smrg shift; set dummy --mode clean ${1+"$@"}; shift 101874c14cd6Smrg ;; 101974c14cd6Smrgcompile|compil|compi|comp|com|co|c) 102074c14cd6Smrg shift; set dummy --mode compile ${1+"$@"}; shift 102174c14cd6Smrg ;; 102274c14cd6Smrgexecute|execut|execu|exec|exe|ex|e) 102374c14cd6Smrg shift; set dummy --mode execute ${1+"$@"}; shift 102474c14cd6Smrg ;; 102574c14cd6Smrgfinish|finis|fini|fin|fi|f) 102674c14cd6Smrg shift; set dummy --mode finish ${1+"$@"}; shift 102774c14cd6Smrg ;; 102874c14cd6Smrginstall|instal|insta|inst|ins|in|i) 102974c14cd6Smrg shift; set dummy --mode install ${1+"$@"}; shift 103074c14cd6Smrg ;; 103174c14cd6Smrglink|lin|li|l) 103274c14cd6Smrg shift; set dummy --mode link ${1+"$@"}; shift 103374c14cd6Smrg ;; 103474c14cd6Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 103574c14cd6Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 103674c14cd6Smrg ;; 103774c14cd6Smrgesac 103874c14cd6Smrg 103974c14cd6Smrg 104074c14cd6Smrg 104174c14cd6Smrg# Option defaults: 104274c14cd6Smrgopt_debug=: 104374c14cd6Smrgopt_dry_run=false 104474c14cd6Smrgopt_config=false 104574c14cd6Smrgopt_preserve_dup_deps=false 104674c14cd6Smrgopt_features=false 104774c14cd6Smrgopt_finish=false 104874c14cd6Smrgopt_help=false 104974c14cd6Smrgopt_help_all=false 105074c14cd6Smrgopt_silent=: 105174c14cd6Smrgopt_warning=: 105274c14cd6Smrgopt_verbose=: 105374c14cd6Smrgopt_silent=false 105474c14cd6Smrgopt_verbose=false 105572b676d7Smrg 105672b676d7Smrg 105774c14cd6Smrg# Parse options once, thoroughly. This comes as soon as possible in the 105874c14cd6Smrg# script to make things like `--version' happen as quickly as we can. 105974c14cd6Smrg{ 106074c14cd6Smrg # this just eases exit handling 106174c14cd6Smrg while test $# -gt 0; do 1062e35772b2Smrg opt="$1" 1063e35772b2Smrg shift 1064e35772b2Smrg case $opt in 106574c14cd6Smrg --debug|-x) opt_debug='set -x' 1066e35772b2Smrg func_echo "enabling shell trace mode" 1067e35772b2Smrg $opt_debug 1068e35772b2Smrg ;; 106974c14cd6Smrg --dry-run|--dryrun|-n) 107074c14cd6Smrg opt_dry_run=: 1071e35772b2Smrg ;; 107274c14cd6Smrg --config) 107374c14cd6Smrg opt_config=: 107474c14cd6Smrgfunc_config 107574c14cd6Smrg ;; 107674c14cd6Smrg --dlopen|-dlopen) 107774c14cd6Smrg optarg="$1" 107874c14cd6Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 107974c14cd6Smrg}$optarg" 1080e35772b2Smrg shift 1081e35772b2Smrg ;; 1082e35772b2Smrg --preserve-dup-deps) 108374c14cd6Smrg opt_preserve_dup_deps=: 1084e35772b2Smrg ;; 108574c14cd6Smrg --features) 108674c14cd6Smrg opt_features=: 108774c14cd6Smrgfunc_features 108874c14cd6Smrg ;; 108974c14cd6Smrg --finish) 109074c14cd6Smrg opt_finish=: 109174c14cd6Smrgset dummy --mode finish ${1+"$@"}; shift 109274c14cd6Smrg ;; 109374c14cd6Smrg --help) 109474c14cd6Smrg opt_help=: 109574c14cd6Smrg ;; 109674c14cd6Smrg --help-all) 109774c14cd6Smrg opt_help_all=: 109874c14cd6Smrgopt_help=': help-all' 109974c14cd6Smrg ;; 110074c14cd6Smrg --mode) 110174c14cd6Smrg test $# = 0 && func_missing_arg $opt && break 110274c14cd6Smrg optarg="$1" 110374c14cd6Smrg opt_mode="$optarg" 110474c14cd6Smrgcase $optarg in 110574c14cd6Smrg # Valid mode arguments: 110674c14cd6Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 110774c14cd6Smrg 110874c14cd6Smrg # Catch anything else as an error 110974c14cd6Smrg *) func_error "invalid argument for $opt" 111074c14cd6Smrg exit_cmd=exit 111174c14cd6Smrg break 111274c14cd6Smrg ;; 111374c14cd6Smrgesac 111474c14cd6Smrg shift 111574c14cd6Smrg ;; 111674c14cd6Smrg --no-silent|--no-quiet) 1117e35772b2Smrg opt_silent=false 111874c14cd6Smrgfunc_append preserve_args " $opt" 1119e35772b2Smrg ;; 112074c14cd6Smrg --no-warning|--no-warn) 112174c14cd6Smrg opt_warning=false 112274c14cd6Smrgfunc_append preserve_args " $opt" 112374c14cd6Smrg ;; 112474c14cd6Smrg --no-verbose) 112574c14cd6Smrg opt_verbose=false 112674c14cd6Smrgfunc_append preserve_args " $opt" 112774c14cd6Smrg ;; 112874c14cd6Smrg --silent|--quiet) 112974c14cd6Smrg opt_silent=: 113074c14cd6Smrgfunc_append preserve_args " $opt" 113174c14cd6Smrg opt_verbose=false 113274c14cd6Smrg ;; 113374c14cd6Smrg --verbose|-v) 113474c14cd6Smrg opt_verbose=: 113574c14cd6Smrgfunc_append preserve_args " $opt" 113674c14cd6Smrgopt_silent=false 113774c14cd6Smrg ;; 113874c14cd6Smrg --tag) 113974c14cd6Smrg test $# = 0 && func_missing_arg $opt && break 114074c14cd6Smrg optarg="$1" 114174c14cd6Smrg opt_tag="$optarg" 114274c14cd6Smrgfunc_append preserve_args " $opt $optarg" 114374c14cd6Smrgfunc_enable_tag "$optarg" 1144e35772b2Smrg shift 1145e35772b2Smrg ;; 1146e35772b2Smrg 114774c14cd6Smrg -\?|-h) func_usage ;; 114874c14cd6Smrg --help) func_help ;; 114974c14cd6Smrg --version) func_version ;; 115074c14cd6Smrg 1151e35772b2Smrg # Separate optargs to long options: 115274c14cd6Smrg --*=*) 115374c14cd6Smrg func_split_long_opt "$opt" 115474c14cd6Smrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155e35772b2Smrg shift 1156e35772b2Smrg ;; 1157e35772b2Smrg 115874c14cd6Smrg # Separate non-argument short options: 115974c14cd6Smrg -\?*|-h*|-n*|-v*) 116074c14cd6Smrg func_split_short_opt "$opt" 116174c14cd6Smrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 116274c14cd6Smrg shift 1163e35772b2Smrg ;; 116474c14cd6Smrg 116574c14cd6Smrg --) break ;; 116674c14cd6Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 116774c14cd6Smrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168e35772b2Smrg esac 1169e35772b2Smrg done 1170e35772b2Smrg 117174c14cd6Smrg # Validate options: 117274c14cd6Smrg 117374c14cd6Smrg # save first non-option argument 117474c14cd6Smrg if test "$#" -gt 0; then 117574c14cd6Smrg nonopt="$opt" 117674c14cd6Smrg shift 117774c14cd6Smrg fi 117874c14cd6Smrg 117974c14cd6Smrg # preserve --debug 118074c14cd6Smrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181e35772b2Smrg 1182e35772b2Smrg case $host in 1183e35772b2Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 1184e35772b2Smrg # don't eliminate duplications in $postdeps and $predeps 1185e35772b2Smrg opt_duplicate_compiler_generated_deps=: 118672b676d7Smrg ;; 118772b676d7Smrg *) 118874c14cd6Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189e35772b2Smrg ;; 1190e35772b2Smrg esac 119172b676d7Smrg 119274c14cd6Smrg $opt_help || { 119374c14cd6Smrg # Sanity checks first: 119474c14cd6Smrg func_check_version_match 1195e35772b2Smrg 119674c14cd6Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 119774c14cd6Smrg func_fatal_configuration "not configured to build any kind of library" 1198e35772b2Smrg fi 1199e35772b2Smrg 120074c14cd6Smrg # Darwin sucks 120174c14cd6Smrg eval std_shrext=\"$shrext_cmds\" 1202e35772b2Smrg 120374c14cd6Smrg # Only execute mode is allowed to have -dlopen flags. 120474c14cd6Smrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 120574c14cd6Smrg func_error "unrecognized option \`-dlopen'" 120674c14cd6Smrg $ECHO "$help" 1>&2 120774c14cd6Smrg exit $EXIT_FAILURE 120874c14cd6Smrg fi 120972b676d7Smrg 121074c14cd6Smrg # Change the help message to a mode-specific one. 121174c14cd6Smrg generic_help="$help" 121274c14cd6Smrg help="Try \`$progname --help --mode=$opt_mode' for more information." 121374c14cd6Smrg } 1214e35772b2Smrg 1215e35772b2Smrg 121674c14cd6Smrg # Bail if the options were screwed 121774c14cd6Smrg $exit_cmd $EXIT_FAILURE 121874c14cd6Smrg} 1219e35772b2Smrg 1220e35772b2Smrg 122172b676d7Smrg 122272b676d7Smrg 122374c14cd6Smrg## ----------- ## 122474c14cd6Smrg## Main. ## 122574c14cd6Smrg## ----------- ## 122672b676d7Smrg 1227e35772b2Smrg# func_lalib_p file 1228e35772b2Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229e35772b2Smrg# This function is only a basic sanity check; it will hardly flush out 1230e35772b2Smrg# determined imposters. 1231e35772b2Smrgfunc_lalib_p () 1232e35772b2Smrg{ 1233e35772b2Smrg test -f "$1" && 1234e35772b2Smrg $SED -e 4q "$1" 2>/dev/null \ 1235e35772b2Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236e35772b2Smrg} 123772b676d7Smrg 1238e35772b2Smrg# func_lalib_unsafe_p file 1239e35772b2Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240e35772b2Smrg# This function implements the same check as func_lalib_p without 1241e35772b2Smrg# resorting to external programs. To this end, it redirects stdin and 1242e35772b2Smrg# closes it afterwards, without saving the original file descriptor. 1243e35772b2Smrg# As a safety measure, use it only where a negative result would be 1244e35772b2Smrg# fatal anyway. Works if `file' does not exist. 1245e35772b2Smrgfunc_lalib_unsafe_p () 1246e35772b2Smrg{ 1247e35772b2Smrg lalib_p=no 1248e35772b2Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249e35772b2Smrg for lalib_p_l in 1 2 3 4 1250e35772b2Smrg do 1251e35772b2Smrg read lalib_p_line 1252e35772b2Smrg case "$lalib_p_line" in 1253e35772b2Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254e35772b2Smrg esac 1255e35772b2Smrg done 1256e35772b2Smrg exec 0<&5 5<&- 1257e35772b2Smrg fi 1258e35772b2Smrg test "$lalib_p" = yes 1259e35772b2Smrg} 126072b676d7Smrg 1261e35772b2Smrg# func_ltwrapper_script_p file 1262e35772b2Smrg# True iff FILE is a libtool wrapper script 1263e35772b2Smrg# This function is only a basic sanity check; it will hardly flush out 1264e35772b2Smrg# determined imposters. 1265e35772b2Smrgfunc_ltwrapper_script_p () 1266e35772b2Smrg{ 1267e35772b2Smrg func_lalib_p "$1" 1268e35772b2Smrg} 126972b676d7Smrg 1270e35772b2Smrg# func_ltwrapper_executable_p file 1271e35772b2Smrg# True iff FILE is a libtool wrapper executable 1272e35772b2Smrg# This function is only a basic sanity check; it will hardly flush out 1273e35772b2Smrg# determined imposters. 1274e35772b2Smrgfunc_ltwrapper_executable_p () 1275e35772b2Smrg{ 1276e35772b2Smrg func_ltwrapper_exec_suffix= 1277e35772b2Smrg case $1 in 1278e35772b2Smrg *.exe) ;; 1279e35772b2Smrg *) func_ltwrapper_exec_suffix=.exe ;; 1280e35772b2Smrg esac 1281e35772b2Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282e35772b2Smrg} 128372b676d7Smrg 1284e35772b2Smrg# func_ltwrapper_scriptname file 1285e35772b2Smrg# Assumes file is an ltwrapper_executable 1286e35772b2Smrg# uses $file to determine the appropriate filename for a 1287e35772b2Smrg# temporary ltwrapper_script. 1288e35772b2Smrgfunc_ltwrapper_scriptname () 1289e35772b2Smrg{ 129074c14cd6Smrg func_dirname_and_basename "$1" "" "." 129174c14cd6Smrg func_stripname '' '.exe' "$func_basename_result" 129274c14cd6Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293e35772b2Smrg} 1294e35772b2Smrg 1295e35772b2Smrg# func_ltwrapper_p file 1296e35772b2Smrg# True iff FILE is a libtool wrapper script or wrapper executable 1297e35772b2Smrg# This function is only a basic sanity check; it will hardly flush out 1298e35772b2Smrg# determined imposters. 1299e35772b2Smrgfunc_ltwrapper_p () 1300e35772b2Smrg{ 1301e35772b2Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302e35772b2Smrg} 1303e35772b2Smrg 1304e35772b2Smrg 1305e35772b2Smrg# func_execute_cmds commands fail_cmd 1306e35772b2Smrg# Execute tilde-delimited COMMANDS. 1307e35772b2Smrg# If FAIL_CMD is given, eval that upon failure. 1308e35772b2Smrg# FAIL_CMD may read-access the current command in variable CMD! 1309e35772b2Smrgfunc_execute_cmds () 1310e35772b2Smrg{ 1311e35772b2Smrg $opt_debug 1312e35772b2Smrg save_ifs=$IFS; IFS='~' 1313e35772b2Smrg for cmd in $1; do 1314e35772b2Smrg IFS=$save_ifs 1315e35772b2Smrg eval cmd=\"$cmd\" 1316e35772b2Smrg func_show_eval "$cmd" "${2-:}" 1317e35772b2Smrg done 1318e35772b2Smrg IFS=$save_ifs 1319e35772b2Smrg} 1320e35772b2Smrg 1321e35772b2Smrg 1322e35772b2Smrg# func_source file 1323e35772b2Smrg# Source FILE, adding directory component if necessary. 1324e35772b2Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325e35772b2Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326e35772b2Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327e35772b2Smrg# `FILE.' does not work on cygwin managed mounts. 1328e35772b2Smrgfunc_source () 1329e35772b2Smrg{ 1330e35772b2Smrg $opt_debug 1331e35772b2Smrg case $1 in 1332e35772b2Smrg */* | *\\*) . "$1" ;; 1333e35772b2Smrg *) . "./$1" ;; 1334e35772b2Smrg esac 1335e35772b2Smrg} 1336e35772b2Smrg 1337e35772b2Smrg 133874c14cd6Smrg# func_resolve_sysroot PATH 133974c14cd6Smrg# Replace a leading = in PATH with a sysroot. Store the result into 134074c14cd6Smrg# func_resolve_sysroot_result 134174c14cd6Smrgfunc_resolve_sysroot () 134274c14cd6Smrg{ 134374c14cd6Smrg func_resolve_sysroot_result=$1 134474c14cd6Smrg case $func_resolve_sysroot_result in 134574c14cd6Smrg =*) 134674c14cd6Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 134774c14cd6Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 134874c14cd6Smrg ;; 134974c14cd6Smrg esac 135074c14cd6Smrg} 135174c14cd6Smrg 135274c14cd6Smrg# func_replace_sysroot PATH 135374c14cd6Smrg# If PATH begins with the sysroot, replace it with = and 135474c14cd6Smrg# store the result into func_replace_sysroot_result. 135574c14cd6Smrgfunc_replace_sysroot () 135674c14cd6Smrg{ 135774c14cd6Smrg case "$lt_sysroot:$1" in 135874c14cd6Smrg ?*:"$lt_sysroot"*) 135974c14cd6Smrg func_stripname "$lt_sysroot" '' "$1" 136074c14cd6Smrg func_replace_sysroot_result="=$func_stripname_result" 136174c14cd6Smrg ;; 136274c14cd6Smrg *) 136374c14cd6Smrg # Including no sysroot. 136474c14cd6Smrg func_replace_sysroot_result=$1 136574c14cd6Smrg ;; 136674c14cd6Smrg esac 136774c14cd6Smrg} 136874c14cd6Smrg 1369e35772b2Smrg# func_infer_tag arg 1370e35772b2Smrg# Infer tagged configuration to use if any are available and 1371e35772b2Smrg# if one wasn't chosen via the "--tag" command line option. 1372e35772b2Smrg# Only attempt this if the compiler in the base compile 1373e35772b2Smrg# command doesn't match the default compiler. 1374e35772b2Smrg# arg is usually of the form 'gcc ...' 1375e35772b2Smrgfunc_infer_tag () 1376e35772b2Smrg{ 1377e35772b2Smrg $opt_debug 1378e35772b2Smrg if test -n "$available_tags" && test -z "$tagname"; then 1379e35772b2Smrg CC_quoted= 1380e35772b2Smrg for arg in $CC; do 138174c14cd6Smrg func_append_quoted CC_quoted "$arg" 1382e35772b2Smrg done 138374c14cd6Smrg CC_expanded=`func_echo_all $CC` 138474c14cd6Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385e35772b2Smrg case $@ in 1386e35772b2Smrg # Blanks in the command may have been stripped by the calling shell, 1387e35772b2Smrg # but not from the CC environment variable when configure was run. 138874c14cd6Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 138974c14cd6Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390e35772b2Smrg # Blanks at the start of $base_compile will cause this to fail 1391e35772b2Smrg # if we don't check for them as well. 1392e35772b2Smrg *) 1393e35772b2Smrg for z in $available_tags; do 1394e35772b2Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395e35772b2Smrg # Evaluate the configuration. 1396e35772b2Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397e35772b2Smrg CC_quoted= 1398e35772b2Smrg for arg in $CC; do 1399e35772b2Smrg # Double-quote args containing other shell metacharacters. 140074c14cd6Smrg func_append_quoted CC_quoted "$arg" 1401e35772b2Smrg done 140274c14cd6Smrg CC_expanded=`func_echo_all $CC` 140374c14cd6Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404e35772b2Smrg case "$@ " in 140574c14cd6Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 140674c14cd6Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407e35772b2Smrg # The compiler in the base compile command matches 1408e35772b2Smrg # the one in the tagged configuration. 1409e35772b2Smrg # Assume this is the tagged configuration we want. 1410e35772b2Smrg tagname=$z 1411e35772b2Smrg break 1412e35772b2Smrg ;; 1413e35772b2Smrg esac 1414e35772b2Smrg fi 1415e35772b2Smrg done 1416e35772b2Smrg # If $tagname still isn't set, then no tagged configuration 1417e35772b2Smrg # was found and let the user know that the "--tag" command 1418e35772b2Smrg # line option must be used. 1419e35772b2Smrg if test -z "$tagname"; then 1420e35772b2Smrg func_echo "unable to infer tagged configuration" 1421e35772b2Smrg func_fatal_error "specify a tag with \`--tag'" 1422e35772b2Smrg# else 1423e35772b2Smrg# func_verbose "using $tagname tagged configuration" 1424e35772b2Smrg fi 1425e35772b2Smrg ;; 1426e35772b2Smrg esac 1427e35772b2Smrg fi 1428e35772b2Smrg} 1429e35772b2Smrg 1430e35772b2Smrg 1431e35772b2Smrg 1432e35772b2Smrg# func_write_libtool_object output_name pic_name nonpic_name 1433e35772b2Smrg# Create a libtool object file (analogous to a ".la" file), 1434e35772b2Smrg# but don't create it if we're doing a dry run. 1435e35772b2Smrgfunc_write_libtool_object () 1436e35772b2Smrg{ 1437e35772b2Smrg write_libobj=${1} 1438e35772b2Smrg if test "$build_libtool_libs" = yes; then 1439e35772b2Smrg write_lobj=\'${2}\' 1440e35772b2Smrg else 1441e35772b2Smrg write_lobj=none 1442e35772b2Smrg fi 1443e35772b2Smrg 1444e35772b2Smrg if test "$build_old_libs" = yes; then 1445e35772b2Smrg write_oldobj=\'${3}\' 1446e35772b2Smrg else 1447e35772b2Smrg write_oldobj=none 1448e35772b2Smrg fi 1449e35772b2Smrg 1450e35772b2Smrg $opt_dry_run || { 1451e35772b2Smrg cat >${write_libobj}T <<EOF 1452e35772b2Smrg# $write_libobj - a libtool object file 1453e35772b2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454e35772b2Smrg# 1455e35772b2Smrg# Please DO NOT delete this file! 1456e35772b2Smrg# It is necessary for linking the library. 1457e35772b2Smrg 1458e35772b2Smrg# Name of the PIC object. 1459e35772b2Smrgpic_object=$write_lobj 1460e35772b2Smrg 1461e35772b2Smrg# Name of the non-PIC object 1462e35772b2Smrgnon_pic_object=$write_oldobj 1463e35772b2Smrg 1464e35772b2SmrgEOF 1465e35772b2Smrg $MV "${write_libobj}T" "${write_libobj}" 1466e35772b2Smrg } 1467e35772b2Smrg} 1468e35772b2Smrg 146974c14cd6Smrg 147074c14cd6Smrg################################################## 147174c14cd6Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 147274c14cd6Smrg################################################## 147374c14cd6Smrg 147474c14cd6Smrg# func_convert_core_file_wine_to_w32 ARG 147574c14cd6Smrg# Helper function used by file name conversion functions when $build is *nix, 147674c14cd6Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 147774c14cd6Smrg# correctly configured wine environment available, with the winepath program 147874c14cd6Smrg# in $build's $PATH. 147974c14cd6Smrg# 148074c14cd6Smrg# ARG is the $build file name to be converted to w32 format. 148174c14cd6Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 148274c14cd6Smrg# be empty on error (or when ARG is empty) 148374c14cd6Smrgfunc_convert_core_file_wine_to_w32 () 148474c14cd6Smrg{ 148574c14cd6Smrg $opt_debug 148674c14cd6Smrg func_convert_core_file_wine_to_w32_result="$1" 148774c14cd6Smrg if test -n "$1"; then 148874c14cd6Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 148974c14cd6Smrg # are forced to check the contents of stdout. On the other hand, if the 149074c14cd6Smrg # command is not found, the shell will set an exit code of 127 and print 149174c14cd6Smrg # *an error message* to stdout. So we must check for both error code of 149274c14cd6Smrg # zero AND non-empty stdout, which explains the odd construction: 149374c14cd6Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 149474c14cd6Smrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 149574c14cd6Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 149674c14cd6Smrg $SED -e "$lt_sed_naive_backslashify"` 149774c14cd6Smrg else 149874c14cd6Smrg func_convert_core_file_wine_to_w32_result= 149974c14cd6Smrg fi 150074c14cd6Smrg fi 150174c14cd6Smrg} 150274c14cd6Smrg# end: func_convert_core_file_wine_to_w32 150374c14cd6Smrg 150474c14cd6Smrg 150574c14cd6Smrg# func_convert_core_path_wine_to_w32 ARG 150674c14cd6Smrg# Helper function used by path conversion functions when $build is *nix, and 150774c14cd6Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 150874c14cd6Smrg# configured wine environment available, with the winepath program in $build's 150974c14cd6Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 151074c14cd6Smrg# 151174c14cd6Smrg# ARG is path to be converted from $build format to win32. 151274c14cd6Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 151374c14cd6Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 151474c14cd6Smrg# are convertible, then the result may be empty. 151574c14cd6Smrgfunc_convert_core_path_wine_to_w32 () 151674c14cd6Smrg{ 151774c14cd6Smrg $opt_debug 151874c14cd6Smrg # unfortunately, winepath doesn't convert paths, only file names 151974c14cd6Smrg func_convert_core_path_wine_to_w32_result="" 152074c14cd6Smrg if test -n "$1"; then 152174c14cd6Smrg oldIFS=$IFS 152274c14cd6Smrg IFS=: 152374c14cd6Smrg for func_convert_core_path_wine_to_w32_f in $1; do 152474c14cd6Smrg IFS=$oldIFS 152574c14cd6Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 152674c14cd6Smrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 152774c14cd6Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 152874c14cd6Smrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 152974c14cd6Smrg else 153074c14cd6Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 153174c14cd6Smrg fi 153274c14cd6Smrg fi 153374c14cd6Smrg done 153474c14cd6Smrg IFS=$oldIFS 153574c14cd6Smrg fi 153674c14cd6Smrg} 153774c14cd6Smrg# end: func_convert_core_path_wine_to_w32 153874c14cd6Smrg 153974c14cd6Smrg 154074c14cd6Smrg# func_cygpath ARGS... 154174c14cd6Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 154274c14cd6Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 154374c14cd6Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 154474c14cd6Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 154574c14cd6Smrg# file name or path is assumed to be in w32 format, as previously converted 154674c14cd6Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 154774c14cd6Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 154874c14cd6Smrg# Cygwin format). Returns an empty string on error. 154974c14cd6Smrg# 155074c14cd6Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 155174c14cd6Smrg# be converted. 155274c14cd6Smrg# 155374c14cd6Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 155474c14cd6Smrg# environment variable; do not put it in $PATH. 155574c14cd6Smrgfunc_cygpath () 155674c14cd6Smrg{ 155774c14cd6Smrg $opt_debug 155874c14cd6Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 155974c14cd6Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 156074c14cd6Smrg if test "$?" -ne 0; then 156174c14cd6Smrg # on failure, ensure result is empty 156274c14cd6Smrg func_cygpath_result= 156374c14cd6Smrg fi 156474c14cd6Smrg else 156574c14cd6Smrg func_cygpath_result= 156674c14cd6Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 156774c14cd6Smrg fi 156874c14cd6Smrg} 156974c14cd6Smrg#end: func_cygpath 157074c14cd6Smrg 157174c14cd6Smrg 157274c14cd6Smrg# func_convert_core_msys_to_w32 ARG 157374c14cd6Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 157474c14cd6Smrg# result in func_convert_core_msys_to_w32_result. 157574c14cd6Smrgfunc_convert_core_msys_to_w32 () 157674c14cd6Smrg{ 157774c14cd6Smrg $opt_debug 157874c14cd6Smrg # awkward: cmd appends spaces to result 157974c14cd6Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 158074c14cd6Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 158174c14cd6Smrg} 158274c14cd6Smrg#end: func_convert_core_msys_to_w32 158374c14cd6Smrg 158474c14cd6Smrg 158574c14cd6Smrg# func_convert_file_check ARG1 ARG2 158674c14cd6Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 158774c14cd6Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 158874c14cd6Smrg# func_to_host_file_result to ARG1). 158974c14cd6Smrgfunc_convert_file_check () 159074c14cd6Smrg{ 159174c14cd6Smrg $opt_debug 159274c14cd6Smrg if test -z "$2" && test -n "$1" ; then 159374c14cd6Smrg func_error "Could not determine host file name corresponding to" 159474c14cd6Smrg func_error " \`$1'" 159574c14cd6Smrg func_error "Continuing, but uninstalled executables may not work." 159674c14cd6Smrg # Fallback: 159774c14cd6Smrg func_to_host_file_result="$1" 159874c14cd6Smrg fi 159974c14cd6Smrg} 160074c14cd6Smrg# end func_convert_file_check 160174c14cd6Smrg 160274c14cd6Smrg 160374c14cd6Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 160474c14cd6Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 160574c14cd6Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 160674c14cd6Smrg# func_to_host_file_result to a simplistic fallback value (see below). 160774c14cd6Smrgfunc_convert_path_check () 160874c14cd6Smrg{ 160974c14cd6Smrg $opt_debug 161074c14cd6Smrg if test -z "$4" && test -n "$3"; then 161174c14cd6Smrg func_error "Could not determine the host path corresponding to" 161274c14cd6Smrg func_error " \`$3'" 161374c14cd6Smrg func_error "Continuing, but uninstalled executables may not work." 161474c14cd6Smrg # Fallback. This is a deliberately simplistic "conversion" and 161574c14cd6Smrg # should not be "improved". See libtool.info. 161674c14cd6Smrg if test "x$1" != "x$2"; then 161774c14cd6Smrg lt_replace_pathsep_chars="s|$1|$2|g" 161874c14cd6Smrg func_to_host_path_result=`echo "$3" | 161974c14cd6Smrg $SED -e "$lt_replace_pathsep_chars"` 162074c14cd6Smrg else 162174c14cd6Smrg func_to_host_path_result="$3" 162274c14cd6Smrg fi 162374c14cd6Smrg fi 162474c14cd6Smrg} 162574c14cd6Smrg# end func_convert_path_check 162674c14cd6Smrg 162774c14cd6Smrg 162874c14cd6Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 162974c14cd6Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 163074c14cd6Smrg# and appending REPL if ORIG matches BACKPAT. 163174c14cd6Smrgfunc_convert_path_front_back_pathsep () 163274c14cd6Smrg{ 163374c14cd6Smrg $opt_debug 163474c14cd6Smrg case $4 in 163574c14cd6Smrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 163674c14cd6Smrg ;; 163774c14cd6Smrg esac 163874c14cd6Smrg case $4 in 163974c14cd6Smrg $2 ) func_append func_to_host_path_result "$3" 164074c14cd6Smrg ;; 164174c14cd6Smrg esac 164274c14cd6Smrg} 164374c14cd6Smrg# end func_convert_path_front_back_pathsep 164474c14cd6Smrg 164574c14cd6Smrg 164674c14cd6Smrg################################################## 164774c14cd6Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 164874c14cd6Smrg################################################## 164974c14cd6Smrg# invoked via `$to_host_file_cmd ARG' 165074c14cd6Smrg# 165174c14cd6Smrg# In each case, ARG is the path to be converted from $build to $host format. 165274c14cd6Smrg# Result will be available in $func_to_host_file_result. 165374c14cd6Smrg 165474c14cd6Smrg 165574c14cd6Smrg# func_to_host_file ARG 165674c14cd6Smrg# Converts the file name ARG from $build format to $host format. Return result 165774c14cd6Smrg# in func_to_host_file_result. 165874c14cd6Smrgfunc_to_host_file () 165974c14cd6Smrg{ 166074c14cd6Smrg $opt_debug 166174c14cd6Smrg $to_host_file_cmd "$1" 166274c14cd6Smrg} 166374c14cd6Smrg# end func_to_host_file 166474c14cd6Smrg 166574c14cd6Smrg 166674c14cd6Smrg# func_to_tool_file ARG LAZY 166774c14cd6Smrg# converts the file name ARG from $build format to toolchain format. Return 166874c14cd6Smrg# result in func_to_tool_file_result. If the conversion in use is listed 166974c14cd6Smrg# in (the comma separated) LAZY, no conversion takes place. 167074c14cd6Smrgfunc_to_tool_file () 167174c14cd6Smrg{ 167274c14cd6Smrg $opt_debug 167374c14cd6Smrg case ,$2, in 167474c14cd6Smrg *,"$to_tool_file_cmd",*) 167574c14cd6Smrg func_to_tool_file_result=$1 167674c14cd6Smrg ;; 167774c14cd6Smrg *) 167874c14cd6Smrg $to_tool_file_cmd "$1" 167974c14cd6Smrg func_to_tool_file_result=$func_to_host_file_result 168074c14cd6Smrg ;; 168174c14cd6Smrg esac 168274c14cd6Smrg} 168374c14cd6Smrg# end func_to_tool_file 168474c14cd6Smrg 168574c14cd6Smrg 168674c14cd6Smrg# func_convert_file_noop ARG 168774c14cd6Smrg# Copy ARG to func_to_host_file_result. 168874c14cd6Smrgfunc_convert_file_noop () 168974c14cd6Smrg{ 169074c14cd6Smrg func_to_host_file_result="$1" 169174c14cd6Smrg} 169274c14cd6Smrg# end func_convert_file_noop 169374c14cd6Smrg 169474c14cd6Smrg 169574c14cd6Smrg# func_convert_file_msys_to_w32 ARG 169674c14cd6Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 169774c14cd6Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 169874c14cd6Smrg# func_to_host_file_result. 169974c14cd6Smrgfunc_convert_file_msys_to_w32 () 170074c14cd6Smrg{ 170174c14cd6Smrg $opt_debug 170274c14cd6Smrg func_to_host_file_result="$1" 170374c14cd6Smrg if test -n "$1"; then 170474c14cd6Smrg func_convert_core_msys_to_w32 "$1" 170574c14cd6Smrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 170674c14cd6Smrg fi 170774c14cd6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 170874c14cd6Smrg} 170974c14cd6Smrg# end func_convert_file_msys_to_w32 171074c14cd6Smrg 171174c14cd6Smrg 171274c14cd6Smrg# func_convert_file_cygwin_to_w32 ARG 171374c14cd6Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 171474c14cd6Smrg# func_to_host_file_result. 171574c14cd6Smrgfunc_convert_file_cygwin_to_w32 () 171674c14cd6Smrg{ 171774c14cd6Smrg $opt_debug 171874c14cd6Smrg func_to_host_file_result="$1" 171974c14cd6Smrg if test -n "$1"; then 172074c14cd6Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 172174c14cd6Smrg # LT_CYGPATH in this case. 172274c14cd6Smrg func_to_host_file_result=`cygpath -m "$1"` 172374c14cd6Smrg fi 172474c14cd6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 172574c14cd6Smrg} 172674c14cd6Smrg# end func_convert_file_cygwin_to_w32 172774c14cd6Smrg 172874c14cd6Smrg 172974c14cd6Smrg# func_convert_file_nix_to_w32 ARG 173074c14cd6Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 173174c14cd6Smrg# and a working winepath. Returns result in func_to_host_file_result. 173274c14cd6Smrgfunc_convert_file_nix_to_w32 () 173374c14cd6Smrg{ 173474c14cd6Smrg $opt_debug 173574c14cd6Smrg func_to_host_file_result="$1" 173674c14cd6Smrg if test -n "$1"; then 173774c14cd6Smrg func_convert_core_file_wine_to_w32 "$1" 173874c14cd6Smrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 173974c14cd6Smrg fi 174074c14cd6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 174174c14cd6Smrg} 174274c14cd6Smrg# end func_convert_file_nix_to_w32 174374c14cd6Smrg 174474c14cd6Smrg 174574c14cd6Smrg# func_convert_file_msys_to_cygwin ARG 174674c14cd6Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 174774c14cd6Smrg# Returns result in func_to_host_file_result. 174874c14cd6Smrgfunc_convert_file_msys_to_cygwin () 174974c14cd6Smrg{ 175074c14cd6Smrg $opt_debug 175174c14cd6Smrg func_to_host_file_result="$1" 175274c14cd6Smrg if test -n "$1"; then 175374c14cd6Smrg func_convert_core_msys_to_w32 "$1" 175474c14cd6Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 175574c14cd6Smrg func_to_host_file_result="$func_cygpath_result" 175674c14cd6Smrg fi 175774c14cd6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 175874c14cd6Smrg} 175974c14cd6Smrg# end func_convert_file_msys_to_cygwin 176074c14cd6Smrg 176174c14cd6Smrg 176274c14cd6Smrg# func_convert_file_nix_to_cygwin ARG 176374c14cd6Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 176474c14cd6Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 176574c14cd6Smrg# in func_to_host_file_result. 176674c14cd6Smrgfunc_convert_file_nix_to_cygwin () 176774c14cd6Smrg{ 176874c14cd6Smrg $opt_debug 176974c14cd6Smrg func_to_host_file_result="$1" 177074c14cd6Smrg if test -n "$1"; then 177174c14cd6Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 177274c14cd6Smrg func_convert_core_file_wine_to_w32 "$1" 177374c14cd6Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 177474c14cd6Smrg func_to_host_file_result="$func_cygpath_result" 177574c14cd6Smrg fi 177674c14cd6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 177774c14cd6Smrg} 177874c14cd6Smrg# end func_convert_file_nix_to_cygwin 177974c14cd6Smrg 178074c14cd6Smrg 178174c14cd6Smrg############################################# 178274c14cd6Smrg# $build to $host PATH CONVERSION FUNCTIONS # 178374c14cd6Smrg############################################# 178474c14cd6Smrg# invoked via `$to_host_path_cmd ARG' 178574c14cd6Smrg# 178674c14cd6Smrg# In each case, ARG is the path to be converted from $build to $host format. 178774c14cd6Smrg# The result will be available in $func_to_host_path_result. 178874c14cd6Smrg# 178974c14cd6Smrg# Path separators are also converted from $build format to $host format. If 179074c14cd6Smrg# ARG begins or ends with a path separator character, it is preserved (but 179174c14cd6Smrg# converted to $host format) on output. 179274c14cd6Smrg# 179374c14cd6Smrg# All path conversion functions are named using the following convention: 179474c14cd6Smrg# file name conversion function : func_convert_file_X_to_Y () 179574c14cd6Smrg# path conversion function : func_convert_path_X_to_Y () 179674c14cd6Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 179774c14cd6Smrg# same. If conversion functions are added for new $build/$host combinations, 179874c14cd6Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 179974c14cd6Smrg# will break. 180074c14cd6Smrg 180174c14cd6Smrg 180274c14cd6Smrg# func_init_to_host_path_cmd 180374c14cd6Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 180474c14cd6Smrg# appropriate value, based on the value of $to_host_file_cmd. 180574c14cd6Smrgto_host_path_cmd= 180674c14cd6Smrgfunc_init_to_host_path_cmd () 180774c14cd6Smrg{ 180874c14cd6Smrg $opt_debug 180974c14cd6Smrg if test -z "$to_host_path_cmd"; then 181074c14cd6Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 181174c14cd6Smrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 181274c14cd6Smrg fi 181374c14cd6Smrg} 181474c14cd6Smrg 181574c14cd6Smrg 181674c14cd6Smrg# func_to_host_path ARG 181774c14cd6Smrg# Converts the path ARG from $build format to $host format. Return result 181874c14cd6Smrg# in func_to_host_path_result. 181974c14cd6Smrgfunc_to_host_path () 182074c14cd6Smrg{ 182174c14cd6Smrg $opt_debug 182274c14cd6Smrg func_init_to_host_path_cmd 182374c14cd6Smrg $to_host_path_cmd "$1" 182474c14cd6Smrg} 182574c14cd6Smrg# end func_to_host_path 182674c14cd6Smrg 182774c14cd6Smrg 182874c14cd6Smrg# func_convert_path_noop ARG 182974c14cd6Smrg# Copy ARG to func_to_host_path_result. 183074c14cd6Smrgfunc_convert_path_noop () 183174c14cd6Smrg{ 183274c14cd6Smrg func_to_host_path_result="$1" 183374c14cd6Smrg} 183474c14cd6Smrg# end func_convert_path_noop 183574c14cd6Smrg 183674c14cd6Smrg 183774c14cd6Smrg# func_convert_path_msys_to_w32 ARG 183874c14cd6Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 183974c14cd6Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 184074c14cd6Smrg# func_to_host_path_result. 184174c14cd6Smrgfunc_convert_path_msys_to_w32 () 184274c14cd6Smrg{ 184374c14cd6Smrg $opt_debug 184474c14cd6Smrg func_to_host_path_result="$1" 184574c14cd6Smrg if test -n "$1"; then 184674c14cd6Smrg # Remove leading and trailing path separator characters from ARG. MSYS 184774c14cd6Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 184874c14cd6Smrg # and winepath ignores them completely. 184974c14cd6Smrg func_stripname : : "$1" 185074c14cd6Smrg func_to_host_path_tmp1=$func_stripname_result 185174c14cd6Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 185274c14cd6Smrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 185374c14cd6Smrg func_convert_path_check : ";" \ 185474c14cd6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 185574c14cd6Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 185674c14cd6Smrg fi 185774c14cd6Smrg} 185874c14cd6Smrg# end func_convert_path_msys_to_w32 185974c14cd6Smrg 186074c14cd6Smrg 186174c14cd6Smrg# func_convert_path_cygwin_to_w32 ARG 186274c14cd6Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 186374c14cd6Smrg# func_to_host_file_result. 186474c14cd6Smrgfunc_convert_path_cygwin_to_w32 () 186574c14cd6Smrg{ 186674c14cd6Smrg $opt_debug 186774c14cd6Smrg func_to_host_path_result="$1" 186874c14cd6Smrg if test -n "$1"; then 186974c14cd6Smrg # See func_convert_path_msys_to_w32: 187074c14cd6Smrg func_stripname : : "$1" 187174c14cd6Smrg func_to_host_path_tmp1=$func_stripname_result 187274c14cd6Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 187374c14cd6Smrg func_convert_path_check : ";" \ 187474c14cd6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 187574c14cd6Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 187674c14cd6Smrg fi 187774c14cd6Smrg} 187874c14cd6Smrg# end func_convert_path_cygwin_to_w32 187974c14cd6Smrg 188074c14cd6Smrg 188174c14cd6Smrg# func_convert_path_nix_to_w32 ARG 188274c14cd6Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 188374c14cd6Smrg# a working winepath. Returns result in func_to_host_file_result. 188474c14cd6Smrgfunc_convert_path_nix_to_w32 () 188574c14cd6Smrg{ 188674c14cd6Smrg $opt_debug 188774c14cd6Smrg func_to_host_path_result="$1" 188874c14cd6Smrg if test -n "$1"; then 188974c14cd6Smrg # See func_convert_path_msys_to_w32: 189074c14cd6Smrg func_stripname : : "$1" 189174c14cd6Smrg func_to_host_path_tmp1=$func_stripname_result 189274c14cd6Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 189374c14cd6Smrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 189474c14cd6Smrg func_convert_path_check : ";" \ 189574c14cd6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 189674c14cd6Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 189774c14cd6Smrg fi 189874c14cd6Smrg} 189974c14cd6Smrg# end func_convert_path_nix_to_w32 190074c14cd6Smrg 190174c14cd6Smrg 190274c14cd6Smrg# func_convert_path_msys_to_cygwin ARG 190374c14cd6Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 190474c14cd6Smrg# Returns result in func_to_host_file_result. 190574c14cd6Smrgfunc_convert_path_msys_to_cygwin () 190674c14cd6Smrg{ 190774c14cd6Smrg $opt_debug 190874c14cd6Smrg func_to_host_path_result="$1" 190974c14cd6Smrg if test -n "$1"; then 191074c14cd6Smrg # See func_convert_path_msys_to_w32: 191174c14cd6Smrg func_stripname : : "$1" 191274c14cd6Smrg func_to_host_path_tmp1=$func_stripname_result 191374c14cd6Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 191474c14cd6Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 191574c14cd6Smrg func_to_host_path_result="$func_cygpath_result" 191674c14cd6Smrg func_convert_path_check : : \ 191774c14cd6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 191874c14cd6Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 191974c14cd6Smrg fi 192074c14cd6Smrg} 192174c14cd6Smrg# end func_convert_path_msys_to_cygwin 192274c14cd6Smrg 192374c14cd6Smrg 192474c14cd6Smrg# func_convert_path_nix_to_cygwin ARG 192574c14cd6Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 192674c14cd6Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 192774c14cd6Smrg# func_to_host_file_result. 192874c14cd6Smrgfunc_convert_path_nix_to_cygwin () 192974c14cd6Smrg{ 193074c14cd6Smrg $opt_debug 193174c14cd6Smrg func_to_host_path_result="$1" 193274c14cd6Smrg if test -n "$1"; then 193374c14cd6Smrg # Remove leading and trailing path separator characters from 193474c14cd6Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 193574c14cd6Smrg # into '.;' and ';.', and winepath ignores them completely. 193674c14cd6Smrg func_stripname : : "$1" 193774c14cd6Smrg func_to_host_path_tmp1=$func_stripname_result 193874c14cd6Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 193974c14cd6Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 194074c14cd6Smrg func_to_host_path_result="$func_cygpath_result" 194174c14cd6Smrg func_convert_path_check : : \ 194274c14cd6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 194374c14cd6Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 194474c14cd6Smrg fi 194574c14cd6Smrg} 194674c14cd6Smrg# end func_convert_path_nix_to_cygwin 194774c14cd6Smrg 194874c14cd6Smrg 1949e35772b2Smrg# func_mode_compile arg... 1950e35772b2Smrgfunc_mode_compile () 1951e35772b2Smrg{ 1952e35772b2Smrg $opt_debug 1953e35772b2Smrg # Get the compilation command and the source file. 1954e35772b2Smrg base_compile= 1955e35772b2Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956e35772b2Smrg suppress_opt=yes 1957e35772b2Smrg suppress_output= 1958e35772b2Smrg arg_mode=normal 1959e35772b2Smrg libobj= 1960e35772b2Smrg later= 1961e35772b2Smrg pie_flag= 1962e35772b2Smrg 1963e35772b2Smrg for arg 1964e35772b2Smrg do 1965e35772b2Smrg case $arg_mode in 1966e35772b2Smrg arg ) 1967e35772b2Smrg # do not "continue". Instead, add this to base_compile 1968e35772b2Smrg lastarg="$arg" 1969e35772b2Smrg arg_mode=normal 1970e35772b2Smrg ;; 1971e35772b2Smrg 1972e35772b2Smrg target ) 1973e35772b2Smrg libobj="$arg" 1974e35772b2Smrg arg_mode=normal 1975e35772b2Smrg continue 1976e35772b2Smrg ;; 1977e35772b2Smrg 1978e35772b2Smrg normal ) 1979e35772b2Smrg # Accept any command-line options. 1980e35772b2Smrg case $arg in 1981e35772b2Smrg -o) 1982e35772b2Smrg test -n "$libobj" && \ 1983e35772b2Smrg func_fatal_error "you cannot specify \`-o' more than once" 1984e35772b2Smrg arg_mode=target 1985e35772b2Smrg continue 1986e35772b2Smrg ;; 1987e35772b2Smrg 1988e35772b2Smrg -pie | -fpie | -fPIE) 198974c14cd6Smrg func_append pie_flag " $arg" 1990e35772b2Smrg continue 1991e35772b2Smrg ;; 1992e35772b2Smrg 1993e35772b2Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 199474c14cd6Smrg func_append later " $arg" 1995e35772b2Smrg continue 1996e35772b2Smrg ;; 1997e35772b2Smrg 1998e35772b2Smrg -no-suppress) 199972b676d7Smrg suppress_opt=no 200072b676d7Smrg continue 200172b676d7Smrg ;; 200272b676d7Smrg 200372b676d7Smrg -Xcompiler) 200472b676d7Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 200572b676d7Smrg continue # The current "srcfile" will either be retained or 200672b676d7Smrg ;; # replaced later. I would guess that would be a bug. 200772b676d7Smrg 200872b676d7Smrg -Wc,*) 2009e35772b2Smrg func_stripname '-Wc,' '' "$arg" 2010e35772b2Smrg args=$func_stripname_result 201172b676d7Smrg lastarg= 201272b676d7Smrg save_ifs="$IFS"; IFS=',' 2013e35772b2Smrg for arg in $args; do 201472b676d7Smrg IFS="$save_ifs" 201574c14cd6Smrg func_append_quoted lastarg "$arg" 201672b676d7Smrg done 201772b676d7Smrg IFS="$save_ifs" 2018e35772b2Smrg func_stripname ' ' '' "$lastarg" 2019e35772b2Smrg lastarg=$func_stripname_result 202072b676d7Smrg 202172b676d7Smrg # Add the arguments to base_compile. 202274c14cd6Smrg func_append base_compile " $lastarg" 202372b676d7Smrg continue 202472b676d7Smrg ;; 202572b676d7Smrg 2026e35772b2Smrg *) 202772b676d7Smrg # Accept the current argument as the source file. 202872b676d7Smrg # The previous "srcfile" becomes the current argument. 202972b676d7Smrg # 203072b676d7Smrg lastarg="$srcfile" 203172b676d7Smrg srcfile="$arg" 203272b676d7Smrg ;; 203372b676d7Smrg esac # case $arg 203472b676d7Smrg ;; 203572b676d7Smrg esac # case $arg_mode 203672b676d7Smrg 203772b676d7Smrg # Aesthetically quote the previous argument. 203874c14cd6Smrg func_append_quoted base_compile "$lastarg" 203972b676d7Smrg done # for arg 204072b676d7Smrg 204172b676d7Smrg case $arg_mode in 204272b676d7Smrg arg) 2043e35772b2Smrg func_fatal_error "you must specify an argument for -Xcompile" 204472b676d7Smrg ;; 204572b676d7Smrg target) 2046e35772b2Smrg func_fatal_error "you must specify a target with \`-o'" 204772b676d7Smrg ;; 204872b676d7Smrg *) 204972b676d7Smrg # Get the name of the library object. 2050e35772b2Smrg test -z "$libobj" && { 2051e35772b2Smrg func_basename "$srcfile" 2052e35772b2Smrg libobj="$func_basename_result" 2053e35772b2Smrg } 205472b676d7Smrg ;; 205572b676d7Smrg esac 205672b676d7Smrg 205772b676d7Smrg # Recognize several different file suffixes. 205872b676d7Smrg # If the user specifies -o file.o, it is replaced with file.lo 205972b676d7Smrg case $libobj in 2060e35772b2Smrg *.[cCFSifmso] | \ 2061e35772b2Smrg *.ada | *.adb | *.ads | *.asm | \ 2062e35772b2Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 206374c14cd6Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064e35772b2Smrg func_xform "$libobj" 2065e35772b2Smrg libobj=$func_xform_result 2066e35772b2Smrg ;; 206772b676d7Smrg esac 206872b676d7Smrg 206972b676d7Smrg case $libobj in 2070e35772b2Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 207172b676d7Smrg *) 2072e35772b2Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 207372b676d7Smrg ;; 207472b676d7Smrg esac 207572b676d7Smrg 207672b676d7Smrg func_infer_tag $base_compile 207772b676d7Smrg 207872b676d7Smrg for arg in $later; do 207972b676d7Smrg case $arg in 2080e35772b2Smrg -shared) 2081e35772b2Smrg test "$build_libtool_libs" != yes && \ 2082e35772b2Smrg func_fatal_configuration "can not build a shared library" 2083e35772b2Smrg build_old_libs=no 2084e35772b2Smrg continue 2085e35772b2Smrg ;; 2086e35772b2Smrg 208772b676d7Smrg -static) 2088e35772b2Smrg build_libtool_libs=no 208972b676d7Smrg build_old_libs=yes 209072b676d7Smrg continue 209172b676d7Smrg ;; 209272b676d7Smrg 209372b676d7Smrg -prefer-pic) 209472b676d7Smrg pic_mode=yes 209572b676d7Smrg continue 209672b676d7Smrg ;; 209772b676d7Smrg 209872b676d7Smrg -prefer-non-pic) 209972b676d7Smrg pic_mode=no 210072b676d7Smrg continue 210172b676d7Smrg ;; 210272b676d7Smrg esac 210372b676d7Smrg done 210472b676d7Smrg 2105e35772b2Smrg func_quote_for_eval "$libobj" 2106e35772b2Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107e35772b2Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108e35772b2Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109e35772b2Smrg func_dirname_and_basename "$obj" "/" "" 2110e35772b2Smrg objname="$func_basename_result" 2111e35772b2Smrg xdir="$func_dirname_result" 211272b676d7Smrg lobj=${xdir}$objdir/$objname 211372b676d7Smrg 2114e35772b2Smrg test -z "$base_compile" && \ 2115e35772b2Smrg func_fatal_help "you must specify a compilation command" 211672b676d7Smrg 211772b676d7Smrg # Delete any leftover library objects. 211872b676d7Smrg if test "$build_old_libs" = yes; then 211972b676d7Smrg removelist="$obj $lobj $libobj ${libobj}T" 212072b676d7Smrg else 212172b676d7Smrg removelist="$lobj $libobj ${libobj}T" 212272b676d7Smrg fi 212372b676d7Smrg 212472b676d7Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 212572b676d7Smrg case $host_os in 2126e35772b2Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 212772b676d7Smrg pic_mode=default 212872b676d7Smrg ;; 212972b676d7Smrg esac 213072b676d7Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 213172b676d7Smrg # non-PIC code in shared libraries is not supported 213272b676d7Smrg pic_mode=default 213372b676d7Smrg fi 213472b676d7Smrg 213572b676d7Smrg # Calculate the filename of the output object if compiler does 213672b676d7Smrg # not support -o with -c 213772b676d7Smrg if test "$compiler_c_o" = no; then 213874c14cd6Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 213972b676d7Smrg lockfile="$output_obj.lock" 214072b676d7Smrg else 214172b676d7Smrg output_obj= 214272b676d7Smrg need_locks=no 214372b676d7Smrg lockfile= 214472b676d7Smrg fi 214572b676d7Smrg 214672b676d7Smrg # Lock this critical section if it is needed 214772b676d7Smrg # We use this script file to make the link, it avoids creating a new file 214872b676d7Smrg if test "$need_locks" = yes; then 2149e35772b2Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150e35772b2Smrg func_echo "Waiting for $lockfile to be removed" 215172b676d7Smrg sleep 2 215272b676d7Smrg done 215372b676d7Smrg elif test "$need_locks" = warn; then 215472b676d7Smrg if test -f "$lockfile"; then 2155e35772b2Smrg $ECHO "\ 215672b676d7Smrg*** ERROR, $lockfile exists and contains: 215772b676d7Smrg`cat $lockfile 2>/dev/null` 215872b676d7Smrg 215972b676d7SmrgThis indicates that another process is trying to use the same 216072b676d7Smrgtemporary object file, and libtool could not work around it because 216172b676d7Smrgyour compiler does not support \`-c' and \`-o' together. If you 216272b676d7Smrgrepeat this compilation, it may succeed, by chance, but you had better 216372b676d7Smrgavoid parallel builds (make -j) in this platform, or get a better 216472b676d7Smrgcompiler." 216572b676d7Smrg 2166e35772b2Smrg $opt_dry_run || $RM $removelist 216772b676d7Smrg exit $EXIT_FAILURE 216872b676d7Smrg fi 216974c14cd6Smrg func_append removelist " $output_obj" 2170e35772b2Smrg $ECHO "$srcfile" > "$lockfile" 217172b676d7Smrg fi 217272b676d7Smrg 2173e35772b2Smrg $opt_dry_run || $RM $removelist 217474c14cd6Smrg func_append removelist " $lockfile" 2175e35772b2Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176e35772b2Smrg 217774c14cd6Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 217874c14cd6Smrg srcfile=$func_to_tool_file_result 2179e35772b2Smrg func_quote_for_eval "$srcfile" 2180e35772b2Smrg qsrcfile=$func_quote_for_eval_result 218172b676d7Smrg 218272b676d7Smrg # Only build a PIC object if we are building libtool libraries. 218372b676d7Smrg if test "$build_libtool_libs" = yes; then 218472b676d7Smrg # Without this assignment, base_compile gets emptied. 218572b676d7Smrg fbsd_hideous_sh_bug=$base_compile 218672b676d7Smrg 218772b676d7Smrg if test "$pic_mode" != no; then 218872b676d7Smrg command="$base_compile $qsrcfile $pic_flag" 218972b676d7Smrg else 219072b676d7Smrg # Don't build PIC code 219172b676d7Smrg command="$base_compile $qsrcfile" 219272b676d7Smrg fi 219372b676d7Smrg 2194e35772b2Smrg func_mkdir_p "$xdir$objdir" 219572b676d7Smrg 219672b676d7Smrg if test -z "$output_obj"; then 219772b676d7Smrg # Place PIC objects in $objdir 219874c14cd6Smrg func_append command " -o $lobj" 219972b676d7Smrg fi 220072b676d7Smrg 2201e35772b2Smrg func_show_eval_locale "$command" \ 2202e35772b2Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 220372b676d7Smrg 220472b676d7Smrg if test "$need_locks" = warn && 220572b676d7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206e35772b2Smrg $ECHO "\ 220772b676d7Smrg*** ERROR, $lockfile contains: 220872b676d7Smrg`cat $lockfile 2>/dev/null` 220972b676d7Smrg 221072b676d7Smrgbut it should contain: 221172b676d7Smrg$srcfile 221272b676d7Smrg 221372b676d7SmrgThis indicates that another process is trying to use the same 221472b676d7Smrgtemporary object file, and libtool could not work around it because 221572b676d7Smrgyour compiler does not support \`-c' and \`-o' together. If you 221672b676d7Smrgrepeat this compilation, it may succeed, by chance, but you had better 221772b676d7Smrgavoid parallel builds (make -j) in this platform, or get a better 221872b676d7Smrgcompiler." 221972b676d7Smrg 2220e35772b2Smrg $opt_dry_run || $RM $removelist 222172b676d7Smrg exit $EXIT_FAILURE 222272b676d7Smrg fi 222372b676d7Smrg 222472b676d7Smrg # Just move the object if needed, then go on to compile the next one 222572b676d7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226e35772b2Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227e35772b2Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 222872b676d7Smrg fi 222972b676d7Smrg 223072b676d7Smrg # Allow error messages only from the first compilation. 223172b676d7Smrg if test "$suppress_opt" = yes; then 2232e35772b2Smrg suppress_output=' >/dev/null 2>&1' 223372b676d7Smrg fi 223472b676d7Smrg fi 223572b676d7Smrg 223672b676d7Smrg # Only build a position-dependent object if we build old libraries. 223772b676d7Smrg if test "$build_old_libs" = yes; then 223872b676d7Smrg if test "$pic_mode" != yes; then 223972b676d7Smrg # Don't build PIC code 2240e35772b2Smrg command="$base_compile $qsrcfile$pie_flag" 224172b676d7Smrg else 224272b676d7Smrg command="$base_compile $qsrcfile $pic_flag" 224372b676d7Smrg fi 224472b676d7Smrg if test "$compiler_c_o" = yes; then 224574c14cd6Smrg func_append command " -o $obj" 224672b676d7Smrg fi 224772b676d7Smrg 224872b676d7Smrg # Suppress compiler output if we already did a PIC compilation. 224974c14cd6Smrg func_append command "$suppress_output" 2250e35772b2Smrg func_show_eval_locale "$command" \ 2251e35772b2Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 225272b676d7Smrg 225372b676d7Smrg if test "$need_locks" = warn && 225472b676d7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255e35772b2Smrg $ECHO "\ 225672b676d7Smrg*** ERROR, $lockfile contains: 225772b676d7Smrg`cat $lockfile 2>/dev/null` 225872b676d7Smrg 225972b676d7Smrgbut it should contain: 226072b676d7Smrg$srcfile 226172b676d7Smrg 226272b676d7SmrgThis indicates that another process is trying to use the same 226372b676d7Smrgtemporary object file, and libtool could not work around it because 226472b676d7Smrgyour compiler does not support \`-c' and \`-o' together. If you 226572b676d7Smrgrepeat this compilation, it may succeed, by chance, but you had better 226672b676d7Smrgavoid parallel builds (make -j) in this platform, or get a better 226772b676d7Smrgcompiler." 226872b676d7Smrg 2269e35772b2Smrg $opt_dry_run || $RM $removelist 227072b676d7Smrg exit $EXIT_FAILURE 227172b676d7Smrg fi 227272b676d7Smrg 227372b676d7Smrg # Just move the object if needed 227472b676d7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275e35772b2Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276e35772b2Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 227772b676d7Smrg fi 227872b676d7Smrg fi 227972b676d7Smrg 2280e35772b2Smrg $opt_dry_run || { 2281e35772b2Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 228272b676d7Smrg 2283e35772b2Smrg # Unlock the critical section if it was locked 2284e35772b2Smrg if test "$need_locks" != no; then 2285e35772b2Smrg removelist=$lockfile 2286e35772b2Smrg $RM "$lockfile" 2287e35772b2Smrg fi 2288e35772b2Smrg } 228972b676d7Smrg 229072b676d7Smrg exit $EXIT_SUCCESS 2291e35772b2Smrg} 229272b676d7Smrg 2293e35772b2Smrg$opt_help || { 229474c14cd6Smrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295e35772b2Smrg} 229672b676d7Smrg 2297e35772b2Smrgfunc_mode_help () 2298e35772b2Smrg{ 2299e35772b2Smrg # We need to display help for each of the modes. 230074c14cd6Smrg case $opt_mode in 2301e35772b2Smrg "") 2302e35772b2Smrg # Generic help is extracted from the usage comments 2303e35772b2Smrg # at the start of this file. 2304e35772b2Smrg func_help 2305e35772b2Smrg ;; 230672b676d7Smrg 2307e35772b2Smrg clean) 2308e35772b2Smrg $ECHO \ 2309e35772b2Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 231072b676d7Smrg 2311e35772b2SmrgRemove files from the build directory. 231272b676d7Smrg 2313e35772b2SmrgRM is the name of the program to use to delete files associated with each FILE 2314e35772b2Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315e35772b2Smrgto RM. 231672b676d7Smrg 2317e35772b2SmrgIf FILE is a libtool library, object or program, all the files associated 2318e35772b2Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319e35772b2Smrg ;; 232072b676d7Smrg 2321e35772b2Smrg compile) 2322e35772b2Smrg $ECHO \ 2323e35772b2Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 232472b676d7Smrg 2325e35772b2SmrgCompile a source file into a libtool library object. 232672b676d7Smrg 2327e35772b2SmrgThis mode accepts the following additional options: 232872b676d7Smrg 2329e35772b2Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330e35772b2Smrg -no-suppress do not suppress compiler output for multiple passes 233174c14cd6Smrg -prefer-pic try to build PIC objects only 233274c14cd6Smrg -prefer-non-pic try to build non-PIC objects only 2333e35772b2Smrg -shared do not build a \`.o' file suitable for static linking 2334e35772b2Smrg -static only build a \`.o' file suitable for static linking 233574c14cd6Smrg -Wc,FLAG pass FLAG directly to the compiler 233672b676d7Smrg 2337e35772b2SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338e35772b2Smrgfrom the given SOURCEFILE. 233972b676d7Smrg 2340e35772b2SmrgThe output file name is determined by removing the directory component from 2341e35772b2SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342e35772b2Smrglibrary object suffix, \`.lo'." 2343e35772b2Smrg ;; 234472b676d7Smrg 2345e35772b2Smrg execute) 2346e35772b2Smrg $ECHO \ 2347e35772b2Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 234872b676d7Smrg 2349e35772b2SmrgAutomatically set library path, then run a program. 235072b676d7Smrg 2351e35772b2SmrgThis mode accepts the following additional options: 235272b676d7Smrg 2353e35772b2Smrg -dlopen FILE add the directory containing FILE to the library path 235472b676d7Smrg 2355e35772b2SmrgThis mode sets the library path environment variable according to \`-dlopen' 2356e35772b2Smrgflags. 235772b676d7Smrg 2358e35772b2SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359e35772b2Smrginto their corresponding uninstalled binary, and any of their required library 2360e35772b2Smrgdirectories are added to the library path. 236172b676d7Smrg 2362e35772b2SmrgThen, COMMAND is executed, with ARGS as arguments." 2363e35772b2Smrg ;; 236472b676d7Smrg 2365e35772b2Smrg finish) 2366e35772b2Smrg $ECHO \ 2367e35772b2Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 236872b676d7Smrg 2369e35772b2SmrgComplete the installation of libtool libraries. 237072b676d7Smrg 2371e35772b2SmrgEach LIBDIR is a directory that contains libtool libraries. 237272b676d7Smrg 2373e35772b2SmrgThe commands that this mode executes may require superuser privileges. Use 2374e35772b2Smrgthe \`--dry-run' option if you just want to see what would be executed." 2375e35772b2Smrg ;; 237672b676d7Smrg 2377e35772b2Smrg install) 2378e35772b2Smrg $ECHO \ 2379e35772b2Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 238072b676d7Smrg 2381e35772b2SmrgInstall executables or libraries. 238272b676d7Smrg 2383e35772b2SmrgINSTALL-COMMAND is the installation command. The first component should be 2384e35772b2Smrgeither the \`install' or \`cp' program. 238572b676d7Smrg 2386e35772b2SmrgThe following components of INSTALL-COMMAND are treated specially: 238772b676d7Smrg 238874c14cd6Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 238972b676d7Smrg 2390e35772b2SmrgThe rest of the components are interpreted as arguments to that command (only 2391e35772b2SmrgBSD-compatible install options are recognized)." 2392e35772b2Smrg ;; 239372b676d7Smrg 2394e35772b2Smrg link) 2395e35772b2Smrg $ECHO \ 2396e35772b2Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 239772b676d7Smrg 2398e35772b2SmrgLink object files or libraries together to form another library, or to 2399e35772b2Smrgcreate an executable program. 240072b676d7Smrg 2401e35772b2SmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402e35772b2Smrga program from several object files. 240372b676d7Smrg 2404e35772b2SmrgThe following components of LINK-COMMAND are treated specially: 240572b676d7Smrg 2406e35772b2Smrg -all-static do not do any dynamic linking at all 2407e35772b2Smrg -avoid-version do not add a version suffix if possible 240874c14cd6Smrg -bindir BINDIR specify path to binaries directory (for systems where 240974c14cd6Smrg libraries must be found in the PATH setting at runtime) 2410e35772b2Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411e35772b2Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412e35772b2Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413e35772b2Smrg -export-symbols SYMFILE 2414e35772b2Smrg try to export only the symbols listed in SYMFILE 2415e35772b2Smrg -export-symbols-regex REGEX 2416e35772b2Smrg try to export only the symbols matching REGEX 2417e35772b2Smrg -LLIBDIR search LIBDIR for required installed libraries 2418e35772b2Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419e35772b2Smrg -module build a library that can dlopened 2420e35772b2Smrg -no-fast-install disable the fast-install mode 2421e35772b2Smrg -no-install link a not-installable executable 2422e35772b2Smrg -no-undefined declare that a library does not refer to external symbols 2423e35772b2Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424e35772b2Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425e35772b2Smrg -precious-files-regex REGEX 2426e35772b2Smrg don't remove output files matching REGEX 2427e35772b2Smrg -release RELEASE specify package release information 2428e35772b2Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429e35772b2Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430e35772b2Smrg -shared only do dynamic linking of libtool libraries 2431e35772b2Smrg -shrext SUFFIX override the standard shared library file extension 2432e35772b2Smrg -static do not do any dynamic linking of uninstalled libtool libraries 2433e35772b2Smrg -static-libtool-libs 2434e35772b2Smrg do not do any dynamic linking of libtool libraries 2435e35772b2Smrg -version-info CURRENT[:REVISION[:AGE]] 2436e35772b2Smrg specify library version info [each variable defaults to 0] 2437e35772b2Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 243874c14cd6Smrg -Wc,FLAG 243974c14cd6Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 244074c14cd6Smrg -Wl,FLAG 244174c14cd6Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 244274c14cd6Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 244372b676d7Smrg 2444e35772b2SmrgAll other options (arguments beginning with \`-') are ignored. 244572b676d7Smrg 2446e35772b2SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447e35772b2Smrgtreated as uninstalled libtool libraries, other files are standard or library 2448e35772b2Smrgobject files. 24491fd23544Smrg 2450e35772b2SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451e35772b2Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452e35772b2Smrgrequired, except when creating a convenience library. 245372b676d7Smrg 2454e35772b2SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455e35772b2Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 245672b676d7Smrg 2457e35772b2SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458e35772b2Smrgis created, otherwise an executable program is created." 245972b676d7Smrg ;; 246072b676d7Smrg 2461e35772b2Smrg uninstall) 2462e35772b2Smrg $ECHO \ 2463e35772b2Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 246472b676d7Smrg 2465e35772b2SmrgRemove libraries from an installation directory. 246672b676d7Smrg 2467e35772b2SmrgRM is the name of the program to use to delete files associated with each FILE 2468e35772b2Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469e35772b2Smrgto RM. 247072b676d7Smrg 2471e35772b2SmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472e35772b2SmrgOtherwise, only FILE itself is deleted using RM." 2473e35772b2Smrg ;; 247472b676d7Smrg 2475e35772b2Smrg *) 247674c14cd6Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477e35772b2Smrg ;; 2478e35772b2Smrg esac 247972b676d7Smrg 248074c14cd6Smrg echo 2481e35772b2Smrg $ECHO "Try \`$progname --help' for more information about other modes." 2482e35772b2Smrg} 248372b676d7Smrg 248474c14cd6Smrg# Now that we've collected a possible --mode arg, show help if necessary 248574c14cd6Smrgif $opt_help; then 248674c14cd6Smrg if test "$opt_help" = :; then 248774c14cd6Smrg func_mode_help 248874c14cd6Smrg else 248974c14cd6Smrg { 249074c14cd6Smrg func_help noexit 249174c14cd6Smrg for opt_mode in compile link execute install finish uninstall clean; do 249274c14cd6Smrg func_mode_help 249374c14cd6Smrg done 249474c14cd6Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 249574c14cd6Smrg { 249674c14cd6Smrg func_help noexit 249774c14cd6Smrg for opt_mode in compile link execute install finish uninstall clean; do 249874c14cd6Smrg echo 249974c14cd6Smrg func_mode_help 250074c14cd6Smrg done 250174c14cd6Smrg } | 250274c14cd6Smrg sed '1d 250374c14cd6Smrg /^When reporting/,/^Report/{ 250474c14cd6Smrg H 250574c14cd6Smrg d 250674c14cd6Smrg } 250774c14cd6Smrg $x 250874c14cd6Smrg /information about other modes/d 250974c14cd6Smrg /more detailed .*MODE/d 251074c14cd6Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 251174c14cd6Smrg fi 251274c14cd6Smrg exit $? 251374c14cd6Smrgfi 251472b676d7Smrg 251572b676d7Smrg 2516e35772b2Smrg# func_mode_execute arg... 2517e35772b2Smrgfunc_mode_execute () 2518e35772b2Smrg{ 2519e35772b2Smrg $opt_debug 2520e35772b2Smrg # The first argument is the command name. 2521e35772b2Smrg cmd="$nonopt" 2522e35772b2Smrg test -z "$cmd" && \ 2523e35772b2Smrg func_fatal_help "you must specify a COMMAND" 252472b676d7Smrg 2525e35772b2Smrg # Handle -dlopen flags immediately. 252674c14cd6Smrg for file in $opt_dlopen; do 2527e35772b2Smrg test -f "$file" \ 2528e35772b2Smrg || func_fatal_help "\`$file' is not a file" 252972b676d7Smrg 2530e35772b2Smrg dir= 2531e35772b2Smrg case $file in 2532e35772b2Smrg *.la) 253374c14cd6Smrg func_resolve_sysroot "$file" 253474c14cd6Smrg file=$func_resolve_sysroot_result 253574c14cd6Smrg 2536e35772b2Smrg # Check to see that this really is a libtool archive. 2537e35772b2Smrg func_lalib_unsafe_p "$file" \ 2538e35772b2Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 253972b676d7Smrg 2540e35772b2Smrg # Read the libtool library. 2541e35772b2Smrg dlname= 2542e35772b2Smrg library_names= 2543e35772b2Smrg func_source "$file" 254472b676d7Smrg 2545e35772b2Smrg # Skip this library if it cannot be dlopened. 2546e35772b2Smrg if test -z "$dlname"; then 2547e35772b2Smrg # Warn if it was a shared library. 2548e35772b2Smrg test -n "$library_names" && \ 2549e35772b2Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550e35772b2Smrg continue 2551e35772b2Smrg fi 255272b676d7Smrg 2553e35772b2Smrg func_dirname "$file" "" "." 2554e35772b2Smrg dir="$func_dirname_result" 255572b676d7Smrg 2556e35772b2Smrg if test -f "$dir/$objdir/$dlname"; then 255774c14cd6Smrg func_append dir "/$objdir" 2558e35772b2Smrg else 2559e35772b2Smrg if test ! -f "$dir/$dlname"; then 2560e35772b2Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561e35772b2Smrg fi 2562e35772b2Smrg fi 256372b676d7Smrg ;; 256472b676d7Smrg 2565e35772b2Smrg *.lo) 2566e35772b2Smrg # Just add the directory containing the .lo file. 2567e35772b2Smrg func_dirname "$file" "" "." 2568e35772b2Smrg dir="$func_dirname_result" 256972b676d7Smrg ;; 257072b676d7Smrg 2571e35772b2Smrg *) 2572e35772b2Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 257372b676d7Smrg continue 257472b676d7Smrg ;; 2575e35772b2Smrg esac 257672b676d7Smrg 2577e35772b2Smrg # Get the absolute pathname. 2578e35772b2Smrg absdir=`cd "$dir" && pwd` 2579e35772b2Smrg test -n "$absdir" && dir="$absdir" 258072b676d7Smrg 2581e35772b2Smrg # Now add the directory to shlibpath_var. 2582e35772b2Smrg if eval "test -z \"\$$shlibpath_var\""; then 2583e35772b2Smrg eval "$shlibpath_var=\"\$dir\"" 2584e35772b2Smrg else 2585e35772b2Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586e35772b2Smrg fi 2587e35772b2Smrg done 258872b676d7Smrg 2589e35772b2Smrg # This variable tells wrapper scripts just to set shlibpath_var 2590e35772b2Smrg # rather than running their programs. 2591e35772b2Smrg libtool_execute_magic="$magic" 259272b676d7Smrg 2593e35772b2Smrg # Check if any of the arguments is a wrapper script. 2594e35772b2Smrg args= 2595e35772b2Smrg for file 2596e35772b2Smrg do 2597e35772b2Smrg case $file in 259874c14cd6Smrg -* | *.la | *.lo ) ;; 2599e35772b2Smrg *) 2600e35772b2Smrg # Do a test to see if this is really a libtool program. 2601e35772b2Smrg if func_ltwrapper_script_p "$file"; then 2602e35772b2Smrg func_source "$file" 2603e35772b2Smrg # Transform arg to wrapped name. 2604e35772b2Smrg file="$progdir/$program" 2605e35772b2Smrg elif func_ltwrapper_executable_p "$file"; then 2606e35772b2Smrg func_ltwrapper_scriptname "$file" 2607e35772b2Smrg func_source "$func_ltwrapper_scriptname_result" 2608e35772b2Smrg # Transform arg to wrapped name. 2609e35772b2Smrg file="$progdir/$program" 2610e35772b2Smrg fi 2611e35772b2Smrg ;; 2612e35772b2Smrg esac 2613e35772b2Smrg # Quote arguments (to preserve shell metacharacters). 261474c14cd6Smrg func_append_quoted args "$file" 2615e35772b2Smrg done 261672b676d7Smrg 2617e35772b2Smrg if test "X$opt_dry_run" = Xfalse; then 2618e35772b2Smrg if test -n "$shlibpath_var"; then 2619e35772b2Smrg # Export the shlibpath_var. 2620e35772b2Smrg eval "export $shlibpath_var" 2621e35772b2Smrg fi 262272b676d7Smrg 2623e35772b2Smrg # Restore saved environment variables 2624e35772b2Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625e35772b2Smrg do 2626e35772b2Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627e35772b2Smrg $lt_var=\$save_$lt_var; export $lt_var 262872b676d7Smrg else 2629e35772b2Smrg $lt_unset $lt_var 2630e35772b2Smrg fi" 2631e35772b2Smrg done 263272b676d7Smrg 2633e35772b2Smrg # Now prepare to actually exec the command. 2634e35772b2Smrg exec_cmd="\$cmd$args" 2635e35772b2Smrg else 2636e35772b2Smrg # Display what would be done. 2637e35772b2Smrg if test -n "$shlibpath_var"; then 2638e35772b2Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 263974c14cd6Smrg echo "export $shlibpath_var" 2640e35772b2Smrg fi 2641e35772b2Smrg $ECHO "$cmd$args" 2642e35772b2Smrg exit $EXIT_SUCCESS 2643e35772b2Smrg fi 2644e35772b2Smrg} 264572b676d7Smrg 264674c14cd6Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 264772b676d7Smrg 264872b676d7Smrg 2649e35772b2Smrg# func_mode_finish arg... 2650e35772b2Smrgfunc_mode_finish () 2651e35772b2Smrg{ 2652e35772b2Smrg $opt_debug 265374c14cd6Smrg libs= 265474c14cd6Smrg libdirs= 2655e35772b2Smrg admincmds= 265672b676d7Smrg 265774c14cd6Smrg for opt in "$nonopt" ${1+"$@"} 265874c14cd6Smrg do 265974c14cd6Smrg if test -d "$opt"; then 266074c14cd6Smrg func_append libdirs " $opt" 266174c14cd6Smrg 266274c14cd6Smrg elif test -f "$opt"; then 266374c14cd6Smrg if func_lalib_unsafe_p "$opt"; then 266474c14cd6Smrg func_append libs " $opt" 266574c14cd6Smrg else 266674c14cd6Smrg func_warning "\`$opt' is not a valid libtool archive" 266774c14cd6Smrg fi 266874c14cd6Smrg 266974c14cd6Smrg else 267074c14cd6Smrg func_fatal_error "invalid argument \`$opt'" 267174c14cd6Smrg fi 267274c14cd6Smrg done 267374c14cd6Smrg 267474c14cd6Smrg if test -n "$libs"; then 267574c14cd6Smrg if test -n "$lt_sysroot"; then 267674c14cd6Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 267774c14cd6Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 267874c14cd6Smrg else 267974c14cd6Smrg sysroot_cmd= 268074c14cd6Smrg fi 268174c14cd6Smrg 268274c14cd6Smrg # Remove sysroot references 268374c14cd6Smrg if $opt_dry_run; then 268474c14cd6Smrg for lib in $libs; do 268574c14cd6Smrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 268674c14cd6Smrg done 268774c14cd6Smrg else 268874c14cd6Smrg tmpdir=`func_mktempdir` 268974c14cd6Smrg for lib in $libs; do 269074c14cd6Smrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 269174c14cd6Smrg > $tmpdir/tmp-la 269274c14cd6Smrg mv -f $tmpdir/tmp-la $lib 269374c14cd6Smrg done 269474c14cd6Smrg ${RM}r "$tmpdir" 269574c14cd6Smrg fi 269674c14cd6Smrg fi 269772b676d7Smrg 269874c14cd6Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699e35772b2Smrg for libdir in $libdirs; do 2700e35772b2Smrg if test -n "$finish_cmds"; then 2701e35772b2Smrg # Do each command in the finish commands. 2702e35772b2Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703e35772b2Smrg'"$cmd"'"' 270472b676d7Smrg fi 2705e35772b2Smrg if test -n "$finish_eval"; then 2706e35772b2Smrg # Do the single finish_eval. 2707e35772b2Smrg eval cmds=\"$finish_eval\" 270874c14cd6Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709e35772b2Smrg $cmds" 2710e35772b2Smrg fi 2711e35772b2Smrg done 2712e35772b2Smrg fi 271372b676d7Smrg 2714e35772b2Smrg # Exit here if they wanted silent mode. 2715e35772b2Smrg $opt_silent && exit $EXIT_SUCCESS 271672b676d7Smrg 271774c14cd6Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 271874c14cd6Smrg echo "----------------------------------------------------------------------" 271974c14cd6Smrg echo "Libraries have been installed in:" 272074c14cd6Smrg for libdir in $libdirs; do 272174c14cd6Smrg $ECHO " $libdir" 272274c14cd6Smrg done 272374c14cd6Smrg echo 272474c14cd6Smrg echo "If you ever happen to want to link against installed libraries" 272574c14cd6Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 272674c14cd6Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 272774c14cd6Smrg echo "flag during linking and do at least one of the following:" 272874c14cd6Smrg if test -n "$shlibpath_var"; then 272974c14cd6Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 273074c14cd6Smrg echo " during execution" 273174c14cd6Smrg fi 273274c14cd6Smrg if test -n "$runpath_var"; then 273374c14cd6Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 273474c14cd6Smrg echo " during linking" 273574c14cd6Smrg fi 273674c14cd6Smrg if test -n "$hardcode_libdir_flag_spec"; then 273774c14cd6Smrg libdir=LIBDIR 273874c14cd6Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2739e35772b2Smrg 274074c14cd6Smrg $ECHO " - use the \`$flag' linker flag" 274174c14cd6Smrg fi 274274c14cd6Smrg if test -n "$admincmds"; then 274374c14cd6Smrg $ECHO " - have your system administrator run these commands:$admincmds" 274474c14cd6Smrg fi 274574c14cd6Smrg if test -f /etc/ld.so.conf; then 274674c14cd6Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 274774c14cd6Smrg fi 274874c14cd6Smrg echo 2749e35772b2Smrg 275074c14cd6Smrg echo "See any operating system documentation about shared libraries for" 275174c14cd6Smrg case $host in 275274c14cd6Smrg solaris2.[6789]|solaris2.1[0-9]) 275374c14cd6Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 275474c14cd6Smrg echo "pages." 275574c14cd6Smrg ;; 275674c14cd6Smrg *) 275774c14cd6Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 275874c14cd6Smrg ;; 275974c14cd6Smrg esac 276074c14cd6Smrg echo "----------------------------------------------------------------------" 276174c14cd6Smrg fi 2762e35772b2Smrg exit $EXIT_SUCCESS 2763e35772b2Smrg} 2764e35772b2Smrg 276574c14cd6Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766e35772b2Smrg 2767e35772b2Smrg 2768e35772b2Smrg# func_mode_install arg... 2769e35772b2Smrgfunc_mode_install () 2770e35772b2Smrg{ 2771e35772b2Smrg $opt_debug 2772e35772b2Smrg # There may be an optional sh(1) argument at the beginning of 2773e35772b2Smrg # install_prog (especially on Windows NT). 2774e35772b2Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775e35772b2Smrg # Allow the use of GNU shtool's install command. 277674c14cd6Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777e35772b2Smrg # Aesthetically quote it. 2778e35772b2Smrg func_quote_for_eval "$nonopt" 2779e35772b2Smrg install_prog="$func_quote_for_eval_result " 2780e35772b2Smrg arg=$1 2781e35772b2Smrg shift 2782e35772b2Smrg else 2783e35772b2Smrg install_prog= 2784e35772b2Smrg arg=$nonopt 2785e35772b2Smrg fi 2786e35772b2Smrg 2787e35772b2Smrg # The real first argument should be the name of the installation program. 2788e35772b2Smrg # Aesthetically quote it. 2789e35772b2Smrg func_quote_for_eval "$arg" 279074c14cd6Smrg func_append install_prog "$func_quote_for_eval_result" 279174c14cd6Smrg install_shared_prog=$install_prog 279274c14cd6Smrg case " $install_prog " in 279374c14cd6Smrg *[\\\ /]cp\ *) install_cp=: ;; 279474c14cd6Smrg *) install_cp=false ;; 279574c14cd6Smrg esac 2796e35772b2Smrg 2797e35772b2Smrg # We need to accept at least all the BSD install flags. 2798e35772b2Smrg dest= 2799e35772b2Smrg files= 2800e35772b2Smrg opts= 2801e35772b2Smrg prev= 2802e35772b2Smrg install_type= 2803e35772b2Smrg isdir=no 2804e35772b2Smrg stripme= 280574c14cd6Smrg no_mode=: 2806e35772b2Smrg for arg 2807e35772b2Smrg do 280874c14cd6Smrg arg2= 2809e35772b2Smrg if test -n "$dest"; then 281074c14cd6Smrg func_append files " $dest" 2811e35772b2Smrg dest=$arg 2812e35772b2Smrg continue 2813e35772b2Smrg fi 2814e35772b2Smrg 2815e35772b2Smrg case $arg in 2816e35772b2Smrg -d) isdir=yes ;; 2817e35772b2Smrg -f) 281874c14cd6Smrg if $install_cp; then :; else 281974c14cd6Smrg prev=$arg 282074c14cd6Smrg fi 2821e35772b2Smrg ;; 2822e35772b2Smrg -g | -m | -o) 2823e35772b2Smrg prev=$arg 2824e35772b2Smrg ;; 2825e35772b2Smrg -s) 2826e35772b2Smrg stripme=" -s" 2827e35772b2Smrg continue 2828e35772b2Smrg ;; 2829e35772b2Smrg -*) 2830e35772b2Smrg ;; 2831e35772b2Smrg *) 2832e35772b2Smrg # If the previous option needed an argument, then skip it. 2833e35772b2Smrg if test -n "$prev"; then 283474c14cd6Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 283574c14cd6Smrg arg2=$install_override_mode 283674c14cd6Smrg no_mode=false 283774c14cd6Smrg fi 283872b676d7Smrg prev= 283972b676d7Smrg else 2840e35772b2Smrg dest=$arg 2841e35772b2Smrg continue 284272b676d7Smrg fi 284372b676d7Smrg ;; 2844e35772b2Smrg esac 284572b676d7Smrg 2846e35772b2Smrg # Aesthetically quote the argument. 2847e35772b2Smrg func_quote_for_eval "$arg" 284874c14cd6Smrg func_append install_prog " $func_quote_for_eval_result" 284974c14cd6Smrg if test -n "$arg2"; then 285074c14cd6Smrg func_quote_for_eval "$arg2" 285174c14cd6Smrg fi 285274c14cd6Smrg func_append install_shared_prog " $func_quote_for_eval_result" 2853e35772b2Smrg done 285472b676d7Smrg 2855e35772b2Smrg test -z "$install_prog" && \ 2856e35772b2Smrg func_fatal_help "you must specify an install program" 285772b676d7Smrg 2858e35772b2Smrg test -n "$prev" && \ 2859e35772b2Smrg func_fatal_help "the \`$prev' option requires an argument" 286072b676d7Smrg 286174c14cd6Smrg if test -n "$install_override_mode" && $no_mode; then 286274c14cd6Smrg if $install_cp; then :; else 286374c14cd6Smrg func_quote_for_eval "$install_override_mode" 286474c14cd6Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 286574c14cd6Smrg fi 286674c14cd6Smrg fi 286774c14cd6Smrg 2868e35772b2Smrg if test -z "$files"; then 2869e35772b2Smrg if test -z "$dest"; then 2870e35772b2Smrg func_fatal_help "no file or destination specified" 2871e35772b2Smrg else 2872e35772b2Smrg func_fatal_help "you must specify a destination" 2873e35772b2Smrg fi 287472b676d7Smrg fi 287572b676d7Smrg 2876e35772b2Smrg # Strip any trailing slash from the destination. 2877e35772b2Smrg func_stripname '' '/' "$dest" 2878e35772b2Smrg dest=$func_stripname_result 287972b676d7Smrg 2880e35772b2Smrg # Check to see that the destination is a directory. 2881e35772b2Smrg test -d "$dest" && isdir=yes 2882e35772b2Smrg if test "$isdir" = yes; then 2883e35772b2Smrg destdir="$dest" 2884e35772b2Smrg destname= 288572b676d7Smrg else 2886e35772b2Smrg func_dirname_and_basename "$dest" "" "." 2887e35772b2Smrg destdir="$func_dirname_result" 2888e35772b2Smrg destname="$func_basename_result" 288972b676d7Smrg 2890e35772b2Smrg # Not a directory, so check to see that there is only one file specified. 2891e35772b2Smrg set dummy $files; shift 2892e35772b2Smrg test "$#" -gt 1 && \ 2893e35772b2Smrg func_fatal_help "\`$dest' is not a directory" 289472b676d7Smrg fi 2895e35772b2Smrg case $destdir in 2896e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 289772b676d7Smrg *) 2898e35772b2Smrg for file in $files; do 2899e35772b2Smrg case $file in 2900e35772b2Smrg *.lo) ;; 2901e35772b2Smrg *) 2902e35772b2Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903e35772b2Smrg ;; 2904e35772b2Smrg esac 2905e35772b2Smrg done 290672b676d7Smrg ;; 290772b676d7Smrg esac 290872b676d7Smrg 2909e35772b2Smrg # This variable tells wrapper scripts just to set variables rather 2910e35772b2Smrg # than running their programs. 2911e35772b2Smrg libtool_install_magic="$magic" 291272b676d7Smrg 2913e35772b2Smrg staticlibs= 2914e35772b2Smrg future_libdirs= 2915e35772b2Smrg current_libdirs= 2916e35772b2Smrg for file in $files; do 291772b676d7Smrg 2918e35772b2Smrg # Do each installation. 2919e35772b2Smrg case $file in 2920e35772b2Smrg *.$libext) 2921e35772b2Smrg # Do the static libraries later. 292274c14cd6Smrg func_append staticlibs " $file" 2923e35772b2Smrg ;; 2924e35772b2Smrg 2925e35772b2Smrg *.la) 292674c14cd6Smrg func_resolve_sysroot "$file" 292774c14cd6Smrg file=$func_resolve_sysroot_result 292874c14cd6Smrg 2929e35772b2Smrg # Check to see that this really is a libtool archive. 2930e35772b2Smrg func_lalib_unsafe_p "$file" \ 2931e35772b2Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932e35772b2Smrg 2933e35772b2Smrg library_names= 2934e35772b2Smrg old_library= 2935e35772b2Smrg relink_command= 2936e35772b2Smrg func_source "$file" 2937e35772b2Smrg 2938e35772b2Smrg # Add the libdir to current_libdirs if it is the destination. 2939e35772b2Smrg if test "X$destdir" = "X$libdir"; then 2940e35772b2Smrg case "$current_libdirs " in 2941e35772b2Smrg *" $libdir "*) ;; 294274c14cd6Smrg *) func_append current_libdirs " $libdir" ;; 294372b676d7Smrg esac 2944e35772b2Smrg else 2945e35772b2Smrg # Note the libdir as a future libdir. 2946e35772b2Smrg case "$future_libdirs " in 2947e35772b2Smrg *" $libdir "*) ;; 294874c14cd6Smrg *) func_append future_libdirs " $libdir" ;; 2949e35772b2Smrg esac 2950e35772b2Smrg fi 295172b676d7Smrg 2952e35772b2Smrg func_dirname "$file" "/" "" 2953e35772b2Smrg dir="$func_dirname_result" 295474c14cd6Smrg func_append dir "$objdir" 2955e35772b2Smrg 2956e35772b2Smrg if test -n "$relink_command"; then 2957e35772b2Smrg # Determine the prefix the user has applied to our future dir. 295874c14cd6Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959e35772b2Smrg 2960e35772b2Smrg # Don't allow the user to place us outside of our expected 2961e35772b2Smrg # location b/c this prevents finding dependent libraries that 2962e35772b2Smrg # are installed to the same prefix. 2963e35772b2Smrg # At present, this check doesn't affect windows .dll's that 2964e35772b2Smrg # are installed into $libdir/../bin (currently, that works fine) 2965e35772b2Smrg # but it's something to keep an eye on. 2966e35772b2Smrg test "$inst_prefix_dir" = "$destdir" && \ 2967e35772b2Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968e35772b2Smrg 2969e35772b2Smrg if test -n "$inst_prefix_dir"; then 2970e35772b2Smrg # Stick the inst_prefix_dir data into the link command. 297174c14cd6Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972e35772b2Smrg else 297374c14cd6Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974e35772b2Smrg fi 2975e35772b2Smrg 2976e35772b2Smrg func_warning "relinking \`$file'" 2977e35772b2Smrg func_show_eval "$relink_command" \ 2978e35772b2Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979e35772b2Smrg fi 2980e35772b2Smrg 2981e35772b2Smrg # See the names of the shared library. 2982e35772b2Smrg set dummy $library_names; shift 2983e35772b2Smrg if test -n "$1"; then 2984e35772b2Smrg realname="$1" 2985e35772b2Smrg shift 2986e35772b2Smrg 2987e35772b2Smrg srcname="$realname" 2988e35772b2Smrg test -n "$relink_command" && srcname="$realname"T 2989e35772b2Smrg 2990e35772b2Smrg # Install the shared library and build the symlinks. 299174c14cd6Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992e35772b2Smrg 'exit $?' 2993e35772b2Smrg tstripme="$stripme" 2994e35772b2Smrg case $host_os in 2995e35772b2Smrg cygwin* | mingw* | pw32* | cegcc*) 2996e35772b2Smrg case $realname in 2997e35772b2Smrg *.dll.a) 2998e35772b2Smrg tstripme="" 2999e35772b2Smrg ;; 3000e35772b2Smrg esac 300172b676d7Smrg ;; 300272b676d7Smrg esac 3003e35772b2Smrg if test -n "$tstripme" && test -n "$striplib"; then 3004e35772b2Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 300572b676d7Smrg fi 3006e35772b2Smrg 3007e35772b2Smrg if test "$#" -gt 0; then 3008e35772b2Smrg # Delete the old symlinks, and create new ones. 3009e35772b2Smrg # Try `ln -sf' first, because the `ln' binary might depend on 3010e35772b2Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011e35772b2Smrg # so we also need to try rm && ln -s. 3012e35772b2Smrg for linkname 3013e35772b2Smrg do 3014e35772b2Smrg test "$linkname" != "$realname" \ 3015e35772b2Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 301672b676d7Smrg done 301772b676d7Smrg fi 301872b676d7Smrg 3019e35772b2Smrg # Do each command in the postinstall commands. 3020e35772b2Smrg lib="$destdir/$realname" 3021e35772b2Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 302272b676d7Smrg fi 302372b676d7Smrg 3024e35772b2Smrg # Install the pseudo-library for information purposes. 3025e35772b2Smrg func_basename "$file" 3026e35772b2Smrg name="$func_basename_result" 3027e35772b2Smrg instname="$dir/$name"i 3028e35772b2Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 302972b676d7Smrg 3030e35772b2Smrg # Maybe install the static library, too. 303174c14cd6Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032e35772b2Smrg ;; 303372b676d7Smrg 3034e35772b2Smrg *.lo) 3035e35772b2Smrg # Install (i.e. copy) a libtool object. 303672b676d7Smrg 3037e35772b2Smrg # Figure out destination file name, if it wasn't already specified. 3038e35772b2Smrg if test -n "$destname"; then 3039e35772b2Smrg destfile="$destdir/$destname" 3040e35772b2Smrg else 3041e35772b2Smrg func_basename "$file" 3042e35772b2Smrg destfile="$func_basename_result" 3043e35772b2Smrg destfile="$destdir/$destfile" 304472b676d7Smrg fi 304572b676d7Smrg 3046e35772b2Smrg # Deduce the name of the destination old-style object file. 3047e35772b2Smrg case $destfile in 3048e35772b2Smrg *.lo) 3049e35772b2Smrg func_lo2o "$destfile" 3050e35772b2Smrg staticdest=$func_lo2o_result 3051e35772b2Smrg ;; 3052e35772b2Smrg *.$objext) 3053e35772b2Smrg staticdest="$destfile" 3054e35772b2Smrg destfile= 3055e35772b2Smrg ;; 3056e35772b2Smrg *) 3057e35772b2Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058e35772b2Smrg ;; 3059e35772b2Smrg esac 306072b676d7Smrg 3061e35772b2Smrg # Install the libtool object if requested. 3062e35772b2Smrg test -n "$destfile" && \ 3063e35772b2Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 306472b676d7Smrg 3065e35772b2Smrg # Install the old object if enabled. 3066e35772b2Smrg if test "$build_old_libs" = yes; then 3067e35772b2Smrg # Deduce the name of the old-style object file. 3068e35772b2Smrg func_lo2o "$file" 3069e35772b2Smrg staticobj=$func_lo2o_result 3070e35772b2Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 307172b676d7Smrg fi 3072e35772b2Smrg exit $EXIT_SUCCESS 3073e35772b2Smrg ;; 307472b676d7Smrg 3075e35772b2Smrg *) 3076e35772b2Smrg # Figure out destination file name, if it wasn't already specified. 3077e35772b2Smrg if test -n "$destname"; then 3078e35772b2Smrg destfile="$destdir/$destname" 3079e35772b2Smrg else 3080e35772b2Smrg func_basename "$file" 3081e35772b2Smrg destfile="$func_basename_result" 3082e35772b2Smrg destfile="$destdir/$destfile" 3083e35772b2Smrg fi 308472b676d7Smrg 3085e35772b2Smrg # If the file is missing, and there is a .exe on the end, strip it 3086e35772b2Smrg # because it is most likely a libtool script we actually want to 3087e35772b2Smrg # install 3088e35772b2Smrg stripped_ext="" 3089e35772b2Smrg case $file in 3090e35772b2Smrg *.exe) 3091e35772b2Smrg if test ! -f "$file"; then 3092e35772b2Smrg func_stripname '' '.exe' "$file" 3093e35772b2Smrg file=$func_stripname_result 3094e35772b2Smrg stripped_ext=".exe" 3095e35772b2Smrg fi 3096e35772b2Smrg ;; 3097e35772b2Smrg esac 3098e35772b2Smrg 3099e35772b2Smrg # Do a test to see if this is really a libtool program. 3100e35772b2Smrg case $host in 3101e35772b2Smrg *cygwin* | *mingw*) 3102e35772b2Smrg if func_ltwrapper_executable_p "$file"; then 3103e35772b2Smrg func_ltwrapper_scriptname "$file" 3104e35772b2Smrg wrapper=$func_ltwrapper_scriptname_result 3105e35772b2Smrg else 3106e35772b2Smrg func_stripname '' '.exe' "$file" 3107e35772b2Smrg wrapper=$func_stripname_result 3108e35772b2Smrg fi 3109e35772b2Smrg ;; 311072b676d7Smrg *) 3111e35772b2Smrg wrapper=$file 3112e35772b2Smrg ;; 3113e35772b2Smrg esac 3114e35772b2Smrg if func_ltwrapper_script_p "$wrapper"; then 3115e35772b2Smrg notinst_deplibs= 3116e35772b2Smrg relink_command= 3117e35772b2Smrg 3118e35772b2Smrg func_source "$wrapper" 3119e35772b2Smrg 3120e35772b2Smrg # Check the variables that should have been set. 3121e35772b2Smrg test -z "$generated_by_libtool_version" && \ 3122e35772b2Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123e35772b2Smrg 3124e35772b2Smrg finalize=yes 3125e35772b2Smrg for lib in $notinst_deplibs; do 3126e35772b2Smrg # Check to see that each library is installed. 3127e35772b2Smrg libdir= 3128e35772b2Smrg if test -f "$lib"; then 3129e35772b2Smrg func_source "$lib" 3130e35772b2Smrg fi 313174c14cd6Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132e35772b2Smrg if test -n "$libdir" && test ! -f "$libfile"; then 3133e35772b2Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 3134e35772b2Smrg finalize=no 3135e35772b2Smrg fi 3136e35772b2Smrg done 3137e35772b2Smrg 3138e35772b2Smrg relink_command= 3139e35772b2Smrg func_source "$wrapper" 3140e35772b2Smrg 3141e35772b2Smrg outputname= 3142e35772b2Smrg if test "$fast_install" = no && test -n "$relink_command"; then 3143e35772b2Smrg $opt_dry_run || { 3144e35772b2Smrg if test "$finalize" = yes; then 3145e35772b2Smrg tmpdir=`func_mktempdir` 3146e35772b2Smrg func_basename "$file$stripped_ext" 3147e35772b2Smrg file="$func_basename_result" 3148e35772b2Smrg outputname="$tmpdir/$file" 3149e35772b2Smrg # Replace the output file specification. 315074c14cd6Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151e35772b2Smrg 3152e35772b2Smrg $opt_silent || { 3153e35772b2Smrg func_quote_for_expand "$relink_command" 3154e35772b2Smrg eval "func_echo $func_quote_for_expand_result" 3155e35772b2Smrg } 3156e35772b2Smrg if eval "$relink_command"; then : 3157e35772b2Smrg else 3158e35772b2Smrg func_error "error: relink \`$file' with the above command before installing it" 3159e35772b2Smrg $opt_dry_run || ${RM}r "$tmpdir" 3160e35772b2Smrg continue 3161e35772b2Smrg fi 3162e35772b2Smrg file="$outputname" 3163e35772b2Smrg else 3164e35772b2Smrg func_warning "cannot relink \`$file'" 3165e35772b2Smrg fi 3166e35772b2Smrg } 3167e35772b2Smrg else 3168e35772b2Smrg # Install the binary that we compiled earlier. 316974c14cd6Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 317072b676d7Smrg fi 3171e35772b2Smrg fi 3172e35772b2Smrg 3173e35772b2Smrg # remove .exe since cygwin /usr/bin/install will append another 3174e35772b2Smrg # one anyway 3175e35772b2Smrg case $install_prog,$host in 3176e35772b2Smrg */usr/bin/install*,*cygwin*) 3177e35772b2Smrg case $file:$destfile in 3178e35772b2Smrg *.exe:*.exe) 3179e35772b2Smrg # this is ok 3180e35772b2Smrg ;; 3181e35772b2Smrg *.exe:*) 3182e35772b2Smrg destfile=$destfile.exe 3183e35772b2Smrg ;; 3184e35772b2Smrg *:*.exe) 3185e35772b2Smrg func_stripname '' '.exe' "$destfile" 3186e35772b2Smrg destfile=$func_stripname_result 3187e35772b2Smrg ;; 3188e35772b2Smrg esac 318972b676d7Smrg ;; 319072b676d7Smrg esac 3191e35772b2Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192e35772b2Smrg $opt_dry_run || if test -n "$outputname"; then 3193e35772b2Smrg ${RM}r "$tmpdir" 3194e35772b2Smrg fi 3195e35772b2Smrg ;; 3196e35772b2Smrg esac 3197e35772b2Smrg done 319872b676d7Smrg 3199e35772b2Smrg for file in $staticlibs; do 3200e35772b2Smrg func_basename "$file" 3201e35772b2Smrg name="$func_basename_result" 3202e35772b2Smrg 3203e35772b2Smrg # Set up the ranlib parameters. 3204e35772b2Smrg oldlib="$destdir/$name" 320574c14cd6Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 320674c14cd6Smrg tool_oldlib=$func_to_tool_file_result 3207e35772b2Smrg 3208e35772b2Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209e35772b2Smrg 3210e35772b2Smrg if test -n "$stripme" && test -n "$old_striplib"; then 321174c14cd6Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212e35772b2Smrg fi 3213e35772b2Smrg 3214e35772b2Smrg # Do each command in the postinstall commands. 3215e35772b2Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216e35772b2Smrg done 3217e35772b2Smrg 3218e35772b2Smrg test -n "$future_libdirs" && \ 3219e35772b2Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3220e35772b2Smrg 3221e35772b2Smrg if test -n "$current_libdirs"; then 3222e35772b2Smrg # Maybe just do a dry run. 3223e35772b2Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224e35772b2Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225e35772b2Smrg else 3226e35772b2Smrg exit $EXIT_SUCCESS 3227e35772b2Smrg fi 3228e35772b2Smrg} 3229e35772b2Smrg 323074c14cd6Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231e35772b2Smrg 3232e35772b2Smrg 3233e35772b2Smrg# func_generate_dlsyms outputname originator pic_p 3234e35772b2Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235e35772b2Smrg# a dlpreopen symbol table. 3236e35772b2Smrgfunc_generate_dlsyms () 3237e35772b2Smrg{ 3238e35772b2Smrg $opt_debug 3239e35772b2Smrg my_outputname="$1" 3240e35772b2Smrg my_originator="$2" 3241e35772b2Smrg my_pic_p="${3-no}" 3242e35772b2Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243e35772b2Smrg my_dlsyms= 3244e35772b2Smrg 3245e35772b2Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246e35772b2Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247e35772b2Smrg my_dlsyms="${my_outputname}S.c" 3248e35772b2Smrg else 3249e35772b2Smrg func_error "not configured to extract global symbols from dlpreopened files" 3250e35772b2Smrg fi 3251e35772b2Smrg fi 3252e35772b2Smrg 3253e35772b2Smrg if test -n "$my_dlsyms"; then 3254e35772b2Smrg case $my_dlsyms in 3255e35772b2Smrg "") ;; 3256e35772b2Smrg *.c) 3257e35772b2Smrg # Discover the nlist of each of the dlfiles. 3258e35772b2Smrg nlist="$output_objdir/${my_outputname}.nm" 3259e35772b2Smrg 3260e35772b2Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261e35772b2Smrg 3262e35772b2Smrg # Parse the name list into a source file. 3263e35772b2Smrg func_verbose "creating $output_objdir/$my_dlsyms" 3264e35772b2Smrg 3265e35772b2Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266e35772b2Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267e35772b2Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268e35772b2Smrg 3269e35772b2Smrg#ifdef __cplusplus 3270e35772b2Smrgextern \"C\" { 3271e35772b2Smrg#endif 3272e35772b2Smrg 327374c14cd6Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 327474c14cd6Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 327574c14cd6Smrg#endif 327674c14cd6Smrg 327774c14cd6Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 327874c14cd6Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 327974c14cd6Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 328074c14cd6Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 328174c14cd6Smrg# define LT_DLSYM_CONST 328274c14cd6Smrg#elif defined(__osf__) 328374c14cd6Smrg/* This system does not cope well with relocations in const data. */ 328474c14cd6Smrg# define LT_DLSYM_CONST 328574c14cd6Smrg#else 328674c14cd6Smrg# define LT_DLSYM_CONST const 328774c14cd6Smrg#endif 328874c14cd6Smrg 3289e35772b2Smrg/* External symbol declarations for the compiler. */\ 3290e35772b2Smrg" 3291e35772b2Smrg 3292e35772b2Smrg if test "$dlself" = yes; then 3293e35772b2Smrg func_verbose "generating symbol list for \`$output'" 3294e35772b2Smrg 3295e35772b2Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296e35772b2Smrg 3297e35772b2Smrg # Add our own program objects to the symbol list. 329874c14cd6Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299e35772b2Smrg for progfile in $progfiles; do 330074c14cd6Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 330174c14cd6Smrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 330274c14cd6Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303e35772b2Smrg done 3304e35772b2Smrg 3305e35772b2Smrg if test -n "$exclude_expsyms"; then 3306e35772b2Smrg $opt_dry_run || { 3307e35772b2Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308e35772b2Smrg eval '$MV "$nlist"T "$nlist"' 3309e35772b2Smrg } 331072b676d7Smrg fi 3311e35772b2Smrg 3312e35772b2Smrg if test -n "$export_symbols_regex"; then 3313e35772b2Smrg $opt_dry_run || { 3314e35772b2Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315e35772b2Smrg eval '$MV "$nlist"T "$nlist"' 3316e35772b2Smrg } 3317e35772b2Smrg fi 3318e35772b2Smrg 3319e35772b2Smrg # Prepare the list of exported symbols 3320e35772b2Smrg if test -z "$export_symbols"; then 3321e35772b2Smrg export_symbols="$output_objdir/$outputname.exp" 3322e35772b2Smrg $opt_dry_run || { 3323e35772b2Smrg $RM $export_symbols 3324e35772b2Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325e35772b2Smrg case $host in 3326e35772b2Smrg *cygwin* | *mingw* | *cegcc* ) 3327e35772b2Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328e35772b2Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329e35772b2Smrg ;; 3330e35772b2Smrg esac 3331e35772b2Smrg } 333272b676d7Smrg else 3333e35772b2Smrg $opt_dry_run || { 3334e35772b2Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335e35772b2Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336e35772b2Smrg eval '$MV "$nlist"T "$nlist"' 3337e35772b2Smrg case $host in 333874c14cd6Smrg *cygwin* | *mingw* | *cegcc* ) 3339e35772b2Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340e35772b2Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341e35772b2Smrg ;; 3342e35772b2Smrg esac 3343e35772b2Smrg } 334472b676d7Smrg fi 3345e35772b2Smrg fi 334672b676d7Smrg 3347e35772b2Smrg for dlprefile in $dlprefiles; do 3348e35772b2Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349e35772b2Smrg func_basename "$dlprefile" 3350e35772b2Smrg name="$func_basename_result" 335174c14cd6Smrg case $host in 335274c14cd6Smrg *cygwin* | *mingw* | *cegcc* ) 335374c14cd6Smrg # if an import library, we need to obtain dlname 335474c14cd6Smrg if func_win32_import_lib_p "$dlprefile"; then 335574c14cd6Smrg func_tr_sh "$dlprefile" 335674c14cd6Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 335774c14cd6Smrg dlprefile_dlbasename="" 335874c14cd6Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 335974c14cd6Smrg # Use subshell, to avoid clobbering current variable values 336074c14cd6Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 336174c14cd6Smrg if test -n "$dlprefile_dlname" ; then 336274c14cd6Smrg func_basename "$dlprefile_dlname" 336374c14cd6Smrg dlprefile_dlbasename="$func_basename_result" 336474c14cd6Smrg else 336574c14cd6Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 336674c14cd6Smrg $sharedlib_from_linklib_cmd "$dlprefile" 336774c14cd6Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 336874c14cd6Smrg fi 336974c14cd6Smrg fi 337074c14cd6Smrg $opt_dry_run || { 337174c14cd6Smrg if test -n "$dlprefile_dlbasename" ; then 337274c14cd6Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 337374c14cd6Smrg else 337474c14cd6Smrg func_warning "Could not compute DLL name from $name" 337574c14cd6Smrg eval '$ECHO ": $name " >> "$nlist"' 337674c14cd6Smrg fi 337774c14cd6Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 337874c14cd6Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 337974c14cd6Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 338074c14cd6Smrg } 338174c14cd6Smrg else # not an import lib 338274c14cd6Smrg $opt_dry_run || { 338374c14cd6Smrg eval '$ECHO ": $name " >> "$nlist"' 338474c14cd6Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 338574c14cd6Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 338674c14cd6Smrg } 338774c14cd6Smrg fi 338874c14cd6Smrg ;; 338974c14cd6Smrg *) 339074c14cd6Smrg $opt_dry_run || { 339174c14cd6Smrg eval '$ECHO ": $name " >> "$nlist"' 339274c14cd6Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 339374c14cd6Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 339474c14cd6Smrg } 339574c14cd6Smrg ;; 339674c14cd6Smrg esac 3397e35772b2Smrg done 3398e35772b2Smrg 3399e35772b2Smrg $opt_dry_run || { 3400e35772b2Smrg # Make sure we have at least an empty file. 3401e35772b2Smrg test -f "$nlist" || : > "$nlist" 3402e35772b2Smrg 3403e35772b2Smrg if test -n "$exclude_expsyms"; then 3404e35772b2Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405e35772b2Smrg $MV "$nlist"T "$nlist" 340672b676d7Smrg fi 3407e35772b2Smrg 3408e35772b2Smrg # Try sorting and uniquifying the output. 3409e35772b2Smrg if $GREP -v "^: " < "$nlist" | 3410e35772b2Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411e35772b2Smrg sort -k 3 3412e35772b2Smrg else 3413e35772b2Smrg sort +2 3414e35772b2Smrg fi | 3415e35772b2Smrg uniq > "$nlist"S; then 3416e35772b2Smrg : 341772b676d7Smrg else 3418e35772b2Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 341972b676d7Smrg fi 342072b676d7Smrg 3421e35772b2Smrg if test -f "$nlist"S; then 3422e35772b2Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 342372b676d7Smrg else 342474c14cd6Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 342572b676d7Smrg fi 342672b676d7Smrg 342774c14cd6Smrg echo >> "$output_objdir/$my_dlsyms" "\ 342872b676d7Smrg 3429e35772b2Smrg/* The mapping between symbol names and symbols. */ 3430e35772b2Smrgtypedef struct { 3431e35772b2Smrg const char *name; 3432e35772b2Smrg void *address; 3433e35772b2Smrg} lt_dlsymlist; 343474c14cd6Smrgextern LT_DLSYM_CONST lt_dlsymlist 3435e35772b2Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 343674c14cd6SmrgLT_DLSYM_CONST lt_dlsymlist 3437e35772b2Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 3438e35772b2Smrg{\ 3439e35772b2Smrg { \"$my_originator\", (void *) 0 }," 344072b676d7Smrg 3441e35772b2Smrg case $need_lib_prefix in 3442e35772b2Smrg no) 3443e35772b2Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444e35772b2Smrg ;; 3445e35772b2Smrg *) 3446e35772b2Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447e35772b2Smrg ;; 3448e35772b2Smrg esac 344974c14cd6Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3450e35772b2Smrg {0, (void *) 0} 3451e35772b2Smrg}; 345272b676d7Smrg 3453e35772b2Smrg/* This works around a problem in FreeBSD linker */ 3454e35772b2Smrg#ifdef FREEBSD_WORKAROUND 3455e35772b2Smrgstatic const void *lt_preloaded_setup() { 3456e35772b2Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457e35772b2Smrg} 3458e35772b2Smrg#endif 3459e35772b2Smrg 3460e35772b2Smrg#ifdef __cplusplus 3461e35772b2Smrg} 3462e35772b2Smrg#endif\ 3463e35772b2Smrg" 3464e35772b2Smrg } # !$opt_dry_run 3465e35772b2Smrg 3466e35772b2Smrg pic_flag_for_symtable= 3467e35772b2Smrg case "$compile_command " in 3468e35772b2Smrg *" -static "*) ;; 3469e35772b2Smrg *) 3470e35772b2Smrg case $host in 3471e35772b2Smrg # compiling the symbol table file with pic_flag works around 3472e35772b2Smrg # a FreeBSD bug that causes programs to crash when -lm is 3473e35772b2Smrg # linked before any other PIC object. But we must not use 3474e35772b2Smrg # pic_flag when linking with -static. The problem exists in 3475e35772b2Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 347674c14cd6Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477e35772b2Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478e35772b2Smrg *-*-hpux*) 3479e35772b2Smrg pic_flag_for_symtable=" $pic_flag" ;; 3480e35772b2Smrg *) 3481e35772b2Smrg if test "X$my_pic_p" != Xno; then 3482e35772b2Smrg pic_flag_for_symtable=" $pic_flag" 348372b676d7Smrg fi 3484e35772b2Smrg ;; 3485e35772b2Smrg esac 3486e35772b2Smrg ;; 3487e35772b2Smrg esac 3488e35772b2Smrg symtab_cflags= 3489e35772b2Smrg for arg in $LTCFLAGS; do 3490e35772b2Smrg case $arg in 3491e35772b2Smrg -pie | -fpie | -fPIE) ;; 349274c14cd6Smrg *) func_append symtab_cflags " $arg" ;; 3493e35772b2Smrg esac 3494e35772b2Smrg done 349572b676d7Smrg 3496e35772b2Smrg # Now compile the dynamic symbol file. 3497e35772b2Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 349872b676d7Smrg 3499e35772b2Smrg # Clean up the generated files. 3500e35772b2Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 350172b676d7Smrg 3502e35772b2Smrg # Transform the symbol file into the correct name. 3503e35772b2Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504e35772b2Smrg case $host in 3505e35772b2Smrg *cygwin* | *mingw* | *cegcc* ) 3506e35772b2Smrg if test -f "$output_objdir/$my_outputname.def"; then 350774c14cd6Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 350874c14cd6Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509e35772b2Smrg else 351074c14cd6Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 351174c14cd6Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 351272b676d7Smrg fi 3513e35772b2Smrg ;; 3514e35772b2Smrg *) 351574c14cd6Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 351674c14cd6Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517e35772b2Smrg ;; 3518e35772b2Smrg esac 3519e35772b2Smrg ;; 3520e35772b2Smrg *) 3521e35772b2Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522e35772b2Smrg ;; 3523e35772b2Smrg esac 3524e35772b2Smrg else 3525e35772b2Smrg # We keep going just in case the user didn't refer to 3526e35772b2Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527e35772b2Smrg # really was required. 352872b676d7Smrg 3529e35772b2Smrg # Nullify the symbol file. 353074c14cd6Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 353174c14cd6Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532e35772b2Smrg fi 3533e35772b2Smrg} 353472b676d7Smrg 3535e35772b2Smrg# func_win32_libid arg 3536e35772b2Smrg# return the library type of file 'arg' 3537e35772b2Smrg# 3538e35772b2Smrg# Need a lot of goo to handle *both* DLLs and import libs 3539e35772b2Smrg# Has to be a shell function in order to 'eat' the argument 3540e35772b2Smrg# that is supplied when $file_magic_command is called. 354174c14cd6Smrg# Despite the name, also deal with 64 bit binaries. 3542e35772b2Smrgfunc_win32_libid () 3543e35772b2Smrg{ 3544e35772b2Smrg $opt_debug 3545e35772b2Smrg win32_libid_type="unknown" 3546e35772b2Smrg win32_fileres=`file -L $1 2>/dev/null` 3547e35772b2Smrg case $win32_fileres in 3548e35772b2Smrg *ar\ archive\ import\ library*) # definitely import 3549e35772b2Smrg win32_libid_type="x86 archive import" 3550e35772b2Smrg ;; 3551e35772b2Smrg *ar\ archive*) # could be an import, or static 355274c14cd6Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553e35772b2Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 355474c14cd6Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 355574c14cd6Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 355674c14cd6Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557e35772b2Smrg $SED -n -e ' 3558e35772b2Smrg 1,100{ 3559e35772b2Smrg / I /{ 3560e35772b2Smrg s,.*,import, 3561e35772b2Smrg p 3562e35772b2Smrg q 3563e35772b2Smrg } 3564e35772b2Smrg }'` 3565e35772b2Smrg case $win32_nmres in 3566e35772b2Smrg import*) win32_libid_type="x86 archive import";; 3567e35772b2Smrg *) win32_libid_type="x86 archive static";; 3568e35772b2Smrg esac 3569e35772b2Smrg fi 3570e35772b2Smrg ;; 3571e35772b2Smrg *DLL*) 3572e35772b2Smrg win32_libid_type="x86 DLL" 3573e35772b2Smrg ;; 3574e35772b2Smrg *executable*) # but shell scripts are "executable" too... 3575e35772b2Smrg case $win32_fileres in 3576e35772b2Smrg *MS\ Windows\ PE\ Intel*) 3577e35772b2Smrg win32_libid_type="x86 DLL" 3578e35772b2Smrg ;; 3579e35772b2Smrg esac 3580e35772b2Smrg ;; 3581e35772b2Smrg esac 3582e35772b2Smrg $ECHO "$win32_libid_type" 3583e35772b2Smrg} 358472b676d7Smrg 358574c14cd6Smrg# func_cygming_dll_for_implib ARG 358674c14cd6Smrg# 358774c14cd6Smrg# Platform-specific function to extract the 358874c14cd6Smrg# name of the DLL associated with the specified 358974c14cd6Smrg# import library ARG. 359074c14cd6Smrg# Invoked by eval'ing the libtool variable 359174c14cd6Smrg# $sharedlib_from_linklib_cmd 359274c14cd6Smrg# Result is available in the variable 359374c14cd6Smrg# $sharedlib_from_linklib_result 359474c14cd6Smrgfunc_cygming_dll_for_implib () 359574c14cd6Smrg{ 359674c14cd6Smrg $opt_debug 359774c14cd6Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 359874c14cd6Smrg} 359974c14cd6Smrg 360074c14cd6Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 360174c14cd6Smrg# 360274c14cd6Smrg# The is the core of a fallback implementation of a 360374c14cd6Smrg# platform-specific function to extract the name of the 360474c14cd6Smrg# DLL associated with the specified import library LIBNAME. 360574c14cd6Smrg# 360674c14cd6Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 360774c14cd6Smrg# on the platform and compiler that created the implib. 360874c14cd6Smrg# 360974c14cd6Smrg# Echos the name of the DLL associated with the 361074c14cd6Smrg# specified import library. 361174c14cd6Smrgfunc_cygming_dll_for_implib_fallback_core () 361274c14cd6Smrg{ 361374c14cd6Smrg $opt_debug 361474c14cd6Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 361574c14cd6Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 361674c14cd6Smrg $SED '/^Contents of section '"$match_literal"':/{ 361774c14cd6Smrg # Place marker at beginning of archive member dllname section 361874c14cd6Smrg s/.*/====MARK====/ 361974c14cd6Smrg p 362074c14cd6Smrg d 362174c14cd6Smrg } 362274c14cd6Smrg # These lines can sometimes be longer than 43 characters, but 362374c14cd6Smrg # are always uninteresting 362474c14cd6Smrg /:[ ]*file format pe[i]\{,1\}-/d 362574c14cd6Smrg /^In archive [^:]*:/d 362674c14cd6Smrg # Ensure marker is printed 362774c14cd6Smrg /^====MARK====/p 362874c14cd6Smrg # Remove all lines with less than 43 characters 362974c14cd6Smrg /^.\{43\}/!d 363074c14cd6Smrg # From remaining lines, remove first 43 characters 363174c14cd6Smrg s/^.\{43\}//' | 363274c14cd6Smrg $SED -n ' 363374c14cd6Smrg # Join marker and all lines until next marker into a single line 363474c14cd6Smrg /^====MARK====/ b para 363574c14cd6Smrg H 363674c14cd6Smrg $ b para 363774c14cd6Smrg b 363874c14cd6Smrg :para 363974c14cd6Smrg x 364074c14cd6Smrg s/\n//g 364174c14cd6Smrg # Remove the marker 364274c14cd6Smrg s/^====MARK====// 364374c14cd6Smrg # Remove trailing dots and whitespace 364474c14cd6Smrg s/[\. \t]*$// 364574c14cd6Smrg # Print 364674c14cd6Smrg /./p' | 364774c14cd6Smrg # we now have a list, one entry per line, of the stringified 364874c14cd6Smrg # contents of the appropriate section of all members of the 364974c14cd6Smrg # archive which possess that section. Heuristic: eliminate 365074c14cd6Smrg # all those which have a first or second character that is 365174c14cd6Smrg # a '.' (that is, objdump's representation of an unprintable 365274c14cd6Smrg # character.) This should work for all archives with less than 365374c14cd6Smrg # 0x302f exports -- but will fail for DLLs whose name actually 365474c14cd6Smrg # begins with a literal '.' or a single character followed by 365574c14cd6Smrg # a '.'. 365674c14cd6Smrg # 365774c14cd6Smrg # Of those that remain, print the first one. 365874c14cd6Smrg $SED -e '/^\./d;/^.\./d;q' 365974c14cd6Smrg} 366074c14cd6Smrg 366174c14cd6Smrg# func_cygming_gnu_implib_p ARG 366274c14cd6Smrg# This predicate returns with zero status (TRUE) if 366374c14cd6Smrg# ARG is a GNU/binutils-style import library. Returns 366474c14cd6Smrg# with nonzero status (FALSE) otherwise. 366574c14cd6Smrgfunc_cygming_gnu_implib_p () 366674c14cd6Smrg{ 366774c14cd6Smrg $opt_debug 366874c14cd6Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 366974c14cd6Smrg 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)$'` 367074c14cd6Smrg test -n "$func_cygming_gnu_implib_tmp" 367174c14cd6Smrg} 367274c14cd6Smrg 367374c14cd6Smrg# func_cygming_ms_implib_p ARG 367474c14cd6Smrg# This predicate returns with zero status (TRUE) if 367574c14cd6Smrg# ARG is an MS-style import library. Returns 367674c14cd6Smrg# with nonzero status (FALSE) otherwise. 367774c14cd6Smrgfunc_cygming_ms_implib_p () 367874c14cd6Smrg{ 367974c14cd6Smrg $opt_debug 368074c14cd6Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 368174c14cd6Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 368274c14cd6Smrg test -n "$func_cygming_ms_implib_tmp" 368374c14cd6Smrg} 368474c14cd6Smrg 368574c14cd6Smrg# func_cygming_dll_for_implib_fallback ARG 368674c14cd6Smrg# Platform-specific function to extract the 368774c14cd6Smrg# name of the DLL associated with the specified 368874c14cd6Smrg# import library ARG. 368974c14cd6Smrg# 369074c14cd6Smrg# This fallback implementation is for use when $DLLTOOL 369174c14cd6Smrg# does not support the --identify-strict option. 369274c14cd6Smrg# Invoked by eval'ing the libtool variable 369374c14cd6Smrg# $sharedlib_from_linklib_cmd 369474c14cd6Smrg# Result is available in the variable 369574c14cd6Smrg# $sharedlib_from_linklib_result 369674c14cd6Smrgfunc_cygming_dll_for_implib_fallback () 369774c14cd6Smrg{ 369874c14cd6Smrg $opt_debug 369974c14cd6Smrg if func_cygming_gnu_implib_p "$1" ; then 370074c14cd6Smrg # binutils import library 370174c14cd6Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 370274c14cd6Smrg elif func_cygming_ms_implib_p "$1" ; then 370374c14cd6Smrg # ms-generated import library 370474c14cd6Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 370574c14cd6Smrg else 370674c14cd6Smrg # unknown 370774c14cd6Smrg sharedlib_from_linklib_result="" 370874c14cd6Smrg fi 370974c14cd6Smrg} 371072b676d7Smrg 371172b676d7Smrg 3712e35772b2Smrg# func_extract_an_archive dir oldlib 3713e35772b2Smrgfunc_extract_an_archive () 3714e35772b2Smrg{ 3715e35772b2Smrg $opt_debug 3716e35772b2Smrg f_ex_an_ar_dir="$1"; shift 3717e35772b2Smrg f_ex_an_ar_oldlib="$1" 371874c14cd6Smrg if test "$lock_old_archive_extraction" = yes; then 371974c14cd6Smrg lockfile=$f_ex_an_ar_oldlib.lock 372074c14cd6Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 372174c14cd6Smrg func_echo "Waiting for $lockfile to be removed" 372274c14cd6Smrg sleep 2 372374c14cd6Smrg done 372474c14cd6Smrg fi 372574c14cd6Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 372674c14cd6Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 372774c14cd6Smrg if test "$lock_old_archive_extraction" = yes; then 372874c14cd6Smrg $opt_dry_run || rm -f "$lockfile" 372974c14cd6Smrg fi 3730e35772b2Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731e35772b2Smrg : 3732e35772b2Smrg else 3733e35772b2Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734e35772b2Smrg fi 3735e35772b2Smrg} 373672b676d7Smrg 373772b676d7Smrg 3738e35772b2Smrg# func_extract_archives gentop oldlib ... 3739e35772b2Smrgfunc_extract_archives () 3740e35772b2Smrg{ 3741e35772b2Smrg $opt_debug 3742e35772b2Smrg my_gentop="$1"; shift 3743e35772b2Smrg my_oldlibs=${1+"$@"} 3744e35772b2Smrg my_oldobjs="" 3745e35772b2Smrg my_xlib="" 3746e35772b2Smrg my_xabs="" 3747e35772b2Smrg my_xdir="" 374872b676d7Smrg 3749e35772b2Smrg for my_xlib in $my_oldlibs; do 3750e35772b2Smrg # Extract the objects. 3751e35772b2Smrg case $my_xlib in 3752e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753e35772b2Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754e35772b2Smrg esac 3755e35772b2Smrg func_basename "$my_xlib" 3756e35772b2Smrg my_xlib="$func_basename_result" 3757e35772b2Smrg my_xlib_u=$my_xlib 3758e35772b2Smrg while :; do 3759e35772b2Smrg case " $extracted_archives " in 3760e35772b2Smrg *" $my_xlib_u "*) 3761e35772b2Smrg func_arith $extracted_serial + 1 3762e35772b2Smrg extracted_serial=$func_arith_result 3763e35772b2Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764e35772b2Smrg *) break ;; 3765e35772b2Smrg esac 3766e35772b2Smrg done 3767e35772b2Smrg extracted_archives="$extracted_archives $my_xlib_u" 3768e35772b2Smrg my_xdir="$my_gentop/$my_xlib_u" 376972b676d7Smrg 3770e35772b2Smrg func_mkdir_p "$my_xdir" 377172b676d7Smrg 3772e35772b2Smrg case $host in 3773e35772b2Smrg *-darwin*) 3774e35772b2Smrg func_verbose "Extracting $my_xabs" 3775e35772b2Smrg # Do not bother doing anything if just a dry run 3776e35772b2Smrg $opt_dry_run || { 3777e35772b2Smrg darwin_orig_dir=`pwd` 3778e35772b2Smrg cd $my_xdir || exit $? 3779e35772b2Smrg darwin_archive=$my_xabs 3780e35772b2Smrg darwin_curdir=`pwd` 3781e35772b2Smrg darwin_base_archive=`basename "$darwin_archive"` 3782e35772b2Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783e35772b2Smrg if test -n "$darwin_arches"; then 3784e35772b2Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785e35772b2Smrg darwin_arch= 3786e35772b2Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787e35772b2Smrg for darwin_arch in $darwin_arches ; do 3788e35772b2Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789e35772b2Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790e35772b2Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791e35772b2Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792e35772b2Smrg cd "$darwin_curdir" 3793e35772b2Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794e35772b2Smrg done # $darwin_arches 3795e35772b2Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796e35772b2Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797e35772b2Smrg darwin_file= 3798e35772b2Smrg darwin_files= 3799e35772b2Smrg for darwin_file in $darwin_filelist; do 380074c14cd6Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801e35772b2Smrg $LIPO -create -output "$darwin_file" $darwin_files 3802e35772b2Smrg done # $darwin_filelist 3803e35772b2Smrg $RM -rf unfat-$$ 3804e35772b2Smrg cd "$darwin_orig_dir" 380572b676d7Smrg else 3806e35772b2Smrg cd $darwin_orig_dir 3807e35772b2Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808e35772b2Smrg fi # $darwin_arches 3809e35772b2Smrg } # !$opt_dry_run 3810e35772b2Smrg ;; 3811e35772b2Smrg *) 3812e35772b2Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813e35772b2Smrg ;; 3814e35772b2Smrg esac 381574c14cd6Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816e35772b2Smrg done 381772b676d7Smrg 3818e35772b2Smrg func_extract_archives_result="$my_oldobjs" 3819e35772b2Smrg} 382072b676d7Smrg 382172b676d7Smrg 382274c14cd6Smrg# func_emit_wrapper [arg=no] 382374c14cd6Smrg# 382474c14cd6Smrg# Emit a libtool wrapper script on stdout. 382574c14cd6Smrg# Don't directly open a file because we may want to 382674c14cd6Smrg# incorporate the script contents within a cygwin/mingw 382774c14cd6Smrg# wrapper executable. Must ONLY be called from within 382874c14cd6Smrg# func_mode_link because it depends on a number of variables 382974c14cd6Smrg# set therein. 3830e35772b2Smrg# 383174c14cd6Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 383274c14cd6Smrg# variable will take. If 'yes', then the emitted script 383374c14cd6Smrg# will assume that the directory in which it is stored is 383474c14cd6Smrg# the $objdir directory. This is a cygwin/mingw-specific 383574c14cd6Smrg# behavior. 383674c14cd6Smrgfunc_emit_wrapper () 3837e35772b2Smrg{ 383874c14cd6Smrg func_emit_wrapper_arg1=${1-no} 383972b676d7Smrg 3840e35772b2Smrg $ECHO "\ 3841e35772b2Smrg#! $SHELL 384272b676d7Smrg 3843e35772b2Smrg# $output - temporary wrapper script for $objdir/$outputname 3844e35772b2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845e35772b2Smrg# 3846e35772b2Smrg# The $output program cannot be directly executed until all the libtool 3847e35772b2Smrg# libraries that it depends on are installed. 3848e35772b2Smrg# 3849e35772b2Smrg# This wrapper script should never be moved out of the build directory. 3850e35772b2Smrg# If it is, it will not operate correctly. 385172b676d7Smrg 3852e35772b2Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3853e35772b2Smrg# metacharacters that are still active within double-quoted strings. 3854e35772b2Smrgsed_quote_subst='$sed_quote_subst' 385572b676d7Smrg 3856e35772b2Smrg# Be Bourne compatible 3857e35772b2Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858e35772b2Smrg emulate sh 3859e35772b2Smrg NULLCMD=: 3860e35772b2Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861e35772b2Smrg # is contrary to our usage. Disable this feature. 3862e35772b2Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863e35772b2Smrg setopt NO_GLOB_SUBST 3864e35772b2Smrgelse 3865e35772b2Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866e35772b2Smrgfi 3867e35772b2SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868e35772b2SmrgDUALCASE=1; export DUALCASE # for MKS sh 386972b676d7Smrg 3870e35772b2Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871e35772b2Smrg# if CDPATH is set. 3872e35772b2Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 387372b676d7Smrg 3874e35772b2Smrgrelink_command=\"$relink_command\" 387572b676d7Smrg 3876e35772b2Smrg# This environment variable determines our operation mode. 3877e35772b2Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878e35772b2Smrg # install mode needs the following variables: 3879e35772b2Smrg generated_by_libtool_version='$macro_version' 3880e35772b2Smrg notinst_deplibs='$notinst_deplibs' 3881e35772b2Smrgelse 3882e35772b2Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883e35772b2Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 388474c14cd6Smrg file=\"\$0\"" 388574c14cd6Smrg 388674c14cd6Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 388774c14cd6Smrg $ECHO "\ 388874c14cd6Smrg 388974c14cd6Smrg# A function that is used when there is no print builtin or printf. 389074c14cd6Smrgfunc_fallback_echo () 389174c14cd6Smrg{ 389274c14cd6Smrg eval 'cat <<_LTECHO_EOF 389374c14cd6Smrg\$1 389474c14cd6Smrg_LTECHO_EOF' 389574c14cd6Smrg} 389674c14cd6Smrg ECHO=\"$qECHO\" 389774c14cd6Smrg fi 389874c14cd6Smrg 389974c14cd6Smrg# Very basic option parsing. These options are (a) specific to 390074c14cd6Smrg# the libtool wrapper, (b) are identical between the wrapper 390174c14cd6Smrg# /script/ and the wrapper /executable/ which is used only on 390274c14cd6Smrg# windows platforms, and (c) all begin with the string "--lt-" 390374c14cd6Smrg# (application programs are unlikely to have options which match 390474c14cd6Smrg# this pattern). 390574c14cd6Smrg# 390674c14cd6Smrg# There are only two supported options: --lt-debug and 390774c14cd6Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 390874c14cd6Smrg# 390974c14cd6Smrg# The first argument to this parsing function should be the 391074c14cd6Smrg# script's $0 value, followed by "$@". 391174c14cd6Smrglt_option_debug= 391274c14cd6Smrgfunc_parse_lt_options () 391374c14cd6Smrg{ 391474c14cd6Smrg lt_script_arg0=\$0 391574c14cd6Smrg shift 391674c14cd6Smrg for lt_opt 391774c14cd6Smrg do 391874c14cd6Smrg case \"\$lt_opt\" in 391974c14cd6Smrg --lt-debug) lt_option_debug=1 ;; 392074c14cd6Smrg --lt-dump-script) 392174c14cd6Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 392274c14cd6Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 392374c14cd6Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 392474c14cd6Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 392574c14cd6Smrg exit 0 392674c14cd6Smrg ;; 392774c14cd6Smrg --lt-*) 392874c14cd6Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 392974c14cd6Smrg exit 1 393074c14cd6Smrg ;; 393174c14cd6Smrg esac 393274c14cd6Smrg done 393374c14cd6Smrg 393474c14cd6Smrg # Print the debug banner immediately: 393574c14cd6Smrg if test -n \"\$lt_option_debug\"; then 393674c14cd6Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 393774c14cd6Smrg fi 393874c14cd6Smrg} 393974c14cd6Smrg 394074c14cd6Smrg# Used when --lt-debug. Prints its arguments to stdout 394174c14cd6Smrg# (redirection is the responsibility of the caller) 394274c14cd6Smrgfunc_lt_dump_args () 394374c14cd6Smrg{ 394474c14cd6Smrg lt_dump_args_N=1; 394574c14cd6Smrg for lt_arg 394674c14cd6Smrg do 394774c14cd6Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 394874c14cd6Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 394974c14cd6Smrg done 395074c14cd6Smrg} 395174c14cd6Smrg 395274c14cd6Smrg# Core function for launching the target application 395374c14cd6Smrgfunc_exec_program_core () 395474c14cd6Smrg{ 3955e35772b2Smrg" 395674c14cd6Smrg case $host in 395774c14cd6Smrg # Backslashes separate directories on plain windows 395874c14cd6Smrg *-*-mingw | *-*-os2* | *-cegcc*) 395974c14cd6Smrg $ECHO "\ 396074c14cd6Smrg if test -n \"\$lt_option_debug\"; then 396174c14cd6Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 396274c14cd6Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 396374c14cd6Smrg fi 396474c14cd6Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 396574c14cd6Smrg" 396674c14cd6Smrg ;; 396774c14cd6Smrg 396874c14cd6Smrg *) 396974c14cd6Smrg $ECHO "\ 397074c14cd6Smrg if test -n \"\$lt_option_debug\"; then 397174c14cd6Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 397274c14cd6Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 397374c14cd6Smrg fi 397474c14cd6Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 397574c14cd6Smrg" 397674c14cd6Smrg ;; 397774c14cd6Smrg esac 397874c14cd6Smrg $ECHO "\ 397974c14cd6Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 398074c14cd6Smrg exit 1 398174c14cd6Smrg} 398274c14cd6Smrg 398374c14cd6Smrg# A function to encapsulate launching the target application 398474c14cd6Smrg# Strips options in the --lt-* namespace from \$@ and 398574c14cd6Smrg# launches target application with the remaining arguments. 398674c14cd6Smrgfunc_exec_program () 398774c14cd6Smrg{ 398874c14cd6Smrg case \" \$* \" in 398974c14cd6Smrg *\\ --lt-*) 399074c14cd6Smrg for lt_wr_arg 399174c14cd6Smrg do 399274c14cd6Smrg case \$lt_wr_arg in 399374c14cd6Smrg --lt-*) ;; 399474c14cd6Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 399574c14cd6Smrg esac 399674c14cd6Smrg shift 399774c14cd6Smrg done ;; 399874c14cd6Smrg esac 399974c14cd6Smrg func_exec_program_core \${1+\"\$@\"} 400074c14cd6Smrg} 400174c14cd6Smrg 400274c14cd6Smrg # Parse options 400374c14cd6Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 400472b676d7Smrg 4005e35772b2Smrg # Find the directory that this script lives in. 400674c14cd6Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007e35772b2Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 400872b676d7Smrg 4009e35772b2Smrg # Follow symbolic links until we get to the real thisdir. 401074c14cd6Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011e35772b2Smrg while test -n \"\$file\"; do 401274c14cd6Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 401372b676d7Smrg 4014e35772b2Smrg # If there was a directory component, then change thisdir. 4015e35772b2Smrg if test \"x\$destdir\" != \"x\$file\"; then 4016e35772b2Smrg case \"\$destdir\" in 4017e35772b2Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018e35772b2Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 401972b676d7Smrg esac 4020e35772b2Smrg fi 402172b676d7Smrg 402274c14cd6Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 402374c14cd6Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024e35772b2Smrg done 402572b676d7Smrg 4026e35772b2Smrg # Usually 'no', except on cygwin/mingw when embedded into 4027e35772b2Smrg # the cwrapper. 402874c14cd6Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029e35772b2Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030e35772b2Smrg # special case for '.' 4031e35772b2Smrg if test \"\$thisdir\" = \".\"; then 4032e35772b2Smrg thisdir=\`pwd\` 4033e35772b2Smrg fi 4034e35772b2Smrg # remove .libs from thisdir 4035e35772b2Smrg case \"\$thisdir\" in 403674c14cd6Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037e35772b2Smrg $objdir ) thisdir=. ;; 4038e35772b2Smrg esac 4039e35772b2Smrg fi 4040e35772b2Smrg 4041e35772b2Smrg # Try to get the absolute directory name. 4042e35772b2Smrg absdir=\`cd \"\$thisdir\" && pwd\` 4043e35772b2Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044e35772b2Smrg" 4045e35772b2Smrg 4046e35772b2Smrg if test "$fast_install" = yes; then 4047e35772b2Smrg $ECHO "\ 4048e35772b2Smrg program=lt-'$outputname'$exeext 4049e35772b2Smrg progdir=\"\$thisdir/$objdir\" 4050e35772b2Smrg 4051e35772b2Smrg if test ! -f \"\$progdir/\$program\" || 4052e35772b2Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053e35772b2Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054e35772b2Smrg 4055e35772b2Smrg file=\"\$\$-\$program\" 4056e35772b2Smrg 4057e35772b2Smrg if test ! -d \"\$progdir\"; then 4058e35772b2Smrg $MKDIR \"\$progdir\" 4059e35772b2Smrg else 4060e35772b2Smrg $RM \"\$progdir/\$file\" 4061e35772b2Smrg fi" 4062e35772b2Smrg 4063e35772b2Smrg $ECHO "\ 4064e35772b2Smrg 4065e35772b2Smrg # relink executable if necessary 4066e35772b2Smrg if test -n \"\$relink_command\"; then 4067e35772b2Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068e35772b2Smrg else 4069e35772b2Smrg $ECHO \"\$relink_command_output\" >&2 4070e35772b2Smrg $RM \"\$progdir/\$file\" 4071e35772b2Smrg exit 1 407272b676d7Smrg fi 4073e35772b2Smrg fi 407472b676d7Smrg 4075e35772b2Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076e35772b2Smrg { $RM \"\$progdir/\$program\"; 4077e35772b2Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078e35772b2Smrg $RM \"\$progdir/\$file\" 4079e35772b2Smrg fi" 4080e35772b2Smrg else 4081e35772b2Smrg $ECHO "\ 4082e35772b2Smrg program='$outputname' 4083e35772b2Smrg progdir=\"\$thisdir/$objdir\" 4084e35772b2Smrg" 408572b676d7Smrg fi 408672b676d7Smrg 4087e35772b2Smrg $ECHO "\ 408872b676d7Smrg 4089e35772b2Smrg if test -f \"\$progdir/\$program\"; then" 409072b676d7Smrg 409174c14cd6Smrg # fixup the dll searchpath if we need to. 409274c14cd6Smrg # 409374c14cd6Smrg # Fix the DLL searchpath if we need to. Do this before prepending 409474c14cd6Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 409574c14cd6Smrg # libraries must come first. 409674c14cd6Smrg if test -n "$dllsearchpath"; then 409774c14cd6Smrg $ECHO "\ 409874c14cd6Smrg # Add the dll search path components to the executable PATH 409974c14cd6Smrg PATH=$dllsearchpath:\$PATH 410074c14cd6Smrg" 410174c14cd6Smrg fi 410274c14cd6Smrg 4103e35772b2Smrg # Export our shlibpath_var if we have one. 4104e35772b2Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105e35772b2Smrg $ECHO "\ 4106e35772b2Smrg # Add our own library path to $shlibpath_var 4107e35772b2Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108e35772b2Smrg 4109e35772b2Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110e35772b2Smrg # The second colon is a workaround for a bug in BeOS R4 sed 411174c14cd6Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 411272b676d7Smrg 4113e35772b2Smrg export $shlibpath_var 4114e35772b2Smrg" 411572b676d7Smrg fi 411672b676d7Smrg 4117e35772b2Smrg $ECHO "\ 4118e35772b2Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119e35772b2Smrg # Run the actual program with our arguments. 412074c14cd6Smrg func_exec_program \${1+\"\$@\"} 4121e35772b2Smrg fi 4122e35772b2Smrg else 4123e35772b2Smrg # The program doesn't exist. 4124e35772b2Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125e35772b2Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 412674c14cd6Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127e35772b2Smrg exit 1 4128e35772b2Smrg fi 4129e35772b2Smrgfi\ 4130e35772b2Smrg" 4131e35772b2Smrg} 413272b676d7Smrg 413372b676d7Smrg 4134e35772b2Smrg# func_emit_cwrapperexe_src 4135e35772b2Smrg# emit the source code for a wrapper executable on stdout 4136e35772b2Smrg# Must ONLY be called from within func_mode_link because 4137e35772b2Smrg# it depends on a number of variable set therein. 4138e35772b2Smrgfunc_emit_cwrapperexe_src () 4139e35772b2Smrg{ 4140e35772b2Smrg cat <<EOF 414172b676d7Smrg 4142e35772b2Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143e35772b2Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 414472b676d7Smrg 4145e35772b2Smrg The $output program cannot be directly executed until all the libtool 4146e35772b2Smrg libraries that it depends on are installed. 414772b676d7Smrg 4148e35772b2Smrg This wrapper executable should never be moved out of the build directory. 4149e35772b2Smrg If it is, it will not operate correctly. 4150e35772b2Smrg*/ 4151e35772b2SmrgEOF 4152e35772b2Smrg cat <<"EOF" 415374c14cd6Smrg#ifdef _MSC_VER 415474c14cd6Smrg# define _CRT_SECURE_NO_DEPRECATE 1 415574c14cd6Smrg#endif 4156e35772b2Smrg#include <stdio.h> 4157e35772b2Smrg#include <stdlib.h> 4158e35772b2Smrg#ifdef _MSC_VER 4159e35772b2Smrg# include <direct.h> 4160e35772b2Smrg# include <process.h> 4161e35772b2Smrg# include <io.h> 4162e35772b2Smrg#else 4163e35772b2Smrg# include <unistd.h> 4164e35772b2Smrg# include <stdint.h> 4165e35772b2Smrg# ifdef __CYGWIN__ 4166e35772b2Smrg# include <io.h> 4167e35772b2Smrg# endif 4168e35772b2Smrg#endif 4169e35772b2Smrg#include <malloc.h> 4170e35772b2Smrg#include <stdarg.h> 4171e35772b2Smrg#include <assert.h> 4172e35772b2Smrg#include <string.h> 4173e35772b2Smrg#include <ctype.h> 4174e35772b2Smrg#include <errno.h> 4175e35772b2Smrg#include <fcntl.h> 4176e35772b2Smrg#include <sys/stat.h> 417772b676d7Smrg 417874c14cd6Smrg/* declarations of non-ANSI functions */ 417974c14cd6Smrg#if defined(__MINGW32__) 418074c14cd6Smrg# ifdef __STRICT_ANSI__ 418174c14cd6Smrgint _putenv (const char *); 418274c14cd6Smrg# endif 418374c14cd6Smrg#elif defined(__CYGWIN__) 418474c14cd6Smrg# ifdef __STRICT_ANSI__ 418574c14cd6Smrgchar *realpath (const char *, char *); 418674c14cd6Smrgint putenv (char *); 418774c14cd6Smrgint setenv (const char *, const char *, int); 418874c14cd6Smrg# endif 418974c14cd6Smrg/* #elif defined (other platforms) ... */ 419074c14cd6Smrg#endif 419174c14cd6Smrg 419274c14cd6Smrg/* portability defines, excluding path handling macros */ 419374c14cd6Smrg#if defined(_MSC_VER) 419474c14cd6Smrg# define setmode _setmode 419574c14cd6Smrg# define stat _stat 419674c14cd6Smrg# define chmod _chmod 419774c14cd6Smrg# define getcwd _getcwd 419874c14cd6Smrg# define putenv _putenv 419974c14cd6Smrg# define S_IXUSR _S_IEXEC 420074c14cd6Smrg# ifndef _INTPTR_T_DEFINED 420174c14cd6Smrg# define _INTPTR_T_DEFINED 420274c14cd6Smrg# define intptr_t int 420374c14cd6Smrg# endif 420474c14cd6Smrg#elif defined(__MINGW32__) 420574c14cd6Smrg# define setmode _setmode 420674c14cd6Smrg# define stat _stat 420774c14cd6Smrg# define chmod _chmod 420874c14cd6Smrg# define getcwd _getcwd 420974c14cd6Smrg# define putenv _putenv 421074c14cd6Smrg#elif defined(__CYGWIN__) 421174c14cd6Smrg# define HAVE_SETENV 421274c14cd6Smrg# define FOPEN_WB "wb" 421374c14cd6Smrg/* #elif defined (other platforms) ... */ 421474c14cd6Smrg#endif 421574c14cd6Smrg 4216e35772b2Smrg#if defined(PATH_MAX) 4217e35772b2Smrg# define LT_PATHMAX PATH_MAX 4218e35772b2Smrg#elif defined(MAXPATHLEN) 4219e35772b2Smrg# define LT_PATHMAX MAXPATHLEN 4220e35772b2Smrg#else 4221e35772b2Smrg# define LT_PATHMAX 1024 4222e35772b2Smrg#endif 422372b676d7Smrg 4224e35772b2Smrg#ifndef S_IXOTH 4225e35772b2Smrg# define S_IXOTH 0 4226e35772b2Smrg#endif 4227e35772b2Smrg#ifndef S_IXGRP 4228e35772b2Smrg# define S_IXGRP 0 4229e35772b2Smrg#endif 423072b676d7Smrg 423174c14cd6Smrg/* path handling portability macros */ 4232e35772b2Smrg#ifndef DIR_SEPARATOR 4233e35772b2Smrg# define DIR_SEPARATOR '/' 4234e35772b2Smrg# define PATH_SEPARATOR ':' 4235e35772b2Smrg#endif 423672b676d7Smrg 4237e35772b2Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238e35772b2Smrg defined (__OS2__) 4239e35772b2Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240e35772b2Smrg# define FOPEN_WB "wb" 4241e35772b2Smrg# ifndef DIR_SEPARATOR_2 4242e35772b2Smrg# define DIR_SEPARATOR_2 '\\' 4243e35772b2Smrg# endif 4244e35772b2Smrg# ifndef PATH_SEPARATOR_2 4245e35772b2Smrg# define PATH_SEPARATOR_2 ';' 4246e35772b2Smrg# endif 4247e35772b2Smrg#endif 424872b676d7Smrg 4249e35772b2Smrg#ifndef DIR_SEPARATOR_2 4250e35772b2Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251e35772b2Smrg#else /* DIR_SEPARATOR_2 */ 4252e35772b2Smrg# define IS_DIR_SEPARATOR(ch) \ 4253e35772b2Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254e35772b2Smrg#endif /* DIR_SEPARATOR_2 */ 425572b676d7Smrg 4256e35772b2Smrg#ifndef PATH_SEPARATOR_2 4257e35772b2Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258e35772b2Smrg#else /* PATH_SEPARATOR_2 */ 4259e35772b2Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260e35772b2Smrg#endif /* PATH_SEPARATOR_2 */ 426172b676d7Smrg 4262e35772b2Smrg#ifndef FOPEN_WB 4263e35772b2Smrg# define FOPEN_WB "w" 4264e35772b2Smrg#endif 4265e35772b2Smrg#ifndef _O_BINARY 4266e35772b2Smrg# define _O_BINARY 0 4267e35772b2Smrg#endif 426872b676d7Smrg 4269e35772b2Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270e35772b2Smrg#define XFREE(stale) do { \ 4271e35772b2Smrg if (stale) { free ((void *) stale); stale = 0; } \ 4272e35772b2Smrg} while (0) 427372b676d7Smrg 427474c14cd6Smrg#if defined(LT_DEBUGWRAPPER) 427574c14cd6Smrgstatic int lt_debug = 1; 4276e35772b2Smrg#else 427774c14cd6Smrgstatic int lt_debug = 0; 4278e35772b2Smrg#endif 427972b676d7Smrg 428074c14cd6Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 428172b676d7Smrg 4282e35772b2Smrgvoid *xmalloc (size_t num); 4283e35772b2Smrgchar *xstrdup (const char *string); 4284e35772b2Smrgconst char *base_name (const char *name); 4285e35772b2Smrgchar *find_executable (const char *wrapper); 4286e35772b2Smrgchar *chase_symlinks (const char *pathspec); 4287e35772b2Smrgint make_executable (const char *path); 4288e35772b2Smrgint check_executable (const char *path); 4289e35772b2Smrgchar *strendzap (char *str, const char *pat); 429074c14cd6Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 429174c14cd6Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 429274c14cd6Smrgstatic const char *nonnull (const char *s); 429374c14cd6Smrgstatic const char *nonempty (const char *s); 4294e35772b2Smrgvoid lt_setenv (const char *name, const char *value); 4295e35772b2Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296e35772b2Smrgvoid lt_update_exe_path (const char *name, const char *value); 4297e35772b2Smrgvoid lt_update_lib_path (const char *name, const char *value); 429874c14cd6Smrgchar **prepare_spawn (char **argv); 429974c14cd6Smrgvoid lt_dump_script (FILE *f); 4300e35772b2SmrgEOF 4301e35772b2Smrg 4302e35772b2Smrg cat <<EOF 430374c14cd6Smrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304e35772b2Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305e35772b2SmrgEOF 430672b676d7Smrg 4307e35772b2Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 430874c14cd6Smrg func_to_host_path "$temp_rpath" 4309e35772b2Smrg cat <<EOF 431074c14cd6Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311e35772b2SmrgEOF 4312e35772b2Smrg else 4313e35772b2Smrg cat <<"EOF" 4314e35772b2Smrgconst char * LIB_PATH_VALUE = ""; 4315e35772b2SmrgEOF 431672b676d7Smrg fi 431772b676d7Smrg 4318e35772b2Smrg if test -n "$dllsearchpath"; then 431974c14cd6Smrg func_to_host_path "$dllsearchpath:" 4320e35772b2Smrg cat <<EOF 4321e35772b2Smrgconst char * EXE_PATH_VARNAME = "PATH"; 432274c14cd6Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 432372b676d7SmrgEOF 432472b676d7Smrg else 4325e35772b2Smrg cat <<"EOF" 4326e35772b2Smrgconst char * EXE_PATH_VARNAME = ""; 4327e35772b2Smrgconst char * EXE_PATH_VALUE = ""; 4328e35772b2SmrgEOF 432972b676d7Smrg fi 4330e35772b2Smrg 4331e35772b2Smrg if test "$fast_install" = yes; then 4332e35772b2Smrg cat <<EOF 4333e35772b2Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334e35772b2SmrgEOF 433572b676d7Smrg else 4336e35772b2Smrg cat <<EOF 4337e35772b2Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338e35772b2SmrgEOF 433972b676d7Smrg fi 434072b676d7Smrg 434172b676d7Smrg 4342e35772b2Smrg cat <<"EOF" 434372b676d7Smrg 4344e35772b2Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 434572b676d7Smrg 4346e35772b2Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347e35772b2Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 434874c14cd6Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 434972b676d7Smrg 4350e35772b2Smrgint 4351e35772b2Smrgmain (int argc, char *argv[]) 4352e35772b2Smrg{ 4353e35772b2Smrg char **newargz; 4354e35772b2Smrg int newargc; 4355e35772b2Smrg char *tmp_pathspec; 4356e35772b2Smrg char *actual_cwrapper_path; 4357e35772b2Smrg char *actual_cwrapper_name; 4358e35772b2Smrg char *target_name; 4359e35772b2Smrg char *lt_argv_zero; 4360e35772b2Smrg intptr_t rval = 127; 436172b676d7Smrg 4362e35772b2Smrg int i; 436372b676d7Smrg 4364e35772b2Smrg program_name = (char *) xstrdup (base_name (argv[0])); 436574c14cd6Smrg newargz = XMALLOC (char *, argc + 1); 436672b676d7Smrg 436774c14cd6Smrg /* very simple arg parsing; don't want to rely on getopt 436874c14cd6Smrg * also, copy all non cwrapper options to newargz, except 436974c14cd6Smrg * argz[0], which is handled differently 437074c14cd6Smrg */ 437174c14cd6Smrg newargc=0; 4372e35772b2Smrg for (i = 1; i < argc; i++) 4373e35772b2Smrg { 4374e35772b2Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375e35772b2Smrg { 4376e35772b2SmrgEOF 4377e35772b2Smrg case "$host" in 4378e35772b2Smrg *mingw* | *cygwin* ) 4379e35772b2Smrg # make stdout use "unix" line endings 4380e35772b2Smrg echo " setmode(1,_O_BINARY);" 4381e35772b2Smrg ;; 4382e35772b2Smrg esac 438372b676d7Smrg 4384e35772b2Smrg cat <<"EOF" 438574c14cd6Smrg lt_dump_script (stdout); 4386e35772b2Smrg return 0; 4387e35772b2Smrg } 438874c14cd6Smrg if (strcmp (argv[i], debug_opt) == 0) 438974c14cd6Smrg { 439074c14cd6Smrg lt_debug = 1; 439174c14cd6Smrg continue; 439274c14cd6Smrg } 439374c14cd6Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 439474c14cd6Smrg { 439574c14cd6Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 439674c14cd6Smrg namespace, but it is not one of the ones we know about and 439774c14cd6Smrg have already dealt with, above (inluding dump-script), then 439874c14cd6Smrg report an error. Otherwise, targets might begin to believe 439974c14cd6Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 440074c14cd6Smrg namespace. The first time any user complains about this, we'll 440174c14cd6Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 440274c14cd6Smrg or a configure.ac-settable value. 440374c14cd6Smrg */ 440474c14cd6Smrg lt_fatal (__FILE__, __LINE__, 440574c14cd6Smrg "unrecognized %s option: '%s'", 440674c14cd6Smrg ltwrapper_option_prefix, argv[i]); 440774c14cd6Smrg } 440874c14cd6Smrg /* otherwise ... */ 440974c14cd6Smrg newargz[++newargc] = xstrdup (argv[i]); 4410e35772b2Smrg } 441174c14cd6Smrg newargz[++newargc] = NULL; 441274c14cd6Smrg 441374c14cd6SmrgEOF 441474c14cd6Smrg cat <<EOF 441574c14cd6Smrg /* The GNU banner must be the first non-error debug message */ 441674c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 441774c14cd6SmrgEOF 441874c14cd6Smrg cat <<"EOF" 441974c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 442074c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 442172b676d7Smrg 4422e35772b2Smrg tmp_pathspec = find_executable (argv[0]); 4423e35772b2Smrg if (tmp_pathspec == NULL) 442474c14cd6Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 442574c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, 442674c14cd6Smrg "(main) found exe (before symlink chase) at: %s\n", 442774c14cd6Smrg tmp_pathspec); 4428e35772b2Smrg 4429e35772b2Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 443074c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, 443174c14cd6Smrg "(main) found exe (after symlink chase) at: %s\n", 443274c14cd6Smrg actual_cwrapper_path); 4433e35772b2Smrg XFREE (tmp_pathspec); 4434e35772b2Smrg 443574c14cd6Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436e35772b2Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437e35772b2Smrg 4438e35772b2Smrg /* wrapper name transforms */ 4439e35772b2Smrg strendzap (actual_cwrapper_name, ".exe"); 4440e35772b2Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441e35772b2Smrg XFREE (actual_cwrapper_name); 4442e35772b2Smrg actual_cwrapper_name = tmp_pathspec; 4443e35772b2Smrg tmp_pathspec = 0; 4444e35772b2Smrg 4445e35772b2Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446e35772b2Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447e35772b2Smrg strendzap (target_name, ".exe"); 4448e35772b2Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449e35772b2Smrg XFREE (target_name); 4450e35772b2Smrg target_name = tmp_pathspec; 4451e35772b2Smrg tmp_pathspec = 0; 4452e35772b2Smrg 445374c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, 445474c14cd6Smrg "(main) libtool target name: %s\n", 445574c14cd6Smrg target_name); 4456e35772b2SmrgEOF 445772b676d7Smrg 4458e35772b2Smrg cat <<EOF 4459e35772b2Smrg newargz[0] = 4460e35772b2Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461e35772b2Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462e35772b2Smrg strcpy (newargz[0], actual_cwrapper_path); 4463e35772b2Smrg strcat (newargz[0], "$objdir"); 4464e35772b2Smrg strcat (newargz[0], "/"); 4465e35772b2SmrgEOF 446672b676d7Smrg 4467e35772b2Smrg cat <<"EOF" 4468e35772b2Smrg /* stop here, and copy so we don't have to do this twice */ 4469e35772b2Smrg tmp_pathspec = xstrdup (newargz[0]); 447072b676d7Smrg 4471e35772b2Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472e35772b2Smrg strcat (newargz[0], actual_cwrapper_name); 447372b676d7Smrg 4474e35772b2Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475e35772b2Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476e35772b2Smrg XFREE (tmp_pathspec); 4477e35772b2Smrg tmp_pathspec = NULL; 4478e35772b2SmrgEOF 447972b676d7Smrg 4480e35772b2Smrg case $host_os in 4481e35772b2Smrg mingw*) 4482e35772b2Smrg cat <<"EOF" 4483e35772b2Smrg { 4484e35772b2Smrg char* p; 4485e35772b2Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486e35772b2Smrg { 4487e35772b2Smrg *p = '/'; 4488e35772b2Smrg } 4489e35772b2Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490e35772b2Smrg { 4491e35772b2Smrg *p = '/'; 4492e35772b2Smrg } 4493e35772b2Smrg } 4494e35772b2SmrgEOF 4495e35772b2Smrg ;; 4496e35772b2Smrg esac 449772b676d7Smrg 4498e35772b2Smrg cat <<"EOF" 4499e35772b2Smrg XFREE (target_name); 4500e35772b2Smrg XFREE (actual_cwrapper_path); 4501e35772b2Smrg XFREE (actual_cwrapper_name); 450272b676d7Smrg 4503e35772b2Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504e35772b2Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 450574c14cd6Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 450674c14cd6Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 450774c14cd6Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 450874c14cd6Smrg libraries must come first. */ 4509e35772b2Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 451074c14cd6Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 451172b676d7Smrg 451274c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 451374c14cd6Smrg nonnull (lt_argv_zero)); 4514e35772b2Smrg for (i = 0; i < newargc; i++) 4515e35772b2Smrg { 451674c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 451774c14cd6Smrg i, nonnull (newargz[i])); 4518e35772b2Smrg } 451972b676d7Smrg 4520e35772b2SmrgEOF 452172b676d7Smrg 4522e35772b2Smrg case $host_os in 4523e35772b2Smrg mingw*) 4524e35772b2Smrg cat <<"EOF" 4525e35772b2Smrg /* execv doesn't actually work on mingw as expected on unix */ 452674c14cd6Smrg newargz = prepare_spawn (newargz); 4527e35772b2Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528e35772b2Smrg if (rval == -1) 4529e35772b2Smrg { 4530e35772b2Smrg /* failed to start process */ 453174c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, 453274c14cd6Smrg "(main) failed to launch target \"%s\": %s\n", 453374c14cd6Smrg lt_argv_zero, nonnull (strerror (errno))); 4534e35772b2Smrg return 127; 4535e35772b2Smrg } 4536e35772b2Smrg return rval; 4537e35772b2SmrgEOF 4538e35772b2Smrg ;; 4539e35772b2Smrg *) 4540e35772b2Smrg cat <<"EOF" 4541e35772b2Smrg execv (lt_argv_zero, newargz); 4542e35772b2Smrg return rval; /* =127, but avoids unused variable warning */ 4543e35772b2SmrgEOF 4544e35772b2Smrg ;; 4545e35772b2Smrg esac 454672b676d7Smrg 4547e35772b2Smrg cat <<"EOF" 4548e35772b2Smrg} 454972b676d7Smrg 4550e35772b2Smrgvoid * 4551e35772b2Smrgxmalloc (size_t num) 4552e35772b2Smrg{ 4553e35772b2Smrg void *p = (void *) malloc (num); 4554e35772b2Smrg if (!p) 455574c14cd6Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 455672b676d7Smrg 4557e35772b2Smrg return p; 4558e35772b2Smrg} 455972b676d7Smrg 4560e35772b2Smrgchar * 4561e35772b2Smrgxstrdup (const char *string) 4562e35772b2Smrg{ 4563e35772b2Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564e35772b2Smrg string) : NULL; 4565e35772b2Smrg} 456672b676d7Smrg 4567e35772b2Smrgconst char * 4568e35772b2Smrgbase_name (const char *name) 4569e35772b2Smrg{ 4570e35772b2Smrg const char *base; 457172b676d7Smrg 4572e35772b2Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573e35772b2Smrg /* Skip over the disk name in MSDOS pathnames. */ 4574e35772b2Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575e35772b2Smrg name += 2; 4576e35772b2Smrg#endif 457772b676d7Smrg 4578e35772b2Smrg for (base = name; *name; name++) 4579e35772b2Smrg if (IS_DIR_SEPARATOR (*name)) 4580e35772b2Smrg base = name + 1; 4581e35772b2Smrg return base; 4582e35772b2Smrg} 458372b676d7Smrg 4584e35772b2Smrgint 4585e35772b2Smrgcheck_executable (const char *path) 4586e35772b2Smrg{ 4587e35772b2Smrg struct stat st; 458872b676d7Smrg 458974c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 459074c14cd6Smrg nonempty (path)); 4591e35772b2Smrg if ((!path) || (!*path)) 4592e35772b2Smrg return 0; 459372b676d7Smrg 4594e35772b2Smrg if ((stat (path, &st) >= 0) 4595e35772b2Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596e35772b2Smrg return 1; 4597e35772b2Smrg else 4598e35772b2Smrg return 0; 4599e35772b2Smrg} 460072b676d7Smrg 4601e35772b2Smrgint 4602e35772b2Smrgmake_executable (const char *path) 4603e35772b2Smrg{ 4604e35772b2Smrg int rval = 0; 4605e35772b2Smrg struct stat st; 460672b676d7Smrg 460774c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 460874c14cd6Smrg nonempty (path)); 4609e35772b2Smrg if ((!path) || (!*path)) 4610e35772b2Smrg return 0; 461172b676d7Smrg 4612e35772b2Smrg if (stat (path, &st) >= 0) 4613e35772b2Smrg { 4614e35772b2Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615e35772b2Smrg } 4616e35772b2Smrg return rval; 4617e35772b2Smrg} 461872b676d7Smrg 4619e35772b2Smrg/* Searches for the full path of the wrapper. Returns 4620e35772b2Smrg newly allocated full path name if found, NULL otherwise 4621e35772b2Smrg Does not chase symlinks, even on platforms that support them. 4622e35772b2Smrg*/ 4623e35772b2Smrgchar * 4624e35772b2Smrgfind_executable (const char *wrapper) 4625e35772b2Smrg{ 4626e35772b2Smrg int has_slash = 0; 4627e35772b2Smrg const char *p; 4628e35772b2Smrg const char *p_next; 4629e35772b2Smrg /* static buffer for getcwd */ 4630e35772b2Smrg char tmp[LT_PATHMAX + 1]; 4631e35772b2Smrg int tmp_len; 4632e35772b2Smrg char *concat_name; 463372b676d7Smrg 463474c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 463574c14cd6Smrg nonempty (wrapper)); 463672b676d7Smrg 4637e35772b2Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638e35772b2Smrg return NULL; 463972b676d7Smrg 4640e35772b2Smrg /* Absolute path? */ 4641e35772b2Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642e35772b2Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643e35772b2Smrg { 4644e35772b2Smrg concat_name = xstrdup (wrapper); 4645e35772b2Smrg if (check_executable (concat_name)) 4646e35772b2Smrg return concat_name; 4647e35772b2Smrg XFREE (concat_name); 4648e35772b2Smrg } 4649e35772b2Smrg else 4650e35772b2Smrg { 4651e35772b2Smrg#endif 4652e35772b2Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653e35772b2Smrg { 4654e35772b2Smrg concat_name = xstrdup (wrapper); 4655e35772b2Smrg if (check_executable (concat_name)) 4656e35772b2Smrg return concat_name; 4657e35772b2Smrg XFREE (concat_name); 4658e35772b2Smrg } 4659e35772b2Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660e35772b2Smrg } 4661e35772b2Smrg#endif 466272b676d7Smrg 4663e35772b2Smrg for (p = wrapper; *p; p++) 4664e35772b2Smrg if (*p == '/') 4665e35772b2Smrg { 4666e35772b2Smrg has_slash = 1; 4667e35772b2Smrg break; 4668e35772b2Smrg } 4669e35772b2Smrg if (!has_slash) 4670e35772b2Smrg { 4671e35772b2Smrg /* no slashes; search PATH */ 4672e35772b2Smrg const char *path = getenv ("PATH"); 4673e35772b2Smrg if (path != NULL) 4674e35772b2Smrg { 4675e35772b2Smrg for (p = path; *p; p = p_next) 4676e35772b2Smrg { 4677e35772b2Smrg const char *q; 4678e35772b2Smrg size_t p_len; 4679e35772b2Smrg for (q = p; *q; q++) 4680e35772b2Smrg if (IS_PATH_SEPARATOR (*q)) 4681e35772b2Smrg break; 4682e35772b2Smrg p_len = q - p; 4683e35772b2Smrg p_next = (*q == '\0' ? q : q + 1); 4684e35772b2Smrg if (p_len == 0) 4685e35772b2Smrg { 4686e35772b2Smrg /* empty path: current directory */ 4687e35772b2Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 468874c14cd6Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 468974c14cd6Smrg nonnull (strerror (errno))); 4690e35772b2Smrg tmp_len = strlen (tmp); 4691e35772b2Smrg concat_name = 4692e35772b2Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693e35772b2Smrg memcpy (concat_name, tmp, tmp_len); 4694e35772b2Smrg concat_name[tmp_len] = '/'; 4695e35772b2Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4696e35772b2Smrg } 4697e35772b2Smrg else 4698e35772b2Smrg { 4699e35772b2Smrg concat_name = 4700e35772b2Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701e35772b2Smrg memcpy (concat_name, p, p_len); 4702e35772b2Smrg concat_name[p_len] = '/'; 4703e35772b2Smrg strcpy (concat_name + p_len + 1, wrapper); 4704e35772b2Smrg } 4705e35772b2Smrg if (check_executable (concat_name)) 4706e35772b2Smrg return concat_name; 4707e35772b2Smrg XFREE (concat_name); 4708e35772b2Smrg } 4709e35772b2Smrg } 4710e35772b2Smrg /* not found in PATH; assume curdir */ 4711e35772b2Smrg } 4712e35772b2Smrg /* Relative path | not found in path: prepend cwd */ 4713e35772b2Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 471474c14cd6Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 471574c14cd6Smrg nonnull (strerror (errno))); 4716e35772b2Smrg tmp_len = strlen (tmp); 4717e35772b2Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718e35772b2Smrg memcpy (concat_name, tmp, tmp_len); 4719e35772b2Smrg concat_name[tmp_len] = '/'; 4720e35772b2Smrg strcpy (concat_name + tmp_len + 1, wrapper); 472172b676d7Smrg 4722e35772b2Smrg if (check_executable (concat_name)) 4723e35772b2Smrg return concat_name; 4724e35772b2Smrg XFREE (concat_name); 4725e35772b2Smrg return NULL; 4726e35772b2Smrg} 472772b676d7Smrg 4728e35772b2Smrgchar * 4729e35772b2Smrgchase_symlinks (const char *pathspec) 4730e35772b2Smrg{ 4731e35772b2Smrg#ifndef S_ISLNK 4732e35772b2Smrg return xstrdup (pathspec); 4733e35772b2Smrg#else 4734e35772b2Smrg char buf[LT_PATHMAX]; 4735e35772b2Smrg struct stat s; 4736e35772b2Smrg char *tmp_pathspec = xstrdup (pathspec); 4737e35772b2Smrg char *p; 4738e35772b2Smrg int has_symlinks = 0; 4739e35772b2Smrg while (strlen (tmp_pathspec) && !has_symlinks) 4740e35772b2Smrg { 474174c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, 474274c14cd6Smrg "checking path component for symlinks: %s\n", 474374c14cd6Smrg tmp_pathspec); 4744e35772b2Smrg if (lstat (tmp_pathspec, &s) == 0) 4745e35772b2Smrg { 4746e35772b2Smrg if (S_ISLNK (s.st_mode) != 0) 4747e35772b2Smrg { 4748e35772b2Smrg has_symlinks = 1; 4749e35772b2Smrg break; 4750e35772b2Smrg } 475172b676d7Smrg 4752e35772b2Smrg /* search backwards for last DIR_SEPARATOR */ 4753e35772b2Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754e35772b2Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755e35772b2Smrg p--; 4756e35772b2Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757e35772b2Smrg { 4758e35772b2Smrg /* no more DIR_SEPARATORS left */ 4759e35772b2Smrg break; 4760e35772b2Smrg } 4761e35772b2Smrg *p = '\0'; 4762e35772b2Smrg } 4763e35772b2Smrg else 4764e35772b2Smrg { 476574c14cd6Smrg lt_fatal (__FILE__, __LINE__, 476674c14cd6Smrg "error accessing file \"%s\": %s", 476774c14cd6Smrg tmp_pathspec, nonnull (strerror (errno))); 4768e35772b2Smrg } 4769e35772b2Smrg } 4770e35772b2Smrg XFREE (tmp_pathspec); 477172b676d7Smrg 4772e35772b2Smrg if (!has_symlinks) 4773e35772b2Smrg { 4774e35772b2Smrg return xstrdup (pathspec); 4775e35772b2Smrg } 477672b676d7Smrg 4777e35772b2Smrg tmp_pathspec = realpath (pathspec, buf); 4778e35772b2Smrg if (tmp_pathspec == 0) 4779e35772b2Smrg { 478074c14cd6Smrg lt_fatal (__FILE__, __LINE__, 478174c14cd6Smrg "could not follow symlinks for %s", pathspec); 4782e35772b2Smrg } 4783e35772b2Smrg return xstrdup (tmp_pathspec); 4784e35772b2Smrg#endif 4785e35772b2Smrg} 478672b676d7Smrg 4787e35772b2Smrgchar * 4788e35772b2Smrgstrendzap (char *str, const char *pat) 4789e35772b2Smrg{ 4790e35772b2Smrg size_t len, patlen; 479172b676d7Smrg 4792e35772b2Smrg assert (str != NULL); 4793e35772b2Smrg assert (pat != NULL); 479472b676d7Smrg 4795e35772b2Smrg len = strlen (str); 4796e35772b2Smrg patlen = strlen (pat); 479772b676d7Smrg 4798e35772b2Smrg if (patlen <= len) 4799e35772b2Smrg { 4800e35772b2Smrg str += len - patlen; 4801e35772b2Smrg if (strcmp (str, pat) == 0) 4802e35772b2Smrg *str = '\0'; 4803e35772b2Smrg } 4804e35772b2Smrg return str; 4805e35772b2Smrg} 480672b676d7Smrg 480774c14cd6Smrgvoid 480874c14cd6Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 480974c14cd6Smrg{ 481074c14cd6Smrg va_list args; 481174c14cd6Smrg if (lt_debug) 481274c14cd6Smrg { 481374c14cd6Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 481474c14cd6Smrg va_start (args, fmt); 481574c14cd6Smrg (void) vfprintf (stderr, fmt, args); 481674c14cd6Smrg va_end (args); 481774c14cd6Smrg } 481874c14cd6Smrg} 481974c14cd6Smrg 4820e35772b2Smrgstatic void 482174c14cd6Smrglt_error_core (int exit_status, const char *file, 482274c14cd6Smrg int line, const char *mode, 4823e35772b2Smrg const char *message, va_list ap) 4824e35772b2Smrg{ 482574c14cd6Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826e35772b2Smrg vfprintf (stderr, message, ap); 4827e35772b2Smrg fprintf (stderr, ".\n"); 482872b676d7Smrg 4829e35772b2Smrg if (exit_status >= 0) 4830e35772b2Smrg exit (exit_status); 4831e35772b2Smrg} 483272b676d7Smrg 4833e35772b2Smrgvoid 483474c14cd6Smrglt_fatal (const char *file, int line, const char *message, ...) 4835e35772b2Smrg{ 4836e35772b2Smrg va_list ap; 4837e35772b2Smrg va_start (ap, message); 483874c14cd6Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839e35772b2Smrg va_end (ap); 4840e35772b2Smrg} 484172b676d7Smrg 484274c14cd6Smrgstatic const char * 484374c14cd6Smrgnonnull (const char *s) 484474c14cd6Smrg{ 484574c14cd6Smrg return s ? s : "(null)"; 484674c14cd6Smrg} 484774c14cd6Smrg 484874c14cd6Smrgstatic const char * 484974c14cd6Smrgnonempty (const char *s) 485074c14cd6Smrg{ 485174c14cd6Smrg return (s && !*s) ? "(empty)" : nonnull (s); 485274c14cd6Smrg} 485374c14cd6Smrg 4854e35772b2Smrgvoid 4855e35772b2Smrglt_setenv (const char *name, const char *value) 4856e35772b2Smrg{ 485774c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, 485874c14cd6Smrg "(lt_setenv) setting '%s' to '%s'\n", 485974c14cd6Smrg nonnull (name), nonnull (value)); 4860e35772b2Smrg { 4861e35772b2Smrg#ifdef HAVE_SETENV 4862e35772b2Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863e35772b2Smrg char *str = xstrdup (value); 4864e35772b2Smrg setenv (name, str, 1); 4865e35772b2Smrg#else 4866e35772b2Smrg int len = strlen (name) + 1 + strlen (value) + 1; 4867e35772b2Smrg char *str = XMALLOC (char, len); 4868e35772b2Smrg sprintf (str, "%s=%s", name, value); 4869e35772b2Smrg if (putenv (str) != EXIT_SUCCESS) 4870e35772b2Smrg { 4871e35772b2Smrg XFREE (str); 4872e35772b2Smrg } 4873e35772b2Smrg#endif 4874e35772b2Smrg } 4875e35772b2Smrg} 487672b676d7Smrg 4877e35772b2Smrgchar * 4878e35772b2Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879e35772b2Smrg{ 4880e35772b2Smrg char *new_value; 4881e35772b2Smrg if (orig_value && *orig_value) 4882e35772b2Smrg { 4883e35772b2Smrg int orig_value_len = strlen (orig_value); 4884e35772b2Smrg int add_len = strlen (add); 4885e35772b2Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886e35772b2Smrg if (to_end) 4887e35772b2Smrg { 4888e35772b2Smrg strcpy (new_value, orig_value); 4889e35772b2Smrg strcpy (new_value + orig_value_len, add); 4890e35772b2Smrg } 4891e35772b2Smrg else 4892e35772b2Smrg { 4893e35772b2Smrg strcpy (new_value, add); 4894e35772b2Smrg strcpy (new_value + add_len, orig_value); 4895e35772b2Smrg } 4896e35772b2Smrg } 4897e35772b2Smrg else 4898e35772b2Smrg { 4899e35772b2Smrg new_value = xstrdup (add); 4900e35772b2Smrg } 4901e35772b2Smrg return new_value; 4902e35772b2Smrg} 490372b676d7Smrg 4904e35772b2Smrgvoid 4905e35772b2Smrglt_update_exe_path (const char *name, const char *value) 4906e35772b2Smrg{ 490774c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, 490874c14cd6Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 490974c14cd6Smrg nonnull (name), nonnull (value)); 491072b676d7Smrg 4911e35772b2Smrg if (name && *name && value && *value) 4912e35772b2Smrg { 4913e35772b2Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914e35772b2Smrg /* some systems can't cope with a ':'-terminated path #' */ 4915e35772b2Smrg int len = strlen (new_value); 4916e35772b2Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917e35772b2Smrg { 4918e35772b2Smrg new_value[len-1] = '\0'; 4919e35772b2Smrg } 4920e35772b2Smrg lt_setenv (name, new_value); 4921e35772b2Smrg XFREE (new_value); 4922e35772b2Smrg } 4923e35772b2Smrg} 492472b676d7Smrg 4925e35772b2Smrgvoid 4926e35772b2Smrglt_update_lib_path (const char *name, const char *value) 4927e35772b2Smrg{ 492874c14cd6Smrg lt_debugprintf (__FILE__, __LINE__, 492974c14cd6Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 493074c14cd6Smrg nonnull (name), nonnull (value)); 493172b676d7Smrg 4932e35772b2Smrg if (name && *name && value && *value) 4933e35772b2Smrg { 4934e35772b2Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935e35772b2Smrg lt_setenv (name, new_value); 4936e35772b2Smrg XFREE (new_value); 4937e35772b2Smrg } 4938e35772b2Smrg} 493972b676d7Smrg 494074c14cd6SmrgEOF 494174c14cd6Smrg case $host_os in 494274c14cd6Smrg mingw*) 494374c14cd6Smrg cat <<"EOF" 494474c14cd6Smrg 494574c14cd6Smrg/* Prepares an argument vector before calling spawn(). 494674c14cd6Smrg Note that spawn() does not by itself call the command interpreter 494774c14cd6Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 494874c14cd6Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 494974c14cd6Smrg GetVersionEx(&v); 495074c14cd6Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 495174c14cd6Smrg }) ? "cmd.exe" : "command.com"). 495274c14cd6Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 495374c14cd6Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 495474c14cd6Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 495574c14cd6Smrg special way: 495674c14cd6Smrg - Space and tab are interpreted as delimiters. They are not treated as 495774c14cd6Smrg delimiters if they are surrounded by double quotes: "...". 495874c14cd6Smrg - Unescaped double quotes are removed from the input. Their only effect is 495974c14cd6Smrg that within double quotes, space and tab are treated like normal 496074c14cd6Smrg characters. 496174c14cd6Smrg - Backslashes not followed by double quotes are not special. 496274c14cd6Smrg - But 2*n+1 backslashes followed by a double quote become 496374c14cd6Smrg n backslashes followed by a double quote (n >= 0): 496474c14cd6Smrg \" -> " 496574c14cd6Smrg \\\" -> \" 496674c14cd6Smrg \\\\\" -> \\" 496774c14cd6Smrg */ 496874c14cd6Smrg#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" 496974c14cd6Smrg#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" 497074c14cd6Smrgchar ** 497174c14cd6Smrgprepare_spawn (char **argv) 497274c14cd6Smrg{ 497374c14cd6Smrg size_t argc; 497474c14cd6Smrg char **new_argv; 497574c14cd6Smrg size_t i; 497674c14cd6Smrg 497774c14cd6Smrg /* Count number of arguments. */ 497874c14cd6Smrg for (argc = 0; argv[argc] != NULL; argc++) 497974c14cd6Smrg ; 498074c14cd6Smrg 498174c14cd6Smrg /* Allocate new argument vector. */ 498274c14cd6Smrg new_argv = XMALLOC (char *, argc + 1); 498374c14cd6Smrg 498474c14cd6Smrg /* Put quoted arguments into the new argument vector. */ 498574c14cd6Smrg for (i = 0; i < argc; i++) 498674c14cd6Smrg { 498774c14cd6Smrg const char *string = argv[i]; 498874c14cd6Smrg 498974c14cd6Smrg if (string[0] == '\0') 499074c14cd6Smrg new_argv[i] = xstrdup ("\"\""); 499174c14cd6Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 499274c14cd6Smrg { 499374c14cd6Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 499474c14cd6Smrg size_t length; 499574c14cd6Smrg unsigned int backslashes; 499674c14cd6Smrg const char *s; 499774c14cd6Smrg char *quoted_string; 499874c14cd6Smrg char *p; 499974c14cd6Smrg 500074c14cd6Smrg length = 0; 500174c14cd6Smrg backslashes = 0; 500274c14cd6Smrg if (quote_around) 500374c14cd6Smrg length++; 500474c14cd6Smrg for (s = string; *s != '\0'; s++) 500574c14cd6Smrg { 500674c14cd6Smrg char c = *s; 500774c14cd6Smrg if (c == '"') 500874c14cd6Smrg length += backslashes + 1; 500974c14cd6Smrg length++; 501074c14cd6Smrg if (c == '\\') 501174c14cd6Smrg backslashes++; 501274c14cd6Smrg else 501374c14cd6Smrg backslashes = 0; 501474c14cd6Smrg } 501574c14cd6Smrg if (quote_around) 501674c14cd6Smrg length += backslashes + 1; 501774c14cd6Smrg 501874c14cd6Smrg quoted_string = XMALLOC (char, length + 1); 501974c14cd6Smrg 502074c14cd6Smrg p = quoted_string; 502174c14cd6Smrg backslashes = 0; 502274c14cd6Smrg if (quote_around) 502374c14cd6Smrg *p++ = '"'; 502474c14cd6Smrg for (s = string; *s != '\0'; s++) 502574c14cd6Smrg { 502674c14cd6Smrg char c = *s; 502774c14cd6Smrg if (c == '"') 502874c14cd6Smrg { 502974c14cd6Smrg unsigned int j; 503074c14cd6Smrg for (j = backslashes + 1; j > 0; j--) 503174c14cd6Smrg *p++ = '\\'; 503274c14cd6Smrg } 503374c14cd6Smrg *p++ = c; 503474c14cd6Smrg if (c == '\\') 503574c14cd6Smrg backslashes++; 503674c14cd6Smrg else 503774c14cd6Smrg backslashes = 0; 503874c14cd6Smrg } 503974c14cd6Smrg if (quote_around) 504074c14cd6Smrg { 504174c14cd6Smrg unsigned int j; 504274c14cd6Smrg for (j = backslashes; j > 0; j--) 504374c14cd6Smrg *p++ = '\\'; 504474c14cd6Smrg *p++ = '"'; 504574c14cd6Smrg } 504674c14cd6Smrg *p = '\0'; 504774c14cd6Smrg 504874c14cd6Smrg new_argv[i] = quoted_string; 504974c14cd6Smrg } 505074c14cd6Smrg else 505174c14cd6Smrg new_argv[i] = (char *) string; 505274c14cd6Smrg } 505374c14cd6Smrg new_argv[argc] = NULL; 505474c14cd6Smrg 505574c14cd6Smrg return new_argv; 505674c14cd6Smrg} 505774c14cd6SmrgEOF 505874c14cd6Smrg ;; 505974c14cd6Smrg esac 506072b676d7Smrg 506174c14cd6Smrg cat <<"EOF" 506274c14cd6Smrgvoid lt_dump_script (FILE* f) 506374c14cd6Smrg{ 506474c14cd6SmrgEOF 506574c14cd6Smrg func_emit_wrapper yes | 506674c14cd6Smrg $SED -n -e ' 506774c14cd6Smrgs/^\(.\{79\}\)\(..*\)/\1\ 506874c14cd6Smrg\2/ 506974c14cd6Smrgh 507074c14cd6Smrgs/\([\\"]\)/\\\1/g 507174c14cd6Smrgs/$/\\n/ 507274c14cd6Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 507374c14cd6Smrgg 507474c14cd6SmrgD' 507574c14cd6Smrg cat <<"EOF" 507674c14cd6Smrg} 5077e35772b2SmrgEOF 5078e35772b2Smrg} 5079e35772b2Smrg# end: func_emit_cwrapperexe_src 508072b676d7Smrg 508174c14cd6Smrg# func_win32_import_lib_p ARG 508274c14cd6Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 508374c14cd6Smrgfunc_win32_import_lib_p () 508474c14cd6Smrg{ 508574c14cd6Smrg $opt_debug 508674c14cd6Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 508774c14cd6Smrg *import*) : ;; 508874c14cd6Smrg *) false ;; 508974c14cd6Smrg esac 509074c14cd6Smrg} 509174c14cd6Smrg 5092e35772b2Smrg# func_mode_link arg... 5093e35772b2Smrgfunc_mode_link () 5094e35772b2Smrg{ 5095e35772b2Smrg $opt_debug 5096e35772b2Smrg case $host in 5097e35772b2Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098e35772b2Smrg # It is impossible to link a dll without this setting, and 5099e35772b2Smrg # we shouldn't force the makefile maintainer to figure out 5100e35772b2Smrg # which system we are compiling for in order to pass an extra 5101e35772b2Smrg # flag for every libtool invocation. 5102e35772b2Smrg # allow_undefined=no 510372b676d7Smrg 5104e35772b2Smrg # FIXME: Unfortunately, there are problems with the above when trying 5105e35772b2Smrg # to make a dll which has undefined symbols, in which case not 5106e35772b2Smrg # even a static library is built. For now, we need to specify 5107e35772b2Smrg # -no-undefined on the libtool link line when we can be certain 5108e35772b2Smrg # that all symbols are satisfied, otherwise we get a static library. 5109e35772b2Smrg allow_undefined=yes 5110e35772b2Smrg ;; 5111e35772b2Smrg *) 5112e35772b2Smrg allow_undefined=yes 5113e35772b2Smrg ;; 5114e35772b2Smrg esac 5115e35772b2Smrg libtool_args=$nonopt 5116e35772b2Smrg base_compile="$nonopt $@" 5117e35772b2Smrg compile_command=$nonopt 5118e35772b2Smrg finalize_command=$nonopt 511972b676d7Smrg 5120e35772b2Smrg compile_rpath= 5121e35772b2Smrg finalize_rpath= 5122e35772b2Smrg compile_shlibpath= 5123e35772b2Smrg finalize_shlibpath= 5124e35772b2Smrg convenience= 5125e35772b2Smrg old_convenience= 5126e35772b2Smrg deplibs= 5127e35772b2Smrg old_deplibs= 5128e35772b2Smrg compiler_flags= 5129e35772b2Smrg linker_flags= 5130e35772b2Smrg dllsearchpath= 5131e35772b2Smrg lib_search_path=`pwd` 5132e35772b2Smrg inst_prefix_dir= 5133e35772b2Smrg new_inherited_linker_flags= 513472b676d7Smrg 5135e35772b2Smrg avoid_version=no 513674c14cd6Smrg bindir= 5137e35772b2Smrg dlfiles= 5138e35772b2Smrg dlprefiles= 5139e35772b2Smrg dlself=no 5140e35772b2Smrg export_dynamic=no 5141e35772b2Smrg export_symbols= 5142e35772b2Smrg export_symbols_regex= 5143e35772b2Smrg generated= 5144e35772b2Smrg libobjs= 5145e35772b2Smrg ltlibs= 5146e35772b2Smrg module=no 5147e35772b2Smrg no_install=no 5148e35772b2Smrg objs= 5149e35772b2Smrg non_pic_objects= 5150e35772b2Smrg precious_files_regex= 5151e35772b2Smrg prefer_static_libs=no 5152e35772b2Smrg preload=no 5153e35772b2Smrg prev= 5154e35772b2Smrg prevarg= 5155e35772b2Smrg release= 5156e35772b2Smrg rpath= 5157e35772b2Smrg xrpath= 5158e35772b2Smrg perm_rpath= 5159e35772b2Smrg temp_rpath= 5160e35772b2Smrg thread_safe=no 5161e35772b2Smrg vinfo= 5162e35772b2Smrg vinfo_number=no 5163e35772b2Smrg weak_libs= 5164e35772b2Smrg single_module="${wl}-single_module" 5165e35772b2Smrg func_infer_tag $base_compile 5166e35772b2Smrg 5167e35772b2Smrg # We need to know -static, to get the right output filenames. 5168e35772b2Smrg for arg 5169e35772b2Smrg do 5170e35772b2Smrg case $arg in 5171e35772b2Smrg -shared) 5172e35772b2Smrg test "$build_libtool_libs" != yes && \ 5173e35772b2Smrg func_fatal_configuration "can not build a shared library" 5174e35772b2Smrg build_old_libs=no 5175e35772b2Smrg break 5176e35772b2Smrg ;; 5177e35772b2Smrg -all-static | -static | -static-libtool-libs) 5178e35772b2Smrg case $arg in 5179e35772b2Smrg -all-static) 5180e35772b2Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181e35772b2Smrg func_warning "complete static linking is impossible in this configuration" 5182e35772b2Smrg fi 5183e35772b2Smrg if test -n "$link_static_flag"; then 5184e35772b2Smrg dlopen_self=$dlopen_self_static 5185e35772b2Smrg fi 5186e35772b2Smrg prefer_static_libs=yes 5187e35772b2Smrg ;; 5188e35772b2Smrg -static) 5189e35772b2Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190e35772b2Smrg dlopen_self=$dlopen_self_static 5191e35772b2Smrg fi 5192e35772b2Smrg prefer_static_libs=built 5193e35772b2Smrg ;; 5194e35772b2Smrg -static-libtool-libs) 5195e35772b2Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196e35772b2Smrg dlopen_self=$dlopen_self_static 519772b676d7Smrg fi 5198e35772b2Smrg prefer_static_libs=yes 5199e35772b2Smrg ;; 5200e35772b2Smrg esac 5201e35772b2Smrg build_libtool_libs=no 5202e35772b2Smrg build_old_libs=yes 5203e35772b2Smrg break 5204e35772b2Smrg ;; 5205e35772b2Smrg esac 5206e35772b2Smrg done 520772b676d7Smrg 5208e35772b2Smrg # See if our shared archives depend on static archives. 5209e35772b2Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 521072b676d7Smrg 5211e35772b2Smrg # Go through the arguments, transforming them on the way. 5212e35772b2Smrg while test "$#" -gt 0; do 5213e35772b2Smrg arg="$1" 5214e35772b2Smrg shift 5215e35772b2Smrg func_quote_for_eval "$arg" 5216e35772b2Smrg qarg=$func_quote_for_eval_unquoted_result 5217e35772b2Smrg func_append libtool_args " $func_quote_for_eval_result" 521872b676d7Smrg 5219e35772b2Smrg # If the previous option needs an argument, assign it. 5220e35772b2Smrg if test -n "$prev"; then 5221e35772b2Smrg case $prev in 5222e35772b2Smrg output) 5223e35772b2Smrg func_append compile_command " @OUTPUT@" 5224e35772b2Smrg func_append finalize_command " @OUTPUT@" 5225e35772b2Smrg ;; 5226e35772b2Smrg esac 522772b676d7Smrg 5228e35772b2Smrg case $prev in 522974c14cd6Smrg bindir) 523074c14cd6Smrg bindir="$arg" 523174c14cd6Smrg prev= 523274c14cd6Smrg continue 523374c14cd6Smrg ;; 5234e35772b2Smrg dlfiles|dlprefiles) 5235e35772b2Smrg if test "$preload" = no; then 5236e35772b2Smrg # Add the symbol object into the linking commands. 5237e35772b2Smrg func_append compile_command " @SYMFILE@" 5238e35772b2Smrg func_append finalize_command " @SYMFILE@" 5239e35772b2Smrg preload=yes 5240e35772b2Smrg fi 5241e35772b2Smrg case $arg in 5242e35772b2Smrg *.la | *.lo) ;; # We handle these cases below. 5243e35772b2Smrg force) 5244e35772b2Smrg if test "$dlself" = no; then 5245e35772b2Smrg dlself=needless 5246e35772b2Smrg export_dynamic=yes 5247e35772b2Smrg fi 5248e35772b2Smrg prev= 5249e35772b2Smrg continue 5250e35772b2Smrg ;; 5251e35772b2Smrg self) 5252e35772b2Smrg if test "$prev" = dlprefiles; then 5253e35772b2Smrg dlself=yes 5254e35772b2Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255e35772b2Smrg dlself=yes 525672b676d7Smrg else 5257e35772b2Smrg dlself=needless 5258e35772b2Smrg export_dynamic=yes 525972b676d7Smrg fi 5260e35772b2Smrg prev= 5261e35772b2Smrg continue 5262e35772b2Smrg ;; 5263e35772b2Smrg *) 5264e35772b2Smrg if test "$prev" = dlfiles; then 526574c14cd6Smrg func_append dlfiles " $arg" 526672b676d7Smrg else 526774c14cd6Smrg func_append dlprefiles " $arg" 526872b676d7Smrg fi 5269e35772b2Smrg prev= 5270e35772b2Smrg continue 5271e35772b2Smrg ;; 5272e35772b2Smrg esac 5273e35772b2Smrg ;; 5274e35772b2Smrg expsyms) 5275e35772b2Smrg export_symbols="$arg" 5276e35772b2Smrg test -f "$arg" \ 5277e35772b2Smrg || func_fatal_error "symbol file \`$arg' does not exist" 5278e35772b2Smrg prev= 5279e35772b2Smrg continue 5280e35772b2Smrg ;; 5281e35772b2Smrg expsyms_regex) 5282e35772b2Smrg export_symbols_regex="$arg" 5283e35772b2Smrg prev= 5284e35772b2Smrg continue 5285e35772b2Smrg ;; 5286e35772b2Smrg framework) 528772b676d7Smrg case $host in 5288e35772b2Smrg *-*-darwin*) 5289e35772b2Smrg case "$deplibs " in 5290e35772b2Smrg *" $qarg.ltframework "*) ;; 529174c14cd6Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292e35772b2Smrg ;; 5293e35772b2Smrg esac 5294e35772b2Smrg ;; 529572b676d7Smrg esac 5296e35772b2Smrg prev= 5297e35772b2Smrg continue 529872b676d7Smrg ;; 5299e35772b2Smrg inst_prefix) 5300e35772b2Smrg inst_prefix_dir="$arg" 5301e35772b2Smrg prev= 5302e35772b2Smrg continue 530372b676d7Smrg ;; 5304e35772b2Smrg objectlist) 5305e35772b2Smrg if test -f "$arg"; then 5306e35772b2Smrg save_arg=$arg 5307e35772b2Smrg moreargs= 5308e35772b2Smrg for fil in `cat "$save_arg"` 5309e35772b2Smrg do 531074c14cd6Smrg# func_append moreargs " $fil" 5311e35772b2Smrg arg=$fil 5312e35772b2Smrg # A libtool-controlled object. 531372b676d7Smrg 5314e35772b2Smrg # Check to see that this really is a libtool object. 5315e35772b2Smrg if func_lalib_unsafe_p "$arg"; then 5316e35772b2Smrg pic_object= 5317e35772b2Smrg non_pic_object= 531872b676d7Smrg 5319e35772b2Smrg # Read the .lo file 5320e35772b2Smrg func_source "$arg" 532172b676d7Smrg 5322e35772b2Smrg if test -z "$pic_object" || 5323e35772b2Smrg test -z "$non_pic_object" || 5324e35772b2Smrg test "$pic_object" = none && 5325e35772b2Smrg test "$non_pic_object" = none; then 5326e35772b2Smrg func_fatal_error "cannot find name of object for \`$arg'" 5327e35772b2Smrg fi 532872b676d7Smrg 5329e35772b2Smrg # Extract subdirectory from the argument. 5330e35772b2Smrg func_dirname "$arg" "/" "" 5331e35772b2Smrg xdir="$func_dirname_result" 533272b676d7Smrg 5333e35772b2Smrg if test "$pic_object" != none; then 5334e35772b2Smrg # Prepend the subdirectory the object is found in. 5335e35772b2Smrg pic_object="$xdir$pic_object" 533672b676d7Smrg 5337e35772b2Smrg if test "$prev" = dlfiles; then 5338e35772b2Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 533974c14cd6Smrg func_append dlfiles " $pic_object" 5340e35772b2Smrg prev= 5341e35772b2Smrg continue 5342e35772b2Smrg else 5343e35772b2Smrg # If libtool objects are unsupported, then we need to preload. 5344e35772b2Smrg prev=dlprefiles 5345e35772b2Smrg fi 5346e35772b2Smrg fi 534772b676d7Smrg 5348e35772b2Smrg # CHECK ME: I think I busted this. -Ossama 5349e35772b2Smrg if test "$prev" = dlprefiles; then 5350e35772b2Smrg # Preload the old-style object. 535174c14cd6Smrg func_append dlprefiles " $pic_object" 5352e35772b2Smrg prev= 5353e35772b2Smrg fi 535472b676d7Smrg 5355e35772b2Smrg # A PIC object. 5356e35772b2Smrg func_append libobjs " $pic_object" 5357e35772b2Smrg arg="$pic_object" 5358e35772b2Smrg fi 535972b676d7Smrg 5360e35772b2Smrg # Non-PIC object. 5361e35772b2Smrg if test "$non_pic_object" != none; then 5362e35772b2Smrg # Prepend the subdirectory the object is found in. 5363e35772b2Smrg non_pic_object="$xdir$non_pic_object" 536472b676d7Smrg 5365e35772b2Smrg # A standard non-PIC object 5366e35772b2Smrg func_append non_pic_objects " $non_pic_object" 5367e35772b2Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5368e35772b2Smrg arg="$non_pic_object" 5369e35772b2Smrg fi 5370e35772b2Smrg else 5371e35772b2Smrg # If the PIC object exists, use it instead. 5372e35772b2Smrg # $xdir was prepended to $pic_object above. 5373e35772b2Smrg non_pic_object="$pic_object" 5374e35772b2Smrg func_append non_pic_objects " $non_pic_object" 5375e35772b2Smrg fi 5376e35772b2Smrg else 5377e35772b2Smrg # Only an error if not doing a dry-run. 5378e35772b2Smrg if $opt_dry_run; then 5379e35772b2Smrg # Extract subdirectory from the argument. 5380e35772b2Smrg func_dirname "$arg" "/" "" 5381e35772b2Smrg xdir="$func_dirname_result" 5382e35772b2Smrg 5383e35772b2Smrg func_lo2o "$arg" 5384e35772b2Smrg pic_object=$xdir$objdir/$func_lo2o_result 5385e35772b2Smrg non_pic_object=$xdir$func_lo2o_result 5386e35772b2Smrg func_append libobjs " $pic_object" 5387e35772b2Smrg func_append non_pic_objects " $non_pic_object" 5388e35772b2Smrg else 5389e35772b2Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5390e35772b2Smrg fi 5391e35772b2Smrg fi 5392e35772b2Smrg done 539372b676d7Smrg else 5394e35772b2Smrg func_fatal_error "link input file \`$arg' does not exist" 539572b676d7Smrg fi 5396e35772b2Smrg arg=$save_arg 5397e35772b2Smrg prev= 5398e35772b2Smrg continue 5399e35772b2Smrg ;; 5400e35772b2Smrg precious_regex) 5401e35772b2Smrg precious_files_regex="$arg" 5402e35772b2Smrg prev= 5403e35772b2Smrg continue 5404e35772b2Smrg ;; 5405e35772b2Smrg release) 5406e35772b2Smrg release="-$arg" 5407e35772b2Smrg prev= 5408e35772b2Smrg continue 5409e35772b2Smrg ;; 5410e35772b2Smrg rpath | xrpath) 5411e35772b2Smrg # We need an absolute path. 5412e35772b2Smrg case $arg in 5413e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414e35772b2Smrg *) 5415e35772b2Smrg func_fatal_error "only absolute run-paths are allowed" 5416e35772b2Smrg ;; 5417e35772b2Smrg esac 5418e35772b2Smrg if test "$prev" = rpath; then 5419e35772b2Smrg case "$rpath " in 5420e35772b2Smrg *" $arg "*) ;; 542174c14cd6Smrg *) func_append rpath " $arg" ;; 5422e35772b2Smrg esac 542372b676d7Smrg else 5424e35772b2Smrg case "$xrpath " in 5425e35772b2Smrg *" $arg "*) ;; 542674c14cd6Smrg *) func_append xrpath " $arg" ;; 5427e35772b2Smrg esac 542872b676d7Smrg fi 5429e35772b2Smrg prev= 5430e35772b2Smrg continue 5431e35772b2Smrg ;; 5432e35772b2Smrg shrext) 5433e35772b2Smrg shrext_cmds="$arg" 5434e35772b2Smrg prev= 5435e35772b2Smrg continue 5436e35772b2Smrg ;; 5437e35772b2Smrg weak) 543874c14cd6Smrg func_append weak_libs " $arg" 5439e35772b2Smrg prev= 5440e35772b2Smrg continue 5441e35772b2Smrg ;; 5442e35772b2Smrg xcclinker) 544374c14cd6Smrg func_append linker_flags " $qarg" 544474c14cd6Smrg func_append compiler_flags " $qarg" 5445e35772b2Smrg prev= 5446e35772b2Smrg func_append compile_command " $qarg" 5447e35772b2Smrg func_append finalize_command " $qarg" 5448e35772b2Smrg continue 5449e35772b2Smrg ;; 5450e35772b2Smrg xcompiler) 545174c14cd6Smrg func_append compiler_flags " $qarg" 5452e35772b2Smrg prev= 5453e35772b2Smrg func_append compile_command " $qarg" 5454e35772b2Smrg func_append finalize_command " $qarg" 5455e35772b2Smrg continue 5456e35772b2Smrg ;; 5457e35772b2Smrg xlinker) 545874c14cd6Smrg func_append linker_flags " $qarg" 545974c14cd6Smrg func_append compiler_flags " $wl$qarg" 5460e35772b2Smrg prev= 5461e35772b2Smrg func_append compile_command " $wl$qarg" 5462e35772b2Smrg func_append finalize_command " $wl$qarg" 5463e35772b2Smrg continue 5464e35772b2Smrg ;; 5465e35772b2Smrg *) 5466e35772b2Smrg eval "$prev=\"\$arg\"" 5467e35772b2Smrg prev= 5468e35772b2Smrg continue 5469e35772b2Smrg ;; 547072b676d7Smrg esac 5471e35772b2Smrg fi # test -n "$prev" 547272b676d7Smrg 5473e35772b2Smrg prevarg="$arg" 547472b676d7Smrg 5475e35772b2Smrg case $arg in 5476e35772b2Smrg -all-static) 5477e35772b2Smrg if test -n "$link_static_flag"; then 5478e35772b2Smrg # See comment for -static flag below, for more details. 5479e35772b2Smrg func_append compile_command " $link_static_flag" 5480e35772b2Smrg func_append finalize_command " $link_static_flag" 5481e35772b2Smrg fi 5482e35772b2Smrg continue 5483e35772b2Smrg ;; 548472b676d7Smrg 5485e35772b2Smrg -allow-undefined) 5486e35772b2Smrg # FIXME: remove this flag sometime in the future. 5487e35772b2Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488e35772b2Smrg ;; 548972b676d7Smrg 5490e35772b2Smrg -avoid-version) 5491e35772b2Smrg avoid_version=yes 5492e35772b2Smrg continue 5493e35772b2Smrg ;; 549472b676d7Smrg 549574c14cd6Smrg -bindir) 549674c14cd6Smrg prev=bindir 549774c14cd6Smrg continue 549874c14cd6Smrg ;; 549974c14cd6Smrg 5500e35772b2Smrg -dlopen) 5501e35772b2Smrg prev=dlfiles 5502e35772b2Smrg continue 5503e35772b2Smrg ;; 550472b676d7Smrg 5505e35772b2Smrg -dlpreopen) 5506e35772b2Smrg prev=dlprefiles 5507e35772b2Smrg continue 5508e35772b2Smrg ;; 550972b676d7Smrg 5510e35772b2Smrg -export-dynamic) 5511e35772b2Smrg export_dynamic=yes 5512e35772b2Smrg continue 5513e35772b2Smrg ;; 551472b676d7Smrg 5515e35772b2Smrg -export-symbols | -export-symbols-regex) 5516e35772b2Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517e35772b2Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518e35772b2Smrg fi 5519e35772b2Smrg if test "X$arg" = "X-export-symbols"; then 5520e35772b2Smrg prev=expsyms 5521e35772b2Smrg else 5522e35772b2Smrg prev=expsyms_regex 5523e35772b2Smrg fi 5524e35772b2Smrg continue 5525e35772b2Smrg ;; 552672b676d7Smrg 5527e35772b2Smrg -framework) 5528e35772b2Smrg prev=framework 5529e35772b2Smrg continue 5530e35772b2Smrg ;; 553172b676d7Smrg 5532e35772b2Smrg -inst-prefix-dir) 5533e35772b2Smrg prev=inst_prefix 5534e35772b2Smrg continue 5535e35772b2Smrg ;; 553672b676d7Smrg 5537e35772b2Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538e35772b2Smrg # so, if we see these flags be careful not to treat them like -L 5539e35772b2Smrg -L[A-Z][A-Z]*:*) 5540e35772b2Smrg case $with_gcc/$host in 5541e35772b2Smrg no/*-*-irix* | /*-*-irix*) 5542e35772b2Smrg func_append compile_command " $arg" 5543e35772b2Smrg func_append finalize_command " $arg" 5544e35772b2Smrg ;; 5545e35772b2Smrg esac 5546e35772b2Smrg continue 5547e35772b2Smrg ;; 554872b676d7Smrg 5549e35772b2Smrg -L*) 555074c14cd6Smrg func_stripname "-L" '' "$arg" 555174c14cd6Smrg if test -z "$func_stripname_result"; then 5552e35772b2Smrg if test "$#" -gt 0; then 5553e35772b2Smrg func_fatal_error "require no space between \`-L' and \`$1'" 5554e35772b2Smrg else 5555e35772b2Smrg func_fatal_error "need path for \`-L' option" 5556e35772b2Smrg fi 5557e35772b2Smrg fi 555874c14cd6Smrg func_resolve_sysroot "$func_stripname_result" 555974c14cd6Smrg dir=$func_resolve_sysroot_result 5560e35772b2Smrg # We need an absolute path. 5561e35772b2Smrg case $dir in 5562e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563e35772b2Smrg *) 5564e35772b2Smrg absdir=`cd "$dir" && pwd` 5565e35772b2Smrg test -z "$absdir" && \ 5566e35772b2Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567e35772b2Smrg dir="$absdir" 5568e35772b2Smrg ;; 5569e35772b2Smrg esac 5570e35772b2Smrg case "$deplibs " in 557174c14cd6Smrg *" -L$dir "* | *" $arg "*) 557274c14cd6Smrg # Will only happen for absolute or sysroot arguments 557374c14cd6Smrg ;; 5574e35772b2Smrg *) 557574c14cd6Smrg # Preserve sysroot, but never include relative directories 557674c14cd6Smrg case $dir in 557774c14cd6Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 557874c14cd6Smrg *) func_append deplibs " -L$dir" ;; 557974c14cd6Smrg esac 558074c14cd6Smrg func_append lib_search_path " $dir" 5581e35772b2Smrg ;; 5582e35772b2Smrg esac 5583e35772b2Smrg case $host in 5584e35772b2Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 558574c14cd6Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586e35772b2Smrg case :$dllsearchpath: in 5587e35772b2Smrg *":$dir:"*) ;; 5588e35772b2Smrg ::) dllsearchpath=$dir;; 558974c14cd6Smrg *) func_append dllsearchpath ":$dir";; 5590e35772b2Smrg esac 5591e35772b2Smrg case :$dllsearchpath: in 5592e35772b2Smrg *":$testbindir:"*) ;; 5593e35772b2Smrg ::) dllsearchpath=$testbindir;; 559474c14cd6Smrg *) func_append dllsearchpath ":$testbindir";; 5595e35772b2Smrg esac 5596e35772b2Smrg ;; 5597e35772b2Smrg esac 5598e35772b2Smrg continue 5599e35772b2Smrg ;; 560072b676d7Smrg 5601e35772b2Smrg -l*) 5602e35772b2Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603e35772b2Smrg case $host in 560474c14cd6Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605e35772b2Smrg # These systems don't actually have a C or math library (as such) 5606e35772b2Smrg continue 5607e35772b2Smrg ;; 5608e35772b2Smrg *-*-os2*) 5609e35772b2Smrg # These systems don't actually have a C library (as such) 5610e35772b2Smrg test "X$arg" = "X-lc" && continue 5611e35772b2Smrg ;; 5612e35772b2Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613e35772b2Smrg # Do not include libc due to us having libc/libc_r. 5614e35772b2Smrg test "X$arg" = "X-lc" && continue 5615e35772b2Smrg ;; 5616e35772b2Smrg *-*-rhapsody* | *-*-darwin1.[012]) 5617e35772b2Smrg # Rhapsody C and math libraries are in the System framework 561874c14cd6Smrg func_append deplibs " System.ltframework" 5619e35772b2Smrg continue 5620e35772b2Smrg ;; 5621e35772b2Smrg *-*-sco3.2v5* | *-*-sco5v6*) 5622e35772b2Smrg # Causes problems with __ctype 5623e35772b2Smrg test "X$arg" = "X-lc" && continue 5624e35772b2Smrg ;; 5625e35772b2Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626e35772b2Smrg # Compiler inserts libc in the correct place for threads to work 5627e35772b2Smrg test "X$arg" = "X-lc" && continue 5628e35772b2Smrg ;; 5629e35772b2Smrg esac 5630e35772b2Smrg elif test "X$arg" = "X-lc_r"; then 5631e35772b2Smrg case $host in 5632e35772b2Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633e35772b2Smrg # Do not include libc_r directly, use -pthread flag. 5634e35772b2Smrg continue 5635e35772b2Smrg ;; 5636e35772b2Smrg esac 5637e35772b2Smrg fi 563874c14cd6Smrg func_append deplibs " $arg" 5639e35772b2Smrg continue 5640e35772b2Smrg ;; 564172b676d7Smrg 5642e35772b2Smrg -module) 5643e35772b2Smrg module=yes 5644e35772b2Smrg continue 5645e35772b2Smrg ;; 564672b676d7Smrg 5647e35772b2Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648e35772b2Smrg # classes, name mangling, and exception handling. 5649e35772b2Smrg # Darwin uses the -arch flag to determine output architecture. 565074c14cd6Smrg -model|-arch|-isysroot|--sysroot) 565174c14cd6Smrg func_append compiler_flags " $arg" 5652e35772b2Smrg func_append compile_command " $arg" 5653e35772b2Smrg func_append finalize_command " $arg" 5654e35772b2Smrg prev=xcompiler 5655e35772b2Smrg continue 5656e35772b2Smrg ;; 565772b676d7Smrg 565874c14cd6Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 565974c14cd6Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 566074c14cd6Smrg func_append compiler_flags " $arg" 5661e35772b2Smrg func_append compile_command " $arg" 5662e35772b2Smrg func_append finalize_command " $arg" 5663e35772b2Smrg case "$new_inherited_linker_flags " in 5664e35772b2Smrg *" $arg "*) ;; 566574c14cd6Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666e35772b2Smrg esac 5667e35772b2Smrg continue 5668e35772b2Smrg ;; 566972b676d7Smrg 5670e35772b2Smrg -multi_module) 5671e35772b2Smrg single_module="${wl}-multi_module" 5672e35772b2Smrg continue 5673e35772b2Smrg ;; 567472b676d7Smrg 5675e35772b2Smrg -no-fast-install) 5676e35772b2Smrg fast_install=no 5677e35772b2Smrg continue 5678e35772b2Smrg ;; 567972b676d7Smrg 5680e35772b2Smrg -no-install) 5681e35772b2Smrg case $host in 5682e35772b2Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683e35772b2Smrg # The PATH hackery in wrapper scripts is required on Windows 5684e35772b2Smrg # and Darwin in order for the loader to find any dlls it needs. 5685e35772b2Smrg func_warning "\`-no-install' is ignored for $host" 5686e35772b2Smrg func_warning "assuming \`-no-fast-install' instead" 5687e35772b2Smrg fast_install=no 5688e35772b2Smrg ;; 5689e35772b2Smrg *) no_install=yes ;; 5690e35772b2Smrg esac 5691e35772b2Smrg continue 5692e35772b2Smrg ;; 569372b676d7Smrg 5694e35772b2Smrg -no-undefined) 5695e35772b2Smrg allow_undefined=no 5696e35772b2Smrg continue 5697e35772b2Smrg ;; 569872b676d7Smrg 5699e35772b2Smrg -objectlist) 5700e35772b2Smrg prev=objectlist 5701e35772b2Smrg continue 5702e35772b2Smrg ;; 570372b676d7Smrg 5704e35772b2Smrg -o) prev=output ;; 570572b676d7Smrg 5706e35772b2Smrg -precious-files-regex) 5707e35772b2Smrg prev=precious_regex 5708e35772b2Smrg continue 5709e35772b2Smrg ;; 571072b676d7Smrg 5711e35772b2Smrg -release) 5712e35772b2Smrg prev=release 5713e35772b2Smrg continue 5714e35772b2Smrg ;; 571572b676d7Smrg 5716e35772b2Smrg -rpath) 5717e35772b2Smrg prev=rpath 5718e35772b2Smrg continue 5719e35772b2Smrg ;; 572072b676d7Smrg 5721e35772b2Smrg -R) 5722e35772b2Smrg prev=xrpath 5723e35772b2Smrg continue 5724e35772b2Smrg ;; 572572b676d7Smrg 5726e35772b2Smrg -R*) 5727e35772b2Smrg func_stripname '-R' '' "$arg" 5728e35772b2Smrg dir=$func_stripname_result 5729e35772b2Smrg # We need an absolute path. 5730e35772b2Smrg case $dir in 5731e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 573274c14cd6Smrg =*) 573374c14cd6Smrg func_stripname '=' '' "$dir" 573474c14cd6Smrg dir=$lt_sysroot$func_stripname_result 573574c14cd6Smrg ;; 5736e35772b2Smrg *) 5737e35772b2Smrg func_fatal_error "only absolute run-paths are allowed" 5738e35772b2Smrg ;; 5739e35772b2Smrg esac 5740e35772b2Smrg case "$xrpath " in 5741e35772b2Smrg *" $dir "*) ;; 574274c14cd6Smrg *) func_append xrpath " $dir" ;; 5743e35772b2Smrg esac 5744e35772b2Smrg continue 5745e35772b2Smrg ;; 574672b676d7Smrg 5747e35772b2Smrg -shared) 5748e35772b2Smrg # The effects of -shared are defined in a previous loop. 5749e35772b2Smrg continue 5750e35772b2Smrg ;; 575172b676d7Smrg 5752e35772b2Smrg -shrext) 5753e35772b2Smrg prev=shrext 5754e35772b2Smrg continue 5755e35772b2Smrg ;; 575672b676d7Smrg 5757e35772b2Smrg -static | -static-libtool-libs) 5758e35772b2Smrg # The effects of -static are defined in a previous loop. 5759e35772b2Smrg # We used to do the same as -all-static on platforms that 5760e35772b2Smrg # didn't have a PIC flag, but the assumption that the effects 5761e35772b2Smrg # would be equivalent was wrong. It would break on at least 5762e35772b2Smrg # Digital Unix and AIX. 5763e35772b2Smrg continue 5764e35772b2Smrg ;; 576572b676d7Smrg 5766e35772b2Smrg -thread-safe) 5767e35772b2Smrg thread_safe=yes 5768e35772b2Smrg continue 5769e35772b2Smrg ;; 577072b676d7Smrg 5771e35772b2Smrg -version-info) 5772e35772b2Smrg prev=vinfo 5773e35772b2Smrg continue 5774e35772b2Smrg ;; 577572b676d7Smrg 5776e35772b2Smrg -version-number) 5777e35772b2Smrg prev=vinfo 5778e35772b2Smrg vinfo_number=yes 5779e35772b2Smrg continue 5780e35772b2Smrg ;; 578172b676d7Smrg 5782e35772b2Smrg -weak) 5783e35772b2Smrg prev=weak 5784e35772b2Smrg continue 5785e35772b2Smrg ;; 578672b676d7Smrg 5787e35772b2Smrg -Wc,*) 5788e35772b2Smrg func_stripname '-Wc,' '' "$arg" 5789e35772b2Smrg args=$func_stripname_result 5790e35772b2Smrg arg= 5791e35772b2Smrg save_ifs="$IFS"; IFS=',' 5792e35772b2Smrg for flag in $args; do 5793e35772b2Smrg IFS="$save_ifs" 5794e35772b2Smrg func_quote_for_eval "$flag" 579574c14cd6Smrg func_append arg " $func_quote_for_eval_result" 579674c14cd6Smrg func_append compiler_flags " $func_quote_for_eval_result" 5797e35772b2Smrg done 5798e35772b2Smrg IFS="$save_ifs" 5799e35772b2Smrg func_stripname ' ' '' "$arg" 5800e35772b2Smrg arg=$func_stripname_result 5801e35772b2Smrg ;; 580272b676d7Smrg 5803e35772b2Smrg -Wl,*) 5804e35772b2Smrg func_stripname '-Wl,' '' "$arg" 5805e35772b2Smrg args=$func_stripname_result 5806e35772b2Smrg arg= 5807e35772b2Smrg save_ifs="$IFS"; IFS=',' 5808e35772b2Smrg for flag in $args; do 5809e35772b2Smrg IFS="$save_ifs" 5810e35772b2Smrg func_quote_for_eval "$flag" 581174c14cd6Smrg func_append arg " $wl$func_quote_for_eval_result" 581274c14cd6Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 581374c14cd6Smrg func_append linker_flags " $func_quote_for_eval_result" 5814e35772b2Smrg done 5815e35772b2Smrg IFS="$save_ifs" 5816e35772b2Smrg func_stripname ' ' '' "$arg" 5817e35772b2Smrg arg=$func_stripname_result 5818e35772b2Smrg ;; 581972b676d7Smrg 5820e35772b2Smrg -Xcompiler) 5821e35772b2Smrg prev=xcompiler 5822e35772b2Smrg continue 5823e35772b2Smrg ;; 582472b676d7Smrg 5825e35772b2Smrg -Xlinker) 5826e35772b2Smrg prev=xlinker 5827e35772b2Smrg continue 5828e35772b2Smrg ;; 582972b676d7Smrg 5830e35772b2Smrg -XCClinker) 5831e35772b2Smrg prev=xcclinker 5832e35772b2Smrg continue 5833e35772b2Smrg ;; 583472b676d7Smrg 5835e35772b2Smrg # -msg_* for osf cc 5836e35772b2Smrg -msg_*) 5837e35772b2Smrg func_quote_for_eval "$arg" 5838e35772b2Smrg arg="$func_quote_for_eval_result" 5839e35772b2Smrg ;; 584072b676d7Smrg 584174c14cd6Smrg # Flags to be passed through unchanged, with rationale: 584274c14cd6Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 584374c14cd6Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 584474c14cd6Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 584574c14cd6Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 584674c14cd6Smrg # -q* compiler args for the IBM compiler 584774c14cd6Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 584874c14cd6Smrg # -F/path path to uninstalled frameworks, gcc on darwin 584974c14cd6Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 585074c14cd6Smrg # @file GCC response files 585174c14cd6Smrg # -tp=* Portland pgcc target processor selection 585274c14cd6Smrg # --sysroot=* for sysroot support 585374c14cd6Smrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854e35772b2Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 585574c14cd6Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 585674c14cd6Smrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857e35772b2Smrg func_quote_for_eval "$arg" 5858e35772b2Smrg arg="$func_quote_for_eval_result" 5859e35772b2Smrg func_append compile_command " $arg" 5860e35772b2Smrg func_append finalize_command " $arg" 586174c14cd6Smrg func_append compiler_flags " $arg" 5862e35772b2Smrg continue 5863e35772b2Smrg ;; 586472b676d7Smrg 5865e35772b2Smrg # Some other compiler flag. 5866e35772b2Smrg -* | +*) 5867e35772b2Smrg func_quote_for_eval "$arg" 5868e35772b2Smrg arg="$func_quote_for_eval_result" 5869e35772b2Smrg ;; 587072b676d7Smrg 5871e35772b2Smrg *.$objext) 5872e35772b2Smrg # A standard object. 587374c14cd6Smrg func_append objs " $arg" 5874e35772b2Smrg ;; 587572b676d7Smrg 5876e35772b2Smrg *.lo) 5877e35772b2Smrg # A libtool-controlled object. 587872b676d7Smrg 5879e35772b2Smrg # Check to see that this really is a libtool object. 5880e35772b2Smrg if func_lalib_unsafe_p "$arg"; then 5881e35772b2Smrg pic_object= 5882e35772b2Smrg non_pic_object= 588372b676d7Smrg 5884e35772b2Smrg # Read the .lo file 5885e35772b2Smrg func_source "$arg" 588672b676d7Smrg 5887e35772b2Smrg if test -z "$pic_object" || 5888e35772b2Smrg test -z "$non_pic_object" || 5889e35772b2Smrg test "$pic_object" = none && 5890e35772b2Smrg test "$non_pic_object" = none; then 5891e35772b2Smrg func_fatal_error "cannot find name of object for \`$arg'" 5892e35772b2Smrg fi 589372b676d7Smrg 5894e35772b2Smrg # Extract subdirectory from the argument. 5895e35772b2Smrg func_dirname "$arg" "/" "" 5896e35772b2Smrg xdir="$func_dirname_result" 58971fd23544Smrg 5898e35772b2Smrg if test "$pic_object" != none; then 5899e35772b2Smrg # Prepend the subdirectory the object is found in. 5900e35772b2Smrg pic_object="$xdir$pic_object" 590172b676d7Smrg 5902e35772b2Smrg if test "$prev" = dlfiles; then 5903e35772b2Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 590474c14cd6Smrg func_append dlfiles " $pic_object" 5905e35772b2Smrg prev= 5906e35772b2Smrg continue 5907e35772b2Smrg else 5908e35772b2Smrg # If libtool objects are unsupported, then we need to preload. 5909e35772b2Smrg prev=dlprefiles 5910e35772b2Smrg fi 5911e35772b2Smrg fi 591272b676d7Smrg 5913e35772b2Smrg # CHECK ME: I think I busted this. -Ossama 5914e35772b2Smrg if test "$prev" = dlprefiles; then 5915e35772b2Smrg # Preload the old-style object. 591674c14cd6Smrg func_append dlprefiles " $pic_object" 5917e35772b2Smrg prev= 5918e35772b2Smrg fi 591972b676d7Smrg 5920e35772b2Smrg # A PIC object. 5921e35772b2Smrg func_append libobjs " $pic_object" 5922e35772b2Smrg arg="$pic_object" 5923e35772b2Smrg fi 592472b676d7Smrg 5925e35772b2Smrg # Non-PIC object. 5926e35772b2Smrg if test "$non_pic_object" != none; then 5927e35772b2Smrg # Prepend the subdirectory the object is found in. 5928e35772b2Smrg non_pic_object="$xdir$non_pic_object" 592972b676d7Smrg 5930e35772b2Smrg # A standard non-PIC object 5931e35772b2Smrg func_append non_pic_objects " $non_pic_object" 5932e35772b2Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5933e35772b2Smrg arg="$non_pic_object" 5934e35772b2Smrg fi 5935e35772b2Smrg else 5936e35772b2Smrg # If the PIC object exists, use it instead. 5937e35772b2Smrg # $xdir was prepended to $pic_object above. 5938e35772b2Smrg non_pic_object="$pic_object" 5939e35772b2Smrg func_append non_pic_objects " $non_pic_object" 5940e35772b2Smrg fi 5941e35772b2Smrg else 5942e35772b2Smrg # Only an error if not doing a dry-run. 5943e35772b2Smrg if $opt_dry_run; then 5944e35772b2Smrg # Extract subdirectory from the argument. 5945e35772b2Smrg func_dirname "$arg" "/" "" 5946e35772b2Smrg xdir="$func_dirname_result" 5947e35772b2Smrg 5948e35772b2Smrg func_lo2o "$arg" 5949e35772b2Smrg pic_object=$xdir$objdir/$func_lo2o_result 5950e35772b2Smrg non_pic_object=$xdir$func_lo2o_result 5951e35772b2Smrg func_append libobjs " $pic_object" 5952e35772b2Smrg func_append non_pic_objects " $non_pic_object" 5953e35772b2Smrg else 5954e35772b2Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5955e35772b2Smrg fi 5956e35772b2Smrg fi 5957e35772b2Smrg ;; 595872b676d7Smrg 5959e35772b2Smrg *.$libext) 5960e35772b2Smrg # An archive. 596174c14cd6Smrg func_append deplibs " $arg" 596274c14cd6Smrg func_append old_deplibs " $arg" 5963e35772b2Smrg continue 5964e35772b2Smrg ;; 5965e35772b2Smrg 5966e35772b2Smrg *.la) 5967e35772b2Smrg # A libtool-controlled library. 5968e35772b2Smrg 596974c14cd6Smrg func_resolve_sysroot "$arg" 5970e35772b2Smrg if test "$prev" = dlfiles; then 5971e35772b2Smrg # This library was specified with -dlopen. 597274c14cd6Smrg func_append dlfiles " $func_resolve_sysroot_result" 5973e35772b2Smrg prev= 5974e35772b2Smrg elif test "$prev" = dlprefiles; then 5975e35772b2Smrg # The library was specified with -dlpreopen. 597674c14cd6Smrg func_append dlprefiles " $func_resolve_sysroot_result" 5977e35772b2Smrg prev= 5978e35772b2Smrg else 597974c14cd6Smrg func_append deplibs " $func_resolve_sysroot_result" 5980e35772b2Smrg fi 5981e35772b2Smrg continue 5982e35772b2Smrg ;; 5983e35772b2Smrg 5984e35772b2Smrg # Some other compiler argument. 5985e35772b2Smrg *) 5986e35772b2Smrg # Unknown arguments in both finalize_command and compile_command need 5987e35772b2Smrg # to be aesthetically quoted because they are evaled later. 5988e35772b2Smrg func_quote_for_eval "$arg" 5989e35772b2Smrg arg="$func_quote_for_eval_result" 5990e35772b2Smrg ;; 5991e35772b2Smrg esac # arg 5992e35772b2Smrg 5993e35772b2Smrg # Now actually substitute the argument into the commands. 5994e35772b2Smrg if test -n "$arg"; then 5995e35772b2Smrg func_append compile_command " $arg" 5996e35772b2Smrg func_append finalize_command " $arg" 5997e35772b2Smrg fi 5998e35772b2Smrg done # argument parsing loop 5999e35772b2Smrg 6000e35772b2Smrg test -n "$prev" && \ 6001e35772b2Smrg func_fatal_help "the \`$prevarg' option requires an argument" 6002e35772b2Smrg 6003e35772b2Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004e35772b2Smrg eval arg=\"$export_dynamic_flag_spec\" 6005e35772b2Smrg func_append compile_command " $arg" 6006e35772b2Smrg func_append finalize_command " $arg" 6007e35772b2Smrg fi 6008e35772b2Smrg 6009e35772b2Smrg oldlibs= 6010e35772b2Smrg # calculate the name of the file, without its directory 6011e35772b2Smrg func_basename "$output" 6012e35772b2Smrg outputname="$func_basename_result" 6013e35772b2Smrg libobjs_save="$libobjs" 6014e35772b2Smrg 6015e35772b2Smrg if test -n "$shlibpath_var"; then 6016e35772b2Smrg # get the directories listed in $shlibpath_var 601774c14cd6Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018e35772b2Smrg else 6019e35772b2Smrg shlib_search_path= 6020e35772b2Smrg fi 6021e35772b2Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022e35772b2Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023e35772b2Smrg 6024e35772b2Smrg func_dirname "$output" "/" "" 6025e35772b2Smrg output_objdir="$func_dirname_result$objdir" 602674c14cd6Smrg func_to_tool_file "$output_objdir/" 602774c14cd6Smrg tool_output_objdir=$func_to_tool_file_result 6028e35772b2Smrg # Create the object directory. 6029e35772b2Smrg func_mkdir_p "$output_objdir" 6030e35772b2Smrg 6031e35772b2Smrg # Determine the type of output 6032e35772b2Smrg case $output in 6033e35772b2Smrg "") 6034e35772b2Smrg func_fatal_help "you must specify an output file" 6035e35772b2Smrg ;; 6036e35772b2Smrg *.$libext) linkmode=oldlib ;; 6037e35772b2Smrg *.lo | *.$objext) linkmode=obj ;; 6038e35772b2Smrg *.la) linkmode=lib ;; 6039e35772b2Smrg *) linkmode=prog ;; # Anything else should be a program. 6040e35772b2Smrg esac 6041e35772b2Smrg 6042e35772b2Smrg specialdeplibs= 6043e35772b2Smrg 6044e35772b2Smrg libs= 6045e35772b2Smrg # Find all interdependent deplibs by searching for libraries 6046e35772b2Smrg # that are linked more than once (e.g. -la -lb -la) 6047e35772b2Smrg for deplib in $deplibs; do 604874c14cd6Smrg if $opt_preserve_dup_deps ; then 6049e35772b2Smrg case "$libs " in 605074c14cd6Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051e35772b2Smrg esac 6052e35772b2Smrg fi 605374c14cd6Smrg func_append libs " $deplib" 6054e35772b2Smrg done 6055e35772b2Smrg 6056e35772b2Smrg if test "$linkmode" = lib; then 6057e35772b2Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058e35772b2Smrg 6059e35772b2Smrg # Compute libraries that are listed more than once in $predeps 6060e35772b2Smrg # $postdeps and mark them as special (i.e., whose duplicates are 6061e35772b2Smrg # not to be eliminated). 6062e35772b2Smrg pre_post_deps= 6063e35772b2Smrg if $opt_duplicate_compiler_generated_deps; then 6064e35772b2Smrg for pre_post_dep in $predeps $postdeps; do 6065e35772b2Smrg case "$pre_post_deps " in 606674c14cd6Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067e35772b2Smrg esac 606874c14cd6Smrg func_append pre_post_deps " $pre_post_dep" 6069e35772b2Smrg done 6070e35772b2Smrg fi 6071e35772b2Smrg pre_post_deps= 6072e35772b2Smrg fi 6073e35772b2Smrg 6074e35772b2Smrg deplibs= 6075e35772b2Smrg newdependency_libs= 6076e35772b2Smrg newlib_search_path= 6077e35772b2Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078e35772b2Smrg notinst_deplibs= # not-installed libtool libraries 6079e35772b2Smrg notinst_path= # paths that contain not-installed libtool libraries 6080e35772b2Smrg 6081e35772b2Smrg case $linkmode in 6082e35772b2Smrg lib) 6083e35772b2Smrg passes="conv dlpreopen link" 6084e35772b2Smrg for file in $dlfiles $dlprefiles; do 6085e35772b2Smrg case $file in 6086e35772b2Smrg *.la) ;; 6087e35772b2Smrg *) 6088e35772b2Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089e35772b2Smrg ;; 6090e35772b2Smrg esac 6091e35772b2Smrg done 6092e35772b2Smrg ;; 6093e35772b2Smrg prog) 6094e35772b2Smrg compile_deplibs= 6095e35772b2Smrg finalize_deplibs= 6096e35772b2Smrg alldeplibs=no 6097e35772b2Smrg newdlfiles= 6098e35772b2Smrg newdlprefiles= 6099e35772b2Smrg passes="conv scan dlopen dlpreopen link" 6100e35772b2Smrg ;; 6101e35772b2Smrg *) passes="conv" 6102e35772b2Smrg ;; 6103e35772b2Smrg esac 6104e35772b2Smrg 6105e35772b2Smrg for pass in $passes; do 6106e35772b2Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107e35772b2Smrg # so that -L comes before libs that need it for instance... 6108e35772b2Smrg if test "$linkmode,$pass" = "lib,link"; then 6109e35772b2Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110e35772b2Smrg ## order, and fix it there properly 6111e35772b2Smrg tmp_deplibs= 6112e35772b2Smrg for deplib in $deplibs; do 6113e35772b2Smrg tmp_deplibs="$deplib $tmp_deplibs" 6114e35772b2Smrg done 6115e35772b2Smrg deplibs="$tmp_deplibs" 6116e35772b2Smrg fi 6117e35772b2Smrg 6118e35772b2Smrg if test "$linkmode,$pass" = "lib,link" || 6119e35772b2Smrg test "$linkmode,$pass" = "prog,scan"; then 6120e35772b2Smrg libs="$deplibs" 6121e35772b2Smrg deplibs= 6122e35772b2Smrg fi 6123e35772b2Smrg if test "$linkmode" = prog; then 6124e35772b2Smrg case $pass in 6125e35772b2Smrg dlopen) libs="$dlfiles" ;; 6126e35772b2Smrg dlpreopen) libs="$dlprefiles" ;; 6127e35772b2Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128e35772b2Smrg esac 6129e35772b2Smrg fi 6130e35772b2Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131e35772b2Smrg # Collect and forward deplibs of preopened libtool libs 6132e35772b2Smrg for lib in $dlprefiles; do 6133e35772b2Smrg # Ignore non-libtool-libs 6134e35772b2Smrg dependency_libs= 613574c14cd6Smrg func_resolve_sysroot "$lib" 6136e35772b2Smrg case $lib in 613774c14cd6Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 6138e35772b2Smrg esac 6139e35772b2Smrg 6140e35772b2Smrg # Collect preopened libtool deplibs, except any this library 6141e35772b2Smrg # has declared as weak libs 6142e35772b2Smrg for deplib in $dependency_libs; do 614374c14cd6Smrg func_basename "$deplib" 614474c14cd6Smrg deplib_base=$func_basename_result 6145e35772b2Smrg case " $weak_libs " in 6146e35772b2Smrg *" $deplib_base "*) ;; 614774c14cd6Smrg *) func_append deplibs " $deplib" ;; 6148e35772b2Smrg esac 6149e35772b2Smrg done 6150e35772b2Smrg done 6151e35772b2Smrg libs="$dlprefiles" 6152e35772b2Smrg fi 6153e35772b2Smrg if test "$pass" = dlopen; then 6154e35772b2Smrg # Collect dlpreopened libraries 6155e35772b2Smrg save_deplibs="$deplibs" 6156e35772b2Smrg deplibs= 6157e35772b2Smrg fi 6158e35772b2Smrg 6159e35772b2Smrg for deplib in $libs; do 6160e35772b2Smrg lib= 6161e35772b2Smrg found=no 6162e35772b2Smrg case $deplib in 616374c14cd6Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 616474c14cd6Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165e35772b2Smrg if test "$linkmode,$pass" = "prog,link"; then 6166e35772b2Smrg compile_deplibs="$deplib $compile_deplibs" 6167e35772b2Smrg finalize_deplibs="$deplib $finalize_deplibs" 6168e35772b2Smrg else 616974c14cd6Smrg func_append compiler_flags " $deplib" 6170e35772b2Smrg if test "$linkmode" = lib ; then 6171e35772b2Smrg case "$new_inherited_linker_flags " in 6172e35772b2Smrg *" $deplib "*) ;; 617374c14cd6Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6174e35772b2Smrg esac 6175e35772b2Smrg fi 6176e35772b2Smrg fi 6177e35772b2Smrg continue 6178e35772b2Smrg ;; 6179e35772b2Smrg -l*) 6180e35772b2Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 6181e35772b2Smrg func_warning "\`-l' is ignored for archives/objects" 6182e35772b2Smrg continue 6183e35772b2Smrg fi 6184e35772b2Smrg func_stripname '-l' '' "$deplib" 6185e35772b2Smrg name=$func_stripname_result 6186e35772b2Smrg if test "$linkmode" = lib; then 6187e35772b2Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188e35772b2Smrg else 6189e35772b2Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190e35772b2Smrg fi 6191e35772b2Smrg for searchdir in $searchdirs; do 6192e35772b2Smrg for search_ext in .la $std_shrext .so .a; do 6193e35772b2Smrg # Search the libtool library 6194e35772b2Smrg lib="$searchdir/lib${name}${search_ext}" 6195e35772b2Smrg if test -f "$lib"; then 6196e35772b2Smrg if test "$search_ext" = ".la"; then 6197e35772b2Smrg found=yes 6198e35772b2Smrg else 6199e35772b2Smrg found=no 6200e35772b2Smrg fi 6201e35772b2Smrg break 2 6202e35772b2Smrg fi 6203e35772b2Smrg done 6204e35772b2Smrg done 6205e35772b2Smrg if test "$found" != yes; then 6206e35772b2Smrg # deplib doesn't seem to be a libtool library 6207e35772b2Smrg if test "$linkmode,$pass" = "prog,link"; then 6208e35772b2Smrg compile_deplibs="$deplib $compile_deplibs" 6209e35772b2Smrg finalize_deplibs="$deplib $finalize_deplibs" 6210e35772b2Smrg else 6211e35772b2Smrg deplibs="$deplib $deplibs" 6212e35772b2Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213e35772b2Smrg fi 6214e35772b2Smrg continue 6215e35772b2Smrg else # deplib is a libtool library 6216e35772b2Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217e35772b2Smrg # We need to do some special things here, and not later. 6218e35772b2Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219e35772b2Smrg case " $predeps $postdeps " in 6220e35772b2Smrg *" $deplib "*) 6221e35772b2Smrg if func_lalib_p "$lib"; then 6222e35772b2Smrg library_names= 6223e35772b2Smrg old_library= 6224e35772b2Smrg func_source "$lib" 6225e35772b2Smrg for l in $old_library $library_names; do 6226e35772b2Smrg ll="$l" 6227e35772b2Smrg done 6228e35772b2Smrg if test "X$ll" = "X$old_library" ; then # only static version available 6229e35772b2Smrg found=no 6230e35772b2Smrg func_dirname "$lib" "" "." 6231e35772b2Smrg ladir="$func_dirname_result" 6232e35772b2Smrg lib=$ladir/$old_library 6233e35772b2Smrg if test "$linkmode,$pass" = "prog,link"; then 6234e35772b2Smrg compile_deplibs="$deplib $compile_deplibs" 6235e35772b2Smrg finalize_deplibs="$deplib $finalize_deplibs" 6236e35772b2Smrg else 6237e35772b2Smrg deplibs="$deplib $deplibs" 6238e35772b2Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239e35772b2Smrg fi 6240e35772b2Smrg continue 6241e35772b2Smrg fi 6242e35772b2Smrg fi 6243e35772b2Smrg ;; 6244e35772b2Smrg *) ;; 6245e35772b2Smrg esac 6246e35772b2Smrg fi 6247e35772b2Smrg fi 6248e35772b2Smrg ;; # -l 6249e35772b2Smrg *.ltframework) 6250e35772b2Smrg if test "$linkmode,$pass" = "prog,link"; then 6251e35772b2Smrg compile_deplibs="$deplib $compile_deplibs" 6252e35772b2Smrg finalize_deplibs="$deplib $finalize_deplibs" 6253e35772b2Smrg else 6254e35772b2Smrg deplibs="$deplib $deplibs" 6255e35772b2Smrg if test "$linkmode" = lib ; then 6256e35772b2Smrg case "$new_inherited_linker_flags " in 6257e35772b2Smrg *" $deplib "*) ;; 625874c14cd6Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6259e35772b2Smrg esac 6260e35772b2Smrg fi 6261e35772b2Smrg fi 6262e35772b2Smrg continue 6263e35772b2Smrg ;; 6264e35772b2Smrg -L*) 6265e35772b2Smrg case $linkmode in 6266e35772b2Smrg lib) 6267e35772b2Smrg deplibs="$deplib $deplibs" 6268e35772b2Smrg test "$pass" = conv && continue 6269e35772b2Smrg newdependency_libs="$deplib $newdependency_libs" 6270e35772b2Smrg func_stripname '-L' '' "$deplib" 627174c14cd6Smrg func_resolve_sysroot "$func_stripname_result" 627274c14cd6Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6273e35772b2Smrg ;; 6274e35772b2Smrg prog) 6275e35772b2Smrg if test "$pass" = conv; then 6276e35772b2Smrg deplibs="$deplib $deplibs" 6277e35772b2Smrg continue 6278e35772b2Smrg fi 6279e35772b2Smrg if test "$pass" = scan; then 6280e35772b2Smrg deplibs="$deplib $deplibs" 6281e35772b2Smrg else 6282e35772b2Smrg compile_deplibs="$deplib $compile_deplibs" 6283e35772b2Smrg finalize_deplibs="$deplib $finalize_deplibs" 6284e35772b2Smrg fi 6285e35772b2Smrg func_stripname '-L' '' "$deplib" 628674c14cd6Smrg func_resolve_sysroot "$func_stripname_result" 628774c14cd6Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6288e35772b2Smrg ;; 6289e35772b2Smrg *) 6290e35772b2Smrg func_warning "\`-L' is ignored for archives/objects" 6291e35772b2Smrg ;; 6292e35772b2Smrg esac # linkmode 6293e35772b2Smrg continue 6294e35772b2Smrg ;; # -L 6295e35772b2Smrg -R*) 6296e35772b2Smrg if test "$pass" = link; then 6297e35772b2Smrg func_stripname '-R' '' "$deplib" 629874c14cd6Smrg func_resolve_sysroot "$func_stripname_result" 629974c14cd6Smrg dir=$func_resolve_sysroot_result 6300e35772b2Smrg # Make sure the xrpath contains only unique directories. 6301e35772b2Smrg case "$xrpath " in 6302e35772b2Smrg *" $dir "*) ;; 630374c14cd6Smrg *) func_append xrpath " $dir" ;; 6304e35772b2Smrg esac 6305e35772b2Smrg fi 6306e35772b2Smrg deplibs="$deplib $deplibs" 6307e35772b2Smrg continue 6308e35772b2Smrg ;; 630974c14cd6Smrg *.la) 631074c14cd6Smrg func_resolve_sysroot "$deplib" 631174c14cd6Smrg lib=$func_resolve_sysroot_result 631274c14cd6Smrg ;; 6313e35772b2Smrg *.$libext) 6314e35772b2Smrg if test "$pass" = conv; then 6315e35772b2Smrg deplibs="$deplib $deplibs" 6316e35772b2Smrg continue 6317e35772b2Smrg fi 6318e35772b2Smrg case $linkmode in 6319e35772b2Smrg lib) 6320e35772b2Smrg # Linking convenience modules into shared libraries is allowed, 6321e35772b2Smrg # but linking other static libraries is non-portable. 6322e35772b2Smrg case " $dlpreconveniencelibs " in 6323e35772b2Smrg *" $deplib "*) ;; 6324e35772b2Smrg *) 6325e35772b2Smrg valid_a_lib=no 6326e35772b2Smrg case $deplibs_check_method in 6327e35772b2Smrg match_pattern*) 6328e35772b2Smrg set dummy $deplibs_check_method; shift 6329e35772b2Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 633074c14cd6Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331e35772b2Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 6332e35772b2Smrg valid_a_lib=yes 6333e35772b2Smrg fi 6334e35772b2Smrg ;; 6335e35772b2Smrg pass_all) 6336e35772b2Smrg valid_a_lib=yes 6337e35772b2Smrg ;; 6338e35772b2Smrg esac 6339e35772b2Smrg if test "$valid_a_lib" != yes; then 634074c14cd6Smrg echo 6341e35772b2Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 634274c14cd6Smrg echo "*** I have the capability to make that library automatically link in when" 634374c14cd6Smrg echo "*** you link to this library. But I can only do this if you have a" 634474c14cd6Smrg echo "*** shared version of the library, which you do not appear to have" 634574c14cd6Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 634674c14cd6Smrg echo "*** that it is just a static archive that I should not use here." 6347e35772b2Smrg else 634874c14cd6Smrg echo 6349e35772b2Smrg $ECHO "*** Warning: Linking the shared library $output against the" 6350e35772b2Smrg $ECHO "*** static library $deplib is not portable!" 6351e35772b2Smrg deplibs="$deplib $deplibs" 6352e35772b2Smrg fi 6353e35772b2Smrg ;; 6354e35772b2Smrg esac 6355e35772b2Smrg continue 6356e35772b2Smrg ;; 6357e35772b2Smrg prog) 6358e35772b2Smrg if test "$pass" != link; then 6359e35772b2Smrg deplibs="$deplib $deplibs" 6360e35772b2Smrg else 6361e35772b2Smrg compile_deplibs="$deplib $compile_deplibs" 6362e35772b2Smrg finalize_deplibs="$deplib $finalize_deplibs" 6363e35772b2Smrg fi 6364e35772b2Smrg continue 6365e35772b2Smrg ;; 6366e35772b2Smrg esac # linkmode 6367e35772b2Smrg ;; # *.$libext 6368e35772b2Smrg *.lo | *.$objext) 6369e35772b2Smrg if test "$pass" = conv; then 6370e35772b2Smrg deplibs="$deplib $deplibs" 6371e35772b2Smrg elif test "$linkmode" = prog; then 6372e35772b2Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373e35772b2Smrg # If there is no dlopen support or we're linking statically, 6374e35772b2Smrg # we need to preload. 637574c14cd6Smrg func_append newdlprefiles " $deplib" 6376e35772b2Smrg compile_deplibs="$deplib $compile_deplibs" 6377e35772b2Smrg finalize_deplibs="$deplib $finalize_deplibs" 6378e35772b2Smrg else 637974c14cd6Smrg func_append newdlfiles " $deplib" 6380e35772b2Smrg fi 6381e35772b2Smrg fi 6382e35772b2Smrg continue 6383e35772b2Smrg ;; 6384e35772b2Smrg %DEPLIBS%) 6385e35772b2Smrg alldeplibs=yes 6386e35772b2Smrg continue 6387e35772b2Smrg ;; 6388e35772b2Smrg esac # case $deplib 6389e35772b2Smrg 6390e35772b2Smrg if test "$found" = yes || test -f "$lib"; then : 6391e35772b2Smrg else 6392e35772b2Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393e35772b2Smrg fi 6394e35772b2Smrg 6395e35772b2Smrg # Check to see that this really is a libtool archive. 6396e35772b2Smrg func_lalib_unsafe_p "$lib" \ 6397e35772b2Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6398e35772b2Smrg 6399e35772b2Smrg func_dirname "$lib" "" "." 6400e35772b2Smrg ladir="$func_dirname_result" 6401e35772b2Smrg 6402e35772b2Smrg dlname= 6403e35772b2Smrg dlopen= 6404e35772b2Smrg dlpreopen= 6405e35772b2Smrg libdir= 6406e35772b2Smrg library_names= 6407e35772b2Smrg old_library= 6408e35772b2Smrg inherited_linker_flags= 6409e35772b2Smrg # If the library was installed with an old release of libtool, 6410e35772b2Smrg # it will not redefine variables installed, or shouldnotlink 6411e35772b2Smrg installed=yes 6412e35772b2Smrg shouldnotlink=no 6413e35772b2Smrg avoidtemprpath= 6414e35772b2Smrg 6415e35772b2Smrg 6416e35772b2Smrg # Read the .la file 6417e35772b2Smrg func_source "$lib" 6418e35772b2Smrg 6419e35772b2Smrg # Convert "-framework foo" to "foo.ltframework" 6420e35772b2Smrg if test -n "$inherited_linker_flags"; then 642174c14cd6Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422e35772b2Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423e35772b2Smrg case " $new_inherited_linker_flags " in 6424e35772b2Smrg *" $tmp_inherited_linker_flag "*) ;; 642574c14cd6Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426e35772b2Smrg esac 6427e35772b2Smrg done 6428e35772b2Smrg fi 642974c14cd6Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430e35772b2Smrg if test "$linkmode,$pass" = "lib,link" || 6431e35772b2Smrg test "$linkmode,$pass" = "prog,scan" || 6432e35772b2Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 643374c14cd6Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 643474c14cd6Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435e35772b2Smrg fi 6436e35772b2Smrg 6437e35772b2Smrg if test "$pass" = conv; then 6438e35772b2Smrg # Only check for convenience libraries 6439e35772b2Smrg deplibs="$lib $deplibs" 6440e35772b2Smrg if test -z "$libdir"; then 6441e35772b2Smrg if test -z "$old_library"; then 6442e35772b2Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6443e35772b2Smrg fi 6444e35772b2Smrg # It is a libtool convenience library, so add in its objects. 644574c14cd6Smrg func_append convenience " $ladir/$objdir/$old_library" 644674c14cd6Smrg func_append old_convenience " $ladir/$objdir/$old_library" 6447e35772b2Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448e35772b2Smrg func_fatal_error "\`$lib' is not a convenience library" 6449e35772b2Smrg fi 6450e35772b2Smrg tmp_libs= 6451e35772b2Smrg for deplib in $dependency_libs; do 6452e35772b2Smrg deplibs="$deplib $deplibs" 645374c14cd6Smrg if $opt_preserve_dup_deps ; then 6454e35772b2Smrg case "$tmp_libs " in 645574c14cd6Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456e35772b2Smrg esac 6457e35772b2Smrg fi 645874c14cd6Smrg func_append tmp_libs " $deplib" 6459e35772b2Smrg done 6460e35772b2Smrg continue 6461e35772b2Smrg fi # $pass = conv 6462e35772b2Smrg 6463e35772b2Smrg 6464e35772b2Smrg # Get the name of the library we link against. 6465e35772b2Smrg linklib= 646674c14cd6Smrg if test -n "$old_library" && 646774c14cd6Smrg { test "$prefer_static_libs" = yes || 646874c14cd6Smrg test "$prefer_static_libs,$installed" = "built,no"; }; then 646974c14cd6Smrg linklib=$old_library 647074c14cd6Smrg else 647174c14cd6Smrg for l in $old_library $library_names; do 647274c14cd6Smrg linklib="$l" 647374c14cd6Smrg done 647474c14cd6Smrg fi 6475e35772b2Smrg if test -z "$linklib"; then 6476e35772b2Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6477e35772b2Smrg fi 6478e35772b2Smrg 6479e35772b2Smrg # This library was specified with -dlopen. 6480e35772b2Smrg if test "$pass" = dlopen; then 6481e35772b2Smrg if test -z "$libdir"; then 6482e35772b2Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483e35772b2Smrg fi 6484e35772b2Smrg if test -z "$dlname" || 6485e35772b2Smrg test "$dlopen_support" != yes || 6486e35772b2Smrg test "$build_libtool_libs" = no; then 6487e35772b2Smrg # If there is no dlname, no dlopen support or we're linking 6488e35772b2Smrg # statically, we need to preload. We also need to preload any 6489e35772b2Smrg # dependent libraries so libltdl's deplib preloader doesn't 6490e35772b2Smrg # bomb out in the load deplibs phase. 649174c14cd6Smrg func_append dlprefiles " $lib $dependency_libs" 6492e35772b2Smrg else 649374c14cd6Smrg func_append newdlfiles " $lib" 6494e35772b2Smrg fi 6495e35772b2Smrg continue 6496e35772b2Smrg fi # $pass = dlopen 6497e35772b2Smrg 6498e35772b2Smrg # We need an absolute path. 6499e35772b2Smrg case $ladir in 6500e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501e35772b2Smrg *) 6502e35772b2Smrg abs_ladir=`cd "$ladir" && pwd` 6503e35772b2Smrg if test -z "$abs_ladir"; then 6504e35772b2Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 6505e35772b2Smrg func_warning "passing it literally to the linker, although it might fail" 6506e35772b2Smrg abs_ladir="$ladir" 6507e35772b2Smrg fi 6508e35772b2Smrg ;; 6509e35772b2Smrg esac 6510e35772b2Smrg func_basename "$lib" 6511e35772b2Smrg laname="$func_basename_result" 6512e35772b2Smrg 6513e35772b2Smrg # Find the relevant object directory and library name. 6514e35772b2Smrg if test "X$installed" = Xyes; then 651574c14cd6Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516e35772b2Smrg func_warning "library \`$lib' was moved." 6517e35772b2Smrg dir="$ladir" 6518e35772b2Smrg absdir="$abs_ladir" 6519e35772b2Smrg libdir="$abs_ladir" 6520e35772b2Smrg else 652174c14cd6Smrg dir="$lt_sysroot$libdir" 652274c14cd6Smrg absdir="$lt_sysroot$libdir" 6523e35772b2Smrg fi 6524e35772b2Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525e35772b2Smrg else 6526e35772b2Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527e35772b2Smrg dir="$ladir" 6528e35772b2Smrg absdir="$abs_ladir" 6529e35772b2Smrg # Remove this search path later 653074c14cd6Smrg func_append notinst_path " $abs_ladir" 6531e35772b2Smrg else 6532e35772b2Smrg dir="$ladir/$objdir" 6533e35772b2Smrg absdir="$abs_ladir/$objdir" 6534e35772b2Smrg # Remove this search path later 653574c14cd6Smrg func_append notinst_path " $abs_ladir" 6536e35772b2Smrg fi 6537e35772b2Smrg fi # $installed = yes 6538e35772b2Smrg func_stripname 'lib' '.la' "$laname" 6539e35772b2Smrg name=$func_stripname_result 6540e35772b2Smrg 6541e35772b2Smrg # This library was specified with -dlpreopen. 6542e35772b2Smrg if test "$pass" = dlpreopen; then 6543e35772b2Smrg if test -z "$libdir" && test "$linkmode" = prog; then 6544e35772b2Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545e35772b2Smrg fi 654674c14cd6Smrg case "$host" in 654774c14cd6Smrg # special handling for platforms with PE-DLLs. 654874c14cd6Smrg *cygwin* | *mingw* | *cegcc* ) 654974c14cd6Smrg # Linker will automatically link against shared library if both 655074c14cd6Smrg # static and shared are present. Therefore, ensure we extract 655174c14cd6Smrg # symbols from the import library if a shared library is present 655274c14cd6Smrg # (otherwise, the dlopen module name will be incorrect). We do 655374c14cd6Smrg # this by putting the import library name into $newdlprefiles. 655474c14cd6Smrg # We recover the dlopen module name by 'saving' the la file 655574c14cd6Smrg # name in a special purpose variable, and (later) extracting the 655674c14cd6Smrg # dlname from the la file. 655774c14cd6Smrg if test -n "$dlname"; then 655874c14cd6Smrg func_tr_sh "$dir/$linklib" 655974c14cd6Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 656074c14cd6Smrg func_append newdlprefiles " $dir/$linklib" 656174c14cd6Smrg else 656274c14cd6Smrg func_append newdlprefiles " $dir/$old_library" 656374c14cd6Smrg # Keep a list of preopened convenience libraries to check 656474c14cd6Smrg # that they are being used correctly in the link pass. 656574c14cd6Smrg test -z "$libdir" && \ 656674c14cd6Smrg func_append dlpreconveniencelibs " $dir/$old_library" 656774c14cd6Smrg fi 656874c14cd6Smrg ;; 656974c14cd6Smrg * ) 657074c14cd6Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 657174c14cd6Smrg # are required to link). 657274c14cd6Smrg if test -n "$old_library"; then 657374c14cd6Smrg func_append newdlprefiles " $dir/$old_library" 657474c14cd6Smrg # Keep a list of preopened convenience libraries to check 657574c14cd6Smrg # that they are being used correctly in the link pass. 657674c14cd6Smrg test -z "$libdir" && \ 657774c14cd6Smrg func_append dlpreconveniencelibs " $dir/$old_library" 657874c14cd6Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 657974c14cd6Smrg elif test -n "$dlname"; then 658074c14cd6Smrg func_append newdlprefiles " $dir/$dlname" 658174c14cd6Smrg else 658274c14cd6Smrg func_append newdlprefiles " $dir/$linklib" 658374c14cd6Smrg fi 658474c14cd6Smrg ;; 658574c14cd6Smrg esac 6586e35772b2Smrg fi # $pass = dlpreopen 6587e35772b2Smrg 6588e35772b2Smrg if test -z "$libdir"; then 6589e35772b2Smrg # Link the convenience library 6590e35772b2Smrg if test "$linkmode" = lib; then 6591e35772b2Smrg deplibs="$dir/$old_library $deplibs" 6592e35772b2Smrg elif test "$linkmode,$pass" = "prog,link"; then 6593e35772b2Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 6594e35772b2Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595e35772b2Smrg else 6596e35772b2Smrg deplibs="$lib $deplibs" # used for prog,scan pass 6597e35772b2Smrg fi 6598e35772b2Smrg continue 6599e35772b2Smrg fi 6600e35772b2Smrg 6601e35772b2Smrg 6602e35772b2Smrg if test "$linkmode" = prog && test "$pass" != link; then 660374c14cd6Smrg func_append newlib_search_path " $ladir" 6604e35772b2Smrg deplibs="$lib $deplibs" 6605e35772b2Smrg 6606e35772b2Smrg linkalldeplibs=no 6607e35772b2Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 6608e35772b2Smrg test "$build_libtool_libs" = no; then 6609e35772b2Smrg linkalldeplibs=yes 6610e35772b2Smrg fi 6611e35772b2Smrg 6612e35772b2Smrg tmp_libs= 6613e35772b2Smrg for deplib in $dependency_libs; do 6614e35772b2Smrg case $deplib in 6615e35772b2Smrg -L*) func_stripname '-L' '' "$deplib" 661674c14cd6Smrg func_resolve_sysroot "$func_stripname_result" 661774c14cd6Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6618e35772b2Smrg ;; 6619e35772b2Smrg esac 6620e35772b2Smrg # Need to link against all dependency_libs? 6621e35772b2Smrg if test "$linkalldeplibs" = yes; then 6622e35772b2Smrg deplibs="$deplib $deplibs" 6623e35772b2Smrg else 6624e35772b2Smrg # Need to hardcode shared library paths 6625e35772b2Smrg # or/and link against static libraries 6626e35772b2Smrg newdependency_libs="$deplib $newdependency_libs" 6627e35772b2Smrg fi 662874c14cd6Smrg if $opt_preserve_dup_deps ; then 6629e35772b2Smrg case "$tmp_libs " in 663074c14cd6Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631e35772b2Smrg esac 6632e35772b2Smrg fi 663374c14cd6Smrg func_append tmp_libs " $deplib" 6634e35772b2Smrg done # for deplib 6635e35772b2Smrg continue 6636e35772b2Smrg fi # $linkmode = prog... 6637e35772b2Smrg 6638e35772b2Smrg if test "$linkmode,$pass" = "prog,link"; then 6639e35772b2Smrg if test -n "$library_names" && 6640e35772b2Smrg { { test "$prefer_static_libs" = no || 6641e35772b2Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6642e35772b2Smrg test -z "$old_library"; }; then 6643e35772b2Smrg # We need to hardcode the library path 6644e35772b2Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645e35772b2Smrg # Make sure the rpath contains only unique directories. 6646e35772b2Smrg case "$temp_rpath:" in 6647e35772b2Smrg *"$absdir:"*) ;; 664874c14cd6Smrg *) func_append temp_rpath "$absdir:" ;; 6649e35772b2Smrg esac 6650e35772b2Smrg fi 6651e35772b2Smrg 6652e35772b2Smrg # Hardcode the library path. 6653e35772b2Smrg # Skip directories that are in the system default run-time 6654e35772b2Smrg # search path. 6655e35772b2Smrg case " $sys_lib_dlsearch_path " in 6656e35772b2Smrg *" $absdir "*) ;; 6657e35772b2Smrg *) 6658e35772b2Smrg case "$compile_rpath " in 6659e35772b2Smrg *" $absdir "*) ;; 666074c14cd6Smrg *) func_append compile_rpath " $absdir" ;; 6661e35772b2Smrg esac 6662e35772b2Smrg ;; 6663e35772b2Smrg esac 6664e35772b2Smrg case " $sys_lib_dlsearch_path " in 6665e35772b2Smrg *" $libdir "*) ;; 6666e35772b2Smrg *) 6667e35772b2Smrg case "$finalize_rpath " in 6668e35772b2Smrg *" $libdir "*) ;; 666974c14cd6Smrg *) func_append finalize_rpath " $libdir" ;; 6670e35772b2Smrg esac 6671e35772b2Smrg ;; 6672e35772b2Smrg esac 6673e35772b2Smrg fi # $linkmode,$pass = prog,link... 6674e35772b2Smrg 6675e35772b2Smrg if test "$alldeplibs" = yes && 6676e35772b2Smrg { test "$deplibs_check_method" = pass_all || 6677e35772b2Smrg { test "$build_libtool_libs" = yes && 6678e35772b2Smrg test -n "$library_names"; }; }; then 6679e35772b2Smrg # We only need to search for static libraries 6680e35772b2Smrg continue 6681e35772b2Smrg fi 6682e35772b2Smrg fi 6683e35772b2Smrg 6684e35772b2Smrg link_static=no # Whether the deplib will be linked statically 6685e35772b2Smrg use_static_libs=$prefer_static_libs 6686e35772b2Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 6687e35772b2Smrg use_static_libs=no 6688e35772b2Smrg fi 6689e35772b2Smrg if test -n "$library_names" && 6690e35772b2Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691e35772b2Smrg case $host in 6692e35772b2Smrg *cygwin* | *mingw* | *cegcc*) 6693e35772b2Smrg # No point in relinking DLLs because paths are not encoded 669474c14cd6Smrg func_append notinst_deplibs " $lib" 6695e35772b2Smrg need_relink=no 6696e35772b2Smrg ;; 6697e35772b2Smrg *) 6698e35772b2Smrg if test "$installed" = no; then 669974c14cd6Smrg func_append notinst_deplibs " $lib" 6700e35772b2Smrg need_relink=yes 6701e35772b2Smrg fi 6702e35772b2Smrg ;; 6703e35772b2Smrg esac 6704e35772b2Smrg # This is a shared library 6705e35772b2Smrg 6706e35772b2Smrg # Warn about portability, can't link against -module's on some 6707e35772b2Smrg # systems (darwin). Don't bleat about dlopened modules though! 6708e35772b2Smrg dlopenmodule="" 6709e35772b2Smrg for dlpremoduletest in $dlprefiles; do 6710e35772b2Smrg if test "X$dlpremoduletest" = "X$lib"; then 6711e35772b2Smrg dlopenmodule="$dlpremoduletest" 6712e35772b2Smrg break 6713e35772b2Smrg fi 6714e35772b2Smrg done 6715e35772b2Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 671674c14cd6Smrg echo 6717e35772b2Smrg if test "$linkmode" = prog; then 6718e35772b2Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719e35772b2Smrg else 6720e35772b2Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721e35772b2Smrg fi 6722e35772b2Smrg $ECHO "*** $linklib is not portable!" 6723e35772b2Smrg fi 6724e35772b2Smrg if test "$linkmode" = lib && 6725e35772b2Smrg test "$hardcode_into_libs" = yes; then 6726e35772b2Smrg # Hardcode the library path. 6727e35772b2Smrg # Skip directories that are in the system default run-time 6728e35772b2Smrg # search path. 6729e35772b2Smrg case " $sys_lib_dlsearch_path " in 6730e35772b2Smrg *" $absdir "*) ;; 6731e35772b2Smrg *) 6732e35772b2Smrg case "$compile_rpath " in 6733e35772b2Smrg *" $absdir "*) ;; 673474c14cd6Smrg *) func_append compile_rpath " $absdir" ;; 6735e35772b2Smrg esac 6736e35772b2Smrg ;; 6737e35772b2Smrg esac 6738e35772b2Smrg case " $sys_lib_dlsearch_path " in 6739e35772b2Smrg *" $libdir "*) ;; 6740e35772b2Smrg *) 6741e35772b2Smrg case "$finalize_rpath " in 6742e35772b2Smrg *" $libdir "*) ;; 674374c14cd6Smrg *) func_append finalize_rpath " $libdir" ;; 6744e35772b2Smrg esac 6745e35772b2Smrg ;; 6746e35772b2Smrg esac 6747e35772b2Smrg fi 6748e35772b2Smrg 6749e35772b2Smrg if test -n "$old_archive_from_expsyms_cmds"; then 6750e35772b2Smrg # figure out the soname 6751e35772b2Smrg set dummy $library_names 6752e35772b2Smrg shift 6753e35772b2Smrg realname="$1" 6754e35772b2Smrg shift 6755e35772b2Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6756e35772b2Smrg # use dlname if we got it. it's perfectly good, no? 6757e35772b2Smrg if test -n "$dlname"; then 6758e35772b2Smrg soname="$dlname" 6759e35772b2Smrg elif test -n "$soname_spec"; then 6760e35772b2Smrg # bleh windows 6761e35772b2Smrg case $host in 6762e35772b2Smrg *cygwin* | mingw* | *cegcc*) 6763e35772b2Smrg func_arith $current - $age 6764e35772b2Smrg major=$func_arith_result 6765e35772b2Smrg versuffix="-$major" 6766e35772b2Smrg ;; 6767e35772b2Smrg esac 6768e35772b2Smrg eval soname=\"$soname_spec\" 6769e35772b2Smrg else 6770e35772b2Smrg soname="$realname" 6771e35772b2Smrg fi 6772e35772b2Smrg 6773e35772b2Smrg # Make a new name for the extract_expsyms_cmds to use 6774e35772b2Smrg soroot="$soname" 6775e35772b2Smrg func_basename "$soroot" 6776e35772b2Smrg soname="$func_basename_result" 6777e35772b2Smrg func_stripname 'lib' '.dll' "$soname" 6778e35772b2Smrg newlib=libimp-$func_stripname_result.a 6779e35772b2Smrg 6780e35772b2Smrg # If the library has no export list, then create one now 6781e35772b2Smrg if test -f "$output_objdir/$soname-def"; then : 6782e35772b2Smrg else 6783e35772b2Smrg func_verbose "extracting exported symbol list from \`$soname'" 6784e35772b2Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785e35772b2Smrg fi 6786e35772b2Smrg 6787e35772b2Smrg # Create $newlib 6788e35772b2Smrg if test -f "$output_objdir/$newlib"; then :; else 6789e35772b2Smrg func_verbose "generating import library for \`$soname'" 6790e35772b2Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791e35772b2Smrg fi 6792e35772b2Smrg # make sure the library variables are pointing to the new library 6793e35772b2Smrg dir=$output_objdir 6794e35772b2Smrg linklib=$newlib 6795e35772b2Smrg fi # test -n "$old_archive_from_expsyms_cmds" 6796e35772b2Smrg 679774c14cd6Smrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798e35772b2Smrg add_shlibpath= 6799e35772b2Smrg add_dir= 6800e35772b2Smrg add= 6801e35772b2Smrg lib_linked=yes 6802e35772b2Smrg case $hardcode_action in 6803e35772b2Smrg immediate | unsupported) 6804e35772b2Smrg if test "$hardcode_direct" = no; then 6805e35772b2Smrg add="$dir/$linklib" 6806e35772b2Smrg case $host in 6807e35772b2Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808e35772b2Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809e35772b2Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810e35772b2Smrg *-*-unixware7*) add_dir="-L$dir" ;; 6811e35772b2Smrg *-*-darwin* ) 6812e35772b2Smrg # if the lib is a (non-dlopened) module then we can not 6813e35772b2Smrg # link against it, someone is ignoring the earlier warnings 6814e35772b2Smrg if /usr/bin/file -L $add 2> /dev/null | 6815e35772b2Smrg $GREP ": [^:]* bundle" >/dev/null ; then 6816e35772b2Smrg if test "X$dlopenmodule" != "X$lib"; then 6817e35772b2Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818e35772b2Smrg if test -z "$old_library" ; then 681974c14cd6Smrg echo 682074c14cd6Smrg echo "*** And there doesn't seem to be a static archive available" 682174c14cd6Smrg echo "*** The link will probably fail, sorry" 6822e35772b2Smrg else 6823e35772b2Smrg add="$dir/$old_library" 6824e35772b2Smrg fi 6825e35772b2Smrg elif test -n "$old_library"; then 6826e35772b2Smrg add="$dir/$old_library" 6827e35772b2Smrg fi 6828e35772b2Smrg fi 6829e35772b2Smrg esac 6830e35772b2Smrg elif test "$hardcode_minus_L" = no; then 6831e35772b2Smrg case $host in 6832e35772b2Smrg *-*-sunos*) add_shlibpath="$dir" ;; 6833e35772b2Smrg esac 6834e35772b2Smrg add_dir="-L$dir" 6835e35772b2Smrg add="-l$name" 6836e35772b2Smrg elif test "$hardcode_shlibpath_var" = no; then 6837e35772b2Smrg add_shlibpath="$dir" 6838e35772b2Smrg add="-l$name" 6839e35772b2Smrg else 6840e35772b2Smrg lib_linked=no 6841e35772b2Smrg fi 6842e35772b2Smrg ;; 6843e35772b2Smrg relink) 6844e35772b2Smrg if test "$hardcode_direct" = yes && 6845e35772b2Smrg test "$hardcode_direct_absolute" = no; then 6846e35772b2Smrg add="$dir/$linklib" 6847e35772b2Smrg elif test "$hardcode_minus_L" = yes; then 684874c14cd6Smrg add_dir="-L$absdir" 6849e35772b2Smrg # Try looking first in the location we're being installed to. 6850e35772b2Smrg if test -n "$inst_prefix_dir"; then 6851e35772b2Smrg case $libdir in 6852e35772b2Smrg [\\/]*) 685374c14cd6Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6854e35772b2Smrg ;; 6855e35772b2Smrg esac 6856e35772b2Smrg fi 6857e35772b2Smrg add="-l$name" 6858e35772b2Smrg elif test "$hardcode_shlibpath_var" = yes; then 6859e35772b2Smrg add_shlibpath="$dir" 6860e35772b2Smrg add="-l$name" 6861e35772b2Smrg else 6862e35772b2Smrg lib_linked=no 6863e35772b2Smrg fi 6864e35772b2Smrg ;; 6865e35772b2Smrg *) lib_linked=no ;; 6866e35772b2Smrg esac 6867e35772b2Smrg 6868e35772b2Smrg if test "$lib_linked" != yes; then 6869e35772b2Smrg func_fatal_configuration "unsupported hardcode properties" 6870e35772b2Smrg fi 6871e35772b2Smrg 6872e35772b2Smrg if test -n "$add_shlibpath"; then 6873e35772b2Smrg case :$compile_shlibpath: in 6874e35772b2Smrg *":$add_shlibpath:"*) ;; 687574c14cd6Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876e35772b2Smrg esac 6877e35772b2Smrg fi 6878e35772b2Smrg if test "$linkmode" = prog; then 6879e35772b2Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880e35772b2Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881e35772b2Smrg else 6882e35772b2Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883e35772b2Smrg test -n "$add" && deplibs="$add $deplibs" 6884e35772b2Smrg if test "$hardcode_direct" != yes && 6885e35772b2Smrg test "$hardcode_minus_L" != yes && 6886e35772b2Smrg test "$hardcode_shlibpath_var" = yes; then 6887e35772b2Smrg case :$finalize_shlibpath: in 6888e35772b2Smrg *":$libdir:"*) ;; 688974c14cd6Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6890e35772b2Smrg esac 6891e35772b2Smrg fi 6892e35772b2Smrg fi 6893e35772b2Smrg fi 6894e35772b2Smrg 689574c14cd6Smrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896e35772b2Smrg add_shlibpath= 6897e35772b2Smrg add_dir= 6898e35772b2Smrg add= 6899e35772b2Smrg # Finalize command for both is simple: just hardcode it. 6900e35772b2Smrg if test "$hardcode_direct" = yes && 6901e35772b2Smrg test "$hardcode_direct_absolute" = no; then 6902e35772b2Smrg add="$libdir/$linklib" 6903e35772b2Smrg elif test "$hardcode_minus_L" = yes; then 6904e35772b2Smrg add_dir="-L$libdir" 6905e35772b2Smrg add="-l$name" 6906e35772b2Smrg elif test "$hardcode_shlibpath_var" = yes; then 6907e35772b2Smrg case :$finalize_shlibpath: in 6908e35772b2Smrg *":$libdir:"*) ;; 690974c14cd6Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6910e35772b2Smrg esac 6911e35772b2Smrg add="-l$name" 6912e35772b2Smrg elif test "$hardcode_automatic" = yes; then 6913e35772b2Smrg if test -n "$inst_prefix_dir" && 6914e35772b2Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915e35772b2Smrg add="$inst_prefix_dir$libdir/$linklib" 6916e35772b2Smrg else 6917e35772b2Smrg add="$libdir/$linklib" 6918e35772b2Smrg fi 6919e35772b2Smrg else 6920e35772b2Smrg # We cannot seem to hardcode it, guess we'll fake it. 6921e35772b2Smrg add_dir="-L$libdir" 6922e35772b2Smrg # Try looking first in the location we're being installed to. 6923e35772b2Smrg if test -n "$inst_prefix_dir"; then 6924e35772b2Smrg case $libdir in 6925e35772b2Smrg [\\/]*) 692674c14cd6Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6927e35772b2Smrg ;; 6928e35772b2Smrg esac 6929e35772b2Smrg fi 6930e35772b2Smrg add="-l$name" 6931e35772b2Smrg fi 6932e35772b2Smrg 6933e35772b2Smrg if test "$linkmode" = prog; then 6934e35772b2Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935e35772b2Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936e35772b2Smrg else 6937e35772b2Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938e35772b2Smrg test -n "$add" && deplibs="$add $deplibs" 6939e35772b2Smrg fi 6940e35772b2Smrg fi 6941e35772b2Smrg elif test "$linkmode" = prog; then 6942e35772b2Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6943e35772b2Smrg # is not unsupported. This is valid on all known static and 6944e35772b2Smrg # shared platforms. 6945e35772b2Smrg if test "$hardcode_direct" != unsupported; then 6946e35772b2Smrg test -n "$old_library" && linklib="$old_library" 6947e35772b2Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 6948e35772b2Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949e35772b2Smrg else 6950e35772b2Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6951e35772b2Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952e35772b2Smrg fi 6953e35772b2Smrg elif test "$build_libtool_libs" = yes; then 6954e35772b2Smrg # Not a shared library 6955e35772b2Smrg if test "$deplibs_check_method" != pass_all; then 6956e35772b2Smrg # We're trying link a shared library against a static one 6957e35772b2Smrg # but the system doesn't support it. 6958e35772b2Smrg 6959e35772b2Smrg # Just print a warning and add the library to dependency_libs so 6960e35772b2Smrg # that the program can be linked against the static library. 696174c14cd6Smrg echo 6962e35772b2Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 696374c14cd6Smrg echo "*** I have the capability to make that library automatically link in when" 696474c14cd6Smrg echo "*** you link to this library. But I can only do this if you have a" 696574c14cd6Smrg echo "*** shared version of the library, which you do not appear to have." 6966e35772b2Smrg if test "$module" = yes; then 696774c14cd6Smrg echo "*** But as you try to build a module library, libtool will still create " 696874c14cd6Smrg echo "*** a static module, that should work as long as the dlopening application" 696974c14cd6Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970e35772b2Smrg if test -z "$global_symbol_pipe"; then 697174c14cd6Smrg echo 697274c14cd6Smrg echo "*** However, this would only work if libtool was able to extract symbol" 697374c14cd6Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 697474c14cd6Smrg echo "*** not find such a program. So, this module is probably useless." 697574c14cd6Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976e35772b2Smrg fi 6977e35772b2Smrg if test "$build_old_libs" = no; then 6978e35772b2Smrg build_libtool_libs=module 6979e35772b2Smrg build_old_libs=yes 6980e35772b2Smrg else 6981e35772b2Smrg build_libtool_libs=no 6982e35772b2Smrg fi 6983e35772b2Smrg fi 6984e35772b2Smrg else 6985e35772b2Smrg deplibs="$dir/$old_library $deplibs" 6986e35772b2Smrg link_static=yes 6987e35772b2Smrg fi 6988e35772b2Smrg fi # link shared/static library? 6989e35772b2Smrg 6990e35772b2Smrg if test "$linkmode" = lib; then 6991e35772b2Smrg if test -n "$dependency_libs" && 6992e35772b2Smrg { test "$hardcode_into_libs" != yes || 6993e35772b2Smrg test "$build_old_libs" = yes || 6994e35772b2Smrg test "$link_static" = yes; }; then 6995e35772b2Smrg # Extract -R from dependency_libs 6996e35772b2Smrg temp_deplibs= 6997e35772b2Smrg for libdir in $dependency_libs; do 6998e35772b2Smrg case $libdir in 6999e35772b2Smrg -R*) func_stripname '-R' '' "$libdir" 7000e35772b2Smrg temp_xrpath=$func_stripname_result 7001e35772b2Smrg case " $xrpath " in 7002e35772b2Smrg *" $temp_xrpath "*) ;; 700374c14cd6Smrg *) func_append xrpath " $temp_xrpath";; 7004e35772b2Smrg esac;; 700574c14cd6Smrg *) func_append temp_deplibs " $libdir";; 7006e35772b2Smrg esac 7007e35772b2Smrg done 7008e35772b2Smrg dependency_libs="$temp_deplibs" 7009e35772b2Smrg fi 7010e35772b2Smrg 701174c14cd6Smrg func_append newlib_search_path " $absdir" 7012e35772b2Smrg # Link against this library 7013e35772b2Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014e35772b2Smrg # ... and its dependency_libs 7015e35772b2Smrg tmp_libs= 7016e35772b2Smrg for deplib in $dependency_libs; do 7017e35772b2Smrg newdependency_libs="$deplib $newdependency_libs" 701874c14cd6Smrg case $deplib in 701974c14cd6Smrg -L*) func_stripname '-L' '' "$deplib" 702074c14cd6Smrg func_resolve_sysroot "$func_stripname_result";; 702174c14cd6Smrg *) func_resolve_sysroot "$deplib" ;; 702274c14cd6Smrg esac 702374c14cd6Smrg if $opt_preserve_dup_deps ; then 7024e35772b2Smrg case "$tmp_libs " in 702574c14cd6Smrg *" $func_resolve_sysroot_result "*) 702674c14cd6Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027e35772b2Smrg esac 7028e35772b2Smrg fi 702974c14cd6Smrg func_append tmp_libs " $func_resolve_sysroot_result" 7030e35772b2Smrg done 7031e35772b2Smrg 7032e35772b2Smrg if test "$link_all_deplibs" != no; then 7033e35772b2Smrg # Add the search paths of all dependency libraries 7034e35772b2Smrg for deplib in $dependency_libs; do 703574c14cd6Smrg path= 7036e35772b2Smrg case $deplib in 7037e35772b2Smrg -L*) path="$deplib" ;; 7038e35772b2Smrg *.la) 703974c14cd6Smrg func_resolve_sysroot "$deplib" 704074c14cd6Smrg deplib=$func_resolve_sysroot_result 7041e35772b2Smrg func_dirname "$deplib" "" "." 704274c14cd6Smrg dir=$func_dirname_result 7043e35772b2Smrg # We need an absolute path. 7044e35772b2Smrg case $dir in 7045e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046e35772b2Smrg *) 7047e35772b2Smrg absdir=`cd "$dir" && pwd` 7048e35772b2Smrg if test -z "$absdir"; then 7049e35772b2Smrg func_warning "cannot determine absolute directory name of \`$dir'" 7050e35772b2Smrg absdir="$dir" 7051e35772b2Smrg fi 7052e35772b2Smrg ;; 7053e35772b2Smrg esac 7054e35772b2Smrg if $GREP "^installed=no" $deplib > /dev/null; then 7055e35772b2Smrg case $host in 7056e35772b2Smrg *-*-darwin*) 7057e35772b2Smrg depdepl= 7058e35772b2Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059e35772b2Smrg if test -n "$deplibrary_names" ; then 7060e35772b2Smrg for tmp in $deplibrary_names ; do 7061e35772b2Smrg depdepl=$tmp 7062e35772b2Smrg done 7063e35772b2Smrg if test -f "$absdir/$objdir/$depdepl" ; then 7064e35772b2Smrg depdepl="$absdir/$objdir/$depdepl" 7065e35772b2Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066e35772b2Smrg if test -z "$darwin_install_name"; then 7067e35772b2Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068e35772b2Smrg fi 706974c14cd6Smrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 707074c14cd6Smrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071e35772b2Smrg path= 7072e35772b2Smrg fi 7073e35772b2Smrg fi 7074e35772b2Smrg ;; 7075e35772b2Smrg *) 7076e35772b2Smrg path="-L$absdir/$objdir" 7077e35772b2Smrg ;; 7078e35772b2Smrg esac 7079e35772b2Smrg else 7080e35772b2Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081e35772b2Smrg test -z "$libdir" && \ 7082e35772b2Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7083e35772b2Smrg test "$absdir" != "$libdir" && \ 7084e35772b2Smrg func_warning "\`$deplib' seems to be moved" 7085e35772b2Smrg 7086e35772b2Smrg path="-L$absdir" 7087e35772b2Smrg fi 7088e35772b2Smrg ;; 7089e35772b2Smrg esac 7090e35772b2Smrg case " $deplibs " in 7091e35772b2Smrg *" $path "*) ;; 7092e35772b2Smrg *) deplibs="$path $deplibs" ;; 7093e35772b2Smrg esac 7094e35772b2Smrg done 7095e35772b2Smrg fi # link_all_deplibs != no 7096e35772b2Smrg fi # linkmode = lib 7097e35772b2Smrg done # for deplib in $libs 7098e35772b2Smrg if test "$pass" = link; then 7099e35772b2Smrg if test "$linkmode" = "prog"; then 7100e35772b2Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101e35772b2Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102e35772b2Smrg else 710374c14cd6Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104e35772b2Smrg fi 7105e35772b2Smrg fi 7106e35772b2Smrg dependency_libs="$newdependency_libs" 7107e35772b2Smrg if test "$pass" = dlpreopen; then 7108e35772b2Smrg # Link the dlpreopened libraries before other libraries 7109e35772b2Smrg for deplib in $save_deplibs; do 7110e35772b2Smrg deplibs="$deplib $deplibs" 7111e35772b2Smrg done 7112e35772b2Smrg fi 7113e35772b2Smrg if test "$pass" != dlopen; then 7114e35772b2Smrg if test "$pass" != conv; then 7115e35772b2Smrg # Make sure lib_search_path contains only unique directories. 7116e35772b2Smrg lib_search_path= 7117e35772b2Smrg for dir in $newlib_search_path; do 7118e35772b2Smrg case "$lib_search_path " in 7119e35772b2Smrg *" $dir "*) ;; 712074c14cd6Smrg *) func_append lib_search_path " $dir" ;; 7121e35772b2Smrg esac 7122e35772b2Smrg done 7123e35772b2Smrg newlib_search_path= 7124e35772b2Smrg fi 7125e35772b2Smrg 7126e35772b2Smrg if test "$linkmode,$pass" != "prog,link"; then 7127e35772b2Smrg vars="deplibs" 7128e35772b2Smrg else 7129e35772b2Smrg vars="compile_deplibs finalize_deplibs" 7130e35772b2Smrg fi 7131e35772b2Smrg for var in $vars dependency_libs; do 7132e35772b2Smrg # Add libraries to $var in reverse order 7133e35772b2Smrg eval tmp_libs=\"\$$var\" 7134e35772b2Smrg new_libs= 7135e35772b2Smrg for deplib in $tmp_libs; do 7136e35772b2Smrg # FIXME: Pedantically, this is the right thing to do, so 7137e35772b2Smrg # that some nasty dependency loop isn't accidentally 7138e35772b2Smrg # broken: 7139e35772b2Smrg #new_libs="$deplib $new_libs" 7140e35772b2Smrg # Pragmatically, this seems to cause very few problems in 7141e35772b2Smrg # practice: 7142e35772b2Smrg case $deplib in 7143e35772b2Smrg -L*) new_libs="$deplib $new_libs" ;; 7144e35772b2Smrg -R*) ;; 7145e35772b2Smrg *) 7146e35772b2Smrg # And here is the reason: when a library appears more 7147e35772b2Smrg # than once as an explicit dependence of a library, or 7148e35772b2Smrg # is implicitly linked in more than once by the 7149e35772b2Smrg # compiler, it is considered special, and multiple 7150e35772b2Smrg # occurrences thereof are not removed. Compare this 7151e35772b2Smrg # with having the same library being listed as a 7152e35772b2Smrg # dependency of multiple other libraries: in this case, 7153e35772b2Smrg # we know (pedantically, we assume) the library does not 7154e35772b2Smrg # need to be listed more than once, so we keep only the 7155e35772b2Smrg # last copy. This is not always right, but it is rare 7156e35772b2Smrg # enough that we require users that really mean to play 7157e35772b2Smrg # such unportable linking tricks to link the library 7158e35772b2Smrg # using -Wl,-lname, so that libtool does not consider it 7159e35772b2Smrg # for duplicate removal. 7160e35772b2Smrg case " $specialdeplibs " in 7161e35772b2Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162e35772b2Smrg *) 7163e35772b2Smrg case " $new_libs " in 7164e35772b2Smrg *" $deplib "*) ;; 7165e35772b2Smrg *) new_libs="$deplib $new_libs" ;; 7166e35772b2Smrg esac 7167e35772b2Smrg ;; 7168e35772b2Smrg esac 7169e35772b2Smrg ;; 7170e35772b2Smrg esac 7171e35772b2Smrg done 7172e35772b2Smrg tmp_libs= 7173e35772b2Smrg for deplib in $new_libs; do 7174e35772b2Smrg case $deplib in 7175e35772b2Smrg -L*) 7176e35772b2Smrg case " $tmp_libs " in 7177e35772b2Smrg *" $deplib "*) ;; 717874c14cd6Smrg *) func_append tmp_libs " $deplib" ;; 7179e35772b2Smrg esac 7180e35772b2Smrg ;; 718174c14cd6Smrg *) func_append tmp_libs " $deplib" ;; 7182e35772b2Smrg esac 7183e35772b2Smrg done 7184e35772b2Smrg eval $var=\"$tmp_libs\" 7185e35772b2Smrg done # for var 7186e35772b2Smrg fi 7187e35772b2Smrg # Last step: remove runtime libs from dependency_libs 7188e35772b2Smrg # (they stay in deplibs) 7189e35772b2Smrg tmp_libs= 7190e35772b2Smrg for i in $dependency_libs ; do 7191e35772b2Smrg case " $predeps $postdeps $compiler_lib_search_path " in 7192e35772b2Smrg *" $i "*) 7193e35772b2Smrg i="" 7194e35772b2Smrg ;; 7195e35772b2Smrg esac 7196e35772b2Smrg if test -n "$i" ; then 719774c14cd6Smrg func_append tmp_libs " $i" 7198e35772b2Smrg fi 7199e35772b2Smrg done 7200e35772b2Smrg dependency_libs=$tmp_libs 7201e35772b2Smrg done # for pass 7202e35772b2Smrg if test "$linkmode" = prog; then 7203e35772b2Smrg dlfiles="$newdlfiles" 7204e35772b2Smrg fi 7205e35772b2Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 7206e35772b2Smrg dlprefiles="$newdlprefiles" 7207e35772b2Smrg fi 7208e35772b2Smrg 7209e35772b2Smrg case $linkmode in 7210e35772b2Smrg oldlib) 7211e35772b2Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212e35772b2Smrg func_warning "\`-dlopen' is ignored for archives" 7213e35772b2Smrg fi 7214e35772b2Smrg 7215e35772b2Smrg case " $deplibs" in 7216e35772b2Smrg *\ -l* | *\ -L*) 7217e35772b2Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218e35772b2Smrg esac 7219e35772b2Smrg 7220e35772b2Smrg test -n "$rpath" && \ 7221e35772b2Smrg func_warning "\`-rpath' is ignored for archives" 7222e35772b2Smrg 7223e35772b2Smrg test -n "$xrpath" && \ 7224e35772b2Smrg func_warning "\`-R' is ignored for archives" 7225e35772b2Smrg 7226e35772b2Smrg test -n "$vinfo" && \ 7227e35772b2Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 7228e35772b2Smrg 7229e35772b2Smrg test -n "$release" && \ 7230e35772b2Smrg func_warning "\`-release' is ignored for archives" 7231e35772b2Smrg 7232e35772b2Smrg test -n "$export_symbols$export_symbols_regex" && \ 7233e35772b2Smrg func_warning "\`-export-symbols' is ignored for archives" 7234e35772b2Smrg 7235e35772b2Smrg # Now set the variables for building old libraries. 7236e35772b2Smrg build_libtool_libs=no 7237e35772b2Smrg oldlibs="$output" 723874c14cd6Smrg func_append objs "$old_deplibs" 7239e35772b2Smrg ;; 7240e35772b2Smrg 7241e35772b2Smrg lib) 7242e35772b2Smrg # Make sure we only generate libraries of the form `libNAME.la'. 7243e35772b2Smrg case $outputname in 7244e35772b2Smrg lib*) 7245e35772b2Smrg func_stripname 'lib' '.la' "$outputname" 7246e35772b2Smrg name=$func_stripname_result 7247e35772b2Smrg eval shared_ext=\"$shrext_cmds\" 7248e35772b2Smrg eval libname=\"$libname_spec\" 7249e35772b2Smrg ;; 7250e35772b2Smrg *) 7251e35772b2Smrg test "$module" = no && \ 7252e35772b2Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253e35772b2Smrg 7254e35772b2Smrg if test "$need_lib_prefix" != no; then 7255e35772b2Smrg # Add the "lib" prefix for modules if required 7256e35772b2Smrg func_stripname '' '.la' "$outputname" 7257e35772b2Smrg name=$func_stripname_result 7258e35772b2Smrg eval shared_ext=\"$shrext_cmds\" 7259e35772b2Smrg eval libname=\"$libname_spec\" 7260e35772b2Smrg else 7261e35772b2Smrg func_stripname '' '.la' "$outputname" 7262e35772b2Smrg libname=$func_stripname_result 7263e35772b2Smrg fi 7264e35772b2Smrg ;; 7265e35772b2Smrg esac 7266e35772b2Smrg 7267e35772b2Smrg if test -n "$objs"; then 7268e35772b2Smrg if test "$deplibs_check_method" != pass_all; then 7269e35772b2Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270e35772b2Smrg else 727174c14cd6Smrg echo 7272e35772b2Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273e35772b2Smrg $ECHO "*** objects $objs is not portable!" 727474c14cd6Smrg func_append libobjs " $objs" 7275e35772b2Smrg fi 7276e35772b2Smrg fi 7277e35772b2Smrg 7278e35772b2Smrg test "$dlself" != no && \ 7279e35772b2Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7280e35772b2Smrg 7281e35772b2Smrg set dummy $rpath 7282e35772b2Smrg shift 7283e35772b2Smrg test "$#" -gt 1 && \ 7284e35772b2Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7285e35772b2Smrg 7286e35772b2Smrg install_libdir="$1" 7287e35772b2Smrg 7288e35772b2Smrg oldlibs= 7289e35772b2Smrg if test -z "$rpath"; then 7290e35772b2Smrg if test "$build_libtool_libs" = yes; then 7291e35772b2Smrg # Building a libtool convenience library. 7292e35772b2Smrg # Some compilers have problems with a `.al' extension so 7293e35772b2Smrg # convenience libraries should have the same extension an 7294e35772b2Smrg # archive normally would. 7295e35772b2Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296e35772b2Smrg build_libtool_libs=convenience 7297e35772b2Smrg build_old_libs=yes 7298e35772b2Smrg fi 7299e35772b2Smrg 7300e35772b2Smrg test -n "$vinfo" && \ 7301e35772b2Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302e35772b2Smrg 7303e35772b2Smrg test -n "$release" && \ 7304e35772b2Smrg func_warning "\`-release' is ignored for convenience libraries" 7305e35772b2Smrg else 7306e35772b2Smrg 7307e35772b2Smrg # Parse the version information argument. 7308e35772b2Smrg save_ifs="$IFS"; IFS=':' 7309e35772b2Smrg set dummy $vinfo 0 0 0 7310e35772b2Smrg shift 7311e35772b2Smrg IFS="$save_ifs" 7312e35772b2Smrg 7313e35772b2Smrg test -n "$7" && \ 7314e35772b2Smrg func_fatal_help "too many parameters to \`-version-info'" 7315e35772b2Smrg 7316e35772b2Smrg # convert absolute version numbers to libtool ages 7317e35772b2Smrg # this retains compatibility with .la files and attempts 7318e35772b2Smrg # to make the code below a bit more comprehensible 7319e35772b2Smrg 7320e35772b2Smrg case $vinfo_number in 7321e35772b2Smrg yes) 7322e35772b2Smrg number_major="$1" 7323e35772b2Smrg number_minor="$2" 7324e35772b2Smrg number_revision="$3" 7325e35772b2Smrg # 7326e35772b2Smrg # There are really only two kinds -- those that 7327e35772b2Smrg # use the current revision as the major version 7328e35772b2Smrg # and those that subtract age and use age as 7329e35772b2Smrg # a minor version. But, then there is irix 7330e35772b2Smrg # which has an extra 1 added just for fun 7331e35772b2Smrg # 7332e35772b2Smrg case $version_type in 733374c14cd6Smrg # correct linux to gnu/linux during the next big refactor 7334e35772b2Smrg darwin|linux|osf|windows|none) 7335e35772b2Smrg func_arith $number_major + $number_minor 7336e35772b2Smrg current=$func_arith_result 7337e35772b2Smrg age="$number_minor" 7338e35772b2Smrg revision="$number_revision" 7339e35772b2Smrg ;; 734074c14cd6Smrg freebsd-aout|freebsd-elf|qnx|sunos) 7341e35772b2Smrg current="$number_major" 7342e35772b2Smrg revision="$number_minor" 7343e35772b2Smrg age="0" 7344e35772b2Smrg ;; 7345e35772b2Smrg irix|nonstopux) 7346e35772b2Smrg func_arith $number_major + $number_minor 7347e35772b2Smrg current=$func_arith_result 7348e35772b2Smrg age="$number_minor" 7349e35772b2Smrg revision="$number_minor" 7350e35772b2Smrg lt_irix_increment=no 7351e35772b2Smrg ;; 7352e35772b2Smrg esac 7353e35772b2Smrg ;; 7354e35772b2Smrg no) 7355e35772b2Smrg current="$1" 7356e35772b2Smrg revision="$2" 7357e35772b2Smrg age="$3" 7358e35772b2Smrg ;; 7359e35772b2Smrg esac 7360e35772b2Smrg 7361e35772b2Smrg # Check that each of the things are valid numbers. 7362e35772b2Smrg case $current in 7363e35772b2Smrg 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]) ;; 7364e35772b2Smrg *) 7365e35772b2Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 7366e35772b2Smrg func_fatal_error "\`$vinfo' is not valid version information" 7367e35772b2Smrg ;; 7368e35772b2Smrg esac 7369e35772b2Smrg 7370e35772b2Smrg case $revision in 7371e35772b2Smrg 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]) ;; 7372e35772b2Smrg *) 7373e35772b2Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 7374e35772b2Smrg func_fatal_error "\`$vinfo' is not valid version information" 7375e35772b2Smrg ;; 7376e35772b2Smrg esac 7377e35772b2Smrg 7378e35772b2Smrg case $age in 7379e35772b2Smrg 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]) ;; 7380e35772b2Smrg *) 7381e35772b2Smrg func_error "AGE \`$age' must be a nonnegative integer" 7382e35772b2Smrg func_fatal_error "\`$vinfo' is not valid version information" 7383e35772b2Smrg ;; 7384e35772b2Smrg esac 7385e35772b2Smrg 7386e35772b2Smrg if test "$age" -gt "$current"; then 7387e35772b2Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388e35772b2Smrg func_fatal_error "\`$vinfo' is not valid version information" 7389e35772b2Smrg fi 7390e35772b2Smrg 7391e35772b2Smrg # Calculate the version variables. 7392e35772b2Smrg major= 7393e35772b2Smrg versuffix= 7394e35772b2Smrg verstring= 7395e35772b2Smrg case $version_type in 7396e35772b2Smrg none) ;; 7397e35772b2Smrg 7398e35772b2Smrg darwin) 7399e35772b2Smrg # Like Linux, but with the current version available in 7400e35772b2Smrg # verstring for coding it into the library header 7401e35772b2Smrg func_arith $current - $age 7402e35772b2Smrg major=.$func_arith_result 7403e35772b2Smrg versuffix="$major.$age.$revision" 7404e35772b2Smrg # Darwin ld doesn't like 0 for these options... 7405e35772b2Smrg func_arith $current + 1 7406e35772b2Smrg minor_current=$func_arith_result 7407e35772b2Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408e35772b2Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409e35772b2Smrg ;; 7410e35772b2Smrg 7411e35772b2Smrg freebsd-aout) 7412e35772b2Smrg major=".$current" 7413e35772b2Smrg versuffix=".$current.$revision"; 7414e35772b2Smrg ;; 7415e35772b2Smrg 7416e35772b2Smrg freebsd-elf) 7417e35772b2Smrg major=".$current" 7418e35772b2Smrg versuffix=".$current" 7419e35772b2Smrg ;; 7420e35772b2Smrg 7421e35772b2Smrg irix | nonstopux) 7422e35772b2Smrg if test "X$lt_irix_increment" = "Xno"; then 7423e35772b2Smrg func_arith $current - $age 7424e35772b2Smrg else 7425e35772b2Smrg func_arith $current - $age + 1 7426e35772b2Smrg fi 7427e35772b2Smrg major=$func_arith_result 7428e35772b2Smrg 7429e35772b2Smrg case $version_type in 7430e35772b2Smrg nonstopux) verstring_prefix=nonstopux ;; 7431e35772b2Smrg *) verstring_prefix=sgi ;; 7432e35772b2Smrg esac 7433e35772b2Smrg verstring="$verstring_prefix$major.$revision" 7434e35772b2Smrg 7435e35772b2Smrg # Add in all the interfaces that we are compatible with. 7436e35772b2Smrg loop=$revision 7437e35772b2Smrg while test "$loop" -ne 0; do 7438e35772b2Smrg func_arith $revision - $loop 7439e35772b2Smrg iface=$func_arith_result 7440e35772b2Smrg func_arith $loop - 1 7441e35772b2Smrg loop=$func_arith_result 7442e35772b2Smrg verstring="$verstring_prefix$major.$iface:$verstring" 7443e35772b2Smrg done 7444e35772b2Smrg 7445e35772b2Smrg # Before this point, $major must not contain `.'. 7446e35772b2Smrg major=.$major 7447e35772b2Smrg versuffix="$major.$revision" 7448e35772b2Smrg ;; 7449e35772b2Smrg 745074c14cd6Smrg linux) # correct to gnu/linux during the next big refactor 7451e35772b2Smrg func_arith $current - $age 7452e35772b2Smrg major=.$func_arith_result 7453e35772b2Smrg versuffix="$major.$age.$revision" 7454e35772b2Smrg ;; 7455e35772b2Smrg 7456e35772b2Smrg osf) 7457e35772b2Smrg func_arith $current - $age 7458e35772b2Smrg major=.$func_arith_result 7459e35772b2Smrg versuffix=".$current.$age.$revision" 7460e35772b2Smrg verstring="$current.$age.$revision" 7461e35772b2Smrg 7462e35772b2Smrg # Add in all the interfaces that we are compatible with. 7463e35772b2Smrg loop=$age 7464e35772b2Smrg while test "$loop" -ne 0; do 7465e35772b2Smrg func_arith $current - $loop 7466e35772b2Smrg iface=$func_arith_result 7467e35772b2Smrg func_arith $loop - 1 7468e35772b2Smrg loop=$func_arith_result 7469e35772b2Smrg verstring="$verstring:${iface}.0" 7470e35772b2Smrg done 7471e35772b2Smrg 7472e35772b2Smrg # Make executables depend on our current version. 747374c14cd6Smrg func_append verstring ":${current}.0" 7474e35772b2Smrg ;; 7475e35772b2Smrg 7476e35772b2Smrg qnx) 7477e35772b2Smrg major=".$current" 7478e35772b2Smrg versuffix=".$current" 7479e35772b2Smrg ;; 7480e35772b2Smrg 7481e35772b2Smrg sunos) 7482e35772b2Smrg major=".$current" 7483e35772b2Smrg versuffix=".$current.$revision" 7484e35772b2Smrg ;; 7485e35772b2Smrg 7486e35772b2Smrg windows) 7487e35772b2Smrg # Use '-' rather than '.', since we only want one 7488e35772b2Smrg # extension on DOS 8.3 filesystems. 7489e35772b2Smrg func_arith $current - $age 7490e35772b2Smrg major=$func_arith_result 7491e35772b2Smrg versuffix="-$major" 7492e35772b2Smrg ;; 7493e35772b2Smrg 7494e35772b2Smrg *) 7495e35772b2Smrg func_fatal_configuration "unknown library version type \`$version_type'" 7496e35772b2Smrg ;; 7497e35772b2Smrg esac 7498e35772b2Smrg 7499e35772b2Smrg # Clear the version info if we defaulted, and they specified a release. 7500e35772b2Smrg if test -z "$vinfo" && test -n "$release"; then 7501e35772b2Smrg major= 7502e35772b2Smrg case $version_type in 7503e35772b2Smrg darwin) 7504e35772b2Smrg # we can't check for "0.0" in archive_cmds due to quoting 7505e35772b2Smrg # problems, so we reset it completely 7506e35772b2Smrg verstring= 7507e35772b2Smrg ;; 7508e35772b2Smrg *) 7509e35772b2Smrg verstring="0.0" 7510e35772b2Smrg ;; 7511e35772b2Smrg esac 7512e35772b2Smrg if test "$need_version" = no; then 7513e35772b2Smrg versuffix= 7514e35772b2Smrg else 7515e35772b2Smrg versuffix=".0.0" 7516e35772b2Smrg fi 7517e35772b2Smrg fi 7518e35772b2Smrg 7519e35772b2Smrg # Remove version info from name if versioning should be avoided 7520e35772b2Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 7521e35772b2Smrg major= 7522e35772b2Smrg versuffix= 7523e35772b2Smrg verstring="" 7524e35772b2Smrg fi 7525e35772b2Smrg 7526e35772b2Smrg # Check to see if the archive will have undefined symbols. 7527e35772b2Smrg if test "$allow_undefined" = yes; then 7528e35772b2Smrg if test "$allow_undefined_flag" = unsupported; then 7529e35772b2Smrg func_warning "undefined symbols not allowed in $host shared libraries" 7530e35772b2Smrg build_libtool_libs=no 7531e35772b2Smrg build_old_libs=yes 7532e35772b2Smrg fi 7533e35772b2Smrg else 7534e35772b2Smrg # Don't allow undefined symbols. 7535e35772b2Smrg allow_undefined_flag="$no_undefined_flag" 7536e35772b2Smrg fi 7537e35772b2Smrg 7538e35772b2Smrg fi 7539e35772b2Smrg 7540e35772b2Smrg func_generate_dlsyms "$libname" "$libname" "yes" 754174c14cd6Smrg func_append libobjs " $symfileobj" 7542e35772b2Smrg test "X$libobjs" = "X " && libobjs= 7543e35772b2Smrg 754474c14cd6Smrg if test "$opt_mode" != relink; then 7545e35772b2Smrg # Remove our outputs, but don't remove object files since they 7546e35772b2Smrg # may have been created when compiling PIC objects. 7547e35772b2Smrg removelist= 7548e35772b2Smrg tempremovelist=`$ECHO "$output_objdir/*"` 7549e35772b2Smrg for p in $tempremovelist; do 7550e35772b2Smrg case $p in 7551e35772b2Smrg *.$objext | *.gcno) 7552e35772b2Smrg ;; 7553e35772b2Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554e35772b2Smrg if test "X$precious_files_regex" != "X"; then 7555e35772b2Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556e35772b2Smrg then 7557e35772b2Smrg continue 7558e35772b2Smrg fi 7559e35772b2Smrg fi 756074c14cd6Smrg func_append removelist " $p" 7561e35772b2Smrg ;; 7562e35772b2Smrg *) ;; 7563e35772b2Smrg esac 7564e35772b2Smrg done 7565e35772b2Smrg test -n "$removelist" && \ 7566e35772b2Smrg func_show_eval "${RM}r \$removelist" 7567e35772b2Smrg fi 7568e35772b2Smrg 7569e35772b2Smrg # Now set the variables for building old libraries. 7570e35772b2Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 757174c14cd6Smrg func_append oldlibs " $output_objdir/$libname.$libext" 7572e35772b2Smrg 7573e35772b2Smrg # Transform .lo files to .o files. 757474c14cd6Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575e35772b2Smrg fi 7576e35772b2Smrg 7577e35772b2Smrg # Eliminate all temporary directories. 7578e35772b2Smrg #for path in $notinst_path; do 757974c14cd6Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 758074c14cd6Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 758174c14cd6Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582e35772b2Smrg #done 7583e35772b2Smrg 7584e35772b2Smrg if test -n "$xrpath"; then 7585e35772b2Smrg # If the user specified any rpath flags, then add them. 7586e35772b2Smrg temp_xrpath= 7587e35772b2Smrg for libdir in $xrpath; do 758874c14cd6Smrg func_replace_sysroot "$libdir" 758974c14cd6Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7590e35772b2Smrg case "$finalize_rpath " in 7591e35772b2Smrg *" $libdir "*) ;; 759274c14cd6Smrg *) func_append finalize_rpath " $libdir" ;; 7593e35772b2Smrg esac 7594e35772b2Smrg done 7595e35772b2Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596e35772b2Smrg dependency_libs="$temp_xrpath $dependency_libs" 7597e35772b2Smrg fi 7598e35772b2Smrg fi 7599e35772b2Smrg 7600e35772b2Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 7601e35772b2Smrg old_dlfiles="$dlfiles" 7602e35772b2Smrg dlfiles= 7603e35772b2Smrg for lib in $old_dlfiles; do 7604e35772b2Smrg case " $dlprefiles $dlfiles " in 7605e35772b2Smrg *" $lib "*) ;; 760674c14cd6Smrg *) func_append dlfiles " $lib" ;; 7607e35772b2Smrg esac 7608e35772b2Smrg done 7609e35772b2Smrg 7610e35772b2Smrg # Make sure dlprefiles contains only unique files 7611e35772b2Smrg old_dlprefiles="$dlprefiles" 7612e35772b2Smrg dlprefiles= 7613e35772b2Smrg for lib in $old_dlprefiles; do 7614e35772b2Smrg case "$dlprefiles " in 7615e35772b2Smrg *" $lib "*) ;; 761674c14cd6Smrg *) func_append dlprefiles " $lib" ;; 7617e35772b2Smrg esac 7618e35772b2Smrg done 7619e35772b2Smrg 7620e35772b2Smrg if test "$build_libtool_libs" = yes; then 7621e35772b2Smrg if test -n "$rpath"; then 7622e35772b2Smrg case $host in 762374c14cd6Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624e35772b2Smrg # these systems don't actually have a c library (as such)! 7625e35772b2Smrg ;; 7626e35772b2Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7627e35772b2Smrg # Rhapsody C library is in the System framework 762874c14cd6Smrg func_append deplibs " System.ltframework" 7629e35772b2Smrg ;; 7630e35772b2Smrg *-*-netbsd*) 7631e35772b2Smrg # Don't link with libc until the a.out ld.so is fixed. 7632e35772b2Smrg ;; 7633e35772b2Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634e35772b2Smrg # Do not include libc due to us having libc/libc_r. 7635e35772b2Smrg ;; 7636e35772b2Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7637e35772b2Smrg # Causes problems with __ctype 7638e35772b2Smrg ;; 7639e35772b2Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640e35772b2Smrg # Compiler inserts libc in the correct place for threads to work 7641e35772b2Smrg ;; 7642e35772b2Smrg *) 7643e35772b2Smrg # Add libc to deplibs on all other systems if necessary. 7644e35772b2Smrg if test "$build_libtool_need_lc" = "yes"; then 764574c14cd6Smrg func_append deplibs " -lc" 7646e35772b2Smrg fi 7647e35772b2Smrg ;; 7648e35772b2Smrg esac 7649e35772b2Smrg fi 7650e35772b2Smrg 7651e35772b2Smrg # Transform deplibs into only deplibs that can be linked in shared. 7652e35772b2Smrg name_save=$name 7653e35772b2Smrg libname_save=$libname 7654e35772b2Smrg release_save=$release 7655e35772b2Smrg versuffix_save=$versuffix 7656e35772b2Smrg major_save=$major 7657e35772b2Smrg # I'm not sure if I'm treating the release correctly. I think 7658e35772b2Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 7659e35772b2Smrg # add it in twice. Is that correct? 7660e35772b2Smrg release="" 7661e35772b2Smrg versuffix="" 7662e35772b2Smrg major="" 7663e35772b2Smrg newdeplibs= 7664e35772b2Smrg droppeddeps=no 7665e35772b2Smrg case $deplibs_check_method in 7666e35772b2Smrg pass_all) 7667e35772b2Smrg # Don't check for shared/static. Everything works. 7668e35772b2Smrg # This might be a little naive. We might want to check 7669e35772b2Smrg # whether the library exists or not. But this is on 7670e35772b2Smrg # osf3 & osf4 and I'm not really sure... Just 7671e35772b2Smrg # implementing what was already the behavior. 7672e35772b2Smrg newdeplibs=$deplibs 7673e35772b2Smrg ;; 7674e35772b2Smrg test_compile) 7675e35772b2Smrg # This code stresses the "libraries are programs" paradigm to its 7676e35772b2Smrg # limits. Maybe even breaks it. We compile a program, linking it 7677e35772b2Smrg # against the deplibs as a proxy for the library. Then we can check 7678e35772b2Smrg # whether they linked in statically or dynamically with ldd. 7679e35772b2Smrg $opt_dry_run || $RM conftest.c 7680e35772b2Smrg cat > conftest.c <<EOF 7681e35772b2Smrg int main() { return 0; } 7682e35772b2SmrgEOF 7683e35772b2Smrg $opt_dry_run || $RM conftest 7684e35772b2Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685e35772b2Smrg ldd_output=`ldd conftest` 7686e35772b2Smrg for i in $deplibs; do 7687e35772b2Smrg case $i in 7688e35772b2Smrg -l*) 7689e35772b2Smrg func_stripname -l '' "$i" 7690e35772b2Smrg name=$func_stripname_result 7691e35772b2Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692e35772b2Smrg case " $predeps $postdeps " in 7693e35772b2Smrg *" $i "*) 769474c14cd6Smrg func_append newdeplibs " $i" 7695e35772b2Smrg i="" 7696e35772b2Smrg ;; 7697e35772b2Smrg esac 7698e35772b2Smrg fi 7699e35772b2Smrg if test -n "$i" ; then 7700e35772b2Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7701e35772b2Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702e35772b2Smrg set dummy $deplib_matches; shift 7703e35772b2Smrg deplib_match=$1 7704e35772b2Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 770574c14cd6Smrg func_append newdeplibs " $i" 7706e35772b2Smrg else 7707e35772b2Smrg droppeddeps=yes 770874c14cd6Smrg echo 7709e35772b2Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 771074c14cd6Smrg echo "*** I have the capability to make that library automatically link in when" 771174c14cd6Smrg echo "*** you link to this library. But I can only do this if you have a" 771274c14cd6Smrg echo "*** shared version of the library, which I believe you do not have" 771374c14cd6Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 771474c14cd6Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715e35772b2Smrg fi 7716e35772b2Smrg fi 7717e35772b2Smrg ;; 7718e35772b2Smrg *) 771974c14cd6Smrg func_append newdeplibs " $i" 7720e35772b2Smrg ;; 7721e35772b2Smrg esac 7722e35772b2Smrg done 7723e35772b2Smrg else 7724e35772b2Smrg # Error occurred in the first compile. Let's try to salvage 7725e35772b2Smrg # the situation: Compile a separate program for each library. 7726e35772b2Smrg for i in $deplibs; do 7727e35772b2Smrg case $i in 7728e35772b2Smrg -l*) 7729e35772b2Smrg func_stripname -l '' "$i" 7730e35772b2Smrg name=$func_stripname_result 7731e35772b2Smrg $opt_dry_run || $RM conftest 7732e35772b2Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733e35772b2Smrg ldd_output=`ldd conftest` 7734e35772b2Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735e35772b2Smrg case " $predeps $postdeps " in 7736e35772b2Smrg *" $i "*) 773774c14cd6Smrg func_append newdeplibs " $i" 7738e35772b2Smrg i="" 7739e35772b2Smrg ;; 7740e35772b2Smrg esac 7741e35772b2Smrg fi 7742e35772b2Smrg if test -n "$i" ; then 7743e35772b2Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7744e35772b2Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745e35772b2Smrg set dummy $deplib_matches; shift 7746e35772b2Smrg deplib_match=$1 7747e35772b2Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 774874c14cd6Smrg func_append newdeplibs " $i" 7749e35772b2Smrg else 7750e35772b2Smrg droppeddeps=yes 775174c14cd6Smrg echo 7752e35772b2Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 775374c14cd6Smrg echo "*** I have the capability to make that library automatically link in when" 775474c14cd6Smrg echo "*** you link to this library. But I can only do this if you have a" 775574c14cd6Smrg echo "*** shared version of the library, which you do not appear to have" 775674c14cd6Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 775774c14cd6Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758e35772b2Smrg fi 7759e35772b2Smrg fi 7760e35772b2Smrg else 7761e35772b2Smrg droppeddeps=yes 776274c14cd6Smrg echo 7763e35772b2Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 776474c14cd6Smrg echo "*** make it link in! You will probably need to install it or some" 776574c14cd6Smrg echo "*** library that it depends on before this library will be fully" 776674c14cd6Smrg echo "*** functional. Installing it before continuing would be even better." 7767e35772b2Smrg fi 7768e35772b2Smrg ;; 7769e35772b2Smrg *) 777074c14cd6Smrg func_append newdeplibs " $i" 7771e35772b2Smrg ;; 7772e35772b2Smrg esac 7773e35772b2Smrg done 7774e35772b2Smrg fi 7775e35772b2Smrg ;; 7776e35772b2Smrg file_magic*) 7777e35772b2Smrg set dummy $deplibs_check_method; shift 7778e35772b2Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779e35772b2Smrg for a_deplib in $deplibs; do 7780e35772b2Smrg case $a_deplib in 7781e35772b2Smrg -l*) 7782e35772b2Smrg func_stripname -l '' "$a_deplib" 7783e35772b2Smrg name=$func_stripname_result 7784e35772b2Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785e35772b2Smrg case " $predeps $postdeps " in 7786e35772b2Smrg *" $a_deplib "*) 778774c14cd6Smrg func_append newdeplibs " $a_deplib" 7788e35772b2Smrg a_deplib="" 7789e35772b2Smrg ;; 7790e35772b2Smrg esac 7791e35772b2Smrg fi 7792e35772b2Smrg if test -n "$a_deplib" ; then 7793e35772b2Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 779474c14cd6Smrg if test -n "$file_magic_glob"; then 779574c14cd6Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 779674c14cd6Smrg else 779774c14cd6Smrg libnameglob=$libname 779874c14cd6Smrg fi 779974c14cd6Smrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800e35772b2Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 780174c14cd6Smrg if test "$want_nocaseglob" = yes; then 780274c14cd6Smrg shopt -s nocaseglob 780374c14cd6Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 780474c14cd6Smrg $nocaseglob 780574c14cd6Smrg else 780674c14cd6Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 780774c14cd6Smrg fi 7808e35772b2Smrg for potent_lib in $potential_libs; do 7809e35772b2Smrg # Follow soft links. 7810e35772b2Smrg if ls -lLd "$potent_lib" 2>/dev/null | 7811e35772b2Smrg $GREP " -> " >/dev/null; then 7812e35772b2Smrg continue 7813e35772b2Smrg fi 7814e35772b2Smrg # The statement above tries to avoid entering an 7815e35772b2Smrg # endless loop below, in case of cyclic links. 7816e35772b2Smrg # We might still enter an endless loop, since a link 7817e35772b2Smrg # loop can be closed while we follow links, 7818e35772b2Smrg # but so what? 7819e35772b2Smrg potlib="$potent_lib" 7820e35772b2Smrg while test -h "$potlib" 2>/dev/null; do 7821e35772b2Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822e35772b2Smrg case $potliblink in 7823e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 782474c14cd6Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825e35772b2Smrg esac 7826e35772b2Smrg done 7827e35772b2Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828e35772b2Smrg $SED -e 10q | 7829e35772b2Smrg $EGREP "$file_magic_regex" > /dev/null; then 783074c14cd6Smrg func_append newdeplibs " $a_deplib" 7831e35772b2Smrg a_deplib="" 7832e35772b2Smrg break 2 7833e35772b2Smrg fi 7834e35772b2Smrg done 7835e35772b2Smrg done 7836e35772b2Smrg fi 7837e35772b2Smrg if test -n "$a_deplib" ; then 7838e35772b2Smrg droppeddeps=yes 783974c14cd6Smrg echo 7840e35772b2Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 784174c14cd6Smrg echo "*** I have the capability to make that library automatically link in when" 784274c14cd6Smrg echo "*** you link to this library. But I can only do this if you have a" 784374c14cd6Smrg echo "*** shared version of the library, which you do not appear to have" 784474c14cd6Smrg echo "*** because I did check the linker path looking for a file starting" 7845e35772b2Smrg if test -z "$potlib" ; then 7846e35772b2Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847e35772b2Smrg else 7848e35772b2Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7849e35772b2Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 7850e35772b2Smrg fi 7851e35772b2Smrg fi 7852e35772b2Smrg ;; 7853e35772b2Smrg *) 7854e35772b2Smrg # Add a -L argument. 785574c14cd6Smrg func_append newdeplibs " $a_deplib" 7856e35772b2Smrg ;; 7857e35772b2Smrg esac 7858e35772b2Smrg done # Gone through all deplibs. 7859e35772b2Smrg ;; 7860e35772b2Smrg match_pattern*) 7861e35772b2Smrg set dummy $deplibs_check_method; shift 7862e35772b2Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863e35772b2Smrg for a_deplib in $deplibs; do 7864e35772b2Smrg case $a_deplib in 7865e35772b2Smrg -l*) 7866e35772b2Smrg func_stripname -l '' "$a_deplib" 7867e35772b2Smrg name=$func_stripname_result 7868e35772b2Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869e35772b2Smrg case " $predeps $postdeps " in 7870e35772b2Smrg *" $a_deplib "*) 787174c14cd6Smrg func_append newdeplibs " $a_deplib" 7872e35772b2Smrg a_deplib="" 7873e35772b2Smrg ;; 7874e35772b2Smrg esac 7875e35772b2Smrg fi 7876e35772b2Smrg if test -n "$a_deplib" ; then 7877e35772b2Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7878e35772b2Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879e35772b2Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880e35772b2Smrg for potent_lib in $potential_libs; do 7881e35772b2Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 788274c14cd6Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883e35772b2Smrg $EGREP "$match_pattern_regex" > /dev/null; then 788474c14cd6Smrg func_append newdeplibs " $a_deplib" 7885e35772b2Smrg a_deplib="" 7886e35772b2Smrg break 2 7887e35772b2Smrg fi 7888e35772b2Smrg done 7889e35772b2Smrg done 7890e35772b2Smrg fi 7891e35772b2Smrg if test -n "$a_deplib" ; then 7892e35772b2Smrg droppeddeps=yes 789374c14cd6Smrg echo 7894e35772b2Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 789574c14cd6Smrg echo "*** I have the capability to make that library automatically link in when" 789674c14cd6Smrg echo "*** you link to this library. But I can only do this if you have a" 789774c14cd6Smrg echo "*** shared version of the library, which you do not appear to have" 789874c14cd6Smrg echo "*** because I did check the linker path looking for a file starting" 7899e35772b2Smrg if test -z "$potlib" ; then 7900e35772b2Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901e35772b2Smrg else 7902e35772b2Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7903e35772b2Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904e35772b2Smrg fi 7905e35772b2Smrg fi 7906e35772b2Smrg ;; 7907e35772b2Smrg *) 7908e35772b2Smrg # Add a -L argument. 790974c14cd6Smrg func_append newdeplibs " $a_deplib" 7910e35772b2Smrg ;; 7911e35772b2Smrg esac 7912e35772b2Smrg done # Gone through all deplibs. 7913e35772b2Smrg ;; 7914e35772b2Smrg none | unknown | *) 7915e35772b2Smrg newdeplibs="" 791674c14cd6Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917e35772b2Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918e35772b2Smrg for i in $predeps $postdeps ; do 7919e35772b2Smrg # can't use Xsed below, because $i might contain '/' 792074c14cd6Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921e35772b2Smrg done 7922e35772b2Smrg fi 792374c14cd6Smrg case $tmp_deplibs in 792474c14cd6Smrg *[!\ \ ]*) 792574c14cd6Smrg echo 7926e35772b2Smrg if test "X$deplibs_check_method" = "Xnone"; then 792774c14cd6Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7928e35772b2Smrg else 792974c14cd6Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 7930e35772b2Smrg fi 793174c14cd6Smrg echo "*** All declared inter-library dependencies are being dropped." 7932e35772b2Smrg droppeddeps=yes 793374c14cd6Smrg ;; 793474c14cd6Smrg esac 7935e35772b2Smrg ;; 7936e35772b2Smrg esac 7937e35772b2Smrg versuffix=$versuffix_save 7938e35772b2Smrg major=$major_save 7939e35772b2Smrg release=$release_save 7940e35772b2Smrg libname=$libname_save 7941e35772b2Smrg name=$name_save 7942e35772b2Smrg 7943e35772b2Smrg case $host in 7944e35772b2Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7945e35772b2Smrg # On Rhapsody replace the C library with the System framework 794674c14cd6Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947e35772b2Smrg ;; 7948e35772b2Smrg esac 7949e35772b2Smrg 7950e35772b2Smrg if test "$droppeddeps" = yes; then 7951e35772b2Smrg if test "$module" = yes; then 795274c14cd6Smrg echo 795374c14cd6Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7954e35772b2Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 795574c14cd6Smrg echo "*** a static module, that should work as long as the dlopening" 795674c14cd6Smrg echo "*** application is linked with the -dlopen flag." 7957e35772b2Smrg if test -z "$global_symbol_pipe"; then 795874c14cd6Smrg echo 795974c14cd6Smrg echo "*** However, this would only work if libtool was able to extract symbol" 796074c14cd6Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 796174c14cd6Smrg echo "*** not find such a program. So, this module is probably useless." 796274c14cd6Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963e35772b2Smrg fi 7964e35772b2Smrg if test "$build_old_libs" = no; then 7965e35772b2Smrg oldlibs="$output_objdir/$libname.$libext" 7966e35772b2Smrg build_libtool_libs=module 7967e35772b2Smrg build_old_libs=yes 7968e35772b2Smrg else 7969e35772b2Smrg build_libtool_libs=no 7970e35772b2Smrg fi 7971e35772b2Smrg else 797274c14cd6Smrg echo "*** The inter-library dependencies that have been dropped here will be" 797374c14cd6Smrg echo "*** automatically added whenever a program is linked with this library" 797474c14cd6Smrg echo "*** or is declared to -dlopen it." 7975e35772b2Smrg 7976e35772b2Smrg if test "$allow_undefined" = no; then 797774c14cd6Smrg echo 797874c14cd6Smrg echo "*** Since this library must not contain undefined symbols," 797974c14cd6Smrg echo "*** because either the platform does not support them or" 798074c14cd6Smrg echo "*** it was explicitly requested with -no-undefined," 798174c14cd6Smrg echo "*** libtool will only create a static version of it." 7982e35772b2Smrg if test "$build_old_libs" = no; then 7983e35772b2Smrg oldlibs="$output_objdir/$libname.$libext" 7984e35772b2Smrg build_libtool_libs=module 7985e35772b2Smrg build_old_libs=yes 7986e35772b2Smrg else 7987e35772b2Smrg build_libtool_libs=no 7988e35772b2Smrg fi 7989e35772b2Smrg fi 7990e35772b2Smrg fi 7991e35772b2Smrg fi 7992e35772b2Smrg # Done checking deplibs! 7993e35772b2Smrg deplibs=$newdeplibs 7994e35772b2Smrg fi 7995e35772b2Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996e35772b2Smrg case $host in 7997e35772b2Smrg *-*-darwin*) 799874c14cd6Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 799974c14cd6Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 800074c14cd6Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001e35772b2Smrg ;; 8002e35772b2Smrg esac 8003e35772b2Smrg 8004e35772b2Smrg # move library search paths that coincide with paths to not yet 8005e35772b2Smrg # installed libraries to the beginning of the library search list 8006e35772b2Smrg new_libs= 8007e35772b2Smrg for path in $notinst_path; do 8008e35772b2Smrg case " $new_libs " in 8009e35772b2Smrg *" -L$path/$objdir "*) ;; 8010e35772b2Smrg *) 8011e35772b2Smrg case " $deplibs " in 8012e35772b2Smrg *" -L$path/$objdir "*) 801374c14cd6Smrg func_append new_libs " -L$path/$objdir" ;; 8014e35772b2Smrg esac 8015e35772b2Smrg ;; 8016e35772b2Smrg esac 8017e35772b2Smrg done 8018e35772b2Smrg for deplib in $deplibs; do 8019e35772b2Smrg case $deplib in 8020e35772b2Smrg -L*) 8021e35772b2Smrg case " $new_libs " in 8022e35772b2Smrg *" $deplib "*) ;; 802374c14cd6Smrg *) func_append new_libs " $deplib" ;; 8024e35772b2Smrg esac 8025e35772b2Smrg ;; 802674c14cd6Smrg *) func_append new_libs " $deplib" ;; 8027e35772b2Smrg esac 8028e35772b2Smrg done 8029e35772b2Smrg deplibs="$new_libs" 8030e35772b2Smrg 8031e35772b2Smrg # All the library-specific variables (install_libdir is set above). 8032e35772b2Smrg library_names= 8033e35772b2Smrg old_library= 8034e35772b2Smrg dlname= 8035e35772b2Smrg 8036e35772b2Smrg # Test again, we may have decided not to build it any more 8037e35772b2Smrg if test "$build_libtool_libs" = yes; then 803874c14cd6Smrg # Remove ${wl} instances when linking with ld. 803974c14cd6Smrg # FIXME: should test the right _cmds variable. 804074c14cd6Smrg case $archive_cmds in 804174c14cd6Smrg *\$LD\ *) wl= ;; 804274c14cd6Smrg esac 8043e35772b2Smrg if test "$hardcode_into_libs" = yes; then 8044e35772b2Smrg # Hardcode the library paths 8045e35772b2Smrg hardcode_libdirs= 8046e35772b2Smrg dep_rpath= 8047e35772b2Smrg rpath="$finalize_rpath" 804874c14cd6Smrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049e35772b2Smrg for libdir in $rpath; do 8050e35772b2Smrg if test -n "$hardcode_libdir_flag_spec"; then 8051e35772b2Smrg if test -n "$hardcode_libdir_separator"; then 805274c14cd6Smrg func_replace_sysroot "$libdir" 805374c14cd6Smrg libdir=$func_replace_sysroot_result 8054e35772b2Smrg if test -z "$hardcode_libdirs"; then 8055e35772b2Smrg hardcode_libdirs="$libdir" 8056e35772b2Smrg else 8057e35772b2Smrg # Just accumulate the unique libdirs. 8058e35772b2Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059e35772b2Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060e35772b2Smrg ;; 8061e35772b2Smrg *) 806274c14cd6Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063e35772b2Smrg ;; 8064e35772b2Smrg esac 8065e35772b2Smrg fi 8066e35772b2Smrg else 8067e35772b2Smrg eval flag=\"$hardcode_libdir_flag_spec\" 806874c14cd6Smrg func_append dep_rpath " $flag" 8069e35772b2Smrg fi 8070e35772b2Smrg elif test -n "$runpath_var"; then 8071e35772b2Smrg case "$perm_rpath " in 8072e35772b2Smrg *" $libdir "*) ;; 807374c14cd6Smrg *) func_append perm_rpath " $libdir" ;; 8074e35772b2Smrg esac 8075e35772b2Smrg fi 8076e35772b2Smrg done 8077e35772b2Smrg # Substitute the hardcoded libdirs into the rpath. 8078e35772b2Smrg if test -n "$hardcode_libdir_separator" && 8079e35772b2Smrg test -n "$hardcode_libdirs"; then 8080e35772b2Smrg libdir="$hardcode_libdirs" 808174c14cd6Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082e35772b2Smrg fi 8083e35772b2Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084e35772b2Smrg # We should set the runpath_var. 8085e35772b2Smrg rpath= 8086e35772b2Smrg for dir in $perm_rpath; do 808774c14cd6Smrg func_append rpath "$dir:" 8088e35772b2Smrg done 8089e35772b2Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090e35772b2Smrg fi 8091e35772b2Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092e35772b2Smrg fi 809372b676d7Smrg 8094e35772b2Smrg shlibpath="$finalize_shlibpath" 809574c14cd6Smrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096e35772b2Smrg if test -n "$shlibpath"; then 8097e35772b2Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098e35772b2Smrg fi 809972b676d7Smrg 8100e35772b2Smrg # Get the real and link names of the library. 8101e35772b2Smrg eval shared_ext=\"$shrext_cmds\" 8102e35772b2Smrg eval library_names=\"$library_names_spec\" 8103e35772b2Smrg set dummy $library_names 8104e35772b2Smrg shift 8105e35772b2Smrg realname="$1" 8106e35772b2Smrg shift 810772b676d7Smrg 8108e35772b2Smrg if test -n "$soname_spec"; then 8109e35772b2Smrg eval soname=\"$soname_spec\" 8110e35772b2Smrg else 8111e35772b2Smrg soname="$realname" 8112e35772b2Smrg fi 8113e35772b2Smrg if test -z "$dlname"; then 8114e35772b2Smrg dlname=$soname 8115e35772b2Smrg fi 811672b676d7Smrg 8117e35772b2Smrg lib="$output_objdir/$realname" 8118e35772b2Smrg linknames= 8119e35772b2Smrg for link 8120e35772b2Smrg do 812174c14cd6Smrg func_append linknames " $link" 8122e35772b2Smrg done 812372b676d7Smrg 8124e35772b2Smrg # Use standard objects if they are pic 812574c14cd6Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126e35772b2Smrg test "X$libobjs" = "X " && libobjs= 812772b676d7Smrg 8128e35772b2Smrg delfiles= 8129e35772b2Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130e35772b2Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131e35772b2Smrg export_symbols="$output_objdir/$libname.uexp" 813274c14cd6Smrg func_append delfiles " $export_symbols" 8133e35772b2Smrg fi 813472b676d7Smrg 8135e35772b2Smrg orig_export_symbols= 8136e35772b2Smrg case $host_os in 8137e35772b2Smrg cygwin* | mingw* | cegcc*) 8138e35772b2Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139e35772b2Smrg # exporting using user supplied symfile 8140e35772b2Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141e35772b2Smrg # and it's NOT already a .def file. Must figure out 8142e35772b2Smrg # which of the given symbols are data symbols and tag 8143e35772b2Smrg # them as such. So, trigger use of export_symbols_cmds. 8144e35772b2Smrg # export_symbols gets reassigned inside the "prepare 8145e35772b2Smrg # the list of exported symbols" if statement, so the 8146e35772b2Smrg # include_expsyms logic still works. 8147e35772b2Smrg orig_export_symbols="$export_symbols" 8148e35772b2Smrg export_symbols= 8149e35772b2Smrg always_export_symbols=yes 8150e35772b2Smrg fi 8151e35772b2Smrg fi 8152e35772b2Smrg ;; 8153e35772b2Smrg esac 815472b676d7Smrg 8155e35772b2Smrg # Prepare the list of exported symbols 8156e35772b2Smrg if test -z "$export_symbols"; then 8157e35772b2Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158e35772b2Smrg func_verbose "generating symbol list for \`$libname.la'" 8159e35772b2Smrg export_symbols="$output_objdir/$libname.exp" 8160e35772b2Smrg $opt_dry_run || $RM $export_symbols 8161e35772b2Smrg cmds=$export_symbols_cmds 8162e35772b2Smrg save_ifs="$IFS"; IFS='~' 816374c14cd6Smrg for cmd1 in $cmds; do 8164e35772b2Smrg IFS="$save_ifs" 816574c14cd6Smrg # Take the normal branch if the nm_file_list_spec branch 816674c14cd6Smrg # doesn't work or if tool conversion is not needed. 816774c14cd6Smrg case $nm_file_list_spec~$to_tool_file_cmd in 816874c14cd6Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 816974c14cd6Smrg try_normal_branch=yes 817074c14cd6Smrg eval cmd=\"$cmd1\" 817174c14cd6Smrg func_len " $cmd" 817274c14cd6Smrg len=$func_len_result 817374c14cd6Smrg ;; 817474c14cd6Smrg *) 817574c14cd6Smrg try_normal_branch=no 817674c14cd6Smrg ;; 817774c14cd6Smrg esac 817874c14cd6Smrg if test "$try_normal_branch" = yes \ 817974c14cd6Smrg && { test "$len" -lt "$max_cmd_len" \ 818074c14cd6Smrg || test "$max_cmd_len" -le -1; } 818174c14cd6Smrg then 818274c14cd6Smrg func_show_eval "$cmd" 'exit $?' 818374c14cd6Smrg skipped_export=false 818474c14cd6Smrg elif test -n "$nm_file_list_spec"; then 818574c14cd6Smrg func_basename "$output" 818674c14cd6Smrg output_la=$func_basename_result 818774c14cd6Smrg save_libobjs=$libobjs 818874c14cd6Smrg save_output=$output 818974c14cd6Smrg output=${output_objdir}/${output_la}.nm 819074c14cd6Smrg func_to_tool_file "$output" 819174c14cd6Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 819274c14cd6Smrg func_append delfiles " $output" 819374c14cd6Smrg func_verbose "creating $NM input file list: $output" 819474c14cd6Smrg for obj in $save_libobjs; do 819574c14cd6Smrg func_to_tool_file "$obj" 819674c14cd6Smrg $ECHO "$func_to_tool_file_result" 819774c14cd6Smrg done > "$output" 819874c14cd6Smrg eval cmd=\"$cmd1\" 8199e35772b2Smrg func_show_eval "$cmd" 'exit $?' 820074c14cd6Smrg output=$save_output 820174c14cd6Smrg libobjs=$save_libobjs 8202e35772b2Smrg skipped_export=false 8203e35772b2Smrg else 8204e35772b2Smrg # The command line is too long to execute in one step. 8205e35772b2Smrg func_verbose "using reloadable object file for export list..." 8206e35772b2Smrg skipped_export=: 8207e35772b2Smrg # Break out early, otherwise skipped_export may be 8208e35772b2Smrg # set to false by a later but shorter cmd. 8209e35772b2Smrg break 8210e35772b2Smrg fi 8211e35772b2Smrg done 8212e35772b2Smrg IFS="$save_ifs" 8213e35772b2Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214e35772b2Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215e35772b2Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216e35772b2Smrg fi 8217e35772b2Smrg fi 821872b676d7Smrg fi 821972b676d7Smrg 8220e35772b2Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221e35772b2Smrg tmp_export_symbols="$export_symbols" 8222e35772b2Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 822374c14cd6Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224e35772b2Smrg fi 822572b676d7Smrg 8226e35772b2Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227e35772b2Smrg # The given exports_symbols file has to be filtered, so filter it. 8228e35772b2Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229e35772b2Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230e35772b2Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8231e35772b2Smrg # though. Also, the filter scales superlinearly with the number of 8232e35772b2Smrg # global variables. join(1) would be nice here, but unfortunately 8233e35772b2Smrg # isn't a blessed tool. 8234e35772b2Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 823574c14cd6Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236e35772b2Smrg export_symbols=$output_objdir/$libname.def 8237e35772b2Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238e35772b2Smrg fi 823972b676d7Smrg 8240e35772b2Smrg tmp_deplibs= 8241e35772b2Smrg for test_deplib in $deplibs; do 8242e35772b2Smrg case " $convenience " in 8243e35772b2Smrg *" $test_deplib "*) ;; 8244e35772b2Smrg *) 824574c14cd6Smrg func_append tmp_deplibs " $test_deplib" 8246e35772b2Smrg ;; 8247e35772b2Smrg esac 8248e35772b2Smrg done 8249e35772b2Smrg deplibs="$tmp_deplibs" 825072b676d7Smrg 8251e35772b2Smrg if test -n "$convenience"; then 8252e35772b2Smrg if test -n "$whole_archive_flag_spec" && 8253e35772b2Smrg test "$compiler_needs_object" = yes && 8254e35772b2Smrg test -z "$libobjs"; then 8255e35772b2Smrg # extract the archives, so we have objects to list. 8256e35772b2Smrg # TODO: could optimize this to just extract one archive. 8257e35772b2Smrg whole_archive_flag_spec= 8258e35772b2Smrg fi 8259e35772b2Smrg if test -n "$whole_archive_flag_spec"; then 8260e35772b2Smrg save_libobjs=$libobjs 8261e35772b2Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262e35772b2Smrg test "X$libobjs" = "X " && libobjs= 8263e35772b2Smrg else 8264e35772b2Smrg gentop="$output_objdir/${outputname}x" 826574c14cd6Smrg func_append generated " $gentop" 826672b676d7Smrg 8267e35772b2Smrg func_extract_archives $gentop $convenience 826874c14cd6Smrg func_append libobjs " $func_extract_archives_result" 8269e35772b2Smrg test "X$libobjs" = "X " && libobjs= 8270e35772b2Smrg fi 827172b676d7Smrg fi 827272b676d7Smrg 8273e35772b2Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274e35772b2Smrg eval flag=\"$thread_safe_flag_spec\" 827574c14cd6Smrg func_append linker_flags " $flag" 827672b676d7Smrg fi 827772b676d7Smrg 8278e35772b2Smrg # Make a backup of the uninstalled library when relinking 827974c14cd6Smrg if test "$opt_mode" = relink; then 8280e35772b2Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281e35772b2Smrg fi 828272b676d7Smrg 8283e35772b2Smrg # Do each of the archive commands. 8284e35772b2Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8285e35772b2Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286e35772b2Smrg eval test_cmds=\"$module_expsym_cmds\" 8287e35772b2Smrg cmds=$module_expsym_cmds 8288e35772b2Smrg else 8289e35772b2Smrg eval test_cmds=\"$module_cmds\" 8290e35772b2Smrg cmds=$module_cmds 8291e35772b2Smrg fi 829272b676d7Smrg else 8293e35772b2Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294e35772b2Smrg eval test_cmds=\"$archive_expsym_cmds\" 8295e35772b2Smrg cmds=$archive_expsym_cmds 8296e35772b2Smrg else 8297e35772b2Smrg eval test_cmds=\"$archive_cmds\" 8298e35772b2Smrg cmds=$archive_cmds 8299e35772b2Smrg fi 830072b676d7Smrg fi 830172b676d7Smrg 8302e35772b2Smrg if test "X$skipped_export" != "X:" && 8303e35772b2Smrg func_len " $test_cmds" && 8304e35772b2Smrg len=$func_len_result && 8305e35772b2Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306e35772b2Smrg : 8307e35772b2Smrg else 8308e35772b2Smrg # The command line is too long to link in one step, link piecewise 8309e35772b2Smrg # or, if using GNU ld and skipped_export is not :, use a linker 8310e35772b2Smrg # script. 831172b676d7Smrg 8312e35772b2Smrg # Save the value of $output and $libobjs because we want to 8313e35772b2Smrg # use them later. If we have whole_archive_flag_spec, we 8314e35772b2Smrg # want to use save_libobjs as it was before 8315e35772b2Smrg # whole_archive_flag_spec was expanded, because we can't 8316e35772b2Smrg # assume the linker understands whole_archive_flag_spec. 8317e35772b2Smrg # This may have to be revisited, in case too many 8318e35772b2Smrg # convenience libraries get linked in and end up exceeding 8319e35772b2Smrg # the spec. 8320e35772b2Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321e35772b2Smrg save_libobjs=$libobjs 8322e35772b2Smrg fi 8323e35772b2Smrg save_output=$output 832474c14cd6Smrg func_basename "$output" 832574c14cd6Smrg output_la=$func_basename_result 832672b676d7Smrg 8327e35772b2Smrg # Clear the reloadable object creation command queue and 8328e35772b2Smrg # initialize k to one. 8329e35772b2Smrg test_cmds= 8330e35772b2Smrg concat_cmds= 8331e35772b2Smrg objlist= 8332e35772b2Smrg last_robj= 8333e35772b2Smrg k=1 8334e35772b2Smrg 8335e35772b2Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336e35772b2Smrg output=${output_objdir}/${output_la}.lnkscript 8337e35772b2Smrg func_verbose "creating GNU ld script: $output" 833874c14cd6Smrg echo 'INPUT (' > $output 8339e35772b2Smrg for obj in $save_libobjs 834072b676d7Smrg do 834174c14cd6Smrg func_to_tool_file "$obj" 834274c14cd6Smrg $ECHO "$func_to_tool_file_result" >> $output 8343e35772b2Smrg done 834474c14cd6Smrg echo ')' >> $output 834574c14cd6Smrg func_append delfiles " $output" 834674c14cd6Smrg func_to_tool_file "$output" 834774c14cd6Smrg output=$func_to_tool_file_result 8348e35772b2Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349e35772b2Smrg output=${output_objdir}/${output_la}.lnk 8350e35772b2Smrg func_verbose "creating linker input file list: $output" 8351e35772b2Smrg : > $output 8352e35772b2Smrg set x $save_libobjs 8353e35772b2Smrg shift 8354e35772b2Smrg firstobj= 8355e35772b2Smrg if test "$compiler_needs_object" = yes; then 8356e35772b2Smrg firstobj="$1 " 8357e35772b2Smrg shift 8358e35772b2Smrg fi 8359e35772b2Smrg for obj 8360e35772b2Smrg do 836174c14cd6Smrg func_to_tool_file "$obj" 836274c14cd6Smrg $ECHO "$func_to_tool_file_result" >> $output 8363e35772b2Smrg done 836474c14cd6Smrg func_append delfiles " $output" 836574c14cd6Smrg func_to_tool_file "$output" 836674c14cd6Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367e35772b2Smrg else 8368e35772b2Smrg if test -n "$save_libobjs"; then 8369e35772b2Smrg func_verbose "creating reloadable object files..." 8370e35772b2Smrg output=$output_objdir/$output_la-${k}.$objext 8371e35772b2Smrg eval test_cmds=\"$reload_cmds\" 8372e35772b2Smrg func_len " $test_cmds" 8373e35772b2Smrg len0=$func_len_result 8374e35772b2Smrg len=$len0 8375e35772b2Smrg 8376e35772b2Smrg # Loop over the list of objects to be linked. 8377e35772b2Smrg for obj in $save_libobjs 8378e35772b2Smrg do 8379e35772b2Smrg func_len " $obj" 8380e35772b2Smrg func_arith $len + $func_len_result 8381e35772b2Smrg len=$func_arith_result 8382e35772b2Smrg if test "X$objlist" = X || 8383e35772b2Smrg test "$len" -lt "$max_cmd_len"; then 8384e35772b2Smrg func_append objlist " $obj" 8385e35772b2Smrg else 8386e35772b2Smrg # The command $test_cmds is almost too long, add a 8387e35772b2Smrg # command to the queue. 8388e35772b2Smrg if test "$k" -eq 1 ; then 8389e35772b2Smrg # The first file doesn't have a previous command to add. 839074c14cd6Smrg reload_objs=$objlist 839174c14cd6Smrg eval concat_cmds=\"$reload_cmds\" 8392e35772b2Smrg else 8393e35772b2Smrg # All subsequent reloadable object files will link in 8394e35772b2Smrg # the last one created. 839574c14cd6Smrg reload_objs="$objlist $last_robj" 839674c14cd6Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397e35772b2Smrg fi 8398e35772b2Smrg last_robj=$output_objdir/$output_la-${k}.$objext 8399e35772b2Smrg func_arith $k + 1 8400e35772b2Smrg k=$func_arith_result 8401e35772b2Smrg output=$output_objdir/$output_la-${k}.$objext 840274c14cd6Smrg objlist=" $obj" 8403e35772b2Smrg func_len " $last_robj" 8404e35772b2Smrg func_arith $len0 + $func_len_result 8405e35772b2Smrg len=$func_arith_result 8406e35772b2Smrg fi 8407e35772b2Smrg done 8408e35772b2Smrg # Handle the remaining objects by creating one last 8409e35772b2Smrg # reloadable object file. All subsequent reloadable object 8410e35772b2Smrg # files will link in the last one created. 8411e35772b2Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 841274c14cd6Smrg reload_objs="$objlist $last_robj" 841374c14cd6Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414e35772b2Smrg if test -n "$last_robj"; then 8415e35772b2Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416e35772b2Smrg fi 841774c14cd6Smrg func_append delfiles " $output" 841872b676d7Smrg 8419e35772b2Smrg else 8420e35772b2Smrg output= 8421e35772b2Smrg fi 842272b676d7Smrg 8423e35772b2Smrg if ${skipped_export-false}; then 8424e35772b2Smrg func_verbose "generating symbol list for \`$libname.la'" 8425e35772b2Smrg export_symbols="$output_objdir/$libname.exp" 8426e35772b2Smrg $opt_dry_run || $RM $export_symbols 8427e35772b2Smrg libobjs=$output 8428e35772b2Smrg # Append the command to create the export file. 8429e35772b2Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430e35772b2Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431e35772b2Smrg if test -n "$last_robj"; then 8432e35772b2Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433e35772b2Smrg fi 843472b676d7Smrg fi 843572b676d7Smrg 8436e35772b2Smrg test -n "$save_libobjs" && 8437e35772b2Smrg func_verbose "creating a temporary reloadable object file: $output" 843872b676d7Smrg 8439e35772b2Smrg # Loop through the commands generated above and execute them. 8440e35772b2Smrg save_ifs="$IFS"; IFS='~' 8441e35772b2Smrg for cmd in $concat_cmds; do 8442e35772b2Smrg IFS="$save_ifs" 8443e35772b2Smrg $opt_silent || { 8444e35772b2Smrg func_quote_for_expand "$cmd" 8445e35772b2Smrg eval "func_echo $func_quote_for_expand_result" 8446e35772b2Smrg } 8447e35772b2Smrg $opt_dry_run || eval "$cmd" || { 8448e35772b2Smrg lt_exit=$? 8449e35772b2Smrg 8450e35772b2Smrg # Restore the uninstalled library and exit 845174c14cd6Smrg if test "$opt_mode" = relink; then 8452e35772b2Smrg ( cd "$output_objdir" && \ 8453e35772b2Smrg $RM "${realname}T" && \ 8454e35772b2Smrg $MV "${realname}U" "$realname" ) 8455e35772b2Smrg fi 845672b676d7Smrg 8457e35772b2Smrg exit $lt_exit 8458e35772b2Smrg } 8459e35772b2Smrg done 8460e35772b2Smrg IFS="$save_ifs" 846172b676d7Smrg 8462e35772b2Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463e35772b2Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464e35772b2Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 846572b676d7Smrg fi 846672b676d7Smrg fi 846772b676d7Smrg 8468e35772b2Smrg if ${skipped_export-false}; then 8469e35772b2Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470e35772b2Smrg tmp_export_symbols="$export_symbols" 8471e35772b2Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 847274c14cd6Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473e35772b2Smrg fi 847472b676d7Smrg 8475e35772b2Smrg if test -n "$orig_export_symbols"; then 8476e35772b2Smrg # The given exports_symbols file has to be filtered, so filter it. 8477e35772b2Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478e35772b2Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479e35772b2Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8480e35772b2Smrg # though. Also, the filter scales superlinearly with the number of 8481e35772b2Smrg # global variables. join(1) would be nice here, but unfortunately 8482e35772b2Smrg # isn't a blessed tool. 8483e35772b2Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 848474c14cd6Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485e35772b2Smrg export_symbols=$output_objdir/$libname.def 8486e35772b2Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487e35772b2Smrg fi 8488e35772b2Smrg fi 848972b676d7Smrg 8490e35772b2Smrg libobjs=$output 8491e35772b2Smrg # Restore the value of output. 8492e35772b2Smrg output=$save_output 849372b676d7Smrg 8494e35772b2Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495e35772b2Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496e35772b2Smrg test "X$libobjs" = "X " && libobjs= 8497e35772b2Smrg fi 8498e35772b2Smrg # Expand the library linking commands again to reset the 8499e35772b2Smrg # value of $libobjs for piecewise linking. 850072b676d7Smrg 8501e35772b2Smrg # Do each of the archive commands. 8502e35772b2Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8503e35772b2Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504e35772b2Smrg cmds=$module_expsym_cmds 8505e35772b2Smrg else 8506e35772b2Smrg cmds=$module_cmds 850772b676d7Smrg fi 850872b676d7Smrg else 8509e35772b2Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510e35772b2Smrg cmds=$archive_expsym_cmds 8511e35772b2Smrg else 8512e35772b2Smrg cmds=$archive_cmds 8513e35772b2Smrg fi 851472b676d7Smrg fi 8515e35772b2Smrg fi 851672b676d7Smrg 8517e35772b2Smrg if test -n "$delfiles"; then 8518e35772b2Smrg # Append the command to remove temporary files to $cmds. 8519e35772b2Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 8520e35772b2Smrg fi 852172b676d7Smrg 8522e35772b2Smrg # Add any objects from preloaded convenience libraries 8523e35772b2Smrg if test -n "$dlprefiles"; then 8524e35772b2Smrg gentop="$output_objdir/${outputname}x" 852574c14cd6Smrg func_append generated " $gentop" 852672b676d7Smrg 8527e35772b2Smrg func_extract_archives $gentop $dlprefiles 852874c14cd6Smrg func_append libobjs " $func_extract_archives_result" 8529e35772b2Smrg test "X$libobjs" = "X " && libobjs= 8530e35772b2Smrg fi 853172b676d7Smrg 8532e35772b2Smrg save_ifs="$IFS"; IFS='~' 8533e35772b2Smrg for cmd in $cmds; do 8534e35772b2Smrg IFS="$save_ifs" 8535e35772b2Smrg eval cmd=\"$cmd\" 8536e35772b2Smrg $opt_silent || { 8537e35772b2Smrg func_quote_for_expand "$cmd" 8538e35772b2Smrg eval "func_echo $func_quote_for_expand_result" 8539e35772b2Smrg } 8540e35772b2Smrg $opt_dry_run || eval "$cmd" || { 8541e35772b2Smrg lt_exit=$? 854272b676d7Smrg 8543e35772b2Smrg # Restore the uninstalled library and exit 854474c14cd6Smrg if test "$opt_mode" = relink; then 8545e35772b2Smrg ( cd "$output_objdir" && \ 8546e35772b2Smrg $RM "${realname}T" && \ 8547e35772b2Smrg $MV "${realname}U" "$realname" ) 8548e35772b2Smrg fi 854972b676d7Smrg 8550e35772b2Smrg exit $lt_exit 8551e35772b2Smrg } 8552e35772b2Smrg done 8553e35772b2Smrg IFS="$save_ifs" 855472b676d7Smrg 8555e35772b2Smrg # Restore the uninstalled library and exit 855674c14cd6Smrg if test "$opt_mode" = relink; then 8557e35772b2Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 855872b676d7Smrg 8559e35772b2Smrg if test -n "$convenience"; then 8560e35772b2Smrg if test -z "$whole_archive_flag_spec"; then 8561e35772b2Smrg func_show_eval '${RM}r "$gentop"' 8562e35772b2Smrg fi 8563e35772b2Smrg fi 856472b676d7Smrg 8565e35772b2Smrg exit $EXIT_SUCCESS 8566e35772b2Smrg fi 8567e35772b2Smrg 8568e35772b2Smrg # Create links to the real library. 8569e35772b2Smrg for linkname in $linknames; do 8570e35772b2Smrg if test "$realname" != "$linkname"; then 8571e35772b2Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 857272b676d7Smrg fi 857372b676d7Smrg done 857472b676d7Smrg 8575e35772b2Smrg # If -module or -export-dynamic was specified, set the dlname. 8576e35772b2Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 8577e35772b2Smrg # On all known operating systems, these are identical. 8578e35772b2Smrg dlname="$soname" 8579e35772b2Smrg fi 8580e35772b2Smrg fi 858172b676d7Smrg ;; 858272b676d7Smrg 8583e35772b2Smrg obj) 8584e35772b2Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585e35772b2Smrg func_warning "\`-dlopen' is ignored for objects" 8586e35772b2Smrg fi 858772b676d7Smrg 8588e35772b2Smrg case " $deplibs" in 8589e35772b2Smrg *\ -l* | *\ -L*) 8590e35772b2Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 859172b676d7Smrg esac 859272b676d7Smrg 8593e35772b2Smrg test -n "$rpath" && \ 8594e35772b2Smrg func_warning "\`-rpath' is ignored for objects" 8595e35772b2Smrg 8596e35772b2Smrg test -n "$xrpath" && \ 8597e35772b2Smrg func_warning "\`-R' is ignored for objects" 859872b676d7Smrg 8599e35772b2Smrg test -n "$vinfo" && \ 8600e35772b2Smrg func_warning "\`-version-info' is ignored for objects" 860172b676d7Smrg 8602e35772b2Smrg test -n "$release" && \ 8603e35772b2Smrg func_warning "\`-release' is ignored for objects" 8604e35772b2Smrg 8605e35772b2Smrg case $output in 8606e35772b2Smrg *.lo) 8607e35772b2Smrg test -n "$objs$old_deplibs" && \ 8608e35772b2Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609e35772b2Smrg 8610e35772b2Smrg libobj=$output 8611e35772b2Smrg func_lo2o "$libobj" 8612e35772b2Smrg obj=$func_lo2o_result 861372b676d7Smrg ;; 861472b676d7Smrg *) 8615e35772b2Smrg libobj= 8616e35772b2Smrg obj="$output" 861772b676d7Smrg ;; 861872b676d7Smrg esac 861972b676d7Smrg 8620e35772b2Smrg # Delete the old objects. 8621e35772b2Smrg $opt_dry_run || $RM $obj $libobj 862272b676d7Smrg 8623e35772b2Smrg # Objects from convenience libraries. This assumes 8624e35772b2Smrg # single-version convenience libraries. Whenever we create 8625e35772b2Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 8626e35772b2Smrg # the extraction. 8627e35772b2Smrg reload_conv_objs= 8628e35772b2Smrg gentop= 8629e35772b2Smrg # reload_cmds runs $LD directly, so let us get rid of 8630e35772b2Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 8631e35772b2Smrg # turning comma into space.. 8632e35772b2Smrg wl= 863372b676d7Smrg 8634e35772b2Smrg if test -n "$convenience"; then 8635e35772b2Smrg if test -n "$whole_archive_flag_spec"; then 8636e35772b2Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 863774c14cd6Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638e35772b2Smrg else 8639e35772b2Smrg gentop="$output_objdir/${obj}x" 864074c14cd6Smrg func_append generated " $gentop" 864172b676d7Smrg 8642e35772b2Smrg func_extract_archives $gentop $convenience 8643e35772b2Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644e35772b2Smrg fi 864572b676d7Smrg fi 864672b676d7Smrg 864774c14cd6Smrg # If we're not building shared, we need to use non_pic_objs 864874c14cd6Smrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 864974c14cd6Smrg 8650e35772b2Smrg # Create the old-style object. 865174c14cd6Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 865272b676d7Smrg 8653e35772b2Smrg output="$obj" 8654e35772b2Smrg func_execute_cmds "$reload_cmds" 'exit $?' 865572b676d7Smrg 8656e35772b2Smrg # Exit if we aren't doing a library object file. 8657e35772b2Smrg if test -z "$libobj"; then 8658e35772b2Smrg if test -n "$gentop"; then 8659e35772b2Smrg func_show_eval '${RM}r "$gentop"' 8660e35772b2Smrg fi 8661e35772b2Smrg 8662e35772b2Smrg exit $EXIT_SUCCESS 866372b676d7Smrg fi 8664e35772b2Smrg 8665e35772b2Smrg if test "$build_libtool_libs" != yes; then 8666e35772b2Smrg if test -n "$gentop"; then 8667e35772b2Smrg func_show_eval '${RM}r "$gentop"' 8668e35772b2Smrg fi 8669e35772b2Smrg 8670e35772b2Smrg # Create an invalid libtool object if no PIC, so that we don't 8671e35772b2Smrg # accidentally link it into a program. 8672e35772b2Smrg # $show "echo timestamp > $libobj" 8673e35772b2Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674e35772b2Smrg exit $EXIT_SUCCESS 8675e35772b2Smrg fi 8676e35772b2Smrg 8677e35772b2Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8678e35772b2Smrg # Only do commands if we really have different PIC objects. 8679e35772b2Smrg reload_objs="$libobjs $reload_conv_objs" 8680e35772b2Smrg output="$libobj" 8681e35772b2Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8682e35772b2Smrg fi 8683e35772b2Smrg 8684e35772b2Smrg if test -n "$gentop"; then 8685e35772b2Smrg func_show_eval '${RM}r "$gentop"' 8686e35772b2Smrg fi 8687e35772b2Smrg 8688e35772b2Smrg exit $EXIT_SUCCESS 868972b676d7Smrg ;; 869072b676d7Smrg 8691e35772b2Smrg prog) 8692e35772b2Smrg case $host in 8693e35772b2Smrg *cygwin*) func_stripname '' '.exe' "$output" 8694e35772b2Smrg output=$func_stripname_result.exe;; 8695e35772b2Smrg esac 8696e35772b2Smrg test -n "$vinfo" && \ 8697e35772b2Smrg func_warning "\`-version-info' is ignored for programs" 869872b676d7Smrg 8699e35772b2Smrg test -n "$release" && \ 8700e35772b2Smrg func_warning "\`-release' is ignored for programs" 870172b676d7Smrg 8702e35772b2Smrg test "$preload" = yes \ 8703e35772b2Smrg && test "$dlopen_support" = unknown \ 8704e35772b2Smrg && test "$dlopen_self" = unknown \ 8705e35772b2Smrg && test "$dlopen_self_static" = unknown && \ 8706e35772b2Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707e35772b2Smrg 8708e35772b2Smrg case $host in 8709e35772b2Smrg *-*-rhapsody* | *-*-darwin1.[012]) 8710e35772b2Smrg # On Rhapsody replace the C library is the System framework 871174c14cd6Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 871274c14cd6Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 871372b676d7Smrg ;; 8714e35772b2Smrg esac 871572b676d7Smrg 8716e35772b2Smrg case $host in 8717e35772b2Smrg *-*-darwin*) 8718e35772b2Smrg # Don't allow lazy linking, it breaks C++ global constructors 8719e35772b2Smrg # But is supposedly fixed on 10.4 or later (yay!). 8720e35772b2Smrg if test "$tagname" = CXX ; then 8721e35772b2Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722e35772b2Smrg 10.[0123]) 872374c14cd6Smrg func_append compile_command " ${wl}-bind_at_load" 872474c14cd6Smrg func_append finalize_command " ${wl}-bind_at_load" 8725e35772b2Smrg ;; 8726e35772b2Smrg esac 872772b676d7Smrg fi 8728e35772b2Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 872974c14cd6Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 873074c14cd6Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731e35772b2Smrg ;; 8732e35772b2Smrg esac 873372b676d7Smrg 873472b676d7Smrg 8735e35772b2Smrg # move library search paths that coincide with paths to not yet 8736e35772b2Smrg # installed libraries to the beginning of the library search list 8737e35772b2Smrg new_libs= 8738e35772b2Smrg for path in $notinst_path; do 8739e35772b2Smrg case " $new_libs " in 8740e35772b2Smrg *" -L$path/$objdir "*) ;; 8741e35772b2Smrg *) 8742e35772b2Smrg case " $compile_deplibs " in 8743e35772b2Smrg *" -L$path/$objdir "*) 874474c14cd6Smrg func_append new_libs " -L$path/$objdir" ;; 874572b676d7Smrg esac 8746e35772b2Smrg ;; 8747e35772b2Smrg esac 8748e35772b2Smrg done 8749e35772b2Smrg for deplib in $compile_deplibs; do 8750e35772b2Smrg case $deplib in 8751e35772b2Smrg -L*) 8752e35772b2Smrg case " $new_libs " in 8753e35772b2Smrg *" $deplib "*) ;; 875474c14cd6Smrg *) func_append new_libs " $deplib" ;; 875572b676d7Smrg esac 8756e35772b2Smrg ;; 875774c14cd6Smrg *) func_append new_libs " $deplib" ;; 8758e35772b2Smrg esac 8759e35772b2Smrg done 8760e35772b2Smrg compile_deplibs="$new_libs" 876172b676d7Smrg 876272b676d7Smrg 876374c14cd6Smrg func_append compile_command " $compile_deplibs" 876474c14cd6Smrg func_append finalize_command " $finalize_deplibs" 876572b676d7Smrg 8766e35772b2Smrg if test -n "$rpath$xrpath"; then 8767e35772b2Smrg # If the user specified any rpath flags, then add them. 8768e35772b2Smrg for libdir in $rpath $xrpath; do 8769e35772b2Smrg # This is the magic to use -rpath. 8770e35772b2Smrg case "$finalize_rpath " in 8771e35772b2Smrg *" $libdir "*) ;; 877274c14cd6Smrg *) func_append finalize_rpath " $libdir" ;; 8773e35772b2Smrg esac 8774e35772b2Smrg done 8775e35772b2Smrg fi 877672b676d7Smrg 8777e35772b2Smrg # Now hardcode the library paths 8778e35772b2Smrg rpath= 8779e35772b2Smrg hardcode_libdirs= 8780e35772b2Smrg for libdir in $compile_rpath $finalize_rpath; do 8781e35772b2Smrg if test -n "$hardcode_libdir_flag_spec"; then 8782e35772b2Smrg if test -n "$hardcode_libdir_separator"; then 8783e35772b2Smrg if test -z "$hardcode_libdirs"; then 8784e35772b2Smrg hardcode_libdirs="$libdir" 8785e35772b2Smrg else 8786e35772b2Smrg # Just accumulate the unique libdirs. 8787e35772b2Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788e35772b2Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789e35772b2Smrg ;; 8790e35772b2Smrg *) 879174c14cd6Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792e35772b2Smrg ;; 8793e35772b2Smrg esac 8794e35772b2Smrg fi 879572b676d7Smrg else 8796e35772b2Smrg eval flag=\"$hardcode_libdir_flag_spec\" 879774c14cd6Smrg func_append rpath " $flag" 879872b676d7Smrg fi 8799e35772b2Smrg elif test -n "$runpath_var"; then 8800e35772b2Smrg case "$perm_rpath " in 8801e35772b2Smrg *" $libdir "*) ;; 880274c14cd6Smrg *) func_append perm_rpath " $libdir" ;; 8803e35772b2Smrg esac 8804e35772b2Smrg fi 8805e35772b2Smrg case $host in 8806e35772b2Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807e35772b2Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808e35772b2Smrg case :$dllsearchpath: in 8809e35772b2Smrg *":$libdir:"*) ;; 8810e35772b2Smrg ::) dllsearchpath=$libdir;; 881174c14cd6Smrg *) func_append dllsearchpath ":$libdir";; 8812e35772b2Smrg esac 8813e35772b2Smrg case :$dllsearchpath: in 8814e35772b2Smrg *":$testbindir:"*) ;; 8815e35772b2Smrg ::) dllsearchpath=$testbindir;; 881674c14cd6Smrg *) func_append dllsearchpath ":$testbindir";; 8817e35772b2Smrg esac 8818e35772b2Smrg ;; 8819e35772b2Smrg esac 8820e35772b2Smrg done 8821e35772b2Smrg # Substitute the hardcoded libdirs into the rpath. 8822e35772b2Smrg if test -n "$hardcode_libdir_separator" && 8823e35772b2Smrg test -n "$hardcode_libdirs"; then 8824e35772b2Smrg libdir="$hardcode_libdirs" 8825e35772b2Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8826e35772b2Smrg fi 8827e35772b2Smrg compile_rpath="$rpath" 882872b676d7Smrg 8829e35772b2Smrg rpath= 8830e35772b2Smrg hardcode_libdirs= 8831e35772b2Smrg for libdir in $finalize_rpath; do 8832e35772b2Smrg if test -n "$hardcode_libdir_flag_spec"; then 8833e35772b2Smrg if test -n "$hardcode_libdir_separator"; then 8834e35772b2Smrg if test -z "$hardcode_libdirs"; then 8835e35772b2Smrg hardcode_libdirs="$libdir" 8836e35772b2Smrg else 8837e35772b2Smrg # Just accumulate the unique libdirs. 8838e35772b2Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839e35772b2Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840e35772b2Smrg ;; 8841e35772b2Smrg *) 884274c14cd6Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843e35772b2Smrg ;; 8844e35772b2Smrg esac 8845e35772b2Smrg fi 884672b676d7Smrg else 8847e35772b2Smrg eval flag=\"$hardcode_libdir_flag_spec\" 884874c14cd6Smrg func_append rpath " $flag" 884972b676d7Smrg fi 8850e35772b2Smrg elif test -n "$runpath_var"; then 8851e35772b2Smrg case "$finalize_perm_rpath " in 8852e35772b2Smrg *" $libdir "*) ;; 885374c14cd6Smrg *) func_append finalize_perm_rpath " $libdir" ;; 8854e35772b2Smrg esac 885572b676d7Smrg fi 8856e35772b2Smrg done 8857e35772b2Smrg # Substitute the hardcoded libdirs into the rpath. 8858e35772b2Smrg if test -n "$hardcode_libdir_separator" && 8859e35772b2Smrg test -n "$hardcode_libdirs"; then 8860e35772b2Smrg libdir="$hardcode_libdirs" 8861e35772b2Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8862e35772b2Smrg fi 8863e35772b2Smrg finalize_rpath="$rpath" 886472b676d7Smrg 8865e35772b2Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866e35772b2Smrg # Transform all the library objects into standard objects. 886774c14cd6Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 886874c14cd6Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869e35772b2Smrg fi 887072b676d7Smrg 8871e35772b2Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 887272b676d7Smrg 8873e35772b2Smrg # template prelinking step 8874e35772b2Smrg if test -n "$prelink_cmds"; then 8875e35772b2Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 8876e35772b2Smrg fi 887772b676d7Smrg 8878e35772b2Smrg wrappers_required=yes 8879e35772b2Smrg case $host in 888074c14cd6Smrg *cegcc* | *mingw32ce*) 888174c14cd6Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 888274c14cd6Smrg wrappers_required=no 888374c14cd6Smrg ;; 8884e35772b2Smrg *cygwin* | *mingw* ) 8885e35772b2Smrg if test "$build_libtool_libs" != yes; then 8886e35772b2Smrg wrappers_required=no 8887e35772b2Smrg fi 8888e35772b2Smrg ;; 8889e35772b2Smrg *) 8890e35772b2Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891e35772b2Smrg wrappers_required=no 8892e35772b2Smrg fi 8893e35772b2Smrg ;; 8894e35772b2Smrg esac 8895e35772b2Smrg if test "$wrappers_required" = no; then 8896e35772b2Smrg # Replace the output file specification. 889774c14cd6Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898e35772b2Smrg link_command="$compile_command$compile_rpath" 889972b676d7Smrg 8900e35772b2Smrg # We have no uninstalled library dependencies, so finalize right now. 8901e35772b2Smrg exit_status=0 8902e35772b2Smrg func_show_eval "$link_command" 'exit_status=$?' 890372b676d7Smrg 890474c14cd6Smrg if test -n "$postlink_cmds"; then 890574c14cd6Smrg func_to_tool_file "$output" 890674c14cd6Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 890774c14cd6Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 890874c14cd6Smrg fi 890974c14cd6Smrg 8910e35772b2Smrg # Delete the generated files. 8911e35772b2Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8912e35772b2Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 891372b676d7Smrg fi 891472b676d7Smrg 8915e35772b2Smrg exit $exit_status 8916e35772b2Smrg fi 891772b676d7Smrg 8918e35772b2Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919e35772b2Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920e35772b2Smrg fi 8921e35772b2Smrg if test -n "$finalize_shlibpath"; then 8922e35772b2Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923e35772b2Smrg fi 892472b676d7Smrg 8925e35772b2Smrg compile_var= 8926e35772b2Smrg finalize_var= 8927e35772b2Smrg if test -n "$runpath_var"; then 8928e35772b2Smrg if test -n "$perm_rpath"; then 8929e35772b2Smrg # We should set the runpath_var. 8930e35772b2Smrg rpath= 8931e35772b2Smrg for dir in $perm_rpath; do 893274c14cd6Smrg func_append rpath "$dir:" 8933e35772b2Smrg done 8934e35772b2Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 893572b676d7Smrg fi 8936e35772b2Smrg if test -n "$finalize_perm_rpath"; then 8937e35772b2Smrg # We should set the runpath_var. 8938e35772b2Smrg rpath= 8939e35772b2Smrg for dir in $finalize_perm_rpath; do 894074c14cd6Smrg func_append rpath "$dir:" 8941e35772b2Smrg done 8942e35772b2Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 894372b676d7Smrg fi 8944e35772b2Smrg fi 894572b676d7Smrg 8946e35772b2Smrg if test "$no_install" = yes; then 8947e35772b2Smrg # We don't need to create a wrapper script. 8948e35772b2Smrg link_command="$compile_var$compile_command$compile_rpath" 8949e35772b2Smrg # Replace the output file specification. 895074c14cd6Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951e35772b2Smrg # Delete the old output file. 8952e35772b2Smrg $opt_dry_run || $RM $output 8953e35772b2Smrg # Link the executable and exit 8954e35772b2Smrg func_show_eval "$link_command" 'exit $?' 895574c14cd6Smrg 895674c14cd6Smrg if test -n "$postlink_cmds"; then 895774c14cd6Smrg func_to_tool_file "$output" 895874c14cd6Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 895974c14cd6Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 896074c14cd6Smrg fi 896174c14cd6Smrg 896272b676d7Smrg exit $EXIT_SUCCESS 8963e35772b2Smrg fi 896472b676d7Smrg 8965e35772b2Smrg if test "$hardcode_action" = relink; then 8966e35772b2Smrg # Fast installation is not supported 8967e35772b2Smrg link_command="$compile_var$compile_command$compile_rpath" 8968e35772b2Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8969e35772b2Smrg 8970e35772b2Smrg func_warning "this platform does not like uninstalled shared libraries" 8971e35772b2Smrg func_warning "\`$output' will be relinked during installation" 8972e35772b2Smrg else 8973e35772b2Smrg if test "$fast_install" != no; then 8974e35772b2Smrg link_command="$finalize_var$compile_command$finalize_rpath" 8975e35772b2Smrg if test "$fast_install" = yes; then 897674c14cd6Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977e35772b2Smrg else 8978e35772b2Smrg # fast_install is set to needless 8979e35772b2Smrg relink_command= 8980e35772b2Smrg fi 898172b676d7Smrg else 8982e35772b2Smrg link_command="$compile_var$compile_command$compile_rpath" 8983e35772b2Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 898472b676d7Smrg fi 8985e35772b2Smrg fi 898672b676d7Smrg 8987e35772b2Smrg # Replace the output file specification. 898874c14cd6Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 898972b676d7Smrg 8990e35772b2Smrg # Delete the old output files. 8991e35772b2Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 899272b676d7Smrg 8993e35772b2Smrg func_show_eval "$link_command" 'exit $?' 899472b676d7Smrg 899574c14cd6Smrg if test -n "$postlink_cmds"; then 899674c14cd6Smrg func_to_tool_file "$output_objdir/$outputname" 899774c14cd6Smrg 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'` 899874c14cd6Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 899974c14cd6Smrg fi 900074c14cd6Smrg 9001e35772b2Smrg # Now create the wrapper script. 9002e35772b2Smrg func_verbose "creating $output" 900372b676d7Smrg 9004e35772b2Smrg # Quote the relink command for shipping. 9005e35772b2Smrg if test -n "$relink_command"; then 9006e35772b2Smrg # Preserve any variables that may affect compiler behavior 9007e35772b2Smrg for var in $variables_saved_for_relink; do 9008e35772b2Smrg if eval test -z \"\${$var+set}\"; then 9009e35772b2Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010e35772b2Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9011e35772b2Smrg relink_command="$var=; export $var; $relink_command" 901272b676d7Smrg else 9013e35772b2Smrg func_quote_for_eval "$var_value" 9014e35772b2Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 901572b676d7Smrg fi 9016e35772b2Smrg done 9017e35772b2Smrg relink_command="(cd `pwd`; $relink_command)" 901874c14cd6Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019e35772b2Smrg fi 9020e35772b2Smrg 9021e35772b2Smrg # Only actually do things if not in dry run mode. 9022e35772b2Smrg $opt_dry_run || { 9023e35772b2Smrg # win32 will think the script is a binary if it has 9024e35772b2Smrg # a .exe suffix, so we strip it off here. 9025e35772b2Smrg case $output in 9026e35772b2Smrg *.exe) func_stripname '' '.exe' "$output" 9027e35772b2Smrg output=$func_stripname_result ;; 9028e35772b2Smrg esac 9029e35772b2Smrg # test for cygwin because mv fails w/o .exe extensions 9030e35772b2Smrg case $host in 9031e35772b2Smrg *cygwin*) 9032e35772b2Smrg exeext=.exe 9033e35772b2Smrg func_stripname '' '.exe' "$outputname" 9034e35772b2Smrg outputname=$func_stripname_result ;; 9035e35772b2Smrg *) exeext= ;; 903672b676d7Smrg esac 9037e35772b2Smrg case $host in 9038e35772b2Smrg *cygwin* | *mingw* ) 9039e35772b2Smrg func_dirname_and_basename "$output" "" "." 9040e35772b2Smrg output_name=$func_basename_result 9041e35772b2Smrg output_path=$func_dirname_result 9042e35772b2Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043e35772b2Smrg cwrapper="$output_path/$output_name.exe" 9044e35772b2Smrg $RM $cwrappersource $cwrapper 9045e35772b2Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046e35772b2Smrg 9047e35772b2Smrg func_emit_cwrapperexe_src > $cwrappersource 9048e35772b2Smrg 9049e35772b2Smrg # The wrapper executable is built using the $host compiler, 9050e35772b2Smrg # because it contains $host paths and files. If cross- 9051e35772b2Smrg # compiling, it, like the target executable, must be 9052e35772b2Smrg # executed on the $host or under an emulation environment. 9053e35772b2Smrg $opt_dry_run || { 9054e35772b2Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055e35772b2Smrg $STRIP $cwrapper 9056e35772b2Smrg } 905772b676d7Smrg 9058e35772b2Smrg # Now, create the wrapper script for func_source use: 9059e35772b2Smrg func_ltwrapper_scriptname $cwrapper 9060e35772b2Smrg $RM $func_ltwrapper_scriptname_result 9061e35772b2Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062e35772b2Smrg $opt_dry_run || { 9063e35772b2Smrg # note: this script will not be executed, so do not chmod. 9064e35772b2Smrg if test "x$build" = "x$host" ; then 9065e35772b2Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066e35772b2Smrg else 9067e35772b2Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068e35772b2Smrg fi 9069e35772b2Smrg } 9070e35772b2Smrg ;; 9071e35772b2Smrg * ) 9072e35772b2Smrg $RM $output 9073e35772b2Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 907472b676d7Smrg 9075e35772b2Smrg func_emit_wrapper no > $output 9076e35772b2Smrg chmod +x $output 9077e35772b2Smrg ;; 9078e35772b2Smrg esac 9079e35772b2Smrg } 9080e35772b2Smrg exit $EXIT_SUCCESS 9081e35772b2Smrg ;; 9082e35772b2Smrg esac 908372b676d7Smrg 9084e35772b2Smrg # See if we need to build an old-fashioned archive. 9085e35772b2Smrg for oldlib in $oldlibs; do 908672b676d7Smrg 9087e35772b2Smrg if test "$build_libtool_libs" = convenience; then 9088e35772b2Smrg oldobjs="$libobjs_save $symfileobj" 9089e35772b2Smrg addlibs="$convenience" 9090e35772b2Smrg build_libtool_libs=no 9091e35772b2Smrg else 9092e35772b2Smrg if test "$build_libtool_libs" = module; then 9093e35772b2Smrg oldobjs="$libobjs_save" 9094e35772b2Smrg build_libtool_libs=no 9095e35772b2Smrg else 9096e35772b2Smrg oldobjs="$old_deplibs $non_pic_objects" 9097e35772b2Smrg if test "$preload" = yes && test -f "$symfileobj"; then 909874c14cd6Smrg func_append oldobjs " $symfileobj" 9099e35772b2Smrg fi 9100e35772b2Smrg fi 9101e35772b2Smrg addlibs="$old_convenience" 910272b676d7Smrg fi 910372b676d7Smrg 9104e35772b2Smrg if test -n "$addlibs"; then 9105e35772b2Smrg gentop="$output_objdir/${outputname}x" 910674c14cd6Smrg func_append generated " $gentop" 910772b676d7Smrg 9108e35772b2Smrg func_extract_archives $gentop $addlibs 910974c14cd6Smrg func_append oldobjs " $func_extract_archives_result" 9110e35772b2Smrg fi 911172b676d7Smrg 9112e35772b2Smrg # Do each command in the archive commands. 9113e35772b2Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114e35772b2Smrg cmds=$old_archive_from_new_cmds 9115e35772b2Smrg else 911672b676d7Smrg 9117e35772b2Smrg # Add any objects from preloaded convenience libraries 9118e35772b2Smrg if test -n "$dlprefiles"; then 9119e35772b2Smrg gentop="$output_objdir/${outputname}x" 912074c14cd6Smrg func_append generated " $gentop" 912172b676d7Smrg 9122e35772b2Smrg func_extract_archives $gentop $dlprefiles 912374c14cd6Smrg func_append oldobjs " $func_extract_archives_result" 9124e35772b2Smrg fi 912572b676d7Smrg 9126e35772b2Smrg # POSIX demands no paths to be encoded in archives. We have 9127e35772b2Smrg # to avoid creating archives with duplicate basenames if we 9128e35772b2Smrg # might have to extract them afterwards, e.g., when creating a 9129e35772b2Smrg # static archive out of a convenience library, or when linking 9130e35772b2Smrg # the entirety of a libtool archive into another (currently 9131e35772b2Smrg # not supported by libtool). 9132e35772b2Smrg if (for obj in $oldobjs 9133e35772b2Smrg do 9134e35772b2Smrg func_basename "$obj" 9135e35772b2Smrg $ECHO "$func_basename_result" 9136e35772b2Smrg done | sort | sort -uc >/dev/null 2>&1); then 9137e35772b2Smrg : 9138e35772b2Smrg else 913974c14cd6Smrg echo "copying selected object files to avoid basename conflicts..." 9140e35772b2Smrg gentop="$output_objdir/${outputname}x" 914174c14cd6Smrg func_append generated " $gentop" 9142e35772b2Smrg func_mkdir_p "$gentop" 9143e35772b2Smrg save_oldobjs=$oldobjs 9144e35772b2Smrg oldobjs= 9145e35772b2Smrg counter=1 9146e35772b2Smrg for obj in $save_oldobjs 9147e35772b2Smrg do 9148e35772b2Smrg func_basename "$obj" 9149e35772b2Smrg objbase="$func_basename_result" 9150e35772b2Smrg case " $oldobjs " in 9151e35772b2Smrg " ") oldobjs=$obj ;; 9152e35772b2Smrg *[\ /]"$objbase "*) 9153e35772b2Smrg while :; do 9154e35772b2Smrg # Make sure we don't pick an alternate name that also 9155e35772b2Smrg # overlaps. 9156e35772b2Smrg newobj=lt$counter-$objbase 9157e35772b2Smrg func_arith $counter + 1 9158e35772b2Smrg counter=$func_arith_result 9159e35772b2Smrg case " $oldobjs " in 9160e35772b2Smrg *[\ /]"$newobj "*) ;; 9161e35772b2Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162e35772b2Smrg esac 9163e35772b2Smrg done 9164e35772b2Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 916574c14cd6Smrg func_append oldobjs " $gentop/$newobj" 9166e35772b2Smrg ;; 916774c14cd6Smrg *) func_append oldobjs " $obj" ;; 9168e35772b2Smrg esac 916972b676d7Smrg done 917072b676d7Smrg fi 917174c14cd6Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 917274c14cd6Smrg tool_oldlib=$func_to_tool_file_result 9173e35772b2Smrg eval cmds=\"$old_archive_cmds\" 917472b676d7Smrg 9175e35772b2Smrg func_len " $cmds" 9176e35772b2Smrg len=$func_len_result 9177e35772b2Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178e35772b2Smrg cmds=$old_archive_cmds 917974c14cd6Smrg elif test -n "$archiver_list_spec"; then 918074c14cd6Smrg func_verbose "using command file archive linking..." 918174c14cd6Smrg for obj in $oldobjs 918274c14cd6Smrg do 918374c14cd6Smrg func_to_tool_file "$obj" 918474c14cd6Smrg $ECHO "$func_to_tool_file_result" 918574c14cd6Smrg done > $output_objdir/$libname.libcmd 918674c14cd6Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 918774c14cd6Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 918874c14cd6Smrg cmds=$old_archive_cmds 9189e35772b2Smrg else 9190e35772b2Smrg # the command line is too long to link in one step, link in parts 9191e35772b2Smrg func_verbose "using piecewise archive linking..." 9192e35772b2Smrg save_RANLIB=$RANLIB 9193e35772b2Smrg RANLIB=: 9194e35772b2Smrg objlist= 9195e35772b2Smrg concat_cmds= 9196e35772b2Smrg save_oldobjs=$oldobjs 9197e35772b2Smrg oldobjs= 9198e35772b2Smrg # Is there a better way of finding the last object in the list? 9199e35772b2Smrg for obj in $save_oldobjs 9200e35772b2Smrg do 9201e35772b2Smrg last_oldobj=$obj 9202e35772b2Smrg done 9203e35772b2Smrg eval test_cmds=\"$old_archive_cmds\" 9204e35772b2Smrg func_len " $test_cmds" 9205e35772b2Smrg len0=$func_len_result 9206e35772b2Smrg len=$len0 9207e35772b2Smrg for obj in $save_oldobjs 9208e35772b2Smrg do 9209e35772b2Smrg func_len " $obj" 9210e35772b2Smrg func_arith $len + $func_len_result 9211e35772b2Smrg len=$func_arith_result 9212e35772b2Smrg func_append objlist " $obj" 9213e35772b2Smrg if test "$len" -lt "$max_cmd_len"; then 9214e35772b2Smrg : 9215e35772b2Smrg else 9216e35772b2Smrg # the above command should be used before it gets too long 9217e35772b2Smrg oldobjs=$objlist 9218e35772b2Smrg if test "$obj" = "$last_oldobj" ; then 9219e35772b2Smrg RANLIB=$save_RANLIB 9220e35772b2Smrg fi 9221e35772b2Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222e35772b2Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223e35772b2Smrg objlist= 9224e35772b2Smrg len=$len0 9225e35772b2Smrg fi 9226e35772b2Smrg done 9227e35772b2Smrg RANLIB=$save_RANLIB 9228e35772b2Smrg oldobjs=$objlist 9229e35772b2Smrg if test "X$oldobjs" = "X" ; then 9230e35772b2Smrg eval cmds=\"\$concat_cmds\" 9231e35772b2Smrg else 9232e35772b2Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233e35772b2Smrg fi 9234e35772b2Smrg fi 9235e35772b2Smrg fi 9236e35772b2Smrg func_execute_cmds "$cmds" 'exit $?' 923772b676d7Smrg done 923872b676d7Smrg 9239e35772b2Smrg test -n "$generated" && \ 9240e35772b2Smrg func_show_eval "${RM}r$generated" 924172b676d7Smrg 9242e35772b2Smrg # Now create the libtool archive. 9243e35772b2Smrg case $output in 9244e35772b2Smrg *.la) 9245e35772b2Smrg old_library= 9246e35772b2Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9247e35772b2Smrg func_verbose "creating $output" 924872b676d7Smrg 9249e35772b2Smrg # Preserve any variables that may affect compiler behavior 9250e35772b2Smrg for var in $variables_saved_for_relink; do 9251e35772b2Smrg if eval test -z \"\${$var+set}\"; then 9252e35772b2Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253e35772b2Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9254e35772b2Smrg relink_command="$var=; export $var; $relink_command" 925572b676d7Smrg else 9256e35772b2Smrg func_quote_for_eval "$var_value" 9257e35772b2Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 925872b676d7Smrg fi 9259e35772b2Smrg done 9260e35772b2Smrg # Quote the link command for shipping. 9261e35772b2Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 926274c14cd6Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263e35772b2Smrg if test "$hardcode_automatic" = yes ; then 9264e35772b2Smrg relink_command= 9265e35772b2Smrg fi 926672b676d7Smrg 9267e35772b2Smrg # Only create the output if not a dry run. 9268e35772b2Smrg $opt_dry_run || { 9269e35772b2Smrg for installed in no yes; do 9270e35772b2Smrg if test "$installed" = yes; then 9271e35772b2Smrg if test -z "$install_libdir"; then 9272e35772b2Smrg break 9273e35772b2Smrg fi 9274e35772b2Smrg output="$output_objdir/$outputname"i 9275e35772b2Smrg # Replace all uninstalled libtool libraries with the installed ones 9276e35772b2Smrg newdependency_libs= 9277e35772b2Smrg for deplib in $dependency_libs; do 9278e35772b2Smrg case $deplib in 9279e35772b2Smrg *.la) 9280e35772b2Smrg func_basename "$deplib" 9281e35772b2Smrg name="$func_basename_result" 928274c14cd6Smrg func_resolve_sysroot "$deplib" 928374c14cd6Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284e35772b2Smrg test -z "$libdir" && \ 9285e35772b2Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 928674c14cd6Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 928774c14cd6Smrg ;; 928874c14cd6Smrg -L*) 928974c14cd6Smrg func_stripname -L '' "$deplib" 929074c14cd6Smrg func_replace_sysroot "$func_stripname_result" 929174c14cd6Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9292e35772b2Smrg ;; 929374c14cd6Smrg -R*) 929474c14cd6Smrg func_stripname -R '' "$deplib" 929574c14cd6Smrg func_replace_sysroot "$func_stripname_result" 929674c14cd6Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 929774c14cd6Smrg ;; 929874c14cd6Smrg *) func_append newdependency_libs " $deplib" ;; 9299e35772b2Smrg esac 9300e35772b2Smrg done 9301e35772b2Smrg dependency_libs="$newdependency_libs" 9302e35772b2Smrg newdlfiles= 9303e35772b2Smrg 9304e35772b2Smrg for lib in $dlfiles; do 9305e35772b2Smrg case $lib in 9306e35772b2Smrg *.la) 9307e35772b2Smrg func_basename "$lib" 9308e35772b2Smrg name="$func_basename_result" 9309e35772b2Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310e35772b2Smrg test -z "$libdir" && \ 9311e35772b2Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 931274c14cd6Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313e35772b2Smrg ;; 931474c14cd6Smrg *) func_append newdlfiles " $lib" ;; 9315e35772b2Smrg esac 9316e35772b2Smrg done 9317e35772b2Smrg dlfiles="$newdlfiles" 9318e35772b2Smrg newdlprefiles= 9319e35772b2Smrg for lib in $dlprefiles; do 9320e35772b2Smrg case $lib in 9321e35772b2Smrg *.la) 9322e35772b2Smrg # Only pass preopened files to the pseudo-archive (for 9323e35772b2Smrg # eventual linking with the app. that links it) if we 9324e35772b2Smrg # didn't already link the preopened objects directly into 9325e35772b2Smrg # the library: 9326e35772b2Smrg func_basename "$lib" 9327e35772b2Smrg name="$func_basename_result" 9328e35772b2Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329e35772b2Smrg test -z "$libdir" && \ 9330e35772b2Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 933174c14cd6Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332e35772b2Smrg ;; 9333e35772b2Smrg esac 9334e35772b2Smrg done 9335e35772b2Smrg dlprefiles="$newdlprefiles" 9336e35772b2Smrg else 9337e35772b2Smrg newdlfiles= 9338e35772b2Smrg for lib in $dlfiles; do 9339e35772b2Smrg case $lib in 9340e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341e35772b2Smrg *) abs=`pwd`"/$lib" ;; 9342e35772b2Smrg esac 934374c14cd6Smrg func_append newdlfiles " $abs" 9344e35772b2Smrg done 9345e35772b2Smrg dlfiles="$newdlfiles" 9346e35772b2Smrg newdlprefiles= 9347e35772b2Smrg for lib in $dlprefiles; do 9348e35772b2Smrg case $lib in 9349e35772b2Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350e35772b2Smrg *) abs=`pwd`"/$lib" ;; 9351e35772b2Smrg esac 935274c14cd6Smrg func_append newdlprefiles " $abs" 9353e35772b2Smrg done 9354e35772b2Smrg dlprefiles="$newdlprefiles" 9355e35772b2Smrg fi 9356e35772b2Smrg $RM $output 9357e35772b2Smrg # place dlname in correct position for cygwin 935874c14cd6Smrg # In fact, it would be nice if we could use this code for all target 935974c14cd6Smrg # systems that can't hard-code library paths into their executables 936074c14cd6Smrg # and that have no shared library path variable independent of PATH, 936174c14cd6Smrg # but it turns out we can't easily determine that from inspecting 936274c14cd6Smrg # libtool variables, so we have to hard-code the OSs to which it 936374c14cd6Smrg # applies here; at the moment, that means platforms that use the PE 936474c14cd6Smrg # object format with DLL files. See the long comment at the top of 936574c14cd6Smrg # tests/bindir.at for full details. 9366e35772b2Smrg tdlname=$dlname 9367e35772b2Smrg case $host,$output,$installed,$module,$dlname in 936874c14cd6Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 936974c14cd6Smrg # If a -bindir argument was supplied, place the dll there. 937074c14cd6Smrg if test "x$bindir" != x ; 937174c14cd6Smrg then 937274c14cd6Smrg func_relative_path "$install_libdir" "$bindir" 937374c14cd6Smrg tdlname=$func_relative_path_result$dlname 937474c14cd6Smrg else 937574c14cd6Smrg # Otherwise fall back on heuristic. 937674c14cd6Smrg tdlname=../bin/$dlname 937774c14cd6Smrg fi 937874c14cd6Smrg ;; 9379e35772b2Smrg esac 9380e35772b2Smrg $ECHO > $output "\ 9381e35772b2Smrg# $outputname - a libtool library file 9382e35772b2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383e35772b2Smrg# 9384e35772b2Smrg# Please DO NOT delete this file! 9385e35772b2Smrg# It is necessary for linking the library. 938672b676d7Smrg 9387e35772b2Smrg# The name that we can dlopen(3). 9388e35772b2Smrgdlname='$tdlname' 938972b676d7Smrg 9390e35772b2Smrg# Names of this library. 9391e35772b2Smrglibrary_names='$library_names' 939272b676d7Smrg 9393e35772b2Smrg# The name of the static archive. 9394e35772b2Smrgold_library='$old_library' 939572b676d7Smrg 9396e35772b2Smrg# Linker flags that can not go in dependency_libs. 9397e35772b2Smrginherited_linker_flags='$new_inherited_linker_flags' 939872b676d7Smrg 9399e35772b2Smrg# Libraries that this one depends upon. 9400e35772b2Smrgdependency_libs='$dependency_libs' 940172b676d7Smrg 9402e35772b2Smrg# Names of additional weak libraries provided by this library 9403e35772b2Smrgweak_library_names='$weak_libs' 940472b676d7Smrg 9405e35772b2Smrg# Version information for $libname. 9406e35772b2Smrgcurrent=$current 9407e35772b2Smrgage=$age 9408e35772b2Smrgrevision=$revision 940972b676d7Smrg 9410e35772b2Smrg# Is this an already installed library? 9411e35772b2Smrginstalled=$installed 941272b676d7Smrg 9413e35772b2Smrg# Should we warn about portability when linking against -modules? 9414e35772b2Smrgshouldnotlink=$module 941572b676d7Smrg 9416e35772b2Smrg# Files to dlopen/dlpreopen 9417e35772b2Smrgdlopen='$dlfiles' 9418e35772b2Smrgdlpreopen='$dlprefiles' 941972b676d7Smrg 9420e35772b2Smrg# Directory that this library needs to be installed in: 9421e35772b2Smrglibdir='$install_libdir'" 9422e35772b2Smrg if test "$installed" = no && test "$need_relink" = yes; then 9423e35772b2Smrg $ECHO >> $output "\ 9424e35772b2Smrgrelink_command=\"$relink_command\"" 9425e35772b2Smrg fi 9426e35772b2Smrg done 9427e35772b2Smrg } 942872b676d7Smrg 9429e35772b2Smrg # Do a symbolic link so that the libtool archive can be found in 9430e35772b2Smrg # LD_LIBRARY_PATH before the program is installed. 9431e35772b2Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432e35772b2Smrg ;; 9433e35772b2Smrg esac 9434e35772b2Smrg exit $EXIT_SUCCESS 9435e35772b2Smrg} 943672b676d7Smrg 943774c14cd6Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438e35772b2Smrg func_mode_link ${1+"$@"} 943972b676d7Smrg 944072b676d7Smrg 9441e35772b2Smrg# func_mode_uninstall arg... 9442e35772b2Smrgfunc_mode_uninstall () 9443e35772b2Smrg{ 9444e35772b2Smrg $opt_debug 9445e35772b2Smrg RM="$nonopt" 944672b676d7Smrg files= 944772b676d7Smrg rmforce= 944872b676d7Smrg exit_status=0 944972b676d7Smrg 945072b676d7Smrg # This variable tells wrapper scripts just to set variables rather 945172b676d7Smrg # than running their programs. 945272b676d7Smrg libtool_install_magic="$magic" 945372b676d7Smrg 945472b676d7Smrg for arg 945572b676d7Smrg do 945672b676d7Smrg case $arg in 945774c14cd6Smrg -f) func_append RM " $arg"; rmforce=yes ;; 945874c14cd6Smrg -*) func_append RM " $arg" ;; 945974c14cd6Smrg *) func_append files " $arg" ;; 946072b676d7Smrg esac 946172b676d7Smrg done 946272b676d7Smrg 9463e35772b2Smrg test -z "$RM" && \ 9464e35772b2Smrg func_fatal_help "you must specify an RM program" 946572b676d7Smrg 946672b676d7Smrg rmdirs= 946772b676d7Smrg 946872b676d7Smrg for file in $files; do 9469e35772b2Smrg func_dirname "$file" "" "." 9470e35772b2Smrg dir="$func_dirname_result" 9471e35772b2Smrg if test "X$dir" = X.; then 947274c14cd6Smrg odir="$objdir" 947372b676d7Smrg else 947474c14cd6Smrg odir="$dir/$objdir" 947572b676d7Smrg fi 9476e35772b2Smrg func_basename "$file" 9477e35772b2Smrg name="$func_basename_result" 947874c14cd6Smrg test "$opt_mode" = uninstall && odir="$dir" 947972b676d7Smrg 948074c14cd6Smrg # Remember odir for removal later, being careful to avoid duplicates 948174c14cd6Smrg if test "$opt_mode" = clean; then 948272b676d7Smrg case " $rmdirs " in 948374c14cd6Smrg *" $odir "*) ;; 948474c14cd6Smrg *) func_append rmdirs " $odir" ;; 948572b676d7Smrg esac 948672b676d7Smrg fi 948772b676d7Smrg 948872b676d7Smrg # Don't error if the file doesn't exist and rm -f was used. 9489e35772b2Smrg if { test -L "$file"; } >/dev/null 2>&1 || 9490e35772b2Smrg { test -h "$file"; } >/dev/null 2>&1 || 9491e35772b2Smrg test -f "$file"; then 949272b676d7Smrg : 949372b676d7Smrg elif test -d "$file"; then 949472b676d7Smrg exit_status=1 949572b676d7Smrg continue 949672b676d7Smrg elif test "$rmforce" = yes; then 949772b676d7Smrg continue 949872b676d7Smrg fi 949972b676d7Smrg 950072b676d7Smrg rmfiles="$file" 950172b676d7Smrg 950272b676d7Smrg case $name in 950372b676d7Smrg *.la) 950472b676d7Smrg # Possibly a libtool archive, so verify it. 9505e35772b2Smrg if func_lalib_p "$file"; then 9506e35772b2Smrg func_source $dir/$name 950772b676d7Smrg 950872b676d7Smrg # Delete the libtool libraries and symlinks. 950972b676d7Smrg for n in $library_names; do 951074c14cd6Smrg func_append rmfiles " $odir/$n" 951172b676d7Smrg done 951274c14cd6Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 951372b676d7Smrg 951474c14cd6Smrg case "$opt_mode" in 951572b676d7Smrg clean) 951674c14cd6Smrg case " $library_names " in 951772b676d7Smrg *" $dlname "*) ;; 951874c14cd6Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 951972b676d7Smrg esac 952074c14cd6Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 952172b676d7Smrg ;; 952272b676d7Smrg uninstall) 952372b676d7Smrg if test -n "$library_names"; then 952472b676d7Smrg # Do each command in the postuninstall commands. 9525e35772b2Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 952672b676d7Smrg fi 952772b676d7Smrg 952872b676d7Smrg if test -n "$old_library"; then 952972b676d7Smrg # Do each command in the old_postuninstall commands. 9530e35772b2Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 953172b676d7Smrg fi 953272b676d7Smrg # FIXME: should reinstall the best remaining shared library. 953372b676d7Smrg ;; 953472b676d7Smrg esac 953572b676d7Smrg fi 953672b676d7Smrg ;; 953772b676d7Smrg 953872b676d7Smrg *.lo) 953972b676d7Smrg # Possibly a libtool object, so verify it. 9540e35772b2Smrg if func_lalib_p "$file"; then 954172b676d7Smrg 954272b676d7Smrg # Read the .lo file 9543e35772b2Smrg func_source $dir/$name 954472b676d7Smrg 954572b676d7Smrg # Add PIC object to the list of files to remove. 9546e35772b2Smrg if test -n "$pic_object" && 9547e35772b2Smrg test "$pic_object" != none; then 954874c14cd6Smrg func_append rmfiles " $dir/$pic_object" 954972b676d7Smrg fi 955072b676d7Smrg 955172b676d7Smrg # Add non-PIC object to the list of files to remove. 9552e35772b2Smrg if test -n "$non_pic_object" && 9553e35772b2Smrg test "$non_pic_object" != none; then 955474c14cd6Smrg func_append rmfiles " $dir/$non_pic_object" 955572b676d7Smrg fi 955672b676d7Smrg fi 955772b676d7Smrg ;; 955872b676d7Smrg 955972b676d7Smrg *) 956074c14cd6Smrg if test "$opt_mode" = clean ; then 956172b676d7Smrg noexename=$name 956272b676d7Smrg case $file in 956372b676d7Smrg *.exe) 9564e35772b2Smrg func_stripname '' '.exe' "$file" 9565e35772b2Smrg file=$func_stripname_result 9566e35772b2Smrg func_stripname '' '.exe' "$name" 9567e35772b2Smrg noexename=$func_stripname_result 956872b676d7Smrg # $file with .exe has already been added to rmfiles, 956972b676d7Smrg # add $file without .exe 957074c14cd6Smrg func_append rmfiles " $file" 957172b676d7Smrg ;; 957272b676d7Smrg esac 957372b676d7Smrg # Do a test to see if this is a libtool program. 9574e35772b2Smrg if func_ltwrapper_p "$file"; then 9575e35772b2Smrg if func_ltwrapper_executable_p "$file"; then 9576e35772b2Smrg func_ltwrapper_scriptname "$file" 9577e35772b2Smrg relink_command= 9578e35772b2Smrg func_source $func_ltwrapper_scriptname_result 957974c14cd6Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9580e35772b2Smrg else 9581e35772b2Smrg relink_command= 9582e35772b2Smrg func_source $dir/$noexename 9583e35772b2Smrg fi 958472b676d7Smrg 958572b676d7Smrg # note $name still contains .exe if it was in $file originally 958672b676d7Smrg # as does the version of $file that was added into $rmfiles 958774c14cd6Smrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 958872b676d7Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 958974c14cd6Smrg func_append rmfiles " $odir/lt-$name" 959072b676d7Smrg fi 959172b676d7Smrg if test "X$noexename" != "X$name" ; then 959274c14cd6Smrg func_append rmfiles " $odir/lt-${noexename}.c" 959372b676d7Smrg fi 959472b676d7Smrg fi 959572b676d7Smrg fi 959672b676d7Smrg ;; 959772b676d7Smrg esac 9598e35772b2Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 959972b676d7Smrg done 960072b676d7Smrg 960172b676d7Smrg # Try to remove the ${objdir}s in the directories where we deleted files 960272b676d7Smrg for dir in $rmdirs; do 960372b676d7Smrg if test -d "$dir"; then 9604e35772b2Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 960572b676d7Smrg fi 960672b676d7Smrg done 960772b676d7Smrg 960872b676d7Smrg exit $exit_status 9609e35772b2Smrg} 961072b676d7Smrg 961174c14cd6Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612e35772b2Smrg func_mode_uninstall ${1+"$@"} 961372b676d7Smrg 961474c14cd6Smrgtest -z "$opt_mode" && { 9615e35772b2Smrg help="$generic_help" 9616e35772b2Smrg func_fatal_help "you must specify a MODE" 9617e35772b2Smrg} 9618e35772b2Smrg 9619e35772b2Smrgtest -z "$exec_cmd" && \ 962074c14cd6Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 962172b676d7Smrg 962272b676d7Smrgif test -n "$exec_cmd"; then 9623e35772b2Smrg eval exec "$exec_cmd" 962472b676d7Smrg exit $EXIT_FAILURE 962572b676d7Smrgfi 962672b676d7Smrg 9627e35772b2Smrgexit $exit_status 962872b676d7Smrg 962972b676d7Smrg 963072b676d7Smrg# The TAGs below are defined such that we never get into a situation 963172b676d7Smrg# in which we disable both kinds of libraries. Given conflicting 963272b676d7Smrg# choices, we go for a static library, that is the most portable, 963372b676d7Smrg# since we can't tell whether shared libraries were disabled because 963472b676d7Smrg# the user asked for that or because the platform doesn't support 963572b676d7Smrg# them. This is particularly important on AIX, because we don't 963672b676d7Smrg# support having both static and shared libraries enabled at the same 963772b676d7Smrg# time on that platform, so we default to a shared-only configuration. 963872b676d7Smrg# If a disable-shared tag is given, we'll fallback to a static-only 963972b676d7Smrg# configuration. But we'll never go from static-only to shared-only. 964072b676d7Smrg 964172b676d7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642e35772b2Smrgbuild_libtool_libs=no 9643e35772b2Smrgbuild_old_libs=yes 964472b676d7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 964572b676d7Smrg 964672b676d7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647e35772b2Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 964872b676d7Smrg# ### END LIBTOOL TAG CONFIG: disable-static 964972b676d7Smrg 965072b676d7Smrg# Local Variables: 965172b676d7Smrg# mode:shell-script 965272b676d7Smrg# sh-indentation:2 965372b676d7Smrg# End: 9654e35772b2Smrg# vi:sw=2 9655e35772b2Smrg 9656