ltmain.sh revision 37eb1ca1
1c27c18e8Smrg# Generated from ltmain.m4sh. 2c27c18e8Smrg 337eb1ca1Smrg# libtool (GNU libtool) 2.2.10 4c27c18e8Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 5c27c18e8Smrg 637eb1ca1Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 737eb1ca1Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 8c27c18e8Smrg# This is free software; see the source for copying conditions. There is NO 9c27c18e8Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 10c27c18e8Smrg 11c27c18e8Smrg# GNU Libtool is free software; you can redistribute it and/or modify 12c43cc173Smrg# it under the terms of the GNU General Public License as published by 13c43cc173Smrg# the Free Software Foundation; either version 2 of the License, or 14c43cc173Smrg# (at your option) any later version. 15c43cc173Smrg# 16c27c18e8Smrg# As a special exception to the GNU General Public License, 17c27c18e8Smrg# if you distribute this file as part of a program or library that 18c27c18e8Smrg# is built using GNU Libtool, you may include this file under the 19c27c18e8Smrg# same distribution terms that you use for the rest of that program. 20c27c18e8Smrg# 21c27c18e8Smrg# GNU Libtool is distributed in the hope that it will be useful, but 22c43cc173Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 23c43cc173Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24c43cc173Smrg# General Public License for more details. 25c43cc173Smrg# 26c43cc173Smrg# You should have received a copy of the GNU General Public License 27c27c18e8Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 28c27c18e8Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 29c27c18e8Smrg# or obtained by writing to the Free Software Foundation, Inc., 30c27c18e8Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 31c43cc173Smrg 32c27c18e8Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 33c27c18e8Smrg# 34c27c18e8Smrg# Provide generalized library-building support services. 35c27c18e8Smrg# 3637eb1ca1Smrg# --config show all configuration variables 3737eb1ca1Smrg# --debug enable verbose shell tracing 3837eb1ca1Smrg# -n, --dry-run display commands without modifying any files 3937eb1ca1Smrg# --features display basic configuration information and exit 4037eb1ca1Smrg# --mode=MODE use operation mode MODE 4137eb1ca1Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 4237eb1ca1Smrg# --quiet, --silent don't print informational messages 4337eb1ca1Smrg# --no-quiet, --no-silent 4437eb1ca1Smrg# print informational messages (default) 4537eb1ca1Smrg# --tag=TAG use configuration variables from tag TAG 4637eb1ca1Smrg# -v, --verbose print more informational messages than default 4737eb1ca1Smrg# --no-verbose don't print the extra informational messages 4837eb1ca1Smrg# --version print version information 4937eb1ca1Smrg# -h, --help, --help-all print short, long, or detailed help message 50c27c18e8Smrg# 51c27c18e8Smrg# MODE must be one of the following: 52c27c18e8Smrg# 5337eb1ca1Smrg# clean remove files from the build directory 5437eb1ca1Smrg# compile compile a source file into a libtool object 5537eb1ca1Smrg# execute automatically set library path, then run a program 5637eb1ca1Smrg# finish complete the installation of libtool libraries 5737eb1ca1Smrg# install install libraries or executables 5837eb1ca1Smrg# link create a library or an executable 5937eb1ca1Smrg# uninstall remove libraries from an installed directory 60c27c18e8Smrg# 6137eb1ca1Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 6237eb1ca1Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63c27c18e8Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64c27c18e8Smrg# 65c27c18e8Smrg# When reporting a bug, please describe a test case to reproduce it and 66c27c18e8Smrg# include the following information: 67c27c18e8Smrg# 6837eb1ca1Smrg# host-triplet: $host 6937eb1ca1Smrg# shell: $SHELL 7037eb1ca1Smrg# compiler: $LTCC 7137eb1ca1Smrg# compiler flags: $LTCFLAGS 7237eb1ca1Smrg# linker: $LD (gnu? $with_gnu_ld) 7337eb1ca1Smrg# $progname: (GNU libtool) 2.2.10 7437eb1ca1Smrg# automake: $automake_version 7537eb1ca1Smrg# autoconf: $autoconf_version 76c27c18e8Smrg# 77c27c18e8Smrg# Report bugs to <bug-libtool@gnu.org>. 78c43cc173Smrg 7937eb1ca1SmrgPROGRAM=libtool 80c43cc173SmrgPACKAGE=libtool 8137eb1ca1SmrgVERSION=2.2.10 82c27c18e8SmrgTIMESTAMP="" 8337eb1ca1Smrgpackage_revision=1.3175 8421e67964Smrg 85c27c18e8Smrg# Be Bourne compatible 8621e67964Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8721e67964Smrg emulate sh 8821e67964Smrg NULLCMD=: 8921e67964Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 9021e67964Smrg # is contrary to our usage. Disable this feature. 9121e67964Smrg alias -g '${1+"$@"}'='"$@"' 92c43cc173Smrg setopt NO_GLOB_SUBST 9321e67964Smrgelse 9421e67964Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 95c43cc173Smrgfi 9621e67964SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9721e67964SmrgDUALCASE=1; export DUALCASE # for MKS sh 98c43cc173Smrg 9937eb1ca1Smrg# A function that is used when there is no print builtin or printf. 10037eb1ca1Smrgfunc_fallback_echo () 10137eb1ca1Smrg{ 10237eb1ca1Smrg eval 'cat <<_LTECHO_EOF 10337eb1ca1Smrg$1 10437eb1ca1Smrg_LTECHO_EOF' 10537eb1ca1Smrg} 10637eb1ca1Smrg 107c27c18e8Smrg# NLS nuisances: We save the old values to restore during execute mode. 108c27c18e8Smrglt_user_locale= 109c27c18e8Smrglt_safe_locale= 110c27c18e8Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 11121e67964Smrgdo 11221e67964Smrg eval "if test \"\${$lt_var+set}\" = set; then 113c27c18e8Smrg save_$lt_var=\$$lt_var 114c27c18e8Smrg $lt_var=C 11521e67964Smrg export $lt_var 116c27c18e8Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 117c27c18e8Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 11821e67964Smrg fi" 11921e67964Smrgdone 12037eb1ca1SmrgLC_ALL=C 12137eb1ca1SmrgLANGUAGE=C 12237eb1ca1Smrgexport LANGUAGE LC_ALL 123c43cc173Smrg 124c27c18e8Smrg$lt_unset CDPATH 125c27c18e8Smrg 126c27c18e8Smrg 12737eb1ca1Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 12837eb1ca1Smrg# is ksh but when the shell is invoked as "sh" and the current value of 12937eb1ca1Smrg# the _XPG environment variable is not equal to 1 (one), the special 13037eb1ca1Smrg# positional parameter $0, within a function call, is the name of the 13137eb1ca1Smrg# function. 13237eb1ca1Smrgprogpath="$0" 133c27c18e8Smrg 134c27c18e8Smrg 135c27c18e8Smrg 136c27c18e8Smrg: ${CP="cp -f"} 13737eb1ca1Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 138c27c18e8Smrg: ${EGREP="/bin/grep -E"} 139c27c18e8Smrg: ${FGREP="/bin/grep -F"} 140c27c18e8Smrg: ${GREP="/bin/grep"} 141c27c18e8Smrg: ${LN_S="ln -s"} 142c27c18e8Smrg: ${MAKE="make"} 143c27c18e8Smrg: ${MKDIR="mkdir"} 144c27c18e8Smrg: ${MV="mv -f"} 145c27c18e8Smrg: ${RM="rm -f"} 146c27c18e8Smrg: ${SED="/bin/sed"} 147c27c18e8Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 148c27c18e8Smrg: ${Xsed="$SED -e 1s/^X//"} 149c27c18e8Smrg 150c27c18e8Smrg# Global variables: 151c27c18e8SmrgEXIT_SUCCESS=0 152c27c18e8SmrgEXIT_FAILURE=1 153c27c18e8SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 154c27c18e8SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 155c27c18e8Smrg 156c27c18e8Smrgexit_status=$EXIT_SUCCESS 157c27c18e8Smrg 158c43cc173Smrg# Make sure IFS has a sensible default 159c43cc173Smrglt_nl=' 160c43cc173Smrg' 161c43cc173SmrgIFS=" $lt_nl" 162c43cc173Smrg 163c27c18e8Smrgdirname="s,/[^/]*$,," 164c27c18e8Smrgbasename="s,^.*/,," 165c27c18e8Smrg 166c27c18e8Smrg# func_dirname_and_basename file append nondir_replacement 167c27c18e8Smrg# perform func_basename and func_dirname in a single function 168c27c18e8Smrg# call: 169c27c18e8Smrg# dirname: Compute the dirname of FILE. If nonempty, 170c27c18e8Smrg# add APPEND to the result, otherwise set result 171c27c18e8Smrg# to NONDIR_REPLACEMENT. 172c27c18e8Smrg# value returned in "$func_dirname_result" 173c27c18e8Smrg# basename: Compute filename of FILE. 174c27c18e8Smrg# value retuned in "$func_basename_result" 175c27c18e8Smrg# Implementation must be kept synchronized with func_dirname 176c27c18e8Smrg# and func_basename. For efficiency, we do not delegate to 177c27c18e8Smrg# those functions but instead duplicate the functionality here. 178c27c18e8Smrgfunc_dirname_and_basename () 179c27c18e8Smrg{ 180c27c18e8Smrg # Extract subdirectory from the argument. 18137eb1ca1Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 182c27c18e8Smrg if test "X$func_dirname_result" = "X${1}"; then 183c27c18e8Smrg func_dirname_result="${3}" 184c27c18e8Smrg else 185c27c18e8Smrg func_dirname_result="$func_dirname_result${2}" 186c27c18e8Smrg fi 18737eb1ca1Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 188c27c18e8Smrg} 189c43cc173Smrg 190c27c18e8Smrg# Generated shell functions inserted here. 191c27c18e8Smrg 19237eb1ca1Smrg# These SED scripts presuppose an absolute path with a trailing slash. 19337eb1ca1Smrgpathcar='s,^/\([^/]*\).*$,\1,' 19437eb1ca1Smrgpathcdr='s,^/[^/]*,,' 19537eb1ca1Smrgremovedotparts=':dotsl 19637eb1ca1Smrg s@/\./@/@g 19737eb1ca1Smrg t dotsl 19837eb1ca1Smrg s,/\.$,/,' 19937eb1ca1Smrgcollapseslashes='s@/\{1,\}@/@g' 20037eb1ca1Smrgfinalslash='s,/*$,/,' 20137eb1ca1Smrg 20237eb1ca1Smrg# func_normal_abspath PATH 20337eb1ca1Smrg# Remove doubled-up and trailing slashes, "." path components, 20437eb1ca1Smrg# and cancel out any ".." path components in PATH after making 20537eb1ca1Smrg# it an absolute path. 20637eb1ca1Smrg# value returned in "$func_normal_abspath_result" 20737eb1ca1Smrgfunc_normal_abspath () 20837eb1ca1Smrg{ 20937eb1ca1Smrg # Start from root dir and reassemble the path. 21037eb1ca1Smrg func_normal_abspath_result= 21137eb1ca1Smrg func_normal_abspath_tpath=$1 21237eb1ca1Smrg func_normal_abspath_altnamespace= 21337eb1ca1Smrg case $func_normal_abspath_tpath in 21437eb1ca1Smrg "") 21537eb1ca1Smrg # Empty path, that just means $cwd. 21637eb1ca1Smrg func_stripname '' '/' "`pwd`" 21737eb1ca1Smrg func_normal_abspath_result=$func_stripname_result 21837eb1ca1Smrg return 21937eb1ca1Smrg ;; 22037eb1ca1Smrg # The next three entries are used to spot a run of precisely 22137eb1ca1Smrg # two leading slashes without using negated character classes; 22237eb1ca1Smrg # we take advantage of case's first-match behaviour. 22337eb1ca1Smrg ///*) 22437eb1ca1Smrg # Unusual form of absolute path, do nothing. 22537eb1ca1Smrg ;; 22637eb1ca1Smrg //*) 22737eb1ca1Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 22837eb1ca1Smrg # and for example Cygwin uses it to access remote file shares 22937eb1ca1Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 23037eb1ca1Smrg func_normal_abspath_altnamespace=/ 23137eb1ca1Smrg ;; 23237eb1ca1Smrg /*) 23337eb1ca1Smrg # Absolute path, do nothing. 23437eb1ca1Smrg ;; 23537eb1ca1Smrg *) 23637eb1ca1Smrg # Relative path, prepend $cwd. 23737eb1ca1Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 23837eb1ca1Smrg ;; 23937eb1ca1Smrg esac 24037eb1ca1Smrg # Cancel out all the simple stuff to save iterations. We also want 24137eb1ca1Smrg # the path to end with a slash for ease of parsing, so make sure 24237eb1ca1Smrg # there is one (and only one) here. 24337eb1ca1Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 24437eb1ca1Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 24537eb1ca1Smrg while :; do 24637eb1ca1Smrg # Processed it all yet? 24737eb1ca1Smrg if test "$func_normal_abspath_tpath" = / ; then 24837eb1ca1Smrg # If we ascended to the root using ".." the result may be empty now. 24937eb1ca1Smrg if test -z "$func_normal_abspath_result" ; then 25037eb1ca1Smrg func_normal_abspath_result=/ 25137eb1ca1Smrg fi 25237eb1ca1Smrg break 25337eb1ca1Smrg fi 25437eb1ca1Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 25537eb1ca1Smrg -e "$pathcar"` 25637eb1ca1Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 25737eb1ca1Smrg -e "$pathcdr"` 25837eb1ca1Smrg # Figure out what to do with it 25937eb1ca1Smrg case $func_normal_abspath_tcomponent in 26037eb1ca1Smrg "") 26137eb1ca1Smrg # Trailing empty path component, ignore it. 26237eb1ca1Smrg ;; 26337eb1ca1Smrg ..) 26437eb1ca1Smrg # Parent dir; strip last assembled component from result. 26537eb1ca1Smrg func_dirname "$func_normal_abspath_result" 26637eb1ca1Smrg func_normal_abspath_result=$func_dirname_result 26737eb1ca1Smrg ;; 26837eb1ca1Smrg *) 26937eb1ca1Smrg # Actual path component, append it. 27037eb1ca1Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 27137eb1ca1Smrg ;; 27237eb1ca1Smrg esac 27337eb1ca1Smrg done 27437eb1ca1Smrg # Restore leading double-slash if one was found on entry. 27537eb1ca1Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 27637eb1ca1Smrg} 27737eb1ca1Smrg 27837eb1ca1Smrg# func_relative_path SRCDIR DSTDIR 27937eb1ca1Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 28037eb1ca1Smrg# slash if non-empty, suitable for immediately appending a filename 28137eb1ca1Smrg# without needing to append a separator. 28237eb1ca1Smrg# value returned in "$func_relative_path_result" 28337eb1ca1Smrgfunc_relative_path () 28437eb1ca1Smrg{ 28537eb1ca1Smrg func_relative_path_result= 28637eb1ca1Smrg func_normal_abspath "$1" 28737eb1ca1Smrg func_relative_path_tlibdir=$func_normal_abspath_result 28837eb1ca1Smrg func_normal_abspath "$2" 28937eb1ca1Smrg func_relative_path_tbindir=$func_normal_abspath_result 29037eb1ca1Smrg 29137eb1ca1Smrg # Ascend the tree starting from libdir 29237eb1ca1Smrg while :; do 29337eb1ca1Smrg # check if we have found a prefix of bindir 29437eb1ca1Smrg case $func_relative_path_tbindir in 29537eb1ca1Smrg $func_relative_path_tlibdir) 29637eb1ca1Smrg # found an exact match 29737eb1ca1Smrg func_relative_path_tcancelled= 29837eb1ca1Smrg break 29937eb1ca1Smrg ;; 30037eb1ca1Smrg $func_relative_path_tlibdir*) 30137eb1ca1Smrg # found a matching prefix 30237eb1ca1Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 30337eb1ca1Smrg func_relative_path_tcancelled=$func_stripname_result 30437eb1ca1Smrg if test -z "$func_relative_path_result"; then 30537eb1ca1Smrg func_relative_path_result=. 30637eb1ca1Smrg fi 30737eb1ca1Smrg break 30837eb1ca1Smrg ;; 30937eb1ca1Smrg *) 31037eb1ca1Smrg func_dirname $func_relative_path_tlibdir 31137eb1ca1Smrg func_relative_path_tlibdir=${func_dirname_result} 31237eb1ca1Smrg if test "x$func_relative_path_tlibdir" = x ; then 31337eb1ca1Smrg # Have to descend all the way to the root! 31437eb1ca1Smrg func_relative_path_result=../$func_relative_path_result 31537eb1ca1Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 31637eb1ca1Smrg break 31737eb1ca1Smrg fi 31837eb1ca1Smrg func_relative_path_result=../$func_relative_path_result 31937eb1ca1Smrg ;; 32037eb1ca1Smrg esac 32137eb1ca1Smrg done 32237eb1ca1Smrg 32337eb1ca1Smrg # Now calculate path; take care to avoid doubling-up slashes. 32437eb1ca1Smrg func_stripname '' '/' "$func_relative_path_result" 32537eb1ca1Smrg func_relative_path_result=$func_stripname_result 32637eb1ca1Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 32737eb1ca1Smrg if test "x$func_stripname_result" != x ; then 32837eb1ca1Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 32937eb1ca1Smrg fi 33037eb1ca1Smrg 33137eb1ca1Smrg # Normalisation. If bindir is libdir, return empty string, 33237eb1ca1Smrg # else relative path ending with a slash; either way, target 33337eb1ca1Smrg # file name can be directly appended. 33437eb1ca1Smrg if test ! -z "$func_relative_path_result"; then 33537eb1ca1Smrg func_stripname './' '' "$func_relative_path_result/" 33637eb1ca1Smrg func_relative_path_result=$func_stripname_result 33737eb1ca1Smrg fi 33837eb1ca1Smrg} 339c27c18e8Smrg 340c27c18e8Smrg# The name of this program: 341c27c18e8Smrgfunc_dirname_and_basename "$progpath" 342c27c18e8Smrgprogname=$func_basename_result 343c27c18e8Smrg 344c27c18e8Smrg# Make sure we have an absolute path for reexecution: 345c27c18e8Smrgcase $progpath in 346c27c18e8Smrg [\\/]*|[A-Za-z]:\\*) ;; 347c27c18e8Smrg *[\\/]*) 348c27c18e8Smrg progdir=$func_dirname_result 349c27c18e8Smrg progdir=`cd "$progdir" && pwd` 350c27c18e8Smrg progpath="$progdir/$progname" 351c27c18e8Smrg ;; 352c27c18e8Smrg *) 353c27c18e8Smrg save_IFS="$IFS" 354c27c18e8Smrg IFS=: 355c27c18e8Smrg for progdir in $PATH; do 356c27c18e8Smrg IFS="$save_IFS" 357c27c18e8Smrg test -x "$progdir/$progname" && break 358c27c18e8Smrg done 359c27c18e8Smrg IFS="$save_IFS" 360c27c18e8Smrg test -n "$progdir" || progdir=`pwd` 361c27c18e8Smrg progpath="$progdir/$progname" 362c27c18e8Smrg ;; 363c27c18e8Smrgesac 364c27c18e8Smrg 365c27c18e8Smrg# Sed substitution that helps us do robust quoting. It backslashifies 366c27c18e8Smrg# metacharacters that are still active within double-quoted strings. 367c27c18e8SmrgXsed="${SED}"' -e 1s/^X//' 368c27c18e8Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 369c27c18e8Smrg 370c27c18e8Smrg# Same as above, but do not quote variable references. 371c27c18e8Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 372c27c18e8Smrg 373c27c18e8Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 374c27c18e8Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 375c27c18e8Smrg# in input to double_quote_subst, that '$' was protected from expansion. 376c27c18e8Smrg# Since each input `\' is now two `\'s, look for any number of runs of 377c27c18e8Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 378c27c18e8Smrgbs='\\' 379c27c18e8Smrgbs2='\\\\' 380c27c18e8Smrgbs4='\\\\\\\\' 381c27c18e8Smrgdollar='\$' 382c27c18e8Smrgsed_double_backslash="\ 383c27c18e8Smrg s/$bs4/&\\ 384c27c18e8Smrg/g 385c27c18e8Smrg s/^$bs2$dollar/$bs&/ 386c27c18e8Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 387c27c18e8Smrg s/\n//g" 388c27c18e8Smrg 389c27c18e8Smrg# Standard options: 390c27c18e8Smrgopt_dry_run=false 391c27c18e8Smrgopt_help=false 392c27c18e8Smrgopt_quiet=false 393c27c18e8Smrgopt_verbose=false 394c27c18e8Smrgopt_warning=: 395c27c18e8Smrg 396c27c18e8Smrg# func_echo arg... 397c27c18e8Smrg# Echo program name prefixed message, along with the current mode 398c27c18e8Smrg# name if it has been set yet. 399c27c18e8Smrgfunc_echo () 400c27c18e8Smrg{ 401c27c18e8Smrg $ECHO "$progname${mode+: }$mode: $*" 402c27c18e8Smrg} 403c27c18e8Smrg 404c27c18e8Smrg# func_verbose arg... 405c27c18e8Smrg# Echo program name prefixed message in verbose mode only. 406c27c18e8Smrgfunc_verbose () 407c27c18e8Smrg{ 408c27c18e8Smrg $opt_verbose && func_echo ${1+"$@"} 409c27c18e8Smrg 410c27c18e8Smrg # A bug in bash halts the script if the last line of a function 411c27c18e8Smrg # fails when set -e is in force, so we need another command to 412c27c18e8Smrg # work around that: 413c27c18e8Smrg : 414c27c18e8Smrg} 415c27c18e8Smrg 41637eb1ca1Smrg# func_echo_all arg... 41737eb1ca1Smrg# Invoke $ECHO with all args, space-separated. 41837eb1ca1Smrgfunc_echo_all () 41937eb1ca1Smrg{ 42037eb1ca1Smrg $ECHO "$*" 42137eb1ca1Smrg} 42237eb1ca1Smrg 423c27c18e8Smrg# func_error arg... 424c27c18e8Smrg# Echo program name prefixed message to standard error. 425c27c18e8Smrgfunc_error () 426c27c18e8Smrg{ 427c27c18e8Smrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 428c27c18e8Smrg} 429c27c18e8Smrg 430c27c18e8Smrg# func_warning arg... 431c27c18e8Smrg# Echo program name prefixed warning message to standard error. 432c27c18e8Smrgfunc_warning () 433c27c18e8Smrg{ 434c27c18e8Smrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 435c27c18e8Smrg 436c27c18e8Smrg # bash bug again: 437c27c18e8Smrg : 438c27c18e8Smrg} 439c27c18e8Smrg 440c27c18e8Smrg# func_fatal_error arg... 441c27c18e8Smrg# Echo program name prefixed message to standard error, and exit. 442c27c18e8Smrgfunc_fatal_error () 443c27c18e8Smrg{ 444c27c18e8Smrg func_error ${1+"$@"} 445c27c18e8Smrg exit $EXIT_FAILURE 446c27c18e8Smrg} 447c27c18e8Smrg 448c27c18e8Smrg# func_fatal_help arg... 449c27c18e8Smrg# Echo program name prefixed message to standard error, followed by 450c27c18e8Smrg# a help hint, and exit. 451c27c18e8Smrgfunc_fatal_help () 452c27c18e8Smrg{ 453c27c18e8Smrg func_error ${1+"$@"} 454c27c18e8Smrg func_fatal_error "$help" 455c27c18e8Smrg} 456c27c18e8Smrghelp="Try \`$progname --help' for more information." ## default 457c27c18e8Smrg 458c27c18e8Smrg 459c27c18e8Smrg# func_grep expression filename 460c27c18e8Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 461c27c18e8Smrgfunc_grep () 462c27c18e8Smrg{ 463c27c18e8Smrg $GREP "$1" "$2" >/dev/null 2>&1 464c27c18e8Smrg} 465c27c18e8Smrg 466c27c18e8Smrg 467c27c18e8Smrg# func_mkdir_p directory-path 468c27c18e8Smrg# Make sure the entire path to DIRECTORY-PATH is available. 469c27c18e8Smrgfunc_mkdir_p () 470c27c18e8Smrg{ 471c27c18e8Smrg my_directory_path="$1" 472c27c18e8Smrg my_dir_list= 473c27c18e8Smrg 474c27c18e8Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 475c27c18e8Smrg 476c27c18e8Smrg # Protect directory names starting with `-' 477c27c18e8Smrg case $my_directory_path in 478c27c18e8Smrg -*) my_directory_path="./$my_directory_path" ;; 479c27c18e8Smrg esac 480c27c18e8Smrg 481c27c18e8Smrg # While some portion of DIR does not yet exist... 482c27c18e8Smrg while test ! -d "$my_directory_path"; do 483c27c18e8Smrg # ...make a list in topmost first order. Use a colon delimited 484c27c18e8Smrg # list incase some portion of path contains whitespace. 485c27c18e8Smrg my_dir_list="$my_directory_path:$my_dir_list" 486c27c18e8Smrg 487c27c18e8Smrg # If the last portion added has no slash in it, the list is done 488c27c18e8Smrg case $my_directory_path in */*) ;; *) break ;; esac 489c27c18e8Smrg 490c27c18e8Smrg # ...otherwise throw away the child directory and loop 49137eb1ca1Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 492c27c18e8Smrg done 49337eb1ca1Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 494c27c18e8Smrg 495c27c18e8Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 496c27c18e8Smrg for my_dir in $my_dir_list; do 497c27c18e8Smrg IFS="$save_mkdir_p_IFS" 498c27c18e8Smrg # mkdir can fail with a `File exist' error if two processes 499c27c18e8Smrg # try to create one of the directories concurrently. Don't 500c27c18e8Smrg # stop in that case! 501c27c18e8Smrg $MKDIR "$my_dir" 2>/dev/null || : 502c27c18e8Smrg done 503c27c18e8Smrg IFS="$save_mkdir_p_IFS" 504c27c18e8Smrg 505c27c18e8Smrg # Bail out if we (or some other process) failed to create a directory. 506c27c18e8Smrg test -d "$my_directory_path" || \ 507c27c18e8Smrg func_fatal_error "Failed to create \`$1'" 508c27c18e8Smrg fi 509c27c18e8Smrg} 510c43cc173Smrg 511c43cc173Smrg 512c43cc173Smrg# func_mktempdir [string] 513c43cc173Smrg# Make a temporary directory that won't clash with other running 514c43cc173Smrg# libtool processes, and avoids race conditions if possible. If 515c43cc173Smrg# given, STRING is the basename for that directory. 516c43cc173Smrgfunc_mktempdir () 517c43cc173Smrg{ 518c43cc173Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 519c43cc173Smrg 520c27c18e8Smrg if test "$opt_dry_run" = ":"; then 521c43cc173Smrg # Return a directory name, but don't create it in dry-run mode 522c43cc173Smrg my_tmpdir="${my_template}-$$" 523c43cc173Smrg else 524c43cc173Smrg 525c43cc173Smrg # If mktemp works, use that first and foremost 526c43cc173Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 527c43cc173Smrg 528c43cc173Smrg if test ! -d "$my_tmpdir"; then 529c27c18e8Smrg # Failing that, at least try and use $RANDOM to avoid a race 530c27c18e8Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 531c43cc173Smrg 532c27c18e8Smrg save_mktempdir_umask=`umask` 533c27c18e8Smrg umask 0077 534c27c18e8Smrg $MKDIR "$my_tmpdir" 535c27c18e8Smrg umask $save_mktempdir_umask 536c43cc173Smrg fi 537c43cc173Smrg 538c43cc173Smrg # If we're not in dry-run mode, bomb out on failure 539c27c18e8Smrg test -d "$my_tmpdir" || \ 540c27c18e8Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 541c43cc173Smrg fi 542c43cc173Smrg 54337eb1ca1Smrg $ECHO "$my_tmpdir" 544c43cc173Smrg} 545c43cc173Smrg 546c43cc173Smrg 547c27c18e8Smrg# func_quote_for_eval arg 548c27c18e8Smrg# Aesthetically quote ARG to be evaled later. 549c27c18e8Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 550c27c18e8Smrg# is double-quoted, suitable for a subsequent eval, whereas 551c27c18e8Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 552c27c18e8Smrg# which are still active within double quotes backslashified. 553c27c18e8Smrgfunc_quote_for_eval () 554c43cc173Smrg{ 555c27c18e8Smrg case $1 in 556c27c18e8Smrg *[\\\`\"\$]*) 55737eb1ca1Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 558c27c18e8Smrg *) 559c27c18e8Smrg func_quote_for_eval_unquoted_result="$1" ;; 560c27c18e8Smrg esac 561c27c18e8Smrg 562c27c18e8Smrg case $func_quote_for_eval_unquoted_result in 563c27c18e8Smrg # Double-quote args containing shell metacharacters to delay 564c27c18e8Smrg # word splitting, command substitution and and variable 565c27c18e8Smrg # expansion for a subsequent eval. 566c27c18e8Smrg # Many Bourne shells cannot handle close brackets correctly 567c27c18e8Smrg # in scan sets, so we specify it separately. 568c27c18e8Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 569c27c18e8Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 570c27c18e8Smrg ;; 571c27c18e8Smrg *) 572c27c18e8Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 573c43cc173Smrg esac 574c43cc173Smrg} 575c43cc173Smrg 576c43cc173Smrg 577c27c18e8Smrg# func_quote_for_expand arg 578c27c18e8Smrg# Aesthetically quote ARG to be evaled later; same as above, 579c27c18e8Smrg# but do not quote variable references. 580c27c18e8Smrgfunc_quote_for_expand () 581c43cc173Smrg{ 582c27c18e8Smrg case $1 in 583c27c18e8Smrg *[\\\`\"]*) 58437eb1ca1Smrg my_arg=`$ECHO "$1" | $SED \ 585c27c18e8Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 586c43cc173Smrg *) 587c27c18e8Smrg my_arg="$1" ;; 588c27c18e8Smrg esac 589c27c18e8Smrg 590c27c18e8Smrg case $my_arg in 591c27c18e8Smrg # Double-quote args containing shell metacharacters to delay 592c27c18e8Smrg # word splitting and command substitution for a subsequent eval. 593c27c18e8Smrg # Many Bourne shells cannot handle close brackets correctly 594c27c18e8Smrg # in scan sets, so we specify it separately. 595c27c18e8Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 596c27c18e8Smrg my_arg="\"$my_arg\"" 597c27c18e8Smrg ;; 598c27c18e8Smrg esac 599c27c18e8Smrg 600c27c18e8Smrg func_quote_for_expand_result="$my_arg" 601c43cc173Smrg} 602c43cc173Smrg 603c43cc173Smrg 604c27c18e8Smrg# func_show_eval cmd [fail_exp] 605c27c18e8Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 606c27c18e8Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 607c27c18e8Smrg# is given, then evaluate it. 608c27c18e8Smrgfunc_show_eval () 609c43cc173Smrg{ 610c27c18e8Smrg my_cmd="$1" 611c27c18e8Smrg my_fail_exp="${2-:}" 612c43cc173Smrg 613c27c18e8Smrg ${opt_silent-false} || { 614c27c18e8Smrg func_quote_for_expand "$my_cmd" 615c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 616c27c18e8Smrg } 617c27c18e8Smrg 618c27c18e8Smrg if ${opt_dry_run-false}; then :; else 619c27c18e8Smrg eval "$my_cmd" 620c27c18e8Smrg my_status=$? 621c27c18e8Smrg if test "$my_status" -eq 0; then :; else 622c27c18e8Smrg eval "(exit $my_status); $my_fail_exp" 623c27c18e8Smrg fi 624c43cc173Smrg fi 625c43cc173Smrg} 626c43cc173Smrg 627c27c18e8Smrg 628c27c18e8Smrg# func_show_eval_locale cmd [fail_exp] 629c27c18e8Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 630c27c18e8Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 631c27c18e8Smrg# is given, then evaluate it. Use the saved locale for evaluation. 632c27c18e8Smrgfunc_show_eval_locale () 633c43cc173Smrg{ 634c27c18e8Smrg my_cmd="$1" 635c27c18e8Smrg my_fail_exp="${2-:}" 636c27c18e8Smrg 637c27c18e8Smrg ${opt_silent-false} || { 638c27c18e8Smrg func_quote_for_expand "$my_cmd" 639c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 640c27c18e8Smrg } 641c27c18e8Smrg 642c27c18e8Smrg if ${opt_dry_run-false}; then :; else 643c27c18e8Smrg eval "$lt_user_locale 644c27c18e8Smrg $my_cmd" 645c27c18e8Smrg my_status=$? 646c27c18e8Smrg eval "$lt_safe_locale" 647c27c18e8Smrg if test "$my_status" -eq 0; then :; else 648c27c18e8Smrg eval "(exit $my_status); $my_fail_exp" 649c27c18e8Smrg fi 650c43cc173Smrg fi 651c27c18e8Smrg} 652c43cc173Smrg 653c43cc173Smrg 654c27c18e8Smrg# func_version 655c27c18e8Smrg# Echo version message to standard output and exit. 656c27c18e8Smrgfunc_version () 657c27c18e8Smrg{ 65837eb1ca1Smrg $SED -n '/(C)/!b go 65937eb1ca1Smrg :more 66037eb1ca1Smrg /\./!{ 66137eb1ca1Smrg N 66237eb1ca1Smrg s/\n# / / 66337eb1ca1Smrg b more 66437eb1ca1Smrg } 66537eb1ca1Smrg :go 66637eb1ca1Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 667c27c18e8Smrg s/^# // 668c27c18e8Smrg s/^# *$// 669c27c18e8Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 670c27c18e8Smrg p 671c27c18e8Smrg }' < "$progpath" 672c27c18e8Smrg exit $? 673c27c18e8Smrg} 674c27c18e8Smrg 675c27c18e8Smrg# func_usage 676c27c18e8Smrg# Echo short help message to standard output and exit. 677c27c18e8Smrgfunc_usage () 678c27c18e8Smrg{ 67937eb1ca1Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 680c27c18e8Smrg s/^# // 681c27c18e8Smrg s/^# *$// 682c27c18e8Smrg s/\$progname/'$progname'/ 683c27c18e8Smrg p 684c27c18e8Smrg }' < "$progpath" 68537eb1ca1Smrg echo 686c27c18e8Smrg $ECHO "run \`$progname --help | more' for full usage" 687c27c18e8Smrg exit $? 688c27c18e8Smrg} 689c27c18e8Smrg 69037eb1ca1Smrg# func_help [NOEXIT] 69137eb1ca1Smrg# Echo long help message to standard output and exit, 69237eb1ca1Smrg# unless 'noexit' is passed as argument. 693c27c18e8Smrgfunc_help () 694c27c18e8Smrg{ 695c27c18e8Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 696c27c18e8Smrg s/^# // 697c27c18e8Smrg s/^# *$// 698c27c18e8Smrg s*\$progname*'$progname'* 699c27c18e8Smrg s*\$host*'"$host"'* 700c27c18e8Smrg s*\$SHELL*'"$SHELL"'* 701c27c18e8Smrg s*\$LTCC*'"$LTCC"'* 702c27c18e8Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 703c27c18e8Smrg s*\$LD*'"$LD"'* 704c27c18e8Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 705c27c18e8Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 706c27c18e8Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 707c27c18e8Smrg p 708c27c18e8Smrg }' < "$progpath" 70937eb1ca1Smrg ret=$? 71037eb1ca1Smrg if test -z "$1"; then 71137eb1ca1Smrg exit $ret 71237eb1ca1Smrg fi 713c27c18e8Smrg} 714c27c18e8Smrg 715c27c18e8Smrg# func_missing_arg argname 716c27c18e8Smrg# Echo program name prefixed message to standard error and set global 717c27c18e8Smrg# exit_cmd. 718c27c18e8Smrgfunc_missing_arg () 719c27c18e8Smrg{ 72037eb1ca1Smrg func_error "missing argument for $1." 721c27c18e8Smrg exit_cmd=exit 722c43cc173Smrg} 723c43cc173Smrg 724c27c18e8Smrgexit_cmd=: 725c43cc173Smrg 726c43cc173Smrg 727c27c18e8Smrg 728c27c18e8Smrg 729c27c18e8Smrg 730c43cc173Smrg 731c27c18e8Smrgmagic="%%%MAGIC variable%%%" 732c27c18e8Smrgmagic_exe="%%%MAGIC EXE variable%%%" 733c43cc173Smrg 734c27c18e8Smrg# Global variables. 735c27c18e8Smrg# $mode is unset 736c27c18e8Smrgnonopt= 737c27c18e8Smrgexecute_dlfiles= 738c27c18e8Smrgpreserve_args= 739c27c18e8Smrglo2o="s/\\.lo\$/.${objext}/" 740c27c18e8Smrgo2lo="s/\\.${objext}\$/.lo/" 741c27c18e8Smrgextracted_archives= 742c27c18e8Smrgextracted_serial=0 743c43cc173Smrg 744c27c18e8Smrgopt_dry_run=false 745c27c18e8Smrgopt_duplicate_deps=false 746c27c18e8Smrgopt_silent=false 747c27c18e8Smrgopt_debug=: 748c43cc173Smrg 749c27c18e8Smrg# If this variable is set in any of the actions, the command in it 750c27c18e8Smrg# will be execed at the end. This prevents here-documents from being 751c27c18e8Smrg# left over by shells. 752c27c18e8Smrgexec_cmd= 753c27c18e8Smrg 754c27c18e8Smrg# func_fatal_configuration arg... 755c27c18e8Smrg# Echo program name prefixed message to standard error, followed by 756c27c18e8Smrg# a configuration failure hint, and exit. 757c27c18e8Smrgfunc_fatal_configuration () 758c27c18e8Smrg{ 759c27c18e8Smrg func_error ${1+"$@"} 760c27c18e8Smrg func_error "See the $PACKAGE documentation for more information." 761c27c18e8Smrg func_fatal_error "Fatal configuration error." 762c27c18e8Smrg} 763c43cc173Smrg 76421e67964Smrg 765c27c18e8Smrg# func_config 766c27c18e8Smrg# Display the configuration for all the tags in this script. 767c27c18e8Smrgfunc_config () 768c27c18e8Smrg{ 769c27c18e8Smrg re_begincf='^# ### BEGIN LIBTOOL' 770c27c18e8Smrg re_endcf='^# ### END LIBTOOL' 771c27c18e8Smrg 772c27c18e8Smrg # Default configuration. 773c27c18e8Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 774c43cc173Smrg 775c43cc173Smrg # Now print the configurations for the tags. 776c43cc173Smrg for tagname in $taglist; do 777c27c18e8Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 778c43cc173Smrg done 779c43cc173Smrg 780c27c18e8Smrg exit $? 781c27c18e8Smrg} 782c43cc173Smrg 783c27c18e8Smrg# func_features 784c27c18e8Smrg# Display the features supported by this script. 785c27c18e8Smrgfunc_features () 786c27c18e8Smrg{ 78737eb1ca1Smrg echo "host: $host" 788c43cc173Smrg if test "$build_libtool_libs" = yes; then 78937eb1ca1Smrg echo "enable shared libraries" 790c43cc173Smrg else 79137eb1ca1Smrg echo "disable shared libraries" 792c43cc173Smrg fi 793c43cc173Smrg if test "$build_old_libs" = yes; then 79437eb1ca1Smrg echo "enable static libraries" 795c43cc173Smrg else 79637eb1ca1Smrg echo "disable static libraries" 797c43cc173Smrg fi 798c27c18e8Smrg 799c43cc173Smrg exit $? 800c27c18e8Smrg} 801c43cc173Smrg 802c27c18e8Smrg# func_enable_tag tagname 803c27c18e8Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 804c27c18e8Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 805c27c18e8Smrg# variable here. 806c27c18e8Smrgfunc_enable_tag () 807c27c18e8Smrg{ 808c27c18e8Smrg # Global variable: 809c27c18e8Smrg tagname="$1" 810c43cc173Smrg 811c27c18e8Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 812c27c18e8Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 813c27c18e8Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 814c43cc173Smrg 815c27c18e8Smrg # Validate tagname. 816c27c18e8Smrg case $tagname in 817c27c18e8Smrg *[!-_A-Za-z0-9,/]*) 818c27c18e8Smrg func_fatal_error "invalid tag name: $tagname" 819c27c18e8Smrg ;; 820c27c18e8Smrg esac 821c43cc173Smrg 822c27c18e8Smrg # Don't test for the "default" C tag, as we know it's 823c27c18e8Smrg # there but not specially marked. 824c27c18e8Smrg case $tagname in 825c27c18e8Smrg CC) ;; 826c27c18e8Smrg *) 827c27c18e8Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 828c27c18e8Smrg taglist="$taglist $tagname" 829c27c18e8Smrg 830c27c18e8Smrg # Evaluate the configuration. Be careful to quote the path 831c27c18e8Smrg # and the sed script, to avoid splitting on whitespace, but 832c27c18e8Smrg # also don't use non-portable quotes within backquotes within 833c27c18e8Smrg # quotes we have to do it in 2 steps: 834c27c18e8Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 835c27c18e8Smrg eval "$extractedcf" 836c27c18e8Smrg else 837c27c18e8Smrg func_error "ignoring unknown tag $tagname" 838c27c18e8Smrg fi 839c27c18e8Smrg ;; 840c27c18e8Smrg esac 841c27c18e8Smrg} 842c27c18e8Smrg 843c27c18e8Smrg# Parse options once, thoroughly. This comes as soon as possible in 844c27c18e8Smrg# the script to make things like `libtool --version' happen quickly. 845c27c18e8Smrg{ 846c43cc173Smrg 847c27c18e8Smrg # Shorthand for --mode=foo, only valid as the first argument 848c27c18e8Smrg case $1 in 849c27c18e8Smrg clean|clea|cle|cl) 850c27c18e8Smrg shift; set dummy --mode clean ${1+"$@"}; shift 851c43cc173Smrg ;; 852c27c18e8Smrg compile|compil|compi|comp|com|co|c) 853c27c18e8Smrg shift; set dummy --mode compile ${1+"$@"}; shift 854c43cc173Smrg ;; 855c27c18e8Smrg execute|execut|execu|exec|exe|ex|e) 856c27c18e8Smrg shift; set dummy --mode execute ${1+"$@"}; shift 857c43cc173Smrg ;; 858c27c18e8Smrg finish|finis|fini|fin|fi|f) 859c27c18e8Smrg shift; set dummy --mode finish ${1+"$@"}; shift 860c43cc173Smrg ;; 861c27c18e8Smrg install|instal|insta|inst|ins|in|i) 862c27c18e8Smrg shift; set dummy --mode install ${1+"$@"}; shift 863c27c18e8Smrg ;; 864c27c18e8Smrg link|lin|li|l) 865c27c18e8Smrg shift; set dummy --mode link ${1+"$@"}; shift 866c27c18e8Smrg ;; 867c27c18e8Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 868c27c18e8Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 869c43cc173Smrg ;; 870c43cc173Smrg esac 871c43cc173Smrg 872c27c18e8Smrg # Parse non-mode specific arguments: 873c27c18e8Smrg while test "$#" -gt 0; do 874c27c18e8Smrg opt="$1" 875c27c18e8Smrg shift 876c43cc173Smrg 877c27c18e8Smrg case $opt in 878c27c18e8Smrg --config) func_config ;; 879c43cc173Smrg 880c27c18e8Smrg --debug) preserve_args="$preserve_args $opt" 881c27c18e8Smrg func_echo "enabling shell trace mode" 882c27c18e8Smrg opt_debug='set -x' 883c27c18e8Smrg $opt_debug 884c27c18e8Smrg ;; 885c43cc173Smrg 886c27c18e8Smrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 887c27c18e8Smrg execute_dlfiles="$execute_dlfiles $1" 888c27c18e8Smrg shift 889c27c18e8Smrg ;; 890c43cc173Smrg 891c27c18e8Smrg --dry-run | -n) opt_dry_run=: ;; 892c27c18e8Smrg --features) func_features ;; 893c27c18e8Smrg --finish) mode="finish" ;; 894c27c18e8Smrg 895c27c18e8Smrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 896c27c18e8Smrg case $1 in 897c27c18e8Smrg # Valid mode arguments: 898c27c18e8Smrg clean) ;; 899c27c18e8Smrg compile) ;; 900c27c18e8Smrg execute) ;; 901c27c18e8Smrg finish) ;; 902c27c18e8Smrg install) ;; 903c27c18e8Smrg link) ;; 904c27c18e8Smrg relink) ;; 905c27c18e8Smrg uninstall) ;; 906c27c18e8Smrg 907c27c18e8Smrg # Catch anything else as an error 908c27c18e8Smrg *) func_error "invalid argument for $opt" 909c27c18e8Smrg exit_cmd=exit 910c27c18e8Smrg break 911c27c18e8Smrg ;; 912c27c18e8Smrg esac 913c27c18e8Smrg 914c27c18e8Smrg mode="$1" 915c27c18e8Smrg shift 916c27c18e8Smrg ;; 917c27c18e8Smrg 918c27c18e8Smrg --preserve-dup-deps) 919c27c18e8Smrg opt_duplicate_deps=: ;; 920c27c18e8Smrg 921c27c18e8Smrg --quiet|--silent) preserve_args="$preserve_args $opt" 922c27c18e8Smrg opt_silent=: 92337eb1ca1Smrg opt_verbose=false 92437eb1ca1Smrg ;; 92537eb1ca1Smrg 92637eb1ca1Smrg --no-quiet|--no-silent) 92737eb1ca1Smrg preserve_args="$preserve_args $opt" 92837eb1ca1Smrg opt_silent=false 929c27c18e8Smrg ;; 930c27c18e8Smrg 931c27c18e8Smrg --verbose| -v) preserve_args="$preserve_args $opt" 932c27c18e8Smrg opt_silent=false 93337eb1ca1Smrg opt_verbose=: 93437eb1ca1Smrg ;; 93537eb1ca1Smrg 93637eb1ca1Smrg --no-verbose) preserve_args="$preserve_args $opt" 93737eb1ca1Smrg opt_verbose=false 938c27c18e8Smrg ;; 939c27c18e8Smrg 940c27c18e8Smrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 941c27c18e8Smrg preserve_args="$preserve_args $opt $1" 942c27c18e8Smrg func_enable_tag "$1" # tagname is set here 943c27c18e8Smrg shift 944c27c18e8Smrg ;; 945c27c18e8Smrg 946c27c18e8Smrg # Separate optargs to long options: 947c27c18e8Smrg -dlopen=*|--mode=*|--tag=*) 948c27c18e8Smrg func_opt_split "$opt" 949c27c18e8Smrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 950c27c18e8Smrg shift 951c27c18e8Smrg ;; 952c27c18e8Smrg 953c27c18e8Smrg -\?|-h) func_usage ;; 954c27c18e8Smrg --help) opt_help=: ;; 95537eb1ca1Smrg --help-all) opt_help=': help-all' ;; 956c27c18e8Smrg --version) func_version ;; 957c27c18e8Smrg 958c27c18e8Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 959c27c18e8Smrg 960c27c18e8Smrg *) nonopt="$opt" 961c27c18e8Smrg break 962c27c18e8Smrg ;; 963c27c18e8Smrg esac 964c27c18e8Smrg done 965c27c18e8Smrg 966c27c18e8Smrg 967c27c18e8Smrg case $host in 968c27c18e8Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 969c27c18e8Smrg # don't eliminate duplications in $postdeps and $predeps 970c27c18e8Smrg opt_duplicate_compiler_generated_deps=: 971c43cc173Smrg ;; 972c43cc173Smrg *) 973c27c18e8Smrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 974c27c18e8Smrg ;; 975c27c18e8Smrg esac 976c43cc173Smrg 977c27c18e8Smrg # Having warned about all mis-specified options, bail out if 978c27c18e8Smrg # anything was wrong. 979c27c18e8Smrg $exit_cmd $EXIT_FAILURE 980c27c18e8Smrg} 981c27c18e8Smrg 982c27c18e8Smrg# func_check_version_match 983c27c18e8Smrg# Ensure that we are using m4 macros, and libtool script from the same 984c27c18e8Smrg# release of libtool. 985c27c18e8Smrgfunc_check_version_match () 986c27c18e8Smrg{ 987c27c18e8Smrg if test "$package_revision" != "$macro_revision"; then 988c27c18e8Smrg if test "$VERSION" != "$macro_version"; then 989c27c18e8Smrg if test -z "$macro_version"; then 990c27c18e8Smrg cat >&2 <<_LT_EOF 991c27c18e8Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 992c27c18e8Smrg$progname: definition of this LT_INIT comes from an older release. 993c27c18e8Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 994c27c18e8Smrg$progname: and run autoconf again. 995c27c18e8Smrg_LT_EOF 996c27c18e8Smrg else 997c27c18e8Smrg cat >&2 <<_LT_EOF 998c27c18e8Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 999c27c18e8Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 1000c27c18e8Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 1001c27c18e8Smrg$progname: and run autoconf again. 1002c27c18e8Smrg_LT_EOF 1003c43cc173Smrg fi 1004c27c18e8Smrg else 1005c27c18e8Smrg cat >&2 <<_LT_EOF 1006c27c18e8Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1007c27c18e8Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1008c27c18e8Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1009c27c18e8Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 1010c27c18e8Smrg_LT_EOF 1011c27c18e8Smrg fi 1012c27c18e8Smrg 1013c27c18e8Smrg exit $EXIT_MISMATCH 1014c27c18e8Smrg fi 1015c27c18e8Smrg} 1016c27c18e8Smrg 1017c27c18e8Smrg 1018c27c18e8Smrg## ----------- ## 1019c27c18e8Smrg## Main. ## 1020c27c18e8Smrg## ----------- ## 1021c27c18e8Smrg 1022c27c18e8Smrg$opt_help || { 1023c27c18e8Smrg # Sanity checks first: 1024c27c18e8Smrg func_check_version_match 1025c27c18e8Smrg 1026c27c18e8Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1027c27c18e8Smrg func_fatal_configuration "not configured to build any kind of library" 1028c43cc173Smrg fi 1029c43cc173Smrg 1030c27c18e8Smrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 1031c27c18e8Smrg 1032c27c18e8Smrg 1033c27c18e8Smrg # Darwin sucks 1034c27c18e8Smrg eval std_shrext=\"$shrext_cmds\" 1035c27c18e8Smrg 1036c27c18e8Smrg 1037c43cc173Smrg # Only execute mode is allowed to have -dlopen flags. 1038c43cc173Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 1039c27c18e8Smrg func_error "unrecognized option \`-dlopen'" 1040c27c18e8Smrg $ECHO "$help" 1>&2 1041c43cc173Smrg exit $EXIT_FAILURE 1042c43cc173Smrg fi 1043c43cc173Smrg 1044c43cc173Smrg # Change the help message to a mode-specific one. 1045c43cc173Smrg generic_help="$help" 1046c27c18e8Smrg help="Try \`$progname --help --mode=$mode' for more information." 1047c27c18e8Smrg} 1048c43cc173Smrg 1049c43cc173Smrg 1050c27c18e8Smrg# func_lalib_p file 1051c27c18e8Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1052c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 1053c27c18e8Smrg# determined imposters. 1054c27c18e8Smrgfunc_lalib_p () 1055c27c18e8Smrg{ 1056c27c18e8Smrg test -f "$1" && 1057c27c18e8Smrg $SED -e 4q "$1" 2>/dev/null \ 1058c27c18e8Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1059c27c18e8Smrg} 1060c43cc173Smrg 1061c27c18e8Smrg# func_lalib_unsafe_p file 1062c27c18e8Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1063c27c18e8Smrg# This function implements the same check as func_lalib_p without 1064c27c18e8Smrg# resorting to external programs. To this end, it redirects stdin and 1065c27c18e8Smrg# closes it afterwards, without saving the original file descriptor. 1066c27c18e8Smrg# As a safety measure, use it only where a negative result would be 1067c27c18e8Smrg# fatal anyway. Works if `file' does not exist. 1068c27c18e8Smrgfunc_lalib_unsafe_p () 1069c27c18e8Smrg{ 1070c27c18e8Smrg lalib_p=no 1071c27c18e8Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1072c27c18e8Smrg for lalib_p_l in 1 2 3 4 1073c27c18e8Smrg do 1074c27c18e8Smrg read lalib_p_line 1075c27c18e8Smrg case "$lalib_p_line" in 1076c27c18e8Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1077c27c18e8Smrg esac 1078c27c18e8Smrg done 1079c27c18e8Smrg exec 0<&5 5<&- 1080c27c18e8Smrg fi 1081c27c18e8Smrg test "$lalib_p" = yes 1082c27c18e8Smrg} 1083c43cc173Smrg 1084c27c18e8Smrg# func_ltwrapper_script_p file 1085c27c18e8Smrg# True iff FILE is a libtool wrapper script 1086c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 1087c27c18e8Smrg# determined imposters. 1088c27c18e8Smrgfunc_ltwrapper_script_p () 1089c27c18e8Smrg{ 1090c27c18e8Smrg func_lalib_p "$1" 1091c27c18e8Smrg} 1092c43cc173Smrg 1093c27c18e8Smrg# func_ltwrapper_executable_p file 1094c27c18e8Smrg# True iff FILE is a libtool wrapper executable 1095c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 1096c27c18e8Smrg# determined imposters. 1097c27c18e8Smrgfunc_ltwrapper_executable_p () 1098c27c18e8Smrg{ 1099c27c18e8Smrg func_ltwrapper_exec_suffix= 1100c27c18e8Smrg case $1 in 1101c27c18e8Smrg *.exe) ;; 1102c27c18e8Smrg *) func_ltwrapper_exec_suffix=.exe ;; 1103c27c18e8Smrg esac 1104c27c18e8Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1105c27c18e8Smrg} 1106c43cc173Smrg 1107c27c18e8Smrg# func_ltwrapper_scriptname file 1108c27c18e8Smrg# Assumes file is an ltwrapper_executable 1109c27c18e8Smrg# uses $file to determine the appropriate filename for a 1110c27c18e8Smrg# temporary ltwrapper_script. 1111c27c18e8Smrgfunc_ltwrapper_scriptname () 1112c27c18e8Smrg{ 1113c27c18e8Smrg func_ltwrapper_scriptname_result="" 1114c27c18e8Smrg if func_ltwrapper_executable_p "$1"; then 1115c27c18e8Smrg func_dirname_and_basename "$1" "" "." 1116c27c18e8Smrg func_stripname '' '.exe' "$func_basename_result" 1117c27c18e8Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1118c27c18e8Smrg fi 1119c27c18e8Smrg} 1120c27c18e8Smrg 1121c27c18e8Smrg# func_ltwrapper_p file 1122c27c18e8Smrg# True iff FILE is a libtool wrapper script or wrapper executable 1123c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 1124c27c18e8Smrg# determined imposters. 1125c27c18e8Smrgfunc_ltwrapper_p () 1126c27c18e8Smrg{ 1127c27c18e8Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1128c27c18e8Smrg} 1129c27c18e8Smrg 1130c27c18e8Smrg 1131c27c18e8Smrg# func_execute_cmds commands fail_cmd 1132c27c18e8Smrg# Execute tilde-delimited COMMANDS. 1133c27c18e8Smrg# If FAIL_CMD is given, eval that upon failure. 1134c27c18e8Smrg# FAIL_CMD may read-access the current command in variable CMD! 1135c27c18e8Smrgfunc_execute_cmds () 1136c27c18e8Smrg{ 1137c27c18e8Smrg $opt_debug 1138c27c18e8Smrg save_ifs=$IFS; IFS='~' 1139c27c18e8Smrg for cmd in $1; do 1140c27c18e8Smrg IFS=$save_ifs 1141c27c18e8Smrg eval cmd=\"$cmd\" 1142c27c18e8Smrg func_show_eval "$cmd" "${2-:}" 1143c27c18e8Smrg done 1144c27c18e8Smrg IFS=$save_ifs 1145c27c18e8Smrg} 1146c27c18e8Smrg 1147c27c18e8Smrg 1148c27c18e8Smrg# func_source file 1149c27c18e8Smrg# Source FILE, adding directory component if necessary. 1150c27c18e8Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 1151c27c18e8Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1152c27c18e8Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1153c27c18e8Smrg# `FILE.' does not work on cygwin managed mounts. 1154c27c18e8Smrgfunc_source () 1155c27c18e8Smrg{ 1156c27c18e8Smrg $opt_debug 1157c27c18e8Smrg case $1 in 1158c27c18e8Smrg */* | *\\*) . "$1" ;; 1159c27c18e8Smrg *) . "./$1" ;; 1160c27c18e8Smrg esac 1161c27c18e8Smrg} 1162c27c18e8Smrg 1163c27c18e8Smrg 1164c27c18e8Smrg# func_infer_tag arg 1165c27c18e8Smrg# Infer tagged configuration to use if any are available and 1166c27c18e8Smrg# if one wasn't chosen via the "--tag" command line option. 1167c27c18e8Smrg# Only attempt this if the compiler in the base compile 1168c27c18e8Smrg# command doesn't match the default compiler. 1169c27c18e8Smrg# arg is usually of the form 'gcc ...' 1170c27c18e8Smrgfunc_infer_tag () 1171c27c18e8Smrg{ 1172c27c18e8Smrg $opt_debug 1173c27c18e8Smrg if test -n "$available_tags" && test -z "$tagname"; then 1174c27c18e8Smrg CC_quoted= 1175c27c18e8Smrg for arg in $CC; do 1176c27c18e8Smrg func_quote_for_eval "$arg" 1177c27c18e8Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1178c27c18e8Smrg done 117937eb1ca1Smrg CC_expanded=`func_echo_all $CC` 118037eb1ca1Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1181c27c18e8Smrg case $@ in 1182c27c18e8Smrg # Blanks in the command may have been stripped by the calling shell, 1183c27c18e8Smrg # but not from the CC environment variable when configure was run. 118437eb1ca1Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 118537eb1ca1Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1186c27c18e8Smrg # Blanks at the start of $base_compile will cause this to fail 1187c27c18e8Smrg # if we don't check for them as well. 1188c27c18e8Smrg *) 1189c27c18e8Smrg for z in $available_tags; do 1190c27c18e8Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1191c27c18e8Smrg # Evaluate the configuration. 1192c27c18e8Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1193c27c18e8Smrg CC_quoted= 1194c27c18e8Smrg for arg in $CC; do 1195c27c18e8Smrg # Double-quote args containing other shell metacharacters. 1196c27c18e8Smrg func_quote_for_eval "$arg" 1197c27c18e8Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1198c27c18e8Smrg done 119937eb1ca1Smrg CC_expanded=`func_echo_all $CC` 120037eb1ca1Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1201c27c18e8Smrg case "$@ " in 120237eb1ca1Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 120337eb1ca1Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1204c27c18e8Smrg # The compiler in the base compile command matches 1205c27c18e8Smrg # the one in the tagged configuration. 1206c27c18e8Smrg # Assume this is the tagged configuration we want. 1207c27c18e8Smrg tagname=$z 1208c27c18e8Smrg break 1209c27c18e8Smrg ;; 1210c27c18e8Smrg esac 1211c27c18e8Smrg fi 1212c27c18e8Smrg done 1213c27c18e8Smrg # If $tagname still isn't set, then no tagged configuration 1214c27c18e8Smrg # was found and let the user know that the "--tag" command 1215c27c18e8Smrg # line option must be used. 1216c27c18e8Smrg if test -z "$tagname"; then 1217c27c18e8Smrg func_echo "unable to infer tagged configuration" 1218c27c18e8Smrg func_fatal_error "specify a tag with \`--tag'" 1219c27c18e8Smrg# else 1220c27c18e8Smrg# func_verbose "using $tagname tagged configuration" 1221c27c18e8Smrg fi 1222c27c18e8Smrg ;; 1223c27c18e8Smrg esac 1224c27c18e8Smrg fi 1225c27c18e8Smrg} 1226c27c18e8Smrg 1227c27c18e8Smrg 1228c27c18e8Smrg 1229c27c18e8Smrg# func_write_libtool_object output_name pic_name nonpic_name 1230c27c18e8Smrg# Create a libtool object file (analogous to a ".la" file), 1231c27c18e8Smrg# but don't create it if we're doing a dry run. 1232c27c18e8Smrgfunc_write_libtool_object () 1233c27c18e8Smrg{ 1234c27c18e8Smrg write_libobj=${1} 1235c27c18e8Smrg if test "$build_libtool_libs" = yes; then 1236c27c18e8Smrg write_lobj=\'${2}\' 1237c27c18e8Smrg else 1238c27c18e8Smrg write_lobj=none 1239c27c18e8Smrg fi 1240c27c18e8Smrg 1241c27c18e8Smrg if test "$build_old_libs" = yes; then 1242c27c18e8Smrg write_oldobj=\'${3}\' 1243c27c18e8Smrg else 1244c27c18e8Smrg write_oldobj=none 1245c27c18e8Smrg fi 1246c27c18e8Smrg 1247c27c18e8Smrg $opt_dry_run || { 1248c27c18e8Smrg cat >${write_libobj}T <<EOF 1249c27c18e8Smrg# $write_libobj - a libtool object file 1250c27c18e8Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1251c27c18e8Smrg# 1252c27c18e8Smrg# Please DO NOT delete this file! 1253c27c18e8Smrg# It is necessary for linking the library. 1254c27c18e8Smrg 1255c27c18e8Smrg# Name of the PIC object. 1256c27c18e8Smrgpic_object=$write_lobj 1257c27c18e8Smrg 1258c27c18e8Smrg# Name of the non-PIC object 1259c27c18e8Smrgnon_pic_object=$write_oldobj 1260c27c18e8Smrg 1261c27c18e8SmrgEOF 1262c27c18e8Smrg $MV "${write_libobj}T" "${write_libobj}" 1263c27c18e8Smrg } 1264c27c18e8Smrg} 1265c27c18e8Smrg 1266c27c18e8Smrg# func_mode_compile arg... 1267c27c18e8Smrgfunc_mode_compile () 1268c27c18e8Smrg{ 1269c27c18e8Smrg $opt_debug 1270c27c18e8Smrg # Get the compilation command and the source file. 1271c27c18e8Smrg base_compile= 1272c27c18e8Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1273c27c18e8Smrg suppress_opt=yes 1274c27c18e8Smrg suppress_output= 1275c27c18e8Smrg arg_mode=normal 1276c27c18e8Smrg libobj= 1277c27c18e8Smrg later= 1278c27c18e8Smrg pie_flag= 1279c27c18e8Smrg 1280c27c18e8Smrg for arg 1281c27c18e8Smrg do 1282c27c18e8Smrg case $arg_mode in 1283c27c18e8Smrg arg ) 1284c27c18e8Smrg # do not "continue". Instead, add this to base_compile 1285c27c18e8Smrg lastarg="$arg" 1286c27c18e8Smrg arg_mode=normal 1287c27c18e8Smrg ;; 1288c27c18e8Smrg 1289c27c18e8Smrg target ) 1290c27c18e8Smrg libobj="$arg" 1291c27c18e8Smrg arg_mode=normal 1292c27c18e8Smrg continue 1293c27c18e8Smrg ;; 1294c27c18e8Smrg 1295c27c18e8Smrg normal ) 1296c27c18e8Smrg # Accept any command-line options. 1297c27c18e8Smrg case $arg in 1298c27c18e8Smrg -o) 1299c27c18e8Smrg test -n "$libobj" && \ 1300c27c18e8Smrg func_fatal_error "you cannot specify \`-o' more than once" 1301c27c18e8Smrg arg_mode=target 1302c27c18e8Smrg continue 1303c27c18e8Smrg ;; 1304c27c18e8Smrg 1305c27c18e8Smrg -pie | -fpie | -fPIE) 1306c27c18e8Smrg pie_flag="$pie_flag $arg" 1307c27c18e8Smrg continue 1308c27c18e8Smrg ;; 1309c27c18e8Smrg 1310c27c18e8Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1311c27c18e8Smrg later="$later $arg" 1312c27c18e8Smrg continue 1313c27c18e8Smrg ;; 1314c27c18e8Smrg 1315c27c18e8Smrg -no-suppress) 1316c43cc173Smrg suppress_opt=no 1317c43cc173Smrg continue 1318c43cc173Smrg ;; 1319c43cc173Smrg 1320c43cc173Smrg -Xcompiler) 1321c43cc173Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 1322c43cc173Smrg continue # The current "srcfile" will either be retained or 1323c43cc173Smrg ;; # replaced later. I would guess that would be a bug. 1324c43cc173Smrg 1325c43cc173Smrg -Wc,*) 1326c27c18e8Smrg func_stripname '-Wc,' '' "$arg" 1327c27c18e8Smrg args=$func_stripname_result 1328c43cc173Smrg lastarg= 1329c43cc173Smrg save_ifs="$IFS"; IFS=',' 1330c27c18e8Smrg for arg in $args; do 1331c43cc173Smrg IFS="$save_ifs" 1332c27c18e8Smrg func_quote_for_eval "$arg" 1333c27c18e8Smrg lastarg="$lastarg $func_quote_for_eval_result" 1334c43cc173Smrg done 1335c43cc173Smrg IFS="$save_ifs" 1336c27c18e8Smrg func_stripname ' ' '' "$lastarg" 1337c27c18e8Smrg lastarg=$func_stripname_result 1338c43cc173Smrg 1339c43cc173Smrg # Add the arguments to base_compile. 1340c43cc173Smrg base_compile="$base_compile $lastarg" 1341c43cc173Smrg continue 1342c43cc173Smrg ;; 1343c43cc173Smrg 1344c27c18e8Smrg *) 1345c43cc173Smrg # Accept the current argument as the source file. 1346c43cc173Smrg # The previous "srcfile" becomes the current argument. 1347c43cc173Smrg # 1348c43cc173Smrg lastarg="$srcfile" 1349c43cc173Smrg srcfile="$arg" 1350c43cc173Smrg ;; 1351c43cc173Smrg esac # case $arg 1352c43cc173Smrg ;; 1353c43cc173Smrg esac # case $arg_mode 1354c43cc173Smrg 1355c43cc173Smrg # Aesthetically quote the previous argument. 1356c27c18e8Smrg func_quote_for_eval "$lastarg" 1357c27c18e8Smrg base_compile="$base_compile $func_quote_for_eval_result" 1358c43cc173Smrg done # for arg 1359c43cc173Smrg 1360c43cc173Smrg case $arg_mode in 1361c43cc173Smrg arg) 1362c27c18e8Smrg func_fatal_error "you must specify an argument for -Xcompile" 1363c43cc173Smrg ;; 1364c43cc173Smrg target) 1365c27c18e8Smrg func_fatal_error "you must specify a target with \`-o'" 1366c43cc173Smrg ;; 1367c43cc173Smrg *) 1368c43cc173Smrg # Get the name of the library object. 1369c27c18e8Smrg test -z "$libobj" && { 1370c27c18e8Smrg func_basename "$srcfile" 1371c27c18e8Smrg libobj="$func_basename_result" 1372c27c18e8Smrg } 1373c43cc173Smrg ;; 1374c43cc173Smrg esac 1375c43cc173Smrg 1376c43cc173Smrg # Recognize several different file suffixes. 1377c43cc173Smrg # If the user specifies -o file.o, it is replaced with file.lo 1378c43cc173Smrg case $libobj in 1379c27c18e8Smrg *.[cCFSifmso] | \ 1380c27c18e8Smrg *.ada | *.adb | *.ads | *.asm | \ 1381c27c18e8Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 138237eb1ca1Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 1383c27c18e8Smrg func_xform "$libobj" 1384c27c18e8Smrg libobj=$func_xform_result 1385c27c18e8Smrg ;; 1386c43cc173Smrg esac 1387c43cc173Smrg 1388c43cc173Smrg case $libobj in 1389c27c18e8Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 1390c43cc173Smrg *) 1391c27c18e8Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 1392c43cc173Smrg ;; 1393c43cc173Smrg esac 1394c43cc173Smrg 1395c43cc173Smrg func_infer_tag $base_compile 1396c43cc173Smrg 1397c43cc173Smrg for arg in $later; do 1398c43cc173Smrg case $arg in 1399c27c18e8Smrg -shared) 1400c27c18e8Smrg test "$build_libtool_libs" != yes && \ 1401c27c18e8Smrg func_fatal_configuration "can not build a shared library" 1402c27c18e8Smrg build_old_libs=no 1403c27c18e8Smrg continue 1404c27c18e8Smrg ;; 1405c27c18e8Smrg 1406c43cc173Smrg -static) 1407c27c18e8Smrg build_libtool_libs=no 1408c43cc173Smrg build_old_libs=yes 1409c43cc173Smrg continue 1410c43cc173Smrg ;; 1411c43cc173Smrg 1412c43cc173Smrg -prefer-pic) 1413c43cc173Smrg pic_mode=yes 1414c43cc173Smrg continue 1415c43cc173Smrg ;; 1416c43cc173Smrg 1417c43cc173Smrg -prefer-non-pic) 1418c43cc173Smrg pic_mode=no 1419c43cc173Smrg continue 1420c43cc173Smrg ;; 1421c43cc173Smrg esac 1422c43cc173Smrg done 1423c43cc173Smrg 1424c27c18e8Smrg func_quote_for_eval "$libobj" 1425c27c18e8Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 1426c27c18e8Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 1427c27c18e8Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 1428c27c18e8Smrg func_dirname_and_basename "$obj" "/" "" 1429c27c18e8Smrg objname="$func_basename_result" 1430c27c18e8Smrg xdir="$func_dirname_result" 1431c43cc173Smrg lobj=${xdir}$objdir/$objname 1432c43cc173Smrg 1433c27c18e8Smrg test -z "$base_compile" && \ 1434c27c18e8Smrg func_fatal_help "you must specify a compilation command" 1435c43cc173Smrg 1436c43cc173Smrg # Delete any leftover library objects. 1437c43cc173Smrg if test "$build_old_libs" = yes; then 1438c43cc173Smrg removelist="$obj $lobj $libobj ${libobj}T" 1439c43cc173Smrg else 1440c43cc173Smrg removelist="$lobj $libobj ${libobj}T" 1441c43cc173Smrg fi 1442c43cc173Smrg 1443c43cc173Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 1444c43cc173Smrg case $host_os in 1445c27c18e8Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 1446c43cc173Smrg pic_mode=default 1447c43cc173Smrg ;; 1448c43cc173Smrg esac 1449c43cc173Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 1450c43cc173Smrg # non-PIC code in shared libraries is not supported 1451c43cc173Smrg pic_mode=default 1452c43cc173Smrg fi 1453c43cc173Smrg 1454c43cc173Smrg # Calculate the filename of the output object if compiler does 1455c43cc173Smrg # not support -o with -c 1456c43cc173Smrg if test "$compiler_c_o" = no; then 145737eb1ca1Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 1458c43cc173Smrg lockfile="$output_obj.lock" 1459c43cc173Smrg else 1460c43cc173Smrg output_obj= 1461c43cc173Smrg need_locks=no 1462c43cc173Smrg lockfile= 1463c43cc173Smrg fi 1464c43cc173Smrg 1465c43cc173Smrg # Lock this critical section if it is needed 1466c43cc173Smrg # We use this script file to make the link, it avoids creating a new file 1467c43cc173Smrg if test "$need_locks" = yes; then 1468c27c18e8Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 1469c27c18e8Smrg func_echo "Waiting for $lockfile to be removed" 1470c43cc173Smrg sleep 2 1471c43cc173Smrg done 1472c43cc173Smrg elif test "$need_locks" = warn; then 1473c43cc173Smrg if test -f "$lockfile"; then 1474c27c18e8Smrg $ECHO "\ 1475c43cc173Smrg*** ERROR, $lockfile exists and contains: 1476c43cc173Smrg`cat $lockfile 2>/dev/null` 1477c43cc173Smrg 1478c43cc173SmrgThis indicates that another process is trying to use the same 1479c43cc173Smrgtemporary object file, and libtool could not work around it because 1480c43cc173Smrgyour compiler does not support \`-c' and \`-o' together. If you 1481c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 1482c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 1483c43cc173Smrgcompiler." 1484c43cc173Smrg 1485c27c18e8Smrg $opt_dry_run || $RM $removelist 1486c43cc173Smrg exit $EXIT_FAILURE 1487c43cc173Smrg fi 1488c27c18e8Smrg removelist="$removelist $output_obj" 1489c27c18e8Smrg $ECHO "$srcfile" > "$lockfile" 1490c43cc173Smrg fi 1491c43cc173Smrg 1492c27c18e8Smrg $opt_dry_run || $RM $removelist 1493c27c18e8Smrg removelist="$removelist $lockfile" 1494c27c18e8Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 1495c27c18e8Smrg 1496c43cc173Smrg if test -n "$fix_srcfile_path"; then 1497c43cc173Smrg eval srcfile=\"$fix_srcfile_path\" 1498c43cc173Smrg fi 1499c27c18e8Smrg func_quote_for_eval "$srcfile" 1500c27c18e8Smrg qsrcfile=$func_quote_for_eval_result 1501c43cc173Smrg 1502c43cc173Smrg # Only build a PIC object if we are building libtool libraries. 1503c43cc173Smrg if test "$build_libtool_libs" = yes; then 1504c43cc173Smrg # Without this assignment, base_compile gets emptied. 1505c43cc173Smrg fbsd_hideous_sh_bug=$base_compile 1506c43cc173Smrg 1507c43cc173Smrg if test "$pic_mode" != no; then 1508c43cc173Smrg command="$base_compile $qsrcfile $pic_flag" 1509c43cc173Smrg else 1510c43cc173Smrg # Don't build PIC code 1511c43cc173Smrg command="$base_compile $qsrcfile" 1512c43cc173Smrg fi 1513c43cc173Smrg 1514c27c18e8Smrg func_mkdir_p "$xdir$objdir" 1515c43cc173Smrg 1516c43cc173Smrg if test -z "$output_obj"; then 1517c43cc173Smrg # Place PIC objects in $objdir 1518c43cc173Smrg command="$command -o $lobj" 1519c43cc173Smrg fi 1520c43cc173Smrg 1521c27c18e8Smrg func_show_eval_locale "$command" \ 1522c27c18e8Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 1523c43cc173Smrg 1524c43cc173Smrg if test "$need_locks" = warn && 1525c43cc173Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1526c27c18e8Smrg $ECHO "\ 1527c43cc173Smrg*** ERROR, $lockfile contains: 1528c43cc173Smrg`cat $lockfile 2>/dev/null` 1529c43cc173Smrg 1530c43cc173Smrgbut it should contain: 1531c43cc173Smrg$srcfile 1532c43cc173Smrg 1533c43cc173SmrgThis indicates that another process is trying to use the same 1534c43cc173Smrgtemporary object file, and libtool could not work around it because 1535c43cc173Smrgyour compiler does not support \`-c' and \`-o' together. If you 1536c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 1537c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 1538c43cc173Smrgcompiler." 1539c43cc173Smrg 1540c27c18e8Smrg $opt_dry_run || $RM $removelist 1541c43cc173Smrg exit $EXIT_FAILURE 1542c43cc173Smrg fi 1543c43cc173Smrg 1544c43cc173Smrg # Just move the object if needed, then go on to compile the next one 1545c43cc173Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 1546c27c18e8Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 1547c27c18e8Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1548c43cc173Smrg fi 1549c43cc173Smrg 1550c43cc173Smrg # Allow error messages only from the first compilation. 1551c43cc173Smrg if test "$suppress_opt" = yes; then 1552c27c18e8Smrg suppress_output=' >/dev/null 2>&1' 1553c43cc173Smrg fi 1554c43cc173Smrg fi 1555c43cc173Smrg 1556c43cc173Smrg # Only build a position-dependent object if we build old libraries. 1557c43cc173Smrg if test "$build_old_libs" = yes; then 1558c43cc173Smrg if test "$pic_mode" != yes; then 1559c43cc173Smrg # Don't build PIC code 1560c27c18e8Smrg command="$base_compile $qsrcfile$pie_flag" 1561c43cc173Smrg else 1562c43cc173Smrg command="$base_compile $qsrcfile $pic_flag" 1563c43cc173Smrg fi 1564c43cc173Smrg if test "$compiler_c_o" = yes; then 1565c43cc173Smrg command="$command -o $obj" 1566c43cc173Smrg fi 1567c43cc173Smrg 1568c43cc173Smrg # Suppress compiler output if we already did a PIC compilation. 1569c43cc173Smrg command="$command$suppress_output" 1570c27c18e8Smrg func_show_eval_locale "$command" \ 1571c27c18e8Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1572c43cc173Smrg 1573c43cc173Smrg if test "$need_locks" = warn && 1574c43cc173Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1575c27c18e8Smrg $ECHO "\ 1576c43cc173Smrg*** ERROR, $lockfile contains: 1577c43cc173Smrg`cat $lockfile 2>/dev/null` 1578c43cc173Smrg 1579c43cc173Smrgbut it should contain: 1580c43cc173Smrg$srcfile 1581c43cc173Smrg 1582c43cc173SmrgThis indicates that another process is trying to use the same 1583c43cc173Smrgtemporary object file, and libtool could not work around it because 1584c43cc173Smrgyour compiler does not support \`-c' and \`-o' together. If you 1585c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 1586c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 1587c43cc173Smrgcompiler." 1588c43cc173Smrg 1589c27c18e8Smrg $opt_dry_run || $RM $removelist 1590c43cc173Smrg exit $EXIT_FAILURE 1591c43cc173Smrg fi 1592c43cc173Smrg 1593c43cc173Smrg # Just move the object if needed 1594c43cc173Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 1595c27c18e8Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 1596c27c18e8Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1597c43cc173Smrg fi 1598c43cc173Smrg fi 1599c43cc173Smrg 1600c27c18e8Smrg $opt_dry_run || { 1601c27c18e8Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 1602c43cc173Smrg 1603c27c18e8Smrg # Unlock the critical section if it was locked 1604c27c18e8Smrg if test "$need_locks" != no; then 1605c27c18e8Smrg removelist=$lockfile 1606c27c18e8Smrg $RM "$lockfile" 1607c27c18e8Smrg fi 1608c27c18e8Smrg } 1609c43cc173Smrg 1610c43cc173Smrg exit $EXIT_SUCCESS 1611c27c18e8Smrg} 1612c43cc173Smrg 1613c27c18e8Smrg$opt_help || { 161437eb1ca1Smrg test "$mode" = compile && func_mode_compile ${1+"$@"} 1615c27c18e8Smrg} 1616c43cc173Smrg 1617c27c18e8Smrgfunc_mode_help () 1618c27c18e8Smrg{ 1619c27c18e8Smrg # We need to display help for each of the modes. 1620c27c18e8Smrg case $mode in 1621c27c18e8Smrg "") 1622c27c18e8Smrg # Generic help is extracted from the usage comments 1623c27c18e8Smrg # at the start of this file. 1624c27c18e8Smrg func_help 1625c27c18e8Smrg ;; 1626c43cc173Smrg 1627c27c18e8Smrg clean) 1628c27c18e8Smrg $ECHO \ 1629c27c18e8Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 1630c43cc173Smrg 1631c27c18e8SmrgRemove files from the build directory. 1632c43cc173Smrg 1633c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE 1634c27c18e8Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1635c27c18e8Smrgto RM. 1636c43cc173Smrg 1637c27c18e8SmrgIf FILE is a libtool library, object or program, all the files associated 1638c27c18e8Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 1639c27c18e8Smrg ;; 1640c43cc173Smrg 1641c27c18e8Smrg compile) 1642c27c18e8Smrg $ECHO \ 1643c27c18e8Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 1644c43cc173Smrg 1645c27c18e8SmrgCompile a source file into a libtool library object. 1646c43cc173Smrg 1647c27c18e8SmrgThis mode accepts the following additional options: 1648c43cc173Smrg 1649c27c18e8Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 1650c27c18e8Smrg -no-suppress do not suppress compiler output for multiple passes 165137eb1ca1Smrg -prefer-pic try to build PIC objects only 165237eb1ca1Smrg -prefer-non-pic try to build non-PIC objects only 1653c27c18e8Smrg -shared do not build a \`.o' file suitable for static linking 1654c27c18e8Smrg -static only build a \`.o' file suitable for static linking 165537eb1ca1Smrg -Wc,FLAG pass FLAG directly to the compiler 1656c43cc173Smrg 1657c27c18e8SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 1658c27c18e8Smrgfrom the given SOURCEFILE. 1659c43cc173Smrg 1660c27c18e8SmrgThe output file name is determined by removing the directory component from 1661c27c18e8SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 1662c27c18e8Smrglibrary object suffix, \`.lo'." 1663c27c18e8Smrg ;; 1664c43cc173Smrg 1665c27c18e8Smrg execute) 1666c27c18e8Smrg $ECHO \ 1667c27c18e8Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 1668c43cc173Smrg 1669c27c18e8SmrgAutomatically set library path, then run a program. 1670c43cc173Smrg 1671c27c18e8SmrgThis mode accepts the following additional options: 1672c43cc173Smrg 1673c27c18e8Smrg -dlopen FILE add the directory containing FILE to the library path 1674c43cc173Smrg 1675c27c18e8SmrgThis mode sets the library path environment variable according to \`-dlopen' 1676c27c18e8Smrgflags. 1677c43cc173Smrg 1678c27c18e8SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 1679c27c18e8Smrginto their corresponding uninstalled binary, and any of their required library 1680c27c18e8Smrgdirectories are added to the library path. 1681c43cc173Smrg 1682c27c18e8SmrgThen, COMMAND is executed, with ARGS as arguments." 1683c27c18e8Smrg ;; 1684c43cc173Smrg 1685c27c18e8Smrg finish) 1686c27c18e8Smrg $ECHO \ 1687c27c18e8Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 1688c43cc173Smrg 1689c27c18e8SmrgComplete the installation of libtool libraries. 1690c43cc173Smrg 1691c27c18e8SmrgEach LIBDIR is a directory that contains libtool libraries. 1692c43cc173Smrg 1693c27c18e8SmrgThe commands that this mode executes may require superuser privileges. Use 1694c27c18e8Smrgthe \`--dry-run' option if you just want to see what would be executed." 1695c27c18e8Smrg ;; 1696c43cc173Smrg 1697c27c18e8Smrg install) 1698c27c18e8Smrg $ECHO \ 1699c27c18e8Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 1700c43cc173Smrg 1701c27c18e8SmrgInstall executables or libraries. 1702c43cc173Smrg 1703c27c18e8SmrgINSTALL-COMMAND is the installation command. The first component should be 1704c27c18e8Smrgeither the \`install' or \`cp' program. 1705c43cc173Smrg 1706c27c18e8SmrgThe following components of INSTALL-COMMAND are treated specially: 1707c43cc173Smrg 170837eb1ca1Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 1709c43cc173Smrg 1710c27c18e8SmrgThe rest of the components are interpreted as arguments to that command (only 1711c27c18e8SmrgBSD-compatible install options are recognized)." 1712c27c18e8Smrg ;; 1713c43cc173Smrg 1714c27c18e8Smrg link) 1715c27c18e8Smrg $ECHO \ 1716c27c18e8Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 1717c43cc173Smrg 1718c27c18e8SmrgLink object files or libraries together to form another library, or to 1719c27c18e8Smrgcreate an executable program. 1720c43cc173Smrg 1721c27c18e8SmrgLINK-COMMAND is a command using the C compiler that you would use to create 1722c27c18e8Smrga program from several object files. 1723c43cc173Smrg 1724c27c18e8SmrgThe following components of LINK-COMMAND are treated specially: 1725c43cc173Smrg 1726c27c18e8Smrg -all-static do not do any dynamic linking at all 1727c27c18e8Smrg -avoid-version do not add a version suffix if possible 172837eb1ca1Smrg -bindir BINDIR specify path to binaries directory (for systems where 172937eb1ca1Smrg libraries must be found in the PATH setting at runtime) 1730c27c18e8Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 1731c27c18e8Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 1732c27c18e8Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 1733c27c18e8Smrg -export-symbols SYMFILE 1734c27c18e8Smrg try to export only the symbols listed in SYMFILE 1735c27c18e8Smrg -export-symbols-regex REGEX 1736c27c18e8Smrg try to export only the symbols matching REGEX 1737c27c18e8Smrg -LLIBDIR search LIBDIR for required installed libraries 1738c27c18e8Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 1739c27c18e8Smrg -module build a library that can dlopened 1740c27c18e8Smrg -no-fast-install disable the fast-install mode 1741c27c18e8Smrg -no-install link a not-installable executable 1742c27c18e8Smrg -no-undefined declare that a library does not refer to external symbols 1743c27c18e8Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 1744c27c18e8Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 1745c27c18e8Smrg -precious-files-regex REGEX 1746c27c18e8Smrg don't remove output files matching REGEX 1747c27c18e8Smrg -release RELEASE specify package release information 1748c27c18e8Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 1749c27c18e8Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 1750c27c18e8Smrg -shared only do dynamic linking of libtool libraries 1751c27c18e8Smrg -shrext SUFFIX override the standard shared library file extension 1752c27c18e8Smrg -static do not do any dynamic linking of uninstalled libtool libraries 1753c27c18e8Smrg -static-libtool-libs 1754c27c18e8Smrg do not do any dynamic linking of libtool libraries 1755c27c18e8Smrg -version-info CURRENT[:REVISION[:AGE]] 1756c27c18e8Smrg specify library version info [each variable defaults to 0] 1757c27c18e8Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 175837eb1ca1Smrg -Wc,FLAG 175937eb1ca1Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 176037eb1ca1Smrg -Wl,FLAG 176137eb1ca1Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 176237eb1ca1Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 1763c43cc173Smrg 1764c27c18e8SmrgAll other options (arguments beginning with \`-') are ignored. 1765c43cc173Smrg 1766c27c18e8SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 1767c27c18e8Smrgtreated as uninstalled libtool libraries, other files are standard or library 1768c27c18e8Smrgobject files. 1769c43cc173Smrg 1770c27c18e8SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 1771c27c18e8Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 1772c27c18e8Smrgrequired, except when creating a convenience library. 1773c43cc173Smrg 1774c27c18e8SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 1775c27c18e8Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 1776c43cc173Smrg 1777c27c18e8SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 1778c27c18e8Smrgis created, otherwise an executable program is created." 1779c43cc173Smrg ;; 1780c43cc173Smrg 1781c27c18e8Smrg uninstall) 1782c27c18e8Smrg $ECHO \ 1783c27c18e8Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 1784c43cc173Smrg 1785c27c18e8SmrgRemove libraries from an installation directory. 1786c43cc173Smrg 1787c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE 1788c27c18e8Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1789c27c18e8Smrgto RM. 1790c43cc173Smrg 1791c27c18e8SmrgIf FILE is a libtool library, all the files associated with it are deleted. 1792c27c18e8SmrgOtherwise, only FILE itself is deleted using RM." 1793c27c18e8Smrg ;; 1794c43cc173Smrg 1795c27c18e8Smrg *) 1796c27c18e8Smrg func_fatal_help "invalid operation mode \`$mode'" 1797c27c18e8Smrg ;; 1798c27c18e8Smrg esac 1799c43cc173Smrg 180037eb1ca1Smrg echo 1801c27c18e8Smrg $ECHO "Try \`$progname --help' for more information about other modes." 1802c27c18e8Smrg} 1803c43cc173Smrg 180437eb1ca1Smrg# Now that we've collected a possible --mode arg, show help if necessary 180537eb1ca1Smrgif $opt_help; then 180637eb1ca1Smrg if test "$opt_help" = :; then 180737eb1ca1Smrg func_mode_help 180837eb1ca1Smrg else 180937eb1ca1Smrg { 181037eb1ca1Smrg func_help noexit 181137eb1ca1Smrg for mode in compile link execute install finish uninstall clean; do 181237eb1ca1Smrg func_mode_help 181337eb1ca1Smrg done 181437eb1ca1Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 181537eb1ca1Smrg { 181637eb1ca1Smrg func_help noexit 181737eb1ca1Smrg for mode in compile link execute install finish uninstall clean; do 181837eb1ca1Smrg echo 181937eb1ca1Smrg func_mode_help 182037eb1ca1Smrg done 182137eb1ca1Smrg } | 182237eb1ca1Smrg sed '1d 182337eb1ca1Smrg /^When reporting/,/^Report/{ 182437eb1ca1Smrg H 182537eb1ca1Smrg d 182637eb1ca1Smrg } 182737eb1ca1Smrg $x 182837eb1ca1Smrg /information about other modes/d 182937eb1ca1Smrg /more detailed .*MODE/d 183037eb1ca1Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 183137eb1ca1Smrg fi 183237eb1ca1Smrg exit $? 183337eb1ca1Smrgfi 1834c43cc173Smrg 1835c43cc173Smrg 1836c27c18e8Smrg# func_mode_execute arg... 1837c27c18e8Smrgfunc_mode_execute () 1838c27c18e8Smrg{ 1839c27c18e8Smrg $opt_debug 1840c27c18e8Smrg # The first argument is the command name. 1841c27c18e8Smrg cmd="$nonopt" 1842c27c18e8Smrg test -z "$cmd" && \ 1843c27c18e8Smrg func_fatal_help "you must specify a COMMAND" 1844c43cc173Smrg 1845c27c18e8Smrg # Handle -dlopen flags immediately. 1846c27c18e8Smrg for file in $execute_dlfiles; do 1847c27c18e8Smrg test -f "$file" \ 1848c27c18e8Smrg || func_fatal_help "\`$file' is not a file" 1849c43cc173Smrg 1850c27c18e8Smrg dir= 1851c27c18e8Smrg case $file in 1852c27c18e8Smrg *.la) 1853c27c18e8Smrg # Check to see that this really is a libtool archive. 1854c27c18e8Smrg func_lalib_unsafe_p "$file" \ 1855c27c18e8Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 1856c43cc173Smrg 1857c27c18e8Smrg # Read the libtool library. 1858c27c18e8Smrg dlname= 1859c27c18e8Smrg library_names= 1860c27c18e8Smrg func_source "$file" 1861c43cc173Smrg 1862c27c18e8Smrg # Skip this library if it cannot be dlopened. 1863c27c18e8Smrg if test -z "$dlname"; then 1864c27c18e8Smrg # Warn if it was a shared library. 1865c27c18e8Smrg test -n "$library_names" && \ 1866c27c18e8Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 1867c27c18e8Smrg continue 1868c27c18e8Smrg fi 1869c43cc173Smrg 1870c27c18e8Smrg func_dirname "$file" "" "." 1871c27c18e8Smrg dir="$func_dirname_result" 1872c43cc173Smrg 1873c27c18e8Smrg if test -f "$dir/$objdir/$dlname"; then 1874c27c18e8Smrg dir="$dir/$objdir" 1875c27c18e8Smrg else 1876c27c18e8Smrg if test ! -f "$dir/$dlname"; then 1877c27c18e8Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1878c27c18e8Smrg fi 1879c27c18e8Smrg fi 1880c43cc173Smrg ;; 1881c43cc173Smrg 1882c27c18e8Smrg *.lo) 1883c27c18e8Smrg # Just add the directory containing the .lo file. 1884c27c18e8Smrg func_dirname "$file" "" "." 1885c27c18e8Smrg dir="$func_dirname_result" 1886c43cc173Smrg ;; 1887c43cc173Smrg 1888c27c18e8Smrg *) 1889c27c18e8Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 1890c43cc173Smrg continue 1891c43cc173Smrg ;; 1892c27c18e8Smrg esac 1893c43cc173Smrg 1894c27c18e8Smrg # Get the absolute pathname. 1895c27c18e8Smrg absdir=`cd "$dir" && pwd` 1896c27c18e8Smrg test -n "$absdir" && dir="$absdir" 1897c43cc173Smrg 1898c27c18e8Smrg # Now add the directory to shlibpath_var. 1899c27c18e8Smrg if eval "test -z \"\$$shlibpath_var\""; then 1900c27c18e8Smrg eval "$shlibpath_var=\"\$dir\"" 1901c27c18e8Smrg else 1902c27c18e8Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 1903c27c18e8Smrg fi 1904c27c18e8Smrg done 1905c43cc173Smrg 1906c27c18e8Smrg # This variable tells wrapper scripts just to set shlibpath_var 1907c27c18e8Smrg # rather than running their programs. 1908c27c18e8Smrg libtool_execute_magic="$magic" 1909c43cc173Smrg 1910c27c18e8Smrg # Check if any of the arguments is a wrapper script. 1911c27c18e8Smrg args= 1912c27c18e8Smrg for file 1913c27c18e8Smrg do 1914c27c18e8Smrg case $file in 191537eb1ca1Smrg -* | *.la | *.lo ) ;; 1916c27c18e8Smrg *) 1917c27c18e8Smrg # Do a test to see if this is really a libtool program. 1918c27c18e8Smrg if func_ltwrapper_script_p "$file"; then 1919c27c18e8Smrg func_source "$file" 1920c27c18e8Smrg # Transform arg to wrapped name. 1921c27c18e8Smrg file="$progdir/$program" 1922c27c18e8Smrg elif func_ltwrapper_executable_p "$file"; then 1923c27c18e8Smrg func_ltwrapper_scriptname "$file" 1924c27c18e8Smrg func_source "$func_ltwrapper_scriptname_result" 1925c27c18e8Smrg # Transform arg to wrapped name. 1926c27c18e8Smrg file="$progdir/$program" 1927c27c18e8Smrg fi 1928c27c18e8Smrg ;; 1929c27c18e8Smrg esac 1930c27c18e8Smrg # Quote arguments (to preserve shell metacharacters). 1931c27c18e8Smrg func_quote_for_eval "$file" 1932c27c18e8Smrg args="$args $func_quote_for_eval_result" 1933c27c18e8Smrg done 1934c43cc173Smrg 1935c27c18e8Smrg if test "X$opt_dry_run" = Xfalse; then 1936c27c18e8Smrg if test -n "$shlibpath_var"; then 1937c27c18e8Smrg # Export the shlibpath_var. 1938c27c18e8Smrg eval "export $shlibpath_var" 1939c27c18e8Smrg fi 1940c43cc173Smrg 1941c27c18e8Smrg # Restore saved environment variables 1942c27c18e8Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1943c27c18e8Smrg do 1944c27c18e8Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 1945c27c18e8Smrg $lt_var=\$save_$lt_var; export $lt_var 1946c43cc173Smrg else 1947c27c18e8Smrg $lt_unset $lt_var 1948c27c18e8Smrg fi" 1949c27c18e8Smrg done 1950c43cc173Smrg 1951c27c18e8Smrg # Now prepare to actually exec the command. 1952c27c18e8Smrg exec_cmd="\$cmd$args" 1953c27c18e8Smrg else 1954c27c18e8Smrg # Display what would be done. 1955c27c18e8Smrg if test -n "$shlibpath_var"; then 1956c27c18e8Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 195737eb1ca1Smrg echo "export $shlibpath_var" 1958c27c18e8Smrg fi 1959c27c18e8Smrg $ECHO "$cmd$args" 1960c27c18e8Smrg exit $EXIT_SUCCESS 1961c27c18e8Smrg fi 1962c27c18e8Smrg} 1963c43cc173Smrg 1964c27c18e8Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 1965c43cc173Smrg 1966c43cc173Smrg 1967c27c18e8Smrg# func_mode_finish arg... 1968c27c18e8Smrgfunc_mode_finish () 1969c27c18e8Smrg{ 1970c27c18e8Smrg $opt_debug 1971c27c18e8Smrg libdirs="$nonopt" 1972c27c18e8Smrg admincmds= 1973c43cc173Smrg 1974c27c18e8Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 1975c27c18e8Smrg for dir 1976c27c18e8Smrg do 1977c27c18e8Smrg libdirs="$libdirs $dir" 1978c27c18e8Smrg done 1979c43cc173Smrg 1980c27c18e8Smrg for libdir in $libdirs; do 1981c27c18e8Smrg if test -n "$finish_cmds"; then 1982c27c18e8Smrg # Do each command in the finish commands. 1983c27c18e8Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 1984c27c18e8Smrg'"$cmd"'"' 1985c43cc173Smrg fi 1986c27c18e8Smrg if test -n "$finish_eval"; then 1987c27c18e8Smrg # Do the single finish_eval. 1988c27c18e8Smrg eval cmds=\"$finish_eval\" 1989c27c18e8Smrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 1990c27c18e8Smrg $cmds" 1991c27c18e8Smrg fi 1992c27c18e8Smrg done 1993c27c18e8Smrg fi 1994c43cc173Smrg 1995c27c18e8Smrg # Exit here if they wanted silent mode. 1996c27c18e8Smrg $opt_silent && exit $EXIT_SUCCESS 1997c43cc173Smrg 199837eb1ca1Smrg echo "----------------------------------------------------------------------" 199937eb1ca1Smrg echo "Libraries have been installed in:" 2000c27c18e8Smrg for libdir in $libdirs; do 2001c27c18e8Smrg $ECHO " $libdir" 2002c27c18e8Smrg done 200337eb1ca1Smrg echo 200437eb1ca1Smrg echo "If you ever happen to want to link against installed libraries" 200537eb1ca1Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 200637eb1ca1Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 200737eb1ca1Smrg echo "flag during linking and do at least one of the following:" 2008c27c18e8Smrg if test -n "$shlibpath_var"; then 200937eb1ca1Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 201037eb1ca1Smrg echo " during execution" 2011c27c18e8Smrg fi 2012c27c18e8Smrg if test -n "$runpath_var"; then 201337eb1ca1Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 201437eb1ca1Smrg echo " during linking" 2015c27c18e8Smrg fi 2016c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 2017c27c18e8Smrg libdir=LIBDIR 2018c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2019c43cc173Smrg 2020c27c18e8Smrg $ECHO " - use the \`$flag' linker flag" 2021c27c18e8Smrg fi 2022c27c18e8Smrg if test -n "$admincmds"; then 2023c27c18e8Smrg $ECHO " - have your system administrator run these commands:$admincmds" 2024c27c18e8Smrg fi 2025c27c18e8Smrg if test -f /etc/ld.so.conf; then 202637eb1ca1Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2027c27c18e8Smrg fi 202837eb1ca1Smrg echo 2029c27c18e8Smrg 203037eb1ca1Smrg echo "See any operating system documentation about shared libraries for" 2031c27c18e8Smrg case $host in 2032c27c18e8Smrg solaris2.[6789]|solaris2.1[0-9]) 203337eb1ca1Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 203437eb1ca1Smrg echo "pages." 2035c27c18e8Smrg ;; 2036c27c18e8Smrg *) 203737eb1ca1Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 2038c27c18e8Smrg ;; 2039c27c18e8Smrg esac 204037eb1ca1Smrg echo "----------------------------------------------------------------------" 2041c27c18e8Smrg exit $EXIT_SUCCESS 2042c27c18e8Smrg} 2043c27c18e8Smrg 2044c27c18e8Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 2045c27c18e8Smrg 2046c27c18e8Smrg 2047c27c18e8Smrg# func_mode_install arg... 2048c27c18e8Smrgfunc_mode_install () 2049c27c18e8Smrg{ 2050c27c18e8Smrg $opt_debug 2051c27c18e8Smrg # There may be an optional sh(1) argument at the beginning of 2052c27c18e8Smrg # install_prog (especially on Windows NT). 2053c27c18e8Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2054c27c18e8Smrg # Allow the use of GNU shtool's install command. 205537eb1ca1Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 2056c27c18e8Smrg # Aesthetically quote it. 2057c27c18e8Smrg func_quote_for_eval "$nonopt" 2058c27c18e8Smrg install_prog="$func_quote_for_eval_result " 2059c27c18e8Smrg arg=$1 2060c27c18e8Smrg shift 2061c27c18e8Smrg else 2062c27c18e8Smrg install_prog= 2063c27c18e8Smrg arg=$nonopt 2064c27c18e8Smrg fi 2065c27c18e8Smrg 2066c27c18e8Smrg # The real first argument should be the name of the installation program. 2067c27c18e8Smrg # Aesthetically quote it. 2068c27c18e8Smrg func_quote_for_eval "$arg" 2069c27c18e8Smrg install_prog="$install_prog$func_quote_for_eval_result" 207037eb1ca1Smrg install_shared_prog=$install_prog 207137eb1ca1Smrg case " $install_prog " in 207237eb1ca1Smrg *[\\\ /]cp\ *) install_cp=: ;; 207337eb1ca1Smrg *) install_cp=false ;; 207437eb1ca1Smrg esac 2075c27c18e8Smrg 2076c27c18e8Smrg # We need to accept at least all the BSD install flags. 2077c27c18e8Smrg dest= 2078c27c18e8Smrg files= 2079c27c18e8Smrg opts= 2080c27c18e8Smrg prev= 2081c27c18e8Smrg install_type= 2082c27c18e8Smrg isdir=no 2083c27c18e8Smrg stripme= 208437eb1ca1Smrg no_mode=: 2085c27c18e8Smrg for arg 2086c27c18e8Smrg do 208737eb1ca1Smrg arg2= 2088c27c18e8Smrg if test -n "$dest"; then 2089c27c18e8Smrg files="$files $dest" 2090c27c18e8Smrg dest=$arg 2091c27c18e8Smrg continue 2092c27c18e8Smrg fi 2093c27c18e8Smrg 2094c27c18e8Smrg case $arg in 2095c27c18e8Smrg -d) isdir=yes ;; 2096c27c18e8Smrg -f) 209737eb1ca1Smrg if $install_cp; then :; else 209837eb1ca1Smrg prev=$arg 209937eb1ca1Smrg fi 2100c27c18e8Smrg ;; 2101c27c18e8Smrg -g | -m | -o) 2102c27c18e8Smrg prev=$arg 2103c27c18e8Smrg ;; 2104c27c18e8Smrg -s) 2105c27c18e8Smrg stripme=" -s" 2106c27c18e8Smrg continue 2107c27c18e8Smrg ;; 2108c27c18e8Smrg -*) 2109c27c18e8Smrg ;; 2110c27c18e8Smrg *) 2111c27c18e8Smrg # If the previous option needed an argument, then skip it. 2112c27c18e8Smrg if test -n "$prev"; then 211337eb1ca1Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 211437eb1ca1Smrg arg2=$install_override_mode 211537eb1ca1Smrg no_mode=false 211637eb1ca1Smrg fi 2117c43cc173Smrg prev= 2118c43cc173Smrg else 2119c27c18e8Smrg dest=$arg 2120c27c18e8Smrg continue 2121c43cc173Smrg fi 2122c43cc173Smrg ;; 2123c27c18e8Smrg esac 2124c43cc173Smrg 2125c27c18e8Smrg # Aesthetically quote the argument. 2126c27c18e8Smrg func_quote_for_eval "$arg" 2127c27c18e8Smrg install_prog="$install_prog $func_quote_for_eval_result" 212837eb1ca1Smrg if test -n "$arg2"; then 212937eb1ca1Smrg func_quote_for_eval "$arg2" 213037eb1ca1Smrg fi 213137eb1ca1Smrg install_shared_prog="$install_shared_prog $func_quote_for_eval_result" 2132c27c18e8Smrg done 2133c43cc173Smrg 2134c27c18e8Smrg test -z "$install_prog" && \ 2135c27c18e8Smrg func_fatal_help "you must specify an install program" 2136c43cc173Smrg 2137c27c18e8Smrg test -n "$prev" && \ 2138c27c18e8Smrg func_fatal_help "the \`$prev' option requires an argument" 2139c43cc173Smrg 214037eb1ca1Smrg if test -n "$install_override_mode" && $no_mode; then 214137eb1ca1Smrg if $install_cp; then :; else 214237eb1ca1Smrg func_quote_for_eval "$install_override_mode" 214337eb1ca1Smrg install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" 214437eb1ca1Smrg fi 214537eb1ca1Smrg fi 214637eb1ca1Smrg 2147c27c18e8Smrg if test -z "$files"; then 2148c27c18e8Smrg if test -z "$dest"; then 2149c27c18e8Smrg func_fatal_help "no file or destination specified" 2150c27c18e8Smrg else 2151c27c18e8Smrg func_fatal_help "you must specify a destination" 2152c27c18e8Smrg fi 2153c43cc173Smrg fi 2154c43cc173Smrg 2155c27c18e8Smrg # Strip any trailing slash from the destination. 2156c27c18e8Smrg func_stripname '' '/' "$dest" 2157c27c18e8Smrg dest=$func_stripname_result 2158c43cc173Smrg 2159c27c18e8Smrg # Check to see that the destination is a directory. 2160c27c18e8Smrg test -d "$dest" && isdir=yes 2161c27c18e8Smrg if test "$isdir" = yes; then 2162c27c18e8Smrg destdir="$dest" 2163c27c18e8Smrg destname= 2164c43cc173Smrg else 2165c27c18e8Smrg func_dirname_and_basename "$dest" "" "." 2166c27c18e8Smrg destdir="$func_dirname_result" 2167c27c18e8Smrg destname="$func_basename_result" 2168c43cc173Smrg 2169c27c18e8Smrg # Not a directory, so check to see that there is only one file specified. 2170c27c18e8Smrg set dummy $files; shift 2171c27c18e8Smrg test "$#" -gt 1 && \ 2172c27c18e8Smrg func_fatal_help "\`$dest' is not a directory" 2173c43cc173Smrg fi 2174c27c18e8Smrg case $destdir in 2175c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2176c43cc173Smrg *) 2177c27c18e8Smrg for file in $files; do 2178c27c18e8Smrg case $file in 2179c27c18e8Smrg *.lo) ;; 2180c27c18e8Smrg *) 2181c27c18e8Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 2182c27c18e8Smrg ;; 2183c27c18e8Smrg esac 2184c27c18e8Smrg done 2185c43cc173Smrg ;; 2186c43cc173Smrg esac 2187c43cc173Smrg 2188c27c18e8Smrg # This variable tells wrapper scripts just to set variables rather 2189c27c18e8Smrg # than running their programs. 2190c27c18e8Smrg libtool_install_magic="$magic" 2191c43cc173Smrg 2192c27c18e8Smrg staticlibs= 2193c27c18e8Smrg future_libdirs= 2194c27c18e8Smrg current_libdirs= 2195c27c18e8Smrg for file in $files; do 2196c43cc173Smrg 2197c27c18e8Smrg # Do each installation. 2198c27c18e8Smrg case $file in 2199c27c18e8Smrg *.$libext) 2200c27c18e8Smrg # Do the static libraries later. 2201c27c18e8Smrg staticlibs="$staticlibs $file" 2202c27c18e8Smrg ;; 2203c27c18e8Smrg 2204c27c18e8Smrg *.la) 2205c27c18e8Smrg # Check to see that this really is a libtool archive. 2206c27c18e8Smrg func_lalib_unsafe_p "$file" \ 2207c27c18e8Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 2208c27c18e8Smrg 2209c27c18e8Smrg library_names= 2210c27c18e8Smrg old_library= 2211c27c18e8Smrg relink_command= 2212c27c18e8Smrg func_source "$file" 2213c27c18e8Smrg 2214c27c18e8Smrg # Add the libdir to current_libdirs if it is the destination. 2215c27c18e8Smrg if test "X$destdir" = "X$libdir"; then 2216c27c18e8Smrg case "$current_libdirs " in 2217c27c18e8Smrg *" $libdir "*) ;; 2218c27c18e8Smrg *) current_libdirs="$current_libdirs $libdir" ;; 2219c43cc173Smrg esac 2220c27c18e8Smrg else 2221c27c18e8Smrg # Note the libdir as a future libdir. 2222c27c18e8Smrg case "$future_libdirs " in 2223c27c18e8Smrg *" $libdir "*) ;; 2224c27c18e8Smrg *) future_libdirs="$future_libdirs $libdir" ;; 2225c27c18e8Smrg esac 2226c27c18e8Smrg fi 2227c43cc173Smrg 2228c27c18e8Smrg func_dirname "$file" "/" "" 2229c27c18e8Smrg dir="$func_dirname_result" 2230c27c18e8Smrg dir="$dir$objdir" 2231c27c18e8Smrg 2232c27c18e8Smrg if test -n "$relink_command"; then 2233c27c18e8Smrg # Determine the prefix the user has applied to our future dir. 223437eb1ca1Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2235c27c18e8Smrg 2236c27c18e8Smrg # Don't allow the user to place us outside of our expected 2237c27c18e8Smrg # location b/c this prevents finding dependent libraries that 2238c27c18e8Smrg # are installed to the same prefix. 2239c27c18e8Smrg # At present, this check doesn't affect windows .dll's that 2240c27c18e8Smrg # are installed into $libdir/../bin (currently, that works fine) 2241c27c18e8Smrg # but it's something to keep an eye on. 2242c27c18e8Smrg test "$inst_prefix_dir" = "$destdir" && \ 2243c27c18e8Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2244c27c18e8Smrg 2245c27c18e8Smrg if test -n "$inst_prefix_dir"; then 2246c27c18e8Smrg # Stick the inst_prefix_dir data into the link command. 224737eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2248c27c18e8Smrg else 224937eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2250c27c18e8Smrg fi 2251c27c18e8Smrg 2252c27c18e8Smrg func_warning "relinking \`$file'" 2253c27c18e8Smrg func_show_eval "$relink_command" \ 2254c27c18e8Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2255c27c18e8Smrg fi 2256c27c18e8Smrg 2257c27c18e8Smrg # See the names of the shared library. 2258c27c18e8Smrg set dummy $library_names; shift 2259c27c18e8Smrg if test -n "$1"; then 2260c27c18e8Smrg realname="$1" 2261c27c18e8Smrg shift 2262c27c18e8Smrg 2263c27c18e8Smrg srcname="$realname" 2264c27c18e8Smrg test -n "$relink_command" && srcname="$realname"T 2265c27c18e8Smrg 2266c27c18e8Smrg # Install the shared library and build the symlinks. 226737eb1ca1Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2268c27c18e8Smrg 'exit $?' 2269c27c18e8Smrg tstripme="$stripme" 2270c27c18e8Smrg case $host_os in 2271c27c18e8Smrg cygwin* | mingw* | pw32* | cegcc*) 2272c27c18e8Smrg case $realname in 2273c27c18e8Smrg *.dll.a) 2274c27c18e8Smrg tstripme="" 2275c27c18e8Smrg ;; 2276c27c18e8Smrg esac 2277c43cc173Smrg ;; 2278c43cc173Smrg esac 2279c27c18e8Smrg if test -n "$tstripme" && test -n "$striplib"; then 2280c27c18e8Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 2281c43cc173Smrg fi 2282c27c18e8Smrg 2283c27c18e8Smrg if test "$#" -gt 0; then 2284c27c18e8Smrg # Delete the old symlinks, and create new ones. 2285c27c18e8Smrg # Try `ln -sf' first, because the `ln' binary might depend on 2286c27c18e8Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 2287c27c18e8Smrg # so we also need to try rm && ln -s. 2288c27c18e8Smrg for linkname 2289c27c18e8Smrg do 2290c27c18e8Smrg test "$linkname" != "$realname" \ 2291c27c18e8Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 2292c43cc173Smrg done 2293c43cc173Smrg fi 2294c43cc173Smrg 2295c27c18e8Smrg # Do each command in the postinstall commands. 2296c27c18e8Smrg lib="$destdir/$realname" 2297c27c18e8Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 2298c43cc173Smrg fi 2299c43cc173Smrg 2300c27c18e8Smrg # Install the pseudo-library for information purposes. 2301c27c18e8Smrg func_basename "$file" 2302c27c18e8Smrg name="$func_basename_result" 2303c27c18e8Smrg instname="$dir/$name"i 2304c27c18e8Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 2305c43cc173Smrg 2306c27c18e8Smrg # Maybe install the static library, too. 2307c27c18e8Smrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 2308c27c18e8Smrg ;; 2309c43cc173Smrg 2310c27c18e8Smrg *.lo) 2311c27c18e8Smrg # Install (i.e. copy) a libtool object. 2312c43cc173Smrg 2313c27c18e8Smrg # Figure out destination file name, if it wasn't already specified. 2314c27c18e8Smrg if test -n "$destname"; then 2315c27c18e8Smrg destfile="$destdir/$destname" 2316c27c18e8Smrg else 2317c27c18e8Smrg func_basename "$file" 2318c27c18e8Smrg destfile="$func_basename_result" 2319c27c18e8Smrg destfile="$destdir/$destfile" 2320c43cc173Smrg fi 2321c43cc173Smrg 2322c27c18e8Smrg # Deduce the name of the destination old-style object file. 2323c27c18e8Smrg case $destfile in 2324c27c18e8Smrg *.lo) 2325c27c18e8Smrg func_lo2o "$destfile" 2326c27c18e8Smrg staticdest=$func_lo2o_result 2327c27c18e8Smrg ;; 2328c27c18e8Smrg *.$objext) 2329c27c18e8Smrg staticdest="$destfile" 2330c27c18e8Smrg destfile= 2331c27c18e8Smrg ;; 2332c27c18e8Smrg *) 2333c27c18e8Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 2334c27c18e8Smrg ;; 2335c27c18e8Smrg esac 2336c43cc173Smrg 2337c27c18e8Smrg # Install the libtool object if requested. 2338c27c18e8Smrg test -n "$destfile" && \ 2339c27c18e8Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 2340c43cc173Smrg 2341c27c18e8Smrg # Install the old object if enabled. 2342c27c18e8Smrg if test "$build_old_libs" = yes; then 2343c27c18e8Smrg # Deduce the name of the old-style object file. 2344c27c18e8Smrg func_lo2o "$file" 2345c27c18e8Smrg staticobj=$func_lo2o_result 2346c27c18e8Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 2347c43cc173Smrg fi 2348c27c18e8Smrg exit $EXIT_SUCCESS 2349c27c18e8Smrg ;; 2350c43cc173Smrg 2351c27c18e8Smrg *) 2352c27c18e8Smrg # Figure out destination file name, if it wasn't already specified. 2353c27c18e8Smrg if test -n "$destname"; then 2354c27c18e8Smrg destfile="$destdir/$destname" 2355c27c18e8Smrg else 2356c27c18e8Smrg func_basename "$file" 2357c27c18e8Smrg destfile="$func_basename_result" 2358c27c18e8Smrg destfile="$destdir/$destfile" 2359c27c18e8Smrg fi 2360c43cc173Smrg 2361c27c18e8Smrg # If the file is missing, and there is a .exe on the end, strip it 2362c27c18e8Smrg # because it is most likely a libtool script we actually want to 2363c27c18e8Smrg # install 2364c27c18e8Smrg stripped_ext="" 2365c27c18e8Smrg case $file in 2366c27c18e8Smrg *.exe) 2367c27c18e8Smrg if test ! -f "$file"; then 2368c27c18e8Smrg func_stripname '' '.exe' "$file" 2369c27c18e8Smrg file=$func_stripname_result 2370c27c18e8Smrg stripped_ext=".exe" 2371c27c18e8Smrg fi 2372c27c18e8Smrg ;; 2373c27c18e8Smrg esac 2374c27c18e8Smrg 2375c27c18e8Smrg # Do a test to see if this is really a libtool program. 2376c27c18e8Smrg case $host in 2377c27c18e8Smrg *cygwin* | *mingw*) 2378c27c18e8Smrg if func_ltwrapper_executable_p "$file"; then 2379c27c18e8Smrg func_ltwrapper_scriptname "$file" 2380c27c18e8Smrg wrapper=$func_ltwrapper_scriptname_result 2381c27c18e8Smrg else 2382c27c18e8Smrg func_stripname '' '.exe' "$file" 2383c27c18e8Smrg wrapper=$func_stripname_result 2384c27c18e8Smrg fi 2385c27c18e8Smrg ;; 2386c43cc173Smrg *) 2387c27c18e8Smrg wrapper=$file 2388c27c18e8Smrg ;; 2389c27c18e8Smrg esac 2390c27c18e8Smrg if func_ltwrapper_script_p "$wrapper"; then 2391c27c18e8Smrg notinst_deplibs= 2392c27c18e8Smrg relink_command= 2393c27c18e8Smrg 2394c27c18e8Smrg func_source "$wrapper" 2395c27c18e8Smrg 2396c27c18e8Smrg # Check the variables that should have been set. 2397c27c18e8Smrg test -z "$generated_by_libtool_version" && \ 2398c27c18e8Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 2399c27c18e8Smrg 2400c27c18e8Smrg finalize=yes 2401c27c18e8Smrg for lib in $notinst_deplibs; do 2402c27c18e8Smrg # Check to see that each library is installed. 2403c27c18e8Smrg libdir= 2404c27c18e8Smrg if test -f "$lib"; then 2405c27c18e8Smrg func_source "$lib" 2406c27c18e8Smrg fi 240737eb1ca1Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 2408c27c18e8Smrg if test -n "$libdir" && test ! -f "$libfile"; then 2409c27c18e8Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 2410c27c18e8Smrg finalize=no 2411c27c18e8Smrg fi 2412c27c18e8Smrg done 2413c27c18e8Smrg 2414c27c18e8Smrg relink_command= 2415c27c18e8Smrg func_source "$wrapper" 2416c27c18e8Smrg 2417c27c18e8Smrg outputname= 2418c27c18e8Smrg if test "$fast_install" = no && test -n "$relink_command"; then 2419c27c18e8Smrg $opt_dry_run || { 2420c27c18e8Smrg if test "$finalize" = yes; then 2421c27c18e8Smrg tmpdir=`func_mktempdir` 2422c27c18e8Smrg func_basename "$file$stripped_ext" 2423c27c18e8Smrg file="$func_basename_result" 2424c27c18e8Smrg outputname="$tmpdir/$file" 2425c27c18e8Smrg # Replace the output file specification. 242637eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 2427c27c18e8Smrg 2428c27c18e8Smrg $opt_silent || { 2429c27c18e8Smrg func_quote_for_expand "$relink_command" 2430c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 2431c27c18e8Smrg } 2432c27c18e8Smrg if eval "$relink_command"; then : 2433c27c18e8Smrg else 2434c27c18e8Smrg func_error "error: relink \`$file' with the above command before installing it" 2435c27c18e8Smrg $opt_dry_run || ${RM}r "$tmpdir" 2436c27c18e8Smrg continue 2437c27c18e8Smrg fi 2438c27c18e8Smrg file="$outputname" 2439c27c18e8Smrg else 2440c27c18e8Smrg func_warning "cannot relink \`$file'" 2441c27c18e8Smrg fi 2442c27c18e8Smrg } 2443c27c18e8Smrg else 2444c27c18e8Smrg # Install the binary that we compiled earlier. 244537eb1ca1Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 2446c43cc173Smrg fi 2447c27c18e8Smrg fi 2448c27c18e8Smrg 2449c27c18e8Smrg # remove .exe since cygwin /usr/bin/install will append another 2450c27c18e8Smrg # one anyway 2451c27c18e8Smrg case $install_prog,$host in 2452c27c18e8Smrg */usr/bin/install*,*cygwin*) 2453c27c18e8Smrg case $file:$destfile in 2454c27c18e8Smrg *.exe:*.exe) 2455c27c18e8Smrg # this is ok 2456c27c18e8Smrg ;; 2457c27c18e8Smrg *.exe:*) 2458c27c18e8Smrg destfile=$destfile.exe 2459c27c18e8Smrg ;; 2460c27c18e8Smrg *:*.exe) 2461c27c18e8Smrg func_stripname '' '.exe' "$destfile" 2462c27c18e8Smrg destfile=$func_stripname_result 2463c27c18e8Smrg ;; 2464c27c18e8Smrg esac 2465c43cc173Smrg ;; 2466c43cc173Smrg esac 2467c27c18e8Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 2468c27c18e8Smrg $opt_dry_run || if test -n "$outputname"; then 2469c27c18e8Smrg ${RM}r "$tmpdir" 2470c27c18e8Smrg fi 2471c27c18e8Smrg ;; 2472c27c18e8Smrg esac 2473c27c18e8Smrg done 2474c43cc173Smrg 2475c27c18e8Smrg for file in $staticlibs; do 2476c27c18e8Smrg func_basename "$file" 2477c27c18e8Smrg name="$func_basename_result" 2478c27c18e8Smrg 2479c27c18e8Smrg # Set up the ranlib parameters. 2480c27c18e8Smrg oldlib="$destdir/$name" 2481c27c18e8Smrg 2482c27c18e8Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 2483c27c18e8Smrg 2484c27c18e8Smrg if test -n "$stripme" && test -n "$old_striplib"; then 2485c27c18e8Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 2486c27c18e8Smrg fi 2487c27c18e8Smrg 2488c27c18e8Smrg # Do each command in the postinstall commands. 2489c27c18e8Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 2490c27c18e8Smrg done 2491c27c18e8Smrg 2492c27c18e8Smrg test -n "$future_libdirs" && \ 2493c27c18e8Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 2494c27c18e8Smrg 2495c27c18e8Smrg if test -n "$current_libdirs"; then 2496c27c18e8Smrg # Maybe just do a dry run. 2497c27c18e8Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 2498c27c18e8Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 2499c27c18e8Smrg else 2500c27c18e8Smrg exit $EXIT_SUCCESS 2501c27c18e8Smrg fi 2502c27c18e8Smrg} 2503c27c18e8Smrg 2504c27c18e8Smrgtest "$mode" = install && func_mode_install ${1+"$@"} 2505c27c18e8Smrg 2506c27c18e8Smrg 2507c27c18e8Smrg# func_generate_dlsyms outputname originator pic_p 2508c27c18e8Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 2509c27c18e8Smrg# a dlpreopen symbol table. 2510c27c18e8Smrgfunc_generate_dlsyms () 2511c27c18e8Smrg{ 2512c27c18e8Smrg $opt_debug 2513c27c18e8Smrg my_outputname="$1" 2514c27c18e8Smrg my_originator="$2" 2515c27c18e8Smrg my_pic_p="${3-no}" 2516c27c18e8Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 2517c27c18e8Smrg my_dlsyms= 2518c27c18e8Smrg 2519c27c18e8Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 2520c27c18e8Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 2521c27c18e8Smrg my_dlsyms="${my_outputname}S.c" 2522c27c18e8Smrg else 2523c27c18e8Smrg func_error "not configured to extract global symbols from dlpreopened files" 2524c27c18e8Smrg fi 2525c27c18e8Smrg fi 2526c27c18e8Smrg 2527c27c18e8Smrg if test -n "$my_dlsyms"; then 2528c27c18e8Smrg case $my_dlsyms in 2529c27c18e8Smrg "") ;; 2530c27c18e8Smrg *.c) 2531c27c18e8Smrg # Discover the nlist of each of the dlfiles. 2532c27c18e8Smrg nlist="$output_objdir/${my_outputname}.nm" 2533c27c18e8Smrg 2534c27c18e8Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 2535c27c18e8Smrg 2536c27c18e8Smrg # Parse the name list into a source file. 2537c27c18e8Smrg func_verbose "creating $output_objdir/$my_dlsyms" 2538c27c18e8Smrg 2539c27c18e8Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 2540c27c18e8Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 2541c27c18e8Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 2542c27c18e8Smrg 2543c27c18e8Smrg#ifdef __cplusplus 2544c27c18e8Smrgextern \"C\" { 2545c27c18e8Smrg#endif 2546c27c18e8Smrg 254737eb1ca1Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 254837eb1ca1Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 254937eb1ca1Smrg#endif 255037eb1ca1Smrg 2551c27c18e8Smrg/* External symbol declarations for the compiler. */\ 2552c27c18e8Smrg" 2553c27c18e8Smrg 2554c27c18e8Smrg if test "$dlself" = yes; then 2555c27c18e8Smrg func_verbose "generating symbol list for \`$output'" 2556c27c18e8Smrg 2557c27c18e8Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 2558c27c18e8Smrg 2559c27c18e8Smrg # Add our own program objects to the symbol list. 256037eb1ca1Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 2561c27c18e8Smrg for progfile in $progfiles; do 2562c27c18e8Smrg func_verbose "extracting global C symbols from \`$progfile'" 2563c27c18e8Smrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 2564c27c18e8Smrg done 2565c27c18e8Smrg 2566c27c18e8Smrg if test -n "$exclude_expsyms"; then 2567c27c18e8Smrg $opt_dry_run || { 2568c27c18e8Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 2569c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 2570c27c18e8Smrg } 2571c43cc173Smrg fi 2572c27c18e8Smrg 2573c27c18e8Smrg if test -n "$export_symbols_regex"; then 2574c27c18e8Smrg $opt_dry_run || { 2575c27c18e8Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 2576c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 2577c27c18e8Smrg } 2578c27c18e8Smrg fi 2579c27c18e8Smrg 2580c27c18e8Smrg # Prepare the list of exported symbols 2581c27c18e8Smrg if test -z "$export_symbols"; then 2582c27c18e8Smrg export_symbols="$output_objdir/$outputname.exp" 2583c27c18e8Smrg $opt_dry_run || { 2584c27c18e8Smrg $RM $export_symbols 2585c27c18e8Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 2586c27c18e8Smrg case $host in 2587c27c18e8Smrg *cygwin* | *mingw* | *cegcc* ) 2588c27c18e8Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2589c27c18e8Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 2590c27c18e8Smrg ;; 2591c27c18e8Smrg esac 2592c27c18e8Smrg } 2593c43cc173Smrg else 2594c27c18e8Smrg $opt_dry_run || { 2595c27c18e8Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 2596c27c18e8Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 2597c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 2598c27c18e8Smrg case $host in 259937eb1ca1Smrg *cygwin* | *mingw* | *cegcc* ) 2600c27c18e8Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2601c27c18e8Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 2602c27c18e8Smrg ;; 2603c27c18e8Smrg esac 2604c27c18e8Smrg } 2605c43cc173Smrg fi 2606c27c18e8Smrg fi 2607c43cc173Smrg 2608c27c18e8Smrg for dlprefile in $dlprefiles; do 2609c27c18e8Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 2610c27c18e8Smrg func_basename "$dlprefile" 2611c27c18e8Smrg name="$func_basename_result" 2612c27c18e8Smrg $opt_dry_run || { 2613c27c18e8Smrg eval '$ECHO ": $name " >> "$nlist"' 2614c27c18e8Smrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 2615c27c18e8Smrg } 2616c27c18e8Smrg done 2617c27c18e8Smrg 2618c27c18e8Smrg $opt_dry_run || { 2619c27c18e8Smrg # Make sure we have at least an empty file. 2620c27c18e8Smrg test -f "$nlist" || : > "$nlist" 2621c27c18e8Smrg 2622c27c18e8Smrg if test -n "$exclude_expsyms"; then 2623c27c18e8Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 2624c27c18e8Smrg $MV "$nlist"T "$nlist" 2625c43cc173Smrg fi 2626c27c18e8Smrg 2627c27c18e8Smrg # Try sorting and uniquifying the output. 2628c27c18e8Smrg if $GREP -v "^: " < "$nlist" | 2629c27c18e8Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 2630c27c18e8Smrg sort -k 3 2631c27c18e8Smrg else 2632c27c18e8Smrg sort +2 2633c27c18e8Smrg fi | 2634c27c18e8Smrg uniq > "$nlist"S; then 2635c27c18e8Smrg : 2636c43cc173Smrg else 2637c27c18e8Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 2638c43cc173Smrg fi 2639c43cc173Smrg 2640c27c18e8Smrg if test -f "$nlist"S; then 2641c27c18e8Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 2642c43cc173Smrg else 264337eb1ca1Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 2644c43cc173Smrg fi 2645c43cc173Smrg 264637eb1ca1Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2647c43cc173Smrg 2648c27c18e8Smrg/* The mapping between symbol names and symbols. */ 2649c27c18e8Smrgtypedef struct { 2650c27c18e8Smrg const char *name; 2651c27c18e8Smrg void *address; 2652c27c18e8Smrg} lt_dlsymlist; 2653c27c18e8Smrg" 2654c27c18e8Smrg case $host in 2655c27c18e8Smrg *cygwin* | *mingw* | *cegcc* ) 265637eb1ca1Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2657c27c18e8Smrg/* DATA imports from DLLs on WIN32 con't be const, because 2658c27c18e8Smrg runtime relocations are performed -- see ld's documentation 2659c27c18e8Smrg on pseudo-relocs. */" 2660c27c18e8Smrg lt_dlsym_const= ;; 2661c27c18e8Smrg *osf5*) 2662c27c18e8Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2663c27c18e8Smrg/* This system does not cope well with relocations in const data */" 2664c27c18e8Smrg lt_dlsym_const= ;; 2665c27c18e8Smrg *) 2666c27c18e8Smrg lt_dlsym_const=const ;; 2667c27c18e8Smrg esac 2668c43cc173Smrg 266937eb1ca1Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2670c27c18e8Smrgextern $lt_dlsym_const lt_dlsymlist 2671c27c18e8Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 2672c27c18e8Smrg$lt_dlsym_const lt_dlsymlist 2673c27c18e8Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 2674c27c18e8Smrg{\ 2675c27c18e8Smrg { \"$my_originator\", (void *) 0 }," 2676c43cc173Smrg 2677c27c18e8Smrg case $need_lib_prefix in 2678c27c18e8Smrg no) 2679c27c18e8Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 2680c27c18e8Smrg ;; 2681c27c18e8Smrg *) 2682c27c18e8Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 2683c27c18e8Smrg ;; 2684c27c18e8Smrg esac 268537eb1ca1Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2686c27c18e8Smrg {0, (void *) 0} 2687c27c18e8Smrg}; 2688c43cc173Smrg 2689c27c18e8Smrg/* This works around a problem in FreeBSD linker */ 2690c27c18e8Smrg#ifdef FREEBSD_WORKAROUND 2691c27c18e8Smrgstatic const void *lt_preloaded_setup() { 2692c27c18e8Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 2693c27c18e8Smrg} 2694c27c18e8Smrg#endif 2695c43cc173Smrg 2696c27c18e8Smrg#ifdef __cplusplus 2697c27c18e8Smrg} 2698c27c18e8Smrg#endif\ 2699c27c18e8Smrg" 2700c27c18e8Smrg } # !$opt_dry_run 2701c43cc173Smrg 2702c27c18e8Smrg pic_flag_for_symtable= 2703c27c18e8Smrg case "$compile_command " in 2704c27c18e8Smrg *" -static "*) ;; 2705c27c18e8Smrg *) 2706c27c18e8Smrg case $host in 2707c27c18e8Smrg # compiling the symbol table file with pic_flag works around 2708c27c18e8Smrg # a FreeBSD bug that causes programs to crash when -lm is 2709c27c18e8Smrg # linked before any other PIC object. But we must not use 2710c27c18e8Smrg # pic_flag when linking with -static. The problem exists in 2711c27c18e8Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 2712c27c18e8Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 2713c27c18e8Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 2714c27c18e8Smrg *-*-hpux*) 2715c27c18e8Smrg pic_flag_for_symtable=" $pic_flag" ;; 2716c27c18e8Smrg *) 2717c27c18e8Smrg if test "X$my_pic_p" != Xno; then 2718c27c18e8Smrg pic_flag_for_symtable=" $pic_flag" 2719c27c18e8Smrg fi 2720c27c18e8Smrg ;; 2721c27c18e8Smrg esac 2722c27c18e8Smrg ;; 2723c27c18e8Smrg esac 2724c27c18e8Smrg symtab_cflags= 2725c27c18e8Smrg for arg in $LTCFLAGS; do 2726c27c18e8Smrg case $arg in 2727c27c18e8Smrg -pie | -fpie | -fPIE) ;; 2728c27c18e8Smrg *) symtab_cflags="$symtab_cflags $arg" ;; 2729c27c18e8Smrg esac 2730c27c18e8Smrg done 2731c43cc173Smrg 2732c27c18e8Smrg # Now compile the dynamic symbol file. 2733c27c18e8Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 2734c43cc173Smrg 2735c27c18e8Smrg # Clean up the generated files. 2736c27c18e8Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2737c43cc173Smrg 2738c27c18e8Smrg # Transform the symbol file into the correct name. 2739c27c18e8Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 2740c27c18e8Smrg case $host in 2741c27c18e8Smrg *cygwin* | *mingw* | *cegcc* ) 2742c27c18e8Smrg if test -f "$output_objdir/$my_outputname.def"; then 274337eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 274437eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2745c27c18e8Smrg else 274637eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 274737eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2748c27c18e8Smrg fi 2749c27c18e8Smrg ;; 2750c27c18e8Smrg *) 275137eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 275237eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2753c27c18e8Smrg ;; 2754c27c18e8Smrg esac 2755c27c18e8Smrg ;; 2756c27c18e8Smrg *) 2757c27c18e8Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 2758c27c18e8Smrg ;; 2759c27c18e8Smrg esac 2760c27c18e8Smrg else 2761c27c18e8Smrg # We keep going just in case the user didn't refer to 2762c27c18e8Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 2763c27c18e8Smrg # really was required. 2764c43cc173Smrg 2765c27c18e8Smrg # Nullify the symbol file. 276637eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 276737eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 2768c27c18e8Smrg fi 2769c27c18e8Smrg} 2770c43cc173Smrg 2771c27c18e8Smrg# func_win32_libid arg 2772c27c18e8Smrg# return the library type of file 'arg' 2773c27c18e8Smrg# 2774c27c18e8Smrg# Need a lot of goo to handle *both* DLLs and import libs 2775c27c18e8Smrg# Has to be a shell function in order to 'eat' the argument 2776c27c18e8Smrg# that is supplied when $file_magic_command is called. 277737eb1ca1Smrg# Despite the name, also deal with 64 bit binaries. 2778c27c18e8Smrgfunc_win32_libid () 2779c27c18e8Smrg{ 2780c27c18e8Smrg $opt_debug 2781c27c18e8Smrg win32_libid_type="unknown" 2782c27c18e8Smrg win32_fileres=`file -L $1 2>/dev/null` 2783c27c18e8Smrg case $win32_fileres in 2784c27c18e8Smrg *ar\ archive\ import\ library*) # definitely import 2785c27c18e8Smrg win32_libid_type="x86 archive import" 2786c27c18e8Smrg ;; 2787c27c18e8Smrg *ar\ archive*) # could be an import, or static 278837eb1ca1Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 2789c27c18e8Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 279037eb1ca1Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 2791c27c18e8Smrg win32_nmres=`eval $NM -f posix -A $1 | 2792c27c18e8Smrg $SED -n -e ' 2793c27c18e8Smrg 1,100{ 2794c27c18e8Smrg / I /{ 2795c27c18e8Smrg s,.*,import, 2796c27c18e8Smrg p 2797c27c18e8Smrg q 2798c27c18e8Smrg } 2799c27c18e8Smrg }'` 2800c27c18e8Smrg case $win32_nmres in 2801c27c18e8Smrg import*) win32_libid_type="x86 archive import";; 2802c27c18e8Smrg *) win32_libid_type="x86 archive static";; 2803c27c18e8Smrg esac 2804c27c18e8Smrg fi 2805c27c18e8Smrg ;; 2806c27c18e8Smrg *DLL*) 2807c27c18e8Smrg win32_libid_type="x86 DLL" 2808c27c18e8Smrg ;; 2809c27c18e8Smrg *executable*) # but shell scripts are "executable" too... 2810c27c18e8Smrg case $win32_fileres in 2811c27c18e8Smrg *MS\ Windows\ PE\ Intel*) 2812c27c18e8Smrg win32_libid_type="x86 DLL" 2813c27c18e8Smrg ;; 2814c27c18e8Smrg esac 2815c27c18e8Smrg ;; 2816c27c18e8Smrg esac 2817c27c18e8Smrg $ECHO "$win32_libid_type" 2818c27c18e8Smrg} 2819c43cc173Smrg 2820c43cc173Smrg 2821c43cc173Smrg 2822c27c18e8Smrg# func_extract_an_archive dir oldlib 2823c27c18e8Smrgfunc_extract_an_archive () 2824c27c18e8Smrg{ 2825c27c18e8Smrg $opt_debug 2826c27c18e8Smrg f_ex_an_ar_dir="$1"; shift 2827c27c18e8Smrg f_ex_an_ar_oldlib="$1" 282837eb1ca1Smrg if test "$lock_old_archive_extraction" = yes; then 282937eb1ca1Smrg lockfile=$f_ex_an_ar_oldlib.lock 283037eb1ca1Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 283137eb1ca1Smrg func_echo "Waiting for $lockfile to be removed" 283237eb1ca1Smrg sleep 2 283337eb1ca1Smrg done 283437eb1ca1Smrg fi 283537eb1ca1Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 283637eb1ca1Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 283737eb1ca1Smrg if test "$lock_old_archive_extraction" = yes; then 283837eb1ca1Smrg $opt_dry_run || rm -f "$lockfile" 283937eb1ca1Smrg fi 2840c27c18e8Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 2841c27c18e8Smrg : 2842c27c18e8Smrg else 2843c27c18e8Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 2844c27c18e8Smrg fi 2845c27c18e8Smrg} 2846c43cc173Smrg 2847c43cc173Smrg 2848c27c18e8Smrg# func_extract_archives gentop oldlib ... 2849c27c18e8Smrgfunc_extract_archives () 2850c27c18e8Smrg{ 2851c27c18e8Smrg $opt_debug 2852c27c18e8Smrg my_gentop="$1"; shift 2853c27c18e8Smrg my_oldlibs=${1+"$@"} 2854c27c18e8Smrg my_oldobjs="" 2855c27c18e8Smrg my_xlib="" 2856c27c18e8Smrg my_xabs="" 2857c27c18e8Smrg my_xdir="" 2858c43cc173Smrg 2859c27c18e8Smrg for my_xlib in $my_oldlibs; do 2860c27c18e8Smrg # Extract the objects. 2861c27c18e8Smrg case $my_xlib in 2862c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 2863c27c18e8Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 2864c27c18e8Smrg esac 2865c27c18e8Smrg func_basename "$my_xlib" 2866c27c18e8Smrg my_xlib="$func_basename_result" 2867c27c18e8Smrg my_xlib_u=$my_xlib 2868c27c18e8Smrg while :; do 2869c27c18e8Smrg case " $extracted_archives " in 2870c27c18e8Smrg *" $my_xlib_u "*) 2871c27c18e8Smrg func_arith $extracted_serial + 1 2872c27c18e8Smrg extracted_serial=$func_arith_result 2873c27c18e8Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 2874c27c18e8Smrg *) break ;; 2875c27c18e8Smrg esac 2876c27c18e8Smrg done 2877c27c18e8Smrg extracted_archives="$extracted_archives $my_xlib_u" 2878c27c18e8Smrg my_xdir="$my_gentop/$my_xlib_u" 2879c43cc173Smrg 2880c27c18e8Smrg func_mkdir_p "$my_xdir" 2881c27c18e8Smrg 2882c27c18e8Smrg case $host in 2883c27c18e8Smrg *-darwin*) 2884c27c18e8Smrg func_verbose "Extracting $my_xabs" 2885c27c18e8Smrg # Do not bother doing anything if just a dry run 2886c27c18e8Smrg $opt_dry_run || { 2887c27c18e8Smrg darwin_orig_dir=`pwd` 2888c27c18e8Smrg cd $my_xdir || exit $? 2889c27c18e8Smrg darwin_archive=$my_xabs 2890c27c18e8Smrg darwin_curdir=`pwd` 2891c27c18e8Smrg darwin_base_archive=`basename "$darwin_archive"` 2892c27c18e8Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 2893c27c18e8Smrg if test -n "$darwin_arches"; then 2894c27c18e8Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 2895c27c18e8Smrg darwin_arch= 2896c27c18e8Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 2897c27c18e8Smrg for darwin_arch in $darwin_arches ; do 2898c27c18e8Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2899c27c18e8Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 2900c27c18e8Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2901c27c18e8Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 2902c27c18e8Smrg cd "$darwin_curdir" 2903c27c18e8Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 2904c27c18e8Smrg done # $darwin_arches 2905c27c18e8Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 2906c27c18e8Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 2907c27c18e8Smrg darwin_file= 2908c27c18e8Smrg darwin_files= 2909c27c18e8Smrg for darwin_file in $darwin_filelist; do 291037eb1ca1Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 2911c27c18e8Smrg $LIPO -create -output "$darwin_file" $darwin_files 2912c27c18e8Smrg done # $darwin_filelist 2913c27c18e8Smrg $RM -rf unfat-$$ 2914c27c18e8Smrg cd "$darwin_orig_dir" 2915c43cc173Smrg else 2916c27c18e8Smrg cd $darwin_orig_dir 2917c27c18e8Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 2918c27c18e8Smrg fi # $darwin_arches 2919c27c18e8Smrg } # !$opt_dry_run 2920c27c18e8Smrg ;; 2921c27c18e8Smrg *) 2922c27c18e8Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 2923c27c18e8Smrg ;; 2924c27c18e8Smrg esac 292537eb1ca1Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 2926c27c18e8Smrg done 2927c43cc173Smrg 2928c27c18e8Smrg func_extract_archives_result="$my_oldobjs" 2929c27c18e8Smrg} 2930c43cc173Smrg 2931c43cc173Smrg 293237eb1ca1Smrg# func_emit_wrapper [arg=no] 293337eb1ca1Smrg# 293437eb1ca1Smrg# Emit a libtool wrapper script on stdout. 293537eb1ca1Smrg# Don't directly open a file because we may want to 293637eb1ca1Smrg# incorporate the script contents within a cygwin/mingw 293737eb1ca1Smrg# wrapper executable. Must ONLY be called from within 293837eb1ca1Smrg# func_mode_link because it depends on a number of variables 293937eb1ca1Smrg# set therein. 2940c27c18e8Smrg# 294137eb1ca1Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 294237eb1ca1Smrg# variable will take. If 'yes', then the emitted script 294337eb1ca1Smrg# will assume that the directory in which it is stored is 294437eb1ca1Smrg# the $objdir directory. This is a cygwin/mingw-specific 294537eb1ca1Smrg# behavior. 294637eb1ca1Smrgfunc_emit_wrapper () 2947c27c18e8Smrg{ 294837eb1ca1Smrg func_emit_wrapper_arg1=${1-no} 2949c43cc173Smrg 2950c27c18e8Smrg $ECHO "\ 2951c27c18e8Smrg#! $SHELL 2952c43cc173Smrg 2953c27c18e8Smrg# $output - temporary wrapper script for $objdir/$outputname 2954c27c18e8Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 2955c27c18e8Smrg# 2956c27c18e8Smrg# The $output program cannot be directly executed until all the libtool 2957c27c18e8Smrg# libraries that it depends on are installed. 2958c27c18e8Smrg# 2959c27c18e8Smrg# This wrapper script should never be moved out of the build directory. 2960c27c18e8Smrg# If it is, it will not operate correctly. 2961c43cc173Smrg 2962c27c18e8Smrg# Sed substitution that helps us do robust quoting. It backslashifies 2963c27c18e8Smrg# metacharacters that are still active within double-quoted strings. 2964c27c18e8Smrgsed_quote_subst='$sed_quote_subst' 2965c43cc173Smrg 2966c27c18e8Smrg# Be Bourne compatible 2967c27c18e8Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 2968c27c18e8Smrg emulate sh 2969c27c18e8Smrg NULLCMD=: 2970c27c18e8Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 2971c27c18e8Smrg # is contrary to our usage. Disable this feature. 2972c27c18e8Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 2973c27c18e8Smrg setopt NO_GLOB_SUBST 2974c27c18e8Smrgelse 2975c27c18e8Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 2976c27c18e8Smrgfi 2977c27c18e8SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 2978c27c18e8SmrgDUALCASE=1; export DUALCASE # for MKS sh 2979c43cc173Smrg 2980c27c18e8Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 2981c27c18e8Smrg# if CDPATH is set. 2982c27c18e8Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 2983c43cc173Smrg 2984c27c18e8Smrgrelink_command=\"$relink_command\" 2985c43cc173Smrg 2986c27c18e8Smrg# This environment variable determines our operation mode. 2987c27c18e8Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 2988c27c18e8Smrg # install mode needs the following variables: 2989c27c18e8Smrg generated_by_libtool_version='$macro_version' 2990c27c18e8Smrg notinst_deplibs='$notinst_deplibs' 2991c27c18e8Smrgelse 2992c27c18e8Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 2993c27c18e8Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 299437eb1ca1Smrg file=\"\$0\"" 299537eb1ca1Smrg 299637eb1ca1Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 299737eb1ca1Smrg $ECHO "\ 299837eb1ca1Smrg 299937eb1ca1Smrg# A function that is used when there is no print builtin or printf. 300037eb1ca1Smrgfunc_fallback_echo () 300137eb1ca1Smrg{ 300237eb1ca1Smrg eval 'cat <<_LTECHO_EOF 300337eb1ca1Smrg\$1 300437eb1ca1Smrg_LTECHO_EOF' 300537eb1ca1Smrg} 300637eb1ca1Smrg ECHO=\"$qECHO\" 300737eb1ca1Smrg fi 300837eb1ca1Smrg 300937eb1ca1Smrg# Very basic option parsing. These options are (a) specific to 301037eb1ca1Smrg# the libtool wrapper, (b) are identical between the wrapper 301137eb1ca1Smrg# /script/ and the wrapper /executable/ which is used only on 301237eb1ca1Smrg# windows platforms, and (c) all begin with the string "--lt-" 301337eb1ca1Smrg# (application programs are unlikely to have options which match 301437eb1ca1Smrg# this pattern). 301537eb1ca1Smrg# 301637eb1ca1Smrg# There are only two supported options: --lt-debug and 301737eb1ca1Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 301837eb1ca1Smrg# 301937eb1ca1Smrg# The first argument to this parsing function should be the 302037eb1ca1Smrg# script's $0 value, followed by "$@". 302137eb1ca1Smrglt_option_debug= 302237eb1ca1Smrgfunc_parse_lt_options () 302337eb1ca1Smrg{ 302437eb1ca1Smrg lt_script_arg0=\$0 302537eb1ca1Smrg shift 302637eb1ca1Smrg for lt_opt 302737eb1ca1Smrg do 302837eb1ca1Smrg case \"\$lt_opt\" in 302937eb1ca1Smrg --lt-debug) lt_option_debug=1 ;; 303037eb1ca1Smrg --lt-dump-script) 303137eb1ca1Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 303237eb1ca1Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 303337eb1ca1Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 303437eb1ca1Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 303537eb1ca1Smrg exit 0 303637eb1ca1Smrg ;; 303737eb1ca1Smrg --lt-*) 303837eb1ca1Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 303937eb1ca1Smrg exit 1 304037eb1ca1Smrg ;; 304137eb1ca1Smrg esac 304237eb1ca1Smrg done 304337eb1ca1Smrg 304437eb1ca1Smrg # Print the debug banner immediately: 304537eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 304637eb1ca1Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 304737eb1ca1Smrg fi 304837eb1ca1Smrg} 304937eb1ca1Smrg 305037eb1ca1Smrg# Used when --lt-debug. Prints its arguments to stdout 305137eb1ca1Smrg# (redirection is the responsibility of the caller) 305237eb1ca1Smrgfunc_lt_dump_args () 305337eb1ca1Smrg{ 305437eb1ca1Smrg lt_dump_args_N=1; 305537eb1ca1Smrg for lt_arg 305637eb1ca1Smrg do 305737eb1ca1Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 305837eb1ca1Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 305937eb1ca1Smrg done 306037eb1ca1Smrg} 306137eb1ca1Smrg 306237eb1ca1Smrg# Core function for launching the target application 306337eb1ca1Smrgfunc_exec_program_core () 306437eb1ca1Smrg{ 3065c27c18e8Smrg" 306637eb1ca1Smrg case $host in 306737eb1ca1Smrg # Backslashes separate directories on plain windows 306837eb1ca1Smrg *-*-mingw | *-*-os2* | *-cegcc*) 306937eb1ca1Smrg $ECHO "\ 307037eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 307137eb1ca1Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 307237eb1ca1Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 307337eb1ca1Smrg fi 307437eb1ca1Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 307537eb1ca1Smrg" 307637eb1ca1Smrg ;; 307737eb1ca1Smrg 307837eb1ca1Smrg *) 307937eb1ca1Smrg $ECHO "\ 308037eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 308137eb1ca1Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 308237eb1ca1Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 308337eb1ca1Smrg fi 308437eb1ca1Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 308537eb1ca1Smrg" 308637eb1ca1Smrg ;; 308737eb1ca1Smrg esac 308837eb1ca1Smrg $ECHO "\ 308937eb1ca1Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 309037eb1ca1Smrg exit 1 309137eb1ca1Smrg} 309237eb1ca1Smrg 309337eb1ca1Smrg# A function to encapsulate launching the target application 309437eb1ca1Smrg# Strips options in the --lt-* namespace from \$@ and 309537eb1ca1Smrg# launches target application with the remaining arguments. 309637eb1ca1Smrgfunc_exec_program () 309737eb1ca1Smrg{ 309837eb1ca1Smrg for lt_wr_arg 309937eb1ca1Smrg do 310037eb1ca1Smrg case \$lt_wr_arg in 310137eb1ca1Smrg --lt-*) ;; 310237eb1ca1Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 310337eb1ca1Smrg esac 310437eb1ca1Smrg shift 310537eb1ca1Smrg done 310637eb1ca1Smrg func_exec_program_core \${1+\"\$@\"} 310737eb1ca1Smrg} 310837eb1ca1Smrg 310937eb1ca1Smrg # Parse options 311037eb1ca1Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 3111c43cc173Smrg 3112c27c18e8Smrg # Find the directory that this script lives in. 311337eb1ca1Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 3114c27c18e8Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 3115c43cc173Smrg 3116c27c18e8Smrg # Follow symbolic links until we get to the real thisdir. 311737eb1ca1Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 3118c27c18e8Smrg while test -n \"\$file\"; do 311937eb1ca1Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 3120c27c18e8Smrg 3121c27c18e8Smrg # If there was a directory component, then change thisdir. 3122c27c18e8Smrg if test \"x\$destdir\" != \"x\$file\"; then 3123c27c18e8Smrg case \"\$destdir\" in 3124c27c18e8Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 3125c27c18e8Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 3126c43cc173Smrg esac 3127c27c18e8Smrg fi 3128c43cc173Smrg 312937eb1ca1Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 313037eb1ca1Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 3131c27c18e8Smrg done 3132c43cc173Smrg 3133c27c18e8Smrg # Usually 'no', except on cygwin/mingw when embedded into 3134c27c18e8Smrg # the cwrapper. 313537eb1ca1Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 3136c27c18e8Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 3137c27c18e8Smrg # special case for '.' 3138c27c18e8Smrg if test \"\$thisdir\" = \".\"; then 3139c27c18e8Smrg thisdir=\`pwd\` 3140c27c18e8Smrg fi 3141c27c18e8Smrg # remove .libs from thisdir 3142c27c18e8Smrg case \"\$thisdir\" in 314337eb1ca1Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 3144c27c18e8Smrg $objdir ) thisdir=. ;; 3145c27c18e8Smrg esac 3146c27c18e8Smrg fi 3147c27c18e8Smrg 3148c27c18e8Smrg # Try to get the absolute directory name. 3149c27c18e8Smrg absdir=\`cd \"\$thisdir\" && pwd\` 3150c27c18e8Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 3151c27c18e8Smrg" 3152c27c18e8Smrg 3153c27c18e8Smrg if test "$fast_install" = yes; then 3154c27c18e8Smrg $ECHO "\ 3155c27c18e8Smrg program=lt-'$outputname'$exeext 3156c27c18e8Smrg progdir=\"\$thisdir/$objdir\" 3157c27c18e8Smrg 3158c27c18e8Smrg if test ! -f \"\$progdir/\$program\" || 3159c27c18e8Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 3160c27c18e8Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 3161c27c18e8Smrg 3162c27c18e8Smrg file=\"\$\$-\$program\" 3163c27c18e8Smrg 3164c27c18e8Smrg if test ! -d \"\$progdir\"; then 3165c27c18e8Smrg $MKDIR \"\$progdir\" 3166c27c18e8Smrg else 3167c27c18e8Smrg $RM \"\$progdir/\$file\" 3168c27c18e8Smrg fi" 3169c27c18e8Smrg 3170c27c18e8Smrg $ECHO "\ 3171c27c18e8Smrg 3172c27c18e8Smrg # relink executable if necessary 3173c27c18e8Smrg if test -n \"\$relink_command\"; then 3174c27c18e8Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 3175c27c18e8Smrg else 3176c27c18e8Smrg $ECHO \"\$relink_command_output\" >&2 3177c27c18e8Smrg $RM \"\$progdir/\$file\" 3178c27c18e8Smrg exit 1 3179c43cc173Smrg fi 3180c27c18e8Smrg fi 3181c43cc173Smrg 3182c27c18e8Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 3183c27c18e8Smrg { $RM \"\$progdir/\$program\"; 3184c27c18e8Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 3185c27c18e8Smrg $RM \"\$progdir/\$file\" 3186c27c18e8Smrg fi" 3187c27c18e8Smrg else 3188c27c18e8Smrg $ECHO "\ 3189c27c18e8Smrg program='$outputname' 3190c27c18e8Smrg progdir=\"\$thisdir/$objdir\" 3191c27c18e8Smrg" 3192c43cc173Smrg fi 3193c43cc173Smrg 3194c27c18e8Smrg $ECHO "\ 3195c27c18e8Smrg 3196c27c18e8Smrg if test -f \"\$progdir/\$program\"; then" 3197c27c18e8Smrg 3198c27c18e8Smrg # Export our shlibpath_var if we have one. 3199c27c18e8Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3200c27c18e8Smrg $ECHO "\ 3201c27c18e8Smrg # Add our own library path to $shlibpath_var 3202c27c18e8Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 3203c27c18e8Smrg 3204c27c18e8Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 3205c27c18e8Smrg # The second colon is a workaround for a bug in BeOS R4 sed 320637eb1ca1Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 3207c27c18e8Smrg 3208c27c18e8Smrg export $shlibpath_var 3209c27c18e8Smrg" 3210c43cc173Smrg fi 3211c43cc173Smrg 3212c27c18e8Smrg # fixup the dll searchpath if we need to. 3213c27c18e8Smrg if test -n "$dllsearchpath"; then 3214c27c18e8Smrg $ECHO "\ 3215c27c18e8Smrg # Add the dll search path components to the executable PATH 3216c27c18e8Smrg PATH=$dllsearchpath:\$PATH 3217c27c18e8Smrg" 3218c43cc173Smrg fi 3219c43cc173Smrg 3220c27c18e8Smrg $ECHO "\ 3221c27c18e8Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 3222c27c18e8Smrg # Run the actual program with our arguments. 322337eb1ca1Smrg func_exec_program \${1+\"\$@\"} 3224c27c18e8Smrg fi 3225c27c18e8Smrg else 3226c27c18e8Smrg # The program doesn't exist. 3227c27c18e8Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 3228c27c18e8Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 322937eb1ca1Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 3230c27c18e8Smrg exit 1 3231c27c18e8Smrg fi 3232c27c18e8Smrgfi\ 3233c27c18e8Smrg" 3234c27c18e8Smrg} 3235c43cc173Smrg 3236c43cc173Smrg 3237c27c18e8Smrg# func_to_host_path arg 3238c27c18e8Smrg# 3239c27c18e8Smrg# Convert paths to host format when used with build tools. 3240c27c18e8Smrg# Intended for use with "native" mingw (where libtool itself 3241c27c18e8Smrg# is running under the msys shell), or in the following cross- 3242c27c18e8Smrg# build environments: 3243c27c18e8Smrg# $build $host 3244c27c18e8Smrg# mingw (msys) mingw [e.g. native] 3245c27c18e8Smrg# cygwin mingw 3246c27c18e8Smrg# *nix + wine mingw 3247c27c18e8Smrg# where wine is equipped with the `winepath' executable. 3248c27c18e8Smrg# In the native mingw case, the (msys) shell automatically 3249c27c18e8Smrg# converts paths for any non-msys applications it launches, 3250c27c18e8Smrg# but that facility isn't available from inside the cwrapper. 3251c27c18e8Smrg# Similar accommodations are necessary for $host mingw and 3252c27c18e8Smrg# $build cygwin. Calling this function does no harm for other 3253c27c18e8Smrg# $host/$build combinations not listed above. 3254c27c18e8Smrg# 3255c27c18e8Smrg# ARG is the path (on $build) that should be converted to 3256c27c18e8Smrg# the proper representation for $host. The result is stored 3257c27c18e8Smrg# in $func_to_host_path_result. 3258c27c18e8Smrgfunc_to_host_path () 3259c27c18e8Smrg{ 3260c27c18e8Smrg func_to_host_path_result="$1" 326137eb1ca1Smrg if test -n "$1"; then 3262c27c18e8Smrg case $host in 3263c27c18e8Smrg *mingw* ) 3264c27c18e8Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3265c27c18e8Smrg case $build in 3266c27c18e8Smrg *mingw* ) # actually, msys 3267c27c18e8Smrg # awkward: cmd appends spaces to result 326837eb1ca1Smrg func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | 326937eb1ca1Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 3270c27c18e8Smrg ;; 3271c27c18e8Smrg *cygwin* ) 327237eb1ca1Smrg func_to_host_path_result=`cygpath -w "$1" | 327337eb1ca1Smrg $SED -e "$lt_sed_naive_backslashify"` 3274c27c18e8Smrg ;; 3275c27c18e8Smrg * ) 3276c27c18e8Smrg # Unfortunately, winepath does not exit with a non-zero 3277c27c18e8Smrg # error code, so we are forced to check the contents of 3278c27c18e8Smrg # stdout. On the other hand, if the command is not 3279c27c18e8Smrg # found, the shell will set an exit code of 127 and print 3280c27c18e8Smrg # *an error message* to stdout. So we must check for both 3281c27c18e8Smrg # error code of zero AND non-empty stdout, which explains 3282c27c18e8Smrg # the odd construction: 3283c27c18e8Smrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 3284c27c18e8Smrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 328537eb1ca1Smrg func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | 3286c27c18e8Smrg $SED -e "$lt_sed_naive_backslashify"` 3287c27c18e8Smrg else 3288c27c18e8Smrg # Allow warning below. 328937eb1ca1Smrg func_to_host_path_result= 3290c27c18e8Smrg fi 3291c27c18e8Smrg ;; 3292c27c18e8Smrg esac 3293c27c18e8Smrg if test -z "$func_to_host_path_result" ; then 3294c27c18e8Smrg func_error "Could not determine host path corresponding to" 329537eb1ca1Smrg func_error " \`$1'" 3296c27c18e8Smrg func_error "Continuing, but uninstalled executables may not work." 3297c27c18e8Smrg # Fallback: 3298c27c18e8Smrg func_to_host_path_result="$1" 3299c27c18e8Smrg fi 3300c27c18e8Smrg ;; 3301c27c18e8Smrg esac 3302c27c18e8Smrg fi 3303c27c18e8Smrg} 3304c27c18e8Smrg# end: func_to_host_path 3305c43cc173Smrg 3306c27c18e8Smrg# func_to_host_pathlist arg 3307c27c18e8Smrg# 3308c27c18e8Smrg# Convert pathlists to host format when used with build tools. 3309c27c18e8Smrg# See func_to_host_path(), above. This function supports the 3310c27c18e8Smrg# following $build/$host combinations (but does no harm for 3311c27c18e8Smrg# combinations not listed here): 3312c27c18e8Smrg# $build $host 3313c27c18e8Smrg# mingw (msys) mingw [e.g. native] 3314c27c18e8Smrg# cygwin mingw 3315c27c18e8Smrg# *nix + wine mingw 3316c27c18e8Smrg# 3317c27c18e8Smrg# Path separators are also converted from $build format to 3318c27c18e8Smrg# $host format. If ARG begins or ends with a path separator 3319c27c18e8Smrg# character, it is preserved (but converted to $host format) 3320c27c18e8Smrg# on output. 3321c27c18e8Smrg# 3322c27c18e8Smrg# ARG is a pathlist (on $build) that should be converted to 3323c27c18e8Smrg# the proper representation on $host. The result is stored 3324c27c18e8Smrg# in $func_to_host_pathlist_result. 3325c27c18e8Smrgfunc_to_host_pathlist () 3326c27c18e8Smrg{ 3327c27c18e8Smrg func_to_host_pathlist_result="$1" 332837eb1ca1Smrg if test -n "$1"; then 3329c27c18e8Smrg case $host in 3330c27c18e8Smrg *mingw* ) 3331c27c18e8Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3332c27c18e8Smrg # Remove leading and trailing path separator characters from 3333c27c18e8Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3334c27c18e8Smrg # into '.;' and ';.', and winepath ignores them completely. 333537eb1ca1Smrg func_stripname : : "$1" 333637eb1ca1Smrg func_to_host_pathlist_tmp1=$func_stripname_result 3337c27c18e8Smrg case $build in 3338c27c18e8Smrg *mingw* ) # Actually, msys. 3339c27c18e8Smrg # Awkward: cmd appends spaces to result. 334037eb1ca1Smrg func_to_host_pathlist_result=` 334137eb1ca1Smrg ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | 334237eb1ca1Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 3343c27c18e8Smrg ;; 3344c27c18e8Smrg *cygwin* ) 334537eb1ca1Smrg func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | 3346c27c18e8Smrg $SED -e "$lt_sed_naive_backslashify"` 3347c27c18e8Smrg ;; 3348c27c18e8Smrg * ) 3349c27c18e8Smrg # unfortunately, winepath doesn't convert pathlists 3350c27c18e8Smrg func_to_host_pathlist_result="" 3351c27c18e8Smrg func_to_host_pathlist_oldIFS=$IFS 3352c27c18e8Smrg IFS=: 3353c27c18e8Smrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 3354c27c18e8Smrg IFS=$func_to_host_pathlist_oldIFS 3355c27c18e8Smrg if test -n "$func_to_host_pathlist_f" ; then 3356c27c18e8Smrg func_to_host_path "$func_to_host_pathlist_f" 3357c27c18e8Smrg if test -n "$func_to_host_path_result" ; then 3358c27c18e8Smrg if test -z "$func_to_host_pathlist_result" ; then 3359c27c18e8Smrg func_to_host_pathlist_result="$func_to_host_path_result" 3360c27c18e8Smrg else 336137eb1ca1Smrg func_append func_to_host_pathlist_result ";$func_to_host_path_result" 3362c27c18e8Smrg fi 3363c27c18e8Smrg fi 3364c27c18e8Smrg fi 3365c27c18e8Smrg done 3366c27c18e8Smrg IFS=$func_to_host_pathlist_oldIFS 3367c27c18e8Smrg ;; 3368c27c18e8Smrg esac 336937eb1ca1Smrg if test -z "$func_to_host_pathlist_result"; then 3370c27c18e8Smrg func_error "Could not determine the host path(s) corresponding to" 337137eb1ca1Smrg func_error " \`$1'" 3372c27c18e8Smrg func_error "Continuing, but uninstalled executables may not work." 3373c27c18e8Smrg # Fallback. This may break if $1 contains DOS-style drive 3374c27c18e8Smrg # specifications. The fix is not to complicate the expression 3375c27c18e8Smrg # below, but for the user to provide a working wine installation 3376c27c18e8Smrg # with winepath so that path translation in the cross-to-mingw 3377c27c18e8Smrg # case works properly. 3378c27c18e8Smrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 3379c27c18e8Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 3380c27c18e8Smrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 3381c27c18e8Smrg fi 3382c27c18e8Smrg # Now, add the leading and trailing path separators back 3383c27c18e8Smrg case "$1" in 3384c27c18e8Smrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 3385c27c18e8Smrg ;; 3386c27c18e8Smrg esac 3387c27c18e8Smrg case "$1" in 338837eb1ca1Smrg *: ) func_append func_to_host_pathlist_result ";" 3389c27c18e8Smrg ;; 3390c27c18e8Smrg esac 3391c27c18e8Smrg ;; 3392c27c18e8Smrg esac 3393c27c18e8Smrg fi 3394c27c18e8Smrg} 3395c27c18e8Smrg# end: func_to_host_pathlist 3396c43cc173Smrg 3397c27c18e8Smrg# func_emit_cwrapperexe_src 3398c27c18e8Smrg# emit the source code for a wrapper executable on stdout 3399c27c18e8Smrg# Must ONLY be called from within func_mode_link because 3400c27c18e8Smrg# it depends on a number of variable set therein. 3401c27c18e8Smrgfunc_emit_cwrapperexe_src () 3402c27c18e8Smrg{ 3403c27c18e8Smrg cat <<EOF 3404c43cc173Smrg 3405c27c18e8Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 3406c27c18e8Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3407c43cc173Smrg 3408c27c18e8Smrg The $output program cannot be directly executed until all the libtool 3409c27c18e8Smrg libraries that it depends on are installed. 3410c43cc173Smrg 3411c27c18e8Smrg This wrapper executable should never be moved out of the build directory. 3412c27c18e8Smrg If it is, it will not operate correctly. 3413c27c18e8Smrg*/ 3414c27c18e8SmrgEOF 3415c27c18e8Smrg cat <<"EOF" 341637eb1ca1Smrg#ifdef _MSC_VER 341737eb1ca1Smrg# define _CRT_SECURE_NO_DEPRECATE 1 341837eb1ca1Smrg#endif 3419c27c18e8Smrg#include <stdio.h> 3420c27c18e8Smrg#include <stdlib.h> 3421c27c18e8Smrg#ifdef _MSC_VER 3422c27c18e8Smrg# include <direct.h> 3423c27c18e8Smrg# include <process.h> 3424c27c18e8Smrg# include <io.h> 3425c27c18e8Smrg#else 3426c27c18e8Smrg# include <unistd.h> 3427c27c18e8Smrg# include <stdint.h> 3428c27c18e8Smrg# ifdef __CYGWIN__ 3429c27c18e8Smrg# include <io.h> 3430c27c18e8Smrg# endif 3431c27c18e8Smrg#endif 3432c27c18e8Smrg#include <malloc.h> 3433c27c18e8Smrg#include <stdarg.h> 3434c27c18e8Smrg#include <assert.h> 3435c27c18e8Smrg#include <string.h> 3436c27c18e8Smrg#include <ctype.h> 3437c27c18e8Smrg#include <errno.h> 3438c27c18e8Smrg#include <fcntl.h> 3439c27c18e8Smrg#include <sys/stat.h> 3440c43cc173Smrg 344137eb1ca1Smrg/* declarations of non-ANSI functions */ 344237eb1ca1Smrg#if defined(__MINGW32__) 344337eb1ca1Smrg# ifdef __STRICT_ANSI__ 344437eb1ca1Smrgint _putenv (const char *); 344537eb1ca1Smrg# endif 344637eb1ca1Smrg#elif defined(__CYGWIN__) 344737eb1ca1Smrg# ifdef __STRICT_ANSI__ 344837eb1ca1Smrgchar *realpath (const char *, char *); 344937eb1ca1Smrgint putenv (char *); 345037eb1ca1Smrgint setenv (const char *, const char *, int); 345137eb1ca1Smrg# endif 345237eb1ca1Smrg/* #elif defined (other platforms) ... */ 345337eb1ca1Smrg#endif 345437eb1ca1Smrg 345537eb1ca1Smrg/* portability defines, excluding path handling macros */ 345637eb1ca1Smrg#if defined(_MSC_VER) 345737eb1ca1Smrg# define setmode _setmode 345837eb1ca1Smrg# define stat _stat 345937eb1ca1Smrg# define chmod _chmod 346037eb1ca1Smrg# define getcwd _getcwd 346137eb1ca1Smrg# define putenv _putenv 346237eb1ca1Smrg# define S_IXUSR _S_IEXEC 346337eb1ca1Smrg# ifndef _INTPTR_T_DEFINED 346437eb1ca1Smrg# define _INTPTR_T_DEFINED 346537eb1ca1Smrg# define intptr_t int 346637eb1ca1Smrg# endif 346737eb1ca1Smrg#elif defined(__MINGW32__) 346837eb1ca1Smrg# define setmode _setmode 346937eb1ca1Smrg# define stat _stat 347037eb1ca1Smrg# define chmod _chmod 347137eb1ca1Smrg# define getcwd _getcwd 347237eb1ca1Smrg# define putenv _putenv 347337eb1ca1Smrg#elif defined(__CYGWIN__) 347437eb1ca1Smrg# define HAVE_SETENV 347537eb1ca1Smrg# define FOPEN_WB "wb" 347637eb1ca1Smrg/* #elif defined (other platforms) ... */ 347737eb1ca1Smrg#endif 347837eb1ca1Smrg 3479c27c18e8Smrg#if defined(PATH_MAX) 3480c27c18e8Smrg# define LT_PATHMAX PATH_MAX 3481c27c18e8Smrg#elif defined(MAXPATHLEN) 3482c27c18e8Smrg# define LT_PATHMAX MAXPATHLEN 3483c27c18e8Smrg#else 3484c27c18e8Smrg# define LT_PATHMAX 1024 3485c27c18e8Smrg#endif 3486c43cc173Smrg 3487c27c18e8Smrg#ifndef S_IXOTH 3488c27c18e8Smrg# define S_IXOTH 0 3489c27c18e8Smrg#endif 3490c27c18e8Smrg#ifndef S_IXGRP 3491c27c18e8Smrg# define S_IXGRP 0 3492c27c18e8Smrg#endif 3493c43cc173Smrg 349437eb1ca1Smrg/* path handling portability macros */ 3495c27c18e8Smrg#ifndef DIR_SEPARATOR 3496c27c18e8Smrg# define DIR_SEPARATOR '/' 3497c27c18e8Smrg# define PATH_SEPARATOR ':' 3498c27c18e8Smrg#endif 3499c43cc173Smrg 3500c27c18e8Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 3501c27c18e8Smrg defined (__OS2__) 3502c27c18e8Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 3503c27c18e8Smrg# define FOPEN_WB "wb" 3504c27c18e8Smrg# ifndef DIR_SEPARATOR_2 3505c27c18e8Smrg# define DIR_SEPARATOR_2 '\\' 3506c27c18e8Smrg# endif 3507c27c18e8Smrg# ifndef PATH_SEPARATOR_2 3508c27c18e8Smrg# define PATH_SEPARATOR_2 ';' 3509c27c18e8Smrg# endif 3510c27c18e8Smrg#endif 3511c43cc173Smrg 3512c27c18e8Smrg#ifndef DIR_SEPARATOR_2 3513c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 3514c27c18e8Smrg#else /* DIR_SEPARATOR_2 */ 3515c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) \ 3516c27c18e8Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 3517c27c18e8Smrg#endif /* DIR_SEPARATOR_2 */ 3518c43cc173Smrg 3519c27c18e8Smrg#ifndef PATH_SEPARATOR_2 3520c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 3521c27c18e8Smrg#else /* PATH_SEPARATOR_2 */ 3522c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 3523c27c18e8Smrg#endif /* PATH_SEPARATOR_2 */ 3524c43cc173Smrg 3525c27c18e8Smrg#ifndef FOPEN_WB 3526c27c18e8Smrg# define FOPEN_WB "w" 3527c27c18e8Smrg#endif 3528c27c18e8Smrg#ifndef _O_BINARY 3529c27c18e8Smrg# define _O_BINARY 0 3530c27c18e8Smrg#endif 3531c43cc173Smrg 3532c27c18e8Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 3533c27c18e8Smrg#define XFREE(stale) do { \ 3534c27c18e8Smrg if (stale) { free ((void *) stale); stale = 0; } \ 3535c27c18e8Smrg} while (0) 3536c43cc173Smrg 353737eb1ca1Smrg#if defined(LT_DEBUGWRAPPER) 353837eb1ca1Smrgstatic int lt_debug = 1; 3539c27c18e8Smrg#else 354037eb1ca1Smrgstatic int lt_debug = 0; 3541c27c18e8Smrg#endif 3542c43cc173Smrg 354337eb1ca1Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 3544c43cc173Smrg 3545c27c18e8Smrgvoid *xmalloc (size_t num); 3546c27c18e8Smrgchar *xstrdup (const char *string); 3547c27c18e8Smrgconst char *base_name (const char *name); 3548c27c18e8Smrgchar *find_executable (const char *wrapper); 3549c27c18e8Smrgchar *chase_symlinks (const char *pathspec); 3550c27c18e8Smrgint make_executable (const char *path); 3551c27c18e8Smrgint check_executable (const char *path); 3552c27c18e8Smrgchar *strendzap (char *str, const char *pat); 355337eb1ca1Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 355437eb1ca1Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 355537eb1ca1Smrgstatic const char *nonnull (const char *s); 355637eb1ca1Smrgstatic const char *nonempty (const char *s); 3557c27c18e8Smrgvoid lt_setenv (const char *name, const char *value); 3558c27c18e8Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 3559c27c18e8Smrgvoid lt_update_exe_path (const char *name, const char *value); 3560c27c18e8Smrgvoid lt_update_lib_path (const char *name, const char *value); 356137eb1ca1Smrgchar **prepare_spawn (char **argv); 356237eb1ca1Smrgvoid lt_dump_script (FILE *f); 3563c27c18e8SmrgEOF 3564c27c18e8Smrg 3565c27c18e8Smrg cat <<EOF 3566c27c18e8Smrgconst char * MAGIC_EXE = "$magic_exe"; 3567c27c18e8Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 3568c27c18e8SmrgEOF 3569c43cc173Smrg 3570c27c18e8Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3571c27c18e8Smrg func_to_host_pathlist "$temp_rpath" 3572c27c18e8Smrg cat <<EOF 3573c27c18e8Smrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 3574c27c18e8SmrgEOF 3575c27c18e8Smrg else 3576c27c18e8Smrg cat <<"EOF" 3577c27c18e8Smrgconst char * LIB_PATH_VALUE = ""; 3578c27c18e8SmrgEOF 3579c27c18e8Smrg fi 3580c43cc173Smrg 3581c27c18e8Smrg if test -n "$dllsearchpath"; then 3582c27c18e8Smrg func_to_host_pathlist "$dllsearchpath:" 3583c27c18e8Smrg cat <<EOF 3584c27c18e8Smrgconst char * EXE_PATH_VARNAME = "PATH"; 3585c27c18e8Smrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 3586c27c18e8SmrgEOF 3587c27c18e8Smrg else 3588c27c18e8Smrg cat <<"EOF" 3589c27c18e8Smrgconst char * EXE_PATH_VARNAME = ""; 3590c27c18e8Smrgconst char * EXE_PATH_VALUE = ""; 3591c27c18e8SmrgEOF 3592c27c18e8Smrg fi 3593c43cc173Smrg 3594c27c18e8Smrg if test "$fast_install" = yes; then 3595c27c18e8Smrg cat <<EOF 3596c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 3597c27c18e8SmrgEOF 3598c27c18e8Smrg else 3599c27c18e8Smrg cat <<EOF 3600c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 3601c27c18e8SmrgEOF 3602c27c18e8Smrg fi 3603c43cc173Smrg 3604c43cc173Smrg 3605c27c18e8Smrg cat <<"EOF" 3606c43cc173Smrg 3607c27c18e8Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 3608c43cc173Smrg 3609c27c18e8Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 3610c27c18e8Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 361137eb1ca1Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 3612c27c18e8Smrg 3613c27c18e8Smrgint 3614c27c18e8Smrgmain (int argc, char *argv[]) 3615c27c18e8Smrg{ 3616c27c18e8Smrg char **newargz; 3617c27c18e8Smrg int newargc; 3618c27c18e8Smrg char *tmp_pathspec; 3619c27c18e8Smrg char *actual_cwrapper_path; 3620c27c18e8Smrg char *actual_cwrapper_name; 3621c27c18e8Smrg char *target_name; 3622c27c18e8Smrg char *lt_argv_zero; 3623c27c18e8Smrg intptr_t rval = 127; 3624c27c18e8Smrg 3625c27c18e8Smrg int i; 3626c27c18e8Smrg 3627c27c18e8Smrg program_name = (char *) xstrdup (base_name (argv[0])); 362837eb1ca1Smrg newargz = XMALLOC (char *, argc + 1); 3629c27c18e8Smrg 363037eb1ca1Smrg /* very simple arg parsing; don't want to rely on getopt 363137eb1ca1Smrg * also, copy all non cwrapper options to newargz, except 363237eb1ca1Smrg * argz[0], which is handled differently 363337eb1ca1Smrg */ 363437eb1ca1Smrg newargc=0; 3635c27c18e8Smrg for (i = 1; i < argc; i++) 3636c27c18e8Smrg { 3637c27c18e8Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 3638c27c18e8Smrg { 3639c27c18e8SmrgEOF 3640c27c18e8Smrg case "$host" in 3641c27c18e8Smrg *mingw* | *cygwin* ) 3642c27c18e8Smrg # make stdout use "unix" line endings 3643c27c18e8Smrg echo " setmode(1,_O_BINARY);" 3644c27c18e8Smrg ;; 3645c27c18e8Smrg esac 3646c27c18e8Smrg 3647c27c18e8Smrg cat <<"EOF" 364837eb1ca1Smrg lt_dump_script (stdout); 3649c27c18e8Smrg return 0; 3650c27c18e8Smrg } 365137eb1ca1Smrg if (strcmp (argv[i], debug_opt) == 0) 365237eb1ca1Smrg { 365337eb1ca1Smrg lt_debug = 1; 365437eb1ca1Smrg continue; 365537eb1ca1Smrg } 365637eb1ca1Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 365737eb1ca1Smrg { 365837eb1ca1Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 365937eb1ca1Smrg namespace, but it is not one of the ones we know about and 366037eb1ca1Smrg have already dealt with, above (inluding dump-script), then 366137eb1ca1Smrg report an error. Otherwise, targets might begin to believe 366237eb1ca1Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 366337eb1ca1Smrg namespace. The first time any user complains about this, we'll 366437eb1ca1Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 366537eb1ca1Smrg or a configure.ac-settable value. 366637eb1ca1Smrg */ 366737eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 366837eb1ca1Smrg "unrecognized %s option: '%s'", 366937eb1ca1Smrg ltwrapper_option_prefix, argv[i]); 367037eb1ca1Smrg } 367137eb1ca1Smrg /* otherwise ... */ 367237eb1ca1Smrg newargz[++newargc] = xstrdup (argv[i]); 3673c27c18e8Smrg } 367437eb1ca1Smrg newargz[++newargc] = NULL; 367537eb1ca1Smrg 367637eb1ca1SmrgEOF 367737eb1ca1Smrg cat <<EOF 367837eb1ca1Smrg /* The GNU banner must be the first non-error debug message */ 367937eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 368037eb1ca1SmrgEOF 368137eb1ca1Smrg cat <<"EOF" 368237eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 368337eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 3684c27c18e8Smrg 3685c27c18e8Smrg tmp_pathspec = find_executable (argv[0]); 3686c27c18e8Smrg if (tmp_pathspec == NULL) 368737eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 368837eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 368937eb1ca1Smrg "(main) found exe (before symlink chase) at: %s\n", 369037eb1ca1Smrg tmp_pathspec); 3691c27c18e8Smrg 3692c27c18e8Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 369337eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 369437eb1ca1Smrg "(main) found exe (after symlink chase) at: %s\n", 369537eb1ca1Smrg actual_cwrapper_path); 3696c27c18e8Smrg XFREE (tmp_pathspec); 3697c27c18e8Smrg 369837eb1ca1Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 3699c27c18e8Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 3700c27c18e8Smrg 3701c27c18e8Smrg /* wrapper name transforms */ 3702c27c18e8Smrg strendzap (actual_cwrapper_name, ".exe"); 3703c27c18e8Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 3704c27c18e8Smrg XFREE (actual_cwrapper_name); 3705c27c18e8Smrg actual_cwrapper_name = tmp_pathspec; 3706c27c18e8Smrg tmp_pathspec = 0; 3707c27c18e8Smrg 3708c27c18e8Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 3709c27c18e8Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 3710c27c18e8Smrg strendzap (target_name, ".exe"); 3711c27c18e8Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 3712c27c18e8Smrg XFREE (target_name); 3713c27c18e8Smrg target_name = tmp_pathspec; 3714c27c18e8Smrg tmp_pathspec = 0; 3715c27c18e8Smrg 371637eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 371737eb1ca1Smrg "(main) libtool target name: %s\n", 371837eb1ca1Smrg target_name); 3719c27c18e8SmrgEOF 3720c27c18e8Smrg 3721c27c18e8Smrg cat <<EOF 3722c27c18e8Smrg newargz[0] = 3723c27c18e8Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 3724c27c18e8Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 3725c27c18e8Smrg strcpy (newargz[0], actual_cwrapper_path); 3726c27c18e8Smrg strcat (newargz[0], "$objdir"); 3727c27c18e8Smrg strcat (newargz[0], "/"); 3728c27c18e8SmrgEOF 3729c27c18e8Smrg 3730c27c18e8Smrg cat <<"EOF" 3731c27c18e8Smrg /* stop here, and copy so we don't have to do this twice */ 3732c27c18e8Smrg tmp_pathspec = xstrdup (newargz[0]); 3733c27c18e8Smrg 3734c27c18e8Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 3735c27c18e8Smrg strcat (newargz[0], actual_cwrapper_name); 3736c27c18e8Smrg 3737c27c18e8Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 3738c27c18e8Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 3739c27c18e8Smrg XFREE (tmp_pathspec); 3740c27c18e8Smrg tmp_pathspec = NULL; 3741c27c18e8SmrgEOF 3742c27c18e8Smrg 3743c27c18e8Smrg case $host_os in 3744c27c18e8Smrg mingw*) 3745c27c18e8Smrg cat <<"EOF" 3746c27c18e8Smrg { 3747c27c18e8Smrg char* p; 3748c27c18e8Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 3749c27c18e8Smrg { 3750c27c18e8Smrg *p = '/'; 3751c27c18e8Smrg } 3752c27c18e8Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 3753c27c18e8Smrg { 3754c27c18e8Smrg *p = '/'; 3755c27c18e8Smrg } 3756c27c18e8Smrg } 3757c27c18e8SmrgEOF 3758c43cc173Smrg ;; 3759c27c18e8Smrg esac 3760c27c18e8Smrg 3761c27c18e8Smrg cat <<"EOF" 3762c27c18e8Smrg XFREE (target_name); 3763c27c18e8Smrg XFREE (actual_cwrapper_path); 3764c27c18e8Smrg XFREE (actual_cwrapper_name); 3765c27c18e8Smrg 3766c27c18e8Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 3767c27c18e8Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 3768c27c18e8Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 3769c27c18e8Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 3770c27c18e8Smrg 377137eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 377237eb1ca1Smrg nonnull (lt_argv_zero)); 3773c27c18e8Smrg for (i = 0; i < newargc; i++) 3774c27c18e8Smrg { 377537eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 377637eb1ca1Smrg i, nonnull (newargz[i])); 3777c27c18e8Smrg } 3778c43cc173Smrg 3779c43cc173SmrgEOF 3780c43cc173Smrg 3781c27c18e8Smrg case $host_os in 3782c27c18e8Smrg mingw*) 3783c27c18e8Smrg cat <<"EOF" 3784c27c18e8Smrg /* execv doesn't actually work on mingw as expected on unix */ 378537eb1ca1Smrg newargz = prepare_spawn (newargz); 3786c27c18e8Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 3787c27c18e8Smrg if (rval == -1) 3788c27c18e8Smrg { 3789c27c18e8Smrg /* failed to start process */ 379037eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 379137eb1ca1Smrg "(main) failed to launch target \"%s\": %s\n", 379237eb1ca1Smrg lt_argv_zero, nonnull (strerror (errno))); 3793c27c18e8Smrg return 127; 3794c27c18e8Smrg } 3795c27c18e8Smrg return rval; 3796c27c18e8SmrgEOF 3797c27c18e8Smrg ;; 3798c27c18e8Smrg *) 3799c27c18e8Smrg cat <<"EOF" 3800c27c18e8Smrg execv (lt_argv_zero, newargz); 3801c27c18e8Smrg return rval; /* =127, but avoids unused variable warning */ 3802c27c18e8SmrgEOF 3803c27c18e8Smrg ;; 3804c27c18e8Smrg esac 3805c43cc173Smrg 3806c27c18e8Smrg cat <<"EOF" 3807c27c18e8Smrg} 3808c43cc173Smrg 3809c27c18e8Smrgvoid * 3810c27c18e8Smrgxmalloc (size_t num) 3811c27c18e8Smrg{ 3812c27c18e8Smrg void *p = (void *) malloc (num); 3813c27c18e8Smrg if (!p) 381437eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 3815c43cc173Smrg 3816c27c18e8Smrg return p; 3817c27c18e8Smrg} 3818c43cc173Smrg 3819c27c18e8Smrgchar * 3820c27c18e8Smrgxstrdup (const char *string) 3821c27c18e8Smrg{ 3822c27c18e8Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 3823c27c18e8Smrg string) : NULL; 3824c27c18e8Smrg} 3825c43cc173Smrg 3826c27c18e8Smrgconst char * 3827c27c18e8Smrgbase_name (const char *name) 3828c27c18e8Smrg{ 3829c27c18e8Smrg const char *base; 3830c43cc173Smrg 3831c27c18e8Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3832c27c18e8Smrg /* Skip over the disk name in MSDOS pathnames. */ 3833c27c18e8Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 3834c27c18e8Smrg name += 2; 3835c27c18e8Smrg#endif 3836c43cc173Smrg 3837c27c18e8Smrg for (base = name; *name; name++) 3838c27c18e8Smrg if (IS_DIR_SEPARATOR (*name)) 3839c27c18e8Smrg base = name + 1; 3840c27c18e8Smrg return base; 3841c27c18e8Smrg} 3842c43cc173Smrg 3843c27c18e8Smrgint 3844c27c18e8Smrgcheck_executable (const char *path) 3845c27c18e8Smrg{ 3846c27c18e8Smrg struct stat st; 3847c43cc173Smrg 384837eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 384937eb1ca1Smrg nonempty (path)); 3850c27c18e8Smrg if ((!path) || (!*path)) 3851c27c18e8Smrg return 0; 3852c43cc173Smrg 3853c27c18e8Smrg if ((stat (path, &st) >= 0) 3854c27c18e8Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 3855c27c18e8Smrg return 1; 3856c27c18e8Smrg else 3857c27c18e8Smrg return 0; 3858c27c18e8Smrg} 3859c43cc173Smrg 3860c27c18e8Smrgint 3861c27c18e8Smrgmake_executable (const char *path) 3862c27c18e8Smrg{ 3863c27c18e8Smrg int rval = 0; 3864c27c18e8Smrg struct stat st; 3865c43cc173Smrg 386637eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 386737eb1ca1Smrg nonempty (path)); 3868c27c18e8Smrg if ((!path) || (!*path)) 3869c27c18e8Smrg return 0; 3870c43cc173Smrg 3871c27c18e8Smrg if (stat (path, &st) >= 0) 3872c27c18e8Smrg { 3873c27c18e8Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 3874c27c18e8Smrg } 3875c27c18e8Smrg return rval; 3876c27c18e8Smrg} 3877c43cc173Smrg 3878c27c18e8Smrg/* Searches for the full path of the wrapper. Returns 3879c27c18e8Smrg newly allocated full path name if found, NULL otherwise 3880c27c18e8Smrg Does not chase symlinks, even on platforms that support them. 3881c27c18e8Smrg*/ 3882c27c18e8Smrgchar * 3883c27c18e8Smrgfind_executable (const char *wrapper) 3884c27c18e8Smrg{ 3885c27c18e8Smrg int has_slash = 0; 3886c27c18e8Smrg const char *p; 3887c27c18e8Smrg const char *p_next; 3888c27c18e8Smrg /* static buffer for getcwd */ 3889c27c18e8Smrg char tmp[LT_PATHMAX + 1]; 3890c27c18e8Smrg int tmp_len; 3891c27c18e8Smrg char *concat_name; 3892c43cc173Smrg 389337eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 389437eb1ca1Smrg nonempty (wrapper)); 3895c43cc173Smrg 3896c27c18e8Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 3897c27c18e8Smrg return NULL; 3898c43cc173Smrg 3899c27c18e8Smrg /* Absolute path? */ 3900c27c18e8Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3901c27c18e8Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 3902c27c18e8Smrg { 3903c27c18e8Smrg concat_name = xstrdup (wrapper); 3904c27c18e8Smrg if (check_executable (concat_name)) 3905c27c18e8Smrg return concat_name; 3906c27c18e8Smrg XFREE (concat_name); 3907c27c18e8Smrg } 3908c27c18e8Smrg else 3909c27c18e8Smrg { 3910c27c18e8Smrg#endif 3911c27c18e8Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 3912c27c18e8Smrg { 3913c27c18e8Smrg concat_name = xstrdup (wrapper); 3914c27c18e8Smrg if (check_executable (concat_name)) 3915c27c18e8Smrg return concat_name; 3916c27c18e8Smrg XFREE (concat_name); 3917c27c18e8Smrg } 3918c27c18e8Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3919c27c18e8Smrg } 3920c27c18e8Smrg#endif 3921c43cc173Smrg 3922c27c18e8Smrg for (p = wrapper; *p; p++) 3923c27c18e8Smrg if (*p == '/') 3924c27c18e8Smrg { 3925c27c18e8Smrg has_slash = 1; 3926c27c18e8Smrg break; 3927c27c18e8Smrg } 3928c27c18e8Smrg if (!has_slash) 3929c27c18e8Smrg { 3930c27c18e8Smrg /* no slashes; search PATH */ 3931c27c18e8Smrg const char *path = getenv ("PATH"); 3932c27c18e8Smrg if (path != NULL) 3933c27c18e8Smrg { 3934c27c18e8Smrg for (p = path; *p; p = p_next) 3935c27c18e8Smrg { 3936c27c18e8Smrg const char *q; 3937c27c18e8Smrg size_t p_len; 3938c27c18e8Smrg for (q = p; *q; q++) 3939c27c18e8Smrg if (IS_PATH_SEPARATOR (*q)) 3940c27c18e8Smrg break; 3941c27c18e8Smrg p_len = q - p; 3942c27c18e8Smrg p_next = (*q == '\0' ? q : q + 1); 3943c27c18e8Smrg if (p_len == 0) 3944c27c18e8Smrg { 3945c27c18e8Smrg /* empty path: current directory */ 3946c27c18e8Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 394737eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 394837eb1ca1Smrg nonnull (strerror (errno))); 3949c27c18e8Smrg tmp_len = strlen (tmp); 3950c27c18e8Smrg concat_name = 3951c27c18e8Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3952c27c18e8Smrg memcpy (concat_name, tmp, tmp_len); 3953c27c18e8Smrg concat_name[tmp_len] = '/'; 3954c27c18e8Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3955c27c18e8Smrg } 3956c27c18e8Smrg else 3957c27c18e8Smrg { 3958c27c18e8Smrg concat_name = 3959c27c18e8Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 3960c27c18e8Smrg memcpy (concat_name, p, p_len); 3961c27c18e8Smrg concat_name[p_len] = '/'; 3962c27c18e8Smrg strcpy (concat_name + p_len + 1, wrapper); 3963c27c18e8Smrg } 3964c27c18e8Smrg if (check_executable (concat_name)) 3965c27c18e8Smrg return concat_name; 3966c27c18e8Smrg XFREE (concat_name); 3967c27c18e8Smrg } 3968c27c18e8Smrg } 3969c27c18e8Smrg /* not found in PATH; assume curdir */ 3970c27c18e8Smrg } 3971c27c18e8Smrg /* Relative path | not found in path: prepend cwd */ 3972c27c18e8Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 397337eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 397437eb1ca1Smrg nonnull (strerror (errno))); 3975c27c18e8Smrg tmp_len = strlen (tmp); 3976c27c18e8Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3977c27c18e8Smrg memcpy (concat_name, tmp, tmp_len); 3978c27c18e8Smrg concat_name[tmp_len] = '/'; 3979c27c18e8Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3980c43cc173Smrg 3981c27c18e8Smrg if (check_executable (concat_name)) 3982c27c18e8Smrg return concat_name; 3983c27c18e8Smrg XFREE (concat_name); 3984c27c18e8Smrg return NULL; 3985c27c18e8Smrg} 3986c43cc173Smrg 3987c27c18e8Smrgchar * 3988c27c18e8Smrgchase_symlinks (const char *pathspec) 3989c27c18e8Smrg{ 3990c27c18e8Smrg#ifndef S_ISLNK 3991c27c18e8Smrg return xstrdup (pathspec); 3992c27c18e8Smrg#else 3993c27c18e8Smrg char buf[LT_PATHMAX]; 3994c27c18e8Smrg struct stat s; 3995c27c18e8Smrg char *tmp_pathspec = xstrdup (pathspec); 3996c27c18e8Smrg char *p; 3997c27c18e8Smrg int has_symlinks = 0; 3998c27c18e8Smrg while (strlen (tmp_pathspec) && !has_symlinks) 3999c27c18e8Smrg { 400037eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 400137eb1ca1Smrg "checking path component for symlinks: %s\n", 400237eb1ca1Smrg tmp_pathspec); 4003c27c18e8Smrg if (lstat (tmp_pathspec, &s) == 0) 4004c27c18e8Smrg { 4005c27c18e8Smrg if (S_ISLNK (s.st_mode) != 0) 4006c27c18e8Smrg { 4007c27c18e8Smrg has_symlinks = 1; 4008c27c18e8Smrg break; 4009c27c18e8Smrg } 4010c43cc173Smrg 4011c27c18e8Smrg /* search backwards for last DIR_SEPARATOR */ 4012c27c18e8Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4013c27c18e8Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4014c27c18e8Smrg p--; 4015c27c18e8Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4016c27c18e8Smrg { 4017c27c18e8Smrg /* no more DIR_SEPARATORS left */ 4018c27c18e8Smrg break; 4019c27c18e8Smrg } 4020c27c18e8Smrg *p = '\0'; 4021c27c18e8Smrg } 4022c27c18e8Smrg else 4023c27c18e8Smrg { 402437eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 402537eb1ca1Smrg "error accessing file \"%s\": %s", 402637eb1ca1Smrg tmp_pathspec, nonnull (strerror (errno))); 4027c27c18e8Smrg } 4028c27c18e8Smrg } 4029c27c18e8Smrg XFREE (tmp_pathspec); 4030c43cc173Smrg 4031c27c18e8Smrg if (!has_symlinks) 4032c27c18e8Smrg { 4033c27c18e8Smrg return xstrdup (pathspec); 4034c27c18e8Smrg } 4035c43cc173Smrg 4036c27c18e8Smrg tmp_pathspec = realpath (pathspec, buf); 4037c27c18e8Smrg if (tmp_pathspec == 0) 4038c27c18e8Smrg { 403937eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 404037eb1ca1Smrg "could not follow symlinks for %s", pathspec); 4041c27c18e8Smrg } 4042c27c18e8Smrg return xstrdup (tmp_pathspec); 4043c27c18e8Smrg#endif 4044c27c18e8Smrg} 4045c43cc173Smrg 4046c27c18e8Smrgchar * 4047c27c18e8Smrgstrendzap (char *str, const char *pat) 4048c27c18e8Smrg{ 4049c27c18e8Smrg size_t len, patlen; 4050c43cc173Smrg 4051c27c18e8Smrg assert (str != NULL); 4052c27c18e8Smrg assert (pat != NULL); 4053c43cc173Smrg 4054c27c18e8Smrg len = strlen (str); 4055c27c18e8Smrg patlen = strlen (pat); 4056c43cc173Smrg 4057c27c18e8Smrg if (patlen <= len) 4058c27c18e8Smrg { 4059c27c18e8Smrg str += len - patlen; 4060c27c18e8Smrg if (strcmp (str, pat) == 0) 4061c27c18e8Smrg *str = '\0'; 4062c27c18e8Smrg } 4063c27c18e8Smrg return str; 4064c27c18e8Smrg} 4065c43cc173Smrg 406637eb1ca1Smrgvoid 406737eb1ca1Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 406837eb1ca1Smrg{ 406937eb1ca1Smrg va_list args; 407037eb1ca1Smrg if (lt_debug) 407137eb1ca1Smrg { 407237eb1ca1Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 407337eb1ca1Smrg va_start (args, fmt); 407437eb1ca1Smrg (void) vfprintf (stderr, fmt, args); 407537eb1ca1Smrg va_end (args); 407637eb1ca1Smrg } 407737eb1ca1Smrg} 407837eb1ca1Smrg 4079c27c18e8Smrgstatic void 408037eb1ca1Smrglt_error_core (int exit_status, const char *file, 408137eb1ca1Smrg int line, const char *mode, 4082c27c18e8Smrg const char *message, va_list ap) 4083c27c18e8Smrg{ 408437eb1ca1Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4085c27c18e8Smrg vfprintf (stderr, message, ap); 4086c27c18e8Smrg fprintf (stderr, ".\n"); 4087c43cc173Smrg 4088c27c18e8Smrg if (exit_status >= 0) 4089c27c18e8Smrg exit (exit_status); 4090c27c18e8Smrg} 4091c43cc173Smrg 4092c27c18e8Smrgvoid 409337eb1ca1Smrglt_fatal (const char *file, int line, const char *message, ...) 4094c27c18e8Smrg{ 4095c27c18e8Smrg va_list ap; 4096c27c18e8Smrg va_start (ap, message); 409737eb1ca1Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4098c27c18e8Smrg va_end (ap); 4099c27c18e8Smrg} 4100c43cc173Smrg 410137eb1ca1Smrgstatic const char * 410237eb1ca1Smrgnonnull (const char *s) 410337eb1ca1Smrg{ 410437eb1ca1Smrg return s ? s : "(null)"; 410537eb1ca1Smrg} 410637eb1ca1Smrg 410737eb1ca1Smrgstatic const char * 410837eb1ca1Smrgnonempty (const char *s) 410937eb1ca1Smrg{ 411037eb1ca1Smrg return (s && !*s) ? "(empty)" : nonnull (s); 411137eb1ca1Smrg} 411237eb1ca1Smrg 4113c27c18e8Smrgvoid 4114c27c18e8Smrglt_setenv (const char *name, const char *value) 4115c27c18e8Smrg{ 411637eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 411737eb1ca1Smrg "(lt_setenv) setting '%s' to '%s'\n", 411837eb1ca1Smrg nonnull (name), nonnull (value)); 4119c27c18e8Smrg { 4120c27c18e8Smrg#ifdef HAVE_SETENV 4121c27c18e8Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 4122c27c18e8Smrg char *str = xstrdup (value); 4123c27c18e8Smrg setenv (name, str, 1); 4124c27c18e8Smrg#else 4125c27c18e8Smrg int len = strlen (name) + 1 + strlen (value) + 1; 4126c27c18e8Smrg char *str = XMALLOC (char, len); 4127c27c18e8Smrg sprintf (str, "%s=%s", name, value); 4128c27c18e8Smrg if (putenv (str) != EXIT_SUCCESS) 4129c27c18e8Smrg { 4130c27c18e8Smrg XFREE (str); 4131c27c18e8Smrg } 4132c27c18e8Smrg#endif 4133c27c18e8Smrg } 4134c27c18e8Smrg} 4135c43cc173Smrg 4136c27c18e8Smrgchar * 4137c27c18e8Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 4138c27c18e8Smrg{ 4139c27c18e8Smrg char *new_value; 4140c27c18e8Smrg if (orig_value && *orig_value) 4141c27c18e8Smrg { 4142c27c18e8Smrg int orig_value_len = strlen (orig_value); 4143c27c18e8Smrg int add_len = strlen (add); 4144c27c18e8Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4145c27c18e8Smrg if (to_end) 4146c27c18e8Smrg { 4147c27c18e8Smrg strcpy (new_value, orig_value); 4148c27c18e8Smrg strcpy (new_value + orig_value_len, add); 4149c27c18e8Smrg } 4150c27c18e8Smrg else 4151c27c18e8Smrg { 4152c27c18e8Smrg strcpy (new_value, add); 4153c27c18e8Smrg strcpy (new_value + add_len, orig_value); 4154c27c18e8Smrg } 4155c27c18e8Smrg } 4156c27c18e8Smrg else 4157c27c18e8Smrg { 4158c27c18e8Smrg new_value = xstrdup (add); 4159c27c18e8Smrg } 4160c27c18e8Smrg return new_value; 4161c27c18e8Smrg} 4162c43cc173Smrg 4163c27c18e8Smrgvoid 4164c27c18e8Smrglt_update_exe_path (const char *name, const char *value) 4165c27c18e8Smrg{ 416637eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 416737eb1ca1Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 416837eb1ca1Smrg nonnull (name), nonnull (value)); 4169c43cc173Smrg 4170c27c18e8Smrg if (name && *name && value && *value) 4171c27c18e8Smrg { 4172c27c18e8Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4173c27c18e8Smrg /* some systems can't cope with a ':'-terminated path #' */ 4174c27c18e8Smrg int len = strlen (new_value); 4175c27c18e8Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4176c27c18e8Smrg { 4177c27c18e8Smrg new_value[len-1] = '\0'; 4178c27c18e8Smrg } 4179c27c18e8Smrg lt_setenv (name, new_value); 4180c27c18e8Smrg XFREE (new_value); 4181c27c18e8Smrg } 4182c27c18e8Smrg} 4183c43cc173Smrg 4184c27c18e8Smrgvoid 4185c27c18e8Smrglt_update_lib_path (const char *name, const char *value) 4186c27c18e8Smrg{ 418737eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 418837eb1ca1Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 418937eb1ca1Smrg nonnull (name), nonnull (value)); 4190c43cc173Smrg 4191c27c18e8Smrg if (name && *name && value && *value) 4192c27c18e8Smrg { 4193c27c18e8Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4194c27c18e8Smrg lt_setenv (name, new_value); 4195c27c18e8Smrg XFREE (new_value); 4196c27c18e8Smrg } 4197c27c18e8Smrg} 4198c43cc173Smrg 419937eb1ca1SmrgEOF 420037eb1ca1Smrg case $host_os in 420137eb1ca1Smrg mingw*) 420237eb1ca1Smrg cat <<"EOF" 420337eb1ca1Smrg 420437eb1ca1Smrg/* Prepares an argument vector before calling spawn(). 420537eb1ca1Smrg Note that spawn() does not by itself call the command interpreter 420637eb1ca1Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 420737eb1ca1Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 420837eb1ca1Smrg GetVersionEx(&v); 420937eb1ca1Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 421037eb1ca1Smrg }) ? "cmd.exe" : "command.com"). 421137eb1ca1Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 421237eb1ca1Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 421337eb1ca1Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 421437eb1ca1Smrg special way: 421537eb1ca1Smrg - Space and tab are interpreted as delimiters. They are not treated as 421637eb1ca1Smrg delimiters if they are surrounded by double quotes: "...". 421737eb1ca1Smrg - Unescaped double quotes are removed from the input. Their only effect is 421837eb1ca1Smrg that within double quotes, space and tab are treated like normal 421937eb1ca1Smrg characters. 422037eb1ca1Smrg - Backslashes not followed by double quotes are not special. 422137eb1ca1Smrg - But 2*n+1 backslashes followed by a double quote become 422237eb1ca1Smrg n backslashes followed by a double quote (n >= 0): 422337eb1ca1Smrg \" -> " 422437eb1ca1Smrg \\\" -> \" 422537eb1ca1Smrg \\\\\" -> \\" 422637eb1ca1Smrg */ 422737eb1ca1Smrg#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" 422837eb1ca1Smrg#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" 422937eb1ca1Smrgchar ** 423037eb1ca1Smrgprepare_spawn (char **argv) 423137eb1ca1Smrg{ 423237eb1ca1Smrg size_t argc; 423337eb1ca1Smrg char **new_argv; 423437eb1ca1Smrg size_t i; 423537eb1ca1Smrg 423637eb1ca1Smrg /* Count number of arguments. */ 423737eb1ca1Smrg for (argc = 0; argv[argc] != NULL; argc++) 423837eb1ca1Smrg ; 423937eb1ca1Smrg 424037eb1ca1Smrg /* Allocate new argument vector. */ 424137eb1ca1Smrg new_argv = XMALLOC (char *, argc + 1); 424237eb1ca1Smrg 424337eb1ca1Smrg /* Put quoted arguments into the new argument vector. */ 424437eb1ca1Smrg for (i = 0; i < argc; i++) 424537eb1ca1Smrg { 424637eb1ca1Smrg const char *string = argv[i]; 424737eb1ca1Smrg 424837eb1ca1Smrg if (string[0] == '\0') 424937eb1ca1Smrg new_argv[i] = xstrdup ("\"\""); 425037eb1ca1Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 425137eb1ca1Smrg { 425237eb1ca1Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 425337eb1ca1Smrg size_t length; 425437eb1ca1Smrg unsigned int backslashes; 425537eb1ca1Smrg const char *s; 425637eb1ca1Smrg char *quoted_string; 425737eb1ca1Smrg char *p; 425837eb1ca1Smrg 425937eb1ca1Smrg length = 0; 426037eb1ca1Smrg backslashes = 0; 426137eb1ca1Smrg if (quote_around) 426237eb1ca1Smrg length++; 426337eb1ca1Smrg for (s = string; *s != '\0'; s++) 426437eb1ca1Smrg { 426537eb1ca1Smrg char c = *s; 426637eb1ca1Smrg if (c == '"') 426737eb1ca1Smrg length += backslashes + 1; 426837eb1ca1Smrg length++; 426937eb1ca1Smrg if (c == '\\') 427037eb1ca1Smrg backslashes++; 427137eb1ca1Smrg else 427237eb1ca1Smrg backslashes = 0; 427337eb1ca1Smrg } 427437eb1ca1Smrg if (quote_around) 427537eb1ca1Smrg length += backslashes + 1; 427637eb1ca1Smrg 427737eb1ca1Smrg quoted_string = XMALLOC (char, length + 1); 427837eb1ca1Smrg 427937eb1ca1Smrg p = quoted_string; 428037eb1ca1Smrg backslashes = 0; 428137eb1ca1Smrg if (quote_around) 428237eb1ca1Smrg *p++ = '"'; 428337eb1ca1Smrg for (s = string; *s != '\0'; s++) 428437eb1ca1Smrg { 428537eb1ca1Smrg char c = *s; 428637eb1ca1Smrg if (c == '"') 428737eb1ca1Smrg { 428837eb1ca1Smrg unsigned int j; 428937eb1ca1Smrg for (j = backslashes + 1; j > 0; j--) 429037eb1ca1Smrg *p++ = '\\'; 429137eb1ca1Smrg } 429237eb1ca1Smrg *p++ = c; 429337eb1ca1Smrg if (c == '\\') 429437eb1ca1Smrg backslashes++; 429537eb1ca1Smrg else 429637eb1ca1Smrg backslashes = 0; 429737eb1ca1Smrg } 429837eb1ca1Smrg if (quote_around) 429937eb1ca1Smrg { 430037eb1ca1Smrg unsigned int j; 430137eb1ca1Smrg for (j = backslashes; j > 0; j--) 430237eb1ca1Smrg *p++ = '\\'; 430337eb1ca1Smrg *p++ = '"'; 430437eb1ca1Smrg } 430537eb1ca1Smrg *p = '\0'; 430637eb1ca1Smrg 430737eb1ca1Smrg new_argv[i] = quoted_string; 430837eb1ca1Smrg } 430937eb1ca1Smrg else 431037eb1ca1Smrg new_argv[i] = (char *) string; 431137eb1ca1Smrg } 431237eb1ca1Smrg new_argv[argc] = NULL; 431337eb1ca1Smrg 431437eb1ca1Smrg return new_argv; 431537eb1ca1Smrg} 431637eb1ca1SmrgEOF 431737eb1ca1Smrg ;; 431837eb1ca1Smrg esac 431937eb1ca1Smrg 432037eb1ca1Smrg cat <<"EOF" 432137eb1ca1Smrgvoid lt_dump_script (FILE* f) 432237eb1ca1Smrg{ 432337eb1ca1SmrgEOF 432437eb1ca1Smrg func_emit_wrapper yes | 432537eb1ca1Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 432637eb1ca1Smrg -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 4327c43cc173Smrg 432837eb1ca1Smrg cat <<"EOF" 432937eb1ca1Smrg} 4330c27c18e8SmrgEOF 4331c27c18e8Smrg} 4332c27c18e8Smrg# end: func_emit_cwrapperexe_src 4333c43cc173Smrg 433437eb1ca1Smrg# func_win32_import_lib_p ARG 433537eb1ca1Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 433637eb1ca1Smrgfunc_win32_import_lib_p () 433737eb1ca1Smrg{ 433837eb1ca1Smrg $opt_debug 433937eb1ca1Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 434037eb1ca1Smrg *import*) : ;; 434137eb1ca1Smrg *) false ;; 434237eb1ca1Smrg esac 434337eb1ca1Smrg} 434437eb1ca1Smrg 4345c27c18e8Smrg# func_mode_link arg... 4346c27c18e8Smrgfunc_mode_link () 4347c27c18e8Smrg{ 4348c27c18e8Smrg $opt_debug 4349c27c18e8Smrg case $host in 4350c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4351c27c18e8Smrg # It is impossible to link a dll without this setting, and 4352c27c18e8Smrg # we shouldn't force the makefile maintainer to figure out 4353c27c18e8Smrg # which system we are compiling for in order to pass an extra 4354c27c18e8Smrg # flag for every libtool invocation. 4355c27c18e8Smrg # allow_undefined=no 4356c43cc173Smrg 4357c27c18e8Smrg # FIXME: Unfortunately, there are problems with the above when trying 4358c27c18e8Smrg # to make a dll which has undefined symbols, in which case not 4359c27c18e8Smrg # even a static library is built. For now, we need to specify 4360c27c18e8Smrg # -no-undefined on the libtool link line when we can be certain 4361c27c18e8Smrg # that all symbols are satisfied, otherwise we get a static library. 4362c27c18e8Smrg allow_undefined=yes 4363c27c18e8Smrg ;; 4364c27c18e8Smrg *) 4365c27c18e8Smrg allow_undefined=yes 4366c27c18e8Smrg ;; 4367c27c18e8Smrg esac 4368c27c18e8Smrg libtool_args=$nonopt 4369c27c18e8Smrg base_compile="$nonopt $@" 4370c27c18e8Smrg compile_command=$nonopt 4371c27c18e8Smrg finalize_command=$nonopt 4372c43cc173Smrg 4373c27c18e8Smrg compile_rpath= 4374c27c18e8Smrg finalize_rpath= 4375c27c18e8Smrg compile_shlibpath= 4376c27c18e8Smrg finalize_shlibpath= 4377c27c18e8Smrg convenience= 4378c27c18e8Smrg old_convenience= 4379c27c18e8Smrg deplibs= 4380c27c18e8Smrg old_deplibs= 4381c27c18e8Smrg compiler_flags= 4382c27c18e8Smrg linker_flags= 4383c27c18e8Smrg dllsearchpath= 4384c27c18e8Smrg lib_search_path=`pwd` 4385c27c18e8Smrg inst_prefix_dir= 4386c27c18e8Smrg new_inherited_linker_flags= 4387c43cc173Smrg 4388c27c18e8Smrg avoid_version=no 438937eb1ca1Smrg bindir= 4390c27c18e8Smrg dlfiles= 4391c27c18e8Smrg dlprefiles= 4392c27c18e8Smrg dlself=no 4393c27c18e8Smrg export_dynamic=no 4394c27c18e8Smrg export_symbols= 4395c27c18e8Smrg export_symbols_regex= 4396c27c18e8Smrg generated= 4397c27c18e8Smrg libobjs= 4398c27c18e8Smrg ltlibs= 4399c27c18e8Smrg module=no 4400c27c18e8Smrg no_install=no 4401c27c18e8Smrg objs= 4402c27c18e8Smrg non_pic_objects= 4403c27c18e8Smrg precious_files_regex= 4404c27c18e8Smrg prefer_static_libs=no 4405c27c18e8Smrg preload=no 4406c27c18e8Smrg prev= 4407c27c18e8Smrg prevarg= 4408c27c18e8Smrg release= 4409c27c18e8Smrg rpath= 4410c27c18e8Smrg xrpath= 4411c27c18e8Smrg perm_rpath= 4412c27c18e8Smrg temp_rpath= 4413c27c18e8Smrg thread_safe=no 4414c27c18e8Smrg vinfo= 4415c27c18e8Smrg vinfo_number=no 4416c27c18e8Smrg weak_libs= 4417c27c18e8Smrg single_module="${wl}-single_module" 4418c27c18e8Smrg func_infer_tag $base_compile 4419c43cc173Smrg 4420c27c18e8Smrg # We need to know -static, to get the right output filenames. 4421c27c18e8Smrg for arg 4422c27c18e8Smrg do 4423c27c18e8Smrg case $arg in 4424c27c18e8Smrg -shared) 4425c27c18e8Smrg test "$build_libtool_libs" != yes && \ 4426c27c18e8Smrg func_fatal_configuration "can not build a shared library" 4427c27c18e8Smrg build_old_libs=no 4428c27c18e8Smrg break 4429c27c18e8Smrg ;; 4430c27c18e8Smrg -all-static | -static | -static-libtool-libs) 4431c27c18e8Smrg case $arg in 4432c27c18e8Smrg -all-static) 4433c27c18e8Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 4434c27c18e8Smrg func_warning "complete static linking is impossible in this configuration" 4435c27c18e8Smrg fi 4436c27c18e8Smrg if test -n "$link_static_flag"; then 4437c27c18e8Smrg dlopen_self=$dlopen_self_static 4438c27c18e8Smrg fi 4439c27c18e8Smrg prefer_static_libs=yes 4440c27c18e8Smrg ;; 4441c27c18e8Smrg -static) 4442c27c18e8Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4443c27c18e8Smrg dlopen_self=$dlopen_self_static 4444c27c18e8Smrg fi 4445c27c18e8Smrg prefer_static_libs=built 4446c27c18e8Smrg ;; 4447c27c18e8Smrg -static-libtool-libs) 4448c27c18e8Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4449c27c18e8Smrg dlopen_self=$dlopen_self_static 4450c27c18e8Smrg fi 4451c27c18e8Smrg prefer_static_libs=yes 4452c27c18e8Smrg ;; 4453c27c18e8Smrg esac 4454c27c18e8Smrg build_libtool_libs=no 4455c27c18e8Smrg build_old_libs=yes 4456c27c18e8Smrg break 4457c43cc173Smrg ;; 4458c43cc173Smrg esac 4459c27c18e8Smrg done 4460c43cc173Smrg 4461c27c18e8Smrg # See if our shared archives depend on static archives. 4462c27c18e8Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 4463c43cc173Smrg 4464c27c18e8Smrg # Go through the arguments, transforming them on the way. 4465c27c18e8Smrg while test "$#" -gt 0; do 4466c27c18e8Smrg arg="$1" 4467c27c18e8Smrg shift 4468c27c18e8Smrg func_quote_for_eval "$arg" 4469c27c18e8Smrg qarg=$func_quote_for_eval_unquoted_result 4470c27c18e8Smrg func_append libtool_args " $func_quote_for_eval_result" 4471c43cc173Smrg 4472c27c18e8Smrg # If the previous option needs an argument, assign it. 4473c27c18e8Smrg if test -n "$prev"; then 4474c27c18e8Smrg case $prev in 4475c27c18e8Smrg output) 4476c27c18e8Smrg func_append compile_command " @OUTPUT@" 4477c27c18e8Smrg func_append finalize_command " @OUTPUT@" 4478c43cc173Smrg ;; 4479c43cc173Smrg esac 4480c43cc173Smrg 4481c27c18e8Smrg case $prev in 448237eb1ca1Smrg bindir) 448337eb1ca1Smrg bindir="$arg" 448437eb1ca1Smrg prev= 448537eb1ca1Smrg continue 448637eb1ca1Smrg ;; 4487c27c18e8Smrg dlfiles|dlprefiles) 4488c27c18e8Smrg if test "$preload" = no; then 4489c27c18e8Smrg # Add the symbol object into the linking commands. 4490c27c18e8Smrg func_append compile_command " @SYMFILE@" 4491c27c18e8Smrg func_append finalize_command " @SYMFILE@" 4492c27c18e8Smrg preload=yes 4493c27c18e8Smrg fi 4494c27c18e8Smrg case $arg in 4495c27c18e8Smrg *.la | *.lo) ;; # We handle these cases below. 4496c27c18e8Smrg force) 4497c27c18e8Smrg if test "$dlself" = no; then 4498c27c18e8Smrg dlself=needless 4499c27c18e8Smrg export_dynamic=yes 4500c27c18e8Smrg fi 4501c27c18e8Smrg prev= 4502c27c18e8Smrg continue 4503c27c18e8Smrg ;; 4504c27c18e8Smrg self) 4505c27c18e8Smrg if test "$prev" = dlprefiles; then 4506c27c18e8Smrg dlself=yes 4507c27c18e8Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 4508c27c18e8Smrg dlself=yes 4509c43cc173Smrg else 4510c27c18e8Smrg dlself=needless 4511c27c18e8Smrg export_dynamic=yes 4512c43cc173Smrg fi 4513c27c18e8Smrg prev= 4514c27c18e8Smrg continue 4515c27c18e8Smrg ;; 4516c27c18e8Smrg *) 4517c27c18e8Smrg if test "$prev" = dlfiles; then 4518c27c18e8Smrg dlfiles="$dlfiles $arg" 4519c27c18e8Smrg else 4520c27c18e8Smrg dlprefiles="$dlprefiles $arg" 4521c27c18e8Smrg fi 4522c27c18e8Smrg prev= 4523c27c18e8Smrg continue 4524c27c18e8Smrg ;; 4525c43cc173Smrg esac 4526c43cc173Smrg ;; 4527c27c18e8Smrg expsyms) 4528c27c18e8Smrg export_symbols="$arg" 4529c27c18e8Smrg test -f "$arg" \ 4530c27c18e8Smrg || func_fatal_error "symbol file \`$arg' does not exist" 4531c27c18e8Smrg prev= 4532c27c18e8Smrg continue 4533c27c18e8Smrg ;; 4534c27c18e8Smrg expsyms_regex) 4535c27c18e8Smrg export_symbols_regex="$arg" 4536c27c18e8Smrg prev= 4537c27c18e8Smrg continue 4538c27c18e8Smrg ;; 4539c27c18e8Smrg framework) 4540c27c18e8Smrg case $host in 4541c27c18e8Smrg *-*-darwin*) 4542c27c18e8Smrg case "$deplibs " in 4543c27c18e8Smrg *" $qarg.ltframework "*) ;; 4544c27c18e8Smrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 4545c27c18e8Smrg ;; 4546c43cc173Smrg esac 4547c27c18e8Smrg ;; 4548c43cc173Smrg esac 4549c27c18e8Smrg prev= 4550c27c18e8Smrg continue 4551c27c18e8Smrg ;; 4552c27c18e8Smrg inst_prefix) 4553c27c18e8Smrg inst_prefix_dir="$arg" 4554c27c18e8Smrg prev= 4555c27c18e8Smrg continue 4556c27c18e8Smrg ;; 4557c27c18e8Smrg objectlist) 4558c27c18e8Smrg if test -f "$arg"; then 4559c27c18e8Smrg save_arg=$arg 4560c27c18e8Smrg moreargs= 4561c27c18e8Smrg for fil in `cat "$save_arg"` 4562c27c18e8Smrg do 4563c27c18e8Smrg# moreargs="$moreargs $fil" 4564c27c18e8Smrg arg=$fil 4565c27c18e8Smrg # A libtool-controlled object. 4566c43cc173Smrg 4567c27c18e8Smrg # Check to see that this really is a libtool object. 4568c27c18e8Smrg if func_lalib_unsafe_p "$arg"; then 4569c27c18e8Smrg pic_object= 4570c27c18e8Smrg non_pic_object= 4571c43cc173Smrg 4572c27c18e8Smrg # Read the .lo file 4573c27c18e8Smrg func_source "$arg" 4574c43cc173Smrg 4575c27c18e8Smrg if test -z "$pic_object" || 4576c27c18e8Smrg test -z "$non_pic_object" || 4577c27c18e8Smrg test "$pic_object" = none && 4578c27c18e8Smrg test "$non_pic_object" = none; then 4579c27c18e8Smrg func_fatal_error "cannot find name of object for \`$arg'" 4580c27c18e8Smrg fi 4581c43cc173Smrg 4582c27c18e8Smrg # Extract subdirectory from the argument. 4583c27c18e8Smrg func_dirname "$arg" "/" "" 4584c27c18e8Smrg xdir="$func_dirname_result" 4585c43cc173Smrg 4586c27c18e8Smrg if test "$pic_object" != none; then 4587c27c18e8Smrg # Prepend the subdirectory the object is found in. 4588c27c18e8Smrg pic_object="$xdir$pic_object" 4589c43cc173Smrg 4590c27c18e8Smrg if test "$prev" = dlfiles; then 4591c27c18e8Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4592c27c18e8Smrg dlfiles="$dlfiles $pic_object" 4593c27c18e8Smrg prev= 4594c27c18e8Smrg continue 4595c27c18e8Smrg else 4596c27c18e8Smrg # If libtool objects are unsupported, then we need to preload. 4597c27c18e8Smrg prev=dlprefiles 4598c27c18e8Smrg fi 4599c27c18e8Smrg fi 4600c43cc173Smrg 4601c27c18e8Smrg # CHECK ME: I think I busted this. -Ossama 4602c27c18e8Smrg if test "$prev" = dlprefiles; then 4603c27c18e8Smrg # Preload the old-style object. 4604c27c18e8Smrg dlprefiles="$dlprefiles $pic_object" 4605c27c18e8Smrg prev= 4606c27c18e8Smrg fi 4607c43cc173Smrg 4608c27c18e8Smrg # A PIC object. 4609c27c18e8Smrg func_append libobjs " $pic_object" 4610c27c18e8Smrg arg="$pic_object" 4611c27c18e8Smrg fi 4612c43cc173Smrg 4613c27c18e8Smrg # Non-PIC object. 4614c27c18e8Smrg if test "$non_pic_object" != none; then 4615c27c18e8Smrg # Prepend the subdirectory the object is found in. 4616c27c18e8Smrg non_pic_object="$xdir$non_pic_object" 4617c43cc173Smrg 4618c27c18e8Smrg # A standard non-PIC object 4619c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 4620c27c18e8Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 4621c27c18e8Smrg arg="$non_pic_object" 4622c27c18e8Smrg fi 4623c27c18e8Smrg else 4624c27c18e8Smrg # If the PIC object exists, use it instead. 4625c27c18e8Smrg # $xdir was prepended to $pic_object above. 4626c27c18e8Smrg non_pic_object="$pic_object" 4627c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 4628c27c18e8Smrg fi 4629c27c18e8Smrg else 4630c27c18e8Smrg # Only an error if not doing a dry-run. 4631c27c18e8Smrg if $opt_dry_run; then 4632c27c18e8Smrg # Extract subdirectory from the argument. 4633c27c18e8Smrg func_dirname "$arg" "/" "" 4634c27c18e8Smrg xdir="$func_dirname_result" 4635c27c18e8Smrg 4636c27c18e8Smrg func_lo2o "$arg" 4637c27c18e8Smrg pic_object=$xdir$objdir/$func_lo2o_result 4638c27c18e8Smrg non_pic_object=$xdir$func_lo2o_result 4639c27c18e8Smrg func_append libobjs " $pic_object" 4640c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 4641c27c18e8Smrg else 4642c27c18e8Smrg func_fatal_error "\`$arg' is not a valid libtool object" 4643c27c18e8Smrg fi 4644c27c18e8Smrg fi 4645c43cc173Smrg done 4646c27c18e8Smrg else 4647c27c18e8Smrg func_fatal_error "link input file \`$arg' does not exist" 4648c43cc173Smrg fi 4649c27c18e8Smrg arg=$save_arg 4650c27c18e8Smrg prev= 4651c27c18e8Smrg continue 4652c27c18e8Smrg ;; 4653c27c18e8Smrg precious_regex) 4654c27c18e8Smrg precious_files_regex="$arg" 4655c27c18e8Smrg prev= 4656c27c18e8Smrg continue 4657c27c18e8Smrg ;; 4658c27c18e8Smrg release) 4659c27c18e8Smrg release="-$arg" 4660c27c18e8Smrg prev= 4661c27c18e8Smrg continue 4662c27c18e8Smrg ;; 4663c27c18e8Smrg rpath | xrpath) 4664c27c18e8Smrg # We need an absolute path. 4665c27c18e8Smrg case $arg in 4666c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4667c27c18e8Smrg *) 4668c27c18e8Smrg func_fatal_error "only absolute run-paths are allowed" 4669c27c18e8Smrg ;; 4670c43cc173Smrg esac 4671c27c18e8Smrg if test "$prev" = rpath; then 4672c27c18e8Smrg case "$rpath " in 4673c27c18e8Smrg *" $arg "*) ;; 4674c27c18e8Smrg *) rpath="$rpath $arg" ;; 4675c27c18e8Smrg esac 4676c27c18e8Smrg else 4677c27c18e8Smrg case "$xrpath " in 4678c27c18e8Smrg *" $arg "*) ;; 4679c27c18e8Smrg *) xrpath="$xrpath $arg" ;; 4680c27c18e8Smrg esac 4681c27c18e8Smrg fi 4682c27c18e8Smrg prev= 4683c27c18e8Smrg continue 4684c27c18e8Smrg ;; 4685c27c18e8Smrg shrext) 4686c27c18e8Smrg shrext_cmds="$arg" 4687c27c18e8Smrg prev= 4688c27c18e8Smrg continue 4689c27c18e8Smrg ;; 4690c27c18e8Smrg weak) 4691c27c18e8Smrg weak_libs="$weak_libs $arg" 4692c27c18e8Smrg prev= 4693c27c18e8Smrg continue 4694c27c18e8Smrg ;; 4695c27c18e8Smrg xcclinker) 4696c27c18e8Smrg linker_flags="$linker_flags $qarg" 4697c27c18e8Smrg compiler_flags="$compiler_flags $qarg" 4698c27c18e8Smrg prev= 4699c27c18e8Smrg func_append compile_command " $qarg" 4700c27c18e8Smrg func_append finalize_command " $qarg" 4701c27c18e8Smrg continue 4702c27c18e8Smrg ;; 4703c27c18e8Smrg xcompiler) 4704c27c18e8Smrg compiler_flags="$compiler_flags $qarg" 4705c27c18e8Smrg prev= 4706c27c18e8Smrg func_append compile_command " $qarg" 4707c27c18e8Smrg func_append finalize_command " $qarg" 4708c27c18e8Smrg continue 4709c27c18e8Smrg ;; 4710c27c18e8Smrg xlinker) 4711c27c18e8Smrg linker_flags="$linker_flags $qarg" 4712c27c18e8Smrg compiler_flags="$compiler_flags $wl$qarg" 4713c27c18e8Smrg prev= 4714c27c18e8Smrg func_append compile_command " $wl$qarg" 4715c27c18e8Smrg func_append finalize_command " $wl$qarg" 4716c27c18e8Smrg continue 4717c43cc173Smrg ;; 4718c43cc173Smrg *) 4719c27c18e8Smrg eval "$prev=\"\$arg\"" 4720c27c18e8Smrg prev= 4721c27c18e8Smrg continue 4722c43cc173Smrg ;; 4723c43cc173Smrg esac 4724c27c18e8Smrg fi # test -n "$prev" 4725c43cc173Smrg 4726c27c18e8Smrg prevarg="$arg" 4727c43cc173Smrg 4728c27c18e8Smrg case $arg in 4729c27c18e8Smrg -all-static) 4730c27c18e8Smrg if test -n "$link_static_flag"; then 4731c27c18e8Smrg # See comment for -static flag below, for more details. 4732c27c18e8Smrg func_append compile_command " $link_static_flag" 4733c27c18e8Smrg func_append finalize_command " $link_static_flag" 4734c43cc173Smrg fi 4735c27c18e8Smrg continue 4736c27c18e8Smrg ;; 4737c43cc173Smrg 4738c27c18e8Smrg -allow-undefined) 4739c27c18e8Smrg # FIXME: remove this flag sometime in the future. 4740c27c18e8Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 4741c27c18e8Smrg ;; 4742c43cc173Smrg 4743c27c18e8Smrg -avoid-version) 4744c27c18e8Smrg avoid_version=yes 4745c27c18e8Smrg continue 4746c27c18e8Smrg ;; 4747c43cc173Smrg 474837eb1ca1Smrg -bindir) 474937eb1ca1Smrg prev=bindir 475037eb1ca1Smrg continue 475137eb1ca1Smrg ;; 475237eb1ca1Smrg 4753c27c18e8Smrg -dlopen) 4754c27c18e8Smrg prev=dlfiles 4755c27c18e8Smrg continue 4756c27c18e8Smrg ;; 4757c43cc173Smrg 4758c27c18e8Smrg -dlpreopen) 4759c27c18e8Smrg prev=dlprefiles 4760c27c18e8Smrg continue 4761c27c18e8Smrg ;; 4762c43cc173Smrg 4763c27c18e8Smrg -export-dynamic) 4764c27c18e8Smrg export_dynamic=yes 4765c27c18e8Smrg continue 4766c27c18e8Smrg ;; 4767c43cc173Smrg 4768c27c18e8Smrg -export-symbols | -export-symbols-regex) 4769c27c18e8Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 4770c27c18e8Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 4771c27c18e8Smrg fi 4772c27c18e8Smrg if test "X$arg" = "X-export-symbols"; then 4773c27c18e8Smrg prev=expsyms 4774c43cc173Smrg else 4775c27c18e8Smrg prev=expsyms_regex 4776c43cc173Smrg fi 4777c27c18e8Smrg continue 4778c27c18e8Smrg ;; 4779c43cc173Smrg 4780c27c18e8Smrg -framework) 4781c27c18e8Smrg prev=framework 4782c27c18e8Smrg continue 4783c27c18e8Smrg ;; 4784c43cc173Smrg 4785c27c18e8Smrg -inst-prefix-dir) 4786c27c18e8Smrg prev=inst_prefix 4787c27c18e8Smrg continue 4788c27c18e8Smrg ;; 4789c43cc173Smrg 4790c27c18e8Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 4791c27c18e8Smrg # so, if we see these flags be careful not to treat them like -L 4792c27c18e8Smrg -L[A-Z][A-Z]*:*) 4793c27c18e8Smrg case $with_gcc/$host in 4794c27c18e8Smrg no/*-*-irix* | /*-*-irix*) 4795c27c18e8Smrg func_append compile_command " $arg" 4796c27c18e8Smrg func_append finalize_command " $arg" 4797c27c18e8Smrg ;; 4798c27c18e8Smrg esac 4799c27c18e8Smrg continue 4800c27c18e8Smrg ;; 4801c43cc173Smrg 4802c27c18e8Smrg -L*) 4803c27c18e8Smrg func_stripname '-L' '' "$arg" 4804c27c18e8Smrg dir=$func_stripname_result 4805c27c18e8Smrg if test -z "$dir"; then 4806c27c18e8Smrg if test "$#" -gt 0; then 4807c27c18e8Smrg func_fatal_error "require no space between \`-L' and \`$1'" 4808c43cc173Smrg else 4809c27c18e8Smrg func_fatal_error "need path for \`-L' option" 4810c43cc173Smrg fi 4811c27c18e8Smrg fi 4812c27c18e8Smrg # We need an absolute path. 4813c27c18e8Smrg case $dir in 4814c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4815c27c18e8Smrg *) 4816c27c18e8Smrg absdir=`cd "$dir" && pwd` 4817c27c18e8Smrg test -z "$absdir" && \ 4818c27c18e8Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 4819c27c18e8Smrg dir="$absdir" 4820c27c18e8Smrg ;; 4821c43cc173Smrg esac 4822c27c18e8Smrg case "$deplibs " in 4823c27c18e8Smrg *" -L$dir "*) ;; 4824c27c18e8Smrg *) 4825c27c18e8Smrg deplibs="$deplibs -L$dir" 4826c27c18e8Smrg lib_search_path="$lib_search_path $dir" 4827c27c18e8Smrg ;; 4828c43cc173Smrg esac 4829c43cc173Smrg case $host in 4830c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 483137eb1ca1Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 4832c27c18e8Smrg case :$dllsearchpath: in 4833c27c18e8Smrg *":$dir:"*) ;; 4834c27c18e8Smrg ::) dllsearchpath=$dir;; 4835c27c18e8Smrg *) dllsearchpath="$dllsearchpath:$dir";; 4836c27c18e8Smrg esac 4837c27c18e8Smrg case :$dllsearchpath: in 4838c27c18e8Smrg *":$testbindir:"*) ;; 4839c27c18e8Smrg ::) dllsearchpath=$testbindir;; 4840c27c18e8Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 4841c27c18e8Smrg esac 4842c27c18e8Smrg ;; 4843c43cc173Smrg esac 4844c27c18e8Smrg continue 4845c27c18e8Smrg ;; 4846c43cc173Smrg 4847c27c18e8Smrg -l*) 4848c27c18e8Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 4849c27c18e8Smrg case $host in 485037eb1ca1Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 4851c27c18e8Smrg # These systems don't actually have a C or math library (as such) 4852c27c18e8Smrg continue 4853c27c18e8Smrg ;; 4854c27c18e8Smrg *-*-os2*) 4855c27c18e8Smrg # These systems don't actually have a C library (as such) 4856c27c18e8Smrg test "X$arg" = "X-lc" && continue 4857c27c18e8Smrg ;; 4858c27c18e8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4859c27c18e8Smrg # Do not include libc due to us having libc/libc_r. 4860c27c18e8Smrg test "X$arg" = "X-lc" && continue 4861c27c18e8Smrg ;; 4862c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 4863c27c18e8Smrg # Rhapsody C and math libraries are in the System framework 4864c27c18e8Smrg deplibs="$deplibs System.ltframework" 4865c27c18e8Smrg continue 4866c27c18e8Smrg ;; 4867c27c18e8Smrg *-*-sco3.2v5* | *-*-sco5v6*) 4868c27c18e8Smrg # Causes problems with __ctype 4869c27c18e8Smrg test "X$arg" = "X-lc" && continue 4870c27c18e8Smrg ;; 4871c27c18e8Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 4872c27c18e8Smrg # Compiler inserts libc in the correct place for threads to work 4873c27c18e8Smrg test "X$arg" = "X-lc" && continue 4874c27c18e8Smrg ;; 4875c27c18e8Smrg esac 4876c27c18e8Smrg elif test "X$arg" = "X-lc_r"; then 4877c27c18e8Smrg case $host in 4878c27c18e8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4879c27c18e8Smrg # Do not include libc_r directly, use -pthread flag. 4880c27c18e8Smrg continue 4881c27c18e8Smrg ;; 4882c27c18e8Smrg esac 4883c27c18e8Smrg fi 4884c27c18e8Smrg deplibs="$deplibs $arg" 4885c27c18e8Smrg continue 4886c27c18e8Smrg ;; 4887c43cc173Smrg 4888c27c18e8Smrg -module) 4889c27c18e8Smrg module=yes 4890c27c18e8Smrg continue 4891c27c18e8Smrg ;; 4892c43cc173Smrg 4893c27c18e8Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 4894c27c18e8Smrg # classes, name mangling, and exception handling. 4895c27c18e8Smrg # Darwin uses the -arch flag to determine output architecture. 4896c27c18e8Smrg -model|-arch|-isysroot) 4897c27c18e8Smrg compiler_flags="$compiler_flags $arg" 4898c27c18e8Smrg func_append compile_command " $arg" 4899c27c18e8Smrg func_append finalize_command " $arg" 4900c27c18e8Smrg prev=xcompiler 4901c27c18e8Smrg continue 4902c27c18e8Smrg ;; 4903c43cc173Smrg 4904c27c18e8Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 4905c27c18e8Smrg compiler_flags="$compiler_flags $arg" 4906c27c18e8Smrg func_append compile_command " $arg" 4907c27c18e8Smrg func_append finalize_command " $arg" 4908c27c18e8Smrg case "$new_inherited_linker_flags " in 4909c27c18e8Smrg *" $arg "*) ;; 4910c27c18e8Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 4911c27c18e8Smrg esac 4912c27c18e8Smrg continue 4913c27c18e8Smrg ;; 4914c43cc173Smrg 4915c27c18e8Smrg -multi_module) 4916c27c18e8Smrg single_module="${wl}-multi_module" 4917c27c18e8Smrg continue 4918c27c18e8Smrg ;; 4919c43cc173Smrg 4920c27c18e8Smrg -no-fast-install) 4921c27c18e8Smrg fast_install=no 4922c27c18e8Smrg continue 4923c27c18e8Smrg ;; 4924c43cc173Smrg 4925c27c18e8Smrg -no-install) 4926c27c18e8Smrg case $host in 4927c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 4928c27c18e8Smrg # The PATH hackery in wrapper scripts is required on Windows 4929c27c18e8Smrg # and Darwin in order for the loader to find any dlls it needs. 4930c27c18e8Smrg func_warning "\`-no-install' is ignored for $host" 4931c27c18e8Smrg func_warning "assuming \`-no-fast-install' instead" 4932c27c18e8Smrg fast_install=no 4933c27c18e8Smrg ;; 4934c27c18e8Smrg *) no_install=yes ;; 4935c27c18e8Smrg esac 4936c27c18e8Smrg continue 4937c27c18e8Smrg ;; 4938c43cc173Smrg 4939c27c18e8Smrg -no-undefined) 4940c27c18e8Smrg allow_undefined=no 4941c27c18e8Smrg continue 4942c27c18e8Smrg ;; 4943c43cc173Smrg 4944c27c18e8Smrg -objectlist) 4945c27c18e8Smrg prev=objectlist 4946c27c18e8Smrg continue 4947c27c18e8Smrg ;; 4948c43cc173Smrg 4949c27c18e8Smrg -o) prev=output ;; 4950c43cc173Smrg 4951c27c18e8Smrg -precious-files-regex) 4952c27c18e8Smrg prev=precious_regex 4953c27c18e8Smrg continue 4954c27c18e8Smrg ;; 4955c43cc173Smrg 4956c27c18e8Smrg -release) 4957c27c18e8Smrg prev=release 4958c27c18e8Smrg continue 4959c27c18e8Smrg ;; 4960c43cc173Smrg 4961c27c18e8Smrg -rpath) 4962c27c18e8Smrg prev=rpath 4963c27c18e8Smrg continue 4964c27c18e8Smrg ;; 4965c43cc173Smrg 4966c27c18e8Smrg -R) 4967c27c18e8Smrg prev=xrpath 4968c27c18e8Smrg continue 4969c27c18e8Smrg ;; 4970c43cc173Smrg 4971c27c18e8Smrg -R*) 4972c27c18e8Smrg func_stripname '-R' '' "$arg" 4973c27c18e8Smrg dir=$func_stripname_result 4974c27c18e8Smrg # We need an absolute path. 4975c27c18e8Smrg case $dir in 4976c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4977c27c18e8Smrg *) 4978c27c18e8Smrg func_fatal_error "only absolute run-paths are allowed" 4979c27c18e8Smrg ;; 4980c27c18e8Smrg esac 4981c27c18e8Smrg case "$xrpath " in 4982c27c18e8Smrg *" $dir "*) ;; 4983c27c18e8Smrg *) xrpath="$xrpath $dir" ;; 4984c27c18e8Smrg esac 4985c27c18e8Smrg continue 4986c27c18e8Smrg ;; 4987c43cc173Smrg 4988c27c18e8Smrg -shared) 4989c27c18e8Smrg # The effects of -shared are defined in a previous loop. 4990c27c18e8Smrg continue 4991c27c18e8Smrg ;; 4992c43cc173Smrg 4993c27c18e8Smrg -shrext) 4994c27c18e8Smrg prev=shrext 4995c27c18e8Smrg continue 4996c27c18e8Smrg ;; 4997c43cc173Smrg 4998c27c18e8Smrg -static | -static-libtool-libs) 4999c27c18e8Smrg # The effects of -static are defined in a previous loop. 5000c27c18e8Smrg # We used to do the same as -all-static on platforms that 5001c27c18e8Smrg # didn't have a PIC flag, but the assumption that the effects 5002c27c18e8Smrg # would be equivalent was wrong. It would break on at least 5003c27c18e8Smrg # Digital Unix and AIX. 5004c27c18e8Smrg continue 5005c27c18e8Smrg ;; 5006c43cc173Smrg 5007c27c18e8Smrg -thread-safe) 5008c27c18e8Smrg thread_safe=yes 5009c27c18e8Smrg continue 5010c27c18e8Smrg ;; 5011c43cc173Smrg 5012c27c18e8Smrg -version-info) 5013c27c18e8Smrg prev=vinfo 5014c27c18e8Smrg continue 5015c27c18e8Smrg ;; 5016c43cc173Smrg 5017c27c18e8Smrg -version-number) 5018c27c18e8Smrg prev=vinfo 5019c27c18e8Smrg vinfo_number=yes 5020c27c18e8Smrg continue 5021c27c18e8Smrg ;; 5022c43cc173Smrg 5023c27c18e8Smrg -weak) 5024c27c18e8Smrg prev=weak 5025c27c18e8Smrg continue 5026c27c18e8Smrg ;; 5027c43cc173Smrg 5028c27c18e8Smrg -Wc,*) 5029c27c18e8Smrg func_stripname '-Wc,' '' "$arg" 5030c27c18e8Smrg args=$func_stripname_result 5031c27c18e8Smrg arg= 5032c27c18e8Smrg save_ifs="$IFS"; IFS=',' 5033c27c18e8Smrg for flag in $args; do 5034c27c18e8Smrg IFS="$save_ifs" 5035c27c18e8Smrg func_quote_for_eval "$flag" 503637eb1ca1Smrg arg="$arg $func_quote_for_eval_result" 5037c27c18e8Smrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 5038c27c18e8Smrg done 5039c27c18e8Smrg IFS="$save_ifs" 5040c27c18e8Smrg func_stripname ' ' '' "$arg" 5041c27c18e8Smrg arg=$func_stripname_result 5042c27c18e8Smrg ;; 5043c43cc173Smrg 5044c27c18e8Smrg -Wl,*) 5045c27c18e8Smrg func_stripname '-Wl,' '' "$arg" 5046c27c18e8Smrg args=$func_stripname_result 5047c27c18e8Smrg arg= 5048c27c18e8Smrg save_ifs="$IFS"; IFS=',' 5049c27c18e8Smrg for flag in $args; do 5050c27c18e8Smrg IFS="$save_ifs" 5051c27c18e8Smrg func_quote_for_eval "$flag" 5052c27c18e8Smrg arg="$arg $wl$func_quote_for_eval_result" 5053c27c18e8Smrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 5054c27c18e8Smrg linker_flags="$linker_flags $func_quote_for_eval_result" 5055c27c18e8Smrg done 5056c27c18e8Smrg IFS="$save_ifs" 5057c27c18e8Smrg func_stripname ' ' '' "$arg" 5058c27c18e8Smrg arg=$func_stripname_result 5059c27c18e8Smrg ;; 5060c43cc173Smrg 5061c27c18e8Smrg -Xcompiler) 5062c27c18e8Smrg prev=xcompiler 5063c27c18e8Smrg continue 5064c27c18e8Smrg ;; 5065c43cc173Smrg 5066c27c18e8Smrg -Xlinker) 5067c27c18e8Smrg prev=xlinker 5068c27c18e8Smrg continue 5069c27c18e8Smrg ;; 5070c43cc173Smrg 5071c27c18e8Smrg -XCClinker) 5072c27c18e8Smrg prev=xcclinker 5073c27c18e8Smrg continue 5074c27c18e8Smrg ;; 5075c43cc173Smrg 5076c27c18e8Smrg # -msg_* for osf cc 5077c27c18e8Smrg -msg_*) 5078c27c18e8Smrg func_quote_for_eval "$arg" 5079c27c18e8Smrg arg="$func_quote_for_eval_result" 5080c27c18e8Smrg ;; 5081c43cc173Smrg 508237eb1ca1Smrg # Flags to be passed through unchanged, with rationale: 508337eb1ca1Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 508437eb1ca1Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 508537eb1ca1Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 508637eb1ca1Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 508737eb1ca1Smrg # -q* compiler args for the IBM compiler 508837eb1ca1Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 508937eb1ca1Smrg # -F/path path to uninstalled frameworks, gcc on darwin 509037eb1ca1Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 509137eb1ca1Smrg # @file GCC response files 509237eb1ca1Smrg # -tp=* Portland pgcc target processor selection 5093c27c18e8Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 509437eb1ca1Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) 5095c27c18e8Smrg func_quote_for_eval "$arg" 5096c27c18e8Smrg arg="$func_quote_for_eval_result" 5097c27c18e8Smrg func_append compile_command " $arg" 5098c27c18e8Smrg func_append finalize_command " $arg" 5099c27c18e8Smrg compiler_flags="$compiler_flags $arg" 5100c27c18e8Smrg continue 5101c27c18e8Smrg ;; 5102c43cc173Smrg 5103c27c18e8Smrg # Some other compiler flag. 5104c27c18e8Smrg -* | +*) 5105c27c18e8Smrg func_quote_for_eval "$arg" 5106c27c18e8Smrg arg="$func_quote_for_eval_result" 5107c27c18e8Smrg ;; 5108c43cc173Smrg 5109c27c18e8Smrg *.$objext) 5110c27c18e8Smrg # A standard object. 5111c27c18e8Smrg objs="$objs $arg" 5112c27c18e8Smrg ;; 5113c43cc173Smrg 5114c27c18e8Smrg *.lo) 5115c27c18e8Smrg # A libtool-controlled object. 5116c43cc173Smrg 5117c27c18e8Smrg # Check to see that this really is a libtool object. 5118c27c18e8Smrg if func_lalib_unsafe_p "$arg"; then 5119c27c18e8Smrg pic_object= 5120c27c18e8Smrg non_pic_object= 5121c43cc173Smrg 5122c27c18e8Smrg # Read the .lo file 5123c27c18e8Smrg func_source "$arg" 5124c43cc173Smrg 5125c27c18e8Smrg if test -z "$pic_object" || 5126c27c18e8Smrg test -z "$non_pic_object" || 5127c27c18e8Smrg test "$pic_object" = none && 5128c27c18e8Smrg test "$non_pic_object" = none; then 5129c27c18e8Smrg func_fatal_error "cannot find name of object for \`$arg'" 5130c27c18e8Smrg fi 5131c43cc173Smrg 5132c27c18e8Smrg # Extract subdirectory from the argument. 5133c27c18e8Smrg func_dirname "$arg" "/" "" 5134c27c18e8Smrg xdir="$func_dirname_result" 5135c43cc173Smrg 5136c27c18e8Smrg if test "$pic_object" != none; then 5137c27c18e8Smrg # Prepend the subdirectory the object is found in. 5138c27c18e8Smrg pic_object="$xdir$pic_object" 5139c43cc173Smrg 5140c27c18e8Smrg if test "$prev" = dlfiles; then 5141c27c18e8Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5142c27c18e8Smrg dlfiles="$dlfiles $pic_object" 5143c27c18e8Smrg prev= 5144c27c18e8Smrg continue 5145c27c18e8Smrg else 5146c27c18e8Smrg # If libtool objects are unsupported, then we need to preload. 5147c27c18e8Smrg prev=dlprefiles 5148c27c18e8Smrg fi 5149c27c18e8Smrg fi 5150c43cc173Smrg 5151c27c18e8Smrg # CHECK ME: I think I busted this. -Ossama 5152c27c18e8Smrg if test "$prev" = dlprefiles; then 5153c27c18e8Smrg # Preload the old-style object. 5154c27c18e8Smrg dlprefiles="$dlprefiles $pic_object" 5155c27c18e8Smrg prev= 5156c27c18e8Smrg fi 5157c43cc173Smrg 5158c27c18e8Smrg # A PIC object. 5159c27c18e8Smrg func_append libobjs " $pic_object" 5160c27c18e8Smrg arg="$pic_object" 5161c27c18e8Smrg fi 5162c43cc173Smrg 5163c27c18e8Smrg # Non-PIC object. 5164c27c18e8Smrg if test "$non_pic_object" != none; then 5165c27c18e8Smrg # Prepend the subdirectory the object is found in. 5166c27c18e8Smrg non_pic_object="$xdir$non_pic_object" 5167c43cc173Smrg 5168c27c18e8Smrg # A standard non-PIC object 5169c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 5170c27c18e8Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5171c27c18e8Smrg arg="$non_pic_object" 5172c27c18e8Smrg fi 5173c27c18e8Smrg else 5174c27c18e8Smrg # If the PIC object exists, use it instead. 5175c27c18e8Smrg # $xdir was prepended to $pic_object above. 5176c27c18e8Smrg non_pic_object="$pic_object" 5177c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 5178c27c18e8Smrg fi 5179c27c18e8Smrg else 5180c27c18e8Smrg # Only an error if not doing a dry-run. 5181c27c18e8Smrg if $opt_dry_run; then 5182c27c18e8Smrg # Extract subdirectory from the argument. 5183c27c18e8Smrg func_dirname "$arg" "/" "" 5184c27c18e8Smrg xdir="$func_dirname_result" 5185c27c18e8Smrg 5186c27c18e8Smrg func_lo2o "$arg" 5187c27c18e8Smrg pic_object=$xdir$objdir/$func_lo2o_result 5188c27c18e8Smrg non_pic_object=$xdir$func_lo2o_result 5189c27c18e8Smrg func_append libobjs " $pic_object" 5190c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 5191c27c18e8Smrg else 5192c27c18e8Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5193c27c18e8Smrg fi 5194c27c18e8Smrg fi 5195c27c18e8Smrg ;; 5196c43cc173Smrg 5197c27c18e8Smrg *.$libext) 5198c27c18e8Smrg # An archive. 5199c27c18e8Smrg deplibs="$deplibs $arg" 5200c27c18e8Smrg old_deplibs="$old_deplibs $arg" 5201c27c18e8Smrg continue 5202c27c18e8Smrg ;; 5203c43cc173Smrg 5204c27c18e8Smrg *.la) 5205c27c18e8Smrg # A libtool-controlled library. 5206c43cc173Smrg 5207c27c18e8Smrg if test "$prev" = dlfiles; then 5208c27c18e8Smrg # This library was specified with -dlopen. 5209c27c18e8Smrg dlfiles="$dlfiles $arg" 5210c27c18e8Smrg prev= 5211c27c18e8Smrg elif test "$prev" = dlprefiles; then 5212c27c18e8Smrg # The library was specified with -dlpreopen. 5213c27c18e8Smrg dlprefiles="$dlprefiles $arg" 5214c27c18e8Smrg prev= 5215c27c18e8Smrg else 5216c27c18e8Smrg deplibs="$deplibs $arg" 5217c27c18e8Smrg fi 5218c27c18e8Smrg continue 5219c27c18e8Smrg ;; 5220c43cc173Smrg 5221c27c18e8Smrg # Some other compiler argument. 5222c27c18e8Smrg *) 5223c27c18e8Smrg # Unknown arguments in both finalize_command and compile_command need 5224c27c18e8Smrg # to be aesthetically quoted because they are evaled later. 5225c27c18e8Smrg func_quote_for_eval "$arg" 5226c27c18e8Smrg arg="$func_quote_for_eval_result" 5227c27c18e8Smrg ;; 5228c27c18e8Smrg esac # arg 5229c43cc173Smrg 5230c27c18e8Smrg # Now actually substitute the argument into the commands. 5231c27c18e8Smrg if test -n "$arg"; then 5232c27c18e8Smrg func_append compile_command " $arg" 5233c27c18e8Smrg func_append finalize_command " $arg" 5234c27c18e8Smrg fi 5235c27c18e8Smrg done # argument parsing loop 523621e67964Smrg 5237c27c18e8Smrg test -n "$prev" && \ 5238c27c18e8Smrg func_fatal_help "the \`$prevarg' option requires an argument" 5239c43cc173Smrg 5240c27c18e8Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 5241c27c18e8Smrg eval arg=\"$export_dynamic_flag_spec\" 5242c27c18e8Smrg func_append compile_command " $arg" 5243c27c18e8Smrg func_append finalize_command " $arg" 5244c27c18e8Smrg fi 5245c43cc173Smrg 5246c27c18e8Smrg oldlibs= 5247c27c18e8Smrg # calculate the name of the file, without its directory 5248c27c18e8Smrg func_basename "$output" 5249c27c18e8Smrg outputname="$func_basename_result" 5250c27c18e8Smrg libobjs_save="$libobjs" 5251c27c18e8Smrg 5252c27c18e8Smrg if test -n "$shlibpath_var"; then 5253c27c18e8Smrg # get the directories listed in $shlibpath_var 525437eb1ca1Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 5255c43cc173Smrg else 5256c27c18e8Smrg shlib_search_path= 5257c43cc173Smrg fi 5258c27c18e8Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 5259c27c18e8Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 5260c43cc173Smrg 5261c27c18e8Smrg func_dirname "$output" "/" "" 5262c27c18e8Smrg output_objdir="$func_dirname_result$objdir" 5263c27c18e8Smrg # Create the object directory. 5264c27c18e8Smrg func_mkdir_p "$output_objdir" 5265c43cc173Smrg 5266c27c18e8Smrg # Determine the type of output 5267c27c18e8Smrg case $output in 5268c27c18e8Smrg "") 5269c27c18e8Smrg func_fatal_help "you must specify an output file" 5270c27c18e8Smrg ;; 5271c27c18e8Smrg *.$libext) linkmode=oldlib ;; 5272c27c18e8Smrg *.lo | *.$objext) linkmode=obj ;; 5273c27c18e8Smrg *.la) linkmode=lib ;; 5274c27c18e8Smrg *) linkmode=prog ;; # Anything else should be a program. 5275c27c18e8Smrg esac 5276c27c18e8Smrg 5277c27c18e8Smrg specialdeplibs= 5278c27c18e8Smrg 5279c27c18e8Smrg libs= 5280c27c18e8Smrg # Find all interdependent deplibs by searching for libraries 5281c27c18e8Smrg # that are linked more than once (e.g. -la -lb -la) 5282c27c18e8Smrg for deplib in $deplibs; do 5283c27c18e8Smrg if $opt_duplicate_deps ; then 5284c27c18e8Smrg case "$libs " in 5285c27c18e8Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5286c27c18e8Smrg esac 5287c27c18e8Smrg fi 5288c27c18e8Smrg libs="$libs $deplib" 5289c27c18e8Smrg done 5290c27c18e8Smrg 5291c27c18e8Smrg if test "$linkmode" = lib; then 5292c27c18e8Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 5293c27c18e8Smrg 5294c27c18e8Smrg # Compute libraries that are listed more than once in $predeps 5295c27c18e8Smrg # $postdeps and mark them as special (i.e., whose duplicates are 5296c27c18e8Smrg # not to be eliminated). 5297c27c18e8Smrg pre_post_deps= 5298c27c18e8Smrg if $opt_duplicate_compiler_generated_deps; then 5299c27c18e8Smrg for pre_post_dep in $predeps $postdeps; do 5300c27c18e8Smrg case "$pre_post_deps " in 5301c27c18e8Smrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 5302c27c18e8Smrg esac 5303c27c18e8Smrg pre_post_deps="$pre_post_deps $pre_post_dep" 5304c27c18e8Smrg done 5305c27c18e8Smrg fi 5306c27c18e8Smrg pre_post_deps= 5307c27c18e8Smrg fi 5308c27c18e8Smrg 5309c27c18e8Smrg deplibs= 5310c27c18e8Smrg newdependency_libs= 5311c27c18e8Smrg newlib_search_path= 5312c27c18e8Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 5313c27c18e8Smrg notinst_deplibs= # not-installed libtool libraries 5314c27c18e8Smrg notinst_path= # paths that contain not-installed libtool libraries 5315c27c18e8Smrg 5316c27c18e8Smrg case $linkmode in 5317c27c18e8Smrg lib) 5318c27c18e8Smrg passes="conv dlpreopen link" 5319c27c18e8Smrg for file in $dlfiles $dlprefiles; do 5320c27c18e8Smrg case $file in 5321c27c18e8Smrg *.la) ;; 5322c27c18e8Smrg *) 5323c27c18e8Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 5324c27c18e8Smrg ;; 5325c27c18e8Smrg esac 5326c27c18e8Smrg done 5327c27c18e8Smrg ;; 5328c27c18e8Smrg prog) 5329c27c18e8Smrg compile_deplibs= 5330c27c18e8Smrg finalize_deplibs= 5331c27c18e8Smrg alldeplibs=no 5332c27c18e8Smrg newdlfiles= 5333c27c18e8Smrg newdlprefiles= 5334c27c18e8Smrg passes="conv scan dlopen dlpreopen link" 5335c27c18e8Smrg ;; 5336c27c18e8Smrg *) passes="conv" 5337c27c18e8Smrg ;; 5338c27c18e8Smrg esac 5339c27c18e8Smrg 5340c27c18e8Smrg for pass in $passes; do 5341c27c18e8Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 5342c27c18e8Smrg # so that -L comes before libs that need it for instance... 5343c27c18e8Smrg if test "$linkmode,$pass" = "lib,link"; then 5344c27c18e8Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 5345c27c18e8Smrg ## order, and fix it there properly 5346c27c18e8Smrg tmp_deplibs= 5347c27c18e8Smrg for deplib in $deplibs; do 5348c27c18e8Smrg tmp_deplibs="$deplib $tmp_deplibs" 5349c27c18e8Smrg done 5350c27c18e8Smrg deplibs="$tmp_deplibs" 5351c27c18e8Smrg fi 5352c27c18e8Smrg 5353c27c18e8Smrg if test "$linkmode,$pass" = "lib,link" || 5354c27c18e8Smrg test "$linkmode,$pass" = "prog,scan"; then 5355c27c18e8Smrg libs="$deplibs" 5356c27c18e8Smrg deplibs= 5357c27c18e8Smrg fi 5358c27c18e8Smrg if test "$linkmode" = prog; then 5359c27c18e8Smrg case $pass in 5360c27c18e8Smrg dlopen) libs="$dlfiles" ;; 5361c27c18e8Smrg dlpreopen) libs="$dlprefiles" ;; 5362c27c18e8Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 5363c27c18e8Smrg esac 5364c27c18e8Smrg fi 5365c27c18e8Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 5366c27c18e8Smrg # Collect and forward deplibs of preopened libtool libs 5367c27c18e8Smrg for lib in $dlprefiles; do 5368c27c18e8Smrg # Ignore non-libtool-libs 5369c27c18e8Smrg dependency_libs= 5370c27c18e8Smrg case $lib in 5371c27c18e8Smrg *.la) func_source "$lib" ;; 5372c27c18e8Smrg esac 5373c27c18e8Smrg 5374c27c18e8Smrg # Collect preopened libtool deplibs, except any this library 5375c27c18e8Smrg # has declared as weak libs 5376c27c18e8Smrg for deplib in $dependency_libs; do 537737eb1ca1Smrg func_basename "$deplib" 537837eb1ca1Smrg deplib_base=$func_basename_result 5379c27c18e8Smrg case " $weak_libs " in 5380c27c18e8Smrg *" $deplib_base "*) ;; 5381c27c18e8Smrg *) deplibs="$deplibs $deplib" ;; 5382c27c18e8Smrg esac 5383c27c18e8Smrg done 5384c27c18e8Smrg done 5385c27c18e8Smrg libs="$dlprefiles" 5386c27c18e8Smrg fi 5387c27c18e8Smrg if test "$pass" = dlopen; then 5388c27c18e8Smrg # Collect dlpreopened libraries 5389c27c18e8Smrg save_deplibs="$deplibs" 5390c27c18e8Smrg deplibs= 5391c27c18e8Smrg fi 5392c27c18e8Smrg 5393c27c18e8Smrg for deplib in $libs; do 5394c27c18e8Smrg lib= 5395c27c18e8Smrg found=no 5396c27c18e8Smrg case $deplib in 5397c27c18e8Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5398c27c18e8Smrg if test "$linkmode,$pass" = "prog,link"; then 5399c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 5400c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 5401c27c18e8Smrg else 5402c27c18e8Smrg compiler_flags="$compiler_flags $deplib" 5403c27c18e8Smrg if test "$linkmode" = lib ; then 5404c27c18e8Smrg case "$new_inherited_linker_flags " in 5405c27c18e8Smrg *" $deplib "*) ;; 5406c27c18e8Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5407c27c18e8Smrg esac 5408c27c18e8Smrg fi 5409c27c18e8Smrg fi 5410c27c18e8Smrg continue 5411c27c18e8Smrg ;; 5412c27c18e8Smrg -l*) 5413c27c18e8Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 5414c27c18e8Smrg func_warning "\`-l' is ignored for archives/objects" 5415c27c18e8Smrg continue 5416c27c18e8Smrg fi 5417c27c18e8Smrg func_stripname '-l' '' "$deplib" 5418c27c18e8Smrg name=$func_stripname_result 5419c27c18e8Smrg if test "$linkmode" = lib; then 5420c27c18e8Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 5421c27c18e8Smrg else 5422c27c18e8Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 5423c27c18e8Smrg fi 5424c27c18e8Smrg for searchdir in $searchdirs; do 5425c27c18e8Smrg for search_ext in .la $std_shrext .so .a; do 5426c27c18e8Smrg # Search the libtool library 5427c27c18e8Smrg lib="$searchdir/lib${name}${search_ext}" 5428c27c18e8Smrg if test -f "$lib"; then 5429c27c18e8Smrg if test "$search_ext" = ".la"; then 5430c27c18e8Smrg found=yes 5431c27c18e8Smrg else 5432c27c18e8Smrg found=no 5433c27c18e8Smrg fi 5434c27c18e8Smrg break 2 5435c27c18e8Smrg fi 5436c27c18e8Smrg done 5437c27c18e8Smrg done 5438c27c18e8Smrg if test "$found" != yes; then 5439c27c18e8Smrg # deplib doesn't seem to be a libtool library 5440c27c18e8Smrg if test "$linkmode,$pass" = "prog,link"; then 5441c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 5442c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 5443c27c18e8Smrg else 5444c27c18e8Smrg deplibs="$deplib $deplibs" 5445c27c18e8Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5446c27c18e8Smrg fi 5447c27c18e8Smrg continue 5448c27c18e8Smrg else # deplib is a libtool library 5449c27c18e8Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 5450c27c18e8Smrg # We need to do some special things here, and not later. 5451c27c18e8Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 5452c27c18e8Smrg case " $predeps $postdeps " in 5453c27c18e8Smrg *" $deplib "*) 5454c27c18e8Smrg if func_lalib_p "$lib"; then 5455c27c18e8Smrg library_names= 5456c27c18e8Smrg old_library= 5457c27c18e8Smrg func_source "$lib" 5458c27c18e8Smrg for l in $old_library $library_names; do 5459c27c18e8Smrg ll="$l" 5460c27c18e8Smrg done 5461c27c18e8Smrg if test "X$ll" = "X$old_library" ; then # only static version available 5462c27c18e8Smrg found=no 5463c27c18e8Smrg func_dirname "$lib" "" "." 5464c27c18e8Smrg ladir="$func_dirname_result" 5465c27c18e8Smrg lib=$ladir/$old_library 5466c27c18e8Smrg if test "$linkmode,$pass" = "prog,link"; then 5467c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 5468c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 5469c27c18e8Smrg else 5470c27c18e8Smrg deplibs="$deplib $deplibs" 5471c27c18e8Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5472c27c18e8Smrg fi 5473c27c18e8Smrg continue 5474c27c18e8Smrg fi 5475c27c18e8Smrg fi 5476c27c18e8Smrg ;; 5477c27c18e8Smrg *) ;; 5478c27c18e8Smrg esac 5479c27c18e8Smrg fi 5480c27c18e8Smrg fi 5481c27c18e8Smrg ;; # -l 5482c27c18e8Smrg *.ltframework) 5483c27c18e8Smrg if test "$linkmode,$pass" = "prog,link"; then 5484c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 5485c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 5486c27c18e8Smrg else 5487c27c18e8Smrg deplibs="$deplib $deplibs" 5488c27c18e8Smrg if test "$linkmode" = lib ; then 5489c27c18e8Smrg case "$new_inherited_linker_flags " in 5490c27c18e8Smrg *" $deplib "*) ;; 5491c27c18e8Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5492c27c18e8Smrg esac 5493c27c18e8Smrg fi 5494c27c18e8Smrg fi 5495c27c18e8Smrg continue 5496c27c18e8Smrg ;; 5497c27c18e8Smrg -L*) 5498c27c18e8Smrg case $linkmode in 5499c27c18e8Smrg lib) 5500c27c18e8Smrg deplibs="$deplib $deplibs" 5501c27c18e8Smrg test "$pass" = conv && continue 5502c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 5503c27c18e8Smrg func_stripname '-L' '' "$deplib" 5504c27c18e8Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5505c27c18e8Smrg ;; 5506c27c18e8Smrg prog) 5507c27c18e8Smrg if test "$pass" = conv; then 5508c27c18e8Smrg deplibs="$deplib $deplibs" 5509c27c18e8Smrg continue 5510c27c18e8Smrg fi 5511c27c18e8Smrg if test "$pass" = scan; then 5512c27c18e8Smrg deplibs="$deplib $deplibs" 5513c27c18e8Smrg else 5514c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 5515c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 5516c27c18e8Smrg fi 5517c27c18e8Smrg func_stripname '-L' '' "$deplib" 5518c27c18e8Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5519c27c18e8Smrg ;; 5520c27c18e8Smrg *) 5521c27c18e8Smrg func_warning "\`-L' is ignored for archives/objects" 5522c27c18e8Smrg ;; 5523c27c18e8Smrg esac # linkmode 5524c27c18e8Smrg continue 5525c27c18e8Smrg ;; # -L 5526c27c18e8Smrg -R*) 5527c27c18e8Smrg if test "$pass" = link; then 5528c27c18e8Smrg func_stripname '-R' '' "$deplib" 5529c27c18e8Smrg dir=$func_stripname_result 5530c27c18e8Smrg # Make sure the xrpath contains only unique directories. 5531c27c18e8Smrg case "$xrpath " in 5532c27c18e8Smrg *" $dir "*) ;; 5533c27c18e8Smrg *) xrpath="$xrpath $dir" ;; 5534c27c18e8Smrg esac 5535c27c18e8Smrg fi 5536c27c18e8Smrg deplibs="$deplib $deplibs" 5537c27c18e8Smrg continue 5538c27c18e8Smrg ;; 5539c27c18e8Smrg *.la) lib="$deplib" ;; 5540c27c18e8Smrg *.$libext) 5541c27c18e8Smrg if test "$pass" = conv; then 5542c27c18e8Smrg deplibs="$deplib $deplibs" 5543c27c18e8Smrg continue 5544c27c18e8Smrg fi 5545c27c18e8Smrg case $linkmode in 5546c27c18e8Smrg lib) 5547c27c18e8Smrg # Linking convenience modules into shared libraries is allowed, 5548c27c18e8Smrg # but linking other static libraries is non-portable. 5549c27c18e8Smrg case " $dlpreconveniencelibs " in 5550c27c18e8Smrg *" $deplib "*) ;; 5551c27c18e8Smrg *) 5552c27c18e8Smrg valid_a_lib=no 5553c27c18e8Smrg case $deplibs_check_method in 5554c27c18e8Smrg match_pattern*) 5555c27c18e8Smrg set dummy $deplibs_check_method; shift 5556c27c18e8Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 555737eb1ca1Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 5558c27c18e8Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 5559c27c18e8Smrg valid_a_lib=yes 5560c27c18e8Smrg fi 5561c27c18e8Smrg ;; 5562c27c18e8Smrg pass_all) 5563c27c18e8Smrg valid_a_lib=yes 5564c27c18e8Smrg ;; 5565c27c18e8Smrg esac 5566c27c18e8Smrg if test "$valid_a_lib" != yes; then 556737eb1ca1Smrg echo 5568c27c18e8Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 556937eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 557037eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 557137eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 557237eb1ca1Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 557337eb1ca1Smrg echo "*** that it is just a static archive that I should not use here." 5574c27c18e8Smrg else 557537eb1ca1Smrg echo 5576c27c18e8Smrg $ECHO "*** Warning: Linking the shared library $output against the" 5577c27c18e8Smrg $ECHO "*** static library $deplib is not portable!" 5578c27c18e8Smrg deplibs="$deplib $deplibs" 5579c27c18e8Smrg fi 5580c27c18e8Smrg ;; 5581c27c18e8Smrg esac 5582c27c18e8Smrg continue 5583c27c18e8Smrg ;; 5584c27c18e8Smrg prog) 5585c27c18e8Smrg if test "$pass" != link; then 5586c27c18e8Smrg deplibs="$deplib $deplibs" 5587c27c18e8Smrg else 5588c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 5589c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 5590c27c18e8Smrg fi 5591c27c18e8Smrg continue 5592c27c18e8Smrg ;; 5593c27c18e8Smrg esac # linkmode 5594c27c18e8Smrg ;; # *.$libext 5595c27c18e8Smrg *.lo | *.$objext) 5596c27c18e8Smrg if test "$pass" = conv; then 5597c27c18e8Smrg deplibs="$deplib $deplibs" 5598c27c18e8Smrg elif test "$linkmode" = prog; then 5599c27c18e8Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 5600c27c18e8Smrg # If there is no dlopen support or we're linking statically, 5601c27c18e8Smrg # we need to preload. 5602c27c18e8Smrg newdlprefiles="$newdlprefiles $deplib" 5603c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 5604c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 5605c27c18e8Smrg else 5606c27c18e8Smrg newdlfiles="$newdlfiles $deplib" 5607c27c18e8Smrg fi 5608c27c18e8Smrg fi 5609c27c18e8Smrg continue 5610c27c18e8Smrg ;; 5611c27c18e8Smrg %DEPLIBS%) 5612c27c18e8Smrg alldeplibs=yes 5613c27c18e8Smrg continue 5614c27c18e8Smrg ;; 5615c27c18e8Smrg esac # case $deplib 5616c27c18e8Smrg 5617c27c18e8Smrg if test "$found" = yes || test -f "$lib"; then : 5618c27c18e8Smrg else 5619c27c18e8Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 5620c27c18e8Smrg fi 5621c27c18e8Smrg 5622c27c18e8Smrg # Check to see that this really is a libtool archive. 5623c27c18e8Smrg func_lalib_unsafe_p "$lib" \ 5624c27c18e8Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 5625c27c18e8Smrg 5626c27c18e8Smrg func_dirname "$lib" "" "." 5627c27c18e8Smrg ladir="$func_dirname_result" 5628c27c18e8Smrg 5629c27c18e8Smrg dlname= 5630c27c18e8Smrg dlopen= 5631c27c18e8Smrg dlpreopen= 5632c27c18e8Smrg libdir= 5633c27c18e8Smrg library_names= 5634c27c18e8Smrg old_library= 5635c27c18e8Smrg inherited_linker_flags= 5636c27c18e8Smrg # If the library was installed with an old release of libtool, 5637c27c18e8Smrg # it will not redefine variables installed, or shouldnotlink 5638c27c18e8Smrg installed=yes 5639c27c18e8Smrg shouldnotlink=no 5640c27c18e8Smrg avoidtemprpath= 5641c27c18e8Smrg 5642c27c18e8Smrg 5643c27c18e8Smrg # Read the .la file 5644c27c18e8Smrg func_source "$lib" 5645c27c18e8Smrg 5646c27c18e8Smrg # Convert "-framework foo" to "foo.ltframework" 5647c27c18e8Smrg if test -n "$inherited_linker_flags"; then 564837eb1ca1Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 5649c27c18e8Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 5650c27c18e8Smrg case " $new_inherited_linker_flags " in 5651c27c18e8Smrg *" $tmp_inherited_linker_flag "*) ;; 5652c27c18e8Smrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 5653c27c18e8Smrg esac 5654c27c18e8Smrg done 5655c27c18e8Smrg fi 565637eb1ca1Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 5657c27c18e8Smrg if test "$linkmode,$pass" = "lib,link" || 5658c27c18e8Smrg test "$linkmode,$pass" = "prog,scan" || 5659c27c18e8Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 5660c27c18e8Smrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 5661c27c18e8Smrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 5662c27c18e8Smrg fi 5663c27c18e8Smrg 5664c27c18e8Smrg if test "$pass" = conv; then 5665c27c18e8Smrg # Only check for convenience libraries 5666c27c18e8Smrg deplibs="$lib $deplibs" 5667c27c18e8Smrg if test -z "$libdir"; then 5668c27c18e8Smrg if test -z "$old_library"; then 5669c27c18e8Smrg func_fatal_error "cannot find name of link library for \`$lib'" 5670c27c18e8Smrg fi 5671c27c18e8Smrg # It is a libtool convenience library, so add in its objects. 5672c27c18e8Smrg convenience="$convenience $ladir/$objdir/$old_library" 5673c27c18e8Smrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 5674c27c18e8Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 5675c27c18e8Smrg func_fatal_error "\`$lib' is not a convenience library" 5676c27c18e8Smrg fi 5677c27c18e8Smrg tmp_libs= 5678c27c18e8Smrg for deplib in $dependency_libs; do 5679c27c18e8Smrg deplibs="$deplib $deplibs" 5680c27c18e8Smrg if $opt_duplicate_deps ; then 5681c27c18e8Smrg case "$tmp_libs " in 5682c27c18e8Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5683c27c18e8Smrg esac 5684c27c18e8Smrg fi 5685c27c18e8Smrg tmp_libs="$tmp_libs $deplib" 5686c27c18e8Smrg done 5687c27c18e8Smrg continue 5688c27c18e8Smrg fi # $pass = conv 5689c27c18e8Smrg 5690c27c18e8Smrg 5691c27c18e8Smrg # Get the name of the library we link against. 5692c27c18e8Smrg linklib= 5693c27c18e8Smrg for l in $old_library $library_names; do 5694c27c18e8Smrg linklib="$l" 5695c27c18e8Smrg done 5696c27c18e8Smrg if test -z "$linklib"; then 5697c27c18e8Smrg func_fatal_error "cannot find name of link library for \`$lib'" 5698c27c18e8Smrg fi 5699c27c18e8Smrg 5700c27c18e8Smrg # This library was specified with -dlopen. 5701c27c18e8Smrg if test "$pass" = dlopen; then 5702c27c18e8Smrg if test -z "$libdir"; then 5703c27c18e8Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 5704c27c18e8Smrg fi 5705c27c18e8Smrg if test -z "$dlname" || 5706c27c18e8Smrg test "$dlopen_support" != yes || 5707c27c18e8Smrg test "$build_libtool_libs" = no; then 5708c27c18e8Smrg # If there is no dlname, no dlopen support or we're linking 5709c27c18e8Smrg # statically, we need to preload. We also need to preload any 5710c27c18e8Smrg # dependent libraries so libltdl's deplib preloader doesn't 5711c27c18e8Smrg # bomb out in the load deplibs phase. 5712c27c18e8Smrg dlprefiles="$dlprefiles $lib $dependency_libs" 5713c27c18e8Smrg else 5714c27c18e8Smrg newdlfiles="$newdlfiles $lib" 5715c27c18e8Smrg fi 5716c27c18e8Smrg continue 5717c27c18e8Smrg fi # $pass = dlopen 5718c27c18e8Smrg 5719c27c18e8Smrg # We need an absolute path. 5720c27c18e8Smrg case $ladir in 5721c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 5722c27c18e8Smrg *) 5723c27c18e8Smrg abs_ladir=`cd "$ladir" && pwd` 5724c27c18e8Smrg if test -z "$abs_ladir"; then 5725c27c18e8Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 5726c27c18e8Smrg func_warning "passing it literally to the linker, although it might fail" 5727c27c18e8Smrg abs_ladir="$ladir" 5728c27c18e8Smrg fi 5729c27c18e8Smrg ;; 5730c27c18e8Smrg esac 5731c27c18e8Smrg func_basename "$lib" 5732c27c18e8Smrg laname="$func_basename_result" 5733c27c18e8Smrg 5734c27c18e8Smrg # Find the relevant object directory and library name. 5735c27c18e8Smrg if test "X$installed" = Xyes; then 5736c27c18e8Smrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5737c27c18e8Smrg func_warning "library \`$lib' was moved." 5738c27c18e8Smrg dir="$ladir" 5739c27c18e8Smrg absdir="$abs_ladir" 5740c27c18e8Smrg libdir="$abs_ladir" 5741c27c18e8Smrg else 5742c27c18e8Smrg dir="$libdir" 5743c27c18e8Smrg absdir="$libdir" 5744c27c18e8Smrg fi 5745c27c18e8Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 5746c27c18e8Smrg else 5747c27c18e8Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5748c27c18e8Smrg dir="$ladir" 5749c27c18e8Smrg absdir="$abs_ladir" 5750c27c18e8Smrg # Remove this search path later 5751c27c18e8Smrg notinst_path="$notinst_path $abs_ladir" 5752c27c18e8Smrg else 5753c27c18e8Smrg dir="$ladir/$objdir" 5754c27c18e8Smrg absdir="$abs_ladir/$objdir" 5755c27c18e8Smrg # Remove this search path later 5756c27c18e8Smrg notinst_path="$notinst_path $abs_ladir" 5757c27c18e8Smrg fi 5758c27c18e8Smrg fi # $installed = yes 5759c27c18e8Smrg func_stripname 'lib' '.la' "$laname" 5760c27c18e8Smrg name=$func_stripname_result 5761c27c18e8Smrg 5762c27c18e8Smrg # This library was specified with -dlpreopen. 5763c27c18e8Smrg if test "$pass" = dlpreopen; then 5764c27c18e8Smrg if test -z "$libdir" && test "$linkmode" = prog; then 5765c27c18e8Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 5766c27c18e8Smrg fi 5767c27c18e8Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 5768c27c18e8Smrg # are required to link). 5769c27c18e8Smrg if test -n "$old_library"; then 5770c27c18e8Smrg newdlprefiles="$newdlprefiles $dir/$old_library" 5771c27c18e8Smrg # Keep a list of preopened convenience libraries to check 5772c27c18e8Smrg # that they are being used correctly in the link pass. 5773c27c18e8Smrg test -z "$libdir" && \ 5774c27c18e8Smrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 5775c27c18e8Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 5776c27c18e8Smrg elif test -n "$dlname"; then 5777c27c18e8Smrg newdlprefiles="$newdlprefiles $dir/$dlname" 5778c27c18e8Smrg else 5779c27c18e8Smrg newdlprefiles="$newdlprefiles $dir/$linklib" 5780c27c18e8Smrg fi 5781c27c18e8Smrg fi # $pass = dlpreopen 5782c27c18e8Smrg 5783c27c18e8Smrg if test -z "$libdir"; then 5784c27c18e8Smrg # Link the convenience library 5785c27c18e8Smrg if test "$linkmode" = lib; then 5786c27c18e8Smrg deplibs="$dir/$old_library $deplibs" 5787c27c18e8Smrg elif test "$linkmode,$pass" = "prog,link"; then 5788c27c18e8Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 5789c27c18e8Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 5790c27c18e8Smrg else 5791c27c18e8Smrg deplibs="$lib $deplibs" # used for prog,scan pass 5792c27c18e8Smrg fi 5793c27c18e8Smrg continue 5794c27c18e8Smrg fi 5795c27c18e8Smrg 5796c27c18e8Smrg 5797c27c18e8Smrg if test "$linkmode" = prog && test "$pass" != link; then 5798c27c18e8Smrg newlib_search_path="$newlib_search_path $ladir" 5799c27c18e8Smrg deplibs="$lib $deplibs" 5800c27c18e8Smrg 5801c27c18e8Smrg linkalldeplibs=no 5802c27c18e8Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 5803c27c18e8Smrg test "$build_libtool_libs" = no; then 5804c27c18e8Smrg linkalldeplibs=yes 5805c27c18e8Smrg fi 5806c27c18e8Smrg 5807c27c18e8Smrg tmp_libs= 5808c27c18e8Smrg for deplib in $dependency_libs; do 5809c27c18e8Smrg case $deplib in 5810c27c18e8Smrg -L*) func_stripname '-L' '' "$deplib" 5811c27c18e8Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5812c27c18e8Smrg ;; 5813c27c18e8Smrg esac 5814c27c18e8Smrg # Need to link against all dependency_libs? 5815c27c18e8Smrg if test "$linkalldeplibs" = yes; then 5816c27c18e8Smrg deplibs="$deplib $deplibs" 5817c27c18e8Smrg else 5818c27c18e8Smrg # Need to hardcode shared library paths 5819c27c18e8Smrg # or/and link against static libraries 5820c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 5821c27c18e8Smrg fi 5822c27c18e8Smrg if $opt_duplicate_deps ; then 5823c27c18e8Smrg case "$tmp_libs " in 5824c27c18e8Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5825c27c18e8Smrg esac 5826c27c18e8Smrg fi 5827c27c18e8Smrg tmp_libs="$tmp_libs $deplib" 5828c27c18e8Smrg done # for deplib 5829c27c18e8Smrg continue 5830c27c18e8Smrg fi # $linkmode = prog... 5831c27c18e8Smrg 5832c27c18e8Smrg if test "$linkmode,$pass" = "prog,link"; then 5833c27c18e8Smrg if test -n "$library_names" && 5834c27c18e8Smrg { { test "$prefer_static_libs" = no || 5835c27c18e8Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 5836c27c18e8Smrg test -z "$old_library"; }; then 5837c27c18e8Smrg # We need to hardcode the library path 5838c27c18e8Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 5839c27c18e8Smrg # Make sure the rpath contains only unique directories. 5840c27c18e8Smrg case "$temp_rpath:" in 5841c27c18e8Smrg *"$absdir:"*) ;; 5842c27c18e8Smrg *) temp_rpath="$temp_rpath$absdir:" ;; 5843c27c18e8Smrg esac 5844c27c18e8Smrg fi 5845c27c18e8Smrg 5846c27c18e8Smrg # Hardcode the library path. 5847c27c18e8Smrg # Skip directories that are in the system default run-time 5848c27c18e8Smrg # search path. 5849c27c18e8Smrg case " $sys_lib_dlsearch_path " in 5850c27c18e8Smrg *" $absdir "*) ;; 5851c27c18e8Smrg *) 5852c27c18e8Smrg case "$compile_rpath " in 5853c27c18e8Smrg *" $absdir "*) ;; 5854c27c18e8Smrg *) compile_rpath="$compile_rpath $absdir" 5855c27c18e8Smrg esac 5856c27c18e8Smrg ;; 5857c27c18e8Smrg esac 5858c27c18e8Smrg case " $sys_lib_dlsearch_path " in 5859c27c18e8Smrg *" $libdir "*) ;; 5860c27c18e8Smrg *) 5861c27c18e8Smrg case "$finalize_rpath " in 5862c27c18e8Smrg *" $libdir "*) ;; 5863c27c18e8Smrg *) finalize_rpath="$finalize_rpath $libdir" 5864c27c18e8Smrg esac 5865c27c18e8Smrg ;; 5866c27c18e8Smrg esac 5867c27c18e8Smrg fi # $linkmode,$pass = prog,link... 5868c27c18e8Smrg 5869c27c18e8Smrg if test "$alldeplibs" = yes && 5870c27c18e8Smrg { test "$deplibs_check_method" = pass_all || 5871c27c18e8Smrg { test "$build_libtool_libs" = yes && 5872c27c18e8Smrg test -n "$library_names"; }; }; then 5873c27c18e8Smrg # We only need to search for static libraries 5874c27c18e8Smrg continue 5875c27c18e8Smrg fi 5876c27c18e8Smrg fi 5877c27c18e8Smrg 5878c27c18e8Smrg link_static=no # Whether the deplib will be linked statically 5879c27c18e8Smrg use_static_libs=$prefer_static_libs 5880c27c18e8Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 5881c27c18e8Smrg use_static_libs=no 5882c27c18e8Smrg fi 5883c27c18e8Smrg if test -n "$library_names" && 5884c27c18e8Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 5885c27c18e8Smrg case $host in 5886c27c18e8Smrg *cygwin* | *mingw* | *cegcc*) 5887c27c18e8Smrg # No point in relinking DLLs because paths are not encoded 5888c27c18e8Smrg notinst_deplibs="$notinst_deplibs $lib" 5889c27c18e8Smrg need_relink=no 5890c27c18e8Smrg ;; 5891c27c18e8Smrg *) 5892c27c18e8Smrg if test "$installed" = no; then 5893c27c18e8Smrg notinst_deplibs="$notinst_deplibs $lib" 5894c27c18e8Smrg need_relink=yes 5895c27c18e8Smrg fi 5896c27c18e8Smrg ;; 5897c27c18e8Smrg esac 5898c27c18e8Smrg # This is a shared library 5899c27c18e8Smrg 5900c27c18e8Smrg # Warn about portability, can't link against -module's on some 5901c27c18e8Smrg # systems (darwin). Don't bleat about dlopened modules though! 5902c27c18e8Smrg dlopenmodule="" 5903c27c18e8Smrg for dlpremoduletest in $dlprefiles; do 5904c27c18e8Smrg if test "X$dlpremoduletest" = "X$lib"; then 5905c27c18e8Smrg dlopenmodule="$dlpremoduletest" 5906c27c18e8Smrg break 5907c27c18e8Smrg fi 5908c27c18e8Smrg done 5909c27c18e8Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 591037eb1ca1Smrg echo 5911c27c18e8Smrg if test "$linkmode" = prog; then 5912c27c18e8Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 5913c27c18e8Smrg else 5914c27c18e8Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 5915c27c18e8Smrg fi 5916c27c18e8Smrg $ECHO "*** $linklib is not portable!" 5917c27c18e8Smrg fi 5918c27c18e8Smrg if test "$linkmode" = lib && 5919c27c18e8Smrg test "$hardcode_into_libs" = yes; then 5920c27c18e8Smrg # Hardcode the library path. 5921c27c18e8Smrg # Skip directories that are in the system default run-time 5922c27c18e8Smrg # search path. 5923c27c18e8Smrg case " $sys_lib_dlsearch_path " in 5924c27c18e8Smrg *" $absdir "*) ;; 5925c27c18e8Smrg *) 5926c27c18e8Smrg case "$compile_rpath " in 5927c27c18e8Smrg *" $absdir "*) ;; 5928c27c18e8Smrg *) compile_rpath="$compile_rpath $absdir" 5929c27c18e8Smrg esac 5930c27c18e8Smrg ;; 5931c27c18e8Smrg esac 5932c27c18e8Smrg case " $sys_lib_dlsearch_path " in 5933c27c18e8Smrg *" $libdir "*) ;; 5934c27c18e8Smrg *) 5935c27c18e8Smrg case "$finalize_rpath " in 5936c27c18e8Smrg *" $libdir "*) ;; 5937c27c18e8Smrg *) finalize_rpath="$finalize_rpath $libdir" 5938c27c18e8Smrg esac 5939c27c18e8Smrg ;; 5940c27c18e8Smrg esac 5941c27c18e8Smrg fi 5942c27c18e8Smrg 5943c27c18e8Smrg if test -n "$old_archive_from_expsyms_cmds"; then 5944c27c18e8Smrg # figure out the soname 5945c27c18e8Smrg set dummy $library_names 5946c27c18e8Smrg shift 5947c27c18e8Smrg realname="$1" 5948c27c18e8Smrg shift 5949c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 5950c27c18e8Smrg # use dlname if we got it. it's perfectly good, no? 5951c27c18e8Smrg if test -n "$dlname"; then 5952c27c18e8Smrg soname="$dlname" 5953c27c18e8Smrg elif test -n "$soname_spec"; then 5954c27c18e8Smrg # bleh windows 5955c27c18e8Smrg case $host in 5956c27c18e8Smrg *cygwin* | mingw* | *cegcc*) 5957c27c18e8Smrg func_arith $current - $age 5958c27c18e8Smrg major=$func_arith_result 5959c27c18e8Smrg versuffix="-$major" 5960c27c18e8Smrg ;; 5961c27c18e8Smrg esac 5962c27c18e8Smrg eval soname=\"$soname_spec\" 5963c27c18e8Smrg else 5964c27c18e8Smrg soname="$realname" 5965c27c18e8Smrg fi 5966c27c18e8Smrg 5967c27c18e8Smrg # Make a new name for the extract_expsyms_cmds to use 5968c27c18e8Smrg soroot="$soname" 5969c27c18e8Smrg func_basename "$soroot" 5970c27c18e8Smrg soname="$func_basename_result" 5971c27c18e8Smrg func_stripname 'lib' '.dll' "$soname" 5972c27c18e8Smrg newlib=libimp-$func_stripname_result.a 5973c27c18e8Smrg 5974c27c18e8Smrg # If the library has no export list, then create one now 5975c27c18e8Smrg if test -f "$output_objdir/$soname-def"; then : 5976c27c18e8Smrg else 5977c27c18e8Smrg func_verbose "extracting exported symbol list from \`$soname'" 5978c27c18e8Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 5979c27c18e8Smrg fi 5980c27c18e8Smrg 5981c27c18e8Smrg # Create $newlib 5982c27c18e8Smrg if test -f "$output_objdir/$newlib"; then :; else 5983c27c18e8Smrg func_verbose "generating import library for \`$soname'" 5984c27c18e8Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 5985c27c18e8Smrg fi 5986c27c18e8Smrg # make sure the library variables are pointing to the new library 5987c27c18e8Smrg dir=$output_objdir 5988c27c18e8Smrg linklib=$newlib 5989c27c18e8Smrg fi # test -n "$old_archive_from_expsyms_cmds" 5990c27c18e8Smrg 5991c27c18e8Smrg if test "$linkmode" = prog || test "$mode" != relink; then 5992c27c18e8Smrg add_shlibpath= 5993c27c18e8Smrg add_dir= 5994c27c18e8Smrg add= 5995c27c18e8Smrg lib_linked=yes 5996c27c18e8Smrg case $hardcode_action in 5997c27c18e8Smrg immediate | unsupported) 5998c27c18e8Smrg if test "$hardcode_direct" = no; then 5999c27c18e8Smrg add="$dir/$linklib" 6000c27c18e8Smrg case $host in 6001c27c18e8Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6002c27c18e8Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6003c27c18e8Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6004c27c18e8Smrg *-*-unixware7*) add_dir="-L$dir" ;; 6005c27c18e8Smrg *-*-darwin* ) 6006c27c18e8Smrg # if the lib is a (non-dlopened) module then we can not 6007c27c18e8Smrg # link against it, someone is ignoring the earlier warnings 6008c27c18e8Smrg if /usr/bin/file -L $add 2> /dev/null | 6009c27c18e8Smrg $GREP ": [^:]* bundle" >/dev/null ; then 6010c27c18e8Smrg if test "X$dlopenmodule" != "X$lib"; then 6011c27c18e8Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6012c27c18e8Smrg if test -z "$old_library" ; then 601337eb1ca1Smrg echo 601437eb1ca1Smrg echo "*** And there doesn't seem to be a static archive available" 601537eb1ca1Smrg echo "*** The link will probably fail, sorry" 6016c27c18e8Smrg else 6017c27c18e8Smrg add="$dir/$old_library" 6018c27c18e8Smrg fi 6019c27c18e8Smrg elif test -n "$old_library"; then 6020c27c18e8Smrg add="$dir/$old_library" 6021c27c18e8Smrg fi 6022c27c18e8Smrg fi 6023c27c18e8Smrg esac 6024c27c18e8Smrg elif test "$hardcode_minus_L" = no; then 6025c27c18e8Smrg case $host in 6026c27c18e8Smrg *-*-sunos*) add_shlibpath="$dir" ;; 6027c27c18e8Smrg esac 6028c27c18e8Smrg add_dir="-L$dir" 6029c27c18e8Smrg add="-l$name" 6030c27c18e8Smrg elif test "$hardcode_shlibpath_var" = no; then 6031c27c18e8Smrg add_shlibpath="$dir" 6032c27c18e8Smrg add="-l$name" 6033c27c18e8Smrg else 6034c27c18e8Smrg lib_linked=no 6035c27c18e8Smrg fi 6036c27c18e8Smrg ;; 6037c27c18e8Smrg relink) 6038c27c18e8Smrg if test "$hardcode_direct" = yes && 6039c27c18e8Smrg test "$hardcode_direct_absolute" = no; then 6040c27c18e8Smrg add="$dir/$linklib" 6041c27c18e8Smrg elif test "$hardcode_minus_L" = yes; then 6042c27c18e8Smrg add_dir="-L$dir" 6043c27c18e8Smrg # Try looking first in the location we're being installed to. 6044c27c18e8Smrg if test -n "$inst_prefix_dir"; then 6045c27c18e8Smrg case $libdir in 6046c27c18e8Smrg [\\/]*) 6047c27c18e8Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 6048c27c18e8Smrg ;; 6049c27c18e8Smrg esac 6050c27c18e8Smrg fi 6051c27c18e8Smrg add="-l$name" 6052c27c18e8Smrg elif test "$hardcode_shlibpath_var" = yes; then 6053c27c18e8Smrg add_shlibpath="$dir" 6054c27c18e8Smrg add="-l$name" 6055c27c18e8Smrg else 6056c27c18e8Smrg lib_linked=no 6057c27c18e8Smrg fi 6058c27c18e8Smrg ;; 6059c27c18e8Smrg *) lib_linked=no ;; 6060c27c18e8Smrg esac 6061c27c18e8Smrg 6062c27c18e8Smrg if test "$lib_linked" != yes; then 6063c27c18e8Smrg func_fatal_configuration "unsupported hardcode properties" 6064c27c18e8Smrg fi 6065c27c18e8Smrg 6066c27c18e8Smrg if test -n "$add_shlibpath"; then 6067c27c18e8Smrg case :$compile_shlibpath: in 6068c27c18e8Smrg *":$add_shlibpath:"*) ;; 6069c27c18e8Smrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 6070c27c18e8Smrg esac 6071c27c18e8Smrg fi 6072c27c18e8Smrg if test "$linkmode" = prog; then 6073c27c18e8Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6074c27c18e8Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6075c27c18e8Smrg else 6076c27c18e8Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6077c27c18e8Smrg test -n "$add" && deplibs="$add $deplibs" 6078c27c18e8Smrg if test "$hardcode_direct" != yes && 6079c27c18e8Smrg test "$hardcode_minus_L" != yes && 6080c27c18e8Smrg test "$hardcode_shlibpath_var" = yes; then 6081c27c18e8Smrg case :$finalize_shlibpath: in 6082c27c18e8Smrg *":$libdir:"*) ;; 6083c27c18e8Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 6084c27c18e8Smrg esac 6085c27c18e8Smrg fi 6086c27c18e8Smrg fi 6087c27c18e8Smrg fi 6088c27c18e8Smrg 6089c27c18e8Smrg if test "$linkmode" = prog || test "$mode" = relink; then 6090c27c18e8Smrg add_shlibpath= 6091c27c18e8Smrg add_dir= 6092c27c18e8Smrg add= 6093c27c18e8Smrg # Finalize command for both is simple: just hardcode it. 6094c27c18e8Smrg if test "$hardcode_direct" = yes && 6095c27c18e8Smrg test "$hardcode_direct_absolute" = no; then 6096c27c18e8Smrg add="$libdir/$linklib" 6097c27c18e8Smrg elif test "$hardcode_minus_L" = yes; then 6098c27c18e8Smrg add_dir="-L$libdir" 6099c27c18e8Smrg add="-l$name" 6100c27c18e8Smrg elif test "$hardcode_shlibpath_var" = yes; then 6101c27c18e8Smrg case :$finalize_shlibpath: in 6102c27c18e8Smrg *":$libdir:"*) ;; 6103c27c18e8Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 6104c27c18e8Smrg esac 6105c27c18e8Smrg add="-l$name" 6106c27c18e8Smrg elif test "$hardcode_automatic" = yes; then 6107c27c18e8Smrg if test -n "$inst_prefix_dir" && 6108c27c18e8Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6109c27c18e8Smrg add="$inst_prefix_dir$libdir/$linklib" 6110c27c18e8Smrg else 6111c27c18e8Smrg add="$libdir/$linklib" 6112c27c18e8Smrg fi 6113c27c18e8Smrg else 6114c27c18e8Smrg # We cannot seem to hardcode it, guess we'll fake it. 6115c27c18e8Smrg add_dir="-L$libdir" 6116c27c18e8Smrg # Try looking first in the location we're being installed to. 6117c27c18e8Smrg if test -n "$inst_prefix_dir"; then 6118c27c18e8Smrg case $libdir in 6119c27c18e8Smrg [\\/]*) 6120c27c18e8Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 6121c27c18e8Smrg ;; 6122c27c18e8Smrg esac 6123c27c18e8Smrg fi 6124c27c18e8Smrg add="-l$name" 6125c27c18e8Smrg fi 6126c27c18e8Smrg 6127c27c18e8Smrg if test "$linkmode" = prog; then 6128c27c18e8Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6129c27c18e8Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6130c27c18e8Smrg else 6131c27c18e8Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6132c27c18e8Smrg test -n "$add" && deplibs="$add $deplibs" 6133c27c18e8Smrg fi 6134c27c18e8Smrg fi 6135c27c18e8Smrg elif test "$linkmode" = prog; then 6136c27c18e8Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6137c27c18e8Smrg # is not unsupported. This is valid on all known static and 6138c27c18e8Smrg # shared platforms. 6139c27c18e8Smrg if test "$hardcode_direct" != unsupported; then 6140c27c18e8Smrg test -n "$old_library" && linklib="$old_library" 6141c27c18e8Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 6142c27c18e8Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6143c27c18e8Smrg else 6144c27c18e8Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6145c27c18e8Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6146c27c18e8Smrg fi 6147c27c18e8Smrg elif test "$build_libtool_libs" = yes; then 6148c27c18e8Smrg # Not a shared library 6149c27c18e8Smrg if test "$deplibs_check_method" != pass_all; then 6150c27c18e8Smrg # We're trying link a shared library against a static one 6151c27c18e8Smrg # but the system doesn't support it. 6152c27c18e8Smrg 6153c27c18e8Smrg # Just print a warning and add the library to dependency_libs so 6154c27c18e8Smrg # that the program can be linked against the static library. 615537eb1ca1Smrg echo 6156c27c18e8Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 615737eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 615837eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 615937eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have." 6160c27c18e8Smrg if test "$module" = yes; then 616137eb1ca1Smrg echo "*** But as you try to build a module library, libtool will still create " 616237eb1ca1Smrg echo "*** a static module, that should work as long as the dlopening application" 616337eb1ca1Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6164c27c18e8Smrg if test -z "$global_symbol_pipe"; then 616537eb1ca1Smrg echo 616637eb1ca1Smrg echo "*** However, this would only work if libtool was able to extract symbol" 616737eb1ca1Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 616837eb1ca1Smrg echo "*** not find such a program. So, this module is probably useless." 616937eb1ca1Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6170c27c18e8Smrg fi 6171c27c18e8Smrg if test "$build_old_libs" = no; then 6172c27c18e8Smrg build_libtool_libs=module 6173c27c18e8Smrg build_old_libs=yes 6174c27c18e8Smrg else 6175c27c18e8Smrg build_libtool_libs=no 6176c27c18e8Smrg fi 6177c27c18e8Smrg fi 6178c27c18e8Smrg else 6179c27c18e8Smrg deplibs="$dir/$old_library $deplibs" 6180c27c18e8Smrg link_static=yes 6181c27c18e8Smrg fi 6182c27c18e8Smrg fi # link shared/static library? 6183c27c18e8Smrg 6184c27c18e8Smrg if test "$linkmode" = lib; then 6185c27c18e8Smrg if test -n "$dependency_libs" && 6186c27c18e8Smrg { test "$hardcode_into_libs" != yes || 6187c27c18e8Smrg test "$build_old_libs" = yes || 6188c27c18e8Smrg test "$link_static" = yes; }; then 6189c27c18e8Smrg # Extract -R from dependency_libs 6190c27c18e8Smrg temp_deplibs= 6191c27c18e8Smrg for libdir in $dependency_libs; do 6192c27c18e8Smrg case $libdir in 6193c27c18e8Smrg -R*) func_stripname '-R' '' "$libdir" 6194c27c18e8Smrg temp_xrpath=$func_stripname_result 6195c27c18e8Smrg case " $xrpath " in 6196c27c18e8Smrg *" $temp_xrpath "*) ;; 6197c27c18e8Smrg *) xrpath="$xrpath $temp_xrpath";; 6198c27c18e8Smrg esac;; 6199c27c18e8Smrg *) temp_deplibs="$temp_deplibs $libdir";; 6200c27c18e8Smrg esac 6201c27c18e8Smrg done 6202c27c18e8Smrg dependency_libs="$temp_deplibs" 6203c27c18e8Smrg fi 6204c27c18e8Smrg 6205c27c18e8Smrg newlib_search_path="$newlib_search_path $absdir" 6206c27c18e8Smrg # Link against this library 6207c27c18e8Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 6208c27c18e8Smrg # ... and its dependency_libs 6209c27c18e8Smrg tmp_libs= 6210c27c18e8Smrg for deplib in $dependency_libs; do 6211c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 6212c27c18e8Smrg if $opt_duplicate_deps ; then 6213c27c18e8Smrg case "$tmp_libs " in 6214c27c18e8Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 6215c27c18e8Smrg esac 6216c27c18e8Smrg fi 6217c27c18e8Smrg tmp_libs="$tmp_libs $deplib" 6218c27c18e8Smrg done 6219c27c18e8Smrg 6220c27c18e8Smrg if test "$link_all_deplibs" != no; then 6221c27c18e8Smrg # Add the search paths of all dependency libraries 6222c27c18e8Smrg for deplib in $dependency_libs; do 622337eb1ca1Smrg path= 6224c27c18e8Smrg case $deplib in 6225c27c18e8Smrg -L*) path="$deplib" ;; 6226c27c18e8Smrg *.la) 6227c27c18e8Smrg func_dirname "$deplib" "" "." 6228c27c18e8Smrg dir="$func_dirname_result" 6229c27c18e8Smrg # We need an absolute path. 6230c27c18e8Smrg case $dir in 6231c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 6232c27c18e8Smrg *) 6233c27c18e8Smrg absdir=`cd "$dir" && pwd` 6234c27c18e8Smrg if test -z "$absdir"; then 6235c27c18e8Smrg func_warning "cannot determine absolute directory name of \`$dir'" 6236c27c18e8Smrg absdir="$dir" 6237c27c18e8Smrg fi 6238c27c18e8Smrg ;; 6239c27c18e8Smrg esac 6240c27c18e8Smrg if $GREP "^installed=no" $deplib > /dev/null; then 6241c27c18e8Smrg case $host in 6242c27c18e8Smrg *-*-darwin*) 6243c27c18e8Smrg depdepl= 6244c27c18e8Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 6245c27c18e8Smrg if test -n "$deplibrary_names" ; then 6246c27c18e8Smrg for tmp in $deplibrary_names ; do 6247c27c18e8Smrg depdepl=$tmp 6248c27c18e8Smrg done 6249c27c18e8Smrg if test -f "$absdir/$objdir/$depdepl" ; then 6250c27c18e8Smrg depdepl="$absdir/$objdir/$depdepl" 6251c27c18e8Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 6252c27c18e8Smrg if test -z "$darwin_install_name"; then 6253c27c18e8Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 6254c27c18e8Smrg fi 6255c27c18e8Smrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 6256c27c18e8Smrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 6257c27c18e8Smrg path= 6258c27c18e8Smrg fi 6259c27c18e8Smrg fi 6260c27c18e8Smrg ;; 6261c27c18e8Smrg *) 6262c27c18e8Smrg path="-L$absdir/$objdir" 6263c27c18e8Smrg ;; 6264c27c18e8Smrg esac 6265c27c18e8Smrg else 6266c27c18e8Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 6267c27c18e8Smrg test -z "$libdir" && \ 6268c27c18e8Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 6269c27c18e8Smrg test "$absdir" != "$libdir" && \ 6270c27c18e8Smrg func_warning "\`$deplib' seems to be moved" 6271c27c18e8Smrg 6272c27c18e8Smrg path="-L$absdir" 6273c27c18e8Smrg fi 6274c27c18e8Smrg ;; 6275c27c18e8Smrg esac 6276c27c18e8Smrg case " $deplibs " in 6277c27c18e8Smrg *" $path "*) ;; 6278c27c18e8Smrg *) deplibs="$path $deplibs" ;; 6279c27c18e8Smrg esac 6280c27c18e8Smrg done 6281c27c18e8Smrg fi # link_all_deplibs != no 6282c27c18e8Smrg fi # linkmode = lib 6283c27c18e8Smrg done # for deplib in $libs 6284c27c18e8Smrg if test "$pass" = link; then 6285c27c18e8Smrg if test "$linkmode" = "prog"; then 6286c27c18e8Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 6287c27c18e8Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 6288c27c18e8Smrg else 628937eb1ca1Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6290c27c18e8Smrg fi 6291c27c18e8Smrg fi 6292c27c18e8Smrg dependency_libs="$newdependency_libs" 6293c27c18e8Smrg if test "$pass" = dlpreopen; then 6294c27c18e8Smrg # Link the dlpreopened libraries before other libraries 6295c27c18e8Smrg for deplib in $save_deplibs; do 6296c27c18e8Smrg deplibs="$deplib $deplibs" 6297c27c18e8Smrg done 6298c27c18e8Smrg fi 6299c27c18e8Smrg if test "$pass" != dlopen; then 6300c27c18e8Smrg if test "$pass" != conv; then 6301c27c18e8Smrg # Make sure lib_search_path contains only unique directories. 6302c27c18e8Smrg lib_search_path= 6303c27c18e8Smrg for dir in $newlib_search_path; do 6304c27c18e8Smrg case "$lib_search_path " in 6305c27c18e8Smrg *" $dir "*) ;; 6306c27c18e8Smrg *) lib_search_path="$lib_search_path $dir" ;; 6307c27c18e8Smrg esac 6308c27c18e8Smrg done 6309c27c18e8Smrg newlib_search_path= 6310c27c18e8Smrg fi 6311c27c18e8Smrg 6312c27c18e8Smrg if test "$linkmode,$pass" != "prog,link"; then 6313c27c18e8Smrg vars="deplibs" 6314c27c18e8Smrg else 6315c27c18e8Smrg vars="compile_deplibs finalize_deplibs" 6316c27c18e8Smrg fi 6317c27c18e8Smrg for var in $vars dependency_libs; do 6318c27c18e8Smrg # Add libraries to $var in reverse order 6319c27c18e8Smrg eval tmp_libs=\"\$$var\" 6320c27c18e8Smrg new_libs= 6321c27c18e8Smrg for deplib in $tmp_libs; do 6322c27c18e8Smrg # FIXME: Pedantically, this is the right thing to do, so 6323c27c18e8Smrg # that some nasty dependency loop isn't accidentally 6324c27c18e8Smrg # broken: 6325c27c18e8Smrg #new_libs="$deplib $new_libs" 6326c27c18e8Smrg # Pragmatically, this seems to cause very few problems in 6327c27c18e8Smrg # practice: 6328c27c18e8Smrg case $deplib in 6329c27c18e8Smrg -L*) new_libs="$deplib $new_libs" ;; 6330c27c18e8Smrg -R*) ;; 6331c27c18e8Smrg *) 6332c27c18e8Smrg # And here is the reason: when a library appears more 6333c27c18e8Smrg # than once as an explicit dependence of a library, or 6334c27c18e8Smrg # is implicitly linked in more than once by the 6335c27c18e8Smrg # compiler, it is considered special, and multiple 6336c27c18e8Smrg # occurrences thereof are not removed. Compare this 6337c27c18e8Smrg # with having the same library being listed as a 6338c27c18e8Smrg # dependency of multiple other libraries: in this case, 6339c27c18e8Smrg # we know (pedantically, we assume) the library does not 6340c27c18e8Smrg # need to be listed more than once, so we keep only the 6341c27c18e8Smrg # last copy. This is not always right, but it is rare 6342c27c18e8Smrg # enough that we require users that really mean to play 6343c27c18e8Smrg # such unportable linking tricks to link the library 6344c27c18e8Smrg # using -Wl,-lname, so that libtool does not consider it 6345c27c18e8Smrg # for duplicate removal. 6346c27c18e8Smrg case " $specialdeplibs " in 6347c27c18e8Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 6348c27c18e8Smrg *) 6349c27c18e8Smrg case " $new_libs " in 6350c27c18e8Smrg *" $deplib "*) ;; 6351c27c18e8Smrg *) new_libs="$deplib $new_libs" ;; 6352c27c18e8Smrg esac 6353c27c18e8Smrg ;; 6354c27c18e8Smrg esac 6355c27c18e8Smrg ;; 6356c27c18e8Smrg esac 6357c27c18e8Smrg done 6358c27c18e8Smrg tmp_libs= 6359c27c18e8Smrg for deplib in $new_libs; do 6360c27c18e8Smrg case $deplib in 6361c27c18e8Smrg -L*) 6362c27c18e8Smrg case " $tmp_libs " in 6363c27c18e8Smrg *" $deplib "*) ;; 6364c27c18e8Smrg *) tmp_libs="$tmp_libs $deplib" ;; 6365c27c18e8Smrg esac 6366c27c18e8Smrg ;; 6367c27c18e8Smrg *) tmp_libs="$tmp_libs $deplib" ;; 6368c27c18e8Smrg esac 6369c27c18e8Smrg done 6370c27c18e8Smrg eval $var=\"$tmp_libs\" 6371c27c18e8Smrg done # for var 6372c27c18e8Smrg fi 6373c27c18e8Smrg # Last step: remove runtime libs from dependency_libs 6374c27c18e8Smrg # (they stay in deplibs) 6375c27c18e8Smrg tmp_libs= 6376c27c18e8Smrg for i in $dependency_libs ; do 6377c27c18e8Smrg case " $predeps $postdeps $compiler_lib_search_path " in 6378c27c18e8Smrg *" $i "*) 6379c27c18e8Smrg i="" 6380c27c18e8Smrg ;; 6381c27c18e8Smrg esac 6382c27c18e8Smrg if test -n "$i" ; then 6383c27c18e8Smrg tmp_libs="$tmp_libs $i" 6384c27c18e8Smrg fi 6385c27c18e8Smrg done 6386c27c18e8Smrg dependency_libs=$tmp_libs 6387c27c18e8Smrg done # for pass 6388c27c18e8Smrg if test "$linkmode" = prog; then 6389c27c18e8Smrg dlfiles="$newdlfiles" 6390c27c18e8Smrg fi 6391c27c18e8Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 6392c27c18e8Smrg dlprefiles="$newdlprefiles" 6393c27c18e8Smrg fi 6394c27c18e8Smrg 6395c27c18e8Smrg case $linkmode in 6396c27c18e8Smrg oldlib) 6397c27c18e8Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 6398c27c18e8Smrg func_warning "\`-dlopen' is ignored for archives" 6399c27c18e8Smrg fi 6400c27c18e8Smrg 6401c27c18e8Smrg case " $deplibs" in 6402c27c18e8Smrg *\ -l* | *\ -L*) 6403c27c18e8Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 6404c27c18e8Smrg esac 6405c27c18e8Smrg 6406c27c18e8Smrg test -n "$rpath" && \ 6407c27c18e8Smrg func_warning "\`-rpath' is ignored for archives" 6408c27c18e8Smrg 6409c27c18e8Smrg test -n "$xrpath" && \ 6410c27c18e8Smrg func_warning "\`-R' is ignored for archives" 6411c27c18e8Smrg 6412c27c18e8Smrg test -n "$vinfo" && \ 6413c27c18e8Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 6414c27c18e8Smrg 6415c27c18e8Smrg test -n "$release" && \ 6416c27c18e8Smrg func_warning "\`-release' is ignored for archives" 6417c27c18e8Smrg 6418c27c18e8Smrg test -n "$export_symbols$export_symbols_regex" && \ 6419c27c18e8Smrg func_warning "\`-export-symbols' is ignored for archives" 6420c27c18e8Smrg 6421c27c18e8Smrg # Now set the variables for building old libraries. 6422c27c18e8Smrg build_libtool_libs=no 6423c27c18e8Smrg oldlibs="$output" 6424c27c18e8Smrg objs="$objs$old_deplibs" 6425c27c18e8Smrg ;; 6426c27c18e8Smrg 6427c27c18e8Smrg lib) 6428c27c18e8Smrg # Make sure we only generate libraries of the form `libNAME.la'. 6429c27c18e8Smrg case $outputname in 6430c27c18e8Smrg lib*) 6431c27c18e8Smrg func_stripname 'lib' '.la' "$outputname" 6432c27c18e8Smrg name=$func_stripname_result 6433c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 6434c27c18e8Smrg eval libname=\"$libname_spec\" 6435c27c18e8Smrg ;; 6436c27c18e8Smrg *) 6437c27c18e8Smrg test "$module" = no && \ 6438c27c18e8Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 6439c27c18e8Smrg 6440c27c18e8Smrg if test "$need_lib_prefix" != no; then 6441c27c18e8Smrg # Add the "lib" prefix for modules if required 6442c27c18e8Smrg func_stripname '' '.la' "$outputname" 6443c27c18e8Smrg name=$func_stripname_result 6444c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 6445c27c18e8Smrg eval libname=\"$libname_spec\" 6446c27c18e8Smrg else 6447c27c18e8Smrg func_stripname '' '.la' "$outputname" 6448c27c18e8Smrg libname=$func_stripname_result 6449c27c18e8Smrg fi 6450c27c18e8Smrg ;; 6451c27c18e8Smrg esac 6452c27c18e8Smrg 6453c27c18e8Smrg if test -n "$objs"; then 6454c27c18e8Smrg if test "$deplibs_check_method" != pass_all; then 6455c27c18e8Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 6456c27c18e8Smrg else 645737eb1ca1Smrg echo 6458c27c18e8Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 6459c27c18e8Smrg $ECHO "*** objects $objs is not portable!" 6460c27c18e8Smrg libobjs="$libobjs $objs" 6461c27c18e8Smrg fi 6462c27c18e8Smrg fi 6463c27c18e8Smrg 6464c27c18e8Smrg test "$dlself" != no && \ 6465c27c18e8Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 6466c27c18e8Smrg 6467c27c18e8Smrg set dummy $rpath 6468c27c18e8Smrg shift 6469c27c18e8Smrg test "$#" -gt 1 && \ 6470c27c18e8Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 6471c27c18e8Smrg 6472c27c18e8Smrg install_libdir="$1" 6473c27c18e8Smrg 6474c27c18e8Smrg oldlibs= 6475c27c18e8Smrg if test -z "$rpath"; then 6476c27c18e8Smrg if test "$build_libtool_libs" = yes; then 6477c27c18e8Smrg # Building a libtool convenience library. 6478c27c18e8Smrg # Some compilers have problems with a `.al' extension so 6479c27c18e8Smrg # convenience libraries should have the same extension an 6480c27c18e8Smrg # archive normally would. 6481c27c18e8Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 6482c27c18e8Smrg build_libtool_libs=convenience 6483c27c18e8Smrg build_old_libs=yes 6484c27c18e8Smrg fi 6485c27c18e8Smrg 6486c27c18e8Smrg test -n "$vinfo" && \ 6487c27c18e8Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 6488c27c18e8Smrg 6489c27c18e8Smrg test -n "$release" && \ 6490c27c18e8Smrg func_warning "\`-release' is ignored for convenience libraries" 6491c27c18e8Smrg else 6492c27c18e8Smrg 6493c27c18e8Smrg # Parse the version information argument. 6494c27c18e8Smrg save_ifs="$IFS"; IFS=':' 6495c27c18e8Smrg set dummy $vinfo 0 0 0 6496c27c18e8Smrg shift 6497c27c18e8Smrg IFS="$save_ifs" 6498c27c18e8Smrg 6499c27c18e8Smrg test -n "$7" && \ 6500c27c18e8Smrg func_fatal_help "too many parameters to \`-version-info'" 6501c27c18e8Smrg 6502c27c18e8Smrg # convert absolute version numbers to libtool ages 6503c27c18e8Smrg # this retains compatibility with .la files and attempts 6504c27c18e8Smrg # to make the code below a bit more comprehensible 6505c27c18e8Smrg 6506c27c18e8Smrg case $vinfo_number in 6507c27c18e8Smrg yes) 6508c27c18e8Smrg number_major="$1" 6509c27c18e8Smrg number_minor="$2" 6510c27c18e8Smrg number_revision="$3" 6511c27c18e8Smrg # 6512c27c18e8Smrg # There are really only two kinds -- those that 6513c27c18e8Smrg # use the current revision as the major version 6514c27c18e8Smrg # and those that subtract age and use age as 6515c27c18e8Smrg # a minor version. But, then there is irix 6516c27c18e8Smrg # which has an extra 1 added just for fun 6517c27c18e8Smrg # 6518c27c18e8Smrg case $version_type in 6519c27c18e8Smrg darwin|linux|osf|windows|none) 6520c27c18e8Smrg func_arith $number_major + $number_minor 6521c27c18e8Smrg current=$func_arith_result 6522c27c18e8Smrg age="$number_minor" 6523c27c18e8Smrg revision="$number_revision" 6524c27c18e8Smrg ;; 652537eb1ca1Smrg freebsd-aout|freebsd-elf|qnx|sunos) 6526c27c18e8Smrg current="$number_major" 6527c27c18e8Smrg revision="$number_minor" 6528c27c18e8Smrg age="0" 6529c27c18e8Smrg ;; 6530c27c18e8Smrg irix|nonstopux) 6531c27c18e8Smrg func_arith $number_major + $number_minor 6532c27c18e8Smrg current=$func_arith_result 6533c27c18e8Smrg age="$number_minor" 6534c27c18e8Smrg revision="$number_minor" 6535c27c18e8Smrg lt_irix_increment=no 6536c27c18e8Smrg ;; 6537c27c18e8Smrg esac 6538c27c18e8Smrg ;; 6539c27c18e8Smrg no) 6540c27c18e8Smrg current="$1" 6541c27c18e8Smrg revision="$2" 6542c27c18e8Smrg age="$3" 6543c27c18e8Smrg ;; 6544c27c18e8Smrg esac 6545c27c18e8Smrg 6546c27c18e8Smrg # Check that each of the things are valid numbers. 6547c27c18e8Smrg case $current in 6548c27c18e8Smrg 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]) ;; 6549c27c18e8Smrg *) 6550c27c18e8Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 6551c27c18e8Smrg func_fatal_error "\`$vinfo' is not valid version information" 6552c27c18e8Smrg ;; 6553c27c18e8Smrg esac 6554c27c18e8Smrg 6555c27c18e8Smrg case $revision in 6556c27c18e8Smrg 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]) ;; 6557c27c18e8Smrg *) 6558c27c18e8Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 6559c27c18e8Smrg func_fatal_error "\`$vinfo' is not valid version information" 6560c27c18e8Smrg ;; 6561c27c18e8Smrg esac 6562c27c18e8Smrg 6563c27c18e8Smrg case $age in 6564c27c18e8Smrg 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]) ;; 6565c27c18e8Smrg *) 6566c27c18e8Smrg func_error "AGE \`$age' must be a nonnegative integer" 6567c27c18e8Smrg func_fatal_error "\`$vinfo' is not valid version information" 6568c27c18e8Smrg ;; 6569c27c18e8Smrg esac 6570c27c18e8Smrg 6571c27c18e8Smrg if test "$age" -gt "$current"; then 6572c27c18e8Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 6573c27c18e8Smrg func_fatal_error "\`$vinfo' is not valid version information" 6574c27c18e8Smrg fi 6575c27c18e8Smrg 6576c27c18e8Smrg # Calculate the version variables. 6577c27c18e8Smrg major= 6578c27c18e8Smrg versuffix= 6579c27c18e8Smrg verstring= 6580c27c18e8Smrg case $version_type in 6581c27c18e8Smrg none) ;; 6582c27c18e8Smrg 6583c27c18e8Smrg darwin) 6584c27c18e8Smrg # Like Linux, but with the current version available in 6585c27c18e8Smrg # verstring for coding it into the library header 6586c27c18e8Smrg func_arith $current - $age 6587c27c18e8Smrg major=.$func_arith_result 6588c27c18e8Smrg versuffix="$major.$age.$revision" 6589c27c18e8Smrg # Darwin ld doesn't like 0 for these options... 6590c27c18e8Smrg func_arith $current + 1 6591c27c18e8Smrg minor_current=$func_arith_result 6592c27c18e8Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 6593c27c18e8Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 6594c27c18e8Smrg ;; 6595c27c18e8Smrg 6596c27c18e8Smrg freebsd-aout) 6597c27c18e8Smrg major=".$current" 6598c27c18e8Smrg versuffix=".$current.$revision"; 6599c27c18e8Smrg ;; 6600c27c18e8Smrg 6601c27c18e8Smrg freebsd-elf) 6602c27c18e8Smrg major=".$current" 6603c27c18e8Smrg versuffix=".$current" 6604c27c18e8Smrg ;; 6605c27c18e8Smrg 6606c27c18e8Smrg irix | nonstopux) 6607c27c18e8Smrg if test "X$lt_irix_increment" = "Xno"; then 6608c27c18e8Smrg func_arith $current - $age 6609c27c18e8Smrg else 6610c27c18e8Smrg func_arith $current - $age + 1 6611c27c18e8Smrg fi 6612c27c18e8Smrg major=$func_arith_result 6613c27c18e8Smrg 6614c27c18e8Smrg case $version_type in 6615c27c18e8Smrg nonstopux) verstring_prefix=nonstopux ;; 6616c27c18e8Smrg *) verstring_prefix=sgi ;; 6617c27c18e8Smrg esac 6618c27c18e8Smrg verstring="$verstring_prefix$major.$revision" 6619c27c18e8Smrg 6620c27c18e8Smrg # Add in all the interfaces that we are compatible with. 6621c27c18e8Smrg loop=$revision 6622c27c18e8Smrg while test "$loop" -ne 0; do 6623c27c18e8Smrg func_arith $revision - $loop 6624c27c18e8Smrg iface=$func_arith_result 6625c27c18e8Smrg func_arith $loop - 1 6626c27c18e8Smrg loop=$func_arith_result 6627c27c18e8Smrg verstring="$verstring_prefix$major.$iface:$verstring" 6628c27c18e8Smrg done 6629c27c18e8Smrg 6630c27c18e8Smrg # Before this point, $major must not contain `.'. 6631c27c18e8Smrg major=.$major 6632c27c18e8Smrg versuffix="$major.$revision" 6633c27c18e8Smrg ;; 6634c27c18e8Smrg 6635c27c18e8Smrg linux) 6636c27c18e8Smrg func_arith $current - $age 6637c27c18e8Smrg major=.$func_arith_result 6638c27c18e8Smrg versuffix="$major.$age.$revision" 6639c27c18e8Smrg ;; 6640c27c18e8Smrg 6641c27c18e8Smrg osf) 6642c27c18e8Smrg func_arith $current - $age 6643c27c18e8Smrg major=.$func_arith_result 6644c27c18e8Smrg versuffix=".$current.$age.$revision" 6645c27c18e8Smrg verstring="$current.$age.$revision" 6646c27c18e8Smrg 6647c27c18e8Smrg # Add in all the interfaces that we are compatible with. 6648c27c18e8Smrg loop=$age 6649c27c18e8Smrg while test "$loop" -ne 0; do 6650c27c18e8Smrg func_arith $current - $loop 6651c27c18e8Smrg iface=$func_arith_result 6652c27c18e8Smrg func_arith $loop - 1 6653c27c18e8Smrg loop=$func_arith_result 6654c27c18e8Smrg verstring="$verstring:${iface}.0" 6655c27c18e8Smrg done 6656c27c18e8Smrg 6657c27c18e8Smrg # Make executables depend on our current version. 6658c27c18e8Smrg verstring="$verstring:${current}.0" 6659c27c18e8Smrg ;; 6660c27c18e8Smrg 6661c27c18e8Smrg qnx) 6662c27c18e8Smrg major=".$current" 6663c27c18e8Smrg versuffix=".$current" 6664c27c18e8Smrg ;; 6665c27c18e8Smrg 6666c27c18e8Smrg sunos) 6667c27c18e8Smrg major=".$current" 6668c27c18e8Smrg versuffix=".$current.$revision" 6669c27c18e8Smrg ;; 6670c27c18e8Smrg 6671c27c18e8Smrg windows) 6672c27c18e8Smrg # Use '-' rather than '.', since we only want one 6673c27c18e8Smrg # extension on DOS 8.3 filesystems. 6674c27c18e8Smrg func_arith $current - $age 6675c27c18e8Smrg major=$func_arith_result 6676c27c18e8Smrg versuffix="-$major" 6677c27c18e8Smrg ;; 6678c27c18e8Smrg 6679c27c18e8Smrg *) 6680c27c18e8Smrg func_fatal_configuration "unknown library version type \`$version_type'" 6681c27c18e8Smrg ;; 6682c27c18e8Smrg esac 6683c27c18e8Smrg 6684c27c18e8Smrg # Clear the version info if we defaulted, and they specified a release. 6685c27c18e8Smrg if test -z "$vinfo" && test -n "$release"; then 6686c27c18e8Smrg major= 6687c27c18e8Smrg case $version_type in 6688c27c18e8Smrg darwin) 6689c27c18e8Smrg # we can't check for "0.0" in archive_cmds due to quoting 6690c27c18e8Smrg # problems, so we reset it completely 6691c27c18e8Smrg verstring= 6692c27c18e8Smrg ;; 6693c27c18e8Smrg *) 6694c27c18e8Smrg verstring="0.0" 6695c27c18e8Smrg ;; 6696c27c18e8Smrg esac 6697c27c18e8Smrg if test "$need_version" = no; then 6698c27c18e8Smrg versuffix= 6699c27c18e8Smrg else 6700c27c18e8Smrg versuffix=".0.0" 6701c27c18e8Smrg fi 6702c27c18e8Smrg fi 6703c27c18e8Smrg 6704c27c18e8Smrg # Remove version info from name if versioning should be avoided 6705c27c18e8Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 6706c27c18e8Smrg major= 6707c27c18e8Smrg versuffix= 6708c27c18e8Smrg verstring="" 6709c27c18e8Smrg fi 6710c27c18e8Smrg 6711c27c18e8Smrg # Check to see if the archive will have undefined symbols. 6712c27c18e8Smrg if test "$allow_undefined" = yes; then 6713c27c18e8Smrg if test "$allow_undefined_flag" = unsupported; then 6714c27c18e8Smrg func_warning "undefined symbols not allowed in $host shared libraries" 6715c27c18e8Smrg build_libtool_libs=no 6716c27c18e8Smrg build_old_libs=yes 6717c27c18e8Smrg fi 6718c27c18e8Smrg else 6719c27c18e8Smrg # Don't allow undefined symbols. 6720c27c18e8Smrg allow_undefined_flag="$no_undefined_flag" 6721c27c18e8Smrg fi 6722c27c18e8Smrg 6723c27c18e8Smrg fi 6724c27c18e8Smrg 6725c27c18e8Smrg func_generate_dlsyms "$libname" "$libname" "yes" 6726c27c18e8Smrg libobjs="$libobjs $symfileobj" 6727c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 6728c27c18e8Smrg 6729c27c18e8Smrg if test "$mode" != relink; then 6730c27c18e8Smrg # Remove our outputs, but don't remove object files since they 6731c27c18e8Smrg # may have been created when compiling PIC objects. 6732c27c18e8Smrg removelist= 6733c27c18e8Smrg tempremovelist=`$ECHO "$output_objdir/*"` 6734c27c18e8Smrg for p in $tempremovelist; do 6735c27c18e8Smrg case $p in 6736c27c18e8Smrg *.$objext | *.gcno) 6737c27c18e8Smrg ;; 6738c27c18e8Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 6739c27c18e8Smrg if test "X$precious_files_regex" != "X"; then 6740c27c18e8Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 6741c27c18e8Smrg then 6742c27c18e8Smrg continue 6743c27c18e8Smrg fi 6744c27c18e8Smrg fi 6745c27c18e8Smrg removelist="$removelist $p" 6746c27c18e8Smrg ;; 6747c27c18e8Smrg *) ;; 6748c27c18e8Smrg esac 6749c27c18e8Smrg done 6750c27c18e8Smrg test -n "$removelist" && \ 6751c27c18e8Smrg func_show_eval "${RM}r \$removelist" 6752c27c18e8Smrg fi 6753c27c18e8Smrg 6754c27c18e8Smrg # Now set the variables for building old libraries. 6755c27c18e8Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 6756c27c18e8Smrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 6757c27c18e8Smrg 6758c27c18e8Smrg # Transform .lo files to .o files. 675937eb1ca1Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 6760c27c18e8Smrg fi 6761c27c18e8Smrg 6762c27c18e8Smrg # Eliminate all temporary directories. 6763c27c18e8Smrg #for path in $notinst_path; do 676437eb1ca1Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 676537eb1ca1Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 676637eb1ca1Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 6767c27c18e8Smrg #done 6768c27c18e8Smrg 6769c27c18e8Smrg if test -n "$xrpath"; then 6770c27c18e8Smrg # If the user specified any rpath flags, then add them. 6771c27c18e8Smrg temp_xrpath= 6772c27c18e8Smrg for libdir in $xrpath; do 6773c27c18e8Smrg temp_xrpath="$temp_xrpath -R$libdir" 6774c27c18e8Smrg case "$finalize_rpath " in 6775c27c18e8Smrg *" $libdir "*) ;; 6776c27c18e8Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 6777c27c18e8Smrg esac 6778c27c18e8Smrg done 6779c27c18e8Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 6780c27c18e8Smrg dependency_libs="$temp_xrpath $dependency_libs" 6781c27c18e8Smrg fi 6782c27c18e8Smrg fi 6783c27c18e8Smrg 6784c27c18e8Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 6785c27c18e8Smrg old_dlfiles="$dlfiles" 6786c27c18e8Smrg dlfiles= 6787c27c18e8Smrg for lib in $old_dlfiles; do 6788c27c18e8Smrg case " $dlprefiles $dlfiles " in 6789c27c18e8Smrg *" $lib "*) ;; 6790c27c18e8Smrg *) dlfiles="$dlfiles $lib" ;; 6791c27c18e8Smrg esac 6792c27c18e8Smrg done 6793c27c18e8Smrg 6794c27c18e8Smrg # Make sure dlprefiles contains only unique files 6795c27c18e8Smrg old_dlprefiles="$dlprefiles" 6796c27c18e8Smrg dlprefiles= 6797c27c18e8Smrg for lib in $old_dlprefiles; do 6798c27c18e8Smrg case "$dlprefiles " in 6799c27c18e8Smrg *" $lib "*) ;; 6800c27c18e8Smrg *) dlprefiles="$dlprefiles $lib" ;; 6801c27c18e8Smrg esac 6802c27c18e8Smrg done 6803c27c18e8Smrg 6804c27c18e8Smrg if test "$build_libtool_libs" = yes; then 6805c27c18e8Smrg if test -n "$rpath"; then 6806c27c18e8Smrg case $host in 680737eb1ca1Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 6808c27c18e8Smrg # these systems don't actually have a c library (as such)! 6809c27c18e8Smrg ;; 6810c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 6811c27c18e8Smrg # Rhapsody C library is in the System framework 6812c27c18e8Smrg deplibs="$deplibs System.ltframework" 6813c27c18e8Smrg ;; 6814c27c18e8Smrg *-*-netbsd*) 6815c27c18e8Smrg # Don't link with libc until the a.out ld.so is fixed. 6816c27c18e8Smrg ;; 6817c27c18e8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 6818c27c18e8Smrg # Do not include libc due to us having libc/libc_r. 6819c27c18e8Smrg ;; 6820c27c18e8Smrg *-*-sco3.2v5* | *-*-sco5v6*) 6821c27c18e8Smrg # Causes problems with __ctype 6822c27c18e8Smrg ;; 6823c27c18e8Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 6824c27c18e8Smrg # Compiler inserts libc in the correct place for threads to work 6825c27c18e8Smrg ;; 6826c27c18e8Smrg *) 6827c27c18e8Smrg # Add libc to deplibs on all other systems if necessary. 6828c27c18e8Smrg if test "$build_libtool_need_lc" = "yes"; then 6829c27c18e8Smrg deplibs="$deplibs -lc" 6830c27c18e8Smrg fi 6831c27c18e8Smrg ;; 6832c27c18e8Smrg esac 6833c27c18e8Smrg fi 6834c27c18e8Smrg 6835c27c18e8Smrg # Transform deplibs into only deplibs that can be linked in shared. 6836c27c18e8Smrg name_save=$name 6837c27c18e8Smrg libname_save=$libname 6838c27c18e8Smrg release_save=$release 6839c27c18e8Smrg versuffix_save=$versuffix 6840c27c18e8Smrg major_save=$major 6841c27c18e8Smrg # I'm not sure if I'm treating the release correctly. I think 6842c27c18e8Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 6843c27c18e8Smrg # add it in twice. Is that correct? 6844c27c18e8Smrg release="" 6845c27c18e8Smrg versuffix="" 6846c27c18e8Smrg major="" 6847c27c18e8Smrg newdeplibs= 6848c27c18e8Smrg droppeddeps=no 6849c27c18e8Smrg case $deplibs_check_method in 6850c27c18e8Smrg pass_all) 6851c27c18e8Smrg # Don't check for shared/static. Everything works. 6852c27c18e8Smrg # This might be a little naive. We might want to check 6853c27c18e8Smrg # whether the library exists or not. But this is on 6854c27c18e8Smrg # osf3 & osf4 and I'm not really sure... Just 6855c27c18e8Smrg # implementing what was already the behavior. 6856c27c18e8Smrg newdeplibs=$deplibs 6857c27c18e8Smrg ;; 6858c27c18e8Smrg test_compile) 6859c27c18e8Smrg # This code stresses the "libraries are programs" paradigm to its 6860c27c18e8Smrg # limits. Maybe even breaks it. We compile a program, linking it 6861c27c18e8Smrg # against the deplibs as a proxy for the library. Then we can check 6862c27c18e8Smrg # whether they linked in statically or dynamically with ldd. 6863c27c18e8Smrg $opt_dry_run || $RM conftest.c 6864c27c18e8Smrg cat > conftest.c <<EOF 6865c27c18e8Smrg int main() { return 0; } 6866c27c18e8SmrgEOF 6867c27c18e8Smrg $opt_dry_run || $RM conftest 6868c27c18e8Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 6869c27c18e8Smrg ldd_output=`ldd conftest` 6870c27c18e8Smrg for i in $deplibs; do 6871c27c18e8Smrg case $i in 6872c27c18e8Smrg -l*) 6873c27c18e8Smrg func_stripname -l '' "$i" 6874c27c18e8Smrg name=$func_stripname_result 6875c27c18e8Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6876c27c18e8Smrg case " $predeps $postdeps " in 6877c27c18e8Smrg *" $i "*) 6878c27c18e8Smrg newdeplibs="$newdeplibs $i" 6879c27c18e8Smrg i="" 6880c27c18e8Smrg ;; 6881c27c18e8Smrg esac 6882c27c18e8Smrg fi 6883c27c18e8Smrg if test -n "$i" ; then 6884c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6885c27c18e8Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6886c27c18e8Smrg set dummy $deplib_matches; shift 6887c27c18e8Smrg deplib_match=$1 6888c27c18e8Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6889c27c18e8Smrg newdeplibs="$newdeplibs $i" 6890c27c18e8Smrg else 6891c27c18e8Smrg droppeddeps=yes 689237eb1ca1Smrg echo 6893c27c18e8Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 689437eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 689537eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 689637eb1ca1Smrg echo "*** shared version of the library, which I believe you do not have" 689737eb1ca1Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 689837eb1ca1Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 6899c27c18e8Smrg fi 6900c27c18e8Smrg fi 6901c27c18e8Smrg ;; 6902c27c18e8Smrg *) 6903c27c18e8Smrg newdeplibs="$newdeplibs $i" 6904c27c18e8Smrg ;; 6905c27c18e8Smrg esac 6906c27c18e8Smrg done 6907c27c18e8Smrg else 6908c27c18e8Smrg # Error occurred in the first compile. Let's try to salvage 6909c27c18e8Smrg # the situation: Compile a separate program for each library. 6910c27c18e8Smrg for i in $deplibs; do 6911c27c18e8Smrg case $i in 6912c27c18e8Smrg -l*) 6913c27c18e8Smrg func_stripname -l '' "$i" 6914c27c18e8Smrg name=$func_stripname_result 6915c27c18e8Smrg $opt_dry_run || $RM conftest 6916c27c18e8Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 6917c27c18e8Smrg ldd_output=`ldd conftest` 6918c27c18e8Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6919c27c18e8Smrg case " $predeps $postdeps " in 6920c27c18e8Smrg *" $i "*) 6921c27c18e8Smrg newdeplibs="$newdeplibs $i" 6922c27c18e8Smrg i="" 6923c27c18e8Smrg ;; 6924c27c18e8Smrg esac 6925c27c18e8Smrg fi 6926c27c18e8Smrg if test -n "$i" ; then 6927c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6928c27c18e8Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6929c27c18e8Smrg set dummy $deplib_matches; shift 6930c27c18e8Smrg deplib_match=$1 6931c27c18e8Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6932c27c18e8Smrg newdeplibs="$newdeplibs $i" 6933c27c18e8Smrg else 6934c27c18e8Smrg droppeddeps=yes 693537eb1ca1Smrg echo 6936c27c18e8Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 693737eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 693837eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 693937eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 694037eb1ca1Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 694137eb1ca1Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 6942c27c18e8Smrg fi 6943c27c18e8Smrg fi 6944c27c18e8Smrg else 6945c27c18e8Smrg droppeddeps=yes 694637eb1ca1Smrg echo 6947c27c18e8Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 694837eb1ca1Smrg echo "*** make it link in! You will probably need to install it or some" 694937eb1ca1Smrg echo "*** library that it depends on before this library will be fully" 695037eb1ca1Smrg echo "*** functional. Installing it before continuing would be even better." 6951c27c18e8Smrg fi 6952c27c18e8Smrg ;; 6953c27c18e8Smrg *) 6954c27c18e8Smrg newdeplibs="$newdeplibs $i" 6955c27c18e8Smrg ;; 6956c27c18e8Smrg esac 6957c27c18e8Smrg done 6958c27c18e8Smrg fi 6959c27c18e8Smrg ;; 6960c27c18e8Smrg file_magic*) 6961c27c18e8Smrg set dummy $deplibs_check_method; shift 6962c27c18e8Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6963c27c18e8Smrg for a_deplib in $deplibs; do 6964c27c18e8Smrg case $a_deplib in 6965c27c18e8Smrg -l*) 6966c27c18e8Smrg func_stripname -l '' "$a_deplib" 6967c27c18e8Smrg name=$func_stripname_result 6968c27c18e8Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6969c27c18e8Smrg case " $predeps $postdeps " in 6970c27c18e8Smrg *" $a_deplib "*) 6971c27c18e8Smrg newdeplibs="$newdeplibs $a_deplib" 6972c27c18e8Smrg a_deplib="" 6973c27c18e8Smrg ;; 6974c27c18e8Smrg esac 6975c27c18e8Smrg fi 6976c27c18e8Smrg if test -n "$a_deplib" ; then 6977c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6978c27c18e8Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6979c27c18e8Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6980c27c18e8Smrg for potent_lib in $potential_libs; do 6981c27c18e8Smrg # Follow soft links. 6982c27c18e8Smrg if ls -lLd "$potent_lib" 2>/dev/null | 6983c27c18e8Smrg $GREP " -> " >/dev/null; then 6984c27c18e8Smrg continue 6985c27c18e8Smrg fi 6986c27c18e8Smrg # The statement above tries to avoid entering an 6987c27c18e8Smrg # endless loop below, in case of cyclic links. 6988c27c18e8Smrg # We might still enter an endless loop, since a link 6989c27c18e8Smrg # loop can be closed while we follow links, 6990c27c18e8Smrg # but so what? 6991c27c18e8Smrg potlib="$potent_lib" 6992c27c18e8Smrg while test -h "$potlib" 2>/dev/null; do 6993c27c18e8Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 6994c27c18e8Smrg case $potliblink in 6995c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 699637eb1ca1Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 6997c27c18e8Smrg esac 6998c27c18e8Smrg done 6999c27c18e8Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7000c27c18e8Smrg $SED -e 10q | 7001c27c18e8Smrg $EGREP "$file_magic_regex" > /dev/null; then 7002c27c18e8Smrg newdeplibs="$newdeplibs $a_deplib" 7003c27c18e8Smrg a_deplib="" 7004c27c18e8Smrg break 2 7005c27c18e8Smrg fi 7006c27c18e8Smrg done 7007c27c18e8Smrg done 7008c27c18e8Smrg fi 7009c27c18e8Smrg if test -n "$a_deplib" ; then 7010c27c18e8Smrg droppeddeps=yes 701137eb1ca1Smrg echo 7012c27c18e8Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 701337eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 701437eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 701537eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 701637eb1ca1Smrg echo "*** because I did check the linker path looking for a file starting" 7017c27c18e8Smrg if test -z "$potlib" ; then 7018c27c18e8Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7019c27c18e8Smrg else 7020c27c18e8Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7021c27c18e8Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 7022c27c18e8Smrg fi 7023c27c18e8Smrg fi 7024c27c18e8Smrg ;; 7025c27c18e8Smrg *) 7026c27c18e8Smrg # Add a -L argument. 7027c27c18e8Smrg newdeplibs="$newdeplibs $a_deplib" 7028c27c18e8Smrg ;; 7029c27c18e8Smrg esac 7030c27c18e8Smrg done # Gone through all deplibs. 7031c27c18e8Smrg ;; 7032c27c18e8Smrg match_pattern*) 7033c27c18e8Smrg set dummy $deplibs_check_method; shift 7034c27c18e8Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7035c27c18e8Smrg for a_deplib in $deplibs; do 7036c27c18e8Smrg case $a_deplib in 7037c27c18e8Smrg -l*) 7038c27c18e8Smrg func_stripname -l '' "$a_deplib" 7039c27c18e8Smrg name=$func_stripname_result 7040c27c18e8Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7041c27c18e8Smrg case " $predeps $postdeps " in 7042c27c18e8Smrg *" $a_deplib "*) 7043c27c18e8Smrg newdeplibs="$newdeplibs $a_deplib" 7044c27c18e8Smrg a_deplib="" 7045c27c18e8Smrg ;; 7046c27c18e8Smrg esac 7047c27c18e8Smrg fi 7048c27c18e8Smrg if test -n "$a_deplib" ; then 7049c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7050c27c18e8Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7051c27c18e8Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7052c27c18e8Smrg for potent_lib in $potential_libs; do 7053c27c18e8Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 705437eb1ca1Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7055c27c18e8Smrg $EGREP "$match_pattern_regex" > /dev/null; then 7056c27c18e8Smrg newdeplibs="$newdeplibs $a_deplib" 7057c27c18e8Smrg a_deplib="" 7058c27c18e8Smrg break 2 7059c27c18e8Smrg fi 7060c27c18e8Smrg done 7061c27c18e8Smrg done 7062c27c18e8Smrg fi 7063c27c18e8Smrg if test -n "$a_deplib" ; then 7064c27c18e8Smrg droppeddeps=yes 706537eb1ca1Smrg echo 7066c27c18e8Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 706737eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 706837eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 706937eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 707037eb1ca1Smrg echo "*** because I did check the linker path looking for a file starting" 7071c27c18e8Smrg if test -z "$potlib" ; then 7072c27c18e8Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7073c27c18e8Smrg else 7074c27c18e8Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7075c27c18e8Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7076c27c18e8Smrg fi 7077c27c18e8Smrg fi 7078c27c18e8Smrg ;; 7079c27c18e8Smrg *) 7080c27c18e8Smrg # Add a -L argument. 7081c27c18e8Smrg newdeplibs="$newdeplibs $a_deplib" 7082c27c18e8Smrg ;; 7083c27c18e8Smrg esac 7084c27c18e8Smrg done # Gone through all deplibs. 7085c27c18e8Smrg ;; 7086c27c18e8Smrg none | unknown | *) 7087c27c18e8Smrg newdeplibs="" 708837eb1ca1Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7089c27c18e8Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7090c27c18e8Smrg for i in $predeps $postdeps ; do 7091c27c18e8Smrg # can't use Xsed below, because $i might contain '/' 709237eb1ca1Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7093c27c18e8Smrg done 7094c27c18e8Smrg fi 709537eb1ca1Smrg case $tmp_deplibs in 709637eb1ca1Smrg *[!\ \ ]*) 709737eb1ca1Smrg echo 7098c27c18e8Smrg if test "X$deplibs_check_method" = "Xnone"; then 709937eb1ca1Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7100c27c18e8Smrg else 710137eb1ca1Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 7102c27c18e8Smrg fi 710337eb1ca1Smrg echo "*** All declared inter-library dependencies are being dropped." 7104c27c18e8Smrg droppeddeps=yes 710537eb1ca1Smrg ;; 710637eb1ca1Smrg esac 7107c27c18e8Smrg ;; 7108c27c18e8Smrg esac 7109c27c18e8Smrg versuffix=$versuffix_save 7110c27c18e8Smrg major=$major_save 7111c27c18e8Smrg release=$release_save 7112c27c18e8Smrg libname=$libname_save 7113c27c18e8Smrg name=$name_save 7114c27c18e8Smrg 7115c27c18e8Smrg case $host in 7116c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7117c27c18e8Smrg # On Rhapsody replace the C library with the System framework 711837eb1ca1Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7119c27c18e8Smrg ;; 7120c27c18e8Smrg esac 7121c27c18e8Smrg 7122c27c18e8Smrg if test "$droppeddeps" = yes; then 7123c27c18e8Smrg if test "$module" = yes; then 712437eb1ca1Smrg echo 712537eb1ca1Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7126c27c18e8Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 712737eb1ca1Smrg echo "*** a static module, that should work as long as the dlopening" 712837eb1ca1Smrg echo "*** application is linked with the -dlopen flag." 7129c27c18e8Smrg if test -z "$global_symbol_pipe"; then 713037eb1ca1Smrg echo 713137eb1ca1Smrg echo "*** However, this would only work if libtool was able to extract symbol" 713237eb1ca1Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 713337eb1ca1Smrg echo "*** not find such a program. So, this module is probably useless." 713437eb1ca1Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7135c27c18e8Smrg fi 7136c27c18e8Smrg if test "$build_old_libs" = no; then 7137c27c18e8Smrg oldlibs="$output_objdir/$libname.$libext" 7138c27c18e8Smrg build_libtool_libs=module 7139c27c18e8Smrg build_old_libs=yes 7140c27c18e8Smrg else 7141c27c18e8Smrg build_libtool_libs=no 7142c27c18e8Smrg fi 7143c27c18e8Smrg else 714437eb1ca1Smrg echo "*** The inter-library dependencies that have been dropped here will be" 714537eb1ca1Smrg echo "*** automatically added whenever a program is linked with this library" 714637eb1ca1Smrg echo "*** or is declared to -dlopen it." 7147c27c18e8Smrg 7148c27c18e8Smrg if test "$allow_undefined" = no; then 714937eb1ca1Smrg echo 715037eb1ca1Smrg echo "*** Since this library must not contain undefined symbols," 715137eb1ca1Smrg echo "*** because either the platform does not support them or" 715237eb1ca1Smrg echo "*** it was explicitly requested with -no-undefined," 715337eb1ca1Smrg echo "*** libtool will only create a static version of it." 7154c27c18e8Smrg if test "$build_old_libs" = no; then 7155c27c18e8Smrg oldlibs="$output_objdir/$libname.$libext" 7156c27c18e8Smrg build_libtool_libs=module 7157c27c18e8Smrg build_old_libs=yes 7158c27c18e8Smrg else 7159c27c18e8Smrg build_libtool_libs=no 7160c27c18e8Smrg fi 7161c27c18e8Smrg fi 7162c27c18e8Smrg fi 7163c27c18e8Smrg fi 7164c27c18e8Smrg # Done checking deplibs! 7165c27c18e8Smrg deplibs=$newdeplibs 7166c27c18e8Smrg fi 7167c27c18e8Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7168c27c18e8Smrg case $host in 7169c27c18e8Smrg *-*-darwin*) 717037eb1ca1Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 717137eb1ca1Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 717237eb1ca1Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7173c27c18e8Smrg ;; 7174c27c18e8Smrg esac 7175c27c18e8Smrg 7176c27c18e8Smrg # move library search paths that coincide with paths to not yet 7177c27c18e8Smrg # installed libraries to the beginning of the library search list 7178c27c18e8Smrg new_libs= 7179c27c18e8Smrg for path in $notinst_path; do 7180c27c18e8Smrg case " $new_libs " in 7181c27c18e8Smrg *" -L$path/$objdir "*) ;; 7182c27c18e8Smrg *) 7183c27c18e8Smrg case " $deplibs " in 7184c27c18e8Smrg *" -L$path/$objdir "*) 7185c27c18e8Smrg new_libs="$new_libs -L$path/$objdir" ;; 7186c27c18e8Smrg esac 7187c27c18e8Smrg ;; 7188c27c18e8Smrg esac 7189c27c18e8Smrg done 7190c27c18e8Smrg for deplib in $deplibs; do 7191c27c18e8Smrg case $deplib in 7192c27c18e8Smrg -L*) 7193c27c18e8Smrg case " $new_libs " in 7194c27c18e8Smrg *" $deplib "*) ;; 7195c27c18e8Smrg *) new_libs="$new_libs $deplib" ;; 7196c27c18e8Smrg esac 7197c27c18e8Smrg ;; 7198c27c18e8Smrg *) new_libs="$new_libs $deplib" ;; 7199c27c18e8Smrg esac 7200c27c18e8Smrg done 7201c27c18e8Smrg deplibs="$new_libs" 7202c27c18e8Smrg 7203c27c18e8Smrg # All the library-specific variables (install_libdir is set above). 7204c27c18e8Smrg library_names= 7205c27c18e8Smrg old_library= 7206c27c18e8Smrg dlname= 7207c27c18e8Smrg 7208c27c18e8Smrg # Test again, we may have decided not to build it any more 7209c27c18e8Smrg if test "$build_libtool_libs" = yes; then 7210c27c18e8Smrg if test "$hardcode_into_libs" = yes; then 7211c27c18e8Smrg # Hardcode the library paths 7212c27c18e8Smrg hardcode_libdirs= 7213c27c18e8Smrg dep_rpath= 7214c27c18e8Smrg rpath="$finalize_rpath" 7215c27c18e8Smrg test "$mode" != relink && rpath="$compile_rpath$rpath" 7216c27c18e8Smrg for libdir in $rpath; do 7217c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 7218c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 7219c27c18e8Smrg if test -z "$hardcode_libdirs"; then 7220c27c18e8Smrg hardcode_libdirs="$libdir" 7221c27c18e8Smrg else 7222c27c18e8Smrg # Just accumulate the unique libdirs. 7223c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7224c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7225c27c18e8Smrg ;; 7226c27c18e8Smrg *) 7227c27c18e8Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7228c27c18e8Smrg ;; 7229c27c18e8Smrg esac 7230c27c18e8Smrg fi 7231c27c18e8Smrg else 7232c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7233c27c18e8Smrg dep_rpath="$dep_rpath $flag" 7234c27c18e8Smrg fi 7235c27c18e8Smrg elif test -n "$runpath_var"; then 7236c27c18e8Smrg case "$perm_rpath " in 7237c27c18e8Smrg *" $libdir "*) ;; 7238c27c18e8Smrg *) perm_rpath="$perm_rpath $libdir" ;; 7239c27c18e8Smrg esac 7240c27c18e8Smrg fi 7241c27c18e8Smrg done 7242c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 7243c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 7244c27c18e8Smrg test -n "$hardcode_libdirs"; then 7245c27c18e8Smrg libdir="$hardcode_libdirs" 7246c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 7247c27c18e8Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 7248c27c18e8Smrg else 7249c27c18e8Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 7250c27c18e8Smrg fi 7251c27c18e8Smrg fi 7252c27c18e8Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 7253c27c18e8Smrg # We should set the runpath_var. 7254c27c18e8Smrg rpath= 7255c27c18e8Smrg for dir in $perm_rpath; do 7256c27c18e8Smrg rpath="$rpath$dir:" 7257c27c18e8Smrg done 7258c27c18e8Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 7259c27c18e8Smrg fi 7260c27c18e8Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 7261c27c18e8Smrg fi 7262c43cc173Smrg 7263c27c18e8Smrg shlibpath="$finalize_shlibpath" 7264c27c18e8Smrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 7265c27c18e8Smrg if test -n "$shlibpath"; then 7266c27c18e8Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 7267c27c18e8Smrg fi 7268c43cc173Smrg 7269c27c18e8Smrg # Get the real and link names of the library. 7270c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 7271c27c18e8Smrg eval library_names=\"$library_names_spec\" 7272c27c18e8Smrg set dummy $library_names 7273c27c18e8Smrg shift 7274c27c18e8Smrg realname="$1" 7275c27c18e8Smrg shift 7276c43cc173Smrg 7277c27c18e8Smrg if test -n "$soname_spec"; then 7278c27c18e8Smrg eval soname=\"$soname_spec\" 7279c27c18e8Smrg else 7280c27c18e8Smrg soname="$realname" 7281c27c18e8Smrg fi 7282c27c18e8Smrg if test -z "$dlname"; then 7283c27c18e8Smrg dlname=$soname 7284c27c18e8Smrg fi 7285c43cc173Smrg 7286c27c18e8Smrg lib="$output_objdir/$realname" 7287c27c18e8Smrg linknames= 7288c27c18e8Smrg for link 7289c27c18e8Smrg do 7290c27c18e8Smrg linknames="$linknames $link" 7291c27c18e8Smrg done 7292c43cc173Smrg 7293c27c18e8Smrg # Use standard objects if they are pic 729437eb1ca1Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 7295c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 7296c43cc173Smrg 7297c27c18e8Smrg delfiles= 7298c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7299c27c18e8Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 7300c27c18e8Smrg export_symbols="$output_objdir/$libname.uexp" 7301c27c18e8Smrg delfiles="$delfiles $export_symbols" 7302c27c18e8Smrg fi 7303c43cc173Smrg 7304c27c18e8Smrg orig_export_symbols= 7305c27c18e8Smrg case $host_os in 7306c27c18e8Smrg cygwin* | mingw* | cegcc*) 7307c27c18e8Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 7308c27c18e8Smrg # exporting using user supplied symfile 7309c27c18e8Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 7310c27c18e8Smrg # and it's NOT already a .def file. Must figure out 7311c27c18e8Smrg # which of the given symbols are data symbols and tag 7312c27c18e8Smrg # them as such. So, trigger use of export_symbols_cmds. 7313c27c18e8Smrg # export_symbols gets reassigned inside the "prepare 7314c27c18e8Smrg # the list of exported symbols" if statement, so the 7315c27c18e8Smrg # include_expsyms logic still works. 7316c27c18e8Smrg orig_export_symbols="$export_symbols" 7317c27c18e8Smrg export_symbols= 7318c27c18e8Smrg always_export_symbols=yes 7319c27c18e8Smrg fi 7320c27c18e8Smrg fi 7321c27c18e8Smrg ;; 7322c27c18e8Smrg esac 7323c43cc173Smrg 7324c27c18e8Smrg # Prepare the list of exported symbols 7325c27c18e8Smrg if test -z "$export_symbols"; then 7326c27c18e8Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 7327c27c18e8Smrg func_verbose "generating symbol list for \`$libname.la'" 7328c27c18e8Smrg export_symbols="$output_objdir/$libname.exp" 7329c27c18e8Smrg $opt_dry_run || $RM $export_symbols 7330c27c18e8Smrg cmds=$export_symbols_cmds 7331c27c18e8Smrg save_ifs="$IFS"; IFS='~' 7332c27c18e8Smrg for cmd in $cmds; do 7333c27c18e8Smrg IFS="$save_ifs" 7334c27c18e8Smrg eval cmd=\"$cmd\" 7335c27c18e8Smrg func_len " $cmd" 7336c27c18e8Smrg len=$func_len_result 7337c27c18e8Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7338c27c18e8Smrg func_show_eval "$cmd" 'exit $?' 7339c27c18e8Smrg skipped_export=false 7340c27c18e8Smrg else 7341c27c18e8Smrg # The command line is too long to execute in one step. 7342c27c18e8Smrg func_verbose "using reloadable object file for export list..." 7343c27c18e8Smrg skipped_export=: 7344c27c18e8Smrg # Break out early, otherwise skipped_export may be 7345c27c18e8Smrg # set to false by a later but shorter cmd. 7346c27c18e8Smrg break 7347c27c18e8Smrg fi 7348c27c18e8Smrg done 7349c27c18e8Smrg IFS="$save_ifs" 7350c27c18e8Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 7351c27c18e8Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7352c27c18e8Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7353c27c18e8Smrg fi 7354c27c18e8Smrg fi 7355c27c18e8Smrg fi 7356c43cc173Smrg 7357c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7358c27c18e8Smrg tmp_export_symbols="$export_symbols" 7359c27c18e8Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 736037eb1ca1Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 7361c27c18e8Smrg fi 7362c43cc173Smrg 7363c27c18e8Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 7364c27c18e8Smrg # The given exports_symbols file has to be filtered, so filter it. 7365c27c18e8Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7366c27c18e8Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7367c27c18e8Smrg # 's' commands which not all seds can handle. GNU sed should be fine 7368c27c18e8Smrg # though. Also, the filter scales superlinearly with the number of 7369c27c18e8Smrg # global variables. join(1) would be nice here, but unfortunately 7370c27c18e8Smrg # isn't a blessed tool. 7371c27c18e8Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7372c27c18e8Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7373c27c18e8Smrg export_symbols=$output_objdir/$libname.def 7374c27c18e8Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7375c43cc173Smrg fi 7376c43cc173Smrg 7377c27c18e8Smrg tmp_deplibs= 7378c27c18e8Smrg for test_deplib in $deplibs; do 7379c27c18e8Smrg case " $convenience " in 7380c27c18e8Smrg *" $test_deplib "*) ;; 7381c27c18e8Smrg *) 7382c27c18e8Smrg tmp_deplibs="$tmp_deplibs $test_deplib" 7383c27c18e8Smrg ;; 7384c27c18e8Smrg esac 7385c27c18e8Smrg done 7386c27c18e8Smrg deplibs="$tmp_deplibs" 7387c43cc173Smrg 7388c27c18e8Smrg if test -n "$convenience"; then 7389c27c18e8Smrg if test -n "$whole_archive_flag_spec" && 7390c27c18e8Smrg test "$compiler_needs_object" = yes && 7391c27c18e8Smrg test -z "$libobjs"; then 7392c27c18e8Smrg # extract the archives, so we have objects to list. 7393c27c18e8Smrg # TODO: could optimize this to just extract one archive. 7394c27c18e8Smrg whole_archive_flag_spec= 7395c27c18e8Smrg fi 7396c27c18e8Smrg if test -n "$whole_archive_flag_spec"; then 7397c27c18e8Smrg save_libobjs=$libobjs 7398c27c18e8Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7399c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 7400c27c18e8Smrg else 7401c27c18e8Smrg gentop="$output_objdir/${outputname}x" 7402c27c18e8Smrg generated="$generated $gentop" 7403c43cc173Smrg 7404c27c18e8Smrg func_extract_archives $gentop $convenience 7405c27c18e8Smrg libobjs="$libobjs $func_extract_archives_result" 7406c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 7407c27c18e8Smrg fi 7408c27c18e8Smrg fi 7409c43cc173Smrg 7410c27c18e8Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 7411c27c18e8Smrg eval flag=\"$thread_safe_flag_spec\" 7412c27c18e8Smrg linker_flags="$linker_flags $flag" 7413c27c18e8Smrg fi 7414c43cc173Smrg 7415c27c18e8Smrg # Make a backup of the uninstalled library when relinking 7416c27c18e8Smrg if test "$mode" = relink; then 7417c27c18e8Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 7418c43cc173Smrg fi 7419c43cc173Smrg 7420c27c18e8Smrg # Do each of the archive commands. 7421c27c18e8Smrg if test "$module" = yes && test -n "$module_cmds" ; then 7422c27c18e8Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7423c27c18e8Smrg eval test_cmds=\"$module_expsym_cmds\" 7424c27c18e8Smrg cmds=$module_expsym_cmds 7425c27c18e8Smrg else 7426c27c18e8Smrg eval test_cmds=\"$module_cmds\" 7427c27c18e8Smrg cmds=$module_cmds 7428c27c18e8Smrg fi 7429c27c18e8Smrg else 7430c27c18e8Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7431c27c18e8Smrg eval test_cmds=\"$archive_expsym_cmds\" 7432c27c18e8Smrg cmds=$archive_expsym_cmds 7433c27c18e8Smrg else 7434c27c18e8Smrg eval test_cmds=\"$archive_cmds\" 7435c27c18e8Smrg cmds=$archive_cmds 7436c27c18e8Smrg fi 7437c43cc173Smrg fi 7438c43cc173Smrg 7439c27c18e8Smrg if test "X$skipped_export" != "X:" && 7440c27c18e8Smrg func_len " $test_cmds" && 7441c27c18e8Smrg len=$func_len_result && 7442c27c18e8Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7443c27c18e8Smrg : 7444c27c18e8Smrg else 7445c27c18e8Smrg # The command line is too long to link in one step, link piecewise 7446c27c18e8Smrg # or, if using GNU ld and skipped_export is not :, use a linker 7447c27c18e8Smrg # script. 7448c43cc173Smrg 7449c27c18e8Smrg # Save the value of $output and $libobjs because we want to 7450c27c18e8Smrg # use them later. If we have whole_archive_flag_spec, we 7451c27c18e8Smrg # want to use save_libobjs as it was before 7452c27c18e8Smrg # whole_archive_flag_spec was expanded, because we can't 7453c27c18e8Smrg # assume the linker understands whole_archive_flag_spec. 7454c27c18e8Smrg # This may have to be revisited, in case too many 7455c27c18e8Smrg # convenience libraries get linked in and end up exceeding 7456c27c18e8Smrg # the spec. 7457c27c18e8Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 7458c27c18e8Smrg save_libobjs=$libobjs 7459c27c18e8Smrg fi 7460c27c18e8Smrg save_output=$output 746137eb1ca1Smrg func_basename "$output" 746237eb1ca1Smrg output_la=$func_basename_result 7463c43cc173Smrg 7464c27c18e8Smrg # Clear the reloadable object creation command queue and 7465c27c18e8Smrg # initialize k to one. 7466c27c18e8Smrg test_cmds= 7467c27c18e8Smrg concat_cmds= 7468c27c18e8Smrg objlist= 7469c27c18e8Smrg last_robj= 7470c27c18e8Smrg k=1 7471c43cc173Smrg 7472c27c18e8Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 7473c27c18e8Smrg output=${output_objdir}/${output_la}.lnkscript 7474c27c18e8Smrg func_verbose "creating GNU ld script: $output" 747537eb1ca1Smrg echo 'INPUT (' > $output 7476c27c18e8Smrg for obj in $save_libobjs 7477c27c18e8Smrg do 7478c27c18e8Smrg $ECHO "$obj" >> $output 7479c27c18e8Smrg done 748037eb1ca1Smrg echo ')' >> $output 7481c27c18e8Smrg delfiles="$delfiles $output" 7482c27c18e8Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 7483c27c18e8Smrg output=${output_objdir}/${output_la}.lnk 7484c27c18e8Smrg func_verbose "creating linker input file list: $output" 7485c27c18e8Smrg : > $output 7486c27c18e8Smrg set x $save_libobjs 7487c27c18e8Smrg shift 7488c27c18e8Smrg firstobj= 7489c27c18e8Smrg if test "$compiler_needs_object" = yes; then 7490c27c18e8Smrg firstobj="$1 " 7491c27c18e8Smrg shift 7492c27c18e8Smrg fi 7493c27c18e8Smrg for obj 7494c27c18e8Smrg do 7495c27c18e8Smrg $ECHO "$obj" >> $output 7496c27c18e8Smrg done 7497c27c18e8Smrg delfiles="$delfiles $output" 7498c27c18e8Smrg output=$firstobj\"$file_list_spec$output\" 7499c27c18e8Smrg else 7500c27c18e8Smrg if test -n "$save_libobjs"; then 7501c27c18e8Smrg func_verbose "creating reloadable object files..." 7502c27c18e8Smrg output=$output_objdir/$output_la-${k}.$objext 7503c27c18e8Smrg eval test_cmds=\"$reload_cmds\" 7504c27c18e8Smrg func_len " $test_cmds" 7505c27c18e8Smrg len0=$func_len_result 7506c27c18e8Smrg len=$len0 7507c27c18e8Smrg 7508c27c18e8Smrg # Loop over the list of objects to be linked. 7509c27c18e8Smrg for obj in $save_libobjs 7510c27c18e8Smrg do 7511c27c18e8Smrg func_len " $obj" 7512c27c18e8Smrg func_arith $len + $func_len_result 7513c27c18e8Smrg len=$func_arith_result 7514c27c18e8Smrg if test "X$objlist" = X || 7515c27c18e8Smrg test "$len" -lt "$max_cmd_len"; then 7516c27c18e8Smrg func_append objlist " $obj" 7517c27c18e8Smrg else 7518c27c18e8Smrg # The command $test_cmds is almost too long, add a 7519c27c18e8Smrg # command to the queue. 7520c27c18e8Smrg if test "$k" -eq 1 ; then 7521c27c18e8Smrg # The first file doesn't have a previous command to add. 752237eb1ca1Smrg reload_objs=$objlist 752337eb1ca1Smrg eval concat_cmds=\"$reload_cmds\" 7524c27c18e8Smrg else 7525c27c18e8Smrg # All subsequent reloadable object files will link in 7526c27c18e8Smrg # the last one created. 752737eb1ca1Smrg reload_objs="$objlist $last_robj" 752837eb1ca1Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 7529c27c18e8Smrg fi 7530c27c18e8Smrg last_robj=$output_objdir/$output_la-${k}.$objext 7531c27c18e8Smrg func_arith $k + 1 7532c27c18e8Smrg k=$func_arith_result 7533c27c18e8Smrg output=$output_objdir/$output_la-${k}.$objext 753437eb1ca1Smrg objlist=" $obj" 7535c27c18e8Smrg func_len " $last_robj" 7536c27c18e8Smrg func_arith $len0 + $func_len_result 7537c27c18e8Smrg len=$func_arith_result 7538c27c18e8Smrg fi 7539c27c18e8Smrg done 7540c27c18e8Smrg # Handle the remaining objects by creating one last 7541c27c18e8Smrg # reloadable object file. All subsequent reloadable object 7542c27c18e8Smrg # files will link in the last one created. 7543c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 754437eb1ca1Smrg reload_objs="$objlist $last_robj" 754537eb1ca1Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 7546c27c18e8Smrg if test -n "$last_robj"; then 7547c27c18e8Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 7548c27c18e8Smrg fi 7549c27c18e8Smrg delfiles="$delfiles $output" 7550c43cc173Smrg 7551c27c18e8Smrg else 7552c27c18e8Smrg output= 7553c27c18e8Smrg fi 7554c27c18e8Smrg 7555c27c18e8Smrg if ${skipped_export-false}; then 7556c27c18e8Smrg func_verbose "generating symbol list for \`$libname.la'" 7557c27c18e8Smrg export_symbols="$output_objdir/$libname.exp" 7558c27c18e8Smrg $opt_dry_run || $RM $export_symbols 7559c27c18e8Smrg libobjs=$output 7560c27c18e8Smrg # Append the command to create the export file. 7561c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7562c27c18e8Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 7563c27c18e8Smrg if test -n "$last_robj"; then 7564c27c18e8Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 7565c27c18e8Smrg fi 7566c27c18e8Smrg fi 7567c43cc173Smrg 7568c27c18e8Smrg test -n "$save_libobjs" && 7569c27c18e8Smrg func_verbose "creating a temporary reloadable object file: $output" 7570c43cc173Smrg 7571c27c18e8Smrg # Loop through the commands generated above and execute them. 7572c27c18e8Smrg save_ifs="$IFS"; IFS='~' 7573c27c18e8Smrg for cmd in $concat_cmds; do 7574c27c18e8Smrg IFS="$save_ifs" 7575c27c18e8Smrg $opt_silent || { 7576c27c18e8Smrg func_quote_for_expand "$cmd" 7577c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 7578c27c18e8Smrg } 7579c27c18e8Smrg $opt_dry_run || eval "$cmd" || { 7580c27c18e8Smrg lt_exit=$? 7581c27c18e8Smrg 7582c27c18e8Smrg # Restore the uninstalled library and exit 7583c27c18e8Smrg if test "$mode" = relink; then 7584c27c18e8Smrg ( cd "$output_objdir" && \ 7585c27c18e8Smrg $RM "${realname}T" && \ 7586c27c18e8Smrg $MV "${realname}U" "$realname" ) 7587c27c18e8Smrg fi 7588c43cc173Smrg 7589c27c18e8Smrg exit $lt_exit 7590c27c18e8Smrg } 7591c27c18e8Smrg done 7592c27c18e8Smrg IFS="$save_ifs" 7593c43cc173Smrg 7594c27c18e8Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 7595c27c18e8Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7596c27c18e8Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7597c43cc173Smrg fi 7598c43cc173Smrg fi 7599c43cc173Smrg 7600c27c18e8Smrg if ${skipped_export-false}; then 7601c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7602c27c18e8Smrg tmp_export_symbols="$export_symbols" 7603c27c18e8Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 760437eb1ca1Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 7605c27c18e8Smrg fi 7606c43cc173Smrg 7607c27c18e8Smrg if test -n "$orig_export_symbols"; then 7608c27c18e8Smrg # The given exports_symbols file has to be filtered, so filter it. 7609c27c18e8Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7610c27c18e8Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7611c27c18e8Smrg # 's' commands which not all seds can handle. GNU sed should be fine 7612c27c18e8Smrg # though. Also, the filter scales superlinearly with the number of 7613c27c18e8Smrg # global variables. join(1) would be nice here, but unfortunately 7614c27c18e8Smrg # isn't a blessed tool. 7615c27c18e8Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7616c27c18e8Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7617c27c18e8Smrg export_symbols=$output_objdir/$libname.def 7618c27c18e8Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7619c27c18e8Smrg fi 7620c27c18e8Smrg fi 7621c43cc173Smrg 7622c27c18e8Smrg libobjs=$output 7623c27c18e8Smrg # Restore the value of output. 7624c27c18e8Smrg output=$save_output 7625c43cc173Smrg 7626c27c18e8Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 7627c27c18e8Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7628c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 7629c27c18e8Smrg fi 7630c27c18e8Smrg # Expand the library linking commands again to reset the 7631c27c18e8Smrg # value of $libobjs for piecewise linking. 7632c27c18e8Smrg 7633c27c18e8Smrg # Do each of the archive commands. 7634c27c18e8Smrg if test "$module" = yes && test -n "$module_cmds" ; then 7635c27c18e8Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7636c27c18e8Smrg cmds=$module_expsym_cmds 7637c43cc173Smrg else 7638c27c18e8Smrg cmds=$module_cmds 7639c43cc173Smrg fi 7640c43cc173Smrg else 7641c27c18e8Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7642c27c18e8Smrg cmds=$archive_expsym_cmds 7643c27c18e8Smrg else 7644c27c18e8Smrg cmds=$archive_cmds 7645c27c18e8Smrg fi 7646c43cc173Smrg fi 7647c43cc173Smrg fi 7648c43cc173Smrg 7649c27c18e8Smrg if test -n "$delfiles"; then 7650c27c18e8Smrg # Append the command to remove temporary files to $cmds. 7651c27c18e8Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 7652c27c18e8Smrg fi 7653c43cc173Smrg 7654c27c18e8Smrg # Add any objects from preloaded convenience libraries 7655c27c18e8Smrg if test -n "$dlprefiles"; then 7656c27c18e8Smrg gentop="$output_objdir/${outputname}x" 7657c27c18e8Smrg generated="$generated $gentop" 7658c43cc173Smrg 7659c27c18e8Smrg func_extract_archives $gentop $dlprefiles 7660c27c18e8Smrg libobjs="$libobjs $func_extract_archives_result" 7661c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 7662c43cc173Smrg fi 7663c43cc173Smrg 7664c27c18e8Smrg save_ifs="$IFS"; IFS='~' 7665c27c18e8Smrg for cmd in $cmds; do 7666c27c18e8Smrg IFS="$save_ifs" 7667c27c18e8Smrg eval cmd=\"$cmd\" 7668c27c18e8Smrg $opt_silent || { 7669c27c18e8Smrg func_quote_for_expand "$cmd" 7670c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 7671c27c18e8Smrg } 7672c27c18e8Smrg $opt_dry_run || eval "$cmd" || { 7673c27c18e8Smrg lt_exit=$? 7674c43cc173Smrg 7675c27c18e8Smrg # Restore the uninstalled library and exit 7676c27c18e8Smrg if test "$mode" = relink; then 7677c27c18e8Smrg ( cd "$output_objdir" && \ 7678c27c18e8Smrg $RM "${realname}T" && \ 7679c27c18e8Smrg $MV "${realname}U" "$realname" ) 7680c43cc173Smrg fi 7681c43cc173Smrg 7682c27c18e8Smrg exit $lt_exit 7683c27c18e8Smrg } 7684c27c18e8Smrg done 7685c27c18e8Smrg IFS="$save_ifs" 7686c43cc173Smrg 7687c27c18e8Smrg # Restore the uninstalled library and exit 7688c27c18e8Smrg if test "$mode" = relink; then 7689c27c18e8Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 7690c43cc173Smrg 7691c27c18e8Smrg if test -n "$convenience"; then 7692c27c18e8Smrg if test -z "$whole_archive_flag_spec"; then 7693c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 7694c27c18e8Smrg fi 7695c27c18e8Smrg fi 7696c43cc173Smrg 7697c27c18e8Smrg exit $EXIT_SUCCESS 7698c27c18e8Smrg fi 7699c43cc173Smrg 7700c27c18e8Smrg # Create links to the real library. 7701c27c18e8Smrg for linkname in $linknames; do 7702c27c18e8Smrg if test "$realname" != "$linkname"; then 7703c27c18e8Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 7704c43cc173Smrg fi 7705c43cc173Smrg done 7706c43cc173Smrg 7707c27c18e8Smrg # If -module or -export-dynamic was specified, set the dlname. 7708c27c18e8Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 7709c27c18e8Smrg # On all known operating systems, these are identical. 7710c27c18e8Smrg dlname="$soname" 7711c27c18e8Smrg fi 7712c27c18e8Smrg fi 7713c43cc173Smrg ;; 7714c43cc173Smrg 7715c27c18e8Smrg obj) 7716c27c18e8Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7717c27c18e8Smrg func_warning "\`-dlopen' is ignored for objects" 7718c27c18e8Smrg fi 7719c43cc173Smrg 7720c27c18e8Smrg case " $deplibs" in 7721c27c18e8Smrg *\ -l* | *\ -L*) 7722c27c18e8Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 7723c43cc173Smrg esac 7724c43cc173Smrg 7725c27c18e8Smrg test -n "$rpath" && \ 7726c27c18e8Smrg func_warning "\`-rpath' is ignored for objects" 7727c43cc173Smrg 7728c27c18e8Smrg test -n "$xrpath" && \ 7729c27c18e8Smrg func_warning "\`-R' is ignored for objects" 7730c43cc173Smrg 7731c27c18e8Smrg test -n "$vinfo" && \ 7732c27c18e8Smrg func_warning "\`-version-info' is ignored for objects" 7733c27c18e8Smrg 7734c27c18e8Smrg test -n "$release" && \ 7735c27c18e8Smrg func_warning "\`-release' is ignored for objects" 7736c27c18e8Smrg 7737c27c18e8Smrg case $output in 7738c27c18e8Smrg *.lo) 7739c27c18e8Smrg test -n "$objs$old_deplibs" && \ 7740c27c18e8Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 7741c27c18e8Smrg 7742c27c18e8Smrg libobj=$output 7743c27c18e8Smrg func_lo2o "$libobj" 7744c27c18e8Smrg obj=$func_lo2o_result 7745c43cc173Smrg ;; 7746c43cc173Smrg *) 7747c27c18e8Smrg libobj= 7748c27c18e8Smrg obj="$output" 7749c43cc173Smrg ;; 7750c43cc173Smrg esac 7751c43cc173Smrg 7752c27c18e8Smrg # Delete the old objects. 7753c27c18e8Smrg $opt_dry_run || $RM $obj $libobj 7754c43cc173Smrg 7755c27c18e8Smrg # Objects from convenience libraries. This assumes 7756c27c18e8Smrg # single-version convenience libraries. Whenever we create 7757c27c18e8Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 7758c27c18e8Smrg # the extraction. 7759c27c18e8Smrg reload_conv_objs= 7760c27c18e8Smrg gentop= 7761c27c18e8Smrg # reload_cmds runs $LD directly, so let us get rid of 7762c27c18e8Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 7763c27c18e8Smrg # turning comma into space.. 7764c27c18e8Smrg wl= 7765c43cc173Smrg 7766c27c18e8Smrg if test -n "$convenience"; then 7767c27c18e8Smrg if test -n "$whole_archive_flag_spec"; then 7768c27c18e8Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 776937eb1ca1Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 7770c27c18e8Smrg else 7771c27c18e8Smrg gentop="$output_objdir/${obj}x" 7772c27c18e8Smrg generated="$generated $gentop" 7773c43cc173Smrg 7774c27c18e8Smrg func_extract_archives $gentop $convenience 7775c27c18e8Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 7776c27c18e8Smrg fi 7777c43cc173Smrg fi 7778c43cc173Smrg 7779c27c18e8Smrg # Create the old-style object. 778037eb1ca1Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 7781c43cc173Smrg 7782c27c18e8Smrg output="$obj" 7783c27c18e8Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7784c43cc173Smrg 7785c27c18e8Smrg # Exit if we aren't doing a library object file. 7786c27c18e8Smrg if test -z "$libobj"; then 7787c27c18e8Smrg if test -n "$gentop"; then 7788c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 7789c27c18e8Smrg fi 7790c27c18e8Smrg 7791c27c18e8Smrg exit $EXIT_SUCCESS 7792c43cc173Smrg fi 7793c27c18e8Smrg 7794c27c18e8Smrg if test "$build_libtool_libs" != yes; then 7795c27c18e8Smrg if test -n "$gentop"; then 7796c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 7797c27c18e8Smrg fi 7798c27c18e8Smrg 7799c27c18e8Smrg # Create an invalid libtool object if no PIC, so that we don't 7800c27c18e8Smrg # accidentally link it into a program. 7801c27c18e8Smrg # $show "echo timestamp > $libobj" 7802c27c18e8Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 7803c27c18e8Smrg exit $EXIT_SUCCESS 7804c27c18e8Smrg fi 7805c27c18e8Smrg 7806c27c18e8Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 7807c27c18e8Smrg # Only do commands if we really have different PIC objects. 7808c27c18e8Smrg reload_objs="$libobjs $reload_conv_objs" 7809c27c18e8Smrg output="$libobj" 7810c27c18e8Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7811c27c18e8Smrg fi 7812c27c18e8Smrg 7813c27c18e8Smrg if test -n "$gentop"; then 7814c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 7815c27c18e8Smrg fi 7816c27c18e8Smrg 7817c27c18e8Smrg exit $EXIT_SUCCESS 7818c43cc173Smrg ;; 7819c43cc173Smrg 7820c27c18e8Smrg prog) 7821c27c18e8Smrg case $host in 7822c27c18e8Smrg *cygwin*) func_stripname '' '.exe' "$output" 7823c27c18e8Smrg output=$func_stripname_result.exe;; 7824c27c18e8Smrg esac 7825c27c18e8Smrg test -n "$vinfo" && \ 7826c27c18e8Smrg func_warning "\`-version-info' is ignored for programs" 7827c43cc173Smrg 7828c27c18e8Smrg test -n "$release" && \ 7829c27c18e8Smrg func_warning "\`-release' is ignored for programs" 7830c43cc173Smrg 7831c27c18e8Smrg test "$preload" = yes \ 7832c27c18e8Smrg && test "$dlopen_support" = unknown \ 7833c27c18e8Smrg && test "$dlopen_self" = unknown \ 7834c27c18e8Smrg && test "$dlopen_self_static" = unknown && \ 7835c27c18e8Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 7836c27c18e8Smrg 7837c27c18e8Smrg case $host in 7838c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7839c27c18e8Smrg # On Rhapsody replace the C library is the System framework 784037eb1ca1Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 784137eb1ca1Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 7842c43cc173Smrg ;; 7843c27c18e8Smrg esac 7844c43cc173Smrg 7845c27c18e8Smrg case $host in 7846c27c18e8Smrg *-*-darwin*) 7847c27c18e8Smrg # Don't allow lazy linking, it breaks C++ global constructors 7848c27c18e8Smrg # But is supposedly fixed on 10.4 or later (yay!). 7849c27c18e8Smrg if test "$tagname" = CXX ; then 7850c27c18e8Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 7851c27c18e8Smrg 10.[0123]) 7852c27c18e8Smrg compile_command="$compile_command ${wl}-bind_at_load" 7853c27c18e8Smrg finalize_command="$finalize_command ${wl}-bind_at_load" 7854c27c18e8Smrg ;; 7855c27c18e8Smrg esac 7856c43cc173Smrg fi 7857c27c18e8Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 785837eb1ca1Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 785937eb1ca1Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7860c27c18e8Smrg ;; 7861c27c18e8Smrg esac 7862c43cc173Smrg 7863c43cc173Smrg 7864c27c18e8Smrg # move library search paths that coincide with paths to not yet 7865c27c18e8Smrg # installed libraries to the beginning of the library search list 7866c27c18e8Smrg new_libs= 7867c27c18e8Smrg for path in $notinst_path; do 7868c27c18e8Smrg case " $new_libs " in 7869c27c18e8Smrg *" -L$path/$objdir "*) ;; 7870c27c18e8Smrg *) 7871c27c18e8Smrg case " $compile_deplibs " in 7872c27c18e8Smrg *" -L$path/$objdir "*) 7873c27c18e8Smrg new_libs="$new_libs -L$path/$objdir" ;; 7874c43cc173Smrg esac 7875c27c18e8Smrg ;; 7876c27c18e8Smrg esac 7877c27c18e8Smrg done 7878c27c18e8Smrg for deplib in $compile_deplibs; do 7879c27c18e8Smrg case $deplib in 7880c27c18e8Smrg -L*) 7881c27c18e8Smrg case " $new_libs " in 7882c27c18e8Smrg *" $deplib "*) ;; 7883c27c18e8Smrg *) new_libs="$new_libs $deplib" ;; 7884c43cc173Smrg esac 7885c27c18e8Smrg ;; 7886c27c18e8Smrg *) new_libs="$new_libs $deplib" ;; 7887c27c18e8Smrg esac 7888c27c18e8Smrg done 7889c27c18e8Smrg compile_deplibs="$new_libs" 7890c43cc173Smrg 7891c43cc173Smrg 7892c27c18e8Smrg compile_command="$compile_command $compile_deplibs" 7893c27c18e8Smrg finalize_command="$finalize_command $finalize_deplibs" 7894c43cc173Smrg 7895c27c18e8Smrg if test -n "$rpath$xrpath"; then 7896c27c18e8Smrg # If the user specified any rpath flags, then add them. 7897c27c18e8Smrg for libdir in $rpath $xrpath; do 7898c27c18e8Smrg # This is the magic to use -rpath. 7899c27c18e8Smrg case "$finalize_rpath " in 7900c27c18e8Smrg *" $libdir "*) ;; 7901c27c18e8Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 7902c27c18e8Smrg esac 7903c27c18e8Smrg done 7904c27c18e8Smrg fi 7905c43cc173Smrg 7906c27c18e8Smrg # Now hardcode the library paths 7907c27c18e8Smrg rpath= 7908c27c18e8Smrg hardcode_libdirs= 7909c27c18e8Smrg for libdir in $compile_rpath $finalize_rpath; do 7910c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 7911c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 7912c27c18e8Smrg if test -z "$hardcode_libdirs"; then 7913c27c18e8Smrg hardcode_libdirs="$libdir" 7914c27c18e8Smrg else 7915c27c18e8Smrg # Just accumulate the unique libdirs. 7916c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7917c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7918c27c18e8Smrg ;; 7919c27c18e8Smrg *) 7920c27c18e8Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7921c27c18e8Smrg ;; 7922c27c18e8Smrg esac 7923c27c18e8Smrg fi 7924c43cc173Smrg else 7925c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7926c27c18e8Smrg rpath="$rpath $flag" 7927c43cc173Smrg fi 7928c27c18e8Smrg elif test -n "$runpath_var"; then 7929c27c18e8Smrg case "$perm_rpath " in 7930c27c18e8Smrg *" $libdir "*) ;; 7931c27c18e8Smrg *) perm_rpath="$perm_rpath $libdir" ;; 7932c27c18e8Smrg esac 7933c27c18e8Smrg fi 7934c27c18e8Smrg case $host in 7935c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7936c27c18e8Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 7937c27c18e8Smrg case :$dllsearchpath: in 7938c27c18e8Smrg *":$libdir:"*) ;; 7939c27c18e8Smrg ::) dllsearchpath=$libdir;; 7940c27c18e8Smrg *) dllsearchpath="$dllsearchpath:$libdir";; 7941c27c18e8Smrg esac 7942c27c18e8Smrg case :$dllsearchpath: in 7943c27c18e8Smrg *":$testbindir:"*) ;; 7944c27c18e8Smrg ::) dllsearchpath=$testbindir;; 7945c27c18e8Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 7946c27c18e8Smrg esac 7947c27c18e8Smrg ;; 7948c27c18e8Smrg esac 7949c27c18e8Smrg done 7950c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 7951c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 7952c27c18e8Smrg test -n "$hardcode_libdirs"; then 7953c27c18e8Smrg libdir="$hardcode_libdirs" 7954c27c18e8Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 7955c27c18e8Smrg fi 7956c27c18e8Smrg compile_rpath="$rpath" 7957c43cc173Smrg 7958c27c18e8Smrg rpath= 7959c27c18e8Smrg hardcode_libdirs= 7960c27c18e8Smrg for libdir in $finalize_rpath; do 7961c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 7962c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 7963c27c18e8Smrg if test -z "$hardcode_libdirs"; then 7964c27c18e8Smrg hardcode_libdirs="$libdir" 7965c27c18e8Smrg else 7966c27c18e8Smrg # Just accumulate the unique libdirs. 7967c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7968c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7969c27c18e8Smrg ;; 7970c27c18e8Smrg *) 7971c27c18e8Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7972c27c18e8Smrg ;; 7973c27c18e8Smrg esac 7974c27c18e8Smrg fi 7975c43cc173Smrg else 7976c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7977c27c18e8Smrg rpath="$rpath $flag" 7978c43cc173Smrg fi 7979c27c18e8Smrg elif test -n "$runpath_var"; then 7980c27c18e8Smrg case "$finalize_perm_rpath " in 7981c27c18e8Smrg *" $libdir "*) ;; 7982c27c18e8Smrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 7983c27c18e8Smrg esac 7984c43cc173Smrg fi 7985c27c18e8Smrg done 7986c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 7987c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 7988c27c18e8Smrg test -n "$hardcode_libdirs"; then 7989c27c18e8Smrg libdir="$hardcode_libdirs" 7990c27c18e8Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 7991c27c18e8Smrg fi 7992c27c18e8Smrg finalize_rpath="$rpath" 7993c43cc173Smrg 7994c27c18e8Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 7995c27c18e8Smrg # Transform all the library objects into standard objects. 799637eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 799737eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 7998c27c18e8Smrg fi 7999c43cc173Smrg 8000c27c18e8Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8001c43cc173Smrg 8002c27c18e8Smrg # template prelinking step 8003c27c18e8Smrg if test -n "$prelink_cmds"; then 8004c27c18e8Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 8005c27c18e8Smrg fi 8006c43cc173Smrg 8007c27c18e8Smrg wrappers_required=yes 8008c27c18e8Smrg case $host in 800937eb1ca1Smrg *cegcc* | *mingw32ce*) 801037eb1ca1Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 801137eb1ca1Smrg wrappers_required=no 801237eb1ca1Smrg ;; 8013c27c18e8Smrg *cygwin* | *mingw* ) 8014c27c18e8Smrg if test "$build_libtool_libs" != yes; then 8015c27c18e8Smrg wrappers_required=no 8016c27c18e8Smrg fi 8017c27c18e8Smrg ;; 8018c27c18e8Smrg *) 8019c27c18e8Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8020c27c18e8Smrg wrappers_required=no 8021c27c18e8Smrg fi 8022c27c18e8Smrg ;; 8023c27c18e8Smrg esac 8024c27c18e8Smrg if test "$wrappers_required" = no; then 8025c27c18e8Smrg # Replace the output file specification. 802637eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8027c27c18e8Smrg link_command="$compile_command$compile_rpath" 8028c43cc173Smrg 8029c27c18e8Smrg # We have no uninstalled library dependencies, so finalize right now. 8030c27c18e8Smrg exit_status=0 8031c27c18e8Smrg func_show_eval "$link_command" 'exit_status=$?' 8032c43cc173Smrg 8033c27c18e8Smrg # Delete the generated files. 8034c27c18e8Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8035c27c18e8Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8036c43cc173Smrg fi 8037c43cc173Smrg 8038c27c18e8Smrg exit $exit_status 8039c27c18e8Smrg fi 8040c43cc173Smrg 8041c27c18e8Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8042c27c18e8Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8043c27c18e8Smrg fi 8044c27c18e8Smrg if test -n "$finalize_shlibpath"; then 8045c27c18e8Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8046c27c18e8Smrg fi 8047c43cc173Smrg 8048c27c18e8Smrg compile_var= 8049c27c18e8Smrg finalize_var= 8050c27c18e8Smrg if test -n "$runpath_var"; then 8051c27c18e8Smrg if test -n "$perm_rpath"; then 8052c27c18e8Smrg # We should set the runpath_var. 8053c27c18e8Smrg rpath= 8054c27c18e8Smrg for dir in $perm_rpath; do 8055c27c18e8Smrg rpath="$rpath$dir:" 8056c27c18e8Smrg done 8057c27c18e8Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8058c43cc173Smrg fi 8059c27c18e8Smrg if test -n "$finalize_perm_rpath"; then 8060c27c18e8Smrg # We should set the runpath_var. 8061c27c18e8Smrg rpath= 8062c27c18e8Smrg for dir in $finalize_perm_rpath; do 8063c27c18e8Smrg rpath="$rpath$dir:" 8064c27c18e8Smrg done 8065c27c18e8Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8066c43cc173Smrg fi 8067c27c18e8Smrg fi 8068c43cc173Smrg 8069c27c18e8Smrg if test "$no_install" = yes; then 8070c27c18e8Smrg # We don't need to create a wrapper script. 8071c27c18e8Smrg link_command="$compile_var$compile_command$compile_rpath" 8072c27c18e8Smrg # Replace the output file specification. 807337eb1ca1Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8074c27c18e8Smrg # Delete the old output file. 8075c27c18e8Smrg $opt_dry_run || $RM $output 8076c27c18e8Smrg # Link the executable and exit 8077c27c18e8Smrg func_show_eval "$link_command" 'exit $?' 8078c43cc173Smrg exit $EXIT_SUCCESS 8079c27c18e8Smrg fi 8080c43cc173Smrg 8081c27c18e8Smrg if test "$hardcode_action" = relink; then 8082c27c18e8Smrg # Fast installation is not supported 8083c27c18e8Smrg link_command="$compile_var$compile_command$compile_rpath" 8084c27c18e8Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8085c27c18e8Smrg 8086c27c18e8Smrg func_warning "this platform does not like uninstalled shared libraries" 8087c27c18e8Smrg func_warning "\`$output' will be relinked during installation" 8088c27c18e8Smrg else 8089c27c18e8Smrg if test "$fast_install" != no; then 8090c27c18e8Smrg link_command="$finalize_var$compile_command$finalize_rpath" 8091c27c18e8Smrg if test "$fast_install" = yes; then 809237eb1ca1Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8093c27c18e8Smrg else 8094c27c18e8Smrg # fast_install is set to needless 8095c27c18e8Smrg relink_command= 8096c27c18e8Smrg fi 8097c43cc173Smrg else 8098c27c18e8Smrg link_command="$compile_var$compile_command$compile_rpath" 8099c27c18e8Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8100c43cc173Smrg fi 8101c27c18e8Smrg fi 8102c43cc173Smrg 8103c27c18e8Smrg # Replace the output file specification. 810437eb1ca1Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8105c43cc173Smrg 8106c27c18e8Smrg # Delete the old output files. 8107c27c18e8Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8108c43cc173Smrg 8109c27c18e8Smrg func_show_eval "$link_command" 'exit $?' 8110c43cc173Smrg 8111c27c18e8Smrg # Now create the wrapper script. 8112c27c18e8Smrg func_verbose "creating $output" 8113c43cc173Smrg 8114c27c18e8Smrg # Quote the relink command for shipping. 8115c27c18e8Smrg if test -n "$relink_command"; then 8116c27c18e8Smrg # Preserve any variables that may affect compiler behavior 8117c27c18e8Smrg for var in $variables_saved_for_relink; do 8118c27c18e8Smrg if eval test -z \"\${$var+set}\"; then 8119c27c18e8Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8120c27c18e8Smrg elif eval var_value=\$$var; test -z "$var_value"; then 8121c27c18e8Smrg relink_command="$var=; export $var; $relink_command" 8122c43cc173Smrg else 8123c27c18e8Smrg func_quote_for_eval "$var_value" 8124c27c18e8Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8125c43cc173Smrg fi 8126c27c18e8Smrg done 8127c27c18e8Smrg relink_command="(cd `pwd`; $relink_command)" 812837eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 8129c27c18e8Smrg fi 8130c27c18e8Smrg 8131c27c18e8Smrg # Only actually do things if not in dry run mode. 8132c27c18e8Smrg $opt_dry_run || { 8133c27c18e8Smrg # win32 will think the script is a binary if it has 8134c27c18e8Smrg # a .exe suffix, so we strip it off here. 8135c27c18e8Smrg case $output in 8136c27c18e8Smrg *.exe) func_stripname '' '.exe' "$output" 8137c27c18e8Smrg output=$func_stripname_result ;; 8138c27c18e8Smrg esac 8139c27c18e8Smrg # test for cygwin because mv fails w/o .exe extensions 8140c27c18e8Smrg case $host in 8141c27c18e8Smrg *cygwin*) 8142c27c18e8Smrg exeext=.exe 8143c27c18e8Smrg func_stripname '' '.exe' "$outputname" 8144c27c18e8Smrg outputname=$func_stripname_result ;; 8145c27c18e8Smrg *) exeext= ;; 8146c43cc173Smrg esac 8147c27c18e8Smrg case $host in 8148c27c18e8Smrg *cygwin* | *mingw* ) 8149c27c18e8Smrg func_dirname_and_basename "$output" "" "." 8150c27c18e8Smrg output_name=$func_basename_result 8151c27c18e8Smrg output_path=$func_dirname_result 8152c27c18e8Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 8153c27c18e8Smrg cwrapper="$output_path/$output_name.exe" 8154c27c18e8Smrg $RM $cwrappersource $cwrapper 8155c27c18e8Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 8156c27c18e8Smrg 8157c27c18e8Smrg func_emit_cwrapperexe_src > $cwrappersource 8158c27c18e8Smrg 8159c27c18e8Smrg # The wrapper executable is built using the $host compiler, 8160c27c18e8Smrg # because it contains $host paths and files. If cross- 8161c27c18e8Smrg # compiling, it, like the target executable, must be 8162c27c18e8Smrg # executed on the $host or under an emulation environment. 8163c27c18e8Smrg $opt_dry_run || { 8164c27c18e8Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 8165c27c18e8Smrg $STRIP $cwrapper 8166c27c18e8Smrg } 8167c43cc173Smrg 8168c27c18e8Smrg # Now, create the wrapper script for func_source use: 8169c27c18e8Smrg func_ltwrapper_scriptname $cwrapper 8170c27c18e8Smrg $RM $func_ltwrapper_scriptname_result 8171c27c18e8Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 8172c27c18e8Smrg $opt_dry_run || { 8173c27c18e8Smrg # note: this script will not be executed, so do not chmod. 8174c27c18e8Smrg if test "x$build" = "x$host" ; then 8175c27c18e8Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 8176c27c18e8Smrg else 8177c27c18e8Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 8178c27c18e8Smrg fi 8179c27c18e8Smrg } 8180c27c18e8Smrg ;; 8181c27c18e8Smrg * ) 8182c27c18e8Smrg $RM $output 8183c27c18e8Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 8184c43cc173Smrg 8185c27c18e8Smrg func_emit_wrapper no > $output 8186c27c18e8Smrg chmod +x $output 8187c27c18e8Smrg ;; 8188c27c18e8Smrg esac 8189c27c18e8Smrg } 8190c27c18e8Smrg exit $EXIT_SUCCESS 8191c27c18e8Smrg ;; 8192c27c18e8Smrg esac 8193c43cc173Smrg 8194c27c18e8Smrg # See if we need to build an old-fashioned archive. 8195c27c18e8Smrg for oldlib in $oldlibs; do 8196c43cc173Smrg 8197c27c18e8Smrg if test "$build_libtool_libs" = convenience; then 8198c27c18e8Smrg oldobjs="$libobjs_save $symfileobj" 8199c27c18e8Smrg addlibs="$convenience" 8200c27c18e8Smrg build_libtool_libs=no 8201c27c18e8Smrg else 8202c27c18e8Smrg if test "$build_libtool_libs" = module; then 8203c27c18e8Smrg oldobjs="$libobjs_save" 8204c27c18e8Smrg build_libtool_libs=no 8205c27c18e8Smrg else 8206c27c18e8Smrg oldobjs="$old_deplibs $non_pic_objects" 8207c27c18e8Smrg if test "$preload" = yes && test -f "$symfileobj"; then 8208c27c18e8Smrg oldobjs="$oldobjs $symfileobj" 8209c27c18e8Smrg fi 8210c27c18e8Smrg fi 8211c27c18e8Smrg addlibs="$old_convenience" 8212c43cc173Smrg fi 8213c43cc173Smrg 8214c27c18e8Smrg if test -n "$addlibs"; then 8215c27c18e8Smrg gentop="$output_objdir/${outputname}x" 8216c27c18e8Smrg generated="$generated $gentop" 8217c43cc173Smrg 8218c27c18e8Smrg func_extract_archives $gentop $addlibs 8219c27c18e8Smrg oldobjs="$oldobjs $func_extract_archives_result" 8220c27c18e8Smrg fi 8221c43cc173Smrg 8222c27c18e8Smrg # Do each command in the archive commands. 8223c27c18e8Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 8224c27c18e8Smrg cmds=$old_archive_from_new_cmds 8225c27c18e8Smrg else 8226c43cc173Smrg 8227c27c18e8Smrg # Add any objects from preloaded convenience libraries 8228c27c18e8Smrg if test -n "$dlprefiles"; then 8229c27c18e8Smrg gentop="$output_objdir/${outputname}x" 8230c27c18e8Smrg generated="$generated $gentop" 8231c43cc173Smrg 8232c27c18e8Smrg func_extract_archives $gentop $dlprefiles 8233c27c18e8Smrg oldobjs="$oldobjs $func_extract_archives_result" 8234c27c18e8Smrg fi 8235c43cc173Smrg 8236c27c18e8Smrg # POSIX demands no paths to be encoded in archives. We have 8237c27c18e8Smrg # to avoid creating archives with duplicate basenames if we 8238c27c18e8Smrg # might have to extract them afterwards, e.g., when creating a 8239c27c18e8Smrg # static archive out of a convenience library, or when linking 8240c27c18e8Smrg # the entirety of a libtool archive into another (currently 8241c27c18e8Smrg # not supported by libtool). 8242c27c18e8Smrg if (for obj in $oldobjs 8243c27c18e8Smrg do 8244c27c18e8Smrg func_basename "$obj" 8245c27c18e8Smrg $ECHO "$func_basename_result" 8246c27c18e8Smrg done | sort | sort -uc >/dev/null 2>&1); then 8247c27c18e8Smrg : 8248c27c18e8Smrg else 824937eb1ca1Smrg echo "copying selected object files to avoid basename conflicts..." 8250c27c18e8Smrg gentop="$output_objdir/${outputname}x" 8251c27c18e8Smrg generated="$generated $gentop" 8252c27c18e8Smrg func_mkdir_p "$gentop" 8253c27c18e8Smrg save_oldobjs=$oldobjs 8254c27c18e8Smrg oldobjs= 8255c27c18e8Smrg counter=1 8256c27c18e8Smrg for obj in $save_oldobjs 8257c27c18e8Smrg do 8258c27c18e8Smrg func_basename "$obj" 8259c27c18e8Smrg objbase="$func_basename_result" 8260c27c18e8Smrg case " $oldobjs " in 8261c27c18e8Smrg " ") oldobjs=$obj ;; 8262c27c18e8Smrg *[\ /]"$objbase "*) 8263c27c18e8Smrg while :; do 8264c27c18e8Smrg # Make sure we don't pick an alternate name that also 8265c27c18e8Smrg # overlaps. 8266c27c18e8Smrg newobj=lt$counter-$objbase 8267c27c18e8Smrg func_arith $counter + 1 8268c27c18e8Smrg counter=$func_arith_result 8269c27c18e8Smrg case " $oldobjs " in 8270c27c18e8Smrg *[\ /]"$newobj "*) ;; 8271c27c18e8Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 8272c27c18e8Smrg esac 8273c27c18e8Smrg done 8274c27c18e8Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 8275c27c18e8Smrg oldobjs="$oldobjs $gentop/$newobj" 8276c27c18e8Smrg ;; 8277c27c18e8Smrg *) oldobjs="$oldobjs $obj" ;; 8278c27c18e8Smrg esac 8279c43cc173Smrg done 8280c43cc173Smrg fi 8281c27c18e8Smrg eval cmds=\"$old_archive_cmds\" 8282c43cc173Smrg 8283c27c18e8Smrg func_len " $cmds" 8284c27c18e8Smrg len=$func_len_result 8285c27c18e8Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8286c27c18e8Smrg cmds=$old_archive_cmds 8287c27c18e8Smrg else 8288c27c18e8Smrg # the command line is too long to link in one step, link in parts 8289c27c18e8Smrg func_verbose "using piecewise archive linking..." 8290c27c18e8Smrg save_RANLIB=$RANLIB 8291c27c18e8Smrg RANLIB=: 8292c27c18e8Smrg objlist= 8293c27c18e8Smrg concat_cmds= 8294c27c18e8Smrg save_oldobjs=$oldobjs 8295c27c18e8Smrg oldobjs= 8296c27c18e8Smrg # Is there a better way of finding the last object in the list? 8297c27c18e8Smrg for obj in $save_oldobjs 8298c27c18e8Smrg do 8299c27c18e8Smrg last_oldobj=$obj 8300c27c18e8Smrg done 8301c27c18e8Smrg eval test_cmds=\"$old_archive_cmds\" 8302c27c18e8Smrg func_len " $test_cmds" 8303c27c18e8Smrg len0=$func_len_result 8304c27c18e8Smrg len=$len0 8305c27c18e8Smrg for obj in $save_oldobjs 8306c27c18e8Smrg do 8307c27c18e8Smrg func_len " $obj" 8308c27c18e8Smrg func_arith $len + $func_len_result 8309c27c18e8Smrg len=$func_arith_result 8310c27c18e8Smrg func_append objlist " $obj" 8311c27c18e8Smrg if test "$len" -lt "$max_cmd_len"; then 8312c27c18e8Smrg : 8313c27c18e8Smrg else 8314c27c18e8Smrg # the above command should be used before it gets too long 8315c27c18e8Smrg oldobjs=$objlist 8316c27c18e8Smrg if test "$obj" = "$last_oldobj" ; then 8317c27c18e8Smrg RANLIB=$save_RANLIB 8318c27c18e8Smrg fi 8319c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8320c27c18e8Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 8321c27c18e8Smrg objlist= 8322c27c18e8Smrg len=$len0 8323c27c18e8Smrg fi 8324c27c18e8Smrg done 8325c27c18e8Smrg RANLIB=$save_RANLIB 8326c27c18e8Smrg oldobjs=$objlist 8327c27c18e8Smrg if test "X$oldobjs" = "X" ; then 8328c27c18e8Smrg eval cmds=\"\$concat_cmds\" 8329c27c18e8Smrg else 8330c27c18e8Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 8331c27c18e8Smrg fi 8332c27c18e8Smrg fi 8333c27c18e8Smrg fi 8334c27c18e8Smrg func_execute_cmds "$cmds" 'exit $?' 8335c43cc173Smrg done 8336c43cc173Smrg 8337c27c18e8Smrg test -n "$generated" && \ 8338c27c18e8Smrg func_show_eval "${RM}r$generated" 8339c43cc173Smrg 8340c27c18e8Smrg # Now create the libtool archive. 8341c27c18e8Smrg case $output in 8342c27c18e8Smrg *.la) 8343c27c18e8Smrg old_library= 8344c27c18e8Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 8345c27c18e8Smrg func_verbose "creating $output" 8346c43cc173Smrg 8347c27c18e8Smrg # Preserve any variables that may affect compiler behavior 8348c27c18e8Smrg for var in $variables_saved_for_relink; do 8349c27c18e8Smrg if eval test -z \"\${$var+set}\"; then 8350c27c18e8Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8351c27c18e8Smrg elif eval var_value=\$$var; test -z "$var_value"; then 8352c27c18e8Smrg relink_command="$var=; export $var; $relink_command" 8353c43cc173Smrg else 8354c27c18e8Smrg func_quote_for_eval "$var_value" 8355c27c18e8Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8356c43cc173Smrg fi 8357c27c18e8Smrg done 8358c27c18e8Smrg # Quote the link command for shipping. 8359c27c18e8Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 836037eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 8361c27c18e8Smrg if test "$hardcode_automatic" = yes ; then 8362c27c18e8Smrg relink_command= 8363c27c18e8Smrg fi 8364c43cc173Smrg 8365c27c18e8Smrg # Only create the output if not a dry run. 8366c27c18e8Smrg $opt_dry_run || { 8367c27c18e8Smrg for installed in no yes; do 8368c27c18e8Smrg if test "$installed" = yes; then 8369c27c18e8Smrg if test -z "$install_libdir"; then 8370c27c18e8Smrg break 8371c27c18e8Smrg fi 8372c27c18e8Smrg output="$output_objdir/$outputname"i 8373c27c18e8Smrg # Replace all uninstalled libtool libraries with the installed ones 8374c27c18e8Smrg newdependency_libs= 8375c27c18e8Smrg for deplib in $dependency_libs; do 8376c27c18e8Smrg case $deplib in 8377c27c18e8Smrg *.la) 8378c27c18e8Smrg func_basename "$deplib" 8379c27c18e8Smrg name="$func_basename_result" 8380c27c18e8Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8381c27c18e8Smrg test -z "$libdir" && \ 8382c27c18e8Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 8383c27c18e8Smrg newdependency_libs="$newdependency_libs $libdir/$name" 8384c27c18e8Smrg ;; 8385c27c18e8Smrg *) newdependency_libs="$newdependency_libs $deplib" ;; 8386c27c18e8Smrg esac 8387c27c18e8Smrg done 8388c27c18e8Smrg dependency_libs="$newdependency_libs" 8389c27c18e8Smrg newdlfiles= 8390c27c18e8Smrg 8391c27c18e8Smrg for lib in $dlfiles; do 8392c27c18e8Smrg case $lib in 8393c27c18e8Smrg *.la) 8394c27c18e8Smrg func_basename "$lib" 8395c27c18e8Smrg name="$func_basename_result" 8396c27c18e8Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8397c27c18e8Smrg test -z "$libdir" && \ 8398c27c18e8Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 8399c27c18e8Smrg newdlfiles="$newdlfiles $libdir/$name" 8400c27c18e8Smrg ;; 8401c27c18e8Smrg *) newdlfiles="$newdlfiles $lib" ;; 8402c27c18e8Smrg esac 8403c27c18e8Smrg done 8404c27c18e8Smrg dlfiles="$newdlfiles" 8405c27c18e8Smrg newdlprefiles= 8406c27c18e8Smrg for lib in $dlprefiles; do 8407c27c18e8Smrg case $lib in 8408c27c18e8Smrg *.la) 8409c27c18e8Smrg # Only pass preopened files to the pseudo-archive (for 8410c27c18e8Smrg # eventual linking with the app. that links it) if we 8411c27c18e8Smrg # didn't already link the preopened objects directly into 8412c27c18e8Smrg # the library: 8413c27c18e8Smrg func_basename "$lib" 8414c27c18e8Smrg name="$func_basename_result" 8415c27c18e8Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8416c27c18e8Smrg test -z "$libdir" && \ 8417c27c18e8Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 8418c27c18e8Smrg newdlprefiles="$newdlprefiles $libdir/$name" 8419c27c18e8Smrg ;; 8420c27c18e8Smrg esac 8421c27c18e8Smrg done 8422c27c18e8Smrg dlprefiles="$newdlprefiles" 8423c27c18e8Smrg else 8424c27c18e8Smrg newdlfiles= 8425c27c18e8Smrg for lib in $dlfiles; do 8426c27c18e8Smrg case $lib in 8427c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8428c27c18e8Smrg *) abs=`pwd`"/$lib" ;; 8429c27c18e8Smrg esac 8430c27c18e8Smrg newdlfiles="$newdlfiles $abs" 8431c27c18e8Smrg done 8432c27c18e8Smrg dlfiles="$newdlfiles" 8433c27c18e8Smrg newdlprefiles= 8434c27c18e8Smrg for lib in $dlprefiles; do 8435c27c18e8Smrg case $lib in 8436c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8437c27c18e8Smrg *) abs=`pwd`"/$lib" ;; 8438c27c18e8Smrg esac 8439c27c18e8Smrg newdlprefiles="$newdlprefiles $abs" 8440c27c18e8Smrg done 8441c27c18e8Smrg dlprefiles="$newdlprefiles" 8442c27c18e8Smrg fi 8443c27c18e8Smrg $RM $output 8444c27c18e8Smrg # place dlname in correct position for cygwin 844537eb1ca1Smrg # In fact, it would be nice if we could use this code for all target 844637eb1ca1Smrg # systems that can't hard-code library paths into their executables 844737eb1ca1Smrg # and that have no shared library path variable independent of PATH, 844837eb1ca1Smrg # but it turns out we can't easily determine that from inspecting 844937eb1ca1Smrg # libtool variables, so we have to hard-code the OSs to which it 845037eb1ca1Smrg # applies here; at the moment, that means platforms that use the PE 845137eb1ca1Smrg # object format with DLL files. See the long comment at the top of 845237eb1ca1Smrg # tests/bindir.at for full details. 8453c27c18e8Smrg tdlname=$dlname 8454c27c18e8Smrg case $host,$output,$installed,$module,$dlname in 845537eb1ca1Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 845637eb1ca1Smrg # If a -bindir argument was supplied, place the dll there. 845737eb1ca1Smrg if test "x$bindir" != x ; 845837eb1ca1Smrg then 845937eb1ca1Smrg func_relative_path "$install_libdir" "$bindir" 846037eb1ca1Smrg tdlname=$func_relative_path_result$dlname 846137eb1ca1Smrg else 846237eb1ca1Smrg # Otherwise fall back on heuristic. 846337eb1ca1Smrg tdlname=../bin/$dlname 846437eb1ca1Smrg fi 846537eb1ca1Smrg ;; 8466c27c18e8Smrg esac 8467c27c18e8Smrg $ECHO > $output "\ 8468c27c18e8Smrg# $outputname - a libtool library file 8469c27c18e8Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 8470c27c18e8Smrg# 8471c27c18e8Smrg# Please DO NOT delete this file! 8472c27c18e8Smrg# It is necessary for linking the library. 8473c43cc173Smrg 8474c27c18e8Smrg# The name that we can dlopen(3). 8475c27c18e8Smrgdlname='$tdlname' 8476c43cc173Smrg 8477c27c18e8Smrg# Names of this library. 8478c27c18e8Smrglibrary_names='$library_names' 8479c43cc173Smrg 8480c27c18e8Smrg# The name of the static archive. 8481c27c18e8Smrgold_library='$old_library' 8482c43cc173Smrg 8483c27c18e8Smrg# Linker flags that can not go in dependency_libs. 8484c27c18e8Smrginherited_linker_flags='$new_inherited_linker_flags' 8485c43cc173Smrg 8486c27c18e8Smrg# Libraries that this one depends upon. 8487c27c18e8Smrgdependency_libs='$dependency_libs' 8488c43cc173Smrg 8489c27c18e8Smrg# Names of additional weak libraries provided by this library 8490c27c18e8Smrgweak_library_names='$weak_libs' 8491c43cc173Smrg 8492c27c18e8Smrg# Version information for $libname. 8493c27c18e8Smrgcurrent=$current 8494c27c18e8Smrgage=$age 8495c27c18e8Smrgrevision=$revision 8496c43cc173Smrg 8497c27c18e8Smrg# Is this an already installed library? 8498c27c18e8Smrginstalled=$installed 8499c43cc173Smrg 8500c27c18e8Smrg# Should we warn about portability when linking against -modules? 8501c27c18e8Smrgshouldnotlink=$module 8502c43cc173Smrg 8503c27c18e8Smrg# Files to dlopen/dlpreopen 8504c27c18e8Smrgdlopen='$dlfiles' 8505c27c18e8Smrgdlpreopen='$dlprefiles' 8506c43cc173Smrg 8507c27c18e8Smrg# Directory that this library needs to be installed in: 8508c27c18e8Smrglibdir='$install_libdir'" 8509c27c18e8Smrg if test "$installed" = no && test "$need_relink" = yes; then 8510c27c18e8Smrg $ECHO >> $output "\ 8511c27c18e8Smrgrelink_command=\"$relink_command\"" 8512c27c18e8Smrg fi 8513c27c18e8Smrg done 8514c27c18e8Smrg } 8515c43cc173Smrg 8516c27c18e8Smrg # Do a symbolic link so that the libtool archive can be found in 8517c27c18e8Smrg # LD_LIBRARY_PATH before the program is installed. 8518c27c18e8Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 8519c27c18e8Smrg ;; 8520c27c18e8Smrg esac 8521c27c18e8Smrg exit $EXIT_SUCCESS 8522c27c18e8Smrg} 8523c43cc173Smrg 8524c27c18e8Smrg{ test "$mode" = link || test "$mode" = relink; } && 8525c27c18e8Smrg func_mode_link ${1+"$@"} 8526c43cc173Smrg 8527c43cc173Smrg 8528c27c18e8Smrg# func_mode_uninstall arg... 8529c27c18e8Smrgfunc_mode_uninstall () 8530c27c18e8Smrg{ 8531c27c18e8Smrg $opt_debug 8532c27c18e8Smrg RM="$nonopt" 8533c43cc173Smrg files= 8534c43cc173Smrg rmforce= 8535c43cc173Smrg exit_status=0 8536c43cc173Smrg 8537c43cc173Smrg # This variable tells wrapper scripts just to set variables rather 8538c43cc173Smrg # than running their programs. 8539c43cc173Smrg libtool_install_magic="$magic" 8540c43cc173Smrg 8541c43cc173Smrg for arg 8542c43cc173Smrg do 8543c43cc173Smrg case $arg in 8544c27c18e8Smrg -f) RM="$RM $arg"; rmforce=yes ;; 8545c27c18e8Smrg -*) RM="$RM $arg" ;; 8546c43cc173Smrg *) files="$files $arg" ;; 8547c43cc173Smrg esac 8548c43cc173Smrg done 8549c43cc173Smrg 8550c27c18e8Smrg test -z "$RM" && \ 8551c27c18e8Smrg func_fatal_help "you must specify an RM program" 8552c43cc173Smrg 8553c43cc173Smrg rmdirs= 8554c43cc173Smrg 8555c43cc173Smrg origobjdir="$objdir" 8556c43cc173Smrg for file in $files; do 8557c27c18e8Smrg func_dirname "$file" "" "." 8558c27c18e8Smrg dir="$func_dirname_result" 8559c27c18e8Smrg if test "X$dir" = X.; then 8560c43cc173Smrg objdir="$origobjdir" 8561c43cc173Smrg else 8562c43cc173Smrg objdir="$dir/$origobjdir" 8563c43cc173Smrg fi 8564c27c18e8Smrg func_basename "$file" 8565c27c18e8Smrg name="$func_basename_result" 8566c43cc173Smrg test "$mode" = uninstall && objdir="$dir" 8567c43cc173Smrg 8568c43cc173Smrg # Remember objdir for removal later, being careful to avoid duplicates 8569c43cc173Smrg if test "$mode" = clean; then 8570c43cc173Smrg case " $rmdirs " in 8571c43cc173Smrg *" $objdir "*) ;; 8572c43cc173Smrg *) rmdirs="$rmdirs $objdir" ;; 8573c43cc173Smrg esac 8574c43cc173Smrg fi 8575c43cc173Smrg 8576c43cc173Smrg # Don't error if the file doesn't exist and rm -f was used. 8577c27c18e8Smrg if { test -L "$file"; } >/dev/null 2>&1 || 8578c27c18e8Smrg { test -h "$file"; } >/dev/null 2>&1 || 8579c27c18e8Smrg test -f "$file"; then 8580c43cc173Smrg : 8581c43cc173Smrg elif test -d "$file"; then 8582c43cc173Smrg exit_status=1 8583c43cc173Smrg continue 8584c43cc173Smrg elif test "$rmforce" = yes; then 8585c43cc173Smrg continue 8586c43cc173Smrg fi 8587c43cc173Smrg 8588c43cc173Smrg rmfiles="$file" 8589c43cc173Smrg 8590c43cc173Smrg case $name in 8591c43cc173Smrg *.la) 8592c43cc173Smrg # Possibly a libtool archive, so verify it. 8593c27c18e8Smrg if func_lalib_p "$file"; then 8594c27c18e8Smrg func_source $dir/$name 8595c43cc173Smrg 8596c43cc173Smrg # Delete the libtool libraries and symlinks. 8597c43cc173Smrg for n in $library_names; do 8598c43cc173Smrg rmfiles="$rmfiles $objdir/$n" 8599c43cc173Smrg done 8600c43cc173Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 8601c43cc173Smrg 8602c43cc173Smrg case "$mode" in 8603c43cc173Smrg clean) 8604c43cc173Smrg case " $library_names " in 8605c43cc173Smrg # " " in the beginning catches empty $dlname 8606c43cc173Smrg *" $dlname "*) ;; 8607c43cc173Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 8608c43cc173Smrg esac 8609c27c18e8Smrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 8610c43cc173Smrg ;; 8611c43cc173Smrg uninstall) 8612c43cc173Smrg if test -n "$library_names"; then 8613c43cc173Smrg # Do each command in the postuninstall commands. 8614c27c18e8Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8615c43cc173Smrg fi 8616c43cc173Smrg 8617c43cc173Smrg if test -n "$old_library"; then 8618c43cc173Smrg # Do each command in the old_postuninstall commands. 8619c27c18e8Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8620c43cc173Smrg fi 8621c43cc173Smrg # FIXME: should reinstall the best remaining shared library. 8622c43cc173Smrg ;; 8623c43cc173Smrg esac 8624c43cc173Smrg fi 8625c43cc173Smrg ;; 8626c43cc173Smrg 8627c43cc173Smrg *.lo) 8628c43cc173Smrg # Possibly a libtool object, so verify it. 8629c27c18e8Smrg if func_lalib_p "$file"; then 8630c43cc173Smrg 8631c43cc173Smrg # Read the .lo file 8632c27c18e8Smrg func_source $dir/$name 8633c43cc173Smrg 8634c43cc173Smrg # Add PIC object to the list of files to remove. 8635c27c18e8Smrg if test -n "$pic_object" && 8636c27c18e8Smrg test "$pic_object" != none; then 8637c43cc173Smrg rmfiles="$rmfiles $dir/$pic_object" 8638c43cc173Smrg fi 8639c43cc173Smrg 8640c43cc173Smrg # Add non-PIC object to the list of files to remove. 8641c27c18e8Smrg if test -n "$non_pic_object" && 8642c27c18e8Smrg test "$non_pic_object" != none; then 8643c43cc173Smrg rmfiles="$rmfiles $dir/$non_pic_object" 8644c43cc173Smrg fi 8645c43cc173Smrg fi 8646c43cc173Smrg ;; 8647c43cc173Smrg 8648c43cc173Smrg *) 8649c43cc173Smrg if test "$mode" = clean ; then 8650c43cc173Smrg noexename=$name 8651c43cc173Smrg case $file in 8652c43cc173Smrg *.exe) 8653c27c18e8Smrg func_stripname '' '.exe' "$file" 8654c27c18e8Smrg file=$func_stripname_result 8655c27c18e8Smrg func_stripname '' '.exe' "$name" 8656c27c18e8Smrg noexename=$func_stripname_result 8657c43cc173Smrg # $file with .exe has already been added to rmfiles, 8658c43cc173Smrg # add $file without .exe 8659c43cc173Smrg rmfiles="$rmfiles $file" 8660c43cc173Smrg ;; 8661c43cc173Smrg esac 8662c43cc173Smrg # Do a test to see if this is a libtool program. 8663c27c18e8Smrg if func_ltwrapper_p "$file"; then 8664c27c18e8Smrg if func_ltwrapper_executable_p "$file"; then 8665c27c18e8Smrg func_ltwrapper_scriptname "$file" 8666c27c18e8Smrg relink_command= 8667c27c18e8Smrg func_source $func_ltwrapper_scriptname_result 8668c27c18e8Smrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 8669c27c18e8Smrg else 8670c27c18e8Smrg relink_command= 8671c27c18e8Smrg func_source $dir/$noexename 8672c27c18e8Smrg fi 8673c43cc173Smrg 8674c43cc173Smrg # note $name still contains .exe if it was in $file originally 8675c43cc173Smrg # as does the version of $file that was added into $rmfiles 8676c43cc173Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 8677c43cc173Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 8678c43cc173Smrg rmfiles="$rmfiles $objdir/lt-$name" 8679c43cc173Smrg fi 8680c43cc173Smrg if test "X$noexename" != "X$name" ; then 8681c43cc173Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 8682c43cc173Smrg fi 8683c43cc173Smrg fi 8684c43cc173Smrg fi 8685c43cc173Smrg ;; 8686c43cc173Smrg esac 8687c27c18e8Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 8688c43cc173Smrg done 8689c43cc173Smrg objdir="$origobjdir" 8690c43cc173Smrg 8691c43cc173Smrg # Try to remove the ${objdir}s in the directories where we deleted files 8692c43cc173Smrg for dir in $rmdirs; do 8693c43cc173Smrg if test -d "$dir"; then 8694c27c18e8Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 8695c43cc173Smrg fi 8696c43cc173Smrg done 8697c43cc173Smrg 8698c43cc173Smrg exit $exit_status 8699c27c18e8Smrg} 8700c43cc173Smrg 8701c27c18e8Smrg{ test "$mode" = uninstall || test "$mode" = clean; } && 8702c27c18e8Smrg func_mode_uninstall ${1+"$@"} 8703c43cc173Smrg 8704c27c18e8Smrgtest -z "$mode" && { 8705c27c18e8Smrg help="$generic_help" 8706c27c18e8Smrg func_fatal_help "you must specify a MODE" 8707c27c18e8Smrg} 8708c27c18e8Smrg 8709c27c18e8Smrgtest -z "$exec_cmd" && \ 8710c27c18e8Smrg func_fatal_help "invalid operation mode \`$mode'" 8711c43cc173Smrg 8712c43cc173Smrgif test -n "$exec_cmd"; then 8713c27c18e8Smrg eval exec "$exec_cmd" 8714c43cc173Smrg exit $EXIT_FAILURE 8715c43cc173Smrgfi 8716c43cc173Smrg 8717c27c18e8Smrgexit $exit_status 8718c43cc173Smrg 8719c43cc173Smrg 8720c43cc173Smrg# The TAGs below are defined such that we never get into a situation 8721c43cc173Smrg# in which we disable both kinds of libraries. Given conflicting 8722c43cc173Smrg# choices, we go for a static library, that is the most portable, 8723c43cc173Smrg# since we can't tell whether shared libraries were disabled because 8724c43cc173Smrg# the user asked for that or because the platform doesn't support 8725c43cc173Smrg# them. This is particularly important on AIX, because we don't 8726c43cc173Smrg# support having both static and shared libraries enabled at the same 8727c43cc173Smrg# time on that platform, so we default to a shared-only configuration. 8728c43cc173Smrg# If a disable-shared tag is given, we'll fallback to a static-only 8729c43cc173Smrg# configuration. But we'll never go from static-only to shared-only. 8730c43cc173Smrg 8731c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 8732c27c18e8Smrgbuild_libtool_libs=no 8733c27c18e8Smrgbuild_old_libs=yes 8734c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 8735c43cc173Smrg 8736c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 8737c27c18e8Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 8738c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-static 8739c43cc173Smrg 8740c43cc173Smrg# Local Variables: 8741c43cc173Smrg# mode:shell-script 8742c43cc173Smrg# sh-indentation:2 8743c43cc173Smrg# End: 8744c27c18e8Smrg# vi:sw=2 8745c27c18e8Smrg 8746