ltmain.sh revision 7821949a
1de2362d3Smrg 27821949aSmrg# libtool (GNU libtool) 2.4.2 3de2362d3Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4de2362d3Smrg 57821949aSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 67821949aSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7de2362d3Smrg# This is free software; see the source for copying conditions. There is NO 8de2362d3Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9de2362d3Smrg 10de2362d3Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11de2362d3Smrg# it under the terms of the GNU General Public License as published by 12de2362d3Smrg# the Free Software Foundation; either version 2 of the License, or 13de2362d3Smrg# (at your option) any later version. 14de2362d3Smrg# 15de2362d3Smrg# As a special exception to the GNU General Public License, 16de2362d3Smrg# if you distribute this file as part of a program or library that 17de2362d3Smrg# is built using GNU Libtool, you may include this file under the 18de2362d3Smrg# same distribution terms that you use for the rest of that program. 19de2362d3Smrg# 20de2362d3Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21de2362d3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22de2362d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23de2362d3Smrg# General Public License for more details. 24de2362d3Smrg# 25de2362d3Smrg# You should have received a copy of the GNU General Public License 267821949aSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 277821949aSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 287821949aSmrg# or obtained by writing to the Free Software Foundation, Inc., 297821949aSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 300d16fef4Smrg 317821949aSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 327821949aSmrg# 337821949aSmrg# Provide generalized library-building support services. 340d16fef4Smrg# 357821949aSmrg# --config show all configuration variables 367821949aSmrg# --debug enable verbose shell tracing 377821949aSmrg# -n, --dry-run display commands without modifying any files 387821949aSmrg# --features display basic configuration information and exit 397821949aSmrg# --mode=MODE use operation mode MODE 407821949aSmrg# --preserve-dup-deps don't remove duplicate dependency libraries 417821949aSmrg# --quiet, --silent don't print informational messages 427821949aSmrg# --no-quiet, --no-silent 437821949aSmrg# print informational messages (default) 447821949aSmrg# --no-warn don't display warning messages 457821949aSmrg# --tag=TAG use configuration variables from tag TAG 467821949aSmrg# -v, --verbose print more informational messages than default 477821949aSmrg# --no-verbose don't print the extra informational messages 487821949aSmrg# --version print version information 497821949aSmrg# -h, --help, --help-all print short, long, or detailed help message 500d16fef4Smrg# 517821949aSmrg# MODE must be one of the following: 527821949aSmrg# 537821949aSmrg# clean remove files from the build directory 547821949aSmrg# compile compile a source file into a libtool object 557821949aSmrg# execute automatically set library path, then run a program 567821949aSmrg# finish complete the installation of libtool libraries 577821949aSmrg# install install libraries or executables 587821949aSmrg# link create a library or an executable 597821949aSmrg# uninstall remove libraries from an installed directory 607821949aSmrg# 617821949aSmrg# MODE-ARGS vary depending on the MODE. When passed as first option, 627821949aSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 637821949aSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 647821949aSmrg# 657821949aSmrg# When reporting a bug, please describe a test case to reproduce it and 667821949aSmrg# include the following information: 677821949aSmrg# 687821949aSmrg# host-triplet: $host 697821949aSmrg# shell: $SHELL 707821949aSmrg# compiler: $LTCC 717821949aSmrg# compiler flags: $LTCFLAGS 727821949aSmrg# linker: $LD (gnu? $with_gnu_ld) 737821949aSmrg# $progname: (GNU libtool) 2.4.2 747821949aSmrg# automake: $automake_version 757821949aSmrg# autoconf: $autoconf_version 767821949aSmrg# 777821949aSmrg# Report bugs to <bug-libtool@gnu.org>. 787821949aSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 797821949aSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 800d16fef4Smrg 817821949aSmrgPROGRAM=libtool 827821949aSmrgPACKAGE=libtool 837821949aSmrgVERSION=2.4.2 847821949aSmrgTIMESTAMP="" 857821949aSmrgpackage_revision=1.3337 860d16fef4Smrg 877821949aSmrg# Be Bourne compatible 887821949aSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 89de2362d3Smrg emulate sh 90de2362d3Smrg NULLCMD=: 917821949aSmrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 92de2362d3Smrg # is contrary to our usage. Disable this feature. 93de2362d3Smrg alias -g '${1+"$@"}'='"$@"' 94de2362d3Smrg setopt NO_GLOB_SUBST 95de2362d3Smrgelse 967821949aSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 970d16fef4Smrgfi 987821949aSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 997821949aSmrgDUALCASE=1; export DUALCASE # for MKS sh 100de2362d3Smrg 1017821949aSmrg# A function that is used when there is no print builtin or printf. 1027821949aSmrgfunc_fallback_echo () 1030d16fef4Smrg{ 1047821949aSmrg eval 'cat <<_LTECHO_EOF 1057821949aSmrg$1 1067821949aSmrg_LTECHO_EOF' 1070d16fef4Smrg} 1080d16fef4Smrg 1097821949aSmrg# NLS nuisances: We save the old values to restore during execute mode. 1107821949aSmrglt_user_locale= 1117821949aSmrglt_safe_locale= 1127821949aSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1137821949aSmrgdo 1147821949aSmrg eval "if test \"\${$lt_var+set}\" = set; then 1157821949aSmrg save_$lt_var=\$$lt_var 1167821949aSmrg $lt_var=C 1177821949aSmrg export $lt_var 1187821949aSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 1197821949aSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1207821949aSmrg fi" 1217821949aSmrgdone 1227821949aSmrgLC_ALL=C 1237821949aSmrgLANGUAGE=C 1247821949aSmrgexport LANGUAGE LC_ALL 1250d16fef4Smrg 1267821949aSmrg$lt_unset CDPATH 1270d16fef4Smrg 1280d16fef4Smrg 1297821949aSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1307821949aSmrg# is ksh but when the shell is invoked as "sh" and the current value of 1317821949aSmrg# the _XPG environment variable is not equal to 1 (one), the special 1327821949aSmrg# positional parameter $0, within a function call, is the name of the 1337821949aSmrg# function. 1347821949aSmrgprogpath="$0" 1350d16fef4Smrg 1360d16fef4Smrg 137de2362d3Smrg 138de2362d3Smrg: ${CP="cp -f"} 1397821949aSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140de2362d3Smrg: ${MAKE="make"} 141de2362d3Smrg: ${MKDIR="mkdir"} 142de2362d3Smrg: ${MV="mv -f"} 143de2362d3Smrg: ${RM="rm -f"} 144de2362d3Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 1457821949aSmrg: ${Xsed="$SED -e 1s/^X//"} 146de2362d3Smrg 1477821949aSmrg# Global variables: 1487821949aSmrgEXIT_SUCCESS=0 1497821949aSmrgEXIT_FAILURE=1 1507821949aSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 1517821949aSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152de2362d3Smrg 1537821949aSmrgexit_status=$EXIT_SUCCESS 154de2362d3Smrg 1557821949aSmrg# Make sure IFS has a sensible default 1567821949aSmrglt_nl=' 1577821949aSmrg' 1587821949aSmrgIFS=" $lt_nl" 159de2362d3Smrg 1607821949aSmrgdirname="s,/[^/]*$,," 1617821949aSmrgbasename="s,^.*/,," 162de2362d3Smrg 1637821949aSmrg# func_dirname file append nondir_replacement 1647821949aSmrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 1657821949aSmrg# otherwise set result to NONDIR_REPLACEMENT. 1667821949aSmrgfunc_dirname () 1677821949aSmrg{ 1687821949aSmrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 1697821949aSmrg if test "X$func_dirname_result" = "X${1}"; then 1707821949aSmrg func_dirname_result="${3}" 1717821949aSmrg else 1727821949aSmrg func_dirname_result="$func_dirname_result${2}" 1737821949aSmrg fi 1747821949aSmrg} # func_dirname may be replaced by extended shell implementation 175de2362d3Smrg 176de2362d3Smrg 1777821949aSmrg# func_basename file 1787821949aSmrgfunc_basename () 1797821949aSmrg{ 1807821949aSmrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 1817821949aSmrg} # func_basename may be replaced by extended shell implementation 182de2362d3Smrg 183de2362d3Smrg 1847821949aSmrg# func_dirname_and_basename file append nondir_replacement 1857821949aSmrg# perform func_basename and func_dirname in a single function 1867821949aSmrg# call: 1877821949aSmrg# dirname: Compute the dirname of FILE. If nonempty, 1887821949aSmrg# add APPEND to the result, otherwise set result 1897821949aSmrg# to NONDIR_REPLACEMENT. 1907821949aSmrg# value returned in "$func_dirname_result" 1917821949aSmrg# basename: Compute filename of FILE. 1927821949aSmrg# value retuned in "$func_basename_result" 1937821949aSmrg# Implementation must be kept synchronized with func_dirname 1947821949aSmrg# and func_basename. For efficiency, we do not delegate to 1957821949aSmrg# those functions but instead duplicate the functionality here. 1967821949aSmrgfunc_dirname_and_basename () 1977821949aSmrg{ 1987821949aSmrg # Extract subdirectory from the argument. 1997821949aSmrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 2007821949aSmrg if test "X$func_dirname_result" = "X${1}"; then 2017821949aSmrg func_dirname_result="${3}" 2027821949aSmrg else 2037821949aSmrg func_dirname_result="$func_dirname_result${2}" 2047821949aSmrg fi 2057821949aSmrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 2067821949aSmrg} # func_dirname_and_basename may be replaced by extended shell implementation 207de2362d3Smrg 208de2362d3Smrg 2097821949aSmrg# func_stripname prefix suffix name 2107821949aSmrg# strip PREFIX and SUFFIX off of NAME. 2117821949aSmrg# PREFIX and SUFFIX must not contain globbing or regex special 2127821949aSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading 2137821949aSmrg# dot (in which case that matches only a dot). 2147821949aSmrg# func_strip_suffix prefix name 2157821949aSmrgfunc_stripname () 2167821949aSmrg{ 2177821949aSmrg case ${2} in 2187821949aSmrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 2197821949aSmrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 2207821949aSmrg esac 2217821949aSmrg} # func_stripname may be replaced by extended shell implementation 222de2362d3Smrg 223de2362d3Smrg 2247821949aSmrg# These SED scripts presuppose an absolute path with a trailing slash. 2257821949aSmrgpathcar='s,^/\([^/]*\).*$,\1,' 2267821949aSmrgpathcdr='s,^/[^/]*,,' 2277821949aSmrgremovedotparts=':dotsl 2287821949aSmrg s@/\./@/@g 2297821949aSmrg t dotsl 2307821949aSmrg s,/\.$,/,' 2317821949aSmrgcollapseslashes='s@/\{1,\}@/@g' 2327821949aSmrgfinalslash='s,/*$,/,' 233de2362d3Smrg 2347821949aSmrg# func_normal_abspath PATH 2357821949aSmrg# Remove doubled-up and trailing slashes, "." path components, 2367821949aSmrg# and cancel out any ".." path components in PATH after making 2377821949aSmrg# it an absolute path. 2387821949aSmrg# value returned in "$func_normal_abspath_result" 2397821949aSmrgfunc_normal_abspath () 2407821949aSmrg{ 2417821949aSmrg # Start from root dir and reassemble the path. 2427821949aSmrg func_normal_abspath_result= 2437821949aSmrg func_normal_abspath_tpath=$1 2447821949aSmrg func_normal_abspath_altnamespace= 2457821949aSmrg case $func_normal_abspath_tpath in 2467821949aSmrg "") 2477821949aSmrg # Empty path, that just means $cwd. 2487821949aSmrg func_stripname '' '/' "`pwd`" 2497821949aSmrg func_normal_abspath_result=$func_stripname_result 2507821949aSmrg return 2517821949aSmrg ;; 2527821949aSmrg # The next three entries are used to spot a run of precisely 2537821949aSmrg # two leading slashes without using negated character classes; 2547821949aSmrg # we take advantage of case's first-match behaviour. 2557821949aSmrg ///*) 2567821949aSmrg # Unusual form of absolute path, do nothing. 2577821949aSmrg ;; 2587821949aSmrg //*) 2597821949aSmrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2607821949aSmrg # and for example Cygwin uses it to access remote file shares 2617821949aSmrg # over CIFS/SMB, so we conserve a leading double slash if found. 2627821949aSmrg func_normal_abspath_altnamespace=/ 2637821949aSmrg ;; 2647821949aSmrg /*) 2657821949aSmrg # Absolute path, do nothing. 2667821949aSmrg ;; 2677821949aSmrg *) 2687821949aSmrg # Relative path, prepend $cwd. 2697821949aSmrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2707821949aSmrg ;; 2717821949aSmrg esac 2727821949aSmrg # Cancel out all the simple stuff to save iterations. We also want 2737821949aSmrg # the path to end with a slash for ease of parsing, so make sure 2747821949aSmrg # there is one (and only one) here. 2757821949aSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2767821949aSmrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2777821949aSmrg while :; do 2787821949aSmrg # Processed it all yet? 2797821949aSmrg if test "$func_normal_abspath_tpath" = / ; then 2807821949aSmrg # If we ascended to the root using ".." the result may be empty now. 2817821949aSmrg if test -z "$func_normal_abspath_result" ; then 2827821949aSmrg func_normal_abspath_result=/ 2837821949aSmrg fi 2847821949aSmrg break 2857821949aSmrg fi 2867821949aSmrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2877821949aSmrg -e "$pathcar"` 2887821949aSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2897821949aSmrg -e "$pathcdr"` 2907821949aSmrg # Figure out what to do with it 2917821949aSmrg case $func_normal_abspath_tcomponent in 2927821949aSmrg "") 2937821949aSmrg # Trailing empty path component, ignore it. 2947821949aSmrg ;; 2957821949aSmrg ..) 2967821949aSmrg # Parent dir; strip last assembled component from result. 2977821949aSmrg func_dirname "$func_normal_abspath_result" 2987821949aSmrg func_normal_abspath_result=$func_dirname_result 2997821949aSmrg ;; 3007821949aSmrg *) 3017821949aSmrg # Actual path component, append it. 3027821949aSmrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 3037821949aSmrg ;; 3047821949aSmrg esac 3057821949aSmrg done 3067821949aSmrg # Restore leading double-slash if one was found on entry. 3077821949aSmrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 3087821949aSmrg} 3097821949aSmrg 3107821949aSmrg# func_relative_path SRCDIR DSTDIR 3117821949aSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 3127821949aSmrg# slash if non-empty, suitable for immediately appending a filename 3137821949aSmrg# without needing to append a separator. 3147821949aSmrg# value returned in "$func_relative_path_result" 3157821949aSmrgfunc_relative_path () 3167821949aSmrg{ 3177821949aSmrg func_relative_path_result= 3187821949aSmrg func_normal_abspath "$1" 3197821949aSmrg func_relative_path_tlibdir=$func_normal_abspath_result 3207821949aSmrg func_normal_abspath "$2" 3217821949aSmrg func_relative_path_tbindir=$func_normal_abspath_result 3227821949aSmrg 3237821949aSmrg # Ascend the tree starting from libdir 3247821949aSmrg while :; do 3257821949aSmrg # check if we have found a prefix of bindir 3267821949aSmrg case $func_relative_path_tbindir in 3277821949aSmrg $func_relative_path_tlibdir) 3287821949aSmrg # found an exact match 3297821949aSmrg func_relative_path_tcancelled= 3307821949aSmrg break 3317821949aSmrg ;; 3327821949aSmrg $func_relative_path_tlibdir*) 3337821949aSmrg # found a matching prefix 3347821949aSmrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3357821949aSmrg func_relative_path_tcancelled=$func_stripname_result 3367821949aSmrg if test -z "$func_relative_path_result"; then 3377821949aSmrg func_relative_path_result=. 3387821949aSmrg fi 3397821949aSmrg break 3407821949aSmrg ;; 3417821949aSmrg *) 3427821949aSmrg func_dirname $func_relative_path_tlibdir 3437821949aSmrg func_relative_path_tlibdir=${func_dirname_result} 3447821949aSmrg if test "x$func_relative_path_tlibdir" = x ; then 3457821949aSmrg # Have to descend all the way to the root! 3467821949aSmrg func_relative_path_result=../$func_relative_path_result 3477821949aSmrg func_relative_path_tcancelled=$func_relative_path_tbindir 3487821949aSmrg break 3497821949aSmrg fi 3507821949aSmrg func_relative_path_result=../$func_relative_path_result 3517821949aSmrg ;; 3527821949aSmrg esac 3537821949aSmrg done 3547821949aSmrg 3557821949aSmrg # Now calculate path; take care to avoid doubling-up slashes. 3567821949aSmrg func_stripname '' '/' "$func_relative_path_result" 3577821949aSmrg func_relative_path_result=$func_stripname_result 3587821949aSmrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3597821949aSmrg if test "x$func_stripname_result" != x ; then 3607821949aSmrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3617821949aSmrg fi 3627821949aSmrg 3637821949aSmrg # Normalisation. If bindir is libdir, return empty string, 3647821949aSmrg # else relative path ending with a slash; either way, target 3657821949aSmrg # file name can be directly appended. 3667821949aSmrg if test ! -z "$func_relative_path_result"; then 3677821949aSmrg func_stripname './' '' "$func_relative_path_result/" 3687821949aSmrg func_relative_path_result=$func_stripname_result 3697821949aSmrg fi 3707821949aSmrg} 371de2362d3Smrg 3727821949aSmrg# The name of this program: 3737821949aSmrgfunc_dirname_and_basename "$progpath" 3747821949aSmrgprogname=$func_basename_result 375de2362d3Smrg 3767821949aSmrg# Make sure we have an absolute path for reexecution: 377de2362d3Smrgcase $progpath in 378de2362d3Smrg [\\/]*|[A-Za-z]:\\*) ;; 379de2362d3Smrg *[\\/]*) 3807821949aSmrg progdir=$func_dirname_result 381de2362d3Smrg progdir=`cd "$progdir" && pwd` 3827821949aSmrg progpath="$progdir/$progname" 383de2362d3Smrg ;; 384de2362d3Smrg *) 3857821949aSmrg save_IFS="$IFS" 386de2362d3Smrg IFS=${PATH_SEPARATOR-:} 387de2362d3Smrg for progdir in $PATH; do 3887821949aSmrg IFS="$save_IFS" 389de2362d3Smrg test -x "$progdir/$progname" && break 390de2362d3Smrg done 3917821949aSmrg IFS="$save_IFS" 392de2362d3Smrg test -n "$progdir" || progdir=`pwd` 3937821949aSmrg progpath="$progdir/$progname" 394de2362d3Smrg ;; 395de2362d3Smrgesac 396de2362d3Smrg 3977821949aSmrg# Sed substitution that helps us do robust quoting. It backslashifies 3987821949aSmrg# metacharacters that are still active within double-quoted strings. 3997821949aSmrgXsed="${SED}"' -e 1s/^X//' 4007821949aSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 4017821949aSmrg 4027821949aSmrg# Same as above, but do not quote variable references. 4037821949aSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404de2362d3Smrg 4057821949aSmrg# Sed substitution that turns a string into a regex matching for the 4067821949aSmrg# string literally. 4077821949aSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 408de2362d3Smrg 4097821949aSmrg# Sed substitution that converts a w32 file name or path 4107821949aSmrg# which contains forward slashes, into one that contains 4117821949aSmrg# (escaped) backslashes. A very naive implementation. 4127821949aSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 4137821949aSmrg 4147821949aSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 4157821949aSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 4167821949aSmrg# in input to double_quote_subst, that '$' was protected from expansion. 4177821949aSmrg# Since each input `\' is now two `\'s, look for any number of runs of 4187821949aSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 4197821949aSmrgbs='\\' 4207821949aSmrgbs2='\\\\' 4217821949aSmrgbs4='\\\\\\\\' 4227821949aSmrgdollar='\$' 4237821949aSmrgsed_double_backslash="\ 4247821949aSmrg s/$bs4/&\\ 4257821949aSmrg/g 4267821949aSmrg s/^$bs2$dollar/$bs&/ 4277821949aSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 4287821949aSmrg s/\n//g" 429de2362d3Smrg 4307821949aSmrg# Standard options: 431de2362d3Smrgopt_dry_run=false 4327821949aSmrgopt_help=false 433de2362d3Smrgopt_quiet=false 434de2362d3Smrgopt_verbose=false 4357821949aSmrgopt_warning=: 436de2362d3Smrg 4377821949aSmrg# func_echo arg... 4387821949aSmrg# Echo program name prefixed message, along with the current mode 4397821949aSmrg# name if it has been set yet. 4407821949aSmrgfunc_echo () 4417821949aSmrg{ 4427821949aSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 4437821949aSmrg} 444de2362d3Smrg 4457821949aSmrg# func_verbose arg... 4467821949aSmrg# Echo program name prefixed message in verbose mode only. 4477821949aSmrgfunc_verbose () 4487821949aSmrg{ 4497821949aSmrg $opt_verbose && func_echo ${1+"$@"} 450de2362d3Smrg 4517821949aSmrg # A bug in bash halts the script if the last line of a function 4527821949aSmrg # fails when set -e is in force, so we need another command to 4537821949aSmrg # work around that: 4547821949aSmrg : 4557821949aSmrg} 456de2362d3Smrg 4577821949aSmrg# func_echo_all arg... 4587821949aSmrg# Invoke $ECHO with all args, space-separated. 4597821949aSmrgfunc_echo_all () 4607821949aSmrg{ 4617821949aSmrg $ECHO "$*" 4627821949aSmrg} 463de2362d3Smrg 4647821949aSmrg# func_error arg... 4657821949aSmrg# Echo program name prefixed message to standard error. 4667821949aSmrgfunc_error () 4677821949aSmrg{ 4687821949aSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 4697821949aSmrg} 470de2362d3Smrg 4717821949aSmrg# func_warning arg... 4727821949aSmrg# Echo program name prefixed warning message to standard error. 4737821949aSmrgfunc_warning () 4747821949aSmrg{ 4757821949aSmrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476de2362d3Smrg 4777821949aSmrg # bash bug again: 4787821949aSmrg : 4797821949aSmrg} 480de2362d3Smrg 4817821949aSmrg# func_fatal_error arg... 4827821949aSmrg# Echo program name prefixed message to standard error, and exit. 4837821949aSmrgfunc_fatal_error () 484de2362d3Smrg{ 4857821949aSmrg func_error ${1+"$@"} 4867821949aSmrg exit $EXIT_FAILURE 4877821949aSmrg} 488de2362d3Smrg 4897821949aSmrg# func_fatal_help arg... 4907821949aSmrg# Echo program name prefixed message to standard error, followed by 4917821949aSmrg# a help hint, and exit. 4927821949aSmrgfunc_fatal_help () 4937821949aSmrg{ 4947821949aSmrg func_error ${1+"$@"} 4957821949aSmrg func_fatal_error "$help" 496de2362d3Smrg} 4977821949aSmrghelp="Try \`$progname --help' for more information." ## default 498de2362d3Smrg 499de2362d3Smrg 5007821949aSmrg# func_grep expression filename 501de2362d3Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502de2362d3Smrgfunc_grep () 503de2362d3Smrg{ 504de2362d3Smrg $GREP "$1" "$2" >/dev/null 2>&1 505de2362d3Smrg} 506de2362d3Smrg 507de2362d3Smrg 5087821949aSmrg# func_mkdir_p directory-path 509de2362d3Smrg# Make sure the entire path to DIRECTORY-PATH is available. 510de2362d3Smrgfunc_mkdir_p () 511de2362d3Smrg{ 5127821949aSmrg my_directory_path="$1" 5137821949aSmrg my_dir_list= 514de2362d3Smrg 5157821949aSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516de2362d3Smrg 5177821949aSmrg # Protect directory names starting with `-' 5187821949aSmrg case $my_directory_path in 5197821949aSmrg -*) my_directory_path="./$my_directory_path" ;; 520de2362d3Smrg esac 521de2362d3Smrg 522de2362d3Smrg # While some portion of DIR does not yet exist... 5237821949aSmrg while test ! -d "$my_directory_path"; do 524de2362d3Smrg # ...make a list in topmost first order. Use a colon delimited 525de2362d3Smrg # list incase some portion of path contains whitespace. 5267821949aSmrg my_dir_list="$my_directory_path:$my_dir_list" 527de2362d3Smrg 528de2362d3Smrg # If the last portion added has no slash in it, the list is done 5297821949aSmrg case $my_directory_path in */*) ;; *) break ;; esac 530de2362d3Smrg 531de2362d3Smrg # ...otherwise throw away the child directory and loop 5327821949aSmrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533de2362d3Smrg done 5347821949aSmrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535de2362d3Smrg 5367821949aSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 5377821949aSmrg for my_dir in $my_dir_list; do 5387821949aSmrg IFS="$save_mkdir_p_IFS" 5397821949aSmrg # mkdir can fail with a `File exist' error if two processes 540de2362d3Smrg # try to create one of the directories concurrently. Don't 541de2362d3Smrg # stop in that case! 5427821949aSmrg $MKDIR "$my_dir" 2>/dev/null || : 543de2362d3Smrg done 5447821949aSmrg IFS="$save_mkdir_p_IFS" 545de2362d3Smrg 546de2362d3Smrg # Bail out if we (or some other process) failed to create a directory. 5477821949aSmrg test -d "$my_directory_path" || \ 5487821949aSmrg func_fatal_error "Failed to create \`$1'" 549de2362d3Smrg fi 550de2362d3Smrg} 551de2362d3Smrg 552de2362d3Smrg 5537821949aSmrg# func_mktempdir [string] 554de2362d3Smrg# Make a temporary directory that won't clash with other running 555de2362d3Smrg# libtool processes, and avoids race conditions if possible. If 5567821949aSmrg# given, STRING is the basename for that directory. 557de2362d3Smrgfunc_mktempdir () 558de2362d3Smrg{ 5597821949aSmrg my_template="${TMPDIR-/tmp}/${1-$progname}" 5600d16fef4Smrg 5617821949aSmrg if test "$opt_dry_run" = ":"; then 562de2362d3Smrg # Return a directory name, but don't create it in dry-run mode 5637821949aSmrg my_tmpdir="${my_template}-$$" 564de2362d3Smrg else 565de2362d3Smrg 566de2362d3Smrg # If mktemp works, use that first and foremost 5677821949aSmrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568de2362d3Smrg 5697821949aSmrg if test ! -d "$my_tmpdir"; then 570de2362d3Smrg # Failing that, at least try and use $RANDOM to avoid a race 5717821949aSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 572de2362d3Smrg 5737821949aSmrg save_mktempdir_umask=`umask` 574de2362d3Smrg umask 0077 5757821949aSmrg $MKDIR "$my_tmpdir" 5767821949aSmrg umask $save_mktempdir_umask 577de2362d3Smrg fi 578de2362d3Smrg 579de2362d3Smrg # If we're not in dry-run mode, bomb out on failure 5807821949aSmrg test -d "$my_tmpdir" || \ 5817821949aSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 5820d16fef4Smrg fi 5830d16fef4Smrg 5847821949aSmrg $ECHO "$my_tmpdir" 585de2362d3Smrg} 586de2362d3Smrg 587de2362d3Smrg 5887821949aSmrg# func_quote_for_eval arg 5897821949aSmrg# Aesthetically quote ARG to be evaled later. 5907821949aSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 5917821949aSmrg# is double-quoted, suitable for a subsequent eval, whereas 5927821949aSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 5937821949aSmrg# which are still active within double quotes backslashified. 5940d16fef4Smrgfunc_quote_for_eval () 5950d16fef4Smrg{ 596de2362d3Smrg case $1 in 5977821949aSmrg *[\\\`\"\$]*) 5987821949aSmrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599de2362d3Smrg *) 6007821949aSmrg func_quote_for_eval_unquoted_result="$1" ;; 601de2362d3Smrg esac 602de2362d3Smrg 6037821949aSmrg case $func_quote_for_eval_unquoted_result in 604de2362d3Smrg # Double-quote args containing shell metacharacters to delay 6057821949aSmrg # word splitting, command substitution and and variable 6067821949aSmrg # expansion for a subsequent eval. 607de2362d3Smrg # Many Bourne shells cannot handle close brackets correctly 608de2362d3Smrg # in scan sets, so we specify it separately. 609de2362d3Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 6107821949aSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611de2362d3Smrg ;; 6127821949aSmrg *) 6137821949aSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614de2362d3Smrg esac 6150d16fef4Smrg} 6160d16fef4Smrg 6170d16fef4Smrg 6187821949aSmrg# func_quote_for_expand arg 6197821949aSmrg# Aesthetically quote ARG to be evaled later; same as above, 6207821949aSmrg# but do not quote variable references. 6217821949aSmrgfunc_quote_for_expand () 6220d16fef4Smrg{ 6230d16fef4Smrg case $1 in 6247821949aSmrg *[\\\`\"]*) 6257821949aSmrg my_arg=`$ECHO "$1" | $SED \ 6267821949aSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 6277821949aSmrg *) 6287821949aSmrg my_arg="$1" ;; 6290d16fef4Smrg esac 6300d16fef4Smrg 6317821949aSmrg case $my_arg in 6327821949aSmrg # Double-quote args containing shell metacharacters to delay 6337821949aSmrg # word splitting and command substitution for a subsequent eval. 6347821949aSmrg # Many Bourne shells cannot handle close brackets correctly 6357821949aSmrg # in scan sets, so we specify it separately. 6367821949aSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 6377821949aSmrg my_arg="\"$my_arg\"" 6387821949aSmrg ;; 6397821949aSmrg esac 6400d16fef4Smrg 6417821949aSmrg func_quote_for_expand_result="$my_arg" 642de2362d3Smrg} 643de2362d3Smrg 644de2362d3Smrg 6457821949aSmrg# func_show_eval cmd [fail_exp] 6467821949aSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6477821949aSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6487821949aSmrg# is given, then evaluate it. 6497821949aSmrgfunc_show_eval () 650de2362d3Smrg{ 6517821949aSmrg my_cmd="$1" 6527821949aSmrg my_fail_exp="${2-:}" 653de2362d3Smrg 6547821949aSmrg ${opt_silent-false} || { 6557821949aSmrg func_quote_for_expand "$my_cmd" 6567821949aSmrg eval "func_echo $func_quote_for_expand_result" 6577821949aSmrg } 6580d16fef4Smrg 6597821949aSmrg if ${opt_dry_run-false}; then :; else 6607821949aSmrg eval "$my_cmd" 6617821949aSmrg my_status=$? 6627821949aSmrg if test "$my_status" -eq 0; then :; else 6637821949aSmrg eval "(exit $my_status); $my_fail_exp" 6647821949aSmrg fi 6657821949aSmrg fi 666de2362d3Smrg} 667de2362d3Smrg 6680d16fef4Smrg 6697821949aSmrg# func_show_eval_locale cmd [fail_exp] 6707821949aSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6717821949aSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6727821949aSmrg# is given, then evaluate it. Use the saved locale for evaluation. 6737821949aSmrgfunc_show_eval_locale () 674de2362d3Smrg{ 6757821949aSmrg my_cmd="$1" 6767821949aSmrg my_fail_exp="${2-:}" 6770d16fef4Smrg 6787821949aSmrg ${opt_silent-false} || { 6797821949aSmrg func_quote_for_expand "$my_cmd" 6807821949aSmrg eval "func_echo $func_quote_for_expand_result" 6817821949aSmrg } 6820d16fef4Smrg 6837821949aSmrg if ${opt_dry_run-false}; then :; else 6847821949aSmrg eval "$lt_user_locale 6857821949aSmrg $my_cmd" 6867821949aSmrg my_status=$? 6877821949aSmrg eval "$lt_safe_locale" 6887821949aSmrg if test "$my_status" -eq 0; then :; else 6897821949aSmrg eval "(exit $my_status); $my_fail_exp" 6907821949aSmrg fi 6917821949aSmrg fi 692de2362d3Smrg} 693de2362d3Smrg 6947821949aSmrg# func_tr_sh 6957821949aSmrg# Turn $1 into a string suitable for a shell variable name. 6967821949aSmrg# Result is stored in $func_tr_sh_result. All characters 6977821949aSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 6987821949aSmrg# if $1 begins with a digit, a '_' is prepended as well. 6997821949aSmrgfunc_tr_sh () 700de2362d3Smrg{ 7017821949aSmrg case $1 in 7027821949aSmrg [0-9]* | *[!a-zA-Z0-9_]*) 7037821949aSmrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 7047821949aSmrg ;; 7057821949aSmrg * ) 7067821949aSmrg func_tr_sh_result=$1 7077821949aSmrg ;; 7087821949aSmrg esac 709de2362d3Smrg} 710de2362d3Smrg 7110d16fef4Smrg 7127821949aSmrg# func_version 7137821949aSmrg# Echo version message to standard output and exit. 7147821949aSmrgfunc_version () 7157821949aSmrg{ 7167821949aSmrg $opt_debug 7170d16fef4Smrg 7187821949aSmrg $SED -n '/(C)/!b go 7197821949aSmrg :more 7207821949aSmrg /\./!{ 7217821949aSmrg N 7227821949aSmrg s/\n# / / 7237821949aSmrg b more 7247821949aSmrg } 7257821949aSmrg :go 7267821949aSmrg /^# '$PROGRAM' (GNU /,/# warranty; / { 7277821949aSmrg s/^# // 7287821949aSmrg s/^# *$// 7297821949aSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 7307821949aSmrg p 7317821949aSmrg }' < "$progpath" 7327821949aSmrg exit $? 7337821949aSmrg} 7340d16fef4Smrg 7357821949aSmrg# func_usage 7367821949aSmrg# Echo short help message to standard output and exit. 7377821949aSmrgfunc_usage () 738de2362d3Smrg{ 7397821949aSmrg $opt_debug 740de2362d3Smrg 7417821949aSmrg $SED -n '/^# Usage:/,/^# *.*--help/ { 7427821949aSmrg s/^# // 7437821949aSmrg s/^# *$// 7447821949aSmrg s/\$progname/'$progname'/ 7457821949aSmrg p 7467821949aSmrg }' < "$progpath" 7477821949aSmrg echo 7487821949aSmrg $ECHO "run \`$progname --help | more' for full usage" 7497821949aSmrg exit $? 750de2362d3Smrg} 751de2362d3Smrg 7527821949aSmrg# func_help [NOEXIT] 7537821949aSmrg# Echo long help message to standard output and exit, 7547821949aSmrg# unless 'noexit' is passed as argument. 755de2362d3Smrgfunc_help () 756de2362d3Smrg{ 7577821949aSmrg $opt_debug 7587821949aSmrg 7597821949aSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 7607821949aSmrg :print 7617821949aSmrg s/^# // 7627821949aSmrg s/^# *$// 7637821949aSmrg s*\$progname*'$progname'* 7647821949aSmrg s*\$host*'"$host"'* 7657821949aSmrg s*\$SHELL*'"$SHELL"'* 7667821949aSmrg s*\$LTCC*'"$LTCC"'* 7677821949aSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 7687821949aSmrg s*\$LD*'"$LD"'* 7697821949aSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 7707821949aSmrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 7717821949aSmrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 7727821949aSmrg p 7737821949aSmrg d 7747821949aSmrg } 7757821949aSmrg /^# .* home page:/b print 7767821949aSmrg /^# General help using/b print 7777821949aSmrg ' < "$progpath" 7787821949aSmrg ret=$? 7797821949aSmrg if test -z "$1"; then 7807821949aSmrg exit $ret 7817821949aSmrg fi 782de2362d3Smrg} 783de2362d3Smrg 7847821949aSmrg# func_missing_arg argname 785de2362d3Smrg# Echo program name prefixed message to standard error and set global 786de2362d3Smrg# exit_cmd. 787de2362d3Smrgfunc_missing_arg () 788de2362d3Smrg{ 7897821949aSmrg $opt_debug 790de2362d3Smrg 7917821949aSmrg func_error "missing argument for $1." 792de2362d3Smrg exit_cmd=exit 793de2362d3Smrg} 794de2362d3Smrg 795de2362d3Smrg 7967821949aSmrg# func_split_short_opt shortopt 797de2362d3Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 798de2362d3Smrg# variables after splitting SHORTOPT after the 2nd character. 7997821949aSmrgfunc_split_short_opt () 800de2362d3Smrg{ 8017821949aSmrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 8027821949aSmrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803de2362d3Smrg 8047821949aSmrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 8057821949aSmrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 8067821949aSmrg} # func_split_short_opt may be replaced by extended shell implementation 807de2362d3Smrg 808de2362d3Smrg 8097821949aSmrg# func_split_long_opt longopt 8107821949aSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 8117821949aSmrg# variables after splitting LONGOPT at the `=' sign. 8127821949aSmrgfunc_split_long_opt () 813de2362d3Smrg{ 8147821949aSmrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 8157821949aSmrg my_sed_long_arg='1s/^--[^=]*=//' 816de2362d3Smrg 8177821949aSmrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 8187821949aSmrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 8197821949aSmrg} # func_split_long_opt may be replaced by extended shell implementation 820de2362d3Smrg 8217821949aSmrgexit_cmd=: 822de2362d3Smrg 823de2362d3Smrg 824de2362d3Smrg 825de2362d3Smrg 826de2362d3Smrg 8277821949aSmrgmagic="%%%MAGIC variable%%%" 8287821949aSmrgmagic_exe="%%%MAGIC EXE variable%%%" 829de2362d3Smrg 8307821949aSmrg# Global variables. 8317821949aSmrgnonopt= 8327821949aSmrgpreserve_args= 8337821949aSmrglo2o="s/\\.lo\$/.${objext}/" 8347821949aSmrgo2lo="s/\\.${objext}\$/.lo/" 8357821949aSmrgextracted_archives= 8367821949aSmrgextracted_serial=0 837de2362d3Smrg 8387821949aSmrg# If this variable is set in any of the actions, the command in it 8397821949aSmrg# will be execed at the end. This prevents here-documents from being 8407821949aSmrg# left over by shells. 8417821949aSmrgexec_cmd= 842de2362d3Smrg 8437821949aSmrg# func_append var value 8447821949aSmrg# Append VALUE to the end of shell variable VAR. 8457821949aSmrgfunc_append () 846de2362d3Smrg{ 8477821949aSmrg eval "${1}=\$${1}\${2}" 8487821949aSmrg} # func_append may be replaced by extended shell implementation 849de2362d3Smrg 8507821949aSmrg# func_append_quoted var value 8517821949aSmrg# Quote VALUE and append to the end of shell variable VAR, separated 8527821949aSmrg# by a space. 8537821949aSmrgfunc_append_quoted () 854de2362d3Smrg{ 8557821949aSmrg func_quote_for_eval "${2}" 8567821949aSmrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 8577821949aSmrg} # func_append_quoted may be replaced by extended shell implementation 8580d16fef4Smrg 859de2362d3Smrg 8607821949aSmrg# func_arith arithmetic-term... 8617821949aSmrgfunc_arith () 862de2362d3Smrg{ 8637821949aSmrg func_arith_result=`expr "${@}"` 8647821949aSmrg} # func_arith may be replaced by extended shell implementation 865de2362d3Smrg 866de2362d3Smrg 8677821949aSmrg# func_len string 8687821949aSmrg# STRING may not start with a hyphen. 8697821949aSmrgfunc_len () 8707821949aSmrg{ 8717821949aSmrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 8727821949aSmrg} # func_len may be replaced by extended shell implementation 873de2362d3Smrg 874de2362d3Smrg 8757821949aSmrg# func_lo2o object 8767821949aSmrgfunc_lo2o () 8777821949aSmrg{ 8787821949aSmrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 8797821949aSmrg} # func_lo2o may be replaced by extended shell implementation 8800d16fef4Smrg 8810d16fef4Smrg 8827821949aSmrg# func_xform libobj-or-source 8837821949aSmrgfunc_xform () 8847821949aSmrg{ 8857821949aSmrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 8867821949aSmrg} # func_xform may be replaced by extended shell implementation 887de2362d3Smrg 888de2362d3Smrg 8897821949aSmrg# func_fatal_configuration arg... 890de2362d3Smrg# Echo program name prefixed message to standard error, followed by 891de2362d3Smrg# a configuration failure hint, and exit. 892de2362d3Smrgfunc_fatal_configuration () 893de2362d3Smrg{ 8947821949aSmrg func_error ${1+"$@"} 8957821949aSmrg func_error "See the $PACKAGE documentation for more information." 8967821949aSmrg func_fatal_error "Fatal configuration error." 897de2362d3Smrg} 898de2362d3Smrg 899de2362d3Smrg 900de2362d3Smrg# func_config 901de2362d3Smrg# Display the configuration for all the tags in this script. 902de2362d3Smrgfunc_config () 903de2362d3Smrg{ 904de2362d3Smrg re_begincf='^# ### BEGIN LIBTOOL' 905de2362d3Smrg re_endcf='^# ### END LIBTOOL' 906de2362d3Smrg 907de2362d3Smrg # Default configuration. 908de2362d3Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909de2362d3Smrg 910de2362d3Smrg # Now print the configurations for the tags. 911de2362d3Smrg for tagname in $taglist; do 912de2362d3Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913de2362d3Smrg done 914de2362d3Smrg 915de2362d3Smrg exit $? 916de2362d3Smrg} 917de2362d3Smrg 918de2362d3Smrg# func_features 919de2362d3Smrg# Display the features supported by this script. 920de2362d3Smrgfunc_features () 921de2362d3Smrg{ 922de2362d3Smrg echo "host: $host" 9237821949aSmrg if test "$build_libtool_libs" = yes; then 924de2362d3Smrg echo "enable shared libraries" 925de2362d3Smrg else 926de2362d3Smrg echo "disable shared libraries" 927de2362d3Smrg fi 9287821949aSmrg if test "$build_old_libs" = yes; then 929de2362d3Smrg echo "enable static libraries" 930de2362d3Smrg else 931de2362d3Smrg echo "disable static libraries" 932de2362d3Smrg fi 933de2362d3Smrg 934de2362d3Smrg exit $? 935de2362d3Smrg} 936de2362d3Smrg 9377821949aSmrg# func_enable_tag tagname 938de2362d3Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939de2362d3Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940de2362d3Smrg# variable here. 941de2362d3Smrgfunc_enable_tag () 942de2362d3Smrg{ 9437821949aSmrg # Global variable: 9447821949aSmrg tagname="$1" 945de2362d3Smrg 9467821949aSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 9477821949aSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 9487821949aSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 949de2362d3Smrg 9507821949aSmrg # Validate tagname. 9517821949aSmrg case $tagname in 9527821949aSmrg *[!-_A-Za-z0-9,/]*) 9537821949aSmrg func_fatal_error "invalid tag name: $tagname" 9547821949aSmrg ;; 9557821949aSmrg esac 956de2362d3Smrg 9577821949aSmrg # Don't test for the "default" C tag, as we know it's 9587821949aSmrg # there but not specially marked. 9597821949aSmrg case $tagname in 9607821949aSmrg CC) ;; 961de2362d3Smrg *) 9627821949aSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 9637821949aSmrg taglist="$taglist $tagname" 9647821949aSmrg 9657821949aSmrg # Evaluate the configuration. Be careful to quote the path 9667821949aSmrg # and the sed script, to avoid splitting on whitespace, but 9677821949aSmrg # also don't use non-portable quotes within backquotes within 9687821949aSmrg # quotes we have to do it in 2 steps: 9697821949aSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 9707821949aSmrg eval "$extractedcf" 9717821949aSmrg else 9727821949aSmrg func_error "ignoring unknown tag $tagname" 9737821949aSmrg fi 9747821949aSmrg ;; 9757821949aSmrg esac 976de2362d3Smrg} 977de2362d3Smrg 978de2362d3Smrg# func_check_version_match 979de2362d3Smrg# Ensure that we are using m4 macros, and libtool script from the same 980de2362d3Smrg# release of libtool. 981de2362d3Smrgfunc_check_version_match () 982de2362d3Smrg{ 9837821949aSmrg if test "$package_revision" != "$macro_revision"; then 9847821949aSmrg if test "$VERSION" != "$macro_version"; then 9857821949aSmrg if test -z "$macro_version"; then 9867821949aSmrg cat >&2 <<_LT_EOF 987de2362d3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 988de2362d3Smrg$progname: definition of this LT_INIT comes from an older release. 989de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 990de2362d3Smrg$progname: and run autoconf again. 991de2362d3Smrg_LT_EOF 9927821949aSmrg else 9937821949aSmrg cat >&2 <<_LT_EOF 994de2362d3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 995de2362d3Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 996de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 997de2362d3Smrg$progname: and run autoconf again. 998de2362d3Smrg_LT_EOF 9997821949aSmrg fi 10007821949aSmrg else 10017821949aSmrg cat >&2 <<_LT_EOF 1002de2362d3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1003de2362d3Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1004de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1005de2362d3Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 1006de2362d3Smrg_LT_EOF 10070d16fef4Smrg fi 1008de2362d3Smrg 10097821949aSmrg exit $EXIT_MISMATCH 10107821949aSmrg fi 10117821949aSmrg} 1012de2362d3Smrg 1013de2362d3Smrg 10147821949aSmrg# Shorthand for --mode=foo, only valid as the first argument 10157821949aSmrgcase $1 in 10167821949aSmrgclean|clea|cle|cl) 10177821949aSmrg shift; set dummy --mode clean ${1+"$@"}; shift 10187821949aSmrg ;; 10197821949aSmrgcompile|compil|compi|comp|com|co|c) 10207821949aSmrg shift; set dummy --mode compile ${1+"$@"}; shift 10217821949aSmrg ;; 10227821949aSmrgexecute|execut|execu|exec|exe|ex|e) 10237821949aSmrg shift; set dummy --mode execute ${1+"$@"}; shift 10247821949aSmrg ;; 10257821949aSmrgfinish|finis|fini|fin|fi|f) 10267821949aSmrg shift; set dummy --mode finish ${1+"$@"}; shift 10277821949aSmrg ;; 10287821949aSmrginstall|instal|insta|inst|ins|in|i) 10297821949aSmrg shift; set dummy --mode install ${1+"$@"}; shift 10307821949aSmrg ;; 10317821949aSmrglink|lin|li|l) 10327821949aSmrg shift; set dummy --mode link ${1+"$@"}; shift 10337821949aSmrg ;; 10347821949aSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 10357821949aSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 10367821949aSmrg ;; 10377821949aSmrgesac 1038de2362d3Smrg 1039de2362d3Smrg 10400d16fef4Smrg 10417821949aSmrg# Option defaults: 10427821949aSmrgopt_debug=: 10437821949aSmrgopt_dry_run=false 10447821949aSmrgopt_config=false 10457821949aSmrgopt_preserve_dup_deps=false 10467821949aSmrgopt_features=false 10477821949aSmrgopt_finish=false 10487821949aSmrgopt_help=false 10497821949aSmrgopt_help_all=false 10507821949aSmrgopt_silent=: 10517821949aSmrgopt_warning=: 10527821949aSmrgopt_verbose=: 10537821949aSmrgopt_silent=false 10547821949aSmrgopt_verbose=false 1055de2362d3Smrg 1056de2362d3Smrg 10577821949aSmrg# Parse options once, thoroughly. This comes as soon as possible in the 10587821949aSmrg# script to make things like `--version' happen as quickly as we can. 1059de2362d3Smrg{ 10607821949aSmrg # this just eases exit handling 10617821949aSmrg while test $# -gt 0; do 10627821949aSmrg opt="$1" 10637821949aSmrg shift 10647821949aSmrg case $opt in 10657821949aSmrg --debug|-x) opt_debug='set -x' 10667821949aSmrg func_echo "enabling shell trace mode" 10677821949aSmrg $opt_debug 10687821949aSmrg ;; 10697821949aSmrg --dry-run|--dryrun|-n) 10707821949aSmrg opt_dry_run=: 10717821949aSmrg ;; 10727821949aSmrg --config) 10737821949aSmrg opt_config=: 10747821949aSmrgfunc_config 10757821949aSmrg ;; 10767821949aSmrg --dlopen|-dlopen) 10777821949aSmrg optarg="$1" 10787821949aSmrg opt_dlopen="${opt_dlopen+$opt_dlopen 10797821949aSmrg}$optarg" 10807821949aSmrg shift 10817821949aSmrg ;; 10827821949aSmrg --preserve-dup-deps) 10837821949aSmrg opt_preserve_dup_deps=: 10847821949aSmrg ;; 10857821949aSmrg --features) 10867821949aSmrg opt_features=: 10877821949aSmrgfunc_features 10887821949aSmrg ;; 10897821949aSmrg --finish) 10907821949aSmrg opt_finish=: 10917821949aSmrgset dummy --mode finish ${1+"$@"}; shift 10927821949aSmrg ;; 10937821949aSmrg --help) 10947821949aSmrg opt_help=: 10957821949aSmrg ;; 10967821949aSmrg --help-all) 10977821949aSmrg opt_help_all=: 10987821949aSmrgopt_help=': help-all' 10997821949aSmrg ;; 11007821949aSmrg --mode) 11017821949aSmrg test $# = 0 && func_missing_arg $opt && break 11027821949aSmrg optarg="$1" 11037821949aSmrg opt_mode="$optarg" 11047821949aSmrgcase $optarg in 11057821949aSmrg # Valid mode arguments: 11067821949aSmrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 11077821949aSmrg 11087821949aSmrg # Catch anything else as an error 11097821949aSmrg *) func_error "invalid argument for $opt" 11107821949aSmrg exit_cmd=exit 11117821949aSmrg break 11127821949aSmrg ;; 11137821949aSmrgesac 11147821949aSmrg shift 11157821949aSmrg ;; 11167821949aSmrg --no-silent|--no-quiet) 11177821949aSmrg opt_silent=false 11187821949aSmrgfunc_append preserve_args " $opt" 11197821949aSmrg ;; 11207821949aSmrg --no-warning|--no-warn) 11217821949aSmrg opt_warning=false 11227821949aSmrgfunc_append preserve_args " $opt" 11237821949aSmrg ;; 11247821949aSmrg --no-verbose) 11257821949aSmrg opt_verbose=false 11267821949aSmrgfunc_append preserve_args " $opt" 11277821949aSmrg ;; 11287821949aSmrg --silent|--quiet) 11297821949aSmrg opt_silent=: 11307821949aSmrgfunc_append preserve_args " $opt" 11317821949aSmrg opt_verbose=false 11327821949aSmrg ;; 11337821949aSmrg --verbose|-v) 11347821949aSmrg opt_verbose=: 11357821949aSmrgfunc_append preserve_args " $opt" 11367821949aSmrgopt_silent=false 11377821949aSmrg ;; 11387821949aSmrg --tag) 11397821949aSmrg test $# = 0 && func_missing_arg $opt && break 11407821949aSmrg optarg="$1" 11417821949aSmrg opt_tag="$optarg" 11427821949aSmrgfunc_append preserve_args " $opt $optarg" 11437821949aSmrgfunc_enable_tag "$optarg" 11447821949aSmrg shift 11457821949aSmrg ;; 11467821949aSmrg 11477821949aSmrg -\?|-h) func_usage ;; 11487821949aSmrg --help) func_help ;; 11497821949aSmrg --version) func_version ;; 11507821949aSmrg 11517821949aSmrg # Separate optargs to long options: 11527821949aSmrg --*=*) 11537821949aSmrg func_split_long_opt "$opt" 11547821949aSmrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 11557821949aSmrg shift 11567821949aSmrg ;; 11577821949aSmrg 11587821949aSmrg # Separate non-argument short options: 11597821949aSmrg -\?*|-h*|-n*|-v*) 11607821949aSmrg func_split_short_opt "$opt" 11617821949aSmrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 11627821949aSmrg shift 11637821949aSmrg ;; 11647821949aSmrg 11657821949aSmrg --) break ;; 11667821949aSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 11677821949aSmrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 11687821949aSmrg esac 11697821949aSmrg done 1170de2362d3Smrg 11717821949aSmrg # Validate options: 1172de2362d3Smrg 11737821949aSmrg # save first non-option argument 11747821949aSmrg if test "$#" -gt 0; then 11757821949aSmrg nonopt="$opt" 11767821949aSmrg shift 11777821949aSmrg fi 1178de2362d3Smrg 11797821949aSmrg # preserve --debug 11807821949aSmrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181de2362d3Smrg 11827821949aSmrg case $host in 11837821949aSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 11847821949aSmrg # don't eliminate duplications in $postdeps and $predeps 11857821949aSmrg opt_duplicate_compiler_generated_deps=: 11867821949aSmrg ;; 11877821949aSmrg *) 11887821949aSmrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 11897821949aSmrg ;; 11907821949aSmrg esac 1191de2362d3Smrg 11927821949aSmrg $opt_help || { 11937821949aSmrg # Sanity checks first: 11947821949aSmrg func_check_version_match 1195de2362d3Smrg 11967821949aSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 11977821949aSmrg func_fatal_configuration "not configured to build any kind of library" 1198de2362d3Smrg fi 1199de2362d3Smrg 12007821949aSmrg # Darwin sucks 12017821949aSmrg eval std_shrext=\"$shrext_cmds\" 1202de2362d3Smrg 12037821949aSmrg # Only execute mode is allowed to have -dlopen flags. 12047821949aSmrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 12057821949aSmrg func_error "unrecognized option \`-dlopen'" 12067821949aSmrg $ECHO "$help" 1>&2 12077821949aSmrg exit $EXIT_FAILURE 12087821949aSmrg fi 12090d16fef4Smrg 12107821949aSmrg # Change the help message to a mode-specific one. 12117821949aSmrg generic_help="$help" 12127821949aSmrg help="Try \`$progname --help --mode=$opt_mode' for more information." 12137821949aSmrg } 12140d16fef4Smrg 12150d16fef4Smrg 12167821949aSmrg # Bail if the options were screwed 12177821949aSmrg $exit_cmd $EXIT_FAILURE 1218de2362d3Smrg} 1219de2362d3Smrg 1220de2362d3Smrg 1221de2362d3Smrg 1222de2362d3Smrg 1223de2362d3Smrg## ----------- ## 1224de2362d3Smrg## Main. ## 1225de2362d3Smrg## ----------- ## 1226de2362d3Smrg 1227de2362d3Smrg# func_lalib_p file 12287821949aSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out 1230de2362d3Smrg# determined imposters. 1231de2362d3Smrgfunc_lalib_p () 1232de2362d3Smrg{ 1233de2362d3Smrg test -f "$1" && 12347821949aSmrg $SED -e 4q "$1" 2>/dev/null \ 12357821949aSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236de2362d3Smrg} 1237de2362d3Smrg 1238de2362d3Smrg# func_lalib_unsafe_p file 12397821949aSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240de2362d3Smrg# This function implements the same check as func_lalib_p without 1241de2362d3Smrg# resorting to external programs. To this end, it redirects stdin and 1242de2362d3Smrg# closes it afterwards, without saving the original file descriptor. 1243de2362d3Smrg# As a safety measure, use it only where a negative result would be 12447821949aSmrg# fatal anyway. Works if `file' does not exist. 1245de2362d3Smrgfunc_lalib_unsafe_p () 1246de2362d3Smrg{ 1247de2362d3Smrg lalib_p=no 1248de2362d3Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249de2362d3Smrg for lalib_p_l in 1 2 3 4 1250de2362d3Smrg do 1251de2362d3Smrg read lalib_p_line 12527821949aSmrg case "$lalib_p_line" in 1253de2362d3Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254de2362d3Smrg esac 1255de2362d3Smrg done 1256de2362d3Smrg exec 0<&5 5<&- 1257de2362d3Smrg fi 12587821949aSmrg test "$lalib_p" = yes 1259de2362d3Smrg} 1260de2362d3Smrg 1261de2362d3Smrg# func_ltwrapper_script_p file 1262de2362d3Smrg# True iff FILE is a libtool wrapper script 1263de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out 1264de2362d3Smrg# determined imposters. 1265de2362d3Smrgfunc_ltwrapper_script_p () 1266de2362d3Smrg{ 12677821949aSmrg func_lalib_p "$1" 1268de2362d3Smrg} 1269de2362d3Smrg 1270de2362d3Smrg# func_ltwrapper_executable_p file 1271de2362d3Smrg# True iff FILE is a libtool wrapper executable 1272de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out 1273de2362d3Smrg# determined imposters. 1274de2362d3Smrgfunc_ltwrapper_executable_p () 1275de2362d3Smrg{ 1276de2362d3Smrg func_ltwrapper_exec_suffix= 1277de2362d3Smrg case $1 in 1278de2362d3Smrg *.exe) ;; 1279de2362d3Smrg *) func_ltwrapper_exec_suffix=.exe ;; 1280de2362d3Smrg esac 1281de2362d3Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282de2362d3Smrg} 1283de2362d3Smrg 1284de2362d3Smrg# func_ltwrapper_scriptname file 1285de2362d3Smrg# Assumes file is an ltwrapper_executable 1286de2362d3Smrg# uses $file to determine the appropriate filename for a 1287de2362d3Smrg# temporary ltwrapper_script. 1288de2362d3Smrgfunc_ltwrapper_scriptname () 1289de2362d3Smrg{ 1290de2362d3Smrg func_dirname_and_basename "$1" "" "." 1291de2362d3Smrg func_stripname '' '.exe' "$func_basename_result" 12927821949aSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293de2362d3Smrg} 1294de2362d3Smrg 1295de2362d3Smrg# func_ltwrapper_p file 1296de2362d3Smrg# True iff FILE is a libtool wrapper script or wrapper executable 1297de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out 1298de2362d3Smrg# determined imposters. 1299de2362d3Smrgfunc_ltwrapper_p () 1300de2362d3Smrg{ 1301de2362d3Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302de2362d3Smrg} 1303de2362d3Smrg 1304de2362d3Smrg 1305de2362d3Smrg# func_execute_cmds commands fail_cmd 1306de2362d3Smrg# Execute tilde-delimited COMMANDS. 1307de2362d3Smrg# If FAIL_CMD is given, eval that upon failure. 1308de2362d3Smrg# FAIL_CMD may read-access the current command in variable CMD! 1309de2362d3Smrgfunc_execute_cmds () 1310de2362d3Smrg{ 13117821949aSmrg $opt_debug 1312de2362d3Smrg save_ifs=$IFS; IFS='~' 1313de2362d3Smrg for cmd in $1; do 13140d16fef4Smrg IFS=$save_ifs 13157821949aSmrg eval cmd=\"$cmd\" 1316de2362d3Smrg func_show_eval "$cmd" "${2-:}" 1317de2362d3Smrg done 1318de2362d3Smrg IFS=$save_ifs 1319de2362d3Smrg} 1320de2362d3Smrg 1321de2362d3Smrg 1322de2362d3Smrg# func_source file 1323de2362d3Smrg# Source FILE, adding directory component if necessary. 1324de2362d3Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325de2362d3Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326de2362d3Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 13277821949aSmrg# `FILE.' does not work on cygwin managed mounts. 1328de2362d3Smrgfunc_source () 1329de2362d3Smrg{ 13307821949aSmrg $opt_debug 1331de2362d3Smrg case $1 in 1332de2362d3Smrg */* | *\\*) . "$1" ;; 1333de2362d3Smrg *) . "./$1" ;; 1334de2362d3Smrg esac 1335de2362d3Smrg} 1336de2362d3Smrg 1337de2362d3Smrg 1338de2362d3Smrg# func_resolve_sysroot PATH 1339de2362d3Smrg# Replace a leading = in PATH with a sysroot. Store the result into 1340de2362d3Smrg# func_resolve_sysroot_result 1341de2362d3Smrgfunc_resolve_sysroot () 1342de2362d3Smrg{ 1343de2362d3Smrg func_resolve_sysroot_result=$1 1344de2362d3Smrg case $func_resolve_sysroot_result in 1345de2362d3Smrg =*) 1346de2362d3Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 1347de2362d3Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1348de2362d3Smrg ;; 1349de2362d3Smrg esac 1350de2362d3Smrg} 1351de2362d3Smrg 1352de2362d3Smrg# func_replace_sysroot PATH 1353de2362d3Smrg# If PATH begins with the sysroot, replace it with = and 1354de2362d3Smrg# store the result into func_replace_sysroot_result. 1355de2362d3Smrgfunc_replace_sysroot () 1356de2362d3Smrg{ 13577821949aSmrg case "$lt_sysroot:$1" in 1358de2362d3Smrg ?*:"$lt_sysroot"*) 1359de2362d3Smrg func_stripname "$lt_sysroot" '' "$1" 13607821949aSmrg func_replace_sysroot_result="=$func_stripname_result" 1361de2362d3Smrg ;; 1362de2362d3Smrg *) 1363de2362d3Smrg # Including no sysroot. 1364de2362d3Smrg func_replace_sysroot_result=$1 1365de2362d3Smrg ;; 1366de2362d3Smrg esac 1367de2362d3Smrg} 1368de2362d3Smrg 1369de2362d3Smrg# func_infer_tag arg 1370de2362d3Smrg# Infer tagged configuration to use if any are available and 1371de2362d3Smrg# if one wasn't chosen via the "--tag" command line option. 1372de2362d3Smrg# Only attempt this if the compiler in the base compile 1373de2362d3Smrg# command doesn't match the default compiler. 1374de2362d3Smrg# arg is usually of the form 'gcc ...' 1375de2362d3Smrgfunc_infer_tag () 1376de2362d3Smrg{ 13777821949aSmrg $opt_debug 1378de2362d3Smrg if test -n "$available_tags" && test -z "$tagname"; then 1379de2362d3Smrg CC_quoted= 1380de2362d3Smrg for arg in $CC; do 1381de2362d3Smrg func_append_quoted CC_quoted "$arg" 1382de2362d3Smrg done 1383de2362d3Smrg CC_expanded=`func_echo_all $CC` 1384de2362d3Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385de2362d3Smrg case $@ in 1386de2362d3Smrg # Blanks in the command may have been stripped by the calling shell, 1387de2362d3Smrg # but not from the CC environment variable when configure was run. 1388de2362d3Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1389de2362d3Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390de2362d3Smrg # Blanks at the start of $base_compile will cause this to fail 1391de2362d3Smrg # if we don't check for them as well. 1392de2362d3Smrg *) 1393de2362d3Smrg for z in $available_tags; do 1394de2362d3Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395de2362d3Smrg # Evaluate the configuration. 13967821949aSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397de2362d3Smrg CC_quoted= 1398de2362d3Smrg for arg in $CC; do 1399de2362d3Smrg # Double-quote args containing other shell metacharacters. 1400de2362d3Smrg func_append_quoted CC_quoted "$arg" 1401de2362d3Smrg done 1402de2362d3Smrg CC_expanded=`func_echo_all $CC` 1403de2362d3Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404de2362d3Smrg case "$@ " in 1405de2362d3Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1406de2362d3Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407de2362d3Smrg # The compiler in the base compile command matches 1408de2362d3Smrg # the one in the tagged configuration. 1409de2362d3Smrg # Assume this is the tagged configuration we want. 1410de2362d3Smrg tagname=$z 1411de2362d3Smrg break 1412de2362d3Smrg ;; 1413de2362d3Smrg esac 1414de2362d3Smrg fi 1415de2362d3Smrg done 1416de2362d3Smrg # If $tagname still isn't set, then no tagged configuration 1417de2362d3Smrg # was found and let the user know that the "--tag" command 1418de2362d3Smrg # line option must be used. 1419de2362d3Smrg if test -z "$tagname"; then 1420de2362d3Smrg func_echo "unable to infer tagged configuration" 14217821949aSmrg func_fatal_error "specify a tag with \`--tag'" 1422de2362d3Smrg# else 1423de2362d3Smrg# func_verbose "using $tagname tagged configuration" 1424de2362d3Smrg fi 1425de2362d3Smrg ;; 1426de2362d3Smrg esac 1427de2362d3Smrg fi 1428de2362d3Smrg} 1429de2362d3Smrg 1430de2362d3Smrg 1431de2362d3Smrg 1432de2362d3Smrg# func_write_libtool_object output_name pic_name nonpic_name 1433de2362d3Smrg# Create a libtool object file (analogous to a ".la" file), 1434de2362d3Smrg# but don't create it if we're doing a dry run. 1435de2362d3Smrgfunc_write_libtool_object () 1436de2362d3Smrg{ 14377821949aSmrg write_libobj=${1} 14387821949aSmrg if test "$build_libtool_libs" = yes; then 14397821949aSmrg write_lobj=\'${2}\' 1440de2362d3Smrg else 1441de2362d3Smrg write_lobj=none 1442de2362d3Smrg fi 1443de2362d3Smrg 14447821949aSmrg if test "$build_old_libs" = yes; then 14457821949aSmrg write_oldobj=\'${3}\' 1446de2362d3Smrg else 1447de2362d3Smrg write_oldobj=none 1448de2362d3Smrg fi 1449de2362d3Smrg 1450de2362d3Smrg $opt_dry_run || { 1451de2362d3Smrg cat >${write_libobj}T <<EOF 1452de2362d3Smrg# $write_libobj - a libtool object file 14537821949aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454de2362d3Smrg# 1455de2362d3Smrg# Please DO NOT delete this file! 1456de2362d3Smrg# It is necessary for linking the library. 1457de2362d3Smrg 1458de2362d3Smrg# Name of the PIC object. 1459de2362d3Smrgpic_object=$write_lobj 1460de2362d3Smrg 1461de2362d3Smrg# Name of the non-PIC object 1462de2362d3Smrgnon_pic_object=$write_oldobj 1463de2362d3Smrg 1464de2362d3SmrgEOF 14657821949aSmrg $MV "${write_libobj}T" "${write_libobj}" 1466de2362d3Smrg } 1467de2362d3Smrg} 1468de2362d3Smrg 1469de2362d3Smrg 1470de2362d3Smrg################################################## 1471de2362d3Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1472de2362d3Smrg################################################## 1473de2362d3Smrg 1474de2362d3Smrg# func_convert_core_file_wine_to_w32 ARG 1475de2362d3Smrg# Helper function used by file name conversion functions when $build is *nix, 1476de2362d3Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1477de2362d3Smrg# correctly configured wine environment available, with the winepath program 1478de2362d3Smrg# in $build's $PATH. 1479de2362d3Smrg# 1480de2362d3Smrg# ARG is the $build file name to be converted to w32 format. 1481de2362d3Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1482de2362d3Smrg# be empty on error (or when ARG is empty) 1483de2362d3Smrgfunc_convert_core_file_wine_to_w32 () 1484de2362d3Smrg{ 14857821949aSmrg $opt_debug 14867821949aSmrg func_convert_core_file_wine_to_w32_result="$1" 1487de2362d3Smrg if test -n "$1"; then 1488de2362d3Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 1489de2362d3Smrg # are forced to check the contents of stdout. On the other hand, if the 1490de2362d3Smrg # command is not found, the shell will set an exit code of 127 and print 1491de2362d3Smrg # *an error message* to stdout. So we must check for both error code of 1492de2362d3Smrg # zero AND non-empty stdout, which explains the odd construction: 1493de2362d3Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 14947821949aSmrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1495de2362d3Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 14967821949aSmrg $SED -e "$lt_sed_naive_backslashify"` 1497de2362d3Smrg else 1498de2362d3Smrg func_convert_core_file_wine_to_w32_result= 1499de2362d3Smrg fi 1500de2362d3Smrg fi 1501de2362d3Smrg} 1502de2362d3Smrg# end: func_convert_core_file_wine_to_w32 1503de2362d3Smrg 1504de2362d3Smrg 1505de2362d3Smrg# func_convert_core_path_wine_to_w32 ARG 1506de2362d3Smrg# Helper function used by path conversion functions when $build is *nix, and 1507de2362d3Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1508de2362d3Smrg# configured wine environment available, with the winepath program in $build's 1509de2362d3Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 1510de2362d3Smrg# 1511de2362d3Smrg# ARG is path to be converted from $build format to win32. 1512de2362d3Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 1513de2362d3Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 1514de2362d3Smrg# are convertible, then the result may be empty. 1515de2362d3Smrgfunc_convert_core_path_wine_to_w32 () 1516de2362d3Smrg{ 15177821949aSmrg $opt_debug 1518de2362d3Smrg # unfortunately, winepath doesn't convert paths, only file names 15197821949aSmrg func_convert_core_path_wine_to_w32_result="" 1520de2362d3Smrg if test -n "$1"; then 1521de2362d3Smrg oldIFS=$IFS 1522de2362d3Smrg IFS=: 1523de2362d3Smrg for func_convert_core_path_wine_to_w32_f in $1; do 1524de2362d3Smrg IFS=$oldIFS 1525de2362d3Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 15267821949aSmrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1527de2362d3Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 15287821949aSmrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1529de2362d3Smrg else 1530de2362d3Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1531de2362d3Smrg fi 1532de2362d3Smrg fi 1533de2362d3Smrg done 1534de2362d3Smrg IFS=$oldIFS 1535de2362d3Smrg fi 1536de2362d3Smrg} 1537de2362d3Smrg# end: func_convert_core_path_wine_to_w32 1538de2362d3Smrg 1539de2362d3Smrg 1540de2362d3Smrg# func_cygpath ARGS... 1541de2362d3Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1542de2362d3Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1543de2362d3Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1544de2362d3Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 1545de2362d3Smrg# file name or path is assumed to be in w32 format, as previously converted 1546de2362d3Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1547de2362d3Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 1548de2362d3Smrg# Cygwin format). Returns an empty string on error. 1549de2362d3Smrg# 1550de2362d3Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 1551de2362d3Smrg# be converted. 1552de2362d3Smrg# 1553de2362d3Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1554de2362d3Smrg# environment variable; do not put it in $PATH. 1555de2362d3Smrgfunc_cygpath () 1556de2362d3Smrg{ 15577821949aSmrg $opt_debug 1558de2362d3Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1559de2362d3Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1560de2362d3Smrg if test "$?" -ne 0; then 1561de2362d3Smrg # on failure, ensure result is empty 1562de2362d3Smrg func_cygpath_result= 1563de2362d3Smrg fi 1564de2362d3Smrg else 1565de2362d3Smrg func_cygpath_result= 15667821949aSmrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1567de2362d3Smrg fi 1568de2362d3Smrg} 1569de2362d3Smrg#end: func_cygpath 1570de2362d3Smrg 1571de2362d3Smrg 1572de2362d3Smrg# func_convert_core_msys_to_w32 ARG 1573de2362d3Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 1574de2362d3Smrg# result in func_convert_core_msys_to_w32_result. 1575de2362d3Smrgfunc_convert_core_msys_to_w32 () 1576de2362d3Smrg{ 15777821949aSmrg $opt_debug 1578de2362d3Smrg # awkward: cmd appends spaces to result 1579de2362d3Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 15807821949aSmrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1581de2362d3Smrg} 1582de2362d3Smrg#end: func_convert_core_msys_to_w32 1583de2362d3Smrg 1584de2362d3Smrg 1585de2362d3Smrg# func_convert_file_check ARG1 ARG2 1586de2362d3Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 1587de2362d3Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 1588de2362d3Smrg# func_to_host_file_result to ARG1). 1589de2362d3Smrgfunc_convert_file_check () 1590de2362d3Smrg{ 15917821949aSmrg $opt_debug 15927821949aSmrg if test -z "$2" && test -n "$1" ; then 1593de2362d3Smrg func_error "Could not determine host file name corresponding to" 15947821949aSmrg func_error " \`$1'" 1595de2362d3Smrg func_error "Continuing, but uninstalled executables may not work." 1596de2362d3Smrg # Fallback: 15977821949aSmrg func_to_host_file_result="$1" 1598de2362d3Smrg fi 1599de2362d3Smrg} 1600de2362d3Smrg# end func_convert_file_check 1601de2362d3Smrg 1602de2362d3Smrg 1603de2362d3Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1604de2362d3Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 1605de2362d3Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1606de2362d3Smrg# func_to_host_file_result to a simplistic fallback value (see below). 1607de2362d3Smrgfunc_convert_path_check () 1608de2362d3Smrg{ 16097821949aSmrg $opt_debug 1610de2362d3Smrg if test -z "$4" && test -n "$3"; then 1611de2362d3Smrg func_error "Could not determine the host path corresponding to" 16127821949aSmrg func_error " \`$3'" 1613de2362d3Smrg func_error "Continuing, but uninstalled executables may not work." 1614de2362d3Smrg # Fallback. This is a deliberately simplistic "conversion" and 1615de2362d3Smrg # should not be "improved". See libtool.info. 1616de2362d3Smrg if test "x$1" != "x$2"; then 1617de2362d3Smrg lt_replace_pathsep_chars="s|$1|$2|g" 1618de2362d3Smrg func_to_host_path_result=`echo "$3" | 1619de2362d3Smrg $SED -e "$lt_replace_pathsep_chars"` 1620de2362d3Smrg else 16217821949aSmrg func_to_host_path_result="$3" 1622de2362d3Smrg fi 1623de2362d3Smrg fi 1624de2362d3Smrg} 1625de2362d3Smrg# end func_convert_path_check 1626de2362d3Smrg 1627de2362d3Smrg 1628de2362d3Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1629de2362d3Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1630de2362d3Smrg# and appending REPL if ORIG matches BACKPAT. 1631de2362d3Smrgfunc_convert_path_front_back_pathsep () 1632de2362d3Smrg{ 16337821949aSmrg $opt_debug 1634de2362d3Smrg case $4 in 16357821949aSmrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1636de2362d3Smrg ;; 1637de2362d3Smrg esac 1638de2362d3Smrg case $4 in 1639de2362d3Smrg $2 ) func_append func_to_host_path_result "$3" 1640de2362d3Smrg ;; 1641de2362d3Smrg esac 1642de2362d3Smrg} 1643de2362d3Smrg# end func_convert_path_front_back_pathsep 1644de2362d3Smrg 1645de2362d3Smrg 1646de2362d3Smrg################################################## 1647de2362d3Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 1648de2362d3Smrg################################################## 16497821949aSmrg# invoked via `$to_host_file_cmd ARG' 1650de2362d3Smrg# 1651de2362d3Smrg# In each case, ARG is the path to be converted from $build to $host format. 1652de2362d3Smrg# Result will be available in $func_to_host_file_result. 1653de2362d3Smrg 1654de2362d3Smrg 1655de2362d3Smrg# func_to_host_file ARG 1656de2362d3Smrg# Converts the file name ARG from $build format to $host format. Return result 1657de2362d3Smrg# in func_to_host_file_result. 1658de2362d3Smrgfunc_to_host_file () 1659de2362d3Smrg{ 16607821949aSmrg $opt_debug 1661de2362d3Smrg $to_host_file_cmd "$1" 1662de2362d3Smrg} 1663de2362d3Smrg# end func_to_host_file 1664de2362d3Smrg 1665de2362d3Smrg 1666de2362d3Smrg# func_to_tool_file ARG LAZY 1667de2362d3Smrg# converts the file name ARG from $build format to toolchain format. Return 1668de2362d3Smrg# result in func_to_tool_file_result. If the conversion in use is listed 1669de2362d3Smrg# in (the comma separated) LAZY, no conversion takes place. 1670de2362d3Smrgfunc_to_tool_file () 1671de2362d3Smrg{ 16727821949aSmrg $opt_debug 1673de2362d3Smrg case ,$2, in 1674de2362d3Smrg *,"$to_tool_file_cmd",*) 1675de2362d3Smrg func_to_tool_file_result=$1 1676de2362d3Smrg ;; 1677de2362d3Smrg *) 1678de2362d3Smrg $to_tool_file_cmd "$1" 1679de2362d3Smrg func_to_tool_file_result=$func_to_host_file_result 1680de2362d3Smrg ;; 1681de2362d3Smrg esac 1682de2362d3Smrg} 1683de2362d3Smrg# end func_to_tool_file 1684de2362d3Smrg 1685de2362d3Smrg 1686de2362d3Smrg# func_convert_file_noop ARG 1687de2362d3Smrg# Copy ARG to func_to_host_file_result. 1688de2362d3Smrgfunc_convert_file_noop () 1689de2362d3Smrg{ 16907821949aSmrg func_to_host_file_result="$1" 1691de2362d3Smrg} 1692de2362d3Smrg# end func_convert_file_noop 1693de2362d3Smrg 1694de2362d3Smrg 1695de2362d3Smrg# func_convert_file_msys_to_w32 ARG 1696de2362d3Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1697de2362d3Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 1698de2362d3Smrg# func_to_host_file_result. 1699de2362d3Smrgfunc_convert_file_msys_to_w32 () 1700de2362d3Smrg{ 17017821949aSmrg $opt_debug 17027821949aSmrg func_to_host_file_result="$1" 1703de2362d3Smrg if test -n "$1"; then 1704de2362d3Smrg func_convert_core_msys_to_w32 "$1" 17057821949aSmrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1706de2362d3Smrg fi 1707de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1708de2362d3Smrg} 1709de2362d3Smrg# end func_convert_file_msys_to_w32 1710de2362d3Smrg 1711de2362d3Smrg 1712de2362d3Smrg# func_convert_file_cygwin_to_w32 ARG 1713de2362d3Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 1714de2362d3Smrg# func_to_host_file_result. 1715de2362d3Smrgfunc_convert_file_cygwin_to_w32 () 1716de2362d3Smrg{ 17177821949aSmrg $opt_debug 17187821949aSmrg func_to_host_file_result="$1" 1719de2362d3Smrg if test -n "$1"; then 1720de2362d3Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1721de2362d3Smrg # LT_CYGPATH in this case. 1722de2362d3Smrg func_to_host_file_result=`cygpath -m "$1"` 1723de2362d3Smrg fi 1724de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1725de2362d3Smrg} 1726de2362d3Smrg# end func_convert_file_cygwin_to_w32 1727de2362d3Smrg 1728de2362d3Smrg 1729de2362d3Smrg# func_convert_file_nix_to_w32 ARG 1730de2362d3Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 1731de2362d3Smrg# and a working winepath. Returns result in func_to_host_file_result. 1732de2362d3Smrgfunc_convert_file_nix_to_w32 () 1733de2362d3Smrg{ 17347821949aSmrg $opt_debug 17357821949aSmrg func_to_host_file_result="$1" 1736de2362d3Smrg if test -n "$1"; then 1737de2362d3Smrg func_convert_core_file_wine_to_w32 "$1" 17387821949aSmrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1739de2362d3Smrg fi 1740de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1741de2362d3Smrg} 1742de2362d3Smrg# end func_convert_file_nix_to_w32 1743de2362d3Smrg 1744de2362d3Smrg 1745de2362d3Smrg# func_convert_file_msys_to_cygwin ARG 1746de2362d3Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1747de2362d3Smrg# Returns result in func_to_host_file_result. 1748de2362d3Smrgfunc_convert_file_msys_to_cygwin () 1749de2362d3Smrg{ 17507821949aSmrg $opt_debug 17517821949aSmrg func_to_host_file_result="$1" 1752de2362d3Smrg if test -n "$1"; then 1753de2362d3Smrg func_convert_core_msys_to_w32 "$1" 1754de2362d3Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 17557821949aSmrg func_to_host_file_result="$func_cygpath_result" 1756de2362d3Smrg fi 1757de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1758de2362d3Smrg} 1759de2362d3Smrg# end func_convert_file_msys_to_cygwin 1760de2362d3Smrg 1761de2362d3Smrg 1762de2362d3Smrg# func_convert_file_nix_to_cygwin ARG 1763de2362d3Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1764de2362d3Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1765de2362d3Smrg# in func_to_host_file_result. 1766de2362d3Smrgfunc_convert_file_nix_to_cygwin () 1767de2362d3Smrg{ 17687821949aSmrg $opt_debug 17697821949aSmrg func_to_host_file_result="$1" 1770de2362d3Smrg if test -n "$1"; then 1771de2362d3Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1772de2362d3Smrg func_convert_core_file_wine_to_w32 "$1" 1773de2362d3Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 17747821949aSmrg func_to_host_file_result="$func_cygpath_result" 1775de2362d3Smrg fi 1776de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1777de2362d3Smrg} 1778de2362d3Smrg# end func_convert_file_nix_to_cygwin 1779de2362d3Smrg 1780de2362d3Smrg 1781de2362d3Smrg############################################# 1782de2362d3Smrg# $build to $host PATH CONVERSION FUNCTIONS # 1783de2362d3Smrg############################################# 17847821949aSmrg# invoked via `$to_host_path_cmd ARG' 1785de2362d3Smrg# 1786de2362d3Smrg# In each case, ARG is the path to be converted from $build to $host format. 1787de2362d3Smrg# The result will be available in $func_to_host_path_result. 1788de2362d3Smrg# 1789de2362d3Smrg# Path separators are also converted from $build format to $host format. If 1790de2362d3Smrg# ARG begins or ends with a path separator character, it is preserved (but 1791de2362d3Smrg# converted to $host format) on output. 1792de2362d3Smrg# 1793de2362d3Smrg# All path conversion functions are named using the following convention: 1794de2362d3Smrg# file name conversion function : func_convert_file_X_to_Y () 1795de2362d3Smrg# path conversion function : func_convert_path_X_to_Y () 1796de2362d3Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 1797de2362d3Smrg# same. If conversion functions are added for new $build/$host combinations, 1798de2362d3Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1799de2362d3Smrg# will break. 1800de2362d3Smrg 1801de2362d3Smrg 1802de2362d3Smrg# func_init_to_host_path_cmd 1803de2362d3Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1804de2362d3Smrg# appropriate value, based on the value of $to_host_file_cmd. 1805de2362d3Smrgto_host_path_cmd= 1806de2362d3Smrgfunc_init_to_host_path_cmd () 1807de2362d3Smrg{ 18087821949aSmrg $opt_debug 1809de2362d3Smrg if test -z "$to_host_path_cmd"; then 1810de2362d3Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 18117821949aSmrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 1812de2362d3Smrg fi 1813de2362d3Smrg} 1814de2362d3Smrg 1815de2362d3Smrg 1816de2362d3Smrg# func_to_host_path ARG 1817de2362d3Smrg# Converts the path ARG from $build format to $host format. Return result 1818de2362d3Smrg# in func_to_host_path_result. 1819de2362d3Smrgfunc_to_host_path () 1820de2362d3Smrg{ 18217821949aSmrg $opt_debug 1822de2362d3Smrg func_init_to_host_path_cmd 1823de2362d3Smrg $to_host_path_cmd "$1" 1824de2362d3Smrg} 1825de2362d3Smrg# end func_to_host_path 1826de2362d3Smrg 1827de2362d3Smrg 1828de2362d3Smrg# func_convert_path_noop ARG 1829de2362d3Smrg# Copy ARG to func_to_host_path_result. 1830de2362d3Smrgfunc_convert_path_noop () 1831de2362d3Smrg{ 18327821949aSmrg func_to_host_path_result="$1" 1833de2362d3Smrg} 1834de2362d3Smrg# end func_convert_path_noop 1835de2362d3Smrg 1836de2362d3Smrg 1837de2362d3Smrg# func_convert_path_msys_to_w32 ARG 1838de2362d3Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1839de2362d3Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 1840de2362d3Smrg# func_to_host_path_result. 1841de2362d3Smrgfunc_convert_path_msys_to_w32 () 1842de2362d3Smrg{ 18437821949aSmrg $opt_debug 18447821949aSmrg func_to_host_path_result="$1" 1845de2362d3Smrg if test -n "$1"; then 1846de2362d3Smrg # Remove leading and trailing path separator characters from ARG. MSYS 1847de2362d3Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1848de2362d3Smrg # and winepath ignores them completely. 1849de2362d3Smrg func_stripname : : "$1" 1850de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 1851de2362d3Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 18527821949aSmrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1853de2362d3Smrg func_convert_path_check : ";" \ 1854de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1855de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1856de2362d3Smrg fi 1857de2362d3Smrg} 1858de2362d3Smrg# end func_convert_path_msys_to_w32 1859de2362d3Smrg 1860de2362d3Smrg 1861de2362d3Smrg# func_convert_path_cygwin_to_w32 ARG 1862de2362d3Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 1863de2362d3Smrg# func_to_host_file_result. 1864de2362d3Smrgfunc_convert_path_cygwin_to_w32 () 1865de2362d3Smrg{ 18667821949aSmrg $opt_debug 18677821949aSmrg func_to_host_path_result="$1" 1868de2362d3Smrg if test -n "$1"; then 1869de2362d3Smrg # See func_convert_path_msys_to_w32: 1870de2362d3Smrg func_stripname : : "$1" 1871de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 1872de2362d3Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1873de2362d3Smrg func_convert_path_check : ";" \ 1874de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1875de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1876de2362d3Smrg fi 1877de2362d3Smrg} 1878de2362d3Smrg# end func_convert_path_cygwin_to_w32 1879de2362d3Smrg 1880de2362d3Smrg 1881de2362d3Smrg# func_convert_path_nix_to_w32 ARG 1882de2362d3Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 1883de2362d3Smrg# a working winepath. Returns result in func_to_host_file_result. 1884de2362d3Smrgfunc_convert_path_nix_to_w32 () 1885de2362d3Smrg{ 18867821949aSmrg $opt_debug 18877821949aSmrg func_to_host_path_result="$1" 1888de2362d3Smrg if test -n "$1"; then 1889de2362d3Smrg # See func_convert_path_msys_to_w32: 1890de2362d3Smrg func_stripname : : "$1" 1891de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 1892de2362d3Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 18937821949aSmrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1894de2362d3Smrg func_convert_path_check : ";" \ 1895de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1896de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1897de2362d3Smrg fi 1898de2362d3Smrg} 1899de2362d3Smrg# end func_convert_path_nix_to_w32 1900de2362d3Smrg 1901de2362d3Smrg 1902de2362d3Smrg# func_convert_path_msys_to_cygwin ARG 1903de2362d3Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1904de2362d3Smrg# Returns result in func_to_host_file_result. 1905de2362d3Smrgfunc_convert_path_msys_to_cygwin () 1906de2362d3Smrg{ 19077821949aSmrg $opt_debug 19087821949aSmrg func_to_host_path_result="$1" 1909de2362d3Smrg if test -n "$1"; then 1910de2362d3Smrg # See func_convert_path_msys_to_w32: 1911de2362d3Smrg func_stripname : : "$1" 1912de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 1913de2362d3Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1914de2362d3Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 19157821949aSmrg func_to_host_path_result="$func_cygpath_result" 1916de2362d3Smrg func_convert_path_check : : \ 1917de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1918de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1919de2362d3Smrg fi 1920de2362d3Smrg} 1921de2362d3Smrg# end func_convert_path_msys_to_cygwin 1922de2362d3Smrg 1923de2362d3Smrg 1924de2362d3Smrg# func_convert_path_nix_to_cygwin ARG 1925de2362d3Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1926de2362d3Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1927de2362d3Smrg# func_to_host_file_result. 1928de2362d3Smrgfunc_convert_path_nix_to_cygwin () 1929de2362d3Smrg{ 19307821949aSmrg $opt_debug 19317821949aSmrg func_to_host_path_result="$1" 1932de2362d3Smrg if test -n "$1"; then 1933de2362d3Smrg # Remove leading and trailing path separator characters from 1934de2362d3Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 1935de2362d3Smrg # into '.;' and ';.', and winepath ignores them completely. 1936de2362d3Smrg func_stripname : : "$1" 1937de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 1938de2362d3Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1939de2362d3Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 19407821949aSmrg func_to_host_path_result="$func_cygpath_result" 1941de2362d3Smrg func_convert_path_check : : \ 1942de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1943de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1944de2362d3Smrg fi 1945de2362d3Smrg} 1946de2362d3Smrg# end func_convert_path_nix_to_cygwin 1947de2362d3Smrg 1948de2362d3Smrg 1949de2362d3Smrg# func_mode_compile arg... 1950de2362d3Smrgfunc_mode_compile () 1951de2362d3Smrg{ 19527821949aSmrg $opt_debug 1953de2362d3Smrg # Get the compilation command and the source file. 1954de2362d3Smrg base_compile= 19557821949aSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956de2362d3Smrg suppress_opt=yes 1957de2362d3Smrg suppress_output= 1958de2362d3Smrg arg_mode=normal 1959de2362d3Smrg libobj= 1960de2362d3Smrg later= 1961de2362d3Smrg pie_flag= 1962de2362d3Smrg 1963de2362d3Smrg for arg 1964de2362d3Smrg do 1965de2362d3Smrg case $arg_mode in 1966de2362d3Smrg arg ) 1967de2362d3Smrg # do not "continue". Instead, add this to base_compile 19687821949aSmrg lastarg="$arg" 1969de2362d3Smrg arg_mode=normal 1970de2362d3Smrg ;; 1971de2362d3Smrg 1972de2362d3Smrg target ) 19737821949aSmrg libobj="$arg" 1974de2362d3Smrg arg_mode=normal 1975de2362d3Smrg continue 1976de2362d3Smrg ;; 1977de2362d3Smrg 1978de2362d3Smrg normal ) 1979de2362d3Smrg # Accept any command-line options. 1980de2362d3Smrg case $arg in 1981de2362d3Smrg -o) 1982de2362d3Smrg test -n "$libobj" && \ 19837821949aSmrg func_fatal_error "you cannot specify \`-o' more than once" 1984de2362d3Smrg arg_mode=target 1985de2362d3Smrg continue 1986de2362d3Smrg ;; 1987de2362d3Smrg 1988de2362d3Smrg -pie | -fpie | -fPIE) 1989de2362d3Smrg func_append pie_flag " $arg" 1990de2362d3Smrg continue 1991de2362d3Smrg ;; 1992de2362d3Smrg 1993de2362d3Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1994de2362d3Smrg func_append later " $arg" 1995de2362d3Smrg continue 1996de2362d3Smrg ;; 1997de2362d3Smrg 1998de2362d3Smrg -no-suppress) 1999de2362d3Smrg suppress_opt=no 2000de2362d3Smrg continue 2001de2362d3Smrg ;; 2002de2362d3Smrg 2003de2362d3Smrg -Xcompiler) 2004de2362d3Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 2005de2362d3Smrg continue # The current "srcfile" will either be retained or 2006de2362d3Smrg ;; # replaced later. I would guess that would be a bug. 2007de2362d3Smrg 2008de2362d3Smrg -Wc,*) 2009de2362d3Smrg func_stripname '-Wc,' '' "$arg" 2010de2362d3Smrg args=$func_stripname_result 2011de2362d3Smrg lastarg= 20127821949aSmrg save_ifs="$IFS"; IFS=',' 2013de2362d3Smrg for arg in $args; do 20147821949aSmrg IFS="$save_ifs" 2015de2362d3Smrg func_append_quoted lastarg "$arg" 2016de2362d3Smrg done 20177821949aSmrg IFS="$save_ifs" 2018de2362d3Smrg func_stripname ' ' '' "$lastarg" 2019de2362d3Smrg lastarg=$func_stripname_result 2020de2362d3Smrg 2021de2362d3Smrg # Add the arguments to base_compile. 2022de2362d3Smrg func_append base_compile " $lastarg" 2023de2362d3Smrg continue 2024de2362d3Smrg ;; 2025de2362d3Smrg 2026de2362d3Smrg *) 2027de2362d3Smrg # Accept the current argument as the source file. 2028de2362d3Smrg # The previous "srcfile" becomes the current argument. 2029de2362d3Smrg # 20307821949aSmrg lastarg="$srcfile" 20317821949aSmrg srcfile="$arg" 2032de2362d3Smrg ;; 2033de2362d3Smrg esac # case $arg 2034de2362d3Smrg ;; 2035de2362d3Smrg esac # case $arg_mode 2036de2362d3Smrg 2037de2362d3Smrg # Aesthetically quote the previous argument. 2038de2362d3Smrg func_append_quoted base_compile "$lastarg" 2039de2362d3Smrg done # for arg 2040de2362d3Smrg 2041de2362d3Smrg case $arg_mode in 2042de2362d3Smrg arg) 2043de2362d3Smrg func_fatal_error "you must specify an argument for -Xcompile" 2044de2362d3Smrg ;; 2045de2362d3Smrg target) 20467821949aSmrg func_fatal_error "you must specify a target with \`-o'" 2047de2362d3Smrg ;; 2048de2362d3Smrg *) 2049de2362d3Smrg # Get the name of the library object. 2050de2362d3Smrg test -z "$libobj" && { 2051de2362d3Smrg func_basename "$srcfile" 20527821949aSmrg libobj="$func_basename_result" 2053de2362d3Smrg } 2054de2362d3Smrg ;; 2055de2362d3Smrg esac 2056de2362d3Smrg 2057de2362d3Smrg # Recognize several different file suffixes. 2058de2362d3Smrg # If the user specifies -o file.o, it is replaced with file.lo 2059de2362d3Smrg case $libobj in 2060de2362d3Smrg *.[cCFSifmso] | \ 2061de2362d3Smrg *.ada | *.adb | *.ads | *.asm | \ 2062de2362d3Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063de2362d3Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064de2362d3Smrg func_xform "$libobj" 2065de2362d3Smrg libobj=$func_xform_result 2066de2362d3Smrg ;; 2067de2362d3Smrg esac 2068de2362d3Smrg 2069de2362d3Smrg case $libobj in 2070de2362d3Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071de2362d3Smrg *) 20727821949aSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2073de2362d3Smrg ;; 2074de2362d3Smrg esac 2075de2362d3Smrg 2076de2362d3Smrg func_infer_tag $base_compile 2077de2362d3Smrg 2078de2362d3Smrg for arg in $later; do 2079de2362d3Smrg case $arg in 2080de2362d3Smrg -shared) 20817821949aSmrg test "$build_libtool_libs" != yes && \ 20827821949aSmrg func_fatal_configuration "can not build a shared library" 2083de2362d3Smrg build_old_libs=no 2084de2362d3Smrg continue 2085de2362d3Smrg ;; 2086de2362d3Smrg 2087de2362d3Smrg -static) 2088de2362d3Smrg build_libtool_libs=no 2089de2362d3Smrg build_old_libs=yes 2090de2362d3Smrg continue 2091de2362d3Smrg ;; 2092de2362d3Smrg 2093de2362d3Smrg -prefer-pic) 2094de2362d3Smrg pic_mode=yes 2095de2362d3Smrg continue 2096de2362d3Smrg ;; 2097de2362d3Smrg 2098de2362d3Smrg -prefer-non-pic) 2099de2362d3Smrg pic_mode=no 2100de2362d3Smrg continue 2101de2362d3Smrg ;; 2102de2362d3Smrg esac 2103de2362d3Smrg done 2104de2362d3Smrg 2105de2362d3Smrg func_quote_for_eval "$libobj" 2106de2362d3Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107de2362d3Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 21087821949aSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109de2362d3Smrg func_dirname_and_basename "$obj" "/" "" 21107821949aSmrg objname="$func_basename_result" 21117821949aSmrg xdir="$func_dirname_result" 21127821949aSmrg lobj=${xdir}$objdir/$objname 2113de2362d3Smrg 2114de2362d3Smrg test -z "$base_compile" && \ 2115de2362d3Smrg func_fatal_help "you must specify a compilation command" 2116de2362d3Smrg 2117de2362d3Smrg # Delete any leftover library objects. 21187821949aSmrg if test "$build_old_libs" = yes; then 2119de2362d3Smrg removelist="$obj $lobj $libobj ${libobj}T" 2120de2362d3Smrg else 2121de2362d3Smrg removelist="$lobj $libobj ${libobj}T" 2122de2362d3Smrg fi 2123de2362d3Smrg 2124de2362d3Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 2125de2362d3Smrg case $host_os in 2126de2362d3Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2127de2362d3Smrg pic_mode=default 2128de2362d3Smrg ;; 2129de2362d3Smrg esac 21307821949aSmrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131de2362d3Smrg # non-PIC code in shared libraries is not supported 2132de2362d3Smrg pic_mode=default 2133de2362d3Smrg fi 2134de2362d3Smrg 2135de2362d3Smrg # Calculate the filename of the output object if compiler does 2136de2362d3Smrg # not support -o with -c 21377821949aSmrg if test "$compiler_c_o" = no; then 21387821949aSmrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 21397821949aSmrg lockfile="$output_obj.lock" 2140de2362d3Smrg else 2141de2362d3Smrg output_obj= 2142de2362d3Smrg need_locks=no 2143de2362d3Smrg lockfile= 2144de2362d3Smrg fi 2145de2362d3Smrg 2146de2362d3Smrg # Lock this critical section if it is needed 2147de2362d3Smrg # We use this script file to make the link, it avoids creating a new file 21487821949aSmrg if test "$need_locks" = yes; then 2149de2362d3Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150de2362d3Smrg func_echo "Waiting for $lockfile to be removed" 2151de2362d3Smrg sleep 2 2152de2362d3Smrg done 21537821949aSmrg elif test "$need_locks" = warn; then 2154de2362d3Smrg if test -f "$lockfile"; then 2155de2362d3Smrg $ECHO "\ 2156de2362d3Smrg*** ERROR, $lockfile exists and contains: 2157de2362d3Smrg`cat $lockfile 2>/dev/null` 2158de2362d3Smrg 2159de2362d3SmrgThis indicates that another process is trying to use the same 2160de2362d3Smrgtemporary object file, and libtool could not work around it because 21617821949aSmrgyour compiler does not support \`-c' and \`-o' together. If you 2162de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 2163de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better 2164de2362d3Smrgcompiler." 2165de2362d3Smrg 2166de2362d3Smrg $opt_dry_run || $RM $removelist 2167de2362d3Smrg exit $EXIT_FAILURE 2168de2362d3Smrg fi 2169de2362d3Smrg func_append removelist " $output_obj" 2170de2362d3Smrg $ECHO "$srcfile" > "$lockfile" 2171de2362d3Smrg fi 2172de2362d3Smrg 2173de2362d3Smrg $opt_dry_run || $RM $removelist 2174de2362d3Smrg func_append removelist " $lockfile" 2175de2362d3Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176de2362d3Smrg 2177de2362d3Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2178de2362d3Smrg srcfile=$func_to_tool_file_result 2179de2362d3Smrg func_quote_for_eval "$srcfile" 2180de2362d3Smrg qsrcfile=$func_quote_for_eval_result 2181de2362d3Smrg 2182de2362d3Smrg # Only build a PIC object if we are building libtool libraries. 21837821949aSmrg if test "$build_libtool_libs" = yes; then 2184de2362d3Smrg # Without this assignment, base_compile gets emptied. 2185de2362d3Smrg fbsd_hideous_sh_bug=$base_compile 2186de2362d3Smrg 21877821949aSmrg if test "$pic_mode" != no; then 2188de2362d3Smrg command="$base_compile $qsrcfile $pic_flag" 2189de2362d3Smrg else 2190de2362d3Smrg # Don't build PIC code 2191de2362d3Smrg command="$base_compile $qsrcfile" 2192de2362d3Smrg fi 2193de2362d3Smrg 2194de2362d3Smrg func_mkdir_p "$xdir$objdir" 2195de2362d3Smrg 2196de2362d3Smrg if test -z "$output_obj"; then 2197de2362d3Smrg # Place PIC objects in $objdir 2198de2362d3Smrg func_append command " -o $lobj" 2199de2362d3Smrg fi 2200de2362d3Smrg 2201de2362d3Smrg func_show_eval_locale "$command" \ 2202de2362d3Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203de2362d3Smrg 22047821949aSmrg if test "$need_locks" = warn && 2205de2362d3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206de2362d3Smrg $ECHO "\ 2207de2362d3Smrg*** ERROR, $lockfile contains: 2208de2362d3Smrg`cat $lockfile 2>/dev/null` 2209de2362d3Smrg 2210de2362d3Smrgbut it should contain: 2211de2362d3Smrg$srcfile 2212de2362d3Smrg 2213de2362d3SmrgThis indicates that another process is trying to use the same 2214de2362d3Smrgtemporary object file, and libtool could not work around it because 22157821949aSmrgyour compiler does not support \`-c' and \`-o' together. If you 2216de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 2217de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better 2218de2362d3Smrgcompiler." 2219de2362d3Smrg 2220de2362d3Smrg $opt_dry_run || $RM $removelist 2221de2362d3Smrg exit $EXIT_FAILURE 2222de2362d3Smrg fi 2223de2362d3Smrg 2224de2362d3Smrg # Just move the object if needed, then go on to compile the next one 2225de2362d3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226de2362d3Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227de2362d3Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228de2362d3Smrg fi 2229de2362d3Smrg 2230de2362d3Smrg # Allow error messages only from the first compilation. 22317821949aSmrg if test "$suppress_opt" = yes; then 2232de2362d3Smrg suppress_output=' >/dev/null 2>&1' 2233de2362d3Smrg fi 2234de2362d3Smrg fi 2235de2362d3Smrg 2236de2362d3Smrg # Only build a position-dependent object if we build old libraries. 22377821949aSmrg if test "$build_old_libs" = yes; then 22387821949aSmrg if test "$pic_mode" != yes; then 2239de2362d3Smrg # Don't build PIC code 2240de2362d3Smrg command="$base_compile $qsrcfile$pie_flag" 2241de2362d3Smrg else 2242de2362d3Smrg command="$base_compile $qsrcfile $pic_flag" 2243de2362d3Smrg fi 22447821949aSmrg if test "$compiler_c_o" = yes; then 2245de2362d3Smrg func_append command " -o $obj" 2246de2362d3Smrg fi 2247de2362d3Smrg 2248de2362d3Smrg # Suppress compiler output if we already did a PIC compilation. 2249de2362d3Smrg func_append command "$suppress_output" 2250de2362d3Smrg func_show_eval_locale "$command" \ 2251de2362d3Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252de2362d3Smrg 22537821949aSmrg if test "$need_locks" = warn && 2254de2362d3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255de2362d3Smrg $ECHO "\ 2256de2362d3Smrg*** ERROR, $lockfile contains: 2257de2362d3Smrg`cat $lockfile 2>/dev/null` 2258de2362d3Smrg 2259de2362d3Smrgbut it should contain: 2260de2362d3Smrg$srcfile 2261de2362d3Smrg 2262de2362d3SmrgThis indicates that another process is trying to use the same 2263de2362d3Smrgtemporary object file, and libtool could not work around it because 22647821949aSmrgyour compiler does not support \`-c' and \`-o' together. If you 2265de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 2266de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better 2267de2362d3Smrgcompiler." 2268de2362d3Smrg 2269de2362d3Smrg $opt_dry_run || $RM $removelist 2270de2362d3Smrg exit $EXIT_FAILURE 2271de2362d3Smrg fi 2272de2362d3Smrg 2273de2362d3Smrg # Just move the object if needed 2274de2362d3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275de2362d3Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276de2362d3Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277de2362d3Smrg fi 2278de2362d3Smrg fi 2279de2362d3Smrg 2280de2362d3Smrg $opt_dry_run || { 2281de2362d3Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282de2362d3Smrg 2283de2362d3Smrg # Unlock the critical section if it was locked 22847821949aSmrg if test "$need_locks" != no; then 2285de2362d3Smrg removelist=$lockfile 2286de2362d3Smrg $RM "$lockfile" 2287de2362d3Smrg fi 2288de2362d3Smrg } 2289de2362d3Smrg 2290de2362d3Smrg exit $EXIT_SUCCESS 2291de2362d3Smrg} 2292de2362d3Smrg 2293de2362d3Smrg$opt_help || { 22947821949aSmrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295de2362d3Smrg} 2296de2362d3Smrg 2297de2362d3Smrgfunc_mode_help () 2298de2362d3Smrg{ 2299de2362d3Smrg # We need to display help for each of the modes. 2300de2362d3Smrg case $opt_mode in 2301de2362d3Smrg "") 2302de2362d3Smrg # Generic help is extracted from the usage comments 2303de2362d3Smrg # at the start of this file. 2304de2362d3Smrg func_help 2305de2362d3Smrg ;; 2306de2362d3Smrg 2307de2362d3Smrg clean) 2308de2362d3Smrg $ECHO \ 2309de2362d3Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310de2362d3Smrg 2311de2362d3SmrgRemove files from the build directory. 2312de2362d3Smrg 2313de2362d3SmrgRM is the name of the program to use to delete files associated with each FILE 23147821949aSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315de2362d3Smrgto RM. 2316de2362d3Smrg 2317de2362d3SmrgIf FILE is a libtool library, object or program, all the files associated 2318de2362d3Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319de2362d3Smrg ;; 2320de2362d3Smrg 2321de2362d3Smrg compile) 2322de2362d3Smrg $ECHO \ 2323de2362d3Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324de2362d3Smrg 2325de2362d3SmrgCompile a source file into a libtool library object. 2326de2362d3Smrg 2327de2362d3SmrgThis mode accepts the following additional options: 2328de2362d3Smrg 2329de2362d3Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330de2362d3Smrg -no-suppress do not suppress compiler output for multiple passes 2331de2362d3Smrg -prefer-pic try to build PIC objects only 2332de2362d3Smrg -prefer-non-pic try to build non-PIC objects only 23337821949aSmrg -shared do not build a \`.o' file suitable for static linking 23347821949aSmrg -static only build a \`.o' file suitable for static linking 2335de2362d3Smrg -Wc,FLAG pass FLAG directly to the compiler 2336de2362d3Smrg 23377821949aSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338de2362d3Smrgfrom the given SOURCEFILE. 2339de2362d3Smrg 2340de2362d3SmrgThe output file name is determined by removing the directory component from 23417821949aSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 23427821949aSmrglibrary object suffix, \`.lo'." 2343de2362d3Smrg ;; 2344de2362d3Smrg 2345de2362d3Smrg execute) 2346de2362d3Smrg $ECHO \ 2347de2362d3Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348de2362d3Smrg 2349de2362d3SmrgAutomatically set library path, then run a program. 2350de2362d3Smrg 2351de2362d3SmrgThis mode accepts the following additional options: 2352de2362d3Smrg 2353de2362d3Smrg -dlopen FILE add the directory containing FILE to the library path 2354de2362d3Smrg 23557821949aSmrgThis mode sets the library path environment variable according to \`-dlopen' 2356de2362d3Smrgflags. 2357de2362d3Smrg 2358de2362d3SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359de2362d3Smrginto their corresponding uninstalled binary, and any of their required library 2360de2362d3Smrgdirectories are added to the library path. 2361de2362d3Smrg 2362de2362d3SmrgThen, COMMAND is executed, with ARGS as arguments." 2363de2362d3Smrg ;; 2364de2362d3Smrg 2365de2362d3Smrg finish) 2366de2362d3Smrg $ECHO \ 2367de2362d3Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368de2362d3Smrg 2369de2362d3SmrgComplete the installation of libtool libraries. 2370de2362d3Smrg 2371de2362d3SmrgEach LIBDIR is a directory that contains libtool libraries. 2372de2362d3Smrg 2373de2362d3SmrgThe commands that this mode executes may require superuser privileges. Use 23747821949aSmrgthe \`--dry-run' option if you just want to see what would be executed." 2375de2362d3Smrg ;; 2376de2362d3Smrg 2377de2362d3Smrg install) 2378de2362d3Smrg $ECHO \ 2379de2362d3Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380de2362d3Smrg 2381de2362d3SmrgInstall executables or libraries. 2382de2362d3Smrg 2383de2362d3SmrgINSTALL-COMMAND is the installation command. The first component should be 23847821949aSmrgeither the \`install' or \`cp' program. 2385de2362d3Smrg 2386de2362d3SmrgThe following components of INSTALL-COMMAND are treated specially: 2387de2362d3Smrg 2388de2362d3Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389de2362d3Smrg 2390de2362d3SmrgThe rest of the components are interpreted as arguments to that command (only 2391de2362d3SmrgBSD-compatible install options are recognized)." 2392de2362d3Smrg ;; 2393de2362d3Smrg 2394de2362d3Smrg link) 2395de2362d3Smrg $ECHO \ 2396de2362d3Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397de2362d3Smrg 2398de2362d3SmrgLink object files or libraries together to form another library, or to 2399de2362d3Smrgcreate an executable program. 2400de2362d3Smrg 2401de2362d3SmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402de2362d3Smrga program from several object files. 2403de2362d3Smrg 2404de2362d3SmrgThe following components of LINK-COMMAND are treated specially: 2405de2362d3Smrg 2406de2362d3Smrg -all-static do not do any dynamic linking at all 2407de2362d3Smrg -avoid-version do not add a version suffix if possible 2408de2362d3Smrg -bindir BINDIR specify path to binaries directory (for systems where 2409de2362d3Smrg libraries must be found in the PATH setting at runtime) 24107821949aSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411de2362d3Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412de2362d3Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413de2362d3Smrg -export-symbols SYMFILE 2414de2362d3Smrg try to export only the symbols listed in SYMFILE 2415de2362d3Smrg -export-symbols-regex REGEX 2416de2362d3Smrg try to export only the symbols matching REGEX 2417de2362d3Smrg -LLIBDIR search LIBDIR for required installed libraries 2418de2362d3Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419de2362d3Smrg -module build a library that can dlopened 2420de2362d3Smrg -no-fast-install disable the fast-install mode 2421de2362d3Smrg -no-install link a not-installable executable 2422de2362d3Smrg -no-undefined declare that a library does not refer to external symbols 2423de2362d3Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 24247821949aSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425de2362d3Smrg -precious-files-regex REGEX 2426de2362d3Smrg don't remove output files matching REGEX 2427de2362d3Smrg -release RELEASE specify package release information 2428de2362d3Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429de2362d3Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430de2362d3Smrg -shared only do dynamic linking of libtool libraries 2431de2362d3Smrg -shrext SUFFIX override the standard shared library file extension 2432de2362d3Smrg -static do not do any dynamic linking of uninstalled libtool libraries 2433de2362d3Smrg -static-libtool-libs 2434de2362d3Smrg do not do any dynamic linking of libtool libraries 2435de2362d3Smrg -version-info CURRENT[:REVISION[:AGE]] 2436de2362d3Smrg specify library version info [each variable defaults to 0] 2437de2362d3Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 2438de2362d3Smrg -Wc,FLAG 2439de2362d3Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2440de2362d3Smrg -Wl,FLAG 2441de2362d3Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 2442de2362d3Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443de2362d3Smrg 24447821949aSmrgAll other options (arguments beginning with \`-') are ignored. 2445de2362d3Smrg 24467821949aSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447de2362d3Smrgtreated as uninstalled libtool libraries, other files are standard or library 2448de2362d3Smrgobject files. 2449de2362d3Smrg 24507821949aSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 24517821949aSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452de2362d3Smrgrequired, except when creating a convenience library. 2453de2362d3Smrg 24547821949aSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 24557821949aSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456de2362d3Smrg 24577821949aSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458de2362d3Smrgis created, otherwise an executable program is created." 2459de2362d3Smrg ;; 2460de2362d3Smrg 2461de2362d3Smrg uninstall) 2462de2362d3Smrg $ECHO \ 2463de2362d3Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464de2362d3Smrg 2465de2362d3SmrgRemove libraries from an installation directory. 2466de2362d3Smrg 2467de2362d3SmrgRM is the name of the program to use to delete files associated with each FILE 24687821949aSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469de2362d3Smrgto RM. 2470de2362d3Smrg 2471de2362d3SmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472de2362d3SmrgOtherwise, only FILE itself is deleted using RM." 2473de2362d3Smrg ;; 2474de2362d3Smrg 2475de2362d3Smrg *) 24767821949aSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477de2362d3Smrg ;; 2478de2362d3Smrg esac 2479de2362d3Smrg 2480de2362d3Smrg echo 24817821949aSmrg $ECHO "Try \`$progname --help' for more information about other modes." 2482de2362d3Smrg} 2483de2362d3Smrg 2484de2362d3Smrg# Now that we've collected a possible --mode arg, show help if necessary 2485de2362d3Smrgif $opt_help; then 24867821949aSmrg if test "$opt_help" = :; then 2487de2362d3Smrg func_mode_help 2488de2362d3Smrg else 2489de2362d3Smrg { 2490de2362d3Smrg func_help noexit 2491de2362d3Smrg for opt_mode in compile link execute install finish uninstall clean; do 2492de2362d3Smrg func_mode_help 2493de2362d3Smrg done 24947821949aSmrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2495de2362d3Smrg { 2496de2362d3Smrg func_help noexit 2497de2362d3Smrg for opt_mode in compile link execute install finish uninstall clean; do 2498de2362d3Smrg echo 2499de2362d3Smrg func_mode_help 2500de2362d3Smrg done 2501de2362d3Smrg } | 25027821949aSmrg sed '1d 2503de2362d3Smrg /^When reporting/,/^Report/{ 2504de2362d3Smrg H 2505de2362d3Smrg d 2506de2362d3Smrg } 2507de2362d3Smrg $x 2508de2362d3Smrg /information about other modes/d 2509de2362d3Smrg /more detailed .*MODE/d 2510de2362d3Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2511de2362d3Smrg fi 2512de2362d3Smrg exit $? 2513de2362d3Smrgfi 2514de2362d3Smrg 2515de2362d3Smrg 2516de2362d3Smrg# func_mode_execute arg... 2517de2362d3Smrgfunc_mode_execute () 2518de2362d3Smrg{ 25197821949aSmrg $opt_debug 2520de2362d3Smrg # The first argument is the command name. 25217821949aSmrg cmd="$nonopt" 2522de2362d3Smrg test -z "$cmd" && \ 2523de2362d3Smrg func_fatal_help "you must specify a COMMAND" 2524de2362d3Smrg 2525de2362d3Smrg # Handle -dlopen flags immediately. 2526de2362d3Smrg for file in $opt_dlopen; do 2527de2362d3Smrg test -f "$file" \ 25287821949aSmrg || func_fatal_help "\`$file' is not a file" 2529de2362d3Smrg 2530de2362d3Smrg dir= 2531de2362d3Smrg case $file in 2532de2362d3Smrg *.la) 2533de2362d3Smrg func_resolve_sysroot "$file" 2534de2362d3Smrg file=$func_resolve_sysroot_result 2535de2362d3Smrg 2536de2362d3Smrg # Check to see that this really is a libtool archive. 2537de2362d3Smrg func_lalib_unsafe_p "$file" \ 25387821949aSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2539de2362d3Smrg 2540de2362d3Smrg # Read the libtool library. 2541de2362d3Smrg dlname= 2542de2362d3Smrg library_names= 2543de2362d3Smrg func_source "$file" 2544de2362d3Smrg 2545de2362d3Smrg # Skip this library if it cannot be dlopened. 2546de2362d3Smrg if test -z "$dlname"; then 2547de2362d3Smrg # Warn if it was a shared library. 2548de2362d3Smrg test -n "$library_names" && \ 25497821949aSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550de2362d3Smrg continue 2551de2362d3Smrg fi 2552de2362d3Smrg 2553de2362d3Smrg func_dirname "$file" "" "." 25547821949aSmrg dir="$func_dirname_result" 2555de2362d3Smrg 2556de2362d3Smrg if test -f "$dir/$objdir/$dlname"; then 2557de2362d3Smrg func_append dir "/$objdir" 2558de2362d3Smrg else 2559de2362d3Smrg if test ! -f "$dir/$dlname"; then 25607821949aSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561de2362d3Smrg fi 2562de2362d3Smrg fi 2563de2362d3Smrg ;; 2564de2362d3Smrg 2565de2362d3Smrg *.lo) 2566de2362d3Smrg # Just add the directory containing the .lo file. 2567de2362d3Smrg func_dirname "$file" "" "." 25687821949aSmrg dir="$func_dirname_result" 2569de2362d3Smrg ;; 2570de2362d3Smrg 2571de2362d3Smrg *) 25727821949aSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573de2362d3Smrg continue 2574de2362d3Smrg ;; 2575de2362d3Smrg esac 2576de2362d3Smrg 2577de2362d3Smrg # Get the absolute pathname. 2578de2362d3Smrg absdir=`cd "$dir" && pwd` 25797821949aSmrg test -n "$absdir" && dir="$absdir" 2580de2362d3Smrg 2581de2362d3Smrg # Now add the directory to shlibpath_var. 2582de2362d3Smrg if eval "test -z \"\$$shlibpath_var\""; then 2583de2362d3Smrg eval "$shlibpath_var=\"\$dir\"" 2584de2362d3Smrg else 2585de2362d3Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586de2362d3Smrg fi 2587de2362d3Smrg done 2588de2362d3Smrg 2589de2362d3Smrg # This variable tells wrapper scripts just to set shlibpath_var 2590de2362d3Smrg # rather than running their programs. 25917821949aSmrg libtool_execute_magic="$magic" 2592de2362d3Smrg 2593de2362d3Smrg # Check if any of the arguments is a wrapper script. 2594de2362d3Smrg args= 2595de2362d3Smrg for file 2596de2362d3Smrg do 2597de2362d3Smrg case $file in 2598de2362d3Smrg -* | *.la | *.lo ) ;; 2599de2362d3Smrg *) 2600de2362d3Smrg # Do a test to see if this is really a libtool program. 2601de2362d3Smrg if func_ltwrapper_script_p "$file"; then 2602de2362d3Smrg func_source "$file" 2603de2362d3Smrg # Transform arg to wrapped name. 26047821949aSmrg file="$progdir/$program" 2605de2362d3Smrg elif func_ltwrapper_executable_p "$file"; then 2606de2362d3Smrg func_ltwrapper_scriptname "$file" 2607de2362d3Smrg func_source "$func_ltwrapper_scriptname_result" 2608de2362d3Smrg # Transform arg to wrapped name. 26097821949aSmrg file="$progdir/$program" 2610de2362d3Smrg fi 2611de2362d3Smrg ;; 2612de2362d3Smrg esac 2613de2362d3Smrg # Quote arguments (to preserve shell metacharacters). 2614de2362d3Smrg func_append_quoted args "$file" 2615de2362d3Smrg done 2616de2362d3Smrg 26177821949aSmrg if test "X$opt_dry_run" = Xfalse; then 2618de2362d3Smrg if test -n "$shlibpath_var"; then 2619de2362d3Smrg # Export the shlibpath_var. 2620de2362d3Smrg eval "export $shlibpath_var" 2621de2362d3Smrg fi 2622de2362d3Smrg 2623de2362d3Smrg # Restore saved environment variables 2624de2362d3Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625de2362d3Smrg do 2626de2362d3Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627de2362d3Smrg $lt_var=\$save_$lt_var; export $lt_var 2628de2362d3Smrg else 2629de2362d3Smrg $lt_unset $lt_var 2630de2362d3Smrg fi" 2631de2362d3Smrg done 2632de2362d3Smrg 2633de2362d3Smrg # Now prepare to actually exec the command. 26347821949aSmrg exec_cmd="\$cmd$args" 26357821949aSmrg else 26367821949aSmrg # Display what would be done. 26377821949aSmrg if test -n "$shlibpath_var"; then 26387821949aSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 26397821949aSmrg echo "export $shlibpath_var" 26407821949aSmrg fi 26417821949aSmrg $ECHO "$cmd$args" 26427821949aSmrg exit $EXIT_SUCCESS 2643de2362d3Smrg fi 2644de2362d3Smrg} 2645de2362d3Smrg 26467821949aSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647de2362d3Smrg 2648de2362d3Smrg 2649de2362d3Smrg# func_mode_finish arg... 2650de2362d3Smrgfunc_mode_finish () 2651de2362d3Smrg{ 26527821949aSmrg $opt_debug 2653de2362d3Smrg libs= 2654de2362d3Smrg libdirs= 2655de2362d3Smrg admincmds= 2656de2362d3Smrg 2657de2362d3Smrg for opt in "$nonopt" ${1+"$@"} 2658de2362d3Smrg do 2659de2362d3Smrg if test -d "$opt"; then 2660de2362d3Smrg func_append libdirs " $opt" 2661de2362d3Smrg 2662de2362d3Smrg elif test -f "$opt"; then 2663de2362d3Smrg if func_lalib_unsafe_p "$opt"; then 2664de2362d3Smrg func_append libs " $opt" 2665de2362d3Smrg else 26667821949aSmrg func_warning "\`$opt' is not a valid libtool archive" 2667de2362d3Smrg fi 2668de2362d3Smrg 2669de2362d3Smrg else 26707821949aSmrg func_fatal_error "invalid argument \`$opt'" 2671de2362d3Smrg fi 2672de2362d3Smrg done 2673de2362d3Smrg 2674de2362d3Smrg if test -n "$libs"; then 2675de2362d3Smrg if test -n "$lt_sysroot"; then 2676de2362d3Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2677de2362d3Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2678de2362d3Smrg else 2679de2362d3Smrg sysroot_cmd= 2680de2362d3Smrg fi 2681de2362d3Smrg 2682de2362d3Smrg # Remove sysroot references 2683de2362d3Smrg if $opt_dry_run; then 2684de2362d3Smrg for lib in $libs; do 26857821949aSmrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2686de2362d3Smrg done 2687de2362d3Smrg else 2688de2362d3Smrg tmpdir=`func_mktempdir` 2689de2362d3Smrg for lib in $libs; do 26907821949aSmrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2691de2362d3Smrg > $tmpdir/tmp-la 2692de2362d3Smrg mv -f $tmpdir/tmp-la $lib 2693de2362d3Smrg done 2694de2362d3Smrg ${RM}r "$tmpdir" 2695de2362d3Smrg fi 2696de2362d3Smrg fi 2697de2362d3Smrg 2698de2362d3Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699de2362d3Smrg for libdir in $libdirs; do 2700de2362d3Smrg if test -n "$finish_cmds"; then 2701de2362d3Smrg # Do each command in the finish commands. 2702de2362d3Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703de2362d3Smrg'"$cmd"'"' 2704de2362d3Smrg fi 2705de2362d3Smrg if test -n "$finish_eval"; then 2706de2362d3Smrg # Do the single finish_eval. 2707de2362d3Smrg eval cmds=\"$finish_eval\" 2708de2362d3Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709de2362d3Smrg $cmds" 2710de2362d3Smrg fi 2711de2362d3Smrg done 2712de2362d3Smrg fi 2713de2362d3Smrg 2714de2362d3Smrg # Exit here if they wanted silent mode. 27157821949aSmrg $opt_silent && exit $EXIT_SUCCESS 2716de2362d3Smrg 2717de2362d3Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2718de2362d3Smrg echo "----------------------------------------------------------------------" 2719de2362d3Smrg echo "Libraries have been installed in:" 2720de2362d3Smrg for libdir in $libdirs; do 2721de2362d3Smrg $ECHO " $libdir" 2722de2362d3Smrg done 2723de2362d3Smrg echo 2724de2362d3Smrg echo "If you ever happen to want to link against installed libraries" 2725de2362d3Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 27267821949aSmrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2727de2362d3Smrg echo "flag during linking and do at least one of the following:" 2728de2362d3Smrg if test -n "$shlibpath_var"; then 27297821949aSmrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2730de2362d3Smrg echo " during execution" 2731de2362d3Smrg fi 2732de2362d3Smrg if test -n "$runpath_var"; then 27337821949aSmrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 2734de2362d3Smrg echo " during linking" 2735de2362d3Smrg fi 2736de2362d3Smrg if test -n "$hardcode_libdir_flag_spec"; then 2737de2362d3Smrg libdir=LIBDIR 2738de2362d3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2739de2362d3Smrg 27407821949aSmrg $ECHO " - use the \`$flag' linker flag" 2741de2362d3Smrg fi 2742de2362d3Smrg if test -n "$admincmds"; then 2743de2362d3Smrg $ECHO " - have your system administrator run these commands:$admincmds" 2744de2362d3Smrg fi 2745de2362d3Smrg if test -f /etc/ld.so.conf; then 27467821949aSmrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2747de2362d3Smrg fi 2748de2362d3Smrg echo 2749de2362d3Smrg 2750de2362d3Smrg echo "See any operating system documentation about shared libraries for" 2751de2362d3Smrg case $host in 2752de2362d3Smrg solaris2.[6789]|solaris2.1[0-9]) 2753de2362d3Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2754de2362d3Smrg echo "pages." 2755de2362d3Smrg ;; 2756de2362d3Smrg *) 2757de2362d3Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 2758de2362d3Smrg ;; 2759de2362d3Smrg esac 2760de2362d3Smrg echo "----------------------------------------------------------------------" 2761de2362d3Smrg fi 2762de2362d3Smrg exit $EXIT_SUCCESS 2763de2362d3Smrg} 2764de2362d3Smrg 27657821949aSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766de2362d3Smrg 2767de2362d3Smrg 2768de2362d3Smrg# func_mode_install arg... 2769de2362d3Smrgfunc_mode_install () 2770de2362d3Smrg{ 27717821949aSmrg $opt_debug 2772de2362d3Smrg # There may be an optional sh(1) argument at the beginning of 2773de2362d3Smrg # install_prog (especially on Windows NT). 27747821949aSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775de2362d3Smrg # Allow the use of GNU shtool's install command. 27767821949aSmrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777de2362d3Smrg # Aesthetically quote it. 2778de2362d3Smrg func_quote_for_eval "$nonopt" 2779de2362d3Smrg install_prog="$func_quote_for_eval_result " 2780de2362d3Smrg arg=$1 2781de2362d3Smrg shift 2782de2362d3Smrg else 2783de2362d3Smrg install_prog= 2784de2362d3Smrg arg=$nonopt 2785de2362d3Smrg fi 2786de2362d3Smrg 2787de2362d3Smrg # The real first argument should be the name of the installation program. 2788de2362d3Smrg # Aesthetically quote it. 2789de2362d3Smrg func_quote_for_eval "$arg" 2790de2362d3Smrg func_append install_prog "$func_quote_for_eval_result" 2791de2362d3Smrg install_shared_prog=$install_prog 2792de2362d3Smrg case " $install_prog " in 2793de2362d3Smrg *[\\\ /]cp\ *) install_cp=: ;; 2794de2362d3Smrg *) install_cp=false ;; 2795de2362d3Smrg esac 2796de2362d3Smrg 2797de2362d3Smrg # We need to accept at least all the BSD install flags. 2798de2362d3Smrg dest= 2799de2362d3Smrg files= 2800de2362d3Smrg opts= 2801de2362d3Smrg prev= 2802de2362d3Smrg install_type= 28037821949aSmrg isdir=no 2804de2362d3Smrg stripme= 2805de2362d3Smrg no_mode=: 2806de2362d3Smrg for arg 2807de2362d3Smrg do 2808de2362d3Smrg arg2= 2809de2362d3Smrg if test -n "$dest"; then 2810de2362d3Smrg func_append files " $dest" 2811de2362d3Smrg dest=$arg 2812de2362d3Smrg continue 2813de2362d3Smrg fi 2814de2362d3Smrg 2815de2362d3Smrg case $arg in 28167821949aSmrg -d) isdir=yes ;; 2817de2362d3Smrg -f) 2818de2362d3Smrg if $install_cp; then :; else 2819de2362d3Smrg prev=$arg 2820de2362d3Smrg fi 2821de2362d3Smrg ;; 2822de2362d3Smrg -g | -m | -o) 2823de2362d3Smrg prev=$arg 2824de2362d3Smrg ;; 2825de2362d3Smrg -s) 2826de2362d3Smrg stripme=" -s" 2827de2362d3Smrg continue 2828de2362d3Smrg ;; 2829de2362d3Smrg -*) 2830de2362d3Smrg ;; 2831de2362d3Smrg *) 2832de2362d3Smrg # If the previous option needed an argument, then skip it. 2833de2362d3Smrg if test -n "$prev"; then 28347821949aSmrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 2835de2362d3Smrg arg2=$install_override_mode 2836de2362d3Smrg no_mode=false 2837de2362d3Smrg fi 2838de2362d3Smrg prev= 2839de2362d3Smrg else 2840de2362d3Smrg dest=$arg 2841de2362d3Smrg continue 2842de2362d3Smrg fi 2843de2362d3Smrg ;; 2844de2362d3Smrg esac 2845de2362d3Smrg 2846de2362d3Smrg # Aesthetically quote the argument. 2847de2362d3Smrg func_quote_for_eval "$arg" 2848de2362d3Smrg func_append install_prog " $func_quote_for_eval_result" 2849de2362d3Smrg if test -n "$arg2"; then 2850de2362d3Smrg func_quote_for_eval "$arg2" 2851de2362d3Smrg fi 2852de2362d3Smrg func_append install_shared_prog " $func_quote_for_eval_result" 2853de2362d3Smrg done 2854de2362d3Smrg 2855de2362d3Smrg test -z "$install_prog" && \ 2856de2362d3Smrg func_fatal_help "you must specify an install program" 2857de2362d3Smrg 2858de2362d3Smrg test -n "$prev" && \ 28597821949aSmrg func_fatal_help "the \`$prev' option requires an argument" 2860de2362d3Smrg 2861de2362d3Smrg if test -n "$install_override_mode" && $no_mode; then 2862de2362d3Smrg if $install_cp; then :; else 2863de2362d3Smrg func_quote_for_eval "$install_override_mode" 2864de2362d3Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 2865de2362d3Smrg fi 2866de2362d3Smrg fi 2867de2362d3Smrg 2868de2362d3Smrg if test -z "$files"; then 2869de2362d3Smrg if test -z "$dest"; then 2870de2362d3Smrg func_fatal_help "no file or destination specified" 2871de2362d3Smrg else 2872de2362d3Smrg func_fatal_help "you must specify a destination" 2873de2362d3Smrg fi 2874de2362d3Smrg fi 2875de2362d3Smrg 2876de2362d3Smrg # Strip any trailing slash from the destination. 2877de2362d3Smrg func_stripname '' '/' "$dest" 2878de2362d3Smrg dest=$func_stripname_result 2879de2362d3Smrg 2880de2362d3Smrg # Check to see that the destination is a directory. 28817821949aSmrg test -d "$dest" && isdir=yes 28827821949aSmrg if test "$isdir" = yes; then 28837821949aSmrg destdir="$dest" 2884de2362d3Smrg destname= 2885de2362d3Smrg else 2886de2362d3Smrg func_dirname_and_basename "$dest" "" "." 28877821949aSmrg destdir="$func_dirname_result" 28887821949aSmrg destname="$func_basename_result" 2889de2362d3Smrg 2890de2362d3Smrg # Not a directory, so check to see that there is only one file specified. 2891de2362d3Smrg set dummy $files; shift 2892de2362d3Smrg test "$#" -gt 1 && \ 28937821949aSmrg func_fatal_help "\`$dest' is not a directory" 2894de2362d3Smrg fi 2895de2362d3Smrg case $destdir in 2896de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2897de2362d3Smrg *) 2898de2362d3Smrg for file in $files; do 2899de2362d3Smrg case $file in 2900de2362d3Smrg *.lo) ;; 2901de2362d3Smrg *) 29027821949aSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903de2362d3Smrg ;; 2904de2362d3Smrg esac 2905de2362d3Smrg done 2906de2362d3Smrg ;; 2907de2362d3Smrg esac 2908de2362d3Smrg 2909de2362d3Smrg # This variable tells wrapper scripts just to set variables rather 2910de2362d3Smrg # than running their programs. 29117821949aSmrg libtool_install_magic="$magic" 2912de2362d3Smrg 2913de2362d3Smrg staticlibs= 2914de2362d3Smrg future_libdirs= 2915de2362d3Smrg current_libdirs= 2916de2362d3Smrg for file in $files; do 2917de2362d3Smrg 2918de2362d3Smrg # Do each installation. 2919de2362d3Smrg case $file in 2920de2362d3Smrg *.$libext) 2921de2362d3Smrg # Do the static libraries later. 2922de2362d3Smrg func_append staticlibs " $file" 2923de2362d3Smrg ;; 2924de2362d3Smrg 2925de2362d3Smrg *.la) 2926de2362d3Smrg func_resolve_sysroot "$file" 2927de2362d3Smrg file=$func_resolve_sysroot_result 2928de2362d3Smrg 2929de2362d3Smrg # Check to see that this really is a libtool archive. 2930de2362d3Smrg func_lalib_unsafe_p "$file" \ 29317821949aSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932de2362d3Smrg 2933de2362d3Smrg library_names= 2934de2362d3Smrg old_library= 2935de2362d3Smrg relink_command= 2936de2362d3Smrg func_source "$file" 2937de2362d3Smrg 2938de2362d3Smrg # Add the libdir to current_libdirs if it is the destination. 2939de2362d3Smrg if test "X$destdir" = "X$libdir"; then 2940de2362d3Smrg case "$current_libdirs " in 2941de2362d3Smrg *" $libdir "*) ;; 2942de2362d3Smrg *) func_append current_libdirs " $libdir" ;; 2943de2362d3Smrg esac 2944de2362d3Smrg else 2945de2362d3Smrg # Note the libdir as a future libdir. 2946de2362d3Smrg case "$future_libdirs " in 2947de2362d3Smrg *" $libdir "*) ;; 2948de2362d3Smrg *) func_append future_libdirs " $libdir" ;; 2949de2362d3Smrg esac 2950de2362d3Smrg fi 2951de2362d3Smrg 2952de2362d3Smrg func_dirname "$file" "/" "" 29537821949aSmrg dir="$func_dirname_result" 2954de2362d3Smrg func_append dir "$objdir" 2955de2362d3Smrg 2956de2362d3Smrg if test -n "$relink_command"; then 2957de2362d3Smrg # Determine the prefix the user has applied to our future dir. 2958de2362d3Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959de2362d3Smrg 2960de2362d3Smrg # Don't allow the user to place us outside of our expected 2961de2362d3Smrg # location b/c this prevents finding dependent libraries that 2962de2362d3Smrg # are installed to the same prefix. 2963de2362d3Smrg # At present, this check doesn't affect windows .dll's that 2964de2362d3Smrg # are installed into $libdir/../bin (currently, that works fine) 2965de2362d3Smrg # but it's something to keep an eye on. 2966de2362d3Smrg test "$inst_prefix_dir" = "$destdir" && \ 29677821949aSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968de2362d3Smrg 2969de2362d3Smrg if test -n "$inst_prefix_dir"; then 2970de2362d3Smrg # Stick the inst_prefix_dir data into the link command. 2971de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972de2362d3Smrg else 2973de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974de2362d3Smrg fi 2975de2362d3Smrg 29767821949aSmrg func_warning "relinking \`$file'" 2977de2362d3Smrg func_show_eval "$relink_command" \ 29787821949aSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979de2362d3Smrg fi 2980de2362d3Smrg 2981de2362d3Smrg # See the names of the shared library. 2982de2362d3Smrg set dummy $library_names; shift 2983de2362d3Smrg if test -n "$1"; then 29847821949aSmrg realname="$1" 2985de2362d3Smrg shift 2986de2362d3Smrg 29877821949aSmrg srcname="$realname" 29887821949aSmrg test -n "$relink_command" && srcname="$realname"T 2989de2362d3Smrg 2990de2362d3Smrg # Install the shared library and build the symlinks. 2991de2362d3Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992de2362d3Smrg 'exit $?' 29937821949aSmrg tstripme="$stripme" 2994de2362d3Smrg case $host_os in 2995de2362d3Smrg cygwin* | mingw* | pw32* | cegcc*) 2996de2362d3Smrg case $realname in 2997de2362d3Smrg *.dll.a) 29987821949aSmrg tstripme="" 2999de2362d3Smrg ;; 3000de2362d3Smrg esac 3001de2362d3Smrg ;; 3002de2362d3Smrg esac 3003de2362d3Smrg if test -n "$tstripme" && test -n "$striplib"; then 3004de2362d3Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005de2362d3Smrg fi 3006de2362d3Smrg 3007de2362d3Smrg if test "$#" -gt 0; then 3008de2362d3Smrg # Delete the old symlinks, and create new ones. 30097821949aSmrg # Try `ln -sf' first, because the `ln' binary might depend on 3010de2362d3Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011de2362d3Smrg # so we also need to try rm && ln -s. 3012de2362d3Smrg for linkname 3013de2362d3Smrg do 3014de2362d3Smrg test "$linkname" != "$realname" \ 3015de2362d3Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016de2362d3Smrg done 3017de2362d3Smrg fi 3018de2362d3Smrg 3019de2362d3Smrg # Do each command in the postinstall commands. 30207821949aSmrg lib="$destdir/$realname" 3021de2362d3Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 3022de2362d3Smrg fi 3023de2362d3Smrg 3024de2362d3Smrg # Install the pseudo-library for information purposes. 3025de2362d3Smrg func_basename "$file" 30267821949aSmrg name="$func_basename_result" 30277821949aSmrg instname="$dir/$name"i 3028de2362d3Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029de2362d3Smrg 3030de2362d3Smrg # Maybe install the static library, too. 3031de2362d3Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032de2362d3Smrg ;; 3033de2362d3Smrg 3034de2362d3Smrg *.lo) 3035de2362d3Smrg # Install (i.e. copy) a libtool object. 3036de2362d3Smrg 3037de2362d3Smrg # Figure out destination file name, if it wasn't already specified. 3038de2362d3Smrg if test -n "$destname"; then 30397821949aSmrg destfile="$destdir/$destname" 3040de2362d3Smrg else 3041de2362d3Smrg func_basename "$file" 30427821949aSmrg destfile="$func_basename_result" 30437821949aSmrg destfile="$destdir/$destfile" 3044de2362d3Smrg fi 3045de2362d3Smrg 3046de2362d3Smrg # Deduce the name of the destination old-style object file. 3047de2362d3Smrg case $destfile in 3048de2362d3Smrg *.lo) 3049de2362d3Smrg func_lo2o "$destfile" 3050de2362d3Smrg staticdest=$func_lo2o_result 3051de2362d3Smrg ;; 3052de2362d3Smrg *.$objext) 30537821949aSmrg staticdest="$destfile" 3054de2362d3Smrg destfile= 3055de2362d3Smrg ;; 3056de2362d3Smrg *) 30577821949aSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058de2362d3Smrg ;; 3059de2362d3Smrg esac 3060de2362d3Smrg 3061de2362d3Smrg # Install the libtool object if requested. 3062de2362d3Smrg test -n "$destfile" && \ 3063de2362d3Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 3064de2362d3Smrg 3065de2362d3Smrg # Install the old object if enabled. 30667821949aSmrg if test "$build_old_libs" = yes; then 3067de2362d3Smrg # Deduce the name of the old-style object file. 3068de2362d3Smrg func_lo2o "$file" 3069de2362d3Smrg staticobj=$func_lo2o_result 3070de2362d3Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071de2362d3Smrg fi 3072de2362d3Smrg exit $EXIT_SUCCESS 3073de2362d3Smrg ;; 3074de2362d3Smrg 3075de2362d3Smrg *) 3076de2362d3Smrg # Figure out destination file name, if it wasn't already specified. 3077de2362d3Smrg if test -n "$destname"; then 30787821949aSmrg destfile="$destdir/$destname" 3079de2362d3Smrg else 3080de2362d3Smrg func_basename "$file" 30817821949aSmrg destfile="$func_basename_result" 30827821949aSmrg destfile="$destdir/$destfile" 3083de2362d3Smrg fi 3084de2362d3Smrg 3085de2362d3Smrg # If the file is missing, and there is a .exe on the end, strip it 3086de2362d3Smrg # because it is most likely a libtool script we actually want to 3087de2362d3Smrg # install 30887821949aSmrg stripped_ext="" 3089de2362d3Smrg case $file in 3090de2362d3Smrg *.exe) 3091de2362d3Smrg if test ! -f "$file"; then 3092de2362d3Smrg func_stripname '' '.exe' "$file" 3093de2362d3Smrg file=$func_stripname_result 30947821949aSmrg stripped_ext=".exe" 3095de2362d3Smrg fi 3096de2362d3Smrg ;; 3097de2362d3Smrg esac 3098de2362d3Smrg 3099de2362d3Smrg # Do a test to see if this is really a libtool program. 3100de2362d3Smrg case $host in 3101de2362d3Smrg *cygwin* | *mingw*) 3102de2362d3Smrg if func_ltwrapper_executable_p "$file"; then 3103de2362d3Smrg func_ltwrapper_scriptname "$file" 3104de2362d3Smrg wrapper=$func_ltwrapper_scriptname_result 3105de2362d3Smrg else 3106de2362d3Smrg func_stripname '' '.exe' "$file" 3107de2362d3Smrg wrapper=$func_stripname_result 3108de2362d3Smrg fi 3109de2362d3Smrg ;; 3110de2362d3Smrg *) 3111de2362d3Smrg wrapper=$file 3112de2362d3Smrg ;; 3113de2362d3Smrg esac 3114de2362d3Smrg if func_ltwrapper_script_p "$wrapper"; then 3115de2362d3Smrg notinst_deplibs= 3116de2362d3Smrg relink_command= 3117de2362d3Smrg 3118de2362d3Smrg func_source "$wrapper" 3119de2362d3Smrg 3120de2362d3Smrg # Check the variables that should have been set. 3121de2362d3Smrg test -z "$generated_by_libtool_version" && \ 31227821949aSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123de2362d3Smrg 31247821949aSmrg finalize=yes 3125de2362d3Smrg for lib in $notinst_deplibs; do 3126de2362d3Smrg # Check to see that each library is installed. 3127de2362d3Smrg libdir= 3128de2362d3Smrg if test -f "$lib"; then 3129de2362d3Smrg func_source "$lib" 3130de2362d3Smrg fi 31317821949aSmrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132de2362d3Smrg if test -n "$libdir" && test ! -f "$libfile"; then 31337821949aSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 31347821949aSmrg finalize=no 3135de2362d3Smrg fi 3136de2362d3Smrg done 3137de2362d3Smrg 3138de2362d3Smrg relink_command= 3139de2362d3Smrg func_source "$wrapper" 3140de2362d3Smrg 3141de2362d3Smrg outputname= 31427821949aSmrg if test "$fast_install" = no && test -n "$relink_command"; then 3143de2362d3Smrg $opt_dry_run || { 31447821949aSmrg if test "$finalize" = yes; then 3145de2362d3Smrg tmpdir=`func_mktempdir` 3146de2362d3Smrg func_basename "$file$stripped_ext" 31477821949aSmrg file="$func_basename_result" 31487821949aSmrg outputname="$tmpdir/$file" 3149de2362d3Smrg # Replace the output file specification. 3150de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151de2362d3Smrg 31527821949aSmrg $opt_silent || { 3153de2362d3Smrg func_quote_for_expand "$relink_command" 3154de2362d3Smrg eval "func_echo $func_quote_for_expand_result" 3155de2362d3Smrg } 3156de2362d3Smrg if eval "$relink_command"; then : 3157de2362d3Smrg else 31587821949aSmrg func_error "error: relink \`$file' with the above command before installing it" 3159de2362d3Smrg $opt_dry_run || ${RM}r "$tmpdir" 3160de2362d3Smrg continue 3161de2362d3Smrg fi 31627821949aSmrg file="$outputname" 3163de2362d3Smrg else 31647821949aSmrg func_warning "cannot relink \`$file'" 3165de2362d3Smrg fi 3166de2362d3Smrg } 3167de2362d3Smrg else 3168de2362d3Smrg # Install the binary that we compiled earlier. 3169de2362d3Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170de2362d3Smrg fi 3171de2362d3Smrg fi 3172de2362d3Smrg 3173de2362d3Smrg # remove .exe since cygwin /usr/bin/install will append another 3174de2362d3Smrg # one anyway 3175de2362d3Smrg case $install_prog,$host in 3176de2362d3Smrg */usr/bin/install*,*cygwin*) 3177de2362d3Smrg case $file:$destfile in 3178de2362d3Smrg *.exe:*.exe) 3179de2362d3Smrg # this is ok 3180de2362d3Smrg ;; 3181de2362d3Smrg *.exe:*) 3182de2362d3Smrg destfile=$destfile.exe 3183de2362d3Smrg ;; 3184de2362d3Smrg *:*.exe) 3185de2362d3Smrg func_stripname '' '.exe' "$destfile" 3186de2362d3Smrg destfile=$func_stripname_result 3187de2362d3Smrg ;; 3188de2362d3Smrg esac 3189de2362d3Smrg ;; 3190de2362d3Smrg esac 3191de2362d3Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192de2362d3Smrg $opt_dry_run || if test -n "$outputname"; then 3193de2362d3Smrg ${RM}r "$tmpdir" 3194de2362d3Smrg fi 3195de2362d3Smrg ;; 3196de2362d3Smrg esac 3197de2362d3Smrg done 3198de2362d3Smrg 3199de2362d3Smrg for file in $staticlibs; do 3200de2362d3Smrg func_basename "$file" 32017821949aSmrg name="$func_basename_result" 3202de2362d3Smrg 3203de2362d3Smrg # Set up the ranlib parameters. 32047821949aSmrg oldlib="$destdir/$name" 3205de2362d3Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206de2362d3Smrg tool_oldlib=$func_to_tool_file_result 3207de2362d3Smrg 3208de2362d3Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209de2362d3Smrg 3210de2362d3Smrg if test -n "$stripme" && test -n "$old_striplib"; then 3211de2362d3Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212de2362d3Smrg fi 3213de2362d3Smrg 3214de2362d3Smrg # Do each command in the postinstall commands. 3215de2362d3Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216de2362d3Smrg done 3217de2362d3Smrg 3218de2362d3Smrg test -n "$future_libdirs" && \ 32197821949aSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3220de2362d3Smrg 3221de2362d3Smrg if test -n "$current_libdirs"; then 3222de2362d3Smrg # Maybe just do a dry run. 3223de2362d3Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 32247821949aSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225de2362d3Smrg else 3226de2362d3Smrg exit $EXIT_SUCCESS 3227de2362d3Smrg fi 3228de2362d3Smrg} 3229de2362d3Smrg 32307821949aSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231de2362d3Smrg 3232de2362d3Smrg 3233de2362d3Smrg# func_generate_dlsyms outputname originator pic_p 3234de2362d3Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235de2362d3Smrg# a dlpreopen symbol table. 3236de2362d3Smrgfunc_generate_dlsyms () 3237de2362d3Smrg{ 32387821949aSmrg $opt_debug 32397821949aSmrg my_outputname="$1" 32407821949aSmrg my_originator="$2" 32417821949aSmrg my_pic_p="${3-no}" 32427821949aSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243de2362d3Smrg my_dlsyms= 3244de2362d3Smrg 32457821949aSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246de2362d3Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 32477821949aSmrg my_dlsyms="${my_outputname}S.c" 3248de2362d3Smrg else 3249de2362d3Smrg func_error "not configured to extract global symbols from dlpreopened files" 3250de2362d3Smrg fi 3251de2362d3Smrg fi 3252de2362d3Smrg 3253de2362d3Smrg if test -n "$my_dlsyms"; then 3254de2362d3Smrg case $my_dlsyms in 3255de2362d3Smrg "") ;; 3256de2362d3Smrg *.c) 3257de2362d3Smrg # Discover the nlist of each of the dlfiles. 32587821949aSmrg nlist="$output_objdir/${my_outputname}.nm" 3259de2362d3Smrg 3260de2362d3Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261de2362d3Smrg 3262de2362d3Smrg # Parse the name list into a source file. 3263de2362d3Smrg func_verbose "creating $output_objdir/$my_dlsyms" 3264de2362d3Smrg 3265de2362d3Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 32667821949aSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 32677821949aSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268de2362d3Smrg 3269de2362d3Smrg#ifdef __cplusplus 3270de2362d3Smrgextern \"C\" { 3271de2362d3Smrg#endif 3272de2362d3Smrg 32737821949aSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3274de2362d3Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3275de2362d3Smrg#endif 3276de2362d3Smrg 3277de2362d3Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 32787821949aSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 32797821949aSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 3280de2362d3Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 3281de2362d3Smrg# define LT_DLSYM_CONST 32827821949aSmrg#elif defined(__osf__) 3283de2362d3Smrg/* This system does not cope well with relocations in const data. */ 3284de2362d3Smrg# define LT_DLSYM_CONST 3285de2362d3Smrg#else 3286de2362d3Smrg# define LT_DLSYM_CONST const 3287de2362d3Smrg#endif 3288de2362d3Smrg 3289de2362d3Smrg/* External symbol declarations for the compiler. */\ 3290de2362d3Smrg" 3291de2362d3Smrg 32927821949aSmrg if test "$dlself" = yes; then 32937821949aSmrg func_verbose "generating symbol list for \`$output'" 3294de2362d3Smrg 3295de2362d3Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296de2362d3Smrg 3297de2362d3Smrg # Add our own program objects to the symbol list. 3298de2362d3Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299de2362d3Smrg for progfile in $progfiles; do 3300de2362d3Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 33017821949aSmrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3302de2362d3Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303de2362d3Smrg done 3304de2362d3Smrg 3305de2362d3Smrg if test -n "$exclude_expsyms"; then 3306de2362d3Smrg $opt_dry_run || { 3307de2362d3Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308de2362d3Smrg eval '$MV "$nlist"T "$nlist"' 3309de2362d3Smrg } 3310de2362d3Smrg fi 3311de2362d3Smrg 3312de2362d3Smrg if test -n "$export_symbols_regex"; then 3313de2362d3Smrg $opt_dry_run || { 3314de2362d3Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315de2362d3Smrg eval '$MV "$nlist"T "$nlist"' 3316de2362d3Smrg } 3317de2362d3Smrg fi 3318de2362d3Smrg 3319de2362d3Smrg # Prepare the list of exported symbols 3320de2362d3Smrg if test -z "$export_symbols"; then 33217821949aSmrg export_symbols="$output_objdir/$outputname.exp" 3322de2362d3Smrg $opt_dry_run || { 3323de2362d3Smrg $RM $export_symbols 33247821949aSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325de2362d3Smrg case $host in 3326de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 3327de2362d3Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328de2362d3Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329de2362d3Smrg ;; 3330de2362d3Smrg esac 3331de2362d3Smrg } 3332de2362d3Smrg else 3333de2362d3Smrg $opt_dry_run || { 33347821949aSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335de2362d3Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336de2362d3Smrg eval '$MV "$nlist"T "$nlist"' 3337de2362d3Smrg case $host in 3338de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 3339de2362d3Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340de2362d3Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341de2362d3Smrg ;; 3342de2362d3Smrg esac 3343de2362d3Smrg } 3344de2362d3Smrg fi 3345de2362d3Smrg fi 3346de2362d3Smrg 3347de2362d3Smrg for dlprefile in $dlprefiles; do 33487821949aSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349de2362d3Smrg func_basename "$dlprefile" 33507821949aSmrg name="$func_basename_result" 3351de2362d3Smrg case $host in 3352de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 3353de2362d3Smrg # if an import library, we need to obtain dlname 3354de2362d3Smrg if func_win32_import_lib_p "$dlprefile"; then 3355de2362d3Smrg func_tr_sh "$dlprefile" 3356de2362d3Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 33577821949aSmrg dlprefile_dlbasename="" 3358de2362d3Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3359de2362d3Smrg # Use subshell, to avoid clobbering current variable values 3360de2362d3Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 33617821949aSmrg if test -n "$dlprefile_dlname" ; then 3362de2362d3Smrg func_basename "$dlprefile_dlname" 33637821949aSmrg dlprefile_dlbasename="$func_basename_result" 3364de2362d3Smrg else 3365de2362d3Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 3366de2362d3Smrg $sharedlib_from_linklib_cmd "$dlprefile" 3367de2362d3Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 3368de2362d3Smrg fi 3369de2362d3Smrg fi 3370de2362d3Smrg $opt_dry_run || { 33717821949aSmrg if test -n "$dlprefile_dlbasename" ; then 3372de2362d3Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3373de2362d3Smrg else 3374de2362d3Smrg func_warning "Could not compute DLL name from $name" 3375de2362d3Smrg eval '$ECHO ": $name " >> "$nlist"' 3376de2362d3Smrg fi 3377de2362d3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3378de2362d3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3379de2362d3Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3380de2362d3Smrg } 3381de2362d3Smrg else # not an import lib 3382de2362d3Smrg $opt_dry_run || { 3383de2362d3Smrg eval '$ECHO ": $name " >> "$nlist"' 3384de2362d3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3385de2362d3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3386de2362d3Smrg } 3387de2362d3Smrg fi 3388de2362d3Smrg ;; 3389de2362d3Smrg *) 3390de2362d3Smrg $opt_dry_run || { 3391de2362d3Smrg eval '$ECHO ": $name " >> "$nlist"' 3392de2362d3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3393de2362d3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3394de2362d3Smrg } 3395de2362d3Smrg ;; 3396de2362d3Smrg esac 3397de2362d3Smrg done 3398de2362d3Smrg 3399de2362d3Smrg $opt_dry_run || { 3400de2362d3Smrg # Make sure we have at least an empty file. 3401de2362d3Smrg test -f "$nlist" || : > "$nlist" 3402de2362d3Smrg 3403de2362d3Smrg if test -n "$exclude_expsyms"; then 3404de2362d3Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405de2362d3Smrg $MV "$nlist"T "$nlist" 3406de2362d3Smrg fi 3407de2362d3Smrg 3408de2362d3Smrg # Try sorting and uniquifying the output. 3409de2362d3Smrg if $GREP -v "^: " < "$nlist" | 3410de2362d3Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411de2362d3Smrg sort -k 3 3412de2362d3Smrg else 3413de2362d3Smrg sort +2 3414de2362d3Smrg fi | 3415de2362d3Smrg uniq > "$nlist"S; then 3416de2362d3Smrg : 3417de2362d3Smrg else 3418de2362d3Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 3419de2362d3Smrg fi 3420de2362d3Smrg 3421de2362d3Smrg if test -f "$nlist"S; then 3422de2362d3Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423de2362d3Smrg else 3424de2362d3Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425de2362d3Smrg fi 3426de2362d3Smrg 3427de2362d3Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3428de2362d3Smrg 3429de2362d3Smrg/* The mapping between symbol names and symbols. */ 3430de2362d3Smrgtypedef struct { 3431de2362d3Smrg const char *name; 3432de2362d3Smrg void *address; 3433de2362d3Smrg} lt_dlsymlist; 3434de2362d3Smrgextern LT_DLSYM_CONST lt_dlsymlist 34357821949aSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 3436de2362d3SmrgLT_DLSYM_CONST lt_dlsymlist 3437de2362d3Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 34387821949aSmrg{\ 34397821949aSmrg { \"$my_originator\", (void *) 0 }," 3440de2362d3Smrg 3441de2362d3Smrg case $need_lib_prefix in 3442de2362d3Smrg no) 3443de2362d3Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444de2362d3Smrg ;; 3445de2362d3Smrg *) 3446de2362d3Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447de2362d3Smrg ;; 3448de2362d3Smrg esac 3449de2362d3Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3450de2362d3Smrg {0, (void *) 0} 3451de2362d3Smrg}; 3452de2362d3Smrg 3453de2362d3Smrg/* This works around a problem in FreeBSD linker */ 3454de2362d3Smrg#ifdef FREEBSD_WORKAROUND 3455de2362d3Smrgstatic const void *lt_preloaded_setup() { 3456de2362d3Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457de2362d3Smrg} 3458de2362d3Smrg#endif 3459de2362d3Smrg 3460de2362d3Smrg#ifdef __cplusplus 3461de2362d3Smrg} 3462de2362d3Smrg#endif\ 3463de2362d3Smrg" 3464de2362d3Smrg } # !$opt_dry_run 3465de2362d3Smrg 3466de2362d3Smrg pic_flag_for_symtable= 3467de2362d3Smrg case "$compile_command " in 3468de2362d3Smrg *" -static "*) ;; 3469de2362d3Smrg *) 3470de2362d3Smrg case $host in 3471de2362d3Smrg # compiling the symbol table file with pic_flag works around 3472de2362d3Smrg # a FreeBSD bug that causes programs to crash when -lm is 3473de2362d3Smrg # linked before any other PIC object. But we must not use 3474de2362d3Smrg # pic_flag when linking with -static. The problem exists in 3475de2362d3Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476de2362d3Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477de2362d3Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478de2362d3Smrg *-*-hpux*) 3479de2362d3Smrg pic_flag_for_symtable=" $pic_flag" ;; 3480de2362d3Smrg *) 34817821949aSmrg if test "X$my_pic_p" != Xno; then 34827821949aSmrg pic_flag_for_symtable=" $pic_flag" 34837821949aSmrg fi 3484de2362d3Smrg ;; 3485de2362d3Smrg esac 3486de2362d3Smrg ;; 3487de2362d3Smrg esac 3488de2362d3Smrg symtab_cflags= 3489de2362d3Smrg for arg in $LTCFLAGS; do 3490de2362d3Smrg case $arg in 3491de2362d3Smrg -pie | -fpie | -fPIE) ;; 3492de2362d3Smrg *) func_append symtab_cflags " $arg" ;; 3493de2362d3Smrg esac 3494de2362d3Smrg done 3495de2362d3Smrg 3496de2362d3Smrg # Now compile the dynamic symbol file. 3497de2362d3Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498de2362d3Smrg 3499de2362d3Smrg # Clean up the generated files. 35007821949aSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501de2362d3Smrg 3502de2362d3Smrg # Transform the symbol file into the correct name. 35037821949aSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504de2362d3Smrg case $host in 3505de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 3506de2362d3Smrg if test -f "$output_objdir/$my_outputname.def"; then 3507de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3508de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509de2362d3Smrg else 3510de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3511de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512de2362d3Smrg fi 3513de2362d3Smrg ;; 3514de2362d3Smrg *) 3515de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3516de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517de2362d3Smrg ;; 3518de2362d3Smrg esac 3519de2362d3Smrg ;; 3520de2362d3Smrg *) 35217821949aSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522de2362d3Smrg ;; 3523de2362d3Smrg esac 3524de2362d3Smrg else 3525de2362d3Smrg # We keep going just in case the user didn't refer to 3526de2362d3Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527de2362d3Smrg # really was required. 3528de2362d3Smrg 3529de2362d3Smrg # Nullify the symbol file. 3530de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3531de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532de2362d3Smrg fi 3533de2362d3Smrg} 3534de2362d3Smrg 3535de2362d3Smrg# func_win32_libid arg 3536de2362d3Smrg# return the library type of file 'arg' 3537de2362d3Smrg# 3538de2362d3Smrg# Need a lot of goo to handle *both* DLLs and import libs 3539de2362d3Smrg# Has to be a shell function in order to 'eat' the argument 3540de2362d3Smrg# that is supplied when $file_magic_command is called. 3541de2362d3Smrg# Despite the name, also deal with 64 bit binaries. 3542de2362d3Smrgfunc_win32_libid () 3543de2362d3Smrg{ 35447821949aSmrg $opt_debug 35457821949aSmrg win32_libid_type="unknown" 3546de2362d3Smrg win32_fileres=`file -L $1 2>/dev/null` 3547de2362d3Smrg case $win32_fileres in 3548de2362d3Smrg *ar\ archive\ import\ library*) # definitely import 3549de2362d3Smrg win32_libid_type="x86 archive import" 3550de2362d3Smrg ;; 3551de2362d3Smrg *ar\ archive*) # could be an import, or static 3552de2362d3Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553de2362d3Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3554de2362d3Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 35557821949aSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 35567821949aSmrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 35577821949aSmrg $SED -n -e ' 3558de2362d3Smrg 1,100{ 3559de2362d3Smrg / I /{ 35607821949aSmrg s,.*,import, 3561de2362d3Smrg p 3562de2362d3Smrg q 3563de2362d3Smrg } 3564de2362d3Smrg }'` 3565de2362d3Smrg case $win32_nmres in 3566de2362d3Smrg import*) win32_libid_type="x86 archive import";; 3567de2362d3Smrg *) win32_libid_type="x86 archive static";; 3568de2362d3Smrg esac 3569de2362d3Smrg fi 3570de2362d3Smrg ;; 3571de2362d3Smrg *DLL*) 3572de2362d3Smrg win32_libid_type="x86 DLL" 3573de2362d3Smrg ;; 3574de2362d3Smrg *executable*) # but shell scripts are "executable" too... 3575de2362d3Smrg case $win32_fileres in 3576de2362d3Smrg *MS\ Windows\ PE\ Intel*) 3577de2362d3Smrg win32_libid_type="x86 DLL" 3578de2362d3Smrg ;; 3579de2362d3Smrg esac 3580de2362d3Smrg ;; 3581de2362d3Smrg esac 3582de2362d3Smrg $ECHO "$win32_libid_type" 3583de2362d3Smrg} 3584de2362d3Smrg 3585de2362d3Smrg# func_cygming_dll_for_implib ARG 3586de2362d3Smrg# 3587de2362d3Smrg# Platform-specific function to extract the 3588de2362d3Smrg# name of the DLL associated with the specified 3589de2362d3Smrg# import library ARG. 3590de2362d3Smrg# Invoked by eval'ing the libtool variable 3591de2362d3Smrg# $sharedlib_from_linklib_cmd 3592de2362d3Smrg# Result is available in the variable 3593de2362d3Smrg# $sharedlib_from_linklib_result 3594de2362d3Smrgfunc_cygming_dll_for_implib () 3595de2362d3Smrg{ 35967821949aSmrg $opt_debug 3597de2362d3Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3598de2362d3Smrg} 3599de2362d3Smrg 3600de2362d3Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3601de2362d3Smrg# 3602de2362d3Smrg# The is the core of a fallback implementation of a 3603de2362d3Smrg# platform-specific function to extract the name of the 3604de2362d3Smrg# DLL associated with the specified import library LIBNAME. 3605de2362d3Smrg# 3606de2362d3Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 3607de2362d3Smrg# on the platform and compiler that created the implib. 3608de2362d3Smrg# 3609de2362d3Smrg# Echos the name of the DLL associated with the 3610de2362d3Smrg# specified import library. 3611de2362d3Smrgfunc_cygming_dll_for_implib_fallback_core () 3612de2362d3Smrg{ 36137821949aSmrg $opt_debug 3614de2362d3Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3615de2362d3Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3616de2362d3Smrg $SED '/^Contents of section '"$match_literal"':/{ 3617de2362d3Smrg # Place marker at beginning of archive member dllname section 3618de2362d3Smrg s/.*/====MARK====/ 3619de2362d3Smrg p 3620de2362d3Smrg d 3621de2362d3Smrg } 3622de2362d3Smrg # These lines can sometimes be longer than 43 characters, but 3623de2362d3Smrg # are always uninteresting 3624de2362d3Smrg /:[ ]*file format pe[i]\{,1\}-/d 3625de2362d3Smrg /^In archive [^:]*:/d 3626de2362d3Smrg # Ensure marker is printed 3627de2362d3Smrg /^====MARK====/p 3628de2362d3Smrg # Remove all lines with less than 43 characters 3629de2362d3Smrg /^.\{43\}/!d 3630de2362d3Smrg # From remaining lines, remove first 43 characters 3631de2362d3Smrg s/^.\{43\}//' | 3632de2362d3Smrg $SED -n ' 3633de2362d3Smrg # Join marker and all lines until next marker into a single line 3634de2362d3Smrg /^====MARK====/ b para 3635de2362d3Smrg H 3636de2362d3Smrg $ b para 3637de2362d3Smrg b 3638de2362d3Smrg :para 3639de2362d3Smrg x 3640de2362d3Smrg s/\n//g 3641de2362d3Smrg # Remove the marker 3642de2362d3Smrg s/^====MARK====// 3643de2362d3Smrg # Remove trailing dots and whitespace 3644de2362d3Smrg s/[\. \t]*$// 3645de2362d3Smrg # Print 3646de2362d3Smrg /./p' | 3647de2362d3Smrg # we now have a list, one entry per line, of the stringified 3648de2362d3Smrg # contents of the appropriate section of all members of the 36497821949aSmrg # archive which possess that section. Heuristic: eliminate 36507821949aSmrg # all those which have a first or second character that is 3651de2362d3Smrg # a '.' (that is, objdump's representation of an unprintable 3652de2362d3Smrg # character.) This should work for all archives with less than 3653de2362d3Smrg # 0x302f exports -- but will fail for DLLs whose name actually 3654de2362d3Smrg # begins with a literal '.' or a single character followed by 3655de2362d3Smrg # a '.'. 3656de2362d3Smrg # 3657de2362d3Smrg # Of those that remain, print the first one. 3658de2362d3Smrg $SED -e '/^\./d;/^.\./d;q' 3659de2362d3Smrg} 3660de2362d3Smrg 36617821949aSmrg# func_cygming_gnu_implib_p ARG 36627821949aSmrg# This predicate returns with zero status (TRUE) if 36637821949aSmrg# ARG is a GNU/binutils-style import library. Returns 36647821949aSmrg# with nonzero status (FALSE) otherwise. 36657821949aSmrgfunc_cygming_gnu_implib_p () 36667821949aSmrg{ 36677821949aSmrg $opt_debug 36687821949aSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36697821949aSmrg func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` 36707821949aSmrg test -n "$func_cygming_gnu_implib_tmp" 36717821949aSmrg} 36727821949aSmrg 36737821949aSmrg# func_cygming_ms_implib_p ARG 36747821949aSmrg# This predicate returns with zero status (TRUE) if 36757821949aSmrg# ARG is an MS-style import library. Returns 36767821949aSmrg# with nonzero status (FALSE) otherwise. 36777821949aSmrgfunc_cygming_ms_implib_p () 36787821949aSmrg{ 36797821949aSmrg $opt_debug 36807821949aSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36817821949aSmrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 36827821949aSmrg test -n "$func_cygming_ms_implib_tmp" 36837821949aSmrg} 36847821949aSmrg 3685de2362d3Smrg# func_cygming_dll_for_implib_fallback ARG 3686de2362d3Smrg# Platform-specific function to extract the 3687de2362d3Smrg# name of the DLL associated with the specified 3688de2362d3Smrg# import library ARG. 3689de2362d3Smrg# 3690de2362d3Smrg# This fallback implementation is for use when $DLLTOOL 3691de2362d3Smrg# does not support the --identify-strict option. 3692de2362d3Smrg# Invoked by eval'ing the libtool variable 3693de2362d3Smrg# $sharedlib_from_linklib_cmd 3694de2362d3Smrg# Result is available in the variable 3695de2362d3Smrg# $sharedlib_from_linklib_result 3696de2362d3Smrgfunc_cygming_dll_for_implib_fallback () 3697de2362d3Smrg{ 36987821949aSmrg $opt_debug 36997821949aSmrg if func_cygming_gnu_implib_p "$1" ; then 3700de2362d3Smrg # binutils import library 3701de2362d3Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 37027821949aSmrg elif func_cygming_ms_implib_p "$1" ; then 3703de2362d3Smrg # ms-generated import library 3704de2362d3Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3705de2362d3Smrg else 3706de2362d3Smrg # unknown 37077821949aSmrg sharedlib_from_linklib_result="" 3708de2362d3Smrg fi 3709de2362d3Smrg} 3710de2362d3Smrg 3711de2362d3Smrg 3712de2362d3Smrg# func_extract_an_archive dir oldlib 3713de2362d3Smrgfunc_extract_an_archive () 3714de2362d3Smrg{ 37157821949aSmrg $opt_debug 37167821949aSmrg f_ex_an_ar_dir="$1"; shift 37177821949aSmrg f_ex_an_ar_oldlib="$1" 37187821949aSmrg if test "$lock_old_archive_extraction" = yes; then 3719de2362d3Smrg lockfile=$f_ex_an_ar_oldlib.lock 3720de2362d3Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3721de2362d3Smrg func_echo "Waiting for $lockfile to be removed" 3722de2362d3Smrg sleep 2 3723de2362d3Smrg done 3724de2362d3Smrg fi 3725de2362d3Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3726de2362d3Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 37277821949aSmrg if test "$lock_old_archive_extraction" = yes; then 3728de2362d3Smrg $opt_dry_run || rm -f "$lockfile" 3729de2362d3Smrg fi 3730de2362d3Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731de2362d3Smrg : 3732de2362d3Smrg else 3733de2362d3Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734de2362d3Smrg fi 3735de2362d3Smrg} 3736de2362d3Smrg 3737de2362d3Smrg 3738de2362d3Smrg# func_extract_archives gentop oldlib ... 3739de2362d3Smrgfunc_extract_archives () 3740de2362d3Smrg{ 37417821949aSmrg $opt_debug 37427821949aSmrg my_gentop="$1"; shift 3743de2362d3Smrg my_oldlibs=${1+"$@"} 37447821949aSmrg my_oldobjs="" 37457821949aSmrg my_xlib="" 37467821949aSmrg my_xabs="" 37477821949aSmrg my_xdir="" 3748de2362d3Smrg 3749de2362d3Smrg for my_xlib in $my_oldlibs; do 3750de2362d3Smrg # Extract the objects. 3751de2362d3Smrg case $my_xlib in 37527821949aSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753de2362d3Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754de2362d3Smrg esac 3755de2362d3Smrg func_basename "$my_xlib" 37567821949aSmrg my_xlib="$func_basename_result" 3757de2362d3Smrg my_xlib_u=$my_xlib 3758de2362d3Smrg while :; do 3759de2362d3Smrg case " $extracted_archives " in 3760de2362d3Smrg *" $my_xlib_u "*) 3761de2362d3Smrg func_arith $extracted_serial + 1 3762de2362d3Smrg extracted_serial=$func_arith_result 3763de2362d3Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764de2362d3Smrg *) break ;; 3765de2362d3Smrg esac 3766de2362d3Smrg done 3767de2362d3Smrg extracted_archives="$extracted_archives $my_xlib_u" 37687821949aSmrg my_xdir="$my_gentop/$my_xlib_u" 3769de2362d3Smrg 3770de2362d3Smrg func_mkdir_p "$my_xdir" 3771de2362d3Smrg 3772de2362d3Smrg case $host in 3773de2362d3Smrg *-darwin*) 3774de2362d3Smrg func_verbose "Extracting $my_xabs" 3775de2362d3Smrg # Do not bother doing anything if just a dry run 3776de2362d3Smrg $opt_dry_run || { 3777de2362d3Smrg darwin_orig_dir=`pwd` 3778de2362d3Smrg cd $my_xdir || exit $? 3779de2362d3Smrg darwin_archive=$my_xabs 3780de2362d3Smrg darwin_curdir=`pwd` 37817821949aSmrg darwin_base_archive=`basename "$darwin_archive"` 3782de2362d3Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783de2362d3Smrg if test -n "$darwin_arches"; then 3784de2362d3Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785de2362d3Smrg darwin_arch= 3786de2362d3Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 37877821949aSmrg for darwin_arch in $darwin_arches ; do 37887821949aSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 37897821949aSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 37907821949aSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 37917821949aSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792de2362d3Smrg cd "$darwin_curdir" 37937821949aSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794de2362d3Smrg done # $darwin_arches 3795de2362d3Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 37967821949aSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797de2362d3Smrg darwin_file= 3798de2362d3Smrg darwin_files= 3799de2362d3Smrg for darwin_file in $darwin_filelist; do 3800de2362d3Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801de2362d3Smrg $LIPO -create -output "$darwin_file" $darwin_files 3802de2362d3Smrg done # $darwin_filelist 3803de2362d3Smrg $RM -rf unfat-$$ 3804de2362d3Smrg cd "$darwin_orig_dir" 3805de2362d3Smrg else 3806de2362d3Smrg cd $darwin_orig_dir 3807de2362d3Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808de2362d3Smrg fi # $darwin_arches 3809de2362d3Smrg } # !$opt_dry_run 3810de2362d3Smrg ;; 3811de2362d3Smrg *) 3812de2362d3Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813de2362d3Smrg ;; 3814de2362d3Smrg esac 3815de2362d3Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816de2362d3Smrg done 3817de2362d3Smrg 38187821949aSmrg func_extract_archives_result="$my_oldobjs" 3819de2362d3Smrg} 3820de2362d3Smrg 3821de2362d3Smrg 3822de2362d3Smrg# func_emit_wrapper [arg=no] 3823de2362d3Smrg# 3824de2362d3Smrg# Emit a libtool wrapper script on stdout. 3825de2362d3Smrg# Don't directly open a file because we may want to 3826de2362d3Smrg# incorporate the script contents within a cygwin/mingw 3827de2362d3Smrg# wrapper executable. Must ONLY be called from within 3828de2362d3Smrg# func_mode_link because it depends on a number of variables 3829de2362d3Smrg# set therein. 3830de2362d3Smrg# 3831de2362d3Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3832de2362d3Smrg# variable will take. If 'yes', then the emitted script 38337821949aSmrg# will assume that the directory in which it is stored is 3834de2362d3Smrg# the $objdir directory. This is a cygwin/mingw-specific 3835de2362d3Smrg# behavior. 3836de2362d3Smrgfunc_emit_wrapper () 3837de2362d3Smrg{ 3838de2362d3Smrg func_emit_wrapper_arg1=${1-no} 3839de2362d3Smrg 3840de2362d3Smrg $ECHO "\ 3841de2362d3Smrg#! $SHELL 3842de2362d3Smrg 3843de2362d3Smrg# $output - temporary wrapper script for $objdir/$outputname 38447821949aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845de2362d3Smrg# 3846de2362d3Smrg# The $output program cannot be directly executed until all the libtool 3847de2362d3Smrg# libraries that it depends on are installed. 3848de2362d3Smrg# 3849de2362d3Smrg# This wrapper script should never be moved out of the build directory. 3850de2362d3Smrg# If it is, it will not operate correctly. 3851de2362d3Smrg 3852de2362d3Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3853de2362d3Smrg# metacharacters that are still active within double-quoted strings. 3854de2362d3Smrgsed_quote_subst='$sed_quote_subst' 3855de2362d3Smrg 3856de2362d3Smrg# Be Bourne compatible 3857de2362d3Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858de2362d3Smrg emulate sh 3859de2362d3Smrg NULLCMD=: 3860de2362d3Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861de2362d3Smrg # is contrary to our usage. Disable this feature. 3862de2362d3Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863de2362d3Smrg setopt NO_GLOB_SUBST 3864de2362d3Smrgelse 3865de2362d3Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866de2362d3Smrgfi 3867de2362d3SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868de2362d3SmrgDUALCASE=1; export DUALCASE # for MKS sh 3869de2362d3Smrg 3870de2362d3Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871de2362d3Smrg# if CDPATH is set. 3872de2362d3Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873de2362d3Smrg 3874de2362d3Smrgrelink_command=\"$relink_command\" 3875de2362d3Smrg 3876de2362d3Smrg# This environment variable determines our operation mode. 3877de2362d3Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878de2362d3Smrg # install mode needs the following variables: 3879de2362d3Smrg generated_by_libtool_version='$macro_version' 3880de2362d3Smrg notinst_deplibs='$notinst_deplibs' 3881de2362d3Smrgelse 3882de2362d3Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883de2362d3Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 3884de2362d3Smrg file=\"\$0\"" 3885de2362d3Smrg 3886de2362d3Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3887de2362d3Smrg $ECHO "\ 3888de2362d3Smrg 3889de2362d3Smrg# A function that is used when there is no print builtin or printf. 3890de2362d3Smrgfunc_fallback_echo () 3891de2362d3Smrg{ 3892de2362d3Smrg eval 'cat <<_LTECHO_EOF 3893de2362d3Smrg\$1 3894de2362d3Smrg_LTECHO_EOF' 3895de2362d3Smrg} 3896de2362d3Smrg ECHO=\"$qECHO\" 3897de2362d3Smrg fi 3898de2362d3Smrg 3899de2362d3Smrg# Very basic option parsing. These options are (a) specific to 3900de2362d3Smrg# the libtool wrapper, (b) are identical between the wrapper 39017821949aSmrg# /script/ and the wrapper /executable/ which is used only on 3902de2362d3Smrg# windows platforms, and (c) all begin with the string "--lt-" 39037821949aSmrg# (application programs are unlikely to have options which match 3904de2362d3Smrg# this pattern). 3905de2362d3Smrg# 3906de2362d3Smrg# There are only two supported options: --lt-debug and 3907de2362d3Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 3908de2362d3Smrg# 3909de2362d3Smrg# The first argument to this parsing function should be the 3910de2362d3Smrg# script's $0 value, followed by "$@". 3911de2362d3Smrglt_option_debug= 3912de2362d3Smrgfunc_parse_lt_options () 3913de2362d3Smrg{ 3914de2362d3Smrg lt_script_arg0=\$0 3915de2362d3Smrg shift 3916de2362d3Smrg for lt_opt 3917de2362d3Smrg do 3918de2362d3Smrg case \"\$lt_opt\" in 3919de2362d3Smrg --lt-debug) lt_option_debug=1 ;; 3920de2362d3Smrg --lt-dump-script) 3921de2362d3Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3922de2362d3Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3923de2362d3Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3924de2362d3Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 3925de2362d3Smrg exit 0 3926de2362d3Smrg ;; 3927de2362d3Smrg --lt-*) 3928de2362d3Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3929de2362d3Smrg exit 1 3930de2362d3Smrg ;; 3931de2362d3Smrg esac 3932de2362d3Smrg done 3933de2362d3Smrg 3934de2362d3Smrg # Print the debug banner immediately: 3935de2362d3Smrg if test -n \"\$lt_option_debug\"; then 39367821949aSmrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3937de2362d3Smrg fi 3938de2362d3Smrg} 3939de2362d3Smrg 3940de2362d3Smrg# Used when --lt-debug. Prints its arguments to stdout 3941de2362d3Smrg# (redirection is the responsibility of the caller) 3942de2362d3Smrgfunc_lt_dump_args () 3943de2362d3Smrg{ 3944de2362d3Smrg lt_dump_args_N=1; 3945de2362d3Smrg for lt_arg 3946de2362d3Smrg do 39477821949aSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3948de2362d3Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3949de2362d3Smrg done 3950de2362d3Smrg} 3951de2362d3Smrg 3952de2362d3Smrg# Core function for launching the target application 3953de2362d3Smrgfunc_exec_program_core () 3954de2362d3Smrg{ 3955de2362d3Smrg" 3956de2362d3Smrg case $host in 3957de2362d3Smrg # Backslashes separate directories on plain windows 3958de2362d3Smrg *-*-mingw | *-*-os2* | *-cegcc*) 3959de2362d3Smrg $ECHO "\ 3960de2362d3Smrg if test -n \"\$lt_option_debug\"; then 39617821949aSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3962de2362d3Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3963de2362d3Smrg fi 3964de2362d3Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3965de2362d3Smrg" 3966de2362d3Smrg ;; 3967de2362d3Smrg 3968de2362d3Smrg *) 3969de2362d3Smrg $ECHO "\ 3970de2362d3Smrg if test -n \"\$lt_option_debug\"; then 39717821949aSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3972de2362d3Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3973de2362d3Smrg fi 3974de2362d3Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 3975de2362d3Smrg" 3976de2362d3Smrg ;; 3977de2362d3Smrg esac 3978de2362d3Smrg $ECHO "\ 3979de2362d3Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3980de2362d3Smrg exit 1 3981de2362d3Smrg} 3982de2362d3Smrg 3983de2362d3Smrg# A function to encapsulate launching the target application 3984de2362d3Smrg# Strips options in the --lt-* namespace from \$@ and 3985de2362d3Smrg# launches target application with the remaining arguments. 3986de2362d3Smrgfunc_exec_program () 3987de2362d3Smrg{ 3988de2362d3Smrg case \" \$* \" in 3989de2362d3Smrg *\\ --lt-*) 3990de2362d3Smrg for lt_wr_arg 3991de2362d3Smrg do 3992de2362d3Smrg case \$lt_wr_arg in 3993de2362d3Smrg --lt-*) ;; 3994de2362d3Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995de2362d3Smrg esac 3996de2362d3Smrg shift 3997de2362d3Smrg done ;; 3998de2362d3Smrg esac 3999de2362d3Smrg func_exec_program_core \${1+\"\$@\"} 4000de2362d3Smrg} 4001de2362d3Smrg 4002de2362d3Smrg # Parse options 4003de2362d3Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004de2362d3Smrg 4005de2362d3Smrg # Find the directory that this script lives in. 4006de2362d3Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007de2362d3Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008de2362d3Smrg 4009de2362d3Smrg # Follow symbolic links until we get to the real thisdir. 4010de2362d3Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011de2362d3Smrg while test -n \"\$file\"; do 4012de2362d3Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013de2362d3Smrg 4014de2362d3Smrg # If there was a directory component, then change thisdir. 4015de2362d3Smrg if test \"x\$destdir\" != \"x\$file\"; then 4016de2362d3Smrg case \"\$destdir\" in 4017de2362d3Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018de2362d3Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 4019de2362d3Smrg esac 4020de2362d3Smrg fi 4021de2362d3Smrg 4022de2362d3Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4023de2362d3Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024de2362d3Smrg done 4025de2362d3Smrg 4026de2362d3Smrg # Usually 'no', except on cygwin/mingw when embedded into 4027de2362d3Smrg # the cwrapper. 4028de2362d3Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029de2362d3Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030de2362d3Smrg # special case for '.' 4031de2362d3Smrg if test \"\$thisdir\" = \".\"; then 4032de2362d3Smrg thisdir=\`pwd\` 4033de2362d3Smrg fi 4034de2362d3Smrg # remove .libs from thisdir 4035de2362d3Smrg case \"\$thisdir\" in 4036de2362d3Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037de2362d3Smrg $objdir ) thisdir=. ;; 4038de2362d3Smrg esac 4039de2362d3Smrg fi 4040de2362d3Smrg 4041de2362d3Smrg # Try to get the absolute directory name. 4042de2362d3Smrg absdir=\`cd \"\$thisdir\" && pwd\` 4043de2362d3Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044de2362d3Smrg" 4045de2362d3Smrg 40467821949aSmrg if test "$fast_install" = yes; then 4047de2362d3Smrg $ECHO "\ 4048de2362d3Smrg program=lt-'$outputname'$exeext 4049de2362d3Smrg progdir=\"\$thisdir/$objdir\" 4050de2362d3Smrg 4051de2362d3Smrg if test ! -f \"\$progdir/\$program\" || 40527821949aSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053de2362d3Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054de2362d3Smrg 4055de2362d3Smrg file=\"\$\$-\$program\" 4056de2362d3Smrg 4057de2362d3Smrg if test ! -d \"\$progdir\"; then 4058de2362d3Smrg $MKDIR \"\$progdir\" 4059de2362d3Smrg else 4060de2362d3Smrg $RM \"\$progdir/\$file\" 4061de2362d3Smrg fi" 4062de2362d3Smrg 4063de2362d3Smrg $ECHO "\ 4064de2362d3Smrg 4065de2362d3Smrg # relink executable if necessary 4066de2362d3Smrg if test -n \"\$relink_command\"; then 4067de2362d3Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068de2362d3Smrg else 40697821949aSmrg $ECHO \"\$relink_command_output\" >&2 4070de2362d3Smrg $RM \"\$progdir/\$file\" 4071de2362d3Smrg exit 1 4072de2362d3Smrg fi 4073de2362d3Smrg fi 4074de2362d3Smrg 4075de2362d3Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076de2362d3Smrg { $RM \"\$progdir/\$program\"; 4077de2362d3Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078de2362d3Smrg $RM \"\$progdir/\$file\" 4079de2362d3Smrg fi" 4080de2362d3Smrg else 4081de2362d3Smrg $ECHO "\ 4082de2362d3Smrg program='$outputname' 4083de2362d3Smrg progdir=\"\$thisdir/$objdir\" 4084de2362d3Smrg" 4085de2362d3Smrg fi 4086de2362d3Smrg 4087de2362d3Smrg $ECHO "\ 4088de2362d3Smrg 4089de2362d3Smrg if test -f \"\$progdir/\$program\"; then" 4090de2362d3Smrg 4091de2362d3Smrg # fixup the dll searchpath if we need to. 4092de2362d3Smrg # 4093de2362d3Smrg # Fix the DLL searchpath if we need to. Do this before prepending 4094de2362d3Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 4095de2362d3Smrg # libraries must come first. 4096de2362d3Smrg if test -n "$dllsearchpath"; then 4097de2362d3Smrg $ECHO "\ 4098de2362d3Smrg # Add the dll search path components to the executable PATH 4099de2362d3Smrg PATH=$dllsearchpath:\$PATH 4100de2362d3Smrg" 4101de2362d3Smrg fi 4102de2362d3Smrg 4103de2362d3Smrg # Export our shlibpath_var if we have one. 41047821949aSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105de2362d3Smrg $ECHO "\ 4106de2362d3Smrg # Add our own library path to $shlibpath_var 4107de2362d3Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108de2362d3Smrg 4109de2362d3Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110de2362d3Smrg # The second colon is a workaround for a bug in BeOS R4 sed 4111de2362d3Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112de2362d3Smrg 4113de2362d3Smrg export $shlibpath_var 4114de2362d3Smrg" 4115de2362d3Smrg fi 4116de2362d3Smrg 4117de2362d3Smrg $ECHO "\ 4118de2362d3Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119de2362d3Smrg # Run the actual program with our arguments. 4120de2362d3Smrg func_exec_program \${1+\"\$@\"} 4121de2362d3Smrg fi 4122de2362d3Smrg else 4123de2362d3Smrg # The program doesn't exist. 41247821949aSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125de2362d3Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4126de2362d3Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127de2362d3Smrg exit 1 4128de2362d3Smrg fi 4129de2362d3Smrgfi\ 4130de2362d3Smrg" 4131de2362d3Smrg} 4132de2362d3Smrg 4133de2362d3Smrg 4134de2362d3Smrg# func_emit_cwrapperexe_src 4135de2362d3Smrg# emit the source code for a wrapper executable on stdout 4136de2362d3Smrg# Must ONLY be called from within func_mode_link because 4137de2362d3Smrg# it depends on a number of variable set therein. 4138de2362d3Smrgfunc_emit_cwrapperexe_src () 4139de2362d3Smrg{ 4140de2362d3Smrg cat <<EOF 4141de2362d3Smrg 4142de2362d3Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 41437821949aSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144de2362d3Smrg 4145de2362d3Smrg The $output program cannot be directly executed until all the libtool 4146de2362d3Smrg libraries that it depends on are installed. 4147de2362d3Smrg 4148de2362d3Smrg This wrapper executable should never be moved out of the build directory. 4149de2362d3Smrg If it is, it will not operate correctly. 4150de2362d3Smrg*/ 4151de2362d3SmrgEOF 4152de2362d3Smrg cat <<"EOF" 4153de2362d3Smrg#ifdef _MSC_VER 4154de2362d3Smrg# define _CRT_SECURE_NO_DEPRECATE 1 4155de2362d3Smrg#endif 4156de2362d3Smrg#include <stdio.h> 4157de2362d3Smrg#include <stdlib.h> 4158de2362d3Smrg#ifdef _MSC_VER 4159de2362d3Smrg# include <direct.h> 4160de2362d3Smrg# include <process.h> 4161de2362d3Smrg# include <io.h> 4162de2362d3Smrg#else 4163de2362d3Smrg# include <unistd.h> 4164de2362d3Smrg# include <stdint.h> 4165de2362d3Smrg# ifdef __CYGWIN__ 4166de2362d3Smrg# include <io.h> 4167de2362d3Smrg# endif 4168de2362d3Smrg#endif 4169de2362d3Smrg#include <malloc.h> 4170de2362d3Smrg#include <stdarg.h> 4171de2362d3Smrg#include <assert.h> 4172de2362d3Smrg#include <string.h> 4173de2362d3Smrg#include <ctype.h> 4174de2362d3Smrg#include <errno.h> 4175de2362d3Smrg#include <fcntl.h> 4176de2362d3Smrg#include <sys/stat.h> 4177de2362d3Smrg 4178de2362d3Smrg/* declarations of non-ANSI functions */ 41797821949aSmrg#if defined(__MINGW32__) 4180de2362d3Smrg# ifdef __STRICT_ANSI__ 4181de2362d3Smrgint _putenv (const char *); 4182de2362d3Smrg# endif 41837821949aSmrg#elif defined(__CYGWIN__) 4184de2362d3Smrg# ifdef __STRICT_ANSI__ 4185de2362d3Smrgchar *realpath (const char *, char *); 4186de2362d3Smrgint putenv (char *); 4187de2362d3Smrgint setenv (const char *, const char *, int); 4188de2362d3Smrg# endif 41897821949aSmrg/* #elif defined (other platforms) ... */ 4190de2362d3Smrg#endif 4191de2362d3Smrg 4192de2362d3Smrg/* portability defines, excluding path handling macros */ 41937821949aSmrg#if defined(_MSC_VER) 4194de2362d3Smrg# define setmode _setmode 4195de2362d3Smrg# define stat _stat 4196de2362d3Smrg# define chmod _chmod 4197de2362d3Smrg# define getcwd _getcwd 4198de2362d3Smrg# define putenv _putenv 4199de2362d3Smrg# define S_IXUSR _S_IEXEC 42007821949aSmrg# ifndef _INTPTR_T_DEFINED 42017821949aSmrg# define _INTPTR_T_DEFINED 42027821949aSmrg# define intptr_t int 42037821949aSmrg# endif 42047821949aSmrg#elif defined(__MINGW32__) 4205de2362d3Smrg# define setmode _setmode 4206de2362d3Smrg# define stat _stat 4207de2362d3Smrg# define chmod _chmod 4208de2362d3Smrg# define getcwd _getcwd 4209de2362d3Smrg# define putenv _putenv 42107821949aSmrg#elif defined(__CYGWIN__) 4211de2362d3Smrg# define HAVE_SETENV 4212de2362d3Smrg# define FOPEN_WB "wb" 42137821949aSmrg/* #elif defined (other platforms) ... */ 4214de2362d3Smrg#endif 4215de2362d3Smrg 42167821949aSmrg#if defined(PATH_MAX) 4217de2362d3Smrg# define LT_PATHMAX PATH_MAX 42187821949aSmrg#elif defined(MAXPATHLEN) 4219de2362d3Smrg# define LT_PATHMAX MAXPATHLEN 4220de2362d3Smrg#else 4221de2362d3Smrg# define LT_PATHMAX 1024 4222de2362d3Smrg#endif 4223de2362d3Smrg 4224de2362d3Smrg#ifndef S_IXOTH 4225de2362d3Smrg# define S_IXOTH 0 4226de2362d3Smrg#endif 4227de2362d3Smrg#ifndef S_IXGRP 4228de2362d3Smrg# define S_IXGRP 0 4229de2362d3Smrg#endif 4230de2362d3Smrg 4231de2362d3Smrg/* path handling portability macros */ 4232de2362d3Smrg#ifndef DIR_SEPARATOR 4233de2362d3Smrg# define DIR_SEPARATOR '/' 4234de2362d3Smrg# define PATH_SEPARATOR ':' 4235de2362d3Smrg#endif 4236de2362d3Smrg 42377821949aSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 42387821949aSmrg defined (__OS2__) 4239de2362d3Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240de2362d3Smrg# define FOPEN_WB "wb" 4241de2362d3Smrg# ifndef DIR_SEPARATOR_2 4242de2362d3Smrg# define DIR_SEPARATOR_2 '\\' 4243de2362d3Smrg# endif 4244de2362d3Smrg# ifndef PATH_SEPARATOR_2 4245de2362d3Smrg# define PATH_SEPARATOR_2 ';' 4246de2362d3Smrg# endif 4247de2362d3Smrg#endif 4248de2362d3Smrg 4249de2362d3Smrg#ifndef DIR_SEPARATOR_2 4250de2362d3Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251de2362d3Smrg#else /* DIR_SEPARATOR_2 */ 4252de2362d3Smrg# define IS_DIR_SEPARATOR(ch) \ 4253de2362d3Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254de2362d3Smrg#endif /* DIR_SEPARATOR_2 */ 4255de2362d3Smrg 4256de2362d3Smrg#ifndef PATH_SEPARATOR_2 4257de2362d3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258de2362d3Smrg#else /* PATH_SEPARATOR_2 */ 4259de2362d3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260de2362d3Smrg#endif /* PATH_SEPARATOR_2 */ 4261de2362d3Smrg 4262de2362d3Smrg#ifndef FOPEN_WB 4263de2362d3Smrg# define FOPEN_WB "w" 4264de2362d3Smrg#endif 4265de2362d3Smrg#ifndef _O_BINARY 4266de2362d3Smrg# define _O_BINARY 0 4267de2362d3Smrg#endif 4268de2362d3Smrg 4269de2362d3Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270de2362d3Smrg#define XFREE(stale) do { \ 42717821949aSmrg if (stale) { free ((void *) stale); stale = 0; } \ 4272de2362d3Smrg} while (0) 4273de2362d3Smrg 42747821949aSmrg#if defined(LT_DEBUGWRAPPER) 4275de2362d3Smrgstatic int lt_debug = 1; 4276de2362d3Smrg#else 4277de2362d3Smrgstatic int lt_debug = 0; 4278de2362d3Smrg#endif 4279de2362d3Smrg 4280de2362d3Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281de2362d3Smrg 4282de2362d3Smrgvoid *xmalloc (size_t num); 4283de2362d3Smrgchar *xstrdup (const char *string); 4284de2362d3Smrgconst char *base_name (const char *name); 4285de2362d3Smrgchar *find_executable (const char *wrapper); 4286de2362d3Smrgchar *chase_symlinks (const char *pathspec); 4287de2362d3Smrgint make_executable (const char *path); 4288de2362d3Smrgint check_executable (const char *path); 4289de2362d3Smrgchar *strendzap (char *str, const char *pat); 4290de2362d3Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4291de2362d3Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 4292de2362d3Smrgstatic const char *nonnull (const char *s); 4293de2362d3Smrgstatic const char *nonempty (const char *s); 4294de2362d3Smrgvoid lt_setenv (const char *name, const char *value); 4295de2362d3Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296de2362d3Smrgvoid lt_update_exe_path (const char *name, const char *value); 4297de2362d3Smrgvoid lt_update_lib_path (const char *name, const char *value); 4298de2362d3Smrgchar **prepare_spawn (char **argv); 4299de2362d3Smrgvoid lt_dump_script (FILE *f); 4300de2362d3SmrgEOF 4301de2362d3Smrg 4302de2362d3Smrg cat <<EOF 43037821949aSmrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304de2362d3Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305de2362d3SmrgEOF 4306de2362d3Smrg 43077821949aSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4308de2362d3Smrg func_to_host_path "$temp_rpath" 4309de2362d3Smrg cat <<EOF 4310de2362d3Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311de2362d3SmrgEOF 4312de2362d3Smrg else 4313de2362d3Smrg cat <<"EOF" 4314de2362d3Smrgconst char * LIB_PATH_VALUE = ""; 4315de2362d3SmrgEOF 4316de2362d3Smrg fi 4317de2362d3Smrg 4318de2362d3Smrg if test -n "$dllsearchpath"; then 4319de2362d3Smrg func_to_host_path "$dllsearchpath:" 4320de2362d3Smrg cat <<EOF 4321de2362d3Smrgconst char * EXE_PATH_VARNAME = "PATH"; 4322de2362d3Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323de2362d3SmrgEOF 4324de2362d3Smrg else 4325de2362d3Smrg cat <<"EOF" 4326de2362d3Smrgconst char * EXE_PATH_VARNAME = ""; 4327de2362d3Smrgconst char * EXE_PATH_VALUE = ""; 4328de2362d3SmrgEOF 4329de2362d3Smrg fi 4330de2362d3Smrg 43317821949aSmrg if test "$fast_install" = yes; then 4332de2362d3Smrg cat <<EOF 4333de2362d3Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334de2362d3SmrgEOF 4335de2362d3Smrg else 4336de2362d3Smrg cat <<EOF 4337de2362d3Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338de2362d3SmrgEOF 4339de2362d3Smrg fi 4340de2362d3Smrg 4341de2362d3Smrg 4342de2362d3Smrg cat <<"EOF" 4343de2362d3Smrg 4344de2362d3Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345de2362d3Smrg 4346de2362d3Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347de2362d3Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4348de2362d3Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349de2362d3Smrg 4350de2362d3Smrgint 4351de2362d3Smrgmain (int argc, char *argv[]) 4352de2362d3Smrg{ 4353de2362d3Smrg char **newargz; 4354de2362d3Smrg int newargc; 4355de2362d3Smrg char *tmp_pathspec; 4356de2362d3Smrg char *actual_cwrapper_path; 4357de2362d3Smrg char *actual_cwrapper_name; 4358de2362d3Smrg char *target_name; 4359de2362d3Smrg char *lt_argv_zero; 43607821949aSmrg intptr_t rval = 127; 4361de2362d3Smrg 4362de2362d3Smrg int i; 4363de2362d3Smrg 4364de2362d3Smrg program_name = (char *) xstrdup (base_name (argv[0])); 43657821949aSmrg newargz = XMALLOC (char *, argc + 1); 4366de2362d3Smrg 4367de2362d3Smrg /* very simple arg parsing; don't want to rely on getopt 4368de2362d3Smrg * also, copy all non cwrapper options to newargz, except 4369de2362d3Smrg * argz[0], which is handled differently 4370de2362d3Smrg */ 4371de2362d3Smrg newargc=0; 4372de2362d3Smrg for (i = 1; i < argc; i++) 4373de2362d3Smrg { 43747821949aSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375de2362d3Smrg { 4376de2362d3SmrgEOF 43777821949aSmrg case "$host" in 4378de2362d3Smrg *mingw* | *cygwin* ) 4379de2362d3Smrg # make stdout use "unix" line endings 4380de2362d3Smrg echo " setmode(1,_O_BINARY);" 4381de2362d3Smrg ;; 4382de2362d3Smrg esac 4383de2362d3Smrg 4384de2362d3Smrg cat <<"EOF" 4385de2362d3Smrg lt_dump_script (stdout); 4386de2362d3Smrg return 0; 4387de2362d3Smrg } 43887821949aSmrg if (strcmp (argv[i], debug_opt) == 0) 4389de2362d3Smrg { 4390de2362d3Smrg lt_debug = 1; 4391de2362d3Smrg continue; 4392de2362d3Smrg } 43937821949aSmrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4394de2362d3Smrg { 4395de2362d3Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4396de2362d3Smrg namespace, but it is not one of the ones we know about and 4397de2362d3Smrg have already dealt with, above (inluding dump-script), then 4398de2362d3Smrg report an error. Otherwise, targets might begin to believe 4399de2362d3Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4400de2362d3Smrg namespace. The first time any user complains about this, we'll 4401de2362d3Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4402de2362d3Smrg or a configure.ac-settable value. 4403de2362d3Smrg */ 4404de2362d3Smrg lt_fatal (__FILE__, __LINE__, 4405de2362d3Smrg "unrecognized %s option: '%s'", 4406de2362d3Smrg ltwrapper_option_prefix, argv[i]); 4407de2362d3Smrg } 4408de2362d3Smrg /* otherwise ... */ 4409de2362d3Smrg newargz[++newargc] = xstrdup (argv[i]); 4410de2362d3Smrg } 4411de2362d3Smrg newargz[++newargc] = NULL; 4412de2362d3Smrg 4413de2362d3SmrgEOF 4414de2362d3Smrg cat <<EOF 4415de2362d3Smrg /* The GNU banner must be the first non-error debug message */ 44167821949aSmrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4417de2362d3SmrgEOF 4418de2362d3Smrg cat <<"EOF" 4419de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4420de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421de2362d3Smrg 4422de2362d3Smrg tmp_pathspec = find_executable (argv[0]); 4423de2362d3Smrg if (tmp_pathspec == NULL) 4424de2362d3Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4425de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 4426de2362d3Smrg "(main) found exe (before symlink chase) at: %s\n", 4427de2362d3Smrg tmp_pathspec); 4428de2362d3Smrg 4429de2362d3Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4430de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 4431de2362d3Smrg "(main) found exe (after symlink chase) at: %s\n", 4432de2362d3Smrg actual_cwrapper_path); 4433de2362d3Smrg XFREE (tmp_pathspec); 4434de2362d3Smrg 4435de2362d3Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436de2362d3Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437de2362d3Smrg 4438de2362d3Smrg /* wrapper name transforms */ 4439de2362d3Smrg strendzap (actual_cwrapper_name, ".exe"); 4440de2362d3Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441de2362d3Smrg XFREE (actual_cwrapper_name); 4442de2362d3Smrg actual_cwrapper_name = tmp_pathspec; 4443de2362d3Smrg tmp_pathspec = 0; 4444de2362d3Smrg 4445de2362d3Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446de2362d3Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447de2362d3Smrg strendzap (target_name, ".exe"); 4448de2362d3Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449de2362d3Smrg XFREE (target_name); 4450de2362d3Smrg target_name = tmp_pathspec; 4451de2362d3Smrg tmp_pathspec = 0; 4452de2362d3Smrg 4453de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 4454de2362d3Smrg "(main) libtool target name: %s\n", 4455de2362d3Smrg target_name); 4456de2362d3SmrgEOF 4457de2362d3Smrg 4458de2362d3Smrg cat <<EOF 4459de2362d3Smrg newargz[0] = 4460de2362d3Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461de2362d3Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462de2362d3Smrg strcpy (newargz[0], actual_cwrapper_path); 4463de2362d3Smrg strcat (newargz[0], "$objdir"); 4464de2362d3Smrg strcat (newargz[0], "/"); 4465de2362d3SmrgEOF 4466de2362d3Smrg 4467de2362d3Smrg cat <<"EOF" 4468de2362d3Smrg /* stop here, and copy so we don't have to do this twice */ 4469de2362d3Smrg tmp_pathspec = xstrdup (newargz[0]); 4470de2362d3Smrg 4471de2362d3Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472de2362d3Smrg strcat (newargz[0], actual_cwrapper_name); 4473de2362d3Smrg 4474de2362d3Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475de2362d3Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476de2362d3Smrg XFREE (tmp_pathspec); 4477de2362d3Smrg tmp_pathspec = NULL; 4478de2362d3SmrgEOF 4479de2362d3Smrg 4480de2362d3Smrg case $host_os in 4481de2362d3Smrg mingw*) 4482de2362d3Smrg cat <<"EOF" 4483de2362d3Smrg { 4484de2362d3Smrg char* p; 4485de2362d3Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486de2362d3Smrg { 4487de2362d3Smrg *p = '/'; 4488de2362d3Smrg } 4489de2362d3Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490de2362d3Smrg { 4491de2362d3Smrg *p = '/'; 4492de2362d3Smrg } 4493de2362d3Smrg } 4494de2362d3SmrgEOF 4495de2362d3Smrg ;; 4496de2362d3Smrg esac 4497de2362d3Smrg 4498de2362d3Smrg cat <<"EOF" 4499de2362d3Smrg XFREE (target_name); 4500de2362d3Smrg XFREE (actual_cwrapper_path); 4501de2362d3Smrg XFREE (actual_cwrapper_name); 4502de2362d3Smrg 4503de2362d3Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504de2362d3Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4505de2362d3Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4506de2362d3Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4507de2362d3Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 4508de2362d3Smrg libraries must come first. */ 4509de2362d3Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4510de2362d3Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511de2362d3Smrg 4512de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4513de2362d3Smrg nonnull (lt_argv_zero)); 4514de2362d3Smrg for (i = 0; i < newargc; i++) 4515de2362d3Smrg { 4516de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4517de2362d3Smrg i, nonnull (newargz[i])); 4518de2362d3Smrg } 4519de2362d3Smrg 4520de2362d3SmrgEOF 4521de2362d3Smrg 4522de2362d3Smrg case $host_os in 4523de2362d3Smrg mingw*) 4524de2362d3Smrg cat <<"EOF" 4525de2362d3Smrg /* execv doesn't actually work on mingw as expected on unix */ 4526de2362d3Smrg newargz = prepare_spawn (newargz); 45277821949aSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528de2362d3Smrg if (rval == -1) 4529de2362d3Smrg { 4530de2362d3Smrg /* failed to start process */ 4531de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 4532de2362d3Smrg "(main) failed to launch target \"%s\": %s\n", 4533de2362d3Smrg lt_argv_zero, nonnull (strerror (errno))); 4534de2362d3Smrg return 127; 4535de2362d3Smrg } 4536de2362d3Smrg return rval; 4537de2362d3SmrgEOF 4538de2362d3Smrg ;; 4539de2362d3Smrg *) 4540de2362d3Smrg cat <<"EOF" 4541de2362d3Smrg execv (lt_argv_zero, newargz); 4542de2362d3Smrg return rval; /* =127, but avoids unused variable warning */ 4543de2362d3SmrgEOF 4544de2362d3Smrg ;; 4545de2362d3Smrg esac 4546de2362d3Smrg 4547de2362d3Smrg cat <<"EOF" 4548de2362d3Smrg} 4549de2362d3Smrg 4550de2362d3Smrgvoid * 4551de2362d3Smrgxmalloc (size_t num) 4552de2362d3Smrg{ 4553de2362d3Smrg void *p = (void *) malloc (num); 4554de2362d3Smrg if (!p) 4555de2362d3Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556de2362d3Smrg 4557de2362d3Smrg return p; 4558de2362d3Smrg} 4559de2362d3Smrg 4560de2362d3Smrgchar * 4561de2362d3Smrgxstrdup (const char *string) 4562de2362d3Smrg{ 4563de2362d3Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564de2362d3Smrg string) : NULL; 4565de2362d3Smrg} 4566de2362d3Smrg 4567de2362d3Smrgconst char * 4568de2362d3Smrgbase_name (const char *name) 4569de2362d3Smrg{ 4570de2362d3Smrg const char *base; 4571de2362d3Smrg 45727821949aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573de2362d3Smrg /* Skip over the disk name in MSDOS pathnames. */ 4574de2362d3Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575de2362d3Smrg name += 2; 4576de2362d3Smrg#endif 4577de2362d3Smrg 4578de2362d3Smrg for (base = name; *name; name++) 4579de2362d3Smrg if (IS_DIR_SEPARATOR (*name)) 4580de2362d3Smrg base = name + 1; 4581de2362d3Smrg return base; 4582de2362d3Smrg} 4583de2362d3Smrg 4584de2362d3Smrgint 4585de2362d3Smrgcheck_executable (const char *path) 4586de2362d3Smrg{ 4587de2362d3Smrg struct stat st; 4588de2362d3Smrg 4589de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4590de2362d3Smrg nonempty (path)); 4591de2362d3Smrg if ((!path) || (!*path)) 4592de2362d3Smrg return 0; 4593de2362d3Smrg 4594de2362d3Smrg if ((stat (path, &st) >= 0) 4595de2362d3Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596de2362d3Smrg return 1; 4597de2362d3Smrg else 4598de2362d3Smrg return 0; 4599de2362d3Smrg} 4600de2362d3Smrg 4601de2362d3Smrgint 4602de2362d3Smrgmake_executable (const char *path) 4603de2362d3Smrg{ 4604de2362d3Smrg int rval = 0; 4605de2362d3Smrg struct stat st; 4606de2362d3Smrg 4607de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4608de2362d3Smrg nonempty (path)); 4609de2362d3Smrg if ((!path) || (!*path)) 4610de2362d3Smrg return 0; 4611de2362d3Smrg 4612de2362d3Smrg if (stat (path, &st) >= 0) 4613de2362d3Smrg { 4614de2362d3Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615de2362d3Smrg } 4616de2362d3Smrg return rval; 4617de2362d3Smrg} 4618de2362d3Smrg 4619de2362d3Smrg/* Searches for the full path of the wrapper. Returns 4620de2362d3Smrg newly allocated full path name if found, NULL otherwise 4621de2362d3Smrg Does not chase symlinks, even on platforms that support them. 4622de2362d3Smrg*/ 4623de2362d3Smrgchar * 4624de2362d3Smrgfind_executable (const char *wrapper) 4625de2362d3Smrg{ 4626de2362d3Smrg int has_slash = 0; 4627de2362d3Smrg const char *p; 4628de2362d3Smrg const char *p_next; 4629de2362d3Smrg /* static buffer for getcwd */ 4630de2362d3Smrg char tmp[LT_PATHMAX + 1]; 46317821949aSmrg int tmp_len; 4632de2362d3Smrg char *concat_name; 4633de2362d3Smrg 4634de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4635de2362d3Smrg nonempty (wrapper)); 4636de2362d3Smrg 4637de2362d3Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638de2362d3Smrg return NULL; 4639de2362d3Smrg 4640de2362d3Smrg /* Absolute path? */ 46417821949aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642de2362d3Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643de2362d3Smrg { 4644de2362d3Smrg concat_name = xstrdup (wrapper); 4645de2362d3Smrg if (check_executable (concat_name)) 4646de2362d3Smrg return concat_name; 4647de2362d3Smrg XFREE (concat_name); 4648de2362d3Smrg } 4649de2362d3Smrg else 4650de2362d3Smrg { 4651de2362d3Smrg#endif 4652de2362d3Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653de2362d3Smrg { 4654de2362d3Smrg concat_name = xstrdup (wrapper); 4655de2362d3Smrg if (check_executable (concat_name)) 4656de2362d3Smrg return concat_name; 4657de2362d3Smrg XFREE (concat_name); 4658de2362d3Smrg } 46597821949aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660de2362d3Smrg } 4661de2362d3Smrg#endif 4662de2362d3Smrg 4663de2362d3Smrg for (p = wrapper; *p; p++) 4664de2362d3Smrg if (*p == '/') 4665de2362d3Smrg { 4666de2362d3Smrg has_slash = 1; 4667de2362d3Smrg break; 4668de2362d3Smrg } 4669de2362d3Smrg if (!has_slash) 4670de2362d3Smrg { 4671de2362d3Smrg /* no slashes; search PATH */ 4672de2362d3Smrg const char *path = getenv ("PATH"); 4673de2362d3Smrg if (path != NULL) 4674de2362d3Smrg { 4675de2362d3Smrg for (p = path; *p; p = p_next) 4676de2362d3Smrg { 4677de2362d3Smrg const char *q; 4678de2362d3Smrg size_t p_len; 4679de2362d3Smrg for (q = p; *q; q++) 4680de2362d3Smrg if (IS_PATH_SEPARATOR (*q)) 4681de2362d3Smrg break; 46827821949aSmrg p_len = q - p; 4683de2362d3Smrg p_next = (*q == '\0' ? q : q + 1); 4684de2362d3Smrg if (p_len == 0) 4685de2362d3Smrg { 4686de2362d3Smrg /* empty path: current directory */ 4687de2362d3Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 4688de2362d3Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4689de2362d3Smrg nonnull (strerror (errno))); 4690de2362d3Smrg tmp_len = strlen (tmp); 4691de2362d3Smrg concat_name = 4692de2362d3Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693de2362d3Smrg memcpy (concat_name, tmp, tmp_len); 4694de2362d3Smrg concat_name[tmp_len] = '/'; 4695de2362d3Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4696de2362d3Smrg } 4697de2362d3Smrg else 4698de2362d3Smrg { 4699de2362d3Smrg concat_name = 4700de2362d3Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701de2362d3Smrg memcpy (concat_name, p, p_len); 4702de2362d3Smrg concat_name[p_len] = '/'; 4703de2362d3Smrg strcpy (concat_name + p_len + 1, wrapper); 4704de2362d3Smrg } 4705de2362d3Smrg if (check_executable (concat_name)) 4706de2362d3Smrg return concat_name; 4707de2362d3Smrg XFREE (concat_name); 4708de2362d3Smrg } 4709de2362d3Smrg } 4710de2362d3Smrg /* not found in PATH; assume curdir */ 4711de2362d3Smrg } 4712de2362d3Smrg /* Relative path | not found in path: prepend cwd */ 4713de2362d3Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 4714de2362d3Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4715de2362d3Smrg nonnull (strerror (errno))); 4716de2362d3Smrg tmp_len = strlen (tmp); 4717de2362d3Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718de2362d3Smrg memcpy (concat_name, tmp, tmp_len); 4719de2362d3Smrg concat_name[tmp_len] = '/'; 4720de2362d3Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4721de2362d3Smrg 4722de2362d3Smrg if (check_executable (concat_name)) 4723de2362d3Smrg return concat_name; 4724de2362d3Smrg XFREE (concat_name); 4725de2362d3Smrg return NULL; 4726de2362d3Smrg} 4727de2362d3Smrg 4728de2362d3Smrgchar * 4729de2362d3Smrgchase_symlinks (const char *pathspec) 4730de2362d3Smrg{ 4731de2362d3Smrg#ifndef S_ISLNK 4732de2362d3Smrg return xstrdup (pathspec); 4733de2362d3Smrg#else 4734de2362d3Smrg char buf[LT_PATHMAX]; 4735de2362d3Smrg struct stat s; 4736de2362d3Smrg char *tmp_pathspec = xstrdup (pathspec); 4737de2362d3Smrg char *p; 4738de2362d3Smrg int has_symlinks = 0; 4739de2362d3Smrg while (strlen (tmp_pathspec) && !has_symlinks) 4740de2362d3Smrg { 4741de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 4742de2362d3Smrg "checking path component for symlinks: %s\n", 4743de2362d3Smrg tmp_pathspec); 4744de2362d3Smrg if (lstat (tmp_pathspec, &s) == 0) 4745de2362d3Smrg { 4746de2362d3Smrg if (S_ISLNK (s.st_mode) != 0) 4747de2362d3Smrg { 4748de2362d3Smrg has_symlinks = 1; 4749de2362d3Smrg break; 4750de2362d3Smrg } 4751de2362d3Smrg 4752de2362d3Smrg /* search backwards for last DIR_SEPARATOR */ 4753de2362d3Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754de2362d3Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755de2362d3Smrg p--; 4756de2362d3Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757de2362d3Smrg { 4758de2362d3Smrg /* no more DIR_SEPARATORS left */ 4759de2362d3Smrg break; 4760de2362d3Smrg } 4761de2362d3Smrg *p = '\0'; 4762de2362d3Smrg } 4763de2362d3Smrg else 4764de2362d3Smrg { 4765de2362d3Smrg lt_fatal (__FILE__, __LINE__, 4766de2362d3Smrg "error accessing file \"%s\": %s", 4767de2362d3Smrg tmp_pathspec, nonnull (strerror (errno))); 4768de2362d3Smrg } 4769de2362d3Smrg } 4770de2362d3Smrg XFREE (tmp_pathspec); 4771de2362d3Smrg 4772de2362d3Smrg if (!has_symlinks) 4773de2362d3Smrg { 4774de2362d3Smrg return xstrdup (pathspec); 4775de2362d3Smrg } 4776de2362d3Smrg 4777de2362d3Smrg tmp_pathspec = realpath (pathspec, buf); 4778de2362d3Smrg if (tmp_pathspec == 0) 4779de2362d3Smrg { 4780de2362d3Smrg lt_fatal (__FILE__, __LINE__, 4781de2362d3Smrg "could not follow symlinks for %s", pathspec); 4782de2362d3Smrg } 4783de2362d3Smrg return xstrdup (tmp_pathspec); 4784de2362d3Smrg#endif 4785de2362d3Smrg} 4786de2362d3Smrg 4787de2362d3Smrgchar * 4788de2362d3Smrgstrendzap (char *str, const char *pat) 4789de2362d3Smrg{ 4790de2362d3Smrg size_t len, patlen; 4791de2362d3Smrg 4792de2362d3Smrg assert (str != NULL); 4793de2362d3Smrg assert (pat != NULL); 4794de2362d3Smrg 4795de2362d3Smrg len = strlen (str); 4796de2362d3Smrg patlen = strlen (pat); 4797de2362d3Smrg 4798de2362d3Smrg if (patlen <= len) 4799de2362d3Smrg { 4800de2362d3Smrg str += len - patlen; 48017821949aSmrg if (strcmp (str, pat) == 0) 4802de2362d3Smrg *str = '\0'; 4803de2362d3Smrg } 4804de2362d3Smrg return str; 4805de2362d3Smrg} 4806de2362d3Smrg 4807de2362d3Smrgvoid 4808de2362d3Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 4809de2362d3Smrg{ 4810de2362d3Smrg va_list args; 4811de2362d3Smrg if (lt_debug) 4812de2362d3Smrg { 4813de2362d3Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4814de2362d3Smrg va_start (args, fmt); 4815de2362d3Smrg (void) vfprintf (stderr, fmt, args); 4816de2362d3Smrg va_end (args); 4817de2362d3Smrg } 4818de2362d3Smrg} 4819de2362d3Smrg 4820de2362d3Smrgstatic void 4821de2362d3Smrglt_error_core (int exit_status, const char *file, 4822de2362d3Smrg int line, const char *mode, 4823de2362d3Smrg const char *message, va_list ap) 4824de2362d3Smrg{ 4825de2362d3Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826de2362d3Smrg vfprintf (stderr, message, ap); 4827de2362d3Smrg fprintf (stderr, ".\n"); 4828de2362d3Smrg 4829de2362d3Smrg if (exit_status >= 0) 4830de2362d3Smrg exit (exit_status); 4831de2362d3Smrg} 4832de2362d3Smrg 4833de2362d3Smrgvoid 4834de2362d3Smrglt_fatal (const char *file, int line, const char *message, ...) 4835de2362d3Smrg{ 4836de2362d3Smrg va_list ap; 4837de2362d3Smrg va_start (ap, message); 4838de2362d3Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839de2362d3Smrg va_end (ap); 4840de2362d3Smrg} 4841de2362d3Smrg 4842de2362d3Smrgstatic const char * 4843de2362d3Smrgnonnull (const char *s) 4844de2362d3Smrg{ 4845de2362d3Smrg return s ? s : "(null)"; 4846de2362d3Smrg} 4847de2362d3Smrg 4848de2362d3Smrgstatic const char * 4849de2362d3Smrgnonempty (const char *s) 4850de2362d3Smrg{ 4851de2362d3Smrg return (s && !*s) ? "(empty)" : nonnull (s); 4852de2362d3Smrg} 4853de2362d3Smrg 4854de2362d3Smrgvoid 4855de2362d3Smrglt_setenv (const char *name, const char *value) 4856de2362d3Smrg{ 4857de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 4858de2362d3Smrg "(lt_setenv) setting '%s' to '%s'\n", 4859de2362d3Smrg nonnull (name), nonnull (value)); 4860de2362d3Smrg { 4861de2362d3Smrg#ifdef HAVE_SETENV 4862de2362d3Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863de2362d3Smrg char *str = xstrdup (value); 4864de2362d3Smrg setenv (name, str, 1); 4865de2362d3Smrg#else 48667821949aSmrg int len = strlen (name) + 1 + strlen (value) + 1; 4867de2362d3Smrg char *str = XMALLOC (char, len); 4868de2362d3Smrg sprintf (str, "%s=%s", name, value); 4869de2362d3Smrg if (putenv (str) != EXIT_SUCCESS) 4870de2362d3Smrg { 4871de2362d3Smrg XFREE (str); 4872de2362d3Smrg } 4873de2362d3Smrg#endif 4874de2362d3Smrg } 4875de2362d3Smrg} 4876de2362d3Smrg 4877de2362d3Smrgchar * 4878de2362d3Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879de2362d3Smrg{ 4880de2362d3Smrg char *new_value; 4881de2362d3Smrg if (orig_value && *orig_value) 4882de2362d3Smrg { 48837821949aSmrg int orig_value_len = strlen (orig_value); 48847821949aSmrg int add_len = strlen (add); 4885de2362d3Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886de2362d3Smrg if (to_end) 4887de2362d3Smrg { 4888de2362d3Smrg strcpy (new_value, orig_value); 4889de2362d3Smrg strcpy (new_value + orig_value_len, add); 4890de2362d3Smrg } 4891de2362d3Smrg else 4892de2362d3Smrg { 4893de2362d3Smrg strcpy (new_value, add); 4894de2362d3Smrg strcpy (new_value + add_len, orig_value); 4895de2362d3Smrg } 4896de2362d3Smrg } 4897de2362d3Smrg else 4898de2362d3Smrg { 4899de2362d3Smrg new_value = xstrdup (add); 4900de2362d3Smrg } 4901de2362d3Smrg return new_value; 4902de2362d3Smrg} 4903de2362d3Smrg 4904de2362d3Smrgvoid 4905de2362d3Smrglt_update_exe_path (const char *name, const char *value) 4906de2362d3Smrg{ 4907de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 4908de2362d3Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4909de2362d3Smrg nonnull (name), nonnull (value)); 4910de2362d3Smrg 4911de2362d3Smrg if (name && *name && value && *value) 4912de2362d3Smrg { 4913de2362d3Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914de2362d3Smrg /* some systems can't cope with a ':'-terminated path #' */ 49157821949aSmrg int len = strlen (new_value); 49167821949aSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917de2362d3Smrg { 49187821949aSmrg new_value[len-1] = '\0'; 4919de2362d3Smrg } 4920de2362d3Smrg lt_setenv (name, new_value); 4921de2362d3Smrg XFREE (new_value); 4922de2362d3Smrg } 4923de2362d3Smrg} 4924de2362d3Smrg 4925de2362d3Smrgvoid 4926de2362d3Smrglt_update_lib_path (const char *name, const char *value) 4927de2362d3Smrg{ 4928de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 4929de2362d3Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4930de2362d3Smrg nonnull (name), nonnull (value)); 4931de2362d3Smrg 4932de2362d3Smrg if (name && *name && value && *value) 4933de2362d3Smrg { 4934de2362d3Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935de2362d3Smrg lt_setenv (name, new_value); 4936de2362d3Smrg XFREE (new_value); 4937de2362d3Smrg } 4938de2362d3Smrg} 4939de2362d3Smrg 4940de2362d3SmrgEOF 4941de2362d3Smrg case $host_os in 4942de2362d3Smrg mingw*) 4943de2362d3Smrg cat <<"EOF" 4944de2362d3Smrg 4945de2362d3Smrg/* Prepares an argument vector before calling spawn(). 4946de2362d3Smrg Note that spawn() does not by itself call the command interpreter 4947de2362d3Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4948de2362d3Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4949de2362d3Smrg GetVersionEx(&v); 4950de2362d3Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4951de2362d3Smrg }) ? "cmd.exe" : "command.com"). 4952de2362d3Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 4953de2362d3Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4954de2362d3Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4955de2362d3Smrg special way: 4956de2362d3Smrg - Space and tab are interpreted as delimiters. They are not treated as 4957de2362d3Smrg delimiters if they are surrounded by double quotes: "...". 4958de2362d3Smrg - Unescaped double quotes are removed from the input. Their only effect is 4959de2362d3Smrg that within double quotes, space and tab are treated like normal 4960de2362d3Smrg characters. 4961de2362d3Smrg - Backslashes not followed by double quotes are not special. 4962de2362d3Smrg - But 2*n+1 backslashes followed by a double quote become 4963de2362d3Smrg n backslashes followed by a double quote (n >= 0): 4964de2362d3Smrg \" -> " 4965de2362d3Smrg \\\" -> \" 4966de2362d3Smrg \\\\\" -> \\" 4967de2362d3Smrg */ 4968de2362d3Smrg#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" 4969de2362d3Smrg#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" 4970de2362d3Smrgchar ** 4971de2362d3Smrgprepare_spawn (char **argv) 4972de2362d3Smrg{ 4973de2362d3Smrg size_t argc; 4974de2362d3Smrg char **new_argv; 4975de2362d3Smrg size_t i; 4976de2362d3Smrg 4977de2362d3Smrg /* Count number of arguments. */ 4978de2362d3Smrg for (argc = 0; argv[argc] != NULL; argc++) 4979de2362d3Smrg ; 4980de2362d3Smrg 4981de2362d3Smrg /* Allocate new argument vector. */ 4982de2362d3Smrg new_argv = XMALLOC (char *, argc + 1); 4983de2362d3Smrg 4984de2362d3Smrg /* Put quoted arguments into the new argument vector. */ 4985de2362d3Smrg for (i = 0; i < argc; i++) 4986de2362d3Smrg { 4987de2362d3Smrg const char *string = argv[i]; 4988de2362d3Smrg 4989de2362d3Smrg if (string[0] == '\0') 4990de2362d3Smrg new_argv[i] = xstrdup ("\"\""); 4991de2362d3Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4992de2362d3Smrg { 4993de2362d3Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4994de2362d3Smrg size_t length; 4995de2362d3Smrg unsigned int backslashes; 4996de2362d3Smrg const char *s; 4997de2362d3Smrg char *quoted_string; 4998de2362d3Smrg char *p; 4999de2362d3Smrg 5000de2362d3Smrg length = 0; 5001de2362d3Smrg backslashes = 0; 5002de2362d3Smrg if (quote_around) 5003de2362d3Smrg length++; 5004de2362d3Smrg for (s = string; *s != '\0'; s++) 5005de2362d3Smrg { 5006de2362d3Smrg char c = *s; 5007de2362d3Smrg if (c == '"') 5008de2362d3Smrg length += backslashes + 1; 5009de2362d3Smrg length++; 5010de2362d3Smrg if (c == '\\') 5011de2362d3Smrg backslashes++; 5012de2362d3Smrg else 5013de2362d3Smrg backslashes = 0; 5014de2362d3Smrg } 5015de2362d3Smrg if (quote_around) 5016de2362d3Smrg length += backslashes + 1; 5017de2362d3Smrg 5018de2362d3Smrg quoted_string = XMALLOC (char, length + 1); 5019de2362d3Smrg 5020de2362d3Smrg p = quoted_string; 5021de2362d3Smrg backslashes = 0; 5022de2362d3Smrg if (quote_around) 5023de2362d3Smrg *p++ = '"'; 5024de2362d3Smrg for (s = string; *s != '\0'; s++) 5025de2362d3Smrg { 5026de2362d3Smrg char c = *s; 5027de2362d3Smrg if (c == '"') 5028de2362d3Smrg { 5029de2362d3Smrg unsigned int j; 5030de2362d3Smrg for (j = backslashes + 1; j > 0; j--) 5031de2362d3Smrg *p++ = '\\'; 5032de2362d3Smrg } 5033de2362d3Smrg *p++ = c; 5034de2362d3Smrg if (c == '\\') 5035de2362d3Smrg backslashes++; 5036de2362d3Smrg else 5037de2362d3Smrg backslashes = 0; 5038de2362d3Smrg } 5039de2362d3Smrg if (quote_around) 5040de2362d3Smrg { 5041de2362d3Smrg unsigned int j; 5042de2362d3Smrg for (j = backslashes; j > 0; j--) 5043de2362d3Smrg *p++ = '\\'; 5044de2362d3Smrg *p++ = '"'; 5045de2362d3Smrg } 5046de2362d3Smrg *p = '\0'; 5047de2362d3Smrg 5048de2362d3Smrg new_argv[i] = quoted_string; 5049de2362d3Smrg } 5050de2362d3Smrg else 5051de2362d3Smrg new_argv[i] = (char *) string; 5052de2362d3Smrg } 5053de2362d3Smrg new_argv[argc] = NULL; 5054de2362d3Smrg 5055de2362d3Smrg return new_argv; 5056de2362d3Smrg} 5057de2362d3SmrgEOF 5058de2362d3Smrg ;; 5059de2362d3Smrg esac 5060de2362d3Smrg 5061de2362d3Smrg cat <<"EOF" 5062de2362d3Smrgvoid lt_dump_script (FILE* f) 5063de2362d3Smrg{ 5064de2362d3SmrgEOF 5065de2362d3Smrg func_emit_wrapper yes | 5066de2362d3Smrg $SED -n -e ' 5067de2362d3Smrgs/^\(.\{79\}\)\(..*\)/\1\ 5068de2362d3Smrg\2/ 5069de2362d3Smrgh 5070de2362d3Smrgs/\([\\"]\)/\\\1/g 5071de2362d3Smrgs/$/\\n/ 5072de2362d3Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 5073de2362d3Smrgg 5074de2362d3SmrgD' 5075de2362d3Smrg cat <<"EOF" 5076de2362d3Smrg} 5077de2362d3SmrgEOF 5078de2362d3Smrg} 5079de2362d3Smrg# end: func_emit_cwrapperexe_src 5080de2362d3Smrg 5081de2362d3Smrg# func_win32_import_lib_p ARG 5082de2362d3Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 5083de2362d3Smrgfunc_win32_import_lib_p () 5084de2362d3Smrg{ 50857821949aSmrg $opt_debug 5086de2362d3Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5087de2362d3Smrg *import*) : ;; 5088de2362d3Smrg *) false ;; 5089de2362d3Smrg esac 5090de2362d3Smrg} 5091de2362d3Smrg 5092de2362d3Smrg# func_mode_link arg... 5093de2362d3Smrgfunc_mode_link () 5094de2362d3Smrg{ 50957821949aSmrg $opt_debug 5096de2362d3Smrg case $host in 5097de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098de2362d3Smrg # It is impossible to link a dll without this setting, and 5099de2362d3Smrg # we shouldn't force the makefile maintainer to figure out 51007821949aSmrg # which system we are compiling for in order to pass an extra 5101de2362d3Smrg # flag for every libtool invocation. 5102de2362d3Smrg # allow_undefined=no 5103de2362d3Smrg 5104de2362d3Smrg # FIXME: Unfortunately, there are problems with the above when trying 51057821949aSmrg # to make a dll which has undefined symbols, in which case not 5106de2362d3Smrg # even a static library is built. For now, we need to specify 5107de2362d3Smrg # -no-undefined on the libtool link line when we can be certain 5108de2362d3Smrg # that all symbols are satisfied, otherwise we get a static library. 5109de2362d3Smrg allow_undefined=yes 5110de2362d3Smrg ;; 5111de2362d3Smrg *) 5112de2362d3Smrg allow_undefined=yes 5113de2362d3Smrg ;; 5114de2362d3Smrg esac 5115de2362d3Smrg libtool_args=$nonopt 5116de2362d3Smrg base_compile="$nonopt $@" 5117de2362d3Smrg compile_command=$nonopt 5118de2362d3Smrg finalize_command=$nonopt 5119de2362d3Smrg 5120de2362d3Smrg compile_rpath= 5121de2362d3Smrg finalize_rpath= 5122de2362d3Smrg compile_shlibpath= 5123de2362d3Smrg finalize_shlibpath= 5124de2362d3Smrg convenience= 5125de2362d3Smrg old_convenience= 5126de2362d3Smrg deplibs= 5127de2362d3Smrg old_deplibs= 5128de2362d3Smrg compiler_flags= 5129de2362d3Smrg linker_flags= 5130de2362d3Smrg dllsearchpath= 5131de2362d3Smrg lib_search_path=`pwd` 5132de2362d3Smrg inst_prefix_dir= 5133de2362d3Smrg new_inherited_linker_flags= 5134de2362d3Smrg 5135de2362d3Smrg avoid_version=no 5136de2362d3Smrg bindir= 5137de2362d3Smrg dlfiles= 5138de2362d3Smrg dlprefiles= 5139de2362d3Smrg dlself=no 5140de2362d3Smrg export_dynamic=no 5141de2362d3Smrg export_symbols= 5142de2362d3Smrg export_symbols_regex= 5143de2362d3Smrg generated= 5144de2362d3Smrg libobjs= 5145de2362d3Smrg ltlibs= 5146de2362d3Smrg module=no 5147de2362d3Smrg no_install=no 5148de2362d3Smrg objs= 5149de2362d3Smrg non_pic_objects= 5150de2362d3Smrg precious_files_regex= 5151de2362d3Smrg prefer_static_libs=no 51527821949aSmrg preload=no 5153de2362d3Smrg prev= 5154de2362d3Smrg prevarg= 5155de2362d3Smrg release= 5156de2362d3Smrg rpath= 5157de2362d3Smrg xrpath= 5158de2362d3Smrg perm_rpath= 5159de2362d3Smrg temp_rpath= 5160de2362d3Smrg thread_safe=no 5161de2362d3Smrg vinfo= 5162de2362d3Smrg vinfo_number=no 5163de2362d3Smrg weak_libs= 51647821949aSmrg single_module="${wl}-single_module" 5165de2362d3Smrg func_infer_tag $base_compile 5166de2362d3Smrg 5167de2362d3Smrg # We need to know -static, to get the right output filenames. 5168de2362d3Smrg for arg 5169de2362d3Smrg do 5170de2362d3Smrg case $arg in 5171de2362d3Smrg -shared) 51727821949aSmrg test "$build_libtool_libs" != yes && \ 51737821949aSmrg func_fatal_configuration "can not build a shared library" 5174de2362d3Smrg build_old_libs=no 5175de2362d3Smrg break 5176de2362d3Smrg ;; 5177de2362d3Smrg -all-static | -static | -static-libtool-libs) 5178de2362d3Smrg case $arg in 5179de2362d3Smrg -all-static) 51807821949aSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181de2362d3Smrg func_warning "complete static linking is impossible in this configuration" 5182de2362d3Smrg fi 5183de2362d3Smrg if test -n "$link_static_flag"; then 5184de2362d3Smrg dlopen_self=$dlopen_self_static 5185de2362d3Smrg fi 5186de2362d3Smrg prefer_static_libs=yes 5187de2362d3Smrg ;; 5188de2362d3Smrg -static) 5189de2362d3Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190de2362d3Smrg dlopen_self=$dlopen_self_static 5191de2362d3Smrg fi 5192de2362d3Smrg prefer_static_libs=built 5193de2362d3Smrg ;; 5194de2362d3Smrg -static-libtool-libs) 5195de2362d3Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196de2362d3Smrg dlopen_self=$dlopen_self_static 5197de2362d3Smrg fi 5198de2362d3Smrg prefer_static_libs=yes 5199de2362d3Smrg ;; 5200de2362d3Smrg esac 5201de2362d3Smrg build_libtool_libs=no 5202de2362d3Smrg build_old_libs=yes 5203de2362d3Smrg break 5204de2362d3Smrg ;; 5205de2362d3Smrg esac 5206de2362d3Smrg done 5207de2362d3Smrg 5208de2362d3Smrg # See if our shared archives depend on static archives. 5209de2362d3Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210de2362d3Smrg 5211de2362d3Smrg # Go through the arguments, transforming them on the way. 5212de2362d3Smrg while test "$#" -gt 0; do 52137821949aSmrg arg="$1" 5214de2362d3Smrg shift 5215de2362d3Smrg func_quote_for_eval "$arg" 5216de2362d3Smrg qarg=$func_quote_for_eval_unquoted_result 5217de2362d3Smrg func_append libtool_args " $func_quote_for_eval_result" 5218de2362d3Smrg 5219de2362d3Smrg # If the previous option needs an argument, assign it. 5220de2362d3Smrg if test -n "$prev"; then 5221de2362d3Smrg case $prev in 5222de2362d3Smrg output) 5223de2362d3Smrg func_append compile_command " @OUTPUT@" 5224de2362d3Smrg func_append finalize_command " @OUTPUT@" 5225de2362d3Smrg ;; 5226de2362d3Smrg esac 5227de2362d3Smrg 5228de2362d3Smrg case $prev in 5229de2362d3Smrg bindir) 52307821949aSmrg bindir="$arg" 5231de2362d3Smrg prev= 5232de2362d3Smrg continue 5233de2362d3Smrg ;; 5234de2362d3Smrg dlfiles|dlprefiles) 52357821949aSmrg if test "$preload" = no; then 5236de2362d3Smrg # Add the symbol object into the linking commands. 5237de2362d3Smrg func_append compile_command " @SYMFILE@" 5238de2362d3Smrg func_append finalize_command " @SYMFILE@" 52397821949aSmrg preload=yes 52407821949aSmrg fi 5241de2362d3Smrg case $arg in 5242de2362d3Smrg *.la | *.lo) ;; # We handle these cases below. 5243de2362d3Smrg force) 52447821949aSmrg if test "$dlself" = no; then 5245de2362d3Smrg dlself=needless 5246de2362d3Smrg export_dynamic=yes 5247de2362d3Smrg fi 5248de2362d3Smrg prev= 5249de2362d3Smrg continue 5250de2362d3Smrg ;; 5251de2362d3Smrg self) 52527821949aSmrg if test "$prev" = dlprefiles; then 5253de2362d3Smrg dlself=yes 52547821949aSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255de2362d3Smrg dlself=yes 5256de2362d3Smrg else 5257de2362d3Smrg dlself=needless 5258de2362d3Smrg export_dynamic=yes 5259de2362d3Smrg fi 5260de2362d3Smrg prev= 5261de2362d3Smrg continue 5262de2362d3Smrg ;; 5263de2362d3Smrg *) 52647821949aSmrg if test "$prev" = dlfiles; then 5265de2362d3Smrg func_append dlfiles " $arg" 5266de2362d3Smrg else 5267de2362d3Smrg func_append dlprefiles " $arg" 5268de2362d3Smrg fi 5269de2362d3Smrg prev= 5270de2362d3Smrg continue 5271de2362d3Smrg ;; 5272de2362d3Smrg esac 5273de2362d3Smrg ;; 5274de2362d3Smrg expsyms) 52757821949aSmrg export_symbols="$arg" 5276de2362d3Smrg test -f "$arg" \ 52777821949aSmrg || func_fatal_error "symbol file \`$arg' does not exist" 5278de2362d3Smrg prev= 5279de2362d3Smrg continue 5280de2362d3Smrg ;; 5281de2362d3Smrg expsyms_regex) 52827821949aSmrg export_symbols_regex="$arg" 5283de2362d3Smrg prev= 5284de2362d3Smrg continue 5285de2362d3Smrg ;; 5286de2362d3Smrg framework) 5287de2362d3Smrg case $host in 5288de2362d3Smrg *-*-darwin*) 5289de2362d3Smrg case "$deplibs " in 5290de2362d3Smrg *" $qarg.ltframework "*) ;; 5291de2362d3Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292de2362d3Smrg ;; 5293de2362d3Smrg esac 5294de2362d3Smrg ;; 5295de2362d3Smrg esac 5296de2362d3Smrg prev= 5297de2362d3Smrg continue 5298de2362d3Smrg ;; 5299de2362d3Smrg inst_prefix) 53007821949aSmrg inst_prefix_dir="$arg" 5301de2362d3Smrg prev= 5302de2362d3Smrg continue 5303de2362d3Smrg ;; 5304de2362d3Smrg objectlist) 5305de2362d3Smrg if test -f "$arg"; then 5306de2362d3Smrg save_arg=$arg 5307de2362d3Smrg moreargs= 5308de2362d3Smrg for fil in `cat "$save_arg"` 5309de2362d3Smrg do 5310de2362d3Smrg# func_append moreargs " $fil" 5311de2362d3Smrg arg=$fil 5312de2362d3Smrg # A libtool-controlled object. 5313de2362d3Smrg 5314de2362d3Smrg # Check to see that this really is a libtool object. 5315de2362d3Smrg if func_lalib_unsafe_p "$arg"; then 5316de2362d3Smrg pic_object= 5317de2362d3Smrg non_pic_object= 5318de2362d3Smrg 5319de2362d3Smrg # Read the .lo file 5320de2362d3Smrg func_source "$arg" 5321de2362d3Smrg 5322de2362d3Smrg if test -z "$pic_object" || 5323de2362d3Smrg test -z "$non_pic_object" || 53247821949aSmrg test "$pic_object" = none && 53257821949aSmrg test "$non_pic_object" = none; then 53267821949aSmrg func_fatal_error "cannot find name of object for \`$arg'" 5327de2362d3Smrg fi 5328de2362d3Smrg 5329de2362d3Smrg # Extract subdirectory from the argument. 5330de2362d3Smrg func_dirname "$arg" "/" "" 53317821949aSmrg xdir="$func_dirname_result" 5332de2362d3Smrg 53337821949aSmrg if test "$pic_object" != none; then 5334de2362d3Smrg # Prepend the subdirectory the object is found in. 53357821949aSmrg pic_object="$xdir$pic_object" 5336de2362d3Smrg 53377821949aSmrg if test "$prev" = dlfiles; then 53387821949aSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5339de2362d3Smrg func_append dlfiles " $pic_object" 5340de2362d3Smrg prev= 5341de2362d3Smrg continue 5342de2362d3Smrg else 5343de2362d3Smrg # If libtool objects are unsupported, then we need to preload. 5344de2362d3Smrg prev=dlprefiles 5345de2362d3Smrg fi 5346de2362d3Smrg fi 5347de2362d3Smrg 5348de2362d3Smrg # CHECK ME: I think I busted this. -Ossama 53497821949aSmrg if test "$prev" = dlprefiles; then 5350de2362d3Smrg # Preload the old-style object. 5351de2362d3Smrg func_append dlprefiles " $pic_object" 5352de2362d3Smrg prev= 5353de2362d3Smrg fi 5354de2362d3Smrg 5355de2362d3Smrg # A PIC object. 5356de2362d3Smrg func_append libobjs " $pic_object" 53577821949aSmrg arg="$pic_object" 5358de2362d3Smrg fi 5359de2362d3Smrg 5360de2362d3Smrg # Non-PIC object. 53617821949aSmrg if test "$non_pic_object" != none; then 5362de2362d3Smrg # Prepend the subdirectory the object is found in. 53637821949aSmrg non_pic_object="$xdir$non_pic_object" 5364de2362d3Smrg 5365de2362d3Smrg # A standard non-PIC object 5366de2362d3Smrg func_append non_pic_objects " $non_pic_object" 53677821949aSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 53687821949aSmrg arg="$non_pic_object" 5369de2362d3Smrg fi 5370de2362d3Smrg else 5371de2362d3Smrg # If the PIC object exists, use it instead. 5372de2362d3Smrg # $xdir was prepended to $pic_object above. 53737821949aSmrg non_pic_object="$pic_object" 5374de2362d3Smrg func_append non_pic_objects " $non_pic_object" 5375de2362d3Smrg fi 5376de2362d3Smrg else 5377de2362d3Smrg # Only an error if not doing a dry-run. 5378de2362d3Smrg if $opt_dry_run; then 5379de2362d3Smrg # Extract subdirectory from the argument. 5380de2362d3Smrg func_dirname "$arg" "/" "" 53817821949aSmrg xdir="$func_dirname_result" 5382de2362d3Smrg 5383de2362d3Smrg func_lo2o "$arg" 5384de2362d3Smrg pic_object=$xdir$objdir/$func_lo2o_result 5385de2362d3Smrg non_pic_object=$xdir$func_lo2o_result 5386de2362d3Smrg func_append libobjs " $pic_object" 5387de2362d3Smrg func_append non_pic_objects " $non_pic_object" 5388de2362d3Smrg else 53897821949aSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5390de2362d3Smrg fi 5391de2362d3Smrg fi 5392de2362d3Smrg done 5393de2362d3Smrg else 53947821949aSmrg func_fatal_error "link input file \`$arg' does not exist" 5395de2362d3Smrg fi 5396de2362d3Smrg arg=$save_arg 5397de2362d3Smrg prev= 5398de2362d3Smrg continue 5399de2362d3Smrg ;; 5400de2362d3Smrg precious_regex) 54017821949aSmrg precious_files_regex="$arg" 5402de2362d3Smrg prev= 5403de2362d3Smrg continue 5404de2362d3Smrg ;; 5405de2362d3Smrg release) 54067821949aSmrg release="-$arg" 5407de2362d3Smrg prev= 5408de2362d3Smrg continue 5409de2362d3Smrg ;; 5410de2362d3Smrg rpath | xrpath) 5411de2362d3Smrg # We need an absolute path. 5412de2362d3Smrg case $arg in 5413de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414de2362d3Smrg *) 5415de2362d3Smrg func_fatal_error "only absolute run-paths are allowed" 5416de2362d3Smrg ;; 5417de2362d3Smrg esac 54187821949aSmrg if test "$prev" = rpath; then 5419de2362d3Smrg case "$rpath " in 5420de2362d3Smrg *" $arg "*) ;; 5421de2362d3Smrg *) func_append rpath " $arg" ;; 5422de2362d3Smrg esac 5423de2362d3Smrg else 5424de2362d3Smrg case "$xrpath " in 5425de2362d3Smrg *" $arg "*) ;; 5426de2362d3Smrg *) func_append xrpath " $arg" ;; 5427de2362d3Smrg esac 5428de2362d3Smrg fi 5429de2362d3Smrg prev= 5430de2362d3Smrg continue 5431de2362d3Smrg ;; 5432de2362d3Smrg shrext) 54337821949aSmrg shrext_cmds="$arg" 5434de2362d3Smrg prev= 5435de2362d3Smrg continue 5436de2362d3Smrg ;; 5437de2362d3Smrg weak) 5438de2362d3Smrg func_append weak_libs " $arg" 5439de2362d3Smrg prev= 5440de2362d3Smrg continue 5441de2362d3Smrg ;; 5442de2362d3Smrg xcclinker) 5443de2362d3Smrg func_append linker_flags " $qarg" 5444de2362d3Smrg func_append compiler_flags " $qarg" 5445de2362d3Smrg prev= 5446de2362d3Smrg func_append compile_command " $qarg" 5447de2362d3Smrg func_append finalize_command " $qarg" 5448de2362d3Smrg continue 5449de2362d3Smrg ;; 5450de2362d3Smrg xcompiler) 5451de2362d3Smrg func_append compiler_flags " $qarg" 5452de2362d3Smrg prev= 5453de2362d3Smrg func_append compile_command " $qarg" 5454de2362d3Smrg func_append finalize_command " $qarg" 5455de2362d3Smrg continue 5456de2362d3Smrg ;; 5457de2362d3Smrg xlinker) 5458de2362d3Smrg func_append linker_flags " $qarg" 5459de2362d3Smrg func_append compiler_flags " $wl$qarg" 5460de2362d3Smrg prev= 5461de2362d3Smrg func_append compile_command " $wl$qarg" 5462de2362d3Smrg func_append finalize_command " $wl$qarg" 5463de2362d3Smrg continue 5464de2362d3Smrg ;; 5465de2362d3Smrg *) 5466de2362d3Smrg eval "$prev=\"\$arg\"" 5467de2362d3Smrg prev= 5468de2362d3Smrg continue 5469de2362d3Smrg ;; 5470de2362d3Smrg esac 5471de2362d3Smrg fi # test -n "$prev" 5472de2362d3Smrg 54737821949aSmrg prevarg="$arg" 5474de2362d3Smrg 5475de2362d3Smrg case $arg in 5476de2362d3Smrg -all-static) 5477de2362d3Smrg if test -n "$link_static_flag"; then 5478de2362d3Smrg # See comment for -static flag below, for more details. 5479de2362d3Smrg func_append compile_command " $link_static_flag" 5480de2362d3Smrg func_append finalize_command " $link_static_flag" 5481de2362d3Smrg fi 5482de2362d3Smrg continue 5483de2362d3Smrg ;; 5484de2362d3Smrg 5485de2362d3Smrg -allow-undefined) 5486de2362d3Smrg # FIXME: remove this flag sometime in the future. 54877821949aSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488de2362d3Smrg ;; 5489de2362d3Smrg 5490de2362d3Smrg -avoid-version) 5491de2362d3Smrg avoid_version=yes 5492de2362d3Smrg continue 5493de2362d3Smrg ;; 5494de2362d3Smrg 5495de2362d3Smrg -bindir) 5496de2362d3Smrg prev=bindir 5497de2362d3Smrg continue 5498de2362d3Smrg ;; 5499de2362d3Smrg 5500de2362d3Smrg -dlopen) 5501de2362d3Smrg prev=dlfiles 5502de2362d3Smrg continue 5503de2362d3Smrg ;; 5504de2362d3Smrg 5505de2362d3Smrg -dlpreopen) 5506de2362d3Smrg prev=dlprefiles 5507de2362d3Smrg continue 5508de2362d3Smrg ;; 5509de2362d3Smrg 5510de2362d3Smrg -export-dynamic) 5511de2362d3Smrg export_dynamic=yes 5512de2362d3Smrg continue 5513de2362d3Smrg ;; 5514de2362d3Smrg 5515de2362d3Smrg -export-symbols | -export-symbols-regex) 5516de2362d3Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517de2362d3Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518de2362d3Smrg fi 55197821949aSmrg if test "X$arg" = "X-export-symbols"; then 5520de2362d3Smrg prev=expsyms 5521de2362d3Smrg else 5522de2362d3Smrg prev=expsyms_regex 5523de2362d3Smrg fi 5524de2362d3Smrg continue 5525de2362d3Smrg ;; 5526de2362d3Smrg 5527de2362d3Smrg -framework) 5528de2362d3Smrg prev=framework 5529de2362d3Smrg continue 5530de2362d3Smrg ;; 5531de2362d3Smrg 5532de2362d3Smrg -inst-prefix-dir) 5533de2362d3Smrg prev=inst_prefix 5534de2362d3Smrg continue 5535de2362d3Smrg ;; 5536de2362d3Smrg 5537de2362d3Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538de2362d3Smrg # so, if we see these flags be careful not to treat them like -L 5539de2362d3Smrg -L[A-Z][A-Z]*:*) 5540de2362d3Smrg case $with_gcc/$host in 5541de2362d3Smrg no/*-*-irix* | /*-*-irix*) 5542de2362d3Smrg func_append compile_command " $arg" 5543de2362d3Smrg func_append finalize_command " $arg" 5544de2362d3Smrg ;; 5545de2362d3Smrg esac 5546de2362d3Smrg continue 5547de2362d3Smrg ;; 5548de2362d3Smrg 5549de2362d3Smrg -L*) 5550de2362d3Smrg func_stripname "-L" '' "$arg" 5551de2362d3Smrg if test -z "$func_stripname_result"; then 5552de2362d3Smrg if test "$#" -gt 0; then 55537821949aSmrg func_fatal_error "require no space between \`-L' and \`$1'" 5554de2362d3Smrg else 55557821949aSmrg func_fatal_error "need path for \`-L' option" 5556de2362d3Smrg fi 5557de2362d3Smrg fi 5558de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 5559de2362d3Smrg dir=$func_resolve_sysroot_result 5560de2362d3Smrg # We need an absolute path. 5561de2362d3Smrg case $dir in 5562de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563de2362d3Smrg *) 5564de2362d3Smrg absdir=`cd "$dir" && pwd` 5565de2362d3Smrg test -z "$absdir" && \ 55667821949aSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 55677821949aSmrg dir="$absdir" 5568de2362d3Smrg ;; 5569de2362d3Smrg esac 5570de2362d3Smrg case "$deplibs " in 5571de2362d3Smrg *" -L$dir "* | *" $arg "*) 5572de2362d3Smrg # Will only happen for absolute or sysroot arguments 5573de2362d3Smrg ;; 5574de2362d3Smrg *) 5575de2362d3Smrg # Preserve sysroot, but never include relative directories 5576de2362d3Smrg case $dir in 5577de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5578de2362d3Smrg *) func_append deplibs " -L$dir" ;; 5579de2362d3Smrg esac 5580de2362d3Smrg func_append lib_search_path " $dir" 5581de2362d3Smrg ;; 5582de2362d3Smrg esac 5583de2362d3Smrg case $host in 5584de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5585de2362d3Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586de2362d3Smrg case :$dllsearchpath: in 5587de2362d3Smrg *":$dir:"*) ;; 5588de2362d3Smrg ::) dllsearchpath=$dir;; 5589de2362d3Smrg *) func_append dllsearchpath ":$dir";; 5590de2362d3Smrg esac 5591de2362d3Smrg case :$dllsearchpath: in 5592de2362d3Smrg *":$testbindir:"*) ;; 5593de2362d3Smrg ::) dllsearchpath=$testbindir;; 5594de2362d3Smrg *) func_append dllsearchpath ":$testbindir";; 5595de2362d3Smrg esac 5596de2362d3Smrg ;; 5597de2362d3Smrg esac 5598de2362d3Smrg continue 5599de2362d3Smrg ;; 5600de2362d3Smrg 5601de2362d3Smrg -l*) 56027821949aSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603de2362d3Smrg case $host in 5604de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605de2362d3Smrg # These systems don't actually have a C or math library (as such) 5606de2362d3Smrg continue 5607de2362d3Smrg ;; 5608de2362d3Smrg *-*-os2*) 5609de2362d3Smrg # These systems don't actually have a C library (as such) 56107821949aSmrg test "X$arg" = "X-lc" && continue 5611de2362d3Smrg ;; 56127821949aSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613de2362d3Smrg # Do not include libc due to us having libc/libc_r. 56147821949aSmrg test "X$arg" = "X-lc" && continue 5615de2362d3Smrg ;; 5616de2362d3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 5617de2362d3Smrg # Rhapsody C and math libraries are in the System framework 5618de2362d3Smrg func_append deplibs " System.ltframework" 5619de2362d3Smrg continue 5620de2362d3Smrg ;; 5621de2362d3Smrg *-*-sco3.2v5* | *-*-sco5v6*) 5622de2362d3Smrg # Causes problems with __ctype 56237821949aSmrg test "X$arg" = "X-lc" && continue 5624de2362d3Smrg ;; 5625de2362d3Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626de2362d3Smrg # Compiler inserts libc in the correct place for threads to work 56277821949aSmrg test "X$arg" = "X-lc" && continue 5628de2362d3Smrg ;; 5629de2362d3Smrg esac 56307821949aSmrg elif test "X$arg" = "X-lc_r"; then 5631de2362d3Smrg case $host in 56327821949aSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633de2362d3Smrg # Do not include libc_r directly, use -pthread flag. 5634de2362d3Smrg continue 5635de2362d3Smrg ;; 5636de2362d3Smrg esac 5637de2362d3Smrg fi 5638de2362d3Smrg func_append deplibs " $arg" 5639de2362d3Smrg continue 5640de2362d3Smrg ;; 5641de2362d3Smrg 5642de2362d3Smrg -module) 5643de2362d3Smrg module=yes 5644de2362d3Smrg continue 5645de2362d3Smrg ;; 5646de2362d3Smrg 5647de2362d3Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648de2362d3Smrg # classes, name mangling, and exception handling. 5649de2362d3Smrg # Darwin uses the -arch flag to determine output architecture. 5650de2362d3Smrg -model|-arch|-isysroot|--sysroot) 5651de2362d3Smrg func_append compiler_flags " $arg" 5652de2362d3Smrg func_append compile_command " $arg" 5653de2362d3Smrg func_append finalize_command " $arg" 5654de2362d3Smrg prev=xcompiler 5655de2362d3Smrg continue 5656de2362d3Smrg ;; 5657de2362d3Smrg 5658de2362d3Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659de2362d3Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 5660de2362d3Smrg func_append compiler_flags " $arg" 5661de2362d3Smrg func_append compile_command " $arg" 5662de2362d3Smrg func_append finalize_command " $arg" 5663de2362d3Smrg case "$new_inherited_linker_flags " in 5664de2362d3Smrg *" $arg "*) ;; 5665de2362d3Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666de2362d3Smrg esac 5667de2362d3Smrg continue 5668de2362d3Smrg ;; 5669de2362d3Smrg 5670de2362d3Smrg -multi_module) 56717821949aSmrg single_module="${wl}-multi_module" 5672de2362d3Smrg continue 5673de2362d3Smrg ;; 5674de2362d3Smrg 5675de2362d3Smrg -no-fast-install) 5676de2362d3Smrg fast_install=no 5677de2362d3Smrg continue 5678de2362d3Smrg ;; 5679de2362d3Smrg 5680de2362d3Smrg -no-install) 5681de2362d3Smrg case $host in 5682de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683de2362d3Smrg # The PATH hackery in wrapper scripts is required on Windows 5684de2362d3Smrg # and Darwin in order for the loader to find any dlls it needs. 56857821949aSmrg func_warning "\`-no-install' is ignored for $host" 56867821949aSmrg func_warning "assuming \`-no-fast-install' instead" 5687de2362d3Smrg fast_install=no 5688de2362d3Smrg ;; 5689de2362d3Smrg *) no_install=yes ;; 5690de2362d3Smrg esac 5691de2362d3Smrg continue 5692de2362d3Smrg ;; 5693de2362d3Smrg 5694de2362d3Smrg -no-undefined) 5695de2362d3Smrg allow_undefined=no 5696de2362d3Smrg continue 5697de2362d3Smrg ;; 5698de2362d3Smrg 5699de2362d3Smrg -objectlist) 5700de2362d3Smrg prev=objectlist 5701de2362d3Smrg continue 5702de2362d3Smrg ;; 5703de2362d3Smrg 5704de2362d3Smrg -o) prev=output ;; 5705de2362d3Smrg 5706de2362d3Smrg -precious-files-regex) 5707de2362d3Smrg prev=precious_regex 5708de2362d3Smrg continue 5709de2362d3Smrg ;; 5710de2362d3Smrg 5711de2362d3Smrg -release) 5712de2362d3Smrg prev=release 5713de2362d3Smrg continue 5714de2362d3Smrg ;; 5715de2362d3Smrg 5716de2362d3Smrg -rpath) 5717de2362d3Smrg prev=rpath 5718de2362d3Smrg continue 5719de2362d3Smrg ;; 5720de2362d3Smrg 5721de2362d3Smrg -R) 5722de2362d3Smrg prev=xrpath 5723de2362d3Smrg continue 5724de2362d3Smrg ;; 5725de2362d3Smrg 5726de2362d3Smrg -R*) 5727de2362d3Smrg func_stripname '-R' '' "$arg" 5728de2362d3Smrg dir=$func_stripname_result 5729de2362d3Smrg # We need an absolute path. 5730de2362d3Smrg case $dir in 5731de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5732de2362d3Smrg =*) 5733de2362d3Smrg func_stripname '=' '' "$dir" 5734de2362d3Smrg dir=$lt_sysroot$func_stripname_result 5735de2362d3Smrg ;; 5736de2362d3Smrg *) 5737de2362d3Smrg func_fatal_error "only absolute run-paths are allowed" 5738de2362d3Smrg ;; 5739de2362d3Smrg esac 5740de2362d3Smrg case "$xrpath " in 5741de2362d3Smrg *" $dir "*) ;; 5742de2362d3Smrg *) func_append xrpath " $dir" ;; 5743de2362d3Smrg esac 5744de2362d3Smrg continue 5745de2362d3Smrg ;; 5746de2362d3Smrg 5747de2362d3Smrg -shared) 5748de2362d3Smrg # The effects of -shared are defined in a previous loop. 5749de2362d3Smrg continue 5750de2362d3Smrg ;; 5751de2362d3Smrg 5752de2362d3Smrg -shrext) 5753de2362d3Smrg prev=shrext 5754de2362d3Smrg continue 5755de2362d3Smrg ;; 5756de2362d3Smrg 5757de2362d3Smrg -static | -static-libtool-libs) 5758de2362d3Smrg # The effects of -static are defined in a previous loop. 5759de2362d3Smrg # We used to do the same as -all-static on platforms that 5760de2362d3Smrg # didn't have a PIC flag, but the assumption that the effects 5761de2362d3Smrg # would be equivalent was wrong. It would break on at least 5762de2362d3Smrg # Digital Unix and AIX. 5763de2362d3Smrg continue 5764de2362d3Smrg ;; 5765de2362d3Smrg 5766de2362d3Smrg -thread-safe) 5767de2362d3Smrg thread_safe=yes 5768de2362d3Smrg continue 5769de2362d3Smrg ;; 5770de2362d3Smrg 5771de2362d3Smrg -version-info) 5772de2362d3Smrg prev=vinfo 5773de2362d3Smrg continue 5774de2362d3Smrg ;; 5775de2362d3Smrg 5776de2362d3Smrg -version-number) 5777de2362d3Smrg prev=vinfo 5778de2362d3Smrg vinfo_number=yes 5779de2362d3Smrg continue 5780de2362d3Smrg ;; 5781de2362d3Smrg 5782de2362d3Smrg -weak) 5783de2362d3Smrg prev=weak 5784de2362d3Smrg continue 5785de2362d3Smrg ;; 5786de2362d3Smrg 5787de2362d3Smrg -Wc,*) 5788de2362d3Smrg func_stripname '-Wc,' '' "$arg" 5789de2362d3Smrg args=$func_stripname_result 5790de2362d3Smrg arg= 57917821949aSmrg save_ifs="$IFS"; IFS=',' 5792de2362d3Smrg for flag in $args; do 57937821949aSmrg IFS="$save_ifs" 5794de2362d3Smrg func_quote_for_eval "$flag" 5795de2362d3Smrg func_append arg " $func_quote_for_eval_result" 5796de2362d3Smrg func_append compiler_flags " $func_quote_for_eval_result" 5797de2362d3Smrg done 57987821949aSmrg IFS="$save_ifs" 5799de2362d3Smrg func_stripname ' ' '' "$arg" 5800de2362d3Smrg arg=$func_stripname_result 5801de2362d3Smrg ;; 5802de2362d3Smrg 5803de2362d3Smrg -Wl,*) 5804de2362d3Smrg func_stripname '-Wl,' '' "$arg" 5805de2362d3Smrg args=$func_stripname_result 5806de2362d3Smrg arg= 58077821949aSmrg save_ifs="$IFS"; IFS=',' 5808de2362d3Smrg for flag in $args; do 58097821949aSmrg IFS="$save_ifs" 5810de2362d3Smrg func_quote_for_eval "$flag" 5811de2362d3Smrg func_append arg " $wl$func_quote_for_eval_result" 5812de2362d3Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 5813de2362d3Smrg func_append linker_flags " $func_quote_for_eval_result" 5814de2362d3Smrg done 58157821949aSmrg IFS="$save_ifs" 5816de2362d3Smrg func_stripname ' ' '' "$arg" 5817de2362d3Smrg arg=$func_stripname_result 5818de2362d3Smrg ;; 5819de2362d3Smrg 5820de2362d3Smrg -Xcompiler) 5821de2362d3Smrg prev=xcompiler 5822de2362d3Smrg continue 5823de2362d3Smrg ;; 5824de2362d3Smrg 5825de2362d3Smrg -Xlinker) 5826de2362d3Smrg prev=xlinker 5827de2362d3Smrg continue 5828de2362d3Smrg ;; 5829de2362d3Smrg 5830de2362d3Smrg -XCClinker) 5831de2362d3Smrg prev=xcclinker 5832de2362d3Smrg continue 5833de2362d3Smrg ;; 5834de2362d3Smrg 5835de2362d3Smrg # -msg_* for osf cc 5836de2362d3Smrg -msg_*) 5837de2362d3Smrg func_quote_for_eval "$arg" 58387821949aSmrg arg="$func_quote_for_eval_result" 5839de2362d3Smrg ;; 5840de2362d3Smrg 5841de2362d3Smrg # Flags to be passed through unchanged, with rationale: 5842de2362d3Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5843de2362d3Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 5844de2362d3Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5845de2362d3Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 5846de2362d3Smrg # -q* compiler args for the IBM compiler 5847de2362d3Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5848de2362d3Smrg # -F/path path to uninstalled frameworks, gcc on darwin 5849de2362d3Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5850de2362d3Smrg # @file GCC response files 5851de2362d3Smrg # -tp=* Portland pgcc target processor selection 5852de2362d3Smrg # --sysroot=* for sysroot support 58537821949aSmrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854de2362d3Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5855de2362d3Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 58567821949aSmrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857de2362d3Smrg func_quote_for_eval "$arg" 58587821949aSmrg arg="$func_quote_for_eval_result" 5859de2362d3Smrg func_append compile_command " $arg" 5860de2362d3Smrg func_append finalize_command " $arg" 5861de2362d3Smrg func_append compiler_flags " $arg" 5862de2362d3Smrg continue 5863de2362d3Smrg ;; 5864de2362d3Smrg 5865de2362d3Smrg # Some other compiler flag. 5866de2362d3Smrg -* | +*) 5867de2362d3Smrg func_quote_for_eval "$arg" 58687821949aSmrg arg="$func_quote_for_eval_result" 5869de2362d3Smrg ;; 5870de2362d3Smrg 5871de2362d3Smrg *.$objext) 5872de2362d3Smrg # A standard object. 5873de2362d3Smrg func_append objs " $arg" 5874de2362d3Smrg ;; 5875de2362d3Smrg 5876de2362d3Smrg *.lo) 5877de2362d3Smrg # A libtool-controlled object. 5878de2362d3Smrg 5879de2362d3Smrg # Check to see that this really is a libtool object. 5880de2362d3Smrg if func_lalib_unsafe_p "$arg"; then 5881de2362d3Smrg pic_object= 5882de2362d3Smrg non_pic_object= 5883de2362d3Smrg 5884de2362d3Smrg # Read the .lo file 5885de2362d3Smrg func_source "$arg" 5886de2362d3Smrg 5887de2362d3Smrg if test -z "$pic_object" || 5888de2362d3Smrg test -z "$non_pic_object" || 58897821949aSmrg test "$pic_object" = none && 58907821949aSmrg test "$non_pic_object" = none; then 58917821949aSmrg func_fatal_error "cannot find name of object for \`$arg'" 5892de2362d3Smrg fi 5893de2362d3Smrg 5894de2362d3Smrg # Extract subdirectory from the argument. 5895de2362d3Smrg func_dirname "$arg" "/" "" 58967821949aSmrg xdir="$func_dirname_result" 5897de2362d3Smrg 58987821949aSmrg if test "$pic_object" != none; then 5899de2362d3Smrg # Prepend the subdirectory the object is found in. 59007821949aSmrg pic_object="$xdir$pic_object" 5901de2362d3Smrg 59027821949aSmrg if test "$prev" = dlfiles; then 59037821949aSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5904de2362d3Smrg func_append dlfiles " $pic_object" 5905de2362d3Smrg prev= 5906de2362d3Smrg continue 5907de2362d3Smrg else 5908de2362d3Smrg # If libtool objects are unsupported, then we need to preload. 5909de2362d3Smrg prev=dlprefiles 5910de2362d3Smrg fi 5911de2362d3Smrg fi 5912de2362d3Smrg 5913de2362d3Smrg # CHECK ME: I think I busted this. -Ossama 59147821949aSmrg if test "$prev" = dlprefiles; then 5915de2362d3Smrg # Preload the old-style object. 5916de2362d3Smrg func_append dlprefiles " $pic_object" 5917de2362d3Smrg prev= 5918de2362d3Smrg fi 5919de2362d3Smrg 5920de2362d3Smrg # A PIC object. 5921de2362d3Smrg func_append libobjs " $pic_object" 59227821949aSmrg arg="$pic_object" 59237821949aSmrg fi 5924de2362d3Smrg 5925de2362d3Smrg # Non-PIC object. 59267821949aSmrg if test "$non_pic_object" != none; then 5927de2362d3Smrg # Prepend the subdirectory the object is found in. 59287821949aSmrg non_pic_object="$xdir$non_pic_object" 5929de2362d3Smrg 5930de2362d3Smrg # A standard non-PIC object 5931de2362d3Smrg func_append non_pic_objects " $non_pic_object" 59327821949aSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 59337821949aSmrg arg="$non_pic_object" 5934de2362d3Smrg fi 5935de2362d3Smrg else 5936de2362d3Smrg # If the PIC object exists, use it instead. 5937de2362d3Smrg # $xdir was prepended to $pic_object above. 59387821949aSmrg non_pic_object="$pic_object" 5939de2362d3Smrg func_append non_pic_objects " $non_pic_object" 5940de2362d3Smrg fi 5941de2362d3Smrg else 5942de2362d3Smrg # Only an error if not doing a dry-run. 5943de2362d3Smrg if $opt_dry_run; then 5944de2362d3Smrg # Extract subdirectory from the argument. 5945de2362d3Smrg func_dirname "$arg" "/" "" 59467821949aSmrg xdir="$func_dirname_result" 5947de2362d3Smrg 5948de2362d3Smrg func_lo2o "$arg" 5949de2362d3Smrg pic_object=$xdir$objdir/$func_lo2o_result 5950de2362d3Smrg non_pic_object=$xdir$func_lo2o_result 5951de2362d3Smrg func_append libobjs " $pic_object" 5952de2362d3Smrg func_append non_pic_objects " $non_pic_object" 5953de2362d3Smrg else 59547821949aSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5955de2362d3Smrg fi 5956de2362d3Smrg fi 5957de2362d3Smrg ;; 5958de2362d3Smrg 5959de2362d3Smrg *.$libext) 5960de2362d3Smrg # An archive. 5961de2362d3Smrg func_append deplibs " $arg" 5962de2362d3Smrg func_append old_deplibs " $arg" 5963de2362d3Smrg continue 5964de2362d3Smrg ;; 5965de2362d3Smrg 5966de2362d3Smrg *.la) 5967de2362d3Smrg # A libtool-controlled library. 5968de2362d3Smrg 5969de2362d3Smrg func_resolve_sysroot "$arg" 59707821949aSmrg if test "$prev" = dlfiles; then 5971de2362d3Smrg # This library was specified with -dlopen. 5972de2362d3Smrg func_append dlfiles " $func_resolve_sysroot_result" 5973de2362d3Smrg prev= 59747821949aSmrg elif test "$prev" = dlprefiles; then 5975de2362d3Smrg # The library was specified with -dlpreopen. 5976de2362d3Smrg func_append dlprefiles " $func_resolve_sysroot_result" 5977de2362d3Smrg prev= 5978de2362d3Smrg else 5979de2362d3Smrg func_append deplibs " $func_resolve_sysroot_result" 5980de2362d3Smrg fi 5981de2362d3Smrg continue 5982de2362d3Smrg ;; 5983de2362d3Smrg 5984de2362d3Smrg # Some other compiler argument. 5985de2362d3Smrg *) 5986de2362d3Smrg # Unknown arguments in both finalize_command and compile_command need 5987de2362d3Smrg # to be aesthetically quoted because they are evaled later. 5988de2362d3Smrg func_quote_for_eval "$arg" 59897821949aSmrg arg="$func_quote_for_eval_result" 5990de2362d3Smrg ;; 5991de2362d3Smrg esac # arg 5992de2362d3Smrg 5993de2362d3Smrg # Now actually substitute the argument into the commands. 5994de2362d3Smrg if test -n "$arg"; then 5995de2362d3Smrg func_append compile_command " $arg" 5996de2362d3Smrg func_append finalize_command " $arg" 5997de2362d3Smrg fi 5998de2362d3Smrg done # argument parsing loop 5999de2362d3Smrg 6000de2362d3Smrg test -n "$prev" && \ 60017821949aSmrg func_fatal_help "the \`$prevarg' option requires an argument" 6002de2362d3Smrg 60037821949aSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004de2362d3Smrg eval arg=\"$export_dynamic_flag_spec\" 6005de2362d3Smrg func_append compile_command " $arg" 6006de2362d3Smrg func_append finalize_command " $arg" 6007de2362d3Smrg fi 6008de2362d3Smrg 6009de2362d3Smrg oldlibs= 6010de2362d3Smrg # calculate the name of the file, without its directory 6011de2362d3Smrg func_basename "$output" 60127821949aSmrg outputname="$func_basename_result" 60137821949aSmrg libobjs_save="$libobjs" 6014de2362d3Smrg 6015de2362d3Smrg if test -n "$shlibpath_var"; then 6016de2362d3Smrg # get the directories listed in $shlibpath_var 60177821949aSmrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018de2362d3Smrg else 6019de2362d3Smrg shlib_search_path= 6020de2362d3Smrg fi 6021de2362d3Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022de2362d3Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023de2362d3Smrg 6024de2362d3Smrg func_dirname "$output" "/" "" 60257821949aSmrg output_objdir="$func_dirname_result$objdir" 6026de2362d3Smrg func_to_tool_file "$output_objdir/" 6027de2362d3Smrg tool_output_objdir=$func_to_tool_file_result 6028de2362d3Smrg # Create the object directory. 6029de2362d3Smrg func_mkdir_p "$output_objdir" 6030de2362d3Smrg 6031de2362d3Smrg # Determine the type of output 6032de2362d3Smrg case $output in 6033de2362d3Smrg "") 6034de2362d3Smrg func_fatal_help "you must specify an output file" 6035de2362d3Smrg ;; 6036de2362d3Smrg *.$libext) linkmode=oldlib ;; 6037de2362d3Smrg *.lo | *.$objext) linkmode=obj ;; 6038de2362d3Smrg *.la) linkmode=lib ;; 6039de2362d3Smrg *) linkmode=prog ;; # Anything else should be a program. 6040de2362d3Smrg esac 6041de2362d3Smrg 6042de2362d3Smrg specialdeplibs= 6043de2362d3Smrg 6044de2362d3Smrg libs= 6045de2362d3Smrg # Find all interdependent deplibs by searching for libraries 6046de2362d3Smrg # that are linked more than once (e.g. -la -lb -la) 6047de2362d3Smrg for deplib in $deplibs; do 60487821949aSmrg if $opt_preserve_dup_deps ; then 6049de2362d3Smrg case "$libs " in 6050de2362d3Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051de2362d3Smrg esac 6052de2362d3Smrg fi 6053de2362d3Smrg func_append libs " $deplib" 6054de2362d3Smrg done 6055de2362d3Smrg 60567821949aSmrg if test "$linkmode" = lib; then 6057de2362d3Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058de2362d3Smrg 6059de2362d3Smrg # Compute libraries that are listed more than once in $predeps 6060de2362d3Smrg # $postdeps and mark them as special (i.e., whose duplicates are 6061de2362d3Smrg # not to be eliminated). 6062de2362d3Smrg pre_post_deps= 6063de2362d3Smrg if $opt_duplicate_compiler_generated_deps; then 6064de2362d3Smrg for pre_post_dep in $predeps $postdeps; do 6065de2362d3Smrg case "$pre_post_deps " in 6066de2362d3Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067de2362d3Smrg esac 6068de2362d3Smrg func_append pre_post_deps " $pre_post_dep" 6069de2362d3Smrg done 6070de2362d3Smrg fi 6071de2362d3Smrg pre_post_deps= 6072de2362d3Smrg fi 6073de2362d3Smrg 6074de2362d3Smrg deplibs= 6075de2362d3Smrg newdependency_libs= 6076de2362d3Smrg newlib_search_path= 6077de2362d3Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078de2362d3Smrg notinst_deplibs= # not-installed libtool libraries 6079de2362d3Smrg notinst_path= # paths that contain not-installed libtool libraries 6080de2362d3Smrg 6081de2362d3Smrg case $linkmode in 6082de2362d3Smrg lib) 6083de2362d3Smrg passes="conv dlpreopen link" 6084de2362d3Smrg for file in $dlfiles $dlprefiles; do 6085de2362d3Smrg case $file in 6086de2362d3Smrg *.la) ;; 6087de2362d3Smrg *) 60887821949aSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089de2362d3Smrg ;; 6090de2362d3Smrg esac 6091de2362d3Smrg done 6092de2362d3Smrg ;; 6093de2362d3Smrg prog) 6094de2362d3Smrg compile_deplibs= 6095de2362d3Smrg finalize_deplibs= 60967821949aSmrg alldeplibs=no 6097de2362d3Smrg newdlfiles= 6098de2362d3Smrg newdlprefiles= 6099de2362d3Smrg passes="conv scan dlopen dlpreopen link" 6100de2362d3Smrg ;; 6101de2362d3Smrg *) passes="conv" 6102de2362d3Smrg ;; 6103de2362d3Smrg esac 6104de2362d3Smrg 6105de2362d3Smrg for pass in $passes; do 6106de2362d3Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107de2362d3Smrg # so that -L comes before libs that need it for instance... 61087821949aSmrg if test "$linkmode,$pass" = "lib,link"; then 6109de2362d3Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110de2362d3Smrg ## order, and fix it there properly 6111de2362d3Smrg tmp_deplibs= 6112de2362d3Smrg for deplib in $deplibs; do 6113de2362d3Smrg tmp_deplibs="$deplib $tmp_deplibs" 6114de2362d3Smrg done 61157821949aSmrg deplibs="$tmp_deplibs" 6116de2362d3Smrg fi 6117de2362d3Smrg 61187821949aSmrg if test "$linkmode,$pass" = "lib,link" || 61197821949aSmrg test "$linkmode,$pass" = "prog,scan"; then 61207821949aSmrg libs="$deplibs" 6121de2362d3Smrg deplibs= 6122de2362d3Smrg fi 61237821949aSmrg if test "$linkmode" = prog; then 6124de2362d3Smrg case $pass in 61257821949aSmrg dlopen) libs="$dlfiles" ;; 61267821949aSmrg dlpreopen) libs="$dlprefiles" ;; 61277821949aSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128de2362d3Smrg esac 6129de2362d3Smrg fi 61307821949aSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131de2362d3Smrg # Collect and forward deplibs of preopened libtool libs 6132de2362d3Smrg for lib in $dlprefiles; do 6133de2362d3Smrg # Ignore non-libtool-libs 6134de2362d3Smrg dependency_libs= 6135de2362d3Smrg func_resolve_sysroot "$lib" 6136de2362d3Smrg case $lib in 6137de2362d3Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 6138de2362d3Smrg esac 6139de2362d3Smrg 6140de2362d3Smrg # Collect preopened libtool deplibs, except any this library 6141de2362d3Smrg # has declared as weak libs 6142de2362d3Smrg for deplib in $dependency_libs; do 6143de2362d3Smrg func_basename "$deplib" 6144de2362d3Smrg deplib_base=$func_basename_result 6145de2362d3Smrg case " $weak_libs " in 6146de2362d3Smrg *" $deplib_base "*) ;; 6147de2362d3Smrg *) func_append deplibs " $deplib" ;; 6148de2362d3Smrg esac 6149de2362d3Smrg done 6150de2362d3Smrg done 61517821949aSmrg libs="$dlprefiles" 6152de2362d3Smrg fi 61537821949aSmrg if test "$pass" = dlopen; then 6154de2362d3Smrg # Collect dlpreopened libraries 61557821949aSmrg save_deplibs="$deplibs" 6156de2362d3Smrg deplibs= 6157de2362d3Smrg fi 6158de2362d3Smrg 6159de2362d3Smrg for deplib in $libs; do 6160de2362d3Smrg lib= 61617821949aSmrg found=no 6162de2362d3Smrg case $deplib in 6163de2362d3Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6164de2362d3Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 61657821949aSmrg if test "$linkmode,$pass" = "prog,link"; then 6166de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 6167de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6168de2362d3Smrg else 6169de2362d3Smrg func_append compiler_flags " $deplib" 61707821949aSmrg if test "$linkmode" = lib ; then 6171de2362d3Smrg case "$new_inherited_linker_flags " in 6172de2362d3Smrg *" $deplib "*) ;; 6173de2362d3Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6174de2362d3Smrg esac 6175de2362d3Smrg fi 6176de2362d3Smrg fi 6177de2362d3Smrg continue 6178de2362d3Smrg ;; 6179de2362d3Smrg -l*) 61807821949aSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 61817821949aSmrg func_warning "\`-l' is ignored for archives/objects" 6182de2362d3Smrg continue 6183de2362d3Smrg fi 6184de2362d3Smrg func_stripname '-l' '' "$deplib" 6185de2362d3Smrg name=$func_stripname_result 61867821949aSmrg if test "$linkmode" = lib; then 6187de2362d3Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188de2362d3Smrg else 6189de2362d3Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190de2362d3Smrg fi 6191de2362d3Smrg for searchdir in $searchdirs; do 6192de2362d3Smrg for search_ext in .la $std_shrext .so .a; do 6193de2362d3Smrg # Search the libtool library 61947821949aSmrg lib="$searchdir/lib${name}${search_ext}" 6195de2362d3Smrg if test -f "$lib"; then 61967821949aSmrg if test "$search_ext" = ".la"; then 61977821949aSmrg found=yes 6198de2362d3Smrg else 61997821949aSmrg found=no 6200de2362d3Smrg fi 6201de2362d3Smrg break 2 6202de2362d3Smrg fi 6203de2362d3Smrg done 6204de2362d3Smrg done 62057821949aSmrg if test "$found" != yes; then 62067821949aSmrg # deplib doesn't seem to be a libtool library 62077821949aSmrg if test "$linkmode,$pass" = "prog,link"; then 62087821949aSmrg compile_deplibs="$deplib $compile_deplibs" 62097821949aSmrg finalize_deplibs="$deplib $finalize_deplibs" 62107821949aSmrg else 62117821949aSmrg deplibs="$deplib $deplibs" 62127821949aSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 62137821949aSmrg fi 62147821949aSmrg continue 62157821949aSmrg else # deplib is a libtool library 6216de2362d3Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217de2362d3Smrg # We need to do some special things here, and not later. 62187821949aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219de2362d3Smrg case " $predeps $postdeps " in 6220de2362d3Smrg *" $deplib "*) 6221de2362d3Smrg if func_lalib_p "$lib"; then 6222de2362d3Smrg library_names= 6223de2362d3Smrg old_library= 6224de2362d3Smrg func_source "$lib" 6225de2362d3Smrg for l in $old_library $library_names; do 62267821949aSmrg ll="$l" 6227de2362d3Smrg done 62287821949aSmrg if test "X$ll" = "X$old_library" ; then # only static version available 62297821949aSmrg found=no 6230de2362d3Smrg func_dirname "$lib" "" "." 62317821949aSmrg ladir="$func_dirname_result" 6232de2362d3Smrg lib=$ladir/$old_library 62337821949aSmrg if test "$linkmode,$pass" = "prog,link"; then 6234de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 6235de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6236de2362d3Smrg else 6237de2362d3Smrg deplibs="$deplib $deplibs" 62387821949aSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239de2362d3Smrg fi 6240de2362d3Smrg continue 6241de2362d3Smrg fi 6242de2362d3Smrg fi 6243de2362d3Smrg ;; 6244de2362d3Smrg *) ;; 6245de2362d3Smrg esac 6246de2362d3Smrg fi 6247de2362d3Smrg fi 6248de2362d3Smrg ;; # -l 6249de2362d3Smrg *.ltframework) 62507821949aSmrg if test "$linkmode,$pass" = "prog,link"; then 6251de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 6252de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6253de2362d3Smrg else 6254de2362d3Smrg deplibs="$deplib $deplibs" 62557821949aSmrg if test "$linkmode" = lib ; then 6256de2362d3Smrg case "$new_inherited_linker_flags " in 6257de2362d3Smrg *" $deplib "*) ;; 6258de2362d3Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6259de2362d3Smrg esac 6260de2362d3Smrg fi 6261de2362d3Smrg fi 6262de2362d3Smrg continue 6263de2362d3Smrg ;; 6264de2362d3Smrg -L*) 6265de2362d3Smrg case $linkmode in 6266de2362d3Smrg lib) 6267de2362d3Smrg deplibs="$deplib $deplibs" 62687821949aSmrg test "$pass" = conv && continue 6269de2362d3Smrg newdependency_libs="$deplib $newdependency_libs" 6270de2362d3Smrg func_stripname '-L' '' "$deplib" 6271de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 6272de2362d3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6273de2362d3Smrg ;; 6274de2362d3Smrg prog) 62757821949aSmrg if test "$pass" = conv; then 6276de2362d3Smrg deplibs="$deplib $deplibs" 6277de2362d3Smrg continue 6278de2362d3Smrg fi 62797821949aSmrg if test "$pass" = scan; then 6280de2362d3Smrg deplibs="$deplib $deplibs" 6281de2362d3Smrg else 6282de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 6283de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6284de2362d3Smrg fi 6285de2362d3Smrg func_stripname '-L' '' "$deplib" 6286de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 6287de2362d3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6288de2362d3Smrg ;; 6289de2362d3Smrg *) 62907821949aSmrg func_warning "\`-L' is ignored for archives/objects" 6291de2362d3Smrg ;; 6292de2362d3Smrg esac # linkmode 6293de2362d3Smrg continue 6294de2362d3Smrg ;; # -L 6295de2362d3Smrg -R*) 62967821949aSmrg if test "$pass" = link; then 6297de2362d3Smrg func_stripname '-R' '' "$deplib" 6298de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 6299de2362d3Smrg dir=$func_resolve_sysroot_result 6300de2362d3Smrg # Make sure the xrpath contains only unique directories. 6301de2362d3Smrg case "$xrpath " in 6302de2362d3Smrg *" $dir "*) ;; 6303de2362d3Smrg *) func_append xrpath " $dir" ;; 6304de2362d3Smrg esac 6305de2362d3Smrg fi 6306de2362d3Smrg deplibs="$deplib $deplibs" 6307de2362d3Smrg continue 6308de2362d3Smrg ;; 6309de2362d3Smrg *.la) 6310de2362d3Smrg func_resolve_sysroot "$deplib" 6311de2362d3Smrg lib=$func_resolve_sysroot_result 6312de2362d3Smrg ;; 6313de2362d3Smrg *.$libext) 63147821949aSmrg if test "$pass" = conv; then 6315de2362d3Smrg deplibs="$deplib $deplibs" 6316de2362d3Smrg continue 6317de2362d3Smrg fi 6318de2362d3Smrg case $linkmode in 6319de2362d3Smrg lib) 6320de2362d3Smrg # Linking convenience modules into shared libraries is allowed, 6321de2362d3Smrg # but linking other static libraries is non-portable. 6322de2362d3Smrg case " $dlpreconveniencelibs " in 6323de2362d3Smrg *" $deplib "*) ;; 6324de2362d3Smrg *) 63257821949aSmrg valid_a_lib=no 6326de2362d3Smrg case $deplibs_check_method in 6327de2362d3Smrg match_pattern*) 6328de2362d3Smrg set dummy $deplibs_check_method; shift 6329de2362d3Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6330de2362d3Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331de2362d3Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 63327821949aSmrg valid_a_lib=yes 6333de2362d3Smrg fi 6334de2362d3Smrg ;; 6335de2362d3Smrg pass_all) 63367821949aSmrg valid_a_lib=yes 6337de2362d3Smrg ;; 6338de2362d3Smrg esac 63397821949aSmrg if test "$valid_a_lib" != yes; then 6340de2362d3Smrg echo 6341de2362d3Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6342de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 6343de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 6344de2362d3Smrg echo "*** shared version of the library, which you do not appear to have" 6345de2362d3Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 6346de2362d3Smrg echo "*** that it is just a static archive that I should not use here." 63477821949aSmrg else 63487821949aSmrg echo 63497821949aSmrg $ECHO "*** Warning: Linking the shared library $output against the" 63507821949aSmrg $ECHO "*** static library $deplib is not portable!" 63517821949aSmrg deplibs="$deplib $deplibs" 6352de2362d3Smrg fi 6353de2362d3Smrg ;; 6354de2362d3Smrg esac 6355de2362d3Smrg continue 6356de2362d3Smrg ;; 6357de2362d3Smrg prog) 63587821949aSmrg if test "$pass" != link; then 6359de2362d3Smrg deplibs="$deplib $deplibs" 6360de2362d3Smrg else 6361de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 6362de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6363de2362d3Smrg fi 6364de2362d3Smrg continue 6365de2362d3Smrg ;; 6366de2362d3Smrg esac # linkmode 6367de2362d3Smrg ;; # *.$libext 6368de2362d3Smrg *.lo | *.$objext) 63697821949aSmrg if test "$pass" = conv; then 6370de2362d3Smrg deplibs="$deplib $deplibs" 63717821949aSmrg elif test "$linkmode" = prog; then 63727821949aSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373de2362d3Smrg # If there is no dlopen support or we're linking statically, 6374de2362d3Smrg # we need to preload. 6375de2362d3Smrg func_append newdlprefiles " $deplib" 6376de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 6377de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6378de2362d3Smrg else 6379de2362d3Smrg func_append newdlfiles " $deplib" 6380de2362d3Smrg fi 6381de2362d3Smrg fi 6382de2362d3Smrg continue 6383de2362d3Smrg ;; 6384de2362d3Smrg %DEPLIBS%) 63857821949aSmrg alldeplibs=yes 6386de2362d3Smrg continue 6387de2362d3Smrg ;; 6388de2362d3Smrg esac # case $deplib 6389de2362d3Smrg 63907821949aSmrg if test "$found" = yes || test -f "$lib"; then : 63917821949aSmrg else 63927821949aSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 63937821949aSmrg fi 6394de2362d3Smrg 6395de2362d3Smrg # Check to see that this really is a libtool archive. 6396de2362d3Smrg func_lalib_unsafe_p "$lib" \ 63977821949aSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6398de2362d3Smrg 6399de2362d3Smrg func_dirname "$lib" "" "." 64007821949aSmrg ladir="$func_dirname_result" 6401de2362d3Smrg 6402de2362d3Smrg dlname= 6403de2362d3Smrg dlopen= 6404de2362d3Smrg dlpreopen= 6405de2362d3Smrg libdir= 6406de2362d3Smrg library_names= 6407de2362d3Smrg old_library= 6408de2362d3Smrg inherited_linker_flags= 6409de2362d3Smrg # If the library was installed with an old release of libtool, 6410de2362d3Smrg # it will not redefine variables installed, or shouldnotlink 6411de2362d3Smrg installed=yes 6412de2362d3Smrg shouldnotlink=no 6413de2362d3Smrg avoidtemprpath= 6414de2362d3Smrg 6415de2362d3Smrg 6416de2362d3Smrg # Read the .la file 6417de2362d3Smrg func_source "$lib" 6418de2362d3Smrg 6419de2362d3Smrg # Convert "-framework foo" to "foo.ltframework" 6420de2362d3Smrg if test -n "$inherited_linker_flags"; then 6421de2362d3Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422de2362d3Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423de2362d3Smrg case " $new_inherited_linker_flags " in 6424de2362d3Smrg *" $tmp_inherited_linker_flag "*) ;; 6425de2362d3Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426de2362d3Smrg esac 6427de2362d3Smrg done 6428de2362d3Smrg fi 6429de2362d3Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 64307821949aSmrg if test "$linkmode,$pass" = "lib,link" || 64317821949aSmrg test "$linkmode,$pass" = "prog,scan" || 64327821949aSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6433de2362d3Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 6434de2362d3Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435de2362d3Smrg fi 6436de2362d3Smrg 64377821949aSmrg if test "$pass" = conv; then 6438de2362d3Smrg # Only check for convenience libraries 6439de2362d3Smrg deplibs="$lib $deplibs" 6440de2362d3Smrg if test -z "$libdir"; then 6441de2362d3Smrg if test -z "$old_library"; then 64427821949aSmrg func_fatal_error "cannot find name of link library for \`$lib'" 6443de2362d3Smrg fi 6444de2362d3Smrg # It is a libtool convenience library, so add in its objects. 6445de2362d3Smrg func_append convenience " $ladir/$objdir/$old_library" 6446de2362d3Smrg func_append old_convenience " $ladir/$objdir/$old_library" 64477821949aSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 64487821949aSmrg func_fatal_error "\`$lib' is not a convenience library" 6449de2362d3Smrg fi 64507821949aSmrg tmp_libs= 64517821949aSmrg for deplib in $dependency_libs; do 64527821949aSmrg deplibs="$deplib $deplibs" 64537821949aSmrg if $opt_preserve_dup_deps ; then 64547821949aSmrg case "$tmp_libs " in 64557821949aSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 64567821949aSmrg esac 64577821949aSmrg fi 64587821949aSmrg func_append tmp_libs " $deplib" 64597821949aSmrg done 6460de2362d3Smrg continue 6461de2362d3Smrg fi # $pass = conv 6462de2362d3Smrg 6463de2362d3Smrg 6464de2362d3Smrg # Get the name of the library we link against. 6465de2362d3Smrg linklib= 6466de2362d3Smrg if test -n "$old_library" && 64677821949aSmrg { test "$prefer_static_libs" = yes || 64687821949aSmrg test "$prefer_static_libs,$installed" = "built,no"; }; then 6469de2362d3Smrg linklib=$old_library 6470de2362d3Smrg else 6471de2362d3Smrg for l in $old_library $library_names; do 64727821949aSmrg linklib="$l" 6473de2362d3Smrg done 6474de2362d3Smrg fi 6475de2362d3Smrg if test -z "$linklib"; then 64767821949aSmrg func_fatal_error "cannot find name of link library for \`$lib'" 6477de2362d3Smrg fi 6478de2362d3Smrg 6479de2362d3Smrg # This library was specified with -dlopen. 64807821949aSmrg if test "$pass" = dlopen; then 64817821949aSmrg if test -z "$libdir"; then 64827821949aSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 64837821949aSmrg fi 6484de2362d3Smrg if test -z "$dlname" || 64857821949aSmrg test "$dlopen_support" != yes || 64867821949aSmrg test "$build_libtool_libs" = no; then 6487de2362d3Smrg # If there is no dlname, no dlopen support or we're linking 6488de2362d3Smrg # statically, we need to preload. We also need to preload any 6489de2362d3Smrg # dependent libraries so libltdl's deplib preloader doesn't 6490de2362d3Smrg # bomb out in the load deplibs phase. 6491de2362d3Smrg func_append dlprefiles " $lib $dependency_libs" 6492de2362d3Smrg else 6493de2362d3Smrg func_append newdlfiles " $lib" 6494de2362d3Smrg fi 6495de2362d3Smrg continue 6496de2362d3Smrg fi # $pass = dlopen 6497de2362d3Smrg 6498de2362d3Smrg # We need an absolute path. 6499de2362d3Smrg case $ladir in 65007821949aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501de2362d3Smrg *) 6502de2362d3Smrg abs_ladir=`cd "$ladir" && pwd` 6503de2362d3Smrg if test -z "$abs_ladir"; then 65047821949aSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 6505de2362d3Smrg func_warning "passing it literally to the linker, although it might fail" 65067821949aSmrg abs_ladir="$ladir" 6507de2362d3Smrg fi 6508de2362d3Smrg ;; 6509de2362d3Smrg esac 6510de2362d3Smrg func_basename "$lib" 65117821949aSmrg laname="$func_basename_result" 6512de2362d3Smrg 6513de2362d3Smrg # Find the relevant object directory and library name. 65147821949aSmrg if test "X$installed" = Xyes; then 6515de2362d3Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 65167821949aSmrg func_warning "library \`$lib' was moved." 65177821949aSmrg dir="$ladir" 65187821949aSmrg absdir="$abs_ladir" 65197821949aSmrg libdir="$abs_ladir" 6520de2362d3Smrg else 65217821949aSmrg dir="$lt_sysroot$libdir" 65227821949aSmrg absdir="$lt_sysroot$libdir" 6523de2362d3Smrg fi 65247821949aSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525de2362d3Smrg else 6526de2362d3Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 65277821949aSmrg dir="$ladir" 65287821949aSmrg absdir="$abs_ladir" 6529de2362d3Smrg # Remove this search path later 6530de2362d3Smrg func_append notinst_path " $abs_ladir" 6531de2362d3Smrg else 65327821949aSmrg dir="$ladir/$objdir" 65337821949aSmrg absdir="$abs_ladir/$objdir" 6534de2362d3Smrg # Remove this search path later 6535de2362d3Smrg func_append notinst_path " $abs_ladir" 6536de2362d3Smrg fi 6537de2362d3Smrg fi # $installed = yes 6538de2362d3Smrg func_stripname 'lib' '.la' "$laname" 6539de2362d3Smrg name=$func_stripname_result 6540de2362d3Smrg 6541de2362d3Smrg # This library was specified with -dlpreopen. 65427821949aSmrg if test "$pass" = dlpreopen; then 65437821949aSmrg if test -z "$libdir" && test "$linkmode" = prog; then 65447821949aSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545de2362d3Smrg fi 65467821949aSmrg case "$host" in 6547de2362d3Smrg # special handling for platforms with PE-DLLs. 6548de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 6549de2362d3Smrg # Linker will automatically link against shared library if both 6550de2362d3Smrg # static and shared are present. Therefore, ensure we extract 6551de2362d3Smrg # symbols from the import library if a shared library is present 6552de2362d3Smrg # (otherwise, the dlopen module name will be incorrect). We do 6553de2362d3Smrg # this by putting the import library name into $newdlprefiles. 6554de2362d3Smrg # We recover the dlopen module name by 'saving' the la file 6555de2362d3Smrg # name in a special purpose variable, and (later) extracting the 6556de2362d3Smrg # dlname from the la file. 6557de2362d3Smrg if test -n "$dlname"; then 6558de2362d3Smrg func_tr_sh "$dir/$linklib" 6559de2362d3Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6560de2362d3Smrg func_append newdlprefiles " $dir/$linklib" 6561de2362d3Smrg else 6562de2362d3Smrg func_append newdlprefiles " $dir/$old_library" 6563de2362d3Smrg # Keep a list of preopened convenience libraries to check 6564de2362d3Smrg # that they are being used correctly in the link pass. 6565de2362d3Smrg test -z "$libdir" && \ 6566de2362d3Smrg func_append dlpreconveniencelibs " $dir/$old_library" 6567de2362d3Smrg fi 6568de2362d3Smrg ;; 6569de2362d3Smrg * ) 6570de2362d3Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 6571de2362d3Smrg # are required to link). 6572de2362d3Smrg if test -n "$old_library"; then 6573de2362d3Smrg func_append newdlprefiles " $dir/$old_library" 6574de2362d3Smrg # Keep a list of preopened convenience libraries to check 6575de2362d3Smrg # that they are being used correctly in the link pass. 6576de2362d3Smrg test -z "$libdir" && \ 6577de2362d3Smrg func_append dlpreconveniencelibs " $dir/$old_library" 6578de2362d3Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 6579de2362d3Smrg elif test -n "$dlname"; then 6580de2362d3Smrg func_append newdlprefiles " $dir/$dlname" 6581de2362d3Smrg else 6582de2362d3Smrg func_append newdlprefiles " $dir/$linklib" 6583de2362d3Smrg fi 6584de2362d3Smrg ;; 6585de2362d3Smrg esac 6586de2362d3Smrg fi # $pass = dlpreopen 6587de2362d3Smrg 6588de2362d3Smrg if test -z "$libdir"; then 6589de2362d3Smrg # Link the convenience library 65907821949aSmrg if test "$linkmode" = lib; then 6591de2362d3Smrg deplibs="$dir/$old_library $deplibs" 65927821949aSmrg elif test "$linkmode,$pass" = "prog,link"; then 6593de2362d3Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 6594de2362d3Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595de2362d3Smrg else 6596de2362d3Smrg deplibs="$lib $deplibs" # used for prog,scan pass 6597de2362d3Smrg fi 6598de2362d3Smrg continue 6599de2362d3Smrg fi 6600de2362d3Smrg 6601de2362d3Smrg 66027821949aSmrg if test "$linkmode" = prog && test "$pass" != link; then 6603de2362d3Smrg func_append newlib_search_path " $ladir" 6604de2362d3Smrg deplibs="$lib $deplibs" 6605de2362d3Smrg 66067821949aSmrg linkalldeplibs=no 66077821949aSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 66087821949aSmrg test "$build_libtool_libs" = no; then 66097821949aSmrg linkalldeplibs=yes 6610de2362d3Smrg fi 6611de2362d3Smrg 6612de2362d3Smrg tmp_libs= 6613de2362d3Smrg for deplib in $dependency_libs; do 6614de2362d3Smrg case $deplib in 6615de2362d3Smrg -L*) func_stripname '-L' '' "$deplib" 6616de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 6617de2362d3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6618de2362d3Smrg ;; 6619de2362d3Smrg esac 6620de2362d3Smrg # Need to link against all dependency_libs? 66217821949aSmrg if test "$linkalldeplibs" = yes; then 6622de2362d3Smrg deplibs="$deplib $deplibs" 6623de2362d3Smrg else 6624de2362d3Smrg # Need to hardcode shared library paths 6625de2362d3Smrg # or/and link against static libraries 6626de2362d3Smrg newdependency_libs="$deplib $newdependency_libs" 6627de2362d3Smrg fi 66287821949aSmrg if $opt_preserve_dup_deps ; then 6629de2362d3Smrg case "$tmp_libs " in 6630de2362d3Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631de2362d3Smrg esac 6632de2362d3Smrg fi 6633de2362d3Smrg func_append tmp_libs " $deplib" 6634de2362d3Smrg done # for deplib 6635de2362d3Smrg continue 6636de2362d3Smrg fi # $linkmode = prog... 6637de2362d3Smrg 66387821949aSmrg if test "$linkmode,$pass" = "prog,link"; then 6639de2362d3Smrg if test -n "$library_names" && 66407821949aSmrg { { test "$prefer_static_libs" = no || 66417821949aSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6642de2362d3Smrg test -z "$old_library"; }; then 6643de2362d3Smrg # We need to hardcode the library path 66447821949aSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645de2362d3Smrg # Make sure the rpath contains only unique directories. 66467821949aSmrg case "$temp_rpath:" in 6647de2362d3Smrg *"$absdir:"*) ;; 6648de2362d3Smrg *) func_append temp_rpath "$absdir:" ;; 6649de2362d3Smrg esac 6650de2362d3Smrg fi 6651de2362d3Smrg 6652de2362d3Smrg # Hardcode the library path. 6653de2362d3Smrg # Skip directories that are in the system default run-time 6654de2362d3Smrg # search path. 6655de2362d3Smrg case " $sys_lib_dlsearch_path " in 6656de2362d3Smrg *" $absdir "*) ;; 6657de2362d3Smrg *) 6658de2362d3Smrg case "$compile_rpath " in 6659de2362d3Smrg *" $absdir "*) ;; 6660de2362d3Smrg *) func_append compile_rpath " $absdir" ;; 6661de2362d3Smrg esac 6662de2362d3Smrg ;; 6663de2362d3Smrg esac 6664de2362d3Smrg case " $sys_lib_dlsearch_path " in 6665de2362d3Smrg *" $libdir "*) ;; 6666de2362d3Smrg *) 6667de2362d3Smrg case "$finalize_rpath " in 6668de2362d3Smrg *" $libdir "*) ;; 6669de2362d3Smrg *) func_append finalize_rpath " $libdir" ;; 6670de2362d3Smrg esac 6671de2362d3Smrg ;; 6672de2362d3Smrg esac 6673de2362d3Smrg fi # $linkmode,$pass = prog,link... 6674de2362d3Smrg 66757821949aSmrg if test "$alldeplibs" = yes && 66767821949aSmrg { test "$deplibs_check_method" = pass_all || 66777821949aSmrg { test "$build_libtool_libs" = yes && 6678de2362d3Smrg test -n "$library_names"; }; }; then 6679de2362d3Smrg # We only need to search for static libraries 6680de2362d3Smrg continue 6681de2362d3Smrg fi 6682de2362d3Smrg fi 6683de2362d3Smrg 6684de2362d3Smrg link_static=no # Whether the deplib will be linked statically 6685de2362d3Smrg use_static_libs=$prefer_static_libs 66867821949aSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 6687de2362d3Smrg use_static_libs=no 6688de2362d3Smrg fi 6689de2362d3Smrg if test -n "$library_names" && 66907821949aSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691de2362d3Smrg case $host in 66927821949aSmrg *cygwin* | *mingw* | *cegcc*) 6693de2362d3Smrg # No point in relinking DLLs because paths are not encoded 6694de2362d3Smrg func_append notinst_deplibs " $lib" 6695de2362d3Smrg need_relink=no 6696de2362d3Smrg ;; 6697de2362d3Smrg *) 66987821949aSmrg if test "$installed" = no; then 6699de2362d3Smrg func_append notinst_deplibs " $lib" 6700de2362d3Smrg need_relink=yes 6701de2362d3Smrg fi 6702de2362d3Smrg ;; 6703de2362d3Smrg esac 6704de2362d3Smrg # This is a shared library 6705de2362d3Smrg 6706de2362d3Smrg # Warn about portability, can't link against -module's on some 6707de2362d3Smrg # systems (darwin). Don't bleat about dlopened modules though! 67087821949aSmrg dlopenmodule="" 6709de2362d3Smrg for dlpremoduletest in $dlprefiles; do 6710de2362d3Smrg if test "X$dlpremoduletest" = "X$lib"; then 67117821949aSmrg dlopenmodule="$dlpremoduletest" 6712de2362d3Smrg break 6713de2362d3Smrg fi 6714de2362d3Smrg done 67157821949aSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6716de2362d3Smrg echo 67177821949aSmrg if test "$linkmode" = prog; then 6718de2362d3Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719de2362d3Smrg else 6720de2362d3Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721de2362d3Smrg fi 6722de2362d3Smrg $ECHO "*** $linklib is not portable!" 6723de2362d3Smrg fi 67247821949aSmrg if test "$linkmode" = lib && 67257821949aSmrg test "$hardcode_into_libs" = yes; then 6726de2362d3Smrg # Hardcode the library path. 6727de2362d3Smrg # Skip directories that are in the system default run-time 6728de2362d3Smrg # search path. 6729de2362d3Smrg case " $sys_lib_dlsearch_path " in 6730de2362d3Smrg *" $absdir "*) ;; 6731de2362d3Smrg *) 6732de2362d3Smrg case "$compile_rpath " in 6733de2362d3Smrg *" $absdir "*) ;; 6734de2362d3Smrg *) func_append compile_rpath " $absdir" ;; 6735de2362d3Smrg esac 6736de2362d3Smrg ;; 6737de2362d3Smrg esac 6738de2362d3Smrg case " $sys_lib_dlsearch_path " in 6739de2362d3Smrg *" $libdir "*) ;; 6740de2362d3Smrg *) 6741de2362d3Smrg case "$finalize_rpath " in 6742de2362d3Smrg *" $libdir "*) ;; 6743de2362d3Smrg *) func_append finalize_rpath " $libdir" ;; 6744de2362d3Smrg esac 6745de2362d3Smrg ;; 6746de2362d3Smrg esac 6747de2362d3Smrg fi 6748de2362d3Smrg 6749de2362d3Smrg if test -n "$old_archive_from_expsyms_cmds"; then 6750de2362d3Smrg # figure out the soname 6751de2362d3Smrg set dummy $library_names 6752de2362d3Smrg shift 67537821949aSmrg realname="$1" 6754de2362d3Smrg shift 6755de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6756de2362d3Smrg # use dlname if we got it. it's perfectly good, no? 6757de2362d3Smrg if test -n "$dlname"; then 67587821949aSmrg soname="$dlname" 6759de2362d3Smrg elif test -n "$soname_spec"; then 6760de2362d3Smrg # bleh windows 6761de2362d3Smrg case $host in 67627821949aSmrg *cygwin* | mingw* | *cegcc*) 6763de2362d3Smrg func_arith $current - $age 6764de2362d3Smrg major=$func_arith_result 67657821949aSmrg versuffix="-$major" 6766de2362d3Smrg ;; 6767de2362d3Smrg esac 6768de2362d3Smrg eval soname=\"$soname_spec\" 6769de2362d3Smrg else 67707821949aSmrg soname="$realname" 6771de2362d3Smrg fi 6772de2362d3Smrg 6773de2362d3Smrg # Make a new name for the extract_expsyms_cmds to use 67747821949aSmrg soroot="$soname" 6775de2362d3Smrg func_basename "$soroot" 67767821949aSmrg soname="$func_basename_result" 6777de2362d3Smrg func_stripname 'lib' '.dll' "$soname" 6778de2362d3Smrg newlib=libimp-$func_stripname_result.a 6779de2362d3Smrg 6780de2362d3Smrg # If the library has no export list, then create one now 6781de2362d3Smrg if test -f "$output_objdir/$soname-def"; then : 6782de2362d3Smrg else 67837821949aSmrg func_verbose "extracting exported symbol list from \`$soname'" 6784de2362d3Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785de2362d3Smrg fi 6786de2362d3Smrg 6787de2362d3Smrg # Create $newlib 6788de2362d3Smrg if test -f "$output_objdir/$newlib"; then :; else 67897821949aSmrg func_verbose "generating import library for \`$soname'" 6790de2362d3Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791de2362d3Smrg fi 6792de2362d3Smrg # make sure the library variables are pointing to the new library 6793de2362d3Smrg dir=$output_objdir 6794de2362d3Smrg linklib=$newlib 6795de2362d3Smrg fi # test -n "$old_archive_from_expsyms_cmds" 6796de2362d3Smrg 67977821949aSmrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798de2362d3Smrg add_shlibpath= 6799de2362d3Smrg add_dir= 6800de2362d3Smrg add= 6801de2362d3Smrg lib_linked=yes 6802de2362d3Smrg case $hardcode_action in 6803de2362d3Smrg immediate | unsupported) 68047821949aSmrg if test "$hardcode_direct" = no; then 68057821949aSmrg add="$dir/$linklib" 6806de2362d3Smrg case $host in 68077821949aSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 68087821949aSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809de2362d3Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 68107821949aSmrg *-*-unixware7*) add_dir="-L$dir" ;; 6811de2362d3Smrg *-*-darwin* ) 68127821949aSmrg # if the lib is a (non-dlopened) module then we can not 6813de2362d3Smrg # link against it, someone is ignoring the earlier warnings 6814de2362d3Smrg if /usr/bin/file -L $add 2> /dev/null | 68157821949aSmrg $GREP ": [^:]* bundle" >/dev/null ; then 6816de2362d3Smrg if test "X$dlopenmodule" != "X$lib"; then 6817de2362d3Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 68187821949aSmrg if test -z "$old_library" ; then 6819de2362d3Smrg echo 6820de2362d3Smrg echo "*** And there doesn't seem to be a static archive available" 6821de2362d3Smrg echo "*** The link will probably fail, sorry" 6822de2362d3Smrg else 68237821949aSmrg add="$dir/$old_library" 6824de2362d3Smrg fi 6825de2362d3Smrg elif test -n "$old_library"; then 68267821949aSmrg add="$dir/$old_library" 6827de2362d3Smrg fi 6828de2362d3Smrg fi 6829de2362d3Smrg esac 68307821949aSmrg elif test "$hardcode_minus_L" = no; then 6831de2362d3Smrg case $host in 68327821949aSmrg *-*-sunos*) add_shlibpath="$dir" ;; 6833de2362d3Smrg esac 68347821949aSmrg add_dir="-L$dir" 68357821949aSmrg add="-l$name" 68367821949aSmrg elif test "$hardcode_shlibpath_var" = no; then 68377821949aSmrg add_shlibpath="$dir" 68387821949aSmrg add="-l$name" 6839de2362d3Smrg else 6840de2362d3Smrg lib_linked=no 6841de2362d3Smrg fi 6842de2362d3Smrg ;; 6843de2362d3Smrg relink) 68447821949aSmrg if test "$hardcode_direct" = yes && 68457821949aSmrg test "$hardcode_direct_absolute" = no; then 68467821949aSmrg add="$dir/$linklib" 68477821949aSmrg elif test "$hardcode_minus_L" = yes; then 68487821949aSmrg add_dir="-L$absdir" 6849de2362d3Smrg # Try looking first in the location we're being installed to. 6850de2362d3Smrg if test -n "$inst_prefix_dir"; then 6851de2362d3Smrg case $libdir in 6852de2362d3Smrg [\\/]*) 6853de2362d3Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6854de2362d3Smrg ;; 6855de2362d3Smrg esac 6856de2362d3Smrg fi 68577821949aSmrg add="-l$name" 68587821949aSmrg elif test "$hardcode_shlibpath_var" = yes; then 68597821949aSmrg add_shlibpath="$dir" 68607821949aSmrg add="-l$name" 6861de2362d3Smrg else 6862de2362d3Smrg lib_linked=no 6863de2362d3Smrg fi 6864de2362d3Smrg ;; 6865de2362d3Smrg *) lib_linked=no ;; 6866de2362d3Smrg esac 6867de2362d3Smrg 68687821949aSmrg if test "$lib_linked" != yes; then 6869de2362d3Smrg func_fatal_configuration "unsupported hardcode properties" 6870de2362d3Smrg fi 6871de2362d3Smrg 6872de2362d3Smrg if test -n "$add_shlibpath"; then 6873de2362d3Smrg case :$compile_shlibpath: in 6874de2362d3Smrg *":$add_shlibpath:"*) ;; 6875de2362d3Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876de2362d3Smrg esac 6877de2362d3Smrg fi 68787821949aSmrg if test "$linkmode" = prog; then 6879de2362d3Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880de2362d3Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881de2362d3Smrg else 6882de2362d3Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883de2362d3Smrg test -n "$add" && deplibs="$add $deplibs" 68847821949aSmrg if test "$hardcode_direct" != yes && 68857821949aSmrg test "$hardcode_minus_L" != yes && 68867821949aSmrg test "$hardcode_shlibpath_var" = yes; then 6887de2362d3Smrg case :$finalize_shlibpath: in 6888de2362d3Smrg *":$libdir:"*) ;; 6889de2362d3Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6890de2362d3Smrg esac 6891de2362d3Smrg fi 6892de2362d3Smrg fi 6893de2362d3Smrg fi 6894de2362d3Smrg 68957821949aSmrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896de2362d3Smrg add_shlibpath= 6897de2362d3Smrg add_dir= 6898de2362d3Smrg add= 6899de2362d3Smrg # Finalize command for both is simple: just hardcode it. 69007821949aSmrg if test "$hardcode_direct" = yes && 69017821949aSmrg test "$hardcode_direct_absolute" = no; then 69027821949aSmrg add="$libdir/$linklib" 69037821949aSmrg elif test "$hardcode_minus_L" = yes; then 69047821949aSmrg add_dir="-L$libdir" 69057821949aSmrg add="-l$name" 69067821949aSmrg elif test "$hardcode_shlibpath_var" = yes; then 6907de2362d3Smrg case :$finalize_shlibpath: in 6908de2362d3Smrg *":$libdir:"*) ;; 6909de2362d3Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6910de2362d3Smrg esac 69117821949aSmrg add="-l$name" 69127821949aSmrg elif test "$hardcode_automatic" = yes; then 6913de2362d3Smrg if test -n "$inst_prefix_dir" && 69147821949aSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 69157821949aSmrg add="$inst_prefix_dir$libdir/$linklib" 6916de2362d3Smrg else 69177821949aSmrg add="$libdir/$linklib" 6918de2362d3Smrg fi 6919de2362d3Smrg else 6920de2362d3Smrg # We cannot seem to hardcode it, guess we'll fake it. 69217821949aSmrg add_dir="-L$libdir" 6922de2362d3Smrg # Try looking first in the location we're being installed to. 6923de2362d3Smrg if test -n "$inst_prefix_dir"; then 6924de2362d3Smrg case $libdir in 6925de2362d3Smrg [\\/]*) 6926de2362d3Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6927de2362d3Smrg ;; 6928de2362d3Smrg esac 6929de2362d3Smrg fi 69307821949aSmrg add="-l$name" 6931de2362d3Smrg fi 6932de2362d3Smrg 69337821949aSmrg if test "$linkmode" = prog; then 6934de2362d3Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935de2362d3Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936de2362d3Smrg else 6937de2362d3Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938de2362d3Smrg test -n "$add" && deplibs="$add $deplibs" 6939de2362d3Smrg fi 6940de2362d3Smrg fi 69417821949aSmrg elif test "$linkmode" = prog; then 6942de2362d3Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6943de2362d3Smrg # is not unsupported. This is valid on all known static and 6944de2362d3Smrg # shared platforms. 69457821949aSmrg if test "$hardcode_direct" != unsupported; then 69467821949aSmrg test -n "$old_library" && linklib="$old_library" 6947de2362d3Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 6948de2362d3Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949de2362d3Smrg else 6950de2362d3Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6951de2362d3Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952de2362d3Smrg fi 69537821949aSmrg elif test "$build_libtool_libs" = yes; then 6954de2362d3Smrg # Not a shared library 69557821949aSmrg if test "$deplibs_check_method" != pass_all; then 6956de2362d3Smrg # We're trying link a shared library against a static one 6957de2362d3Smrg # but the system doesn't support it. 6958de2362d3Smrg 6959de2362d3Smrg # Just print a warning and add the library to dependency_libs so 6960de2362d3Smrg # that the program can be linked against the static library. 6961de2362d3Smrg echo 69627821949aSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 6963de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 6964de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 6965de2362d3Smrg echo "*** shared version of the library, which you do not appear to have." 69667821949aSmrg if test "$module" = yes; then 6967de2362d3Smrg echo "*** But as you try to build a module library, libtool will still create " 6968de2362d3Smrg echo "*** a static module, that should work as long as the dlopening application" 6969de2362d3Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970de2362d3Smrg if test -z "$global_symbol_pipe"; then 6971de2362d3Smrg echo 6972de2362d3Smrg echo "*** However, this would only work if libtool was able to extract symbol" 69737821949aSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6974de2362d3Smrg echo "*** not find such a program. So, this module is probably useless." 69757821949aSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976de2362d3Smrg fi 69777821949aSmrg if test "$build_old_libs" = no; then 6978de2362d3Smrg build_libtool_libs=module 6979de2362d3Smrg build_old_libs=yes 6980de2362d3Smrg else 6981de2362d3Smrg build_libtool_libs=no 6982de2362d3Smrg fi 6983de2362d3Smrg fi 6984de2362d3Smrg else 6985de2362d3Smrg deplibs="$dir/$old_library $deplibs" 6986de2362d3Smrg link_static=yes 6987de2362d3Smrg fi 6988de2362d3Smrg fi # link shared/static library? 6989de2362d3Smrg 69907821949aSmrg if test "$linkmode" = lib; then 6991de2362d3Smrg if test -n "$dependency_libs" && 69927821949aSmrg { test "$hardcode_into_libs" != yes || 69937821949aSmrg test "$build_old_libs" = yes || 69947821949aSmrg test "$link_static" = yes; }; then 6995de2362d3Smrg # Extract -R from dependency_libs 6996de2362d3Smrg temp_deplibs= 6997de2362d3Smrg for libdir in $dependency_libs; do 6998de2362d3Smrg case $libdir in 6999de2362d3Smrg -R*) func_stripname '-R' '' "$libdir" 7000de2362d3Smrg temp_xrpath=$func_stripname_result 7001de2362d3Smrg case " $xrpath " in 7002de2362d3Smrg *" $temp_xrpath "*) ;; 7003de2362d3Smrg *) func_append xrpath " $temp_xrpath";; 7004de2362d3Smrg esac;; 7005de2362d3Smrg *) func_append temp_deplibs " $libdir";; 7006de2362d3Smrg esac 7007de2362d3Smrg done 70087821949aSmrg dependency_libs="$temp_deplibs" 7009de2362d3Smrg fi 7010de2362d3Smrg 7011de2362d3Smrg func_append newlib_search_path " $absdir" 7012de2362d3Smrg # Link against this library 70137821949aSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014de2362d3Smrg # ... and its dependency_libs 7015de2362d3Smrg tmp_libs= 7016de2362d3Smrg for deplib in $dependency_libs; do 7017de2362d3Smrg newdependency_libs="$deplib $newdependency_libs" 7018de2362d3Smrg case $deplib in 7019de2362d3Smrg -L*) func_stripname '-L' '' "$deplib" 7020de2362d3Smrg func_resolve_sysroot "$func_stripname_result";; 7021de2362d3Smrg *) func_resolve_sysroot "$deplib" ;; 7022de2362d3Smrg esac 70237821949aSmrg if $opt_preserve_dup_deps ; then 7024de2362d3Smrg case "$tmp_libs " in 7025de2362d3Smrg *" $func_resolve_sysroot_result "*) 7026de2362d3Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027de2362d3Smrg esac 7028de2362d3Smrg fi 7029de2362d3Smrg func_append tmp_libs " $func_resolve_sysroot_result" 7030de2362d3Smrg done 7031de2362d3Smrg 70327821949aSmrg if test "$link_all_deplibs" != no; then 7033de2362d3Smrg # Add the search paths of all dependency libraries 7034de2362d3Smrg for deplib in $dependency_libs; do 7035de2362d3Smrg path= 7036de2362d3Smrg case $deplib in 70377821949aSmrg -L*) path="$deplib" ;; 7038de2362d3Smrg *.la) 7039de2362d3Smrg func_resolve_sysroot "$deplib" 7040de2362d3Smrg deplib=$func_resolve_sysroot_result 7041de2362d3Smrg func_dirname "$deplib" "" "." 7042de2362d3Smrg dir=$func_dirname_result 7043de2362d3Smrg # We need an absolute path. 7044de2362d3Smrg case $dir in 70457821949aSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046de2362d3Smrg *) 7047de2362d3Smrg absdir=`cd "$dir" && pwd` 7048de2362d3Smrg if test -z "$absdir"; then 70497821949aSmrg func_warning "cannot determine absolute directory name of \`$dir'" 70507821949aSmrg absdir="$dir" 7051de2362d3Smrg fi 7052de2362d3Smrg ;; 7053de2362d3Smrg esac 7054de2362d3Smrg if $GREP "^installed=no" $deplib > /dev/null; then 7055de2362d3Smrg case $host in 7056de2362d3Smrg *-*-darwin*) 7057de2362d3Smrg depdepl= 70587821949aSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 70597821949aSmrg if test -n "$deplibrary_names" ; then 70607821949aSmrg for tmp in $deplibrary_names ; do 7061de2362d3Smrg depdepl=$tmp 7062de2362d3Smrg done 70637821949aSmrg if test -f "$absdir/$objdir/$depdepl" ; then 70647821949aSmrg depdepl="$absdir/$objdir/$depdepl" 70657821949aSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066de2362d3Smrg if test -z "$darwin_install_name"; then 70677821949aSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068de2362d3Smrg fi 70697821949aSmrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 70707821949aSmrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071de2362d3Smrg path= 7072de2362d3Smrg fi 7073de2362d3Smrg fi 7074de2362d3Smrg ;; 7075de2362d3Smrg *) 70767821949aSmrg path="-L$absdir/$objdir" 7077de2362d3Smrg ;; 7078de2362d3Smrg esac 7079de2362d3Smrg else 70807821949aSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081de2362d3Smrg test -z "$libdir" && \ 70827821949aSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7083de2362d3Smrg test "$absdir" != "$libdir" && \ 70847821949aSmrg func_warning "\`$deplib' seems to be moved" 7085de2362d3Smrg 70867821949aSmrg path="-L$absdir" 7087de2362d3Smrg fi 7088de2362d3Smrg ;; 7089de2362d3Smrg esac 7090de2362d3Smrg case " $deplibs " in 7091de2362d3Smrg *" $path "*) ;; 7092de2362d3Smrg *) deplibs="$path $deplibs" ;; 7093de2362d3Smrg esac 7094de2362d3Smrg done 7095de2362d3Smrg fi # link_all_deplibs != no 7096de2362d3Smrg fi # linkmode = lib 7097de2362d3Smrg done # for deplib in $libs 70987821949aSmrg if test "$pass" = link; then 70997821949aSmrg if test "$linkmode" = "prog"; then 7100de2362d3Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101de2362d3Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102de2362d3Smrg else 7103de2362d3Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104de2362d3Smrg fi 7105de2362d3Smrg fi 71067821949aSmrg dependency_libs="$newdependency_libs" 71077821949aSmrg if test "$pass" = dlpreopen; then 7108de2362d3Smrg # Link the dlpreopened libraries before other libraries 7109de2362d3Smrg for deplib in $save_deplibs; do 7110de2362d3Smrg deplibs="$deplib $deplibs" 7111de2362d3Smrg done 7112de2362d3Smrg fi 71137821949aSmrg if test "$pass" != dlopen; then 71147821949aSmrg if test "$pass" != conv; then 7115de2362d3Smrg # Make sure lib_search_path contains only unique directories. 7116de2362d3Smrg lib_search_path= 7117de2362d3Smrg for dir in $newlib_search_path; do 7118de2362d3Smrg case "$lib_search_path " in 7119de2362d3Smrg *" $dir "*) ;; 7120de2362d3Smrg *) func_append lib_search_path " $dir" ;; 7121de2362d3Smrg esac 7122de2362d3Smrg done 7123de2362d3Smrg newlib_search_path= 71247821949aSmrg fi 7125de2362d3Smrg 71267821949aSmrg if test "$linkmode,$pass" != "prog,link"; then 71277821949aSmrg vars="deplibs" 71280d16fef4Smrg else 71297821949aSmrg vars="compile_deplibs finalize_deplibs" 7130de2362d3Smrg fi 7131de2362d3Smrg for var in $vars dependency_libs; do 7132de2362d3Smrg # Add libraries to $var in reverse order 7133de2362d3Smrg eval tmp_libs=\"\$$var\" 7134de2362d3Smrg new_libs= 7135de2362d3Smrg for deplib in $tmp_libs; do 7136de2362d3Smrg # FIXME: Pedantically, this is the right thing to do, so 7137de2362d3Smrg # that some nasty dependency loop isn't accidentally 7138de2362d3Smrg # broken: 7139de2362d3Smrg #new_libs="$deplib $new_libs" 7140de2362d3Smrg # Pragmatically, this seems to cause very few problems in 7141de2362d3Smrg # practice: 7142de2362d3Smrg case $deplib in 7143de2362d3Smrg -L*) new_libs="$deplib $new_libs" ;; 7144de2362d3Smrg -R*) ;; 7145de2362d3Smrg *) 7146de2362d3Smrg # And here is the reason: when a library appears more 7147de2362d3Smrg # than once as an explicit dependence of a library, or 7148de2362d3Smrg # is implicitly linked in more than once by the 7149de2362d3Smrg # compiler, it is considered special, and multiple 7150de2362d3Smrg # occurrences thereof are not removed. Compare this 7151de2362d3Smrg # with having the same library being listed as a 7152de2362d3Smrg # dependency of multiple other libraries: in this case, 7153de2362d3Smrg # we know (pedantically, we assume) the library does not 7154de2362d3Smrg # need to be listed more than once, so we keep only the 7155de2362d3Smrg # last copy. This is not always right, but it is rare 7156de2362d3Smrg # enough that we require users that really mean to play 7157de2362d3Smrg # such unportable linking tricks to link the library 7158de2362d3Smrg # using -Wl,-lname, so that libtool does not consider it 7159de2362d3Smrg # for duplicate removal. 7160de2362d3Smrg case " $specialdeplibs " in 7161de2362d3Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162de2362d3Smrg *) 7163de2362d3Smrg case " $new_libs " in 7164de2362d3Smrg *" $deplib "*) ;; 7165de2362d3Smrg *) new_libs="$deplib $new_libs" ;; 7166de2362d3Smrg esac 7167de2362d3Smrg ;; 7168de2362d3Smrg esac 7169de2362d3Smrg ;; 7170de2362d3Smrg esac 7171de2362d3Smrg done 7172de2362d3Smrg tmp_libs= 7173de2362d3Smrg for deplib in $new_libs; do 7174de2362d3Smrg case $deplib in 7175de2362d3Smrg -L*) 7176de2362d3Smrg case " $tmp_libs " in 7177de2362d3Smrg *" $deplib "*) ;; 7178de2362d3Smrg *) func_append tmp_libs " $deplib" ;; 7179de2362d3Smrg esac 7180de2362d3Smrg ;; 7181de2362d3Smrg *) func_append tmp_libs " $deplib" ;; 7182de2362d3Smrg esac 7183de2362d3Smrg done 7184de2362d3Smrg eval $var=\"$tmp_libs\" 7185de2362d3Smrg done # for var 7186de2362d3Smrg fi 7187de2362d3Smrg # Last step: remove runtime libs from dependency_libs 7188de2362d3Smrg # (they stay in deplibs) 7189de2362d3Smrg tmp_libs= 71907821949aSmrg for i in $dependency_libs ; do 7191de2362d3Smrg case " $predeps $postdeps $compiler_lib_search_path " in 7192de2362d3Smrg *" $i "*) 71937821949aSmrg i="" 7194de2362d3Smrg ;; 7195de2362d3Smrg esac 71967821949aSmrg if test -n "$i" ; then 7197de2362d3Smrg func_append tmp_libs " $i" 7198de2362d3Smrg fi 7199de2362d3Smrg done 7200de2362d3Smrg dependency_libs=$tmp_libs 7201de2362d3Smrg done # for pass 72027821949aSmrg if test "$linkmode" = prog; then 72037821949aSmrg dlfiles="$newdlfiles" 7204de2362d3Smrg fi 72057821949aSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 72067821949aSmrg dlprefiles="$newdlprefiles" 7207de2362d3Smrg fi 7208de2362d3Smrg 7209de2362d3Smrg case $linkmode in 7210de2362d3Smrg oldlib) 72117821949aSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 72127821949aSmrg func_warning "\`-dlopen' is ignored for archives" 7213de2362d3Smrg fi 7214de2362d3Smrg 7215de2362d3Smrg case " $deplibs" in 7216de2362d3Smrg *\ -l* | *\ -L*) 72177821949aSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218de2362d3Smrg esac 7219de2362d3Smrg 7220de2362d3Smrg test -n "$rpath" && \ 72217821949aSmrg func_warning "\`-rpath' is ignored for archives" 7222de2362d3Smrg 7223de2362d3Smrg test -n "$xrpath" && \ 72247821949aSmrg func_warning "\`-R' is ignored for archives" 7225de2362d3Smrg 7226de2362d3Smrg test -n "$vinfo" && \ 72277821949aSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 7228de2362d3Smrg 7229de2362d3Smrg test -n "$release" && \ 72307821949aSmrg func_warning "\`-release' is ignored for archives" 7231de2362d3Smrg 7232de2362d3Smrg test -n "$export_symbols$export_symbols_regex" && \ 72337821949aSmrg func_warning "\`-export-symbols' is ignored for archives" 7234de2362d3Smrg 7235de2362d3Smrg # Now set the variables for building old libraries. 7236de2362d3Smrg build_libtool_libs=no 72377821949aSmrg oldlibs="$output" 7238de2362d3Smrg func_append objs "$old_deplibs" 7239de2362d3Smrg ;; 7240de2362d3Smrg 7241de2362d3Smrg lib) 72427821949aSmrg # Make sure we only generate libraries of the form `libNAME.la'. 7243de2362d3Smrg case $outputname in 7244de2362d3Smrg lib*) 7245de2362d3Smrg func_stripname 'lib' '.la' "$outputname" 7246de2362d3Smrg name=$func_stripname_result 7247de2362d3Smrg eval shared_ext=\"$shrext_cmds\" 7248de2362d3Smrg eval libname=\"$libname_spec\" 7249de2362d3Smrg ;; 7250de2362d3Smrg *) 72517821949aSmrg test "$module" = no && \ 72527821949aSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253de2362d3Smrg 72547821949aSmrg if test "$need_lib_prefix" != no; then 7255de2362d3Smrg # Add the "lib" prefix for modules if required 7256de2362d3Smrg func_stripname '' '.la' "$outputname" 7257de2362d3Smrg name=$func_stripname_result 7258de2362d3Smrg eval shared_ext=\"$shrext_cmds\" 7259de2362d3Smrg eval libname=\"$libname_spec\" 7260de2362d3Smrg else 7261de2362d3Smrg func_stripname '' '.la' "$outputname" 7262de2362d3Smrg libname=$func_stripname_result 7263de2362d3Smrg fi 7264de2362d3Smrg ;; 7265de2362d3Smrg esac 7266de2362d3Smrg 7267de2362d3Smrg if test -n "$objs"; then 72687821949aSmrg if test "$deplibs_check_method" != pass_all; then 72697821949aSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270de2362d3Smrg else 7271de2362d3Smrg echo 7272de2362d3Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273de2362d3Smrg $ECHO "*** objects $objs is not portable!" 7274de2362d3Smrg func_append libobjs " $objs" 7275de2362d3Smrg fi 7276de2362d3Smrg fi 7277de2362d3Smrg 72787821949aSmrg test "$dlself" != no && \ 72797821949aSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7280de2362d3Smrg 7281de2362d3Smrg set dummy $rpath 7282de2362d3Smrg shift 72837821949aSmrg test "$#" -gt 1 && \ 72847821949aSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7285de2362d3Smrg 72867821949aSmrg install_libdir="$1" 7287de2362d3Smrg 7288de2362d3Smrg oldlibs= 7289de2362d3Smrg if test -z "$rpath"; then 72907821949aSmrg if test "$build_libtool_libs" = yes; then 7291de2362d3Smrg # Building a libtool convenience library. 72927821949aSmrg # Some compilers have problems with a `.al' extension so 7293de2362d3Smrg # convenience libraries should have the same extension an 7294de2362d3Smrg # archive normally would. 7295de2362d3Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296de2362d3Smrg build_libtool_libs=convenience 7297de2362d3Smrg build_old_libs=yes 7298de2362d3Smrg fi 7299de2362d3Smrg 7300de2362d3Smrg test -n "$vinfo" && \ 73017821949aSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302de2362d3Smrg 7303de2362d3Smrg test -n "$release" && \ 73047821949aSmrg func_warning "\`-release' is ignored for convenience libraries" 7305de2362d3Smrg else 7306de2362d3Smrg 7307de2362d3Smrg # Parse the version information argument. 73087821949aSmrg save_ifs="$IFS"; IFS=':' 7309de2362d3Smrg set dummy $vinfo 0 0 0 7310de2362d3Smrg shift 73117821949aSmrg IFS="$save_ifs" 7312de2362d3Smrg 7313de2362d3Smrg test -n "$7" && \ 73147821949aSmrg func_fatal_help "too many parameters to \`-version-info'" 7315de2362d3Smrg 7316de2362d3Smrg # convert absolute version numbers to libtool ages 7317de2362d3Smrg # this retains compatibility with .la files and attempts 7318de2362d3Smrg # to make the code below a bit more comprehensible 7319de2362d3Smrg 7320de2362d3Smrg case $vinfo_number in 7321de2362d3Smrg yes) 73227821949aSmrg number_major="$1" 73237821949aSmrg number_minor="$2" 73247821949aSmrg number_revision="$3" 7325de2362d3Smrg # 7326de2362d3Smrg # There are really only two kinds -- those that 7327de2362d3Smrg # use the current revision as the major version 7328de2362d3Smrg # and those that subtract age and use age as 7329de2362d3Smrg # a minor version. But, then there is irix 73307821949aSmrg # which has an extra 1 added just for fun 7331de2362d3Smrg # 7332de2362d3Smrg case $version_type in 7333de2362d3Smrg # correct linux to gnu/linux during the next big refactor 73347821949aSmrg darwin|linux|osf|windows|none) 7335de2362d3Smrg func_arith $number_major + $number_minor 7336de2362d3Smrg current=$func_arith_result 73377821949aSmrg age="$number_minor" 73387821949aSmrg revision="$number_revision" 7339de2362d3Smrg ;; 73407821949aSmrg freebsd-aout|freebsd-elf|qnx|sunos) 73417821949aSmrg current="$number_major" 73427821949aSmrg revision="$number_minor" 73437821949aSmrg age="0" 7344de2362d3Smrg ;; 7345de2362d3Smrg irix|nonstopux) 7346de2362d3Smrg func_arith $number_major + $number_minor 7347de2362d3Smrg current=$func_arith_result 73487821949aSmrg age="$number_minor" 73497821949aSmrg revision="$number_minor" 7350de2362d3Smrg lt_irix_increment=no 7351de2362d3Smrg ;; 7352de2362d3Smrg esac 7353de2362d3Smrg ;; 7354de2362d3Smrg no) 73557821949aSmrg current="$1" 73567821949aSmrg revision="$2" 73577821949aSmrg age="$3" 7358de2362d3Smrg ;; 7359de2362d3Smrg esac 7360de2362d3Smrg 7361de2362d3Smrg # Check that each of the things are valid numbers. 7362de2362d3Smrg case $current in 7363de2362d3Smrg 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]) ;; 7364de2362d3Smrg *) 73657821949aSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 73667821949aSmrg func_fatal_error "\`$vinfo' is not valid version information" 7367de2362d3Smrg ;; 7368de2362d3Smrg esac 7369de2362d3Smrg 7370de2362d3Smrg case $revision in 7371de2362d3Smrg 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]) ;; 7372de2362d3Smrg *) 73737821949aSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 73747821949aSmrg func_fatal_error "\`$vinfo' is not valid version information" 7375de2362d3Smrg ;; 7376de2362d3Smrg esac 7377de2362d3Smrg 7378de2362d3Smrg case $age in 7379de2362d3Smrg 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]) ;; 7380de2362d3Smrg *) 73817821949aSmrg func_error "AGE \`$age' must be a nonnegative integer" 73827821949aSmrg func_fatal_error "\`$vinfo' is not valid version information" 7383de2362d3Smrg ;; 7384de2362d3Smrg esac 7385de2362d3Smrg 7386de2362d3Smrg if test "$age" -gt "$current"; then 73877821949aSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 73887821949aSmrg func_fatal_error "\`$vinfo' is not valid version information" 7389de2362d3Smrg fi 7390de2362d3Smrg 7391de2362d3Smrg # Calculate the version variables. 7392de2362d3Smrg major= 7393de2362d3Smrg versuffix= 7394de2362d3Smrg verstring= 7395de2362d3Smrg case $version_type in 7396de2362d3Smrg none) ;; 7397de2362d3Smrg 7398de2362d3Smrg darwin) 7399de2362d3Smrg # Like Linux, but with the current version available in 7400de2362d3Smrg # verstring for coding it into the library header 7401de2362d3Smrg func_arith $current - $age 7402de2362d3Smrg major=.$func_arith_result 74037821949aSmrg versuffix="$major.$age.$revision" 7404de2362d3Smrg # Darwin ld doesn't like 0 for these options... 7405de2362d3Smrg func_arith $current + 1 7406de2362d3Smrg minor_current=$func_arith_result 74077821949aSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408de2362d3Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409de2362d3Smrg ;; 7410de2362d3Smrg 7411de2362d3Smrg freebsd-aout) 74127821949aSmrg major=".$current" 74137821949aSmrg versuffix=".$current.$revision"; 7414de2362d3Smrg ;; 7415de2362d3Smrg 7416de2362d3Smrg freebsd-elf) 74177821949aSmrg major=".$current" 74187821949aSmrg versuffix=".$current" 7419de2362d3Smrg ;; 7420de2362d3Smrg 7421de2362d3Smrg irix | nonstopux) 74227821949aSmrg if test "X$lt_irix_increment" = "Xno"; then 7423de2362d3Smrg func_arith $current - $age 7424de2362d3Smrg else 7425de2362d3Smrg func_arith $current - $age + 1 7426de2362d3Smrg fi 7427de2362d3Smrg major=$func_arith_result 7428de2362d3Smrg 7429de2362d3Smrg case $version_type in 7430de2362d3Smrg nonstopux) verstring_prefix=nonstopux ;; 7431de2362d3Smrg *) verstring_prefix=sgi ;; 7432de2362d3Smrg esac 74337821949aSmrg verstring="$verstring_prefix$major.$revision" 7434de2362d3Smrg 7435de2362d3Smrg # Add in all the interfaces that we are compatible with. 7436de2362d3Smrg loop=$revision 74377821949aSmrg while test "$loop" -ne 0; do 7438de2362d3Smrg func_arith $revision - $loop 7439de2362d3Smrg iface=$func_arith_result 7440de2362d3Smrg func_arith $loop - 1 7441de2362d3Smrg loop=$func_arith_result 74427821949aSmrg verstring="$verstring_prefix$major.$iface:$verstring" 7443de2362d3Smrg done 7444de2362d3Smrg 74457821949aSmrg # Before this point, $major must not contain `.'. 7446de2362d3Smrg major=.$major 74477821949aSmrg versuffix="$major.$revision" 7448de2362d3Smrg ;; 7449de2362d3Smrg 7450de2362d3Smrg linux) # correct to gnu/linux during the next big refactor 7451de2362d3Smrg func_arith $current - $age 7452de2362d3Smrg major=.$func_arith_result 74537821949aSmrg versuffix="$major.$age.$revision" 7454de2362d3Smrg ;; 7455de2362d3Smrg 7456de2362d3Smrg osf) 7457de2362d3Smrg func_arith $current - $age 7458de2362d3Smrg major=.$func_arith_result 74597821949aSmrg versuffix=".$current.$age.$revision" 74607821949aSmrg verstring="$current.$age.$revision" 7461de2362d3Smrg 7462de2362d3Smrg # Add in all the interfaces that we are compatible with. 7463de2362d3Smrg loop=$age 74647821949aSmrg while test "$loop" -ne 0; do 7465de2362d3Smrg func_arith $current - $loop 7466de2362d3Smrg iface=$func_arith_result 7467de2362d3Smrg func_arith $loop - 1 7468de2362d3Smrg loop=$func_arith_result 74697821949aSmrg verstring="$verstring:${iface}.0" 7470de2362d3Smrg done 7471de2362d3Smrg 7472de2362d3Smrg # Make executables depend on our current version. 74737821949aSmrg func_append verstring ":${current}.0" 7474de2362d3Smrg ;; 7475de2362d3Smrg 7476de2362d3Smrg qnx) 74777821949aSmrg major=".$current" 74787821949aSmrg versuffix=".$current" 7479de2362d3Smrg ;; 7480de2362d3Smrg 7481de2362d3Smrg sunos) 74827821949aSmrg major=".$current" 74837821949aSmrg versuffix=".$current.$revision" 7484de2362d3Smrg ;; 7485de2362d3Smrg 7486de2362d3Smrg windows) 7487de2362d3Smrg # Use '-' rather than '.', since we only want one 74887821949aSmrg # extension on DOS 8.3 filesystems. 7489de2362d3Smrg func_arith $current - $age 7490de2362d3Smrg major=$func_arith_result 74917821949aSmrg versuffix="-$major" 7492de2362d3Smrg ;; 7493de2362d3Smrg 7494de2362d3Smrg *) 74957821949aSmrg func_fatal_configuration "unknown library version type \`$version_type'" 7496de2362d3Smrg ;; 7497de2362d3Smrg esac 7498de2362d3Smrg 7499de2362d3Smrg # Clear the version info if we defaulted, and they specified a release. 7500de2362d3Smrg if test -z "$vinfo" && test -n "$release"; then 7501de2362d3Smrg major= 7502de2362d3Smrg case $version_type in 7503de2362d3Smrg darwin) 7504de2362d3Smrg # we can't check for "0.0" in archive_cmds due to quoting 7505de2362d3Smrg # problems, so we reset it completely 7506de2362d3Smrg verstring= 7507de2362d3Smrg ;; 7508de2362d3Smrg *) 75097821949aSmrg verstring="0.0" 7510de2362d3Smrg ;; 7511de2362d3Smrg esac 75127821949aSmrg if test "$need_version" = no; then 7513de2362d3Smrg versuffix= 7514de2362d3Smrg else 75157821949aSmrg versuffix=".0.0" 7516de2362d3Smrg fi 7517de2362d3Smrg fi 7518de2362d3Smrg 7519de2362d3Smrg # Remove version info from name if versioning should be avoided 75207821949aSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 7521de2362d3Smrg major= 7522de2362d3Smrg versuffix= 75237821949aSmrg verstring="" 7524de2362d3Smrg fi 7525de2362d3Smrg 7526de2362d3Smrg # Check to see if the archive will have undefined symbols. 75277821949aSmrg if test "$allow_undefined" = yes; then 75287821949aSmrg if test "$allow_undefined_flag" = unsupported; then 75297821949aSmrg func_warning "undefined symbols not allowed in $host shared libraries" 75307821949aSmrg build_libtool_libs=no 75317821949aSmrg build_old_libs=yes 7532de2362d3Smrg fi 7533de2362d3Smrg else 7534de2362d3Smrg # Don't allow undefined symbols. 75357821949aSmrg allow_undefined_flag="$no_undefined_flag" 7536de2362d3Smrg fi 7537de2362d3Smrg 7538de2362d3Smrg fi 7539de2362d3Smrg 75407821949aSmrg func_generate_dlsyms "$libname" "$libname" "yes" 7541de2362d3Smrg func_append libobjs " $symfileobj" 75427821949aSmrg test "X$libobjs" = "X " && libobjs= 7543de2362d3Smrg 75447821949aSmrg if test "$opt_mode" != relink; then 7545de2362d3Smrg # Remove our outputs, but don't remove object files since they 7546de2362d3Smrg # may have been created when compiling PIC objects. 7547de2362d3Smrg removelist= 7548de2362d3Smrg tempremovelist=`$ECHO "$output_objdir/*"` 7549de2362d3Smrg for p in $tempremovelist; do 7550de2362d3Smrg case $p in 7551de2362d3Smrg *.$objext | *.gcno) 7552de2362d3Smrg ;; 75537821949aSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 75547821949aSmrg if test "X$precious_files_regex" != "X"; then 7555de2362d3Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556de2362d3Smrg then 7557de2362d3Smrg continue 7558de2362d3Smrg fi 7559de2362d3Smrg fi 7560de2362d3Smrg func_append removelist " $p" 7561de2362d3Smrg ;; 7562de2362d3Smrg *) ;; 7563de2362d3Smrg esac 7564de2362d3Smrg done 7565de2362d3Smrg test -n "$removelist" && \ 7566de2362d3Smrg func_show_eval "${RM}r \$removelist" 7567de2362d3Smrg fi 7568de2362d3Smrg 7569de2362d3Smrg # Now set the variables for building old libraries. 75707821949aSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7571de2362d3Smrg func_append oldlibs " $output_objdir/$libname.$libext" 7572de2362d3Smrg 7573de2362d3Smrg # Transform .lo files to .o files. 75747821949aSmrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575de2362d3Smrg fi 7576de2362d3Smrg 7577de2362d3Smrg # Eliminate all temporary directories. 7578de2362d3Smrg #for path in $notinst_path; do 7579de2362d3Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7580de2362d3Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7581de2362d3Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582de2362d3Smrg #done 7583de2362d3Smrg 7584de2362d3Smrg if test -n "$xrpath"; then 7585de2362d3Smrg # If the user specified any rpath flags, then add them. 7586de2362d3Smrg temp_xrpath= 7587de2362d3Smrg for libdir in $xrpath; do 7588de2362d3Smrg func_replace_sysroot "$libdir" 7589de2362d3Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7590de2362d3Smrg case "$finalize_rpath " in 7591de2362d3Smrg *" $libdir "*) ;; 7592de2362d3Smrg *) func_append finalize_rpath " $libdir" ;; 7593de2362d3Smrg esac 7594de2362d3Smrg done 75957821949aSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596de2362d3Smrg dependency_libs="$temp_xrpath $dependency_libs" 7597de2362d3Smrg fi 7598de2362d3Smrg fi 7599de2362d3Smrg 7600de2362d3Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 76017821949aSmrg old_dlfiles="$dlfiles" 7602de2362d3Smrg dlfiles= 7603de2362d3Smrg for lib in $old_dlfiles; do 7604de2362d3Smrg case " $dlprefiles $dlfiles " in 7605de2362d3Smrg *" $lib "*) ;; 7606de2362d3Smrg *) func_append dlfiles " $lib" ;; 7607de2362d3Smrg esac 7608de2362d3Smrg done 7609de2362d3Smrg 7610de2362d3Smrg # Make sure dlprefiles contains only unique files 76117821949aSmrg old_dlprefiles="$dlprefiles" 7612de2362d3Smrg dlprefiles= 7613de2362d3Smrg for lib in $old_dlprefiles; do 7614de2362d3Smrg case "$dlprefiles " in 7615de2362d3Smrg *" $lib "*) ;; 7616de2362d3Smrg *) func_append dlprefiles " $lib" ;; 7617de2362d3Smrg esac 7618de2362d3Smrg done 7619de2362d3Smrg 76207821949aSmrg if test "$build_libtool_libs" = yes; then 7621de2362d3Smrg if test -n "$rpath"; then 7622de2362d3Smrg case $host in 7623de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624de2362d3Smrg # these systems don't actually have a c library (as such)! 7625de2362d3Smrg ;; 7626de2362d3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7627de2362d3Smrg # Rhapsody C library is in the System framework 7628de2362d3Smrg func_append deplibs " System.ltframework" 7629de2362d3Smrg ;; 7630de2362d3Smrg *-*-netbsd*) 7631de2362d3Smrg # Don't link with libc until the a.out ld.so is fixed. 7632de2362d3Smrg ;; 7633de2362d3Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634de2362d3Smrg # Do not include libc due to us having libc/libc_r. 7635de2362d3Smrg ;; 7636de2362d3Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7637de2362d3Smrg # Causes problems with __ctype 7638de2362d3Smrg ;; 7639de2362d3Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640de2362d3Smrg # Compiler inserts libc in the correct place for threads to work 7641de2362d3Smrg ;; 7642de2362d3Smrg *) 7643de2362d3Smrg # Add libc to deplibs on all other systems if necessary. 76447821949aSmrg if test "$build_libtool_need_lc" = "yes"; then 7645de2362d3Smrg func_append deplibs " -lc" 7646de2362d3Smrg fi 7647de2362d3Smrg ;; 7648de2362d3Smrg esac 7649de2362d3Smrg fi 7650de2362d3Smrg 7651de2362d3Smrg # Transform deplibs into only deplibs that can be linked in shared. 7652de2362d3Smrg name_save=$name 7653de2362d3Smrg libname_save=$libname 7654de2362d3Smrg release_save=$release 7655de2362d3Smrg versuffix_save=$versuffix 7656de2362d3Smrg major_save=$major 7657de2362d3Smrg # I'm not sure if I'm treating the release correctly. I think 7658de2362d3Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 7659de2362d3Smrg # add it in twice. Is that correct? 76607821949aSmrg release="" 76617821949aSmrg versuffix="" 76627821949aSmrg major="" 7663de2362d3Smrg newdeplibs= 7664de2362d3Smrg droppeddeps=no 7665de2362d3Smrg case $deplibs_check_method in 7666de2362d3Smrg pass_all) 7667de2362d3Smrg # Don't check for shared/static. Everything works. 7668de2362d3Smrg # This might be a little naive. We might want to check 7669de2362d3Smrg # whether the library exists or not. But this is on 7670de2362d3Smrg # osf3 & osf4 and I'm not really sure... Just 7671de2362d3Smrg # implementing what was already the behavior. 7672de2362d3Smrg newdeplibs=$deplibs 7673de2362d3Smrg ;; 7674de2362d3Smrg test_compile) 7675de2362d3Smrg # This code stresses the "libraries are programs" paradigm to its 7676de2362d3Smrg # limits. Maybe even breaks it. We compile a program, linking it 7677de2362d3Smrg # against the deplibs as a proxy for the library. Then we can check 7678de2362d3Smrg # whether they linked in statically or dynamically with ldd. 7679de2362d3Smrg $opt_dry_run || $RM conftest.c 7680de2362d3Smrg cat > conftest.c <<EOF 7681de2362d3Smrg int main() { return 0; } 7682de2362d3SmrgEOF 7683de2362d3Smrg $opt_dry_run || $RM conftest 7684de2362d3Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685de2362d3Smrg ldd_output=`ldd conftest` 7686de2362d3Smrg for i in $deplibs; do 7687de2362d3Smrg case $i in 7688de2362d3Smrg -l*) 7689de2362d3Smrg func_stripname -l '' "$i" 7690de2362d3Smrg name=$func_stripname_result 76917821949aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692de2362d3Smrg case " $predeps $postdeps " in 7693de2362d3Smrg *" $i "*) 7694de2362d3Smrg func_append newdeplibs " $i" 76957821949aSmrg i="" 7696de2362d3Smrg ;; 7697de2362d3Smrg esac 7698de2362d3Smrg fi 76997821949aSmrg if test -n "$i" ; then 7700de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7701de2362d3Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702de2362d3Smrg set dummy $deplib_matches; shift 7703de2362d3Smrg deplib_match=$1 77047821949aSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7705de2362d3Smrg func_append newdeplibs " $i" 7706de2362d3Smrg else 7707de2362d3Smrg droppeddeps=yes 7708de2362d3Smrg echo 7709de2362d3Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7710de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 7711de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 7712de2362d3Smrg echo "*** shared version of the library, which I believe you do not have" 7713de2362d3Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 7714de2362d3Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715de2362d3Smrg fi 7716de2362d3Smrg fi 7717de2362d3Smrg ;; 7718de2362d3Smrg *) 7719de2362d3Smrg func_append newdeplibs " $i" 7720de2362d3Smrg ;; 7721de2362d3Smrg esac 7722de2362d3Smrg done 7723de2362d3Smrg else 7724de2362d3Smrg # Error occurred in the first compile. Let's try to salvage 7725de2362d3Smrg # the situation: Compile a separate program for each library. 7726de2362d3Smrg for i in $deplibs; do 7727de2362d3Smrg case $i in 7728de2362d3Smrg -l*) 7729de2362d3Smrg func_stripname -l '' "$i" 7730de2362d3Smrg name=$func_stripname_result 7731de2362d3Smrg $opt_dry_run || $RM conftest 7732de2362d3Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733de2362d3Smrg ldd_output=`ldd conftest` 77347821949aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735de2362d3Smrg case " $predeps $postdeps " in 7736de2362d3Smrg *" $i "*) 7737de2362d3Smrg func_append newdeplibs " $i" 77387821949aSmrg i="" 7739de2362d3Smrg ;; 7740de2362d3Smrg esac 7741de2362d3Smrg fi 77427821949aSmrg if test -n "$i" ; then 7743de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7744de2362d3Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745de2362d3Smrg set dummy $deplib_matches; shift 7746de2362d3Smrg deplib_match=$1 77477821949aSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7748de2362d3Smrg func_append newdeplibs " $i" 7749de2362d3Smrg else 7750de2362d3Smrg droppeddeps=yes 7751de2362d3Smrg echo 7752de2362d3Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7753de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 7754de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 7755de2362d3Smrg echo "*** shared version of the library, which you do not appear to have" 7756de2362d3Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 7757de2362d3Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758de2362d3Smrg fi 7759de2362d3Smrg fi 7760de2362d3Smrg else 7761de2362d3Smrg droppeddeps=yes 7762de2362d3Smrg echo 7763de2362d3Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7764de2362d3Smrg echo "*** make it link in! You will probably need to install it or some" 7765de2362d3Smrg echo "*** library that it depends on before this library will be fully" 7766de2362d3Smrg echo "*** functional. Installing it before continuing would be even better." 7767de2362d3Smrg fi 7768de2362d3Smrg ;; 7769de2362d3Smrg *) 7770de2362d3Smrg func_append newdeplibs " $i" 7771de2362d3Smrg ;; 7772de2362d3Smrg esac 7773de2362d3Smrg done 7774de2362d3Smrg fi 7775de2362d3Smrg ;; 7776de2362d3Smrg file_magic*) 7777de2362d3Smrg set dummy $deplibs_check_method; shift 7778de2362d3Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779de2362d3Smrg for a_deplib in $deplibs; do 7780de2362d3Smrg case $a_deplib in 7781de2362d3Smrg -l*) 7782de2362d3Smrg func_stripname -l '' "$a_deplib" 7783de2362d3Smrg name=$func_stripname_result 77847821949aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785de2362d3Smrg case " $predeps $postdeps " in 7786de2362d3Smrg *" $a_deplib "*) 7787de2362d3Smrg func_append newdeplibs " $a_deplib" 77887821949aSmrg a_deplib="" 7789de2362d3Smrg ;; 7790de2362d3Smrg esac 7791de2362d3Smrg fi 77927821949aSmrg if test -n "$a_deplib" ; then 7793de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7794de2362d3Smrg if test -n "$file_magic_glob"; then 7795de2362d3Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7796de2362d3Smrg else 7797de2362d3Smrg libnameglob=$libname 7798de2362d3Smrg fi 77997821949aSmrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800de2362d3Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78017821949aSmrg if test "$want_nocaseglob" = yes; then 7802de2362d3Smrg shopt -s nocaseglob 7803de2362d3Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7804de2362d3Smrg $nocaseglob 7805de2362d3Smrg else 7806de2362d3Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7807de2362d3Smrg fi 7808de2362d3Smrg for potent_lib in $potential_libs; do 7809de2362d3Smrg # Follow soft links. 7810de2362d3Smrg if ls -lLd "$potent_lib" 2>/dev/null | 7811de2362d3Smrg $GREP " -> " >/dev/null; then 7812de2362d3Smrg continue 7813de2362d3Smrg fi 7814de2362d3Smrg # The statement above tries to avoid entering an 7815de2362d3Smrg # endless loop below, in case of cyclic links. 7816de2362d3Smrg # We might still enter an endless loop, since a link 7817de2362d3Smrg # loop can be closed while we follow links, 7818de2362d3Smrg # but so what? 78197821949aSmrg potlib="$potent_lib" 7820de2362d3Smrg while test -h "$potlib" 2>/dev/null; do 78217821949aSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822de2362d3Smrg case $potliblink in 78237821949aSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 78247821949aSmrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825de2362d3Smrg esac 7826de2362d3Smrg done 7827de2362d3Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828de2362d3Smrg $SED -e 10q | 7829de2362d3Smrg $EGREP "$file_magic_regex" > /dev/null; then 7830de2362d3Smrg func_append newdeplibs " $a_deplib" 78317821949aSmrg a_deplib="" 7832de2362d3Smrg break 2 7833de2362d3Smrg fi 7834de2362d3Smrg done 7835de2362d3Smrg done 7836de2362d3Smrg fi 78377821949aSmrg if test -n "$a_deplib" ; then 7838de2362d3Smrg droppeddeps=yes 7839de2362d3Smrg echo 7840de2362d3Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7841de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 7842de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 7843de2362d3Smrg echo "*** shared version of the library, which you do not appear to have" 7844de2362d3Smrg echo "*** because I did check the linker path looking for a file starting" 78457821949aSmrg if test -z "$potlib" ; then 7846de2362d3Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847de2362d3Smrg else 7848de2362d3Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7849de2362d3Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 7850de2362d3Smrg fi 7851de2362d3Smrg fi 7852de2362d3Smrg ;; 7853de2362d3Smrg *) 7854de2362d3Smrg # Add a -L argument. 7855de2362d3Smrg func_append newdeplibs " $a_deplib" 7856de2362d3Smrg ;; 7857de2362d3Smrg esac 7858de2362d3Smrg done # Gone through all deplibs. 7859de2362d3Smrg ;; 7860de2362d3Smrg match_pattern*) 7861de2362d3Smrg set dummy $deplibs_check_method; shift 7862de2362d3Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863de2362d3Smrg for a_deplib in $deplibs; do 7864de2362d3Smrg case $a_deplib in 7865de2362d3Smrg -l*) 7866de2362d3Smrg func_stripname -l '' "$a_deplib" 7867de2362d3Smrg name=$func_stripname_result 78687821949aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869de2362d3Smrg case " $predeps $postdeps " in 7870de2362d3Smrg *" $a_deplib "*) 7871de2362d3Smrg func_append newdeplibs " $a_deplib" 78727821949aSmrg a_deplib="" 7873de2362d3Smrg ;; 7874de2362d3Smrg esac 7875de2362d3Smrg fi 78767821949aSmrg if test -n "$a_deplib" ; then 7877de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7878de2362d3Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879de2362d3Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880de2362d3Smrg for potent_lib in $potential_libs; do 78817821949aSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 7882de2362d3Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883de2362d3Smrg $EGREP "$match_pattern_regex" > /dev/null; then 7884de2362d3Smrg func_append newdeplibs " $a_deplib" 78857821949aSmrg a_deplib="" 7886de2362d3Smrg break 2 7887de2362d3Smrg fi 7888de2362d3Smrg done 7889de2362d3Smrg done 7890de2362d3Smrg fi 78917821949aSmrg if test -n "$a_deplib" ; then 7892de2362d3Smrg droppeddeps=yes 7893de2362d3Smrg echo 7894de2362d3Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7895de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 7896de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 7897de2362d3Smrg echo "*** shared version of the library, which you do not appear to have" 7898de2362d3Smrg echo "*** because I did check the linker path looking for a file starting" 78997821949aSmrg if test -z "$potlib" ; then 7900de2362d3Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901de2362d3Smrg else 7902de2362d3Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7903de2362d3Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904de2362d3Smrg fi 7905de2362d3Smrg fi 7906de2362d3Smrg ;; 7907de2362d3Smrg *) 7908de2362d3Smrg # Add a -L argument. 7909de2362d3Smrg func_append newdeplibs " $a_deplib" 7910de2362d3Smrg ;; 7911de2362d3Smrg esac 7912de2362d3Smrg done # Gone through all deplibs. 7913de2362d3Smrg ;; 7914de2362d3Smrg none | unknown | *) 79157821949aSmrg newdeplibs="" 7916de2362d3Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 79177821949aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 79187821949aSmrg for i in $predeps $postdeps ; do 7919de2362d3Smrg # can't use Xsed below, because $i might contain '/' 79207821949aSmrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921de2362d3Smrg done 7922de2362d3Smrg fi 7923de2362d3Smrg case $tmp_deplibs in 7924de2362d3Smrg *[!\ \ ]*) 7925de2362d3Smrg echo 79267821949aSmrg if test "X$deplibs_check_method" = "Xnone"; then 7927de2362d3Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7928de2362d3Smrg else 7929de2362d3Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 7930de2362d3Smrg fi 7931de2362d3Smrg echo "*** All declared inter-library dependencies are being dropped." 7932de2362d3Smrg droppeddeps=yes 7933de2362d3Smrg ;; 7934de2362d3Smrg esac 7935de2362d3Smrg ;; 7936de2362d3Smrg esac 7937de2362d3Smrg versuffix=$versuffix_save 7938de2362d3Smrg major=$major_save 7939de2362d3Smrg release=$release_save 7940de2362d3Smrg libname=$libname_save 7941de2362d3Smrg name=$name_save 7942de2362d3Smrg 7943de2362d3Smrg case $host in 7944de2362d3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7945de2362d3Smrg # On Rhapsody replace the C library with the System framework 7946de2362d3Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947de2362d3Smrg ;; 7948de2362d3Smrg esac 7949de2362d3Smrg 79507821949aSmrg if test "$droppeddeps" = yes; then 79517821949aSmrg if test "$module" = yes; then 7952de2362d3Smrg echo 7953de2362d3Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7954de2362d3Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7955de2362d3Smrg echo "*** a static module, that should work as long as the dlopening" 7956de2362d3Smrg echo "*** application is linked with the -dlopen flag." 7957de2362d3Smrg if test -z "$global_symbol_pipe"; then 7958de2362d3Smrg echo 7959de2362d3Smrg echo "*** However, this would only work if libtool was able to extract symbol" 79607821949aSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7961de2362d3Smrg echo "*** not find such a program. So, this module is probably useless." 79627821949aSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963de2362d3Smrg fi 79647821949aSmrg if test "$build_old_libs" = no; then 79657821949aSmrg oldlibs="$output_objdir/$libname.$libext" 7966de2362d3Smrg build_libtool_libs=module 7967de2362d3Smrg build_old_libs=yes 7968de2362d3Smrg else 7969de2362d3Smrg build_libtool_libs=no 7970de2362d3Smrg fi 7971de2362d3Smrg else 7972de2362d3Smrg echo "*** The inter-library dependencies that have been dropped here will be" 7973de2362d3Smrg echo "*** automatically added whenever a program is linked with this library" 7974de2362d3Smrg echo "*** or is declared to -dlopen it." 7975de2362d3Smrg 79767821949aSmrg if test "$allow_undefined" = no; then 7977de2362d3Smrg echo 7978de2362d3Smrg echo "*** Since this library must not contain undefined symbols," 7979de2362d3Smrg echo "*** because either the platform does not support them or" 7980de2362d3Smrg echo "*** it was explicitly requested with -no-undefined," 7981de2362d3Smrg echo "*** libtool will only create a static version of it." 79827821949aSmrg if test "$build_old_libs" = no; then 79837821949aSmrg oldlibs="$output_objdir/$libname.$libext" 7984de2362d3Smrg build_libtool_libs=module 7985de2362d3Smrg build_old_libs=yes 7986de2362d3Smrg else 7987de2362d3Smrg build_libtool_libs=no 7988de2362d3Smrg fi 7989de2362d3Smrg fi 7990de2362d3Smrg fi 7991de2362d3Smrg fi 7992de2362d3Smrg # Done checking deplibs! 7993de2362d3Smrg deplibs=$newdeplibs 7994de2362d3Smrg fi 7995de2362d3Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996de2362d3Smrg case $host in 7997de2362d3Smrg *-*-darwin*) 7998de2362d3Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7999de2362d3Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8000de2362d3Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001de2362d3Smrg ;; 8002de2362d3Smrg esac 8003de2362d3Smrg 8004de2362d3Smrg # move library search paths that coincide with paths to not yet 8005de2362d3Smrg # installed libraries to the beginning of the library search list 8006de2362d3Smrg new_libs= 8007de2362d3Smrg for path in $notinst_path; do 8008de2362d3Smrg case " $new_libs " in 8009de2362d3Smrg *" -L$path/$objdir "*) ;; 8010de2362d3Smrg *) 8011de2362d3Smrg case " $deplibs " in 8012de2362d3Smrg *" -L$path/$objdir "*) 8013de2362d3Smrg func_append new_libs " -L$path/$objdir" ;; 8014de2362d3Smrg esac 8015de2362d3Smrg ;; 8016de2362d3Smrg esac 8017de2362d3Smrg done 8018de2362d3Smrg for deplib in $deplibs; do 8019de2362d3Smrg case $deplib in 8020de2362d3Smrg -L*) 8021de2362d3Smrg case " $new_libs " in 8022de2362d3Smrg *" $deplib "*) ;; 8023de2362d3Smrg *) func_append new_libs " $deplib" ;; 8024de2362d3Smrg esac 8025de2362d3Smrg ;; 8026de2362d3Smrg *) func_append new_libs " $deplib" ;; 8027de2362d3Smrg esac 8028de2362d3Smrg done 80297821949aSmrg deplibs="$new_libs" 8030de2362d3Smrg 8031de2362d3Smrg # All the library-specific variables (install_libdir is set above). 8032de2362d3Smrg library_names= 8033de2362d3Smrg old_library= 8034de2362d3Smrg dlname= 8035de2362d3Smrg 8036de2362d3Smrg # Test again, we may have decided not to build it any more 80377821949aSmrg if test "$build_libtool_libs" = yes; then 80387821949aSmrg # Remove ${wl} instances when linking with ld. 8039de2362d3Smrg # FIXME: should test the right _cmds variable. 8040de2362d3Smrg case $archive_cmds in 8041de2362d3Smrg *\$LD\ *) wl= ;; 8042de2362d3Smrg esac 80437821949aSmrg if test "$hardcode_into_libs" = yes; then 8044de2362d3Smrg # Hardcode the library paths 8045de2362d3Smrg hardcode_libdirs= 8046de2362d3Smrg dep_rpath= 80477821949aSmrg rpath="$finalize_rpath" 80487821949aSmrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049de2362d3Smrg for libdir in $rpath; do 8050de2362d3Smrg if test -n "$hardcode_libdir_flag_spec"; then 8051de2362d3Smrg if test -n "$hardcode_libdir_separator"; then 8052de2362d3Smrg func_replace_sysroot "$libdir" 8053de2362d3Smrg libdir=$func_replace_sysroot_result 8054de2362d3Smrg if test -z "$hardcode_libdirs"; then 80557821949aSmrg hardcode_libdirs="$libdir" 8056de2362d3Smrg else 8057de2362d3Smrg # Just accumulate the unique libdirs. 8058de2362d3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059de2362d3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060de2362d3Smrg ;; 8061de2362d3Smrg *) 8062de2362d3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063de2362d3Smrg ;; 8064de2362d3Smrg esac 8065de2362d3Smrg fi 8066de2362d3Smrg else 8067de2362d3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8068de2362d3Smrg func_append dep_rpath " $flag" 8069de2362d3Smrg fi 8070de2362d3Smrg elif test -n "$runpath_var"; then 8071de2362d3Smrg case "$perm_rpath " in 8072de2362d3Smrg *" $libdir "*) ;; 8073de2362d3Smrg *) func_append perm_rpath " $libdir" ;; 8074de2362d3Smrg esac 8075de2362d3Smrg fi 8076de2362d3Smrg done 8077de2362d3Smrg # Substitute the hardcoded libdirs into the rpath. 8078de2362d3Smrg if test -n "$hardcode_libdir_separator" && 8079de2362d3Smrg test -n "$hardcode_libdirs"; then 80807821949aSmrg libdir="$hardcode_libdirs" 8081de2362d3Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082de2362d3Smrg fi 8083de2362d3Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084de2362d3Smrg # We should set the runpath_var. 8085de2362d3Smrg rpath= 8086de2362d3Smrg for dir in $perm_rpath; do 8087de2362d3Smrg func_append rpath "$dir:" 8088de2362d3Smrg done 8089de2362d3Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090de2362d3Smrg fi 8091de2362d3Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092de2362d3Smrg fi 8093de2362d3Smrg 80947821949aSmrg shlibpath="$finalize_shlibpath" 80957821949aSmrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096de2362d3Smrg if test -n "$shlibpath"; then 8097de2362d3Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098de2362d3Smrg fi 8099de2362d3Smrg 8100de2362d3Smrg # Get the real and link names of the library. 8101de2362d3Smrg eval shared_ext=\"$shrext_cmds\" 8102de2362d3Smrg eval library_names=\"$library_names_spec\" 8103de2362d3Smrg set dummy $library_names 8104de2362d3Smrg shift 81057821949aSmrg realname="$1" 8106de2362d3Smrg shift 8107de2362d3Smrg 8108de2362d3Smrg if test -n "$soname_spec"; then 8109de2362d3Smrg eval soname=\"$soname_spec\" 8110de2362d3Smrg else 81117821949aSmrg soname="$realname" 8112de2362d3Smrg fi 8113de2362d3Smrg if test -z "$dlname"; then 8114de2362d3Smrg dlname=$soname 8115de2362d3Smrg fi 8116de2362d3Smrg 81177821949aSmrg lib="$output_objdir/$realname" 8118de2362d3Smrg linknames= 8119de2362d3Smrg for link 8120de2362d3Smrg do 8121de2362d3Smrg func_append linknames " $link" 8122de2362d3Smrg done 8123de2362d3Smrg 8124de2362d3Smrg # Use standard objects if they are pic 8125de2362d3Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126de2362d3Smrg test "X$libobjs" = "X " && libobjs= 8127de2362d3Smrg 8128de2362d3Smrg delfiles= 8129de2362d3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130de2362d3Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 81317821949aSmrg export_symbols="$output_objdir/$libname.uexp" 8132de2362d3Smrg func_append delfiles " $export_symbols" 8133de2362d3Smrg fi 8134de2362d3Smrg 8135de2362d3Smrg orig_export_symbols= 8136de2362d3Smrg case $host_os in 8137de2362d3Smrg cygwin* | mingw* | cegcc*) 8138de2362d3Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139de2362d3Smrg # exporting using user supplied symfile 81407821949aSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141de2362d3Smrg # and it's NOT already a .def file. Must figure out 8142de2362d3Smrg # which of the given symbols are data symbols and tag 8143de2362d3Smrg # them as such. So, trigger use of export_symbols_cmds. 8144de2362d3Smrg # export_symbols gets reassigned inside the "prepare 8145de2362d3Smrg # the list of exported symbols" if statement, so the 8146de2362d3Smrg # include_expsyms logic still works. 81477821949aSmrg orig_export_symbols="$export_symbols" 8148de2362d3Smrg export_symbols= 8149de2362d3Smrg always_export_symbols=yes 81507821949aSmrg fi 8151de2362d3Smrg fi 8152de2362d3Smrg ;; 8153de2362d3Smrg esac 8154de2362d3Smrg 8155de2362d3Smrg # Prepare the list of exported symbols 8156de2362d3Smrg if test -z "$export_symbols"; then 81577821949aSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 81587821949aSmrg func_verbose "generating symbol list for \`$libname.la'" 81597821949aSmrg export_symbols="$output_objdir/$libname.exp" 8160de2362d3Smrg $opt_dry_run || $RM $export_symbols 8161de2362d3Smrg cmds=$export_symbols_cmds 81627821949aSmrg save_ifs="$IFS"; IFS='~' 8163de2362d3Smrg for cmd1 in $cmds; do 81647821949aSmrg IFS="$save_ifs" 8165de2362d3Smrg # Take the normal branch if the nm_file_list_spec branch 8166de2362d3Smrg # doesn't work or if tool conversion is not needed. 8167de2362d3Smrg case $nm_file_list_spec~$to_tool_file_cmd in 8168de2362d3Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8169de2362d3Smrg try_normal_branch=yes 8170de2362d3Smrg eval cmd=\"$cmd1\" 8171de2362d3Smrg func_len " $cmd" 8172de2362d3Smrg len=$func_len_result 8173de2362d3Smrg ;; 8174de2362d3Smrg *) 8175de2362d3Smrg try_normal_branch=no 8176de2362d3Smrg ;; 8177de2362d3Smrg esac 81787821949aSmrg if test "$try_normal_branch" = yes \ 8179de2362d3Smrg && { test "$len" -lt "$max_cmd_len" \ 8180de2362d3Smrg || test "$max_cmd_len" -le -1; } 8181de2362d3Smrg then 8182de2362d3Smrg func_show_eval "$cmd" 'exit $?' 8183de2362d3Smrg skipped_export=false 8184de2362d3Smrg elif test -n "$nm_file_list_spec"; then 8185de2362d3Smrg func_basename "$output" 8186de2362d3Smrg output_la=$func_basename_result 8187de2362d3Smrg save_libobjs=$libobjs 8188de2362d3Smrg save_output=$output 81897821949aSmrg output=${output_objdir}/${output_la}.nm 8190de2362d3Smrg func_to_tool_file "$output" 8191de2362d3Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 8192de2362d3Smrg func_append delfiles " $output" 8193de2362d3Smrg func_verbose "creating $NM input file list: $output" 8194de2362d3Smrg for obj in $save_libobjs; do 8195de2362d3Smrg func_to_tool_file "$obj" 8196de2362d3Smrg $ECHO "$func_to_tool_file_result" 8197de2362d3Smrg done > "$output" 8198de2362d3Smrg eval cmd=\"$cmd1\" 8199de2362d3Smrg func_show_eval "$cmd" 'exit $?' 8200de2362d3Smrg output=$save_output 8201de2362d3Smrg libobjs=$save_libobjs 8202de2362d3Smrg skipped_export=false 8203de2362d3Smrg else 8204de2362d3Smrg # The command line is too long to execute in one step. 8205de2362d3Smrg func_verbose "using reloadable object file for export list..." 8206de2362d3Smrg skipped_export=: 8207de2362d3Smrg # Break out early, otherwise skipped_export may be 8208de2362d3Smrg # set to false by a later but shorter cmd. 8209de2362d3Smrg break 8210de2362d3Smrg fi 8211de2362d3Smrg done 82127821949aSmrg IFS="$save_ifs" 82137821949aSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214de2362d3Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215de2362d3Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216de2362d3Smrg fi 8217de2362d3Smrg fi 8218de2362d3Smrg fi 8219de2362d3Smrg 8220de2362d3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 82217821949aSmrg tmp_export_symbols="$export_symbols" 82227821949aSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8223de2362d3Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224de2362d3Smrg fi 8225de2362d3Smrg 82267821949aSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227de2362d3Smrg # The given exports_symbols file has to be filtered, so filter it. 82287821949aSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229de2362d3Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 82307821949aSmrg # 's' commands which not all seds can handle. GNU sed should be fine 8231de2362d3Smrg # though. Also, the filter scales superlinearly with the number of 8232de2362d3Smrg # global variables. join(1) would be nice here, but unfortunately 8233de2362d3Smrg # isn't a blessed tool. 8234de2362d3Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8235de2362d3Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236de2362d3Smrg export_symbols=$output_objdir/$libname.def 8237de2362d3Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238de2362d3Smrg fi 8239de2362d3Smrg 8240de2362d3Smrg tmp_deplibs= 8241de2362d3Smrg for test_deplib in $deplibs; do 8242de2362d3Smrg case " $convenience " in 8243de2362d3Smrg *" $test_deplib "*) ;; 8244de2362d3Smrg *) 8245de2362d3Smrg func_append tmp_deplibs " $test_deplib" 8246de2362d3Smrg ;; 8247de2362d3Smrg esac 8248de2362d3Smrg done 82497821949aSmrg deplibs="$tmp_deplibs" 8250de2362d3Smrg 8251de2362d3Smrg if test -n "$convenience"; then 8252de2362d3Smrg if test -n "$whole_archive_flag_spec" && 82537821949aSmrg test "$compiler_needs_object" = yes && 8254de2362d3Smrg test -z "$libobjs"; then 8255de2362d3Smrg # extract the archives, so we have objects to list. 8256de2362d3Smrg # TODO: could optimize this to just extract one archive. 8257de2362d3Smrg whole_archive_flag_spec= 8258de2362d3Smrg fi 8259de2362d3Smrg if test -n "$whole_archive_flag_spec"; then 8260de2362d3Smrg save_libobjs=$libobjs 8261de2362d3Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262de2362d3Smrg test "X$libobjs" = "X " && libobjs= 8263de2362d3Smrg else 82647821949aSmrg gentop="$output_objdir/${outputname}x" 8265de2362d3Smrg func_append generated " $gentop" 8266de2362d3Smrg 8267de2362d3Smrg func_extract_archives $gentop $convenience 8268de2362d3Smrg func_append libobjs " $func_extract_archives_result" 8269de2362d3Smrg test "X$libobjs" = "X " && libobjs= 8270de2362d3Smrg fi 8271de2362d3Smrg fi 8272de2362d3Smrg 82737821949aSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274de2362d3Smrg eval flag=\"$thread_safe_flag_spec\" 8275de2362d3Smrg func_append linker_flags " $flag" 8276de2362d3Smrg fi 8277de2362d3Smrg 8278de2362d3Smrg # Make a backup of the uninstalled library when relinking 82797821949aSmrg if test "$opt_mode" = relink; then 8280de2362d3Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281de2362d3Smrg fi 8282de2362d3Smrg 8283de2362d3Smrg # Do each of the archive commands. 82847821949aSmrg if test "$module" = yes && test -n "$module_cmds" ; then 8285de2362d3Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286de2362d3Smrg eval test_cmds=\"$module_expsym_cmds\" 8287de2362d3Smrg cmds=$module_expsym_cmds 8288de2362d3Smrg else 8289de2362d3Smrg eval test_cmds=\"$module_cmds\" 8290de2362d3Smrg cmds=$module_cmds 8291de2362d3Smrg fi 8292de2362d3Smrg else 8293de2362d3Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294de2362d3Smrg eval test_cmds=\"$archive_expsym_cmds\" 8295de2362d3Smrg cmds=$archive_expsym_cmds 8296de2362d3Smrg else 8297de2362d3Smrg eval test_cmds=\"$archive_cmds\" 8298de2362d3Smrg cmds=$archive_cmds 8299de2362d3Smrg fi 8300de2362d3Smrg fi 8301de2362d3Smrg 83027821949aSmrg if test "X$skipped_export" != "X:" && 8303de2362d3Smrg func_len " $test_cmds" && 8304de2362d3Smrg len=$func_len_result && 8305de2362d3Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306de2362d3Smrg : 8307de2362d3Smrg else 8308de2362d3Smrg # The command line is too long to link in one step, link piecewise 8309de2362d3Smrg # or, if using GNU ld and skipped_export is not :, use a linker 8310de2362d3Smrg # script. 8311de2362d3Smrg 8312de2362d3Smrg # Save the value of $output and $libobjs because we want to 8313de2362d3Smrg # use them later. If we have whole_archive_flag_spec, we 8314de2362d3Smrg # want to use save_libobjs as it was before 8315de2362d3Smrg # whole_archive_flag_spec was expanded, because we can't 8316de2362d3Smrg # assume the linker understands whole_archive_flag_spec. 8317de2362d3Smrg # This may have to be revisited, in case too many 8318de2362d3Smrg # convenience libraries get linked in and end up exceeding 8319de2362d3Smrg # the spec. 8320de2362d3Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321de2362d3Smrg save_libobjs=$libobjs 8322de2362d3Smrg fi 8323de2362d3Smrg save_output=$output 8324de2362d3Smrg func_basename "$output" 8325de2362d3Smrg output_la=$func_basename_result 8326de2362d3Smrg 8327de2362d3Smrg # Clear the reloadable object creation command queue and 8328de2362d3Smrg # initialize k to one. 8329de2362d3Smrg test_cmds= 8330de2362d3Smrg concat_cmds= 8331de2362d3Smrg objlist= 8332de2362d3Smrg last_robj= 8333de2362d3Smrg k=1 8334de2362d3Smrg 83357821949aSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 83367821949aSmrg output=${output_objdir}/${output_la}.lnkscript 8337de2362d3Smrg func_verbose "creating GNU ld script: $output" 8338de2362d3Smrg echo 'INPUT (' > $output 8339de2362d3Smrg for obj in $save_libobjs 8340de2362d3Smrg do 8341de2362d3Smrg func_to_tool_file "$obj" 8342de2362d3Smrg $ECHO "$func_to_tool_file_result" >> $output 8343de2362d3Smrg done 8344de2362d3Smrg echo ')' >> $output 8345de2362d3Smrg func_append delfiles " $output" 8346de2362d3Smrg func_to_tool_file "$output" 8347de2362d3Smrg output=$func_to_tool_file_result 83487821949aSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 83497821949aSmrg output=${output_objdir}/${output_la}.lnk 8350de2362d3Smrg func_verbose "creating linker input file list: $output" 8351de2362d3Smrg : > $output 8352de2362d3Smrg set x $save_libobjs 8353de2362d3Smrg shift 8354de2362d3Smrg firstobj= 83557821949aSmrg if test "$compiler_needs_object" = yes; then 8356de2362d3Smrg firstobj="$1 " 8357de2362d3Smrg shift 8358de2362d3Smrg fi 8359de2362d3Smrg for obj 8360de2362d3Smrg do 8361de2362d3Smrg func_to_tool_file "$obj" 8362de2362d3Smrg $ECHO "$func_to_tool_file_result" >> $output 8363de2362d3Smrg done 8364de2362d3Smrg func_append delfiles " $output" 8365de2362d3Smrg func_to_tool_file "$output" 8366de2362d3Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367de2362d3Smrg else 8368de2362d3Smrg if test -n "$save_libobjs"; then 8369de2362d3Smrg func_verbose "creating reloadable object files..." 83707821949aSmrg output=$output_objdir/$output_la-${k}.$objext 8371de2362d3Smrg eval test_cmds=\"$reload_cmds\" 8372de2362d3Smrg func_len " $test_cmds" 8373de2362d3Smrg len0=$func_len_result 8374de2362d3Smrg len=$len0 8375de2362d3Smrg 8376de2362d3Smrg # Loop over the list of objects to be linked. 8377de2362d3Smrg for obj in $save_libobjs 8378de2362d3Smrg do 8379de2362d3Smrg func_len " $obj" 8380de2362d3Smrg func_arith $len + $func_len_result 8381de2362d3Smrg len=$func_arith_result 83827821949aSmrg if test "X$objlist" = X || 8383de2362d3Smrg test "$len" -lt "$max_cmd_len"; then 8384de2362d3Smrg func_append objlist " $obj" 8385de2362d3Smrg else 8386de2362d3Smrg # The command $test_cmds is almost too long, add a 8387de2362d3Smrg # command to the queue. 83887821949aSmrg if test "$k" -eq 1 ; then 8389de2362d3Smrg # The first file doesn't have a previous command to add. 8390de2362d3Smrg reload_objs=$objlist 8391de2362d3Smrg eval concat_cmds=\"$reload_cmds\" 8392de2362d3Smrg else 8393de2362d3Smrg # All subsequent reloadable object files will link in 8394de2362d3Smrg # the last one created. 8395de2362d3Smrg reload_objs="$objlist $last_robj" 8396de2362d3Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397de2362d3Smrg fi 83987821949aSmrg last_robj=$output_objdir/$output_la-${k}.$objext 8399de2362d3Smrg func_arith $k + 1 8400de2362d3Smrg k=$func_arith_result 84017821949aSmrg output=$output_objdir/$output_la-${k}.$objext 8402de2362d3Smrg objlist=" $obj" 8403de2362d3Smrg func_len " $last_robj" 8404de2362d3Smrg func_arith $len0 + $func_len_result 8405de2362d3Smrg len=$func_arith_result 8406de2362d3Smrg fi 8407de2362d3Smrg done 8408de2362d3Smrg # Handle the remaining objects by creating one last 8409de2362d3Smrg # reloadable object file. All subsequent reloadable object 8410de2362d3Smrg # files will link in the last one created. 8411de2362d3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8412de2362d3Smrg reload_objs="$objlist $last_robj" 84137821949aSmrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414de2362d3Smrg if test -n "$last_robj"; then 84157821949aSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416de2362d3Smrg fi 8417de2362d3Smrg func_append delfiles " $output" 8418de2362d3Smrg 8419de2362d3Smrg else 8420de2362d3Smrg output= 8421de2362d3Smrg fi 8422de2362d3Smrg 84237821949aSmrg if ${skipped_export-false}; then 84247821949aSmrg func_verbose "generating symbol list for \`$libname.la'" 84257821949aSmrg export_symbols="$output_objdir/$libname.exp" 8426de2362d3Smrg $opt_dry_run || $RM $export_symbols 8427de2362d3Smrg libobjs=$output 8428de2362d3Smrg # Append the command to create the export file. 8429de2362d3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430de2362d3Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431de2362d3Smrg if test -n "$last_robj"; then 8432de2362d3Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433de2362d3Smrg fi 84347821949aSmrg fi 8435de2362d3Smrg 8436de2362d3Smrg test -n "$save_libobjs" && 8437de2362d3Smrg func_verbose "creating a temporary reloadable object file: $output" 8438de2362d3Smrg 8439de2362d3Smrg # Loop through the commands generated above and execute them. 84407821949aSmrg save_ifs="$IFS"; IFS='~' 8441de2362d3Smrg for cmd in $concat_cmds; do 84427821949aSmrg IFS="$save_ifs" 84437821949aSmrg $opt_silent || { 8444de2362d3Smrg func_quote_for_expand "$cmd" 8445de2362d3Smrg eval "func_echo $func_quote_for_expand_result" 8446de2362d3Smrg } 8447de2362d3Smrg $opt_dry_run || eval "$cmd" || { 8448de2362d3Smrg lt_exit=$? 8449de2362d3Smrg 8450de2362d3Smrg # Restore the uninstalled library and exit 84517821949aSmrg if test "$opt_mode" = relink; then 8452de2362d3Smrg ( cd "$output_objdir" && \ 8453de2362d3Smrg $RM "${realname}T" && \ 8454de2362d3Smrg $MV "${realname}U" "$realname" ) 8455de2362d3Smrg fi 8456de2362d3Smrg 8457de2362d3Smrg exit $lt_exit 8458de2362d3Smrg } 8459de2362d3Smrg done 84607821949aSmrg IFS="$save_ifs" 8461de2362d3Smrg 8462de2362d3Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463de2362d3Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464de2362d3Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8465de2362d3Smrg fi 8466de2362d3Smrg fi 8467de2362d3Smrg 84687821949aSmrg if ${skipped_export-false}; then 8469de2362d3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 84707821949aSmrg tmp_export_symbols="$export_symbols" 84717821949aSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8472de2362d3Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473de2362d3Smrg fi 8474de2362d3Smrg 8475de2362d3Smrg if test -n "$orig_export_symbols"; then 8476de2362d3Smrg # The given exports_symbols file has to be filtered, so filter it. 84777821949aSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478de2362d3Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 84797821949aSmrg # 's' commands which not all seds can handle. GNU sed should be fine 8480de2362d3Smrg # though. Also, the filter scales superlinearly with the number of 8481de2362d3Smrg # global variables. join(1) would be nice here, but unfortunately 8482de2362d3Smrg # isn't a blessed tool. 8483de2362d3Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8484de2362d3Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485de2362d3Smrg export_symbols=$output_objdir/$libname.def 8486de2362d3Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487de2362d3Smrg fi 84887821949aSmrg fi 8489de2362d3Smrg 8490de2362d3Smrg libobjs=$output 8491de2362d3Smrg # Restore the value of output. 8492de2362d3Smrg output=$save_output 8493de2362d3Smrg 8494de2362d3Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495de2362d3Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496de2362d3Smrg test "X$libobjs" = "X " && libobjs= 8497de2362d3Smrg fi 8498de2362d3Smrg # Expand the library linking commands again to reset the 8499de2362d3Smrg # value of $libobjs for piecewise linking. 8500de2362d3Smrg 8501de2362d3Smrg # Do each of the archive commands. 85027821949aSmrg if test "$module" = yes && test -n "$module_cmds" ; then 8503de2362d3Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504de2362d3Smrg cmds=$module_expsym_cmds 8505de2362d3Smrg else 8506de2362d3Smrg cmds=$module_cmds 8507de2362d3Smrg fi 8508de2362d3Smrg else 8509de2362d3Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510de2362d3Smrg cmds=$archive_expsym_cmds 8511de2362d3Smrg else 8512de2362d3Smrg cmds=$archive_cmds 8513de2362d3Smrg fi 8514de2362d3Smrg fi 8515de2362d3Smrg fi 8516de2362d3Smrg 8517de2362d3Smrg if test -n "$delfiles"; then 8518de2362d3Smrg # Append the command to remove temporary files to $cmds. 8519de2362d3Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 8520de2362d3Smrg fi 8521de2362d3Smrg 8522de2362d3Smrg # Add any objects from preloaded convenience libraries 8523de2362d3Smrg if test -n "$dlprefiles"; then 85247821949aSmrg gentop="$output_objdir/${outputname}x" 8525de2362d3Smrg func_append generated " $gentop" 8526de2362d3Smrg 8527de2362d3Smrg func_extract_archives $gentop $dlprefiles 8528de2362d3Smrg func_append libobjs " $func_extract_archives_result" 8529de2362d3Smrg test "X$libobjs" = "X " && libobjs= 8530de2362d3Smrg fi 8531de2362d3Smrg 85327821949aSmrg save_ifs="$IFS"; IFS='~' 8533de2362d3Smrg for cmd in $cmds; do 85347821949aSmrg IFS="$save_ifs" 8535de2362d3Smrg eval cmd=\"$cmd\" 85367821949aSmrg $opt_silent || { 8537de2362d3Smrg func_quote_for_expand "$cmd" 8538de2362d3Smrg eval "func_echo $func_quote_for_expand_result" 8539de2362d3Smrg } 8540de2362d3Smrg $opt_dry_run || eval "$cmd" || { 8541de2362d3Smrg lt_exit=$? 8542de2362d3Smrg 8543de2362d3Smrg # Restore the uninstalled library and exit 85447821949aSmrg if test "$opt_mode" = relink; then 8545de2362d3Smrg ( cd "$output_objdir" && \ 8546de2362d3Smrg $RM "${realname}T" && \ 8547de2362d3Smrg $MV "${realname}U" "$realname" ) 8548de2362d3Smrg fi 8549de2362d3Smrg 8550de2362d3Smrg exit $lt_exit 8551de2362d3Smrg } 8552de2362d3Smrg done 85537821949aSmrg IFS="$save_ifs" 8554de2362d3Smrg 8555de2362d3Smrg # Restore the uninstalled library and exit 85567821949aSmrg if test "$opt_mode" = relink; then 8557de2362d3Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558de2362d3Smrg 8559de2362d3Smrg if test -n "$convenience"; then 8560de2362d3Smrg if test -z "$whole_archive_flag_spec"; then 8561de2362d3Smrg func_show_eval '${RM}r "$gentop"' 8562de2362d3Smrg fi 8563de2362d3Smrg fi 8564de2362d3Smrg 8565de2362d3Smrg exit $EXIT_SUCCESS 8566de2362d3Smrg fi 8567de2362d3Smrg 8568de2362d3Smrg # Create links to the real library. 8569de2362d3Smrg for linkname in $linknames; do 8570de2362d3Smrg if test "$realname" != "$linkname"; then 8571de2362d3Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8572de2362d3Smrg fi 8573de2362d3Smrg done 8574de2362d3Smrg 8575de2362d3Smrg # If -module or -export-dynamic was specified, set the dlname. 85767821949aSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 8577de2362d3Smrg # On all known operating systems, these are identical. 85787821949aSmrg dlname="$soname" 8579de2362d3Smrg fi 8580de2362d3Smrg fi 8581de2362d3Smrg ;; 8582de2362d3Smrg 8583de2362d3Smrg obj) 85847821949aSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 85857821949aSmrg func_warning "\`-dlopen' is ignored for objects" 8586de2362d3Smrg fi 8587de2362d3Smrg 8588de2362d3Smrg case " $deplibs" in 8589de2362d3Smrg *\ -l* | *\ -L*) 85907821949aSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 8591de2362d3Smrg esac 8592de2362d3Smrg 8593de2362d3Smrg test -n "$rpath" && \ 85947821949aSmrg func_warning "\`-rpath' is ignored for objects" 8595de2362d3Smrg 8596de2362d3Smrg test -n "$xrpath" && \ 85977821949aSmrg func_warning "\`-R' is ignored for objects" 8598de2362d3Smrg 8599de2362d3Smrg test -n "$vinfo" && \ 86007821949aSmrg func_warning "\`-version-info' is ignored for objects" 8601de2362d3Smrg 8602de2362d3Smrg test -n "$release" && \ 86037821949aSmrg func_warning "\`-release' is ignored for objects" 8604de2362d3Smrg 8605de2362d3Smrg case $output in 8606de2362d3Smrg *.lo) 8607de2362d3Smrg test -n "$objs$old_deplibs" && \ 86087821949aSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609de2362d3Smrg 8610de2362d3Smrg libobj=$output 8611de2362d3Smrg func_lo2o "$libobj" 8612de2362d3Smrg obj=$func_lo2o_result 8613de2362d3Smrg ;; 8614de2362d3Smrg *) 8615de2362d3Smrg libobj= 86167821949aSmrg obj="$output" 8617de2362d3Smrg ;; 8618de2362d3Smrg esac 8619de2362d3Smrg 8620de2362d3Smrg # Delete the old objects. 8621de2362d3Smrg $opt_dry_run || $RM $obj $libobj 8622de2362d3Smrg 8623de2362d3Smrg # Objects from convenience libraries. This assumes 8624de2362d3Smrg # single-version convenience libraries. Whenever we create 8625de2362d3Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 8626de2362d3Smrg # the extraction. 8627de2362d3Smrg reload_conv_objs= 8628de2362d3Smrg gentop= 86297821949aSmrg # reload_cmds runs $LD directly, so let us get rid of 86307821949aSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 86317821949aSmrg # turning comma into space.. 86327821949aSmrg wl= 86337821949aSmrg 8634de2362d3Smrg if test -n "$convenience"; then 8635de2362d3Smrg if test -n "$whole_archive_flag_spec"; then 8636de2362d3Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 86377821949aSmrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638de2362d3Smrg else 86397821949aSmrg gentop="$output_objdir/${obj}x" 8640de2362d3Smrg func_append generated " $gentop" 8641de2362d3Smrg 8642de2362d3Smrg func_extract_archives $gentop $convenience 8643de2362d3Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644de2362d3Smrg fi 8645de2362d3Smrg fi 8646de2362d3Smrg 8647de2362d3Smrg # If we're not building shared, we need to use non_pic_objs 86487821949aSmrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8649de2362d3Smrg 8650de2362d3Smrg # Create the old-style object. 86517821949aSmrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8652de2362d3Smrg 86537821949aSmrg output="$obj" 8654de2362d3Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8655de2362d3Smrg 8656de2362d3Smrg # Exit if we aren't doing a library object file. 8657de2362d3Smrg if test -z "$libobj"; then 8658de2362d3Smrg if test -n "$gentop"; then 8659de2362d3Smrg func_show_eval '${RM}r "$gentop"' 8660de2362d3Smrg fi 8661de2362d3Smrg 8662de2362d3Smrg exit $EXIT_SUCCESS 8663de2362d3Smrg fi 8664de2362d3Smrg 86657821949aSmrg if test "$build_libtool_libs" != yes; then 8666de2362d3Smrg if test -n "$gentop"; then 8667de2362d3Smrg func_show_eval '${RM}r "$gentop"' 8668de2362d3Smrg fi 8669de2362d3Smrg 8670de2362d3Smrg # Create an invalid libtool object if no PIC, so that we don't 8671de2362d3Smrg # accidentally link it into a program. 8672de2362d3Smrg # $show "echo timestamp > $libobj" 8673de2362d3Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674de2362d3Smrg exit $EXIT_SUCCESS 86757821949aSmrg fi 8676de2362d3Smrg 86777821949aSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8678de2362d3Smrg # Only do commands if we really have different PIC objects. 8679de2362d3Smrg reload_objs="$libobjs $reload_conv_objs" 86807821949aSmrg output="$libobj" 8681de2362d3Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8682de2362d3Smrg fi 8683de2362d3Smrg 8684de2362d3Smrg if test -n "$gentop"; then 8685de2362d3Smrg func_show_eval '${RM}r "$gentop"' 8686de2362d3Smrg fi 8687de2362d3Smrg 8688de2362d3Smrg exit $EXIT_SUCCESS 8689de2362d3Smrg ;; 8690de2362d3Smrg 8691de2362d3Smrg prog) 8692de2362d3Smrg case $host in 8693de2362d3Smrg *cygwin*) func_stripname '' '.exe' "$output" 8694de2362d3Smrg output=$func_stripname_result.exe;; 8695de2362d3Smrg esac 8696de2362d3Smrg test -n "$vinfo" && \ 86977821949aSmrg func_warning "\`-version-info' is ignored for programs" 8698de2362d3Smrg 8699de2362d3Smrg test -n "$release" && \ 87007821949aSmrg func_warning "\`-release' is ignored for programs" 8701de2362d3Smrg 87027821949aSmrg test "$preload" = yes \ 87037821949aSmrg && test "$dlopen_support" = unknown \ 87047821949aSmrg && test "$dlopen_self" = unknown \ 87057821949aSmrg && test "$dlopen_self_static" = unknown && \ 87067821949aSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707de2362d3Smrg 8708de2362d3Smrg case $host in 8709de2362d3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 8710de2362d3Smrg # On Rhapsody replace the C library is the System framework 8711de2362d3Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8712de2362d3Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8713de2362d3Smrg ;; 8714de2362d3Smrg esac 8715de2362d3Smrg 8716de2362d3Smrg case $host in 8717de2362d3Smrg *-*-darwin*) 8718de2362d3Smrg # Don't allow lazy linking, it breaks C++ global constructors 8719de2362d3Smrg # But is supposedly fixed on 10.4 or later (yay!). 87207821949aSmrg if test "$tagname" = CXX ; then 8721de2362d3Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722de2362d3Smrg 10.[0123]) 87237821949aSmrg func_append compile_command " ${wl}-bind_at_load" 87247821949aSmrg func_append finalize_command " ${wl}-bind_at_load" 8725de2362d3Smrg ;; 8726de2362d3Smrg esac 8727de2362d3Smrg fi 8728de2362d3Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8729de2362d3Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8730de2362d3Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731de2362d3Smrg ;; 8732de2362d3Smrg esac 8733de2362d3Smrg 8734de2362d3Smrg 8735de2362d3Smrg # move library search paths that coincide with paths to not yet 8736de2362d3Smrg # installed libraries to the beginning of the library search list 8737de2362d3Smrg new_libs= 8738de2362d3Smrg for path in $notinst_path; do 8739de2362d3Smrg case " $new_libs " in 8740de2362d3Smrg *" -L$path/$objdir "*) ;; 8741de2362d3Smrg *) 8742de2362d3Smrg case " $compile_deplibs " in 8743de2362d3Smrg *" -L$path/$objdir "*) 8744de2362d3Smrg func_append new_libs " -L$path/$objdir" ;; 8745de2362d3Smrg esac 8746de2362d3Smrg ;; 8747de2362d3Smrg esac 8748de2362d3Smrg done 8749de2362d3Smrg for deplib in $compile_deplibs; do 8750de2362d3Smrg case $deplib in 8751de2362d3Smrg -L*) 8752de2362d3Smrg case " $new_libs " in 8753de2362d3Smrg *" $deplib "*) ;; 8754de2362d3Smrg *) func_append new_libs " $deplib" ;; 8755de2362d3Smrg esac 8756de2362d3Smrg ;; 8757de2362d3Smrg *) func_append new_libs " $deplib" ;; 8758de2362d3Smrg esac 8759de2362d3Smrg done 87607821949aSmrg compile_deplibs="$new_libs" 8761de2362d3Smrg 8762de2362d3Smrg 8763de2362d3Smrg func_append compile_command " $compile_deplibs" 8764de2362d3Smrg func_append finalize_command " $finalize_deplibs" 8765de2362d3Smrg 8766de2362d3Smrg if test -n "$rpath$xrpath"; then 8767de2362d3Smrg # If the user specified any rpath flags, then add them. 8768de2362d3Smrg for libdir in $rpath $xrpath; do 8769de2362d3Smrg # This is the magic to use -rpath. 8770de2362d3Smrg case "$finalize_rpath " in 8771de2362d3Smrg *" $libdir "*) ;; 8772de2362d3Smrg *) func_append finalize_rpath " $libdir" ;; 8773de2362d3Smrg esac 8774de2362d3Smrg done 8775de2362d3Smrg fi 8776de2362d3Smrg 8777de2362d3Smrg # Now hardcode the library paths 8778de2362d3Smrg rpath= 8779de2362d3Smrg hardcode_libdirs= 8780de2362d3Smrg for libdir in $compile_rpath $finalize_rpath; do 8781de2362d3Smrg if test -n "$hardcode_libdir_flag_spec"; then 8782de2362d3Smrg if test -n "$hardcode_libdir_separator"; then 8783de2362d3Smrg if test -z "$hardcode_libdirs"; then 87847821949aSmrg hardcode_libdirs="$libdir" 8785de2362d3Smrg else 8786de2362d3Smrg # Just accumulate the unique libdirs. 8787de2362d3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788de2362d3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789de2362d3Smrg ;; 8790de2362d3Smrg *) 8791de2362d3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792de2362d3Smrg ;; 8793de2362d3Smrg esac 8794de2362d3Smrg fi 8795de2362d3Smrg else 8796de2362d3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8797de2362d3Smrg func_append rpath " $flag" 8798de2362d3Smrg fi 8799de2362d3Smrg elif test -n "$runpath_var"; then 8800de2362d3Smrg case "$perm_rpath " in 8801de2362d3Smrg *" $libdir "*) ;; 8802de2362d3Smrg *) func_append perm_rpath " $libdir" ;; 8803de2362d3Smrg esac 8804de2362d3Smrg fi 8805de2362d3Smrg case $host in 8806de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 88077821949aSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808de2362d3Smrg case :$dllsearchpath: in 8809de2362d3Smrg *":$libdir:"*) ;; 8810de2362d3Smrg ::) dllsearchpath=$libdir;; 8811de2362d3Smrg *) func_append dllsearchpath ":$libdir";; 8812de2362d3Smrg esac 8813de2362d3Smrg case :$dllsearchpath: in 8814de2362d3Smrg *":$testbindir:"*) ;; 8815de2362d3Smrg ::) dllsearchpath=$testbindir;; 8816de2362d3Smrg *) func_append dllsearchpath ":$testbindir";; 8817de2362d3Smrg esac 8818de2362d3Smrg ;; 8819de2362d3Smrg esac 8820de2362d3Smrg done 8821de2362d3Smrg # Substitute the hardcoded libdirs into the rpath. 8822de2362d3Smrg if test -n "$hardcode_libdir_separator" && 8823de2362d3Smrg test -n "$hardcode_libdirs"; then 88247821949aSmrg libdir="$hardcode_libdirs" 8825de2362d3Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8826de2362d3Smrg fi 88277821949aSmrg compile_rpath="$rpath" 8828de2362d3Smrg 8829de2362d3Smrg rpath= 8830de2362d3Smrg hardcode_libdirs= 8831de2362d3Smrg for libdir in $finalize_rpath; do 8832de2362d3Smrg if test -n "$hardcode_libdir_flag_spec"; then 8833de2362d3Smrg if test -n "$hardcode_libdir_separator"; then 8834de2362d3Smrg if test -z "$hardcode_libdirs"; then 88357821949aSmrg hardcode_libdirs="$libdir" 8836de2362d3Smrg else 8837de2362d3Smrg # Just accumulate the unique libdirs. 8838de2362d3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839de2362d3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840de2362d3Smrg ;; 8841de2362d3Smrg *) 8842de2362d3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843de2362d3Smrg ;; 8844de2362d3Smrg esac 8845de2362d3Smrg fi 8846de2362d3Smrg else 8847de2362d3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8848de2362d3Smrg func_append rpath " $flag" 8849de2362d3Smrg fi 8850de2362d3Smrg elif test -n "$runpath_var"; then 8851de2362d3Smrg case "$finalize_perm_rpath " in 8852de2362d3Smrg *" $libdir "*) ;; 8853de2362d3Smrg *) func_append finalize_perm_rpath " $libdir" ;; 8854de2362d3Smrg esac 8855de2362d3Smrg fi 8856de2362d3Smrg done 8857de2362d3Smrg # Substitute the hardcoded libdirs into the rpath. 8858de2362d3Smrg if test -n "$hardcode_libdir_separator" && 8859de2362d3Smrg test -n "$hardcode_libdirs"; then 88607821949aSmrg libdir="$hardcode_libdirs" 8861de2362d3Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8862de2362d3Smrg fi 88637821949aSmrg finalize_rpath="$rpath" 8864de2362d3Smrg 88657821949aSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866de2362d3Smrg # Transform all the library objects into standard objects. 8867de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8868de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869de2362d3Smrg fi 8870de2362d3Smrg 88717821949aSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8872de2362d3Smrg 8873de2362d3Smrg # template prelinking step 8874de2362d3Smrg if test -n "$prelink_cmds"; then 8875de2362d3Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 8876de2362d3Smrg fi 8877de2362d3Smrg 88787821949aSmrg wrappers_required=yes 8879de2362d3Smrg case $host in 8880de2362d3Smrg *cegcc* | *mingw32ce*) 8881de2362d3Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 88827821949aSmrg wrappers_required=no 8883de2362d3Smrg ;; 8884de2362d3Smrg *cygwin* | *mingw* ) 88857821949aSmrg if test "$build_libtool_libs" != yes; then 88867821949aSmrg wrappers_required=no 88877821949aSmrg fi 8888de2362d3Smrg ;; 8889de2362d3Smrg *) 88907821949aSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 88917821949aSmrg wrappers_required=no 8892de2362d3Smrg fi 8893de2362d3Smrg ;; 8894de2362d3Smrg esac 88957821949aSmrg if test "$wrappers_required" = no; then 8896de2362d3Smrg # Replace the output file specification. 8897de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 88987821949aSmrg link_command="$compile_command$compile_rpath" 8899de2362d3Smrg 8900de2362d3Smrg # We have no uninstalled library dependencies, so finalize right now. 8901de2362d3Smrg exit_status=0 8902de2362d3Smrg func_show_eval "$link_command" 'exit_status=$?' 8903de2362d3Smrg 8904de2362d3Smrg if test -n "$postlink_cmds"; then 8905de2362d3Smrg func_to_tool_file "$output" 8906de2362d3Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8907de2362d3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8908de2362d3Smrg fi 8909de2362d3Smrg 8910de2362d3Smrg # Delete the generated files. 89117821949aSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 89127821949aSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913de2362d3Smrg fi 8914de2362d3Smrg 8915de2362d3Smrg exit $exit_status 89167821949aSmrg fi 8917de2362d3Smrg 8918de2362d3Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919de2362d3Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920de2362d3Smrg fi 8921de2362d3Smrg if test -n "$finalize_shlibpath"; then 8922de2362d3Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923de2362d3Smrg fi 8924de2362d3Smrg 8925de2362d3Smrg compile_var= 8926de2362d3Smrg finalize_var= 8927de2362d3Smrg if test -n "$runpath_var"; then 8928de2362d3Smrg if test -n "$perm_rpath"; then 8929de2362d3Smrg # We should set the runpath_var. 8930de2362d3Smrg rpath= 8931de2362d3Smrg for dir in $perm_rpath; do 8932de2362d3Smrg func_append rpath "$dir:" 8933de2362d3Smrg done 8934de2362d3Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8935de2362d3Smrg fi 8936de2362d3Smrg if test -n "$finalize_perm_rpath"; then 8937de2362d3Smrg # We should set the runpath_var. 8938de2362d3Smrg rpath= 8939de2362d3Smrg for dir in $finalize_perm_rpath; do 8940de2362d3Smrg func_append rpath "$dir:" 8941de2362d3Smrg done 8942de2362d3Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943de2362d3Smrg fi 8944de2362d3Smrg fi 8945de2362d3Smrg 89467821949aSmrg if test "$no_install" = yes; then 8947de2362d3Smrg # We don't need to create a wrapper script. 89487821949aSmrg link_command="$compile_var$compile_command$compile_rpath" 8949de2362d3Smrg # Replace the output file specification. 8950de2362d3Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951de2362d3Smrg # Delete the old output file. 8952de2362d3Smrg $opt_dry_run || $RM $output 8953de2362d3Smrg # Link the executable and exit 8954de2362d3Smrg func_show_eval "$link_command" 'exit $?' 8955de2362d3Smrg 8956de2362d3Smrg if test -n "$postlink_cmds"; then 8957de2362d3Smrg func_to_tool_file "$output" 8958de2362d3Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8959de2362d3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8960de2362d3Smrg fi 8961de2362d3Smrg 8962de2362d3Smrg exit $EXIT_SUCCESS 8963de2362d3Smrg fi 8964de2362d3Smrg 89657821949aSmrg if test "$hardcode_action" = relink; then 89667821949aSmrg # Fast installation is not supported 89677821949aSmrg link_command="$compile_var$compile_command$compile_rpath" 89687821949aSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8969de2362d3Smrg 89707821949aSmrg func_warning "this platform does not like uninstalled shared libraries" 89717821949aSmrg func_warning "\`$output' will be relinked during installation" 89727821949aSmrg else 89737821949aSmrg if test "$fast_install" != no; then 89747821949aSmrg link_command="$finalize_var$compile_command$finalize_rpath" 89757821949aSmrg if test "$fast_install" = yes; then 89767821949aSmrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 89777821949aSmrg else 89787821949aSmrg # fast_install is set to needless 89797821949aSmrg relink_command= 89807821949aSmrg fi 89817821949aSmrg else 89827821949aSmrg link_command="$compile_var$compile_command$compile_rpath" 89837821949aSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 89847821949aSmrg fi 89857821949aSmrg fi 8986de2362d3Smrg 8987de2362d3Smrg # Replace the output file specification. 8988de2362d3Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8989de2362d3Smrg 8990de2362d3Smrg # Delete the old output files. 8991de2362d3Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8992de2362d3Smrg 8993de2362d3Smrg func_show_eval "$link_command" 'exit $?' 8994de2362d3Smrg 8995de2362d3Smrg if test -n "$postlink_cmds"; then 8996de2362d3Smrg func_to_tool_file "$output_objdir/$outputname" 8997de2362d3Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8998de2362d3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8999de2362d3Smrg fi 9000de2362d3Smrg 9001de2362d3Smrg # Now create the wrapper script. 9002de2362d3Smrg func_verbose "creating $output" 9003de2362d3Smrg 9004de2362d3Smrg # Quote the relink command for shipping. 9005de2362d3Smrg if test -n "$relink_command"; then 9006de2362d3Smrg # Preserve any variables that may affect compiler behavior 9007de2362d3Smrg for var in $variables_saved_for_relink; do 9008de2362d3Smrg if eval test -z \"\${$var+set}\"; then 9009de2362d3Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010de2362d3Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9011de2362d3Smrg relink_command="$var=; export $var; $relink_command" 9012de2362d3Smrg else 9013de2362d3Smrg func_quote_for_eval "$var_value" 9014de2362d3Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015de2362d3Smrg fi 9016de2362d3Smrg done 9017de2362d3Smrg relink_command="(cd `pwd`; $relink_command)" 9018de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019de2362d3Smrg fi 9020de2362d3Smrg 9021de2362d3Smrg # Only actually do things if not in dry run mode. 9022de2362d3Smrg $opt_dry_run || { 9023de2362d3Smrg # win32 will think the script is a binary if it has 9024de2362d3Smrg # a .exe suffix, so we strip it off here. 9025de2362d3Smrg case $output in 9026de2362d3Smrg *.exe) func_stripname '' '.exe' "$output" 9027de2362d3Smrg output=$func_stripname_result ;; 9028de2362d3Smrg esac 9029de2362d3Smrg # test for cygwin because mv fails w/o .exe extensions 9030de2362d3Smrg case $host in 9031de2362d3Smrg *cygwin*) 9032de2362d3Smrg exeext=.exe 9033de2362d3Smrg func_stripname '' '.exe' "$outputname" 9034de2362d3Smrg outputname=$func_stripname_result ;; 9035de2362d3Smrg *) exeext= ;; 9036de2362d3Smrg esac 9037de2362d3Smrg case $host in 9038de2362d3Smrg *cygwin* | *mingw* ) 9039de2362d3Smrg func_dirname_and_basename "$output" "" "." 9040de2362d3Smrg output_name=$func_basename_result 9041de2362d3Smrg output_path=$func_dirname_result 90427821949aSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 90437821949aSmrg cwrapper="$output_path/$output_name.exe" 9044de2362d3Smrg $RM $cwrappersource $cwrapper 9045de2362d3Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046de2362d3Smrg 9047de2362d3Smrg func_emit_cwrapperexe_src > $cwrappersource 9048de2362d3Smrg 9049de2362d3Smrg # The wrapper executable is built using the $host compiler, 9050de2362d3Smrg # because it contains $host paths and files. If cross- 9051de2362d3Smrg # compiling, it, like the target executable, must be 9052de2362d3Smrg # executed on the $host or under an emulation environment. 9053de2362d3Smrg $opt_dry_run || { 9054de2362d3Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055de2362d3Smrg $STRIP $cwrapper 9056de2362d3Smrg } 9057de2362d3Smrg 9058de2362d3Smrg # Now, create the wrapper script for func_source use: 9059de2362d3Smrg func_ltwrapper_scriptname $cwrapper 9060de2362d3Smrg $RM $func_ltwrapper_scriptname_result 9061de2362d3Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062de2362d3Smrg $opt_dry_run || { 9063de2362d3Smrg # note: this script will not be executed, so do not chmod. 90647821949aSmrg if test "x$build" = "x$host" ; then 9065de2362d3Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066de2362d3Smrg else 9067de2362d3Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068de2362d3Smrg fi 9069de2362d3Smrg } 9070de2362d3Smrg ;; 9071de2362d3Smrg * ) 9072de2362d3Smrg $RM $output 9073de2362d3Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9074de2362d3Smrg 9075de2362d3Smrg func_emit_wrapper no > $output 9076de2362d3Smrg chmod +x $output 9077de2362d3Smrg ;; 9078de2362d3Smrg esac 9079de2362d3Smrg } 9080de2362d3Smrg exit $EXIT_SUCCESS 9081de2362d3Smrg ;; 9082de2362d3Smrg esac 9083de2362d3Smrg 9084de2362d3Smrg # See if we need to build an old-fashioned archive. 9085de2362d3Smrg for oldlib in $oldlibs; do 9086de2362d3Smrg 90877821949aSmrg if test "$build_libtool_libs" = convenience; then 90887821949aSmrg oldobjs="$libobjs_save $symfileobj" 90897821949aSmrg addlibs="$convenience" 90907821949aSmrg build_libtool_libs=no 90917821949aSmrg else 90927821949aSmrg if test "$build_libtool_libs" = module; then 90937821949aSmrg oldobjs="$libobjs_save" 90940d16fef4Smrg build_libtool_libs=no 90957821949aSmrg else 9096de2362d3Smrg oldobjs="$old_deplibs $non_pic_objects" 90977821949aSmrg if test "$preload" = yes && test -f "$symfileobj"; then 90987821949aSmrg func_append oldobjs " $symfileobj" 90997821949aSmrg fi 91007821949aSmrg fi 91017821949aSmrg addlibs="$old_convenience" 91027821949aSmrg fi 9103de2362d3Smrg 9104de2362d3Smrg if test -n "$addlibs"; then 91057821949aSmrg gentop="$output_objdir/${outputname}x" 9106de2362d3Smrg func_append generated " $gentop" 9107de2362d3Smrg 9108de2362d3Smrg func_extract_archives $gentop $addlibs 9109de2362d3Smrg func_append oldobjs " $func_extract_archives_result" 9110de2362d3Smrg fi 9111de2362d3Smrg 9112de2362d3Smrg # Do each command in the archive commands. 91137821949aSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114de2362d3Smrg cmds=$old_archive_from_new_cmds 9115de2362d3Smrg else 9116de2362d3Smrg 9117de2362d3Smrg # Add any objects from preloaded convenience libraries 9118de2362d3Smrg if test -n "$dlprefiles"; then 91197821949aSmrg gentop="$output_objdir/${outputname}x" 9120de2362d3Smrg func_append generated " $gentop" 9121de2362d3Smrg 9122de2362d3Smrg func_extract_archives $gentop $dlprefiles 9123de2362d3Smrg func_append oldobjs " $func_extract_archives_result" 9124de2362d3Smrg fi 9125de2362d3Smrg 9126de2362d3Smrg # POSIX demands no paths to be encoded in archives. We have 9127de2362d3Smrg # to avoid creating archives with duplicate basenames if we 9128de2362d3Smrg # might have to extract them afterwards, e.g., when creating a 9129de2362d3Smrg # static archive out of a convenience library, or when linking 9130de2362d3Smrg # the entirety of a libtool archive into another (currently 9131de2362d3Smrg # not supported by libtool). 9132de2362d3Smrg if (for obj in $oldobjs 9133de2362d3Smrg do 9134de2362d3Smrg func_basename "$obj" 9135de2362d3Smrg $ECHO "$func_basename_result" 9136de2362d3Smrg done | sort | sort -uc >/dev/null 2>&1); then 9137de2362d3Smrg : 9138de2362d3Smrg else 9139de2362d3Smrg echo "copying selected object files to avoid basename conflicts..." 91407821949aSmrg gentop="$output_objdir/${outputname}x" 9141de2362d3Smrg func_append generated " $gentop" 9142de2362d3Smrg func_mkdir_p "$gentop" 9143de2362d3Smrg save_oldobjs=$oldobjs 9144de2362d3Smrg oldobjs= 9145de2362d3Smrg counter=1 9146de2362d3Smrg for obj in $save_oldobjs 9147de2362d3Smrg do 9148de2362d3Smrg func_basename "$obj" 91497821949aSmrg objbase="$func_basename_result" 9150de2362d3Smrg case " $oldobjs " in 9151de2362d3Smrg " ") oldobjs=$obj ;; 9152de2362d3Smrg *[\ /]"$objbase "*) 9153de2362d3Smrg while :; do 9154de2362d3Smrg # Make sure we don't pick an alternate name that also 9155de2362d3Smrg # overlaps. 9156de2362d3Smrg newobj=lt$counter-$objbase 9157de2362d3Smrg func_arith $counter + 1 9158de2362d3Smrg counter=$func_arith_result 9159de2362d3Smrg case " $oldobjs " in 9160de2362d3Smrg *[\ /]"$newobj "*) ;; 9161de2362d3Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162de2362d3Smrg esac 9163de2362d3Smrg done 9164de2362d3Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9165de2362d3Smrg func_append oldobjs " $gentop/$newobj" 9166de2362d3Smrg ;; 9167de2362d3Smrg *) func_append oldobjs " $obj" ;; 9168de2362d3Smrg esac 9169de2362d3Smrg done 9170de2362d3Smrg fi 9171de2362d3Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9172de2362d3Smrg tool_oldlib=$func_to_tool_file_result 9173de2362d3Smrg eval cmds=\"$old_archive_cmds\" 9174de2362d3Smrg 9175de2362d3Smrg func_len " $cmds" 9176de2362d3Smrg len=$func_len_result 9177de2362d3Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178de2362d3Smrg cmds=$old_archive_cmds 9179de2362d3Smrg elif test -n "$archiver_list_spec"; then 9180de2362d3Smrg func_verbose "using command file archive linking..." 9181de2362d3Smrg for obj in $oldobjs 9182de2362d3Smrg do 9183de2362d3Smrg func_to_tool_file "$obj" 9184de2362d3Smrg $ECHO "$func_to_tool_file_result" 9185de2362d3Smrg done > $output_objdir/$libname.libcmd 9186de2362d3Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 9187de2362d3Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9188de2362d3Smrg cmds=$old_archive_cmds 9189de2362d3Smrg else 9190de2362d3Smrg # the command line is too long to link in one step, link in parts 9191de2362d3Smrg func_verbose "using piecewise archive linking..." 9192de2362d3Smrg save_RANLIB=$RANLIB 9193de2362d3Smrg RANLIB=: 9194de2362d3Smrg objlist= 9195de2362d3Smrg concat_cmds= 9196de2362d3Smrg save_oldobjs=$oldobjs 9197de2362d3Smrg oldobjs= 9198de2362d3Smrg # Is there a better way of finding the last object in the list? 9199de2362d3Smrg for obj in $save_oldobjs 9200de2362d3Smrg do 9201de2362d3Smrg last_oldobj=$obj 9202de2362d3Smrg done 9203de2362d3Smrg eval test_cmds=\"$old_archive_cmds\" 9204de2362d3Smrg func_len " $test_cmds" 9205de2362d3Smrg len0=$func_len_result 9206de2362d3Smrg len=$len0 9207de2362d3Smrg for obj in $save_oldobjs 9208de2362d3Smrg do 9209de2362d3Smrg func_len " $obj" 9210de2362d3Smrg func_arith $len + $func_len_result 9211de2362d3Smrg len=$func_arith_result 9212de2362d3Smrg func_append objlist " $obj" 9213de2362d3Smrg if test "$len" -lt "$max_cmd_len"; then 9214de2362d3Smrg : 9215de2362d3Smrg else 9216de2362d3Smrg # the above command should be used before it gets too long 9217de2362d3Smrg oldobjs=$objlist 92187821949aSmrg if test "$obj" = "$last_oldobj" ; then 9219de2362d3Smrg RANLIB=$save_RANLIB 9220de2362d3Smrg fi 9221de2362d3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 92227821949aSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223de2362d3Smrg objlist= 9224de2362d3Smrg len=$len0 9225de2362d3Smrg fi 9226de2362d3Smrg done 9227de2362d3Smrg RANLIB=$save_RANLIB 9228de2362d3Smrg oldobjs=$objlist 92297821949aSmrg if test "X$oldobjs" = "X" ; then 9230de2362d3Smrg eval cmds=\"\$concat_cmds\" 9231de2362d3Smrg else 9232de2362d3Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233de2362d3Smrg fi 9234de2362d3Smrg fi 9235de2362d3Smrg fi 9236de2362d3Smrg func_execute_cmds "$cmds" 'exit $?' 9237de2362d3Smrg done 9238de2362d3Smrg 9239de2362d3Smrg test -n "$generated" && \ 9240de2362d3Smrg func_show_eval "${RM}r$generated" 9241de2362d3Smrg 9242de2362d3Smrg # Now create the libtool archive. 9243de2362d3Smrg case $output in 9244de2362d3Smrg *.la) 9245de2362d3Smrg old_library= 92467821949aSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9247de2362d3Smrg func_verbose "creating $output" 9248de2362d3Smrg 9249de2362d3Smrg # Preserve any variables that may affect compiler behavior 9250de2362d3Smrg for var in $variables_saved_for_relink; do 9251de2362d3Smrg if eval test -z \"\${$var+set}\"; then 9252de2362d3Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253de2362d3Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9254de2362d3Smrg relink_command="$var=; export $var; $relink_command" 9255de2362d3Smrg else 9256de2362d3Smrg func_quote_for_eval "$var_value" 9257de2362d3Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9258de2362d3Smrg fi 9259de2362d3Smrg done 9260de2362d3Smrg # Quote the link command for shipping. 92617821949aSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9262de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 92637821949aSmrg if test "$hardcode_automatic" = yes ; then 9264de2362d3Smrg relink_command= 9265de2362d3Smrg fi 9266de2362d3Smrg 9267de2362d3Smrg # Only create the output if not a dry run. 9268de2362d3Smrg $opt_dry_run || { 9269de2362d3Smrg for installed in no yes; do 92707821949aSmrg if test "$installed" = yes; then 9271de2362d3Smrg if test -z "$install_libdir"; then 9272de2362d3Smrg break 9273de2362d3Smrg fi 92747821949aSmrg output="$output_objdir/$outputname"i 9275de2362d3Smrg # Replace all uninstalled libtool libraries with the installed ones 9276de2362d3Smrg newdependency_libs= 9277de2362d3Smrg for deplib in $dependency_libs; do 9278de2362d3Smrg case $deplib in 9279de2362d3Smrg *.la) 9280de2362d3Smrg func_basename "$deplib" 92817821949aSmrg name="$func_basename_result" 9282de2362d3Smrg func_resolve_sysroot "$deplib" 92837821949aSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284de2362d3Smrg test -z "$libdir" && \ 92857821949aSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 9286de2362d3Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9287de2362d3Smrg ;; 9288de2362d3Smrg -L*) 9289de2362d3Smrg func_stripname -L '' "$deplib" 9290de2362d3Smrg func_replace_sysroot "$func_stripname_result" 9291de2362d3Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9292de2362d3Smrg ;; 9293de2362d3Smrg -R*) 9294de2362d3Smrg func_stripname -R '' "$deplib" 9295de2362d3Smrg func_replace_sysroot "$func_stripname_result" 9296de2362d3Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 9297de2362d3Smrg ;; 9298de2362d3Smrg *) func_append newdependency_libs " $deplib" ;; 9299de2362d3Smrg esac 9300de2362d3Smrg done 93017821949aSmrg dependency_libs="$newdependency_libs" 9302de2362d3Smrg newdlfiles= 9303de2362d3Smrg 9304de2362d3Smrg for lib in $dlfiles; do 9305de2362d3Smrg case $lib in 9306de2362d3Smrg *.la) 9307de2362d3Smrg func_basename "$lib" 93087821949aSmrg name="$func_basename_result" 93097821949aSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310de2362d3Smrg test -z "$libdir" && \ 93117821949aSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 9312de2362d3Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313de2362d3Smrg ;; 9314de2362d3Smrg *) func_append newdlfiles " $lib" ;; 9315de2362d3Smrg esac 9316de2362d3Smrg done 93177821949aSmrg dlfiles="$newdlfiles" 9318de2362d3Smrg newdlprefiles= 9319de2362d3Smrg for lib in $dlprefiles; do 9320de2362d3Smrg case $lib in 9321de2362d3Smrg *.la) 9322de2362d3Smrg # Only pass preopened files to the pseudo-archive (for 9323de2362d3Smrg # eventual linking with the app. that links it) if we 9324de2362d3Smrg # didn't already link the preopened objects directly into 9325de2362d3Smrg # the library: 9326de2362d3Smrg func_basename "$lib" 93277821949aSmrg name="$func_basename_result" 93287821949aSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329de2362d3Smrg test -z "$libdir" && \ 93307821949aSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 9331de2362d3Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332de2362d3Smrg ;; 9333de2362d3Smrg esac 9334de2362d3Smrg done 93357821949aSmrg dlprefiles="$newdlprefiles" 9336de2362d3Smrg else 9337de2362d3Smrg newdlfiles= 9338de2362d3Smrg for lib in $dlfiles; do 9339de2362d3Smrg case $lib in 93407821949aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341de2362d3Smrg *) abs=`pwd`"/$lib" ;; 9342de2362d3Smrg esac 9343de2362d3Smrg func_append newdlfiles " $abs" 9344de2362d3Smrg done 93457821949aSmrg dlfiles="$newdlfiles" 9346de2362d3Smrg newdlprefiles= 9347de2362d3Smrg for lib in $dlprefiles; do 9348de2362d3Smrg case $lib in 93497821949aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350de2362d3Smrg *) abs=`pwd`"/$lib" ;; 9351de2362d3Smrg esac 9352de2362d3Smrg func_append newdlprefiles " $abs" 9353de2362d3Smrg done 93547821949aSmrg dlprefiles="$newdlprefiles" 9355de2362d3Smrg fi 9356de2362d3Smrg $RM $output 9357de2362d3Smrg # place dlname in correct position for cygwin 9358de2362d3Smrg # In fact, it would be nice if we could use this code for all target 9359de2362d3Smrg # systems that can't hard-code library paths into their executables 9360de2362d3Smrg # and that have no shared library path variable independent of PATH, 9361de2362d3Smrg # but it turns out we can't easily determine that from inspecting 9362de2362d3Smrg # libtool variables, so we have to hard-code the OSs to which it 9363de2362d3Smrg # applies here; at the moment, that means platforms that use the PE 9364de2362d3Smrg # object format with DLL files. See the long comment at the top of 9365de2362d3Smrg # tests/bindir.at for full details. 9366de2362d3Smrg tdlname=$dlname 9367de2362d3Smrg case $host,$output,$installed,$module,$dlname in 9368de2362d3Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9369de2362d3Smrg # If a -bindir argument was supplied, place the dll there. 93707821949aSmrg if test "x$bindir" != x ; 93717821949aSmrg then 9372de2362d3Smrg func_relative_path "$install_libdir" "$bindir" 93737821949aSmrg tdlname=$func_relative_path_result$dlname 9374de2362d3Smrg else 9375de2362d3Smrg # Otherwise fall back on heuristic. 9376de2362d3Smrg tdlname=../bin/$dlname 9377de2362d3Smrg fi 9378de2362d3Smrg ;; 9379de2362d3Smrg esac 9380de2362d3Smrg $ECHO > $output "\ 9381de2362d3Smrg# $outputname - a libtool library file 93827821949aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383de2362d3Smrg# 9384de2362d3Smrg# Please DO NOT delete this file! 9385de2362d3Smrg# It is necessary for linking the library. 9386de2362d3Smrg 9387de2362d3Smrg# The name that we can dlopen(3). 9388de2362d3Smrgdlname='$tdlname' 9389de2362d3Smrg 9390de2362d3Smrg# Names of this library. 9391de2362d3Smrglibrary_names='$library_names' 9392de2362d3Smrg 9393de2362d3Smrg# The name of the static archive. 9394de2362d3Smrgold_library='$old_library' 9395de2362d3Smrg 93967821949aSmrg# Linker flags that can not go in dependency_libs. 9397de2362d3Smrginherited_linker_flags='$new_inherited_linker_flags' 9398de2362d3Smrg 9399de2362d3Smrg# Libraries that this one depends upon. 9400de2362d3Smrgdependency_libs='$dependency_libs' 9401de2362d3Smrg 9402de2362d3Smrg# Names of additional weak libraries provided by this library 9403de2362d3Smrgweak_library_names='$weak_libs' 9404de2362d3Smrg 9405de2362d3Smrg# Version information for $libname. 9406de2362d3Smrgcurrent=$current 9407de2362d3Smrgage=$age 9408de2362d3Smrgrevision=$revision 9409de2362d3Smrg 9410de2362d3Smrg# Is this an already installed library? 9411de2362d3Smrginstalled=$installed 9412de2362d3Smrg 9413de2362d3Smrg# Should we warn about portability when linking against -modules? 9414de2362d3Smrgshouldnotlink=$module 9415de2362d3Smrg 9416de2362d3Smrg# Files to dlopen/dlpreopen 9417de2362d3Smrgdlopen='$dlfiles' 9418de2362d3Smrgdlpreopen='$dlprefiles' 9419de2362d3Smrg 9420de2362d3Smrg# Directory that this library needs to be installed in: 9421de2362d3Smrglibdir='$install_libdir'" 94227821949aSmrg if test "$installed" = no && test "$need_relink" = yes; then 9423de2362d3Smrg $ECHO >> $output "\ 9424de2362d3Smrgrelink_command=\"$relink_command\"" 9425de2362d3Smrg fi 9426de2362d3Smrg done 9427de2362d3Smrg } 9428de2362d3Smrg 9429de2362d3Smrg # Do a symbolic link so that the libtool archive can be found in 9430de2362d3Smrg # LD_LIBRARY_PATH before the program is installed. 9431de2362d3Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432de2362d3Smrg ;; 9433de2362d3Smrg esac 9434de2362d3Smrg exit $EXIT_SUCCESS 9435de2362d3Smrg} 9436de2362d3Smrg 94377821949aSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 94387821949aSmrg func_mode_link ${1+"$@"} 9439de2362d3Smrg 9440de2362d3Smrg 9441de2362d3Smrg# func_mode_uninstall arg... 9442de2362d3Smrgfunc_mode_uninstall () 9443de2362d3Smrg{ 94447821949aSmrg $opt_debug 94457821949aSmrg RM="$nonopt" 9446de2362d3Smrg files= 94477821949aSmrg rmforce= 9448de2362d3Smrg exit_status=0 9449de2362d3Smrg 9450de2362d3Smrg # This variable tells wrapper scripts just to set variables rather 9451de2362d3Smrg # than running their programs. 94527821949aSmrg libtool_install_magic="$magic" 9453de2362d3Smrg 9454de2362d3Smrg for arg 9455de2362d3Smrg do 9456de2362d3Smrg case $arg in 94577821949aSmrg -f) func_append RM " $arg"; rmforce=yes ;; 9458de2362d3Smrg -*) func_append RM " $arg" ;; 9459de2362d3Smrg *) func_append files " $arg" ;; 9460de2362d3Smrg esac 9461de2362d3Smrg done 9462de2362d3Smrg 9463de2362d3Smrg test -z "$RM" && \ 9464de2362d3Smrg func_fatal_help "you must specify an RM program" 9465de2362d3Smrg 9466de2362d3Smrg rmdirs= 9467de2362d3Smrg 9468de2362d3Smrg for file in $files; do 9469de2362d3Smrg func_dirname "$file" "" "." 94707821949aSmrg dir="$func_dirname_result" 94717821949aSmrg if test "X$dir" = X.; then 94727821949aSmrg odir="$objdir" 9473de2362d3Smrg else 94747821949aSmrg odir="$dir/$objdir" 9475de2362d3Smrg fi 9476de2362d3Smrg func_basename "$file" 94777821949aSmrg name="$func_basename_result" 94787821949aSmrg test "$opt_mode" = uninstall && odir="$dir" 9479de2362d3Smrg 9480de2362d3Smrg # Remember odir for removal later, being careful to avoid duplicates 94817821949aSmrg if test "$opt_mode" = clean; then 9482de2362d3Smrg case " $rmdirs " in 9483de2362d3Smrg *" $odir "*) ;; 9484de2362d3Smrg *) func_append rmdirs " $odir" ;; 9485de2362d3Smrg esac 9486de2362d3Smrg fi 9487de2362d3Smrg 9488de2362d3Smrg # Don't error if the file doesn't exist and rm -f was used. 9489de2362d3Smrg if { test -L "$file"; } >/dev/null 2>&1 || 9490de2362d3Smrg { test -h "$file"; } >/dev/null 2>&1 || 9491de2362d3Smrg test -f "$file"; then 9492de2362d3Smrg : 9493de2362d3Smrg elif test -d "$file"; then 9494de2362d3Smrg exit_status=1 9495de2362d3Smrg continue 94967821949aSmrg elif test "$rmforce" = yes; then 9497de2362d3Smrg continue 9498de2362d3Smrg fi 9499de2362d3Smrg 95007821949aSmrg rmfiles="$file" 9501de2362d3Smrg 9502de2362d3Smrg case $name in 9503de2362d3Smrg *.la) 9504de2362d3Smrg # Possibly a libtool archive, so verify it. 9505de2362d3Smrg if func_lalib_p "$file"; then 9506de2362d3Smrg func_source $dir/$name 9507de2362d3Smrg 9508de2362d3Smrg # Delete the libtool libraries and symlinks. 9509de2362d3Smrg for n in $library_names; do 9510de2362d3Smrg func_append rmfiles " $odir/$n" 9511de2362d3Smrg done 9512de2362d3Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9513de2362d3Smrg 95147821949aSmrg case "$opt_mode" in 9515de2362d3Smrg clean) 9516de2362d3Smrg case " $library_names " in 9517de2362d3Smrg *" $dlname "*) ;; 9518de2362d3Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9519de2362d3Smrg esac 9520de2362d3Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9521de2362d3Smrg ;; 9522de2362d3Smrg uninstall) 9523de2362d3Smrg if test -n "$library_names"; then 9524de2362d3Smrg # Do each command in the postuninstall commands. 95257821949aSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9526de2362d3Smrg fi 9527de2362d3Smrg 9528de2362d3Smrg if test -n "$old_library"; then 9529de2362d3Smrg # Do each command in the old_postuninstall commands. 95307821949aSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9531de2362d3Smrg fi 9532de2362d3Smrg # FIXME: should reinstall the best remaining shared library. 9533de2362d3Smrg ;; 9534de2362d3Smrg esac 9535de2362d3Smrg fi 9536de2362d3Smrg ;; 9537de2362d3Smrg 9538de2362d3Smrg *.lo) 9539de2362d3Smrg # Possibly a libtool object, so verify it. 9540de2362d3Smrg if func_lalib_p "$file"; then 9541de2362d3Smrg 9542de2362d3Smrg # Read the .lo file 9543de2362d3Smrg func_source $dir/$name 9544de2362d3Smrg 9545de2362d3Smrg # Add PIC object to the list of files to remove. 95467821949aSmrg if test -n "$pic_object" && 95477821949aSmrg test "$pic_object" != none; then 9548de2362d3Smrg func_append rmfiles " $dir/$pic_object" 9549de2362d3Smrg fi 9550de2362d3Smrg 9551de2362d3Smrg # Add non-PIC object to the list of files to remove. 95527821949aSmrg if test -n "$non_pic_object" && 95537821949aSmrg test "$non_pic_object" != none; then 9554de2362d3Smrg func_append rmfiles " $dir/$non_pic_object" 9555de2362d3Smrg fi 9556de2362d3Smrg fi 9557de2362d3Smrg ;; 9558de2362d3Smrg 9559de2362d3Smrg *) 95607821949aSmrg if test "$opt_mode" = clean ; then 9561de2362d3Smrg noexename=$name 9562de2362d3Smrg case $file in 9563de2362d3Smrg *.exe) 9564de2362d3Smrg func_stripname '' '.exe' "$file" 9565de2362d3Smrg file=$func_stripname_result 9566de2362d3Smrg func_stripname '' '.exe' "$name" 9567de2362d3Smrg noexename=$func_stripname_result 9568de2362d3Smrg # $file with .exe has already been added to rmfiles, 9569de2362d3Smrg # add $file without .exe 9570de2362d3Smrg func_append rmfiles " $file" 9571de2362d3Smrg ;; 9572de2362d3Smrg esac 9573de2362d3Smrg # Do a test to see if this is a libtool program. 9574de2362d3Smrg if func_ltwrapper_p "$file"; then 9575de2362d3Smrg if func_ltwrapper_executable_p "$file"; then 9576de2362d3Smrg func_ltwrapper_scriptname "$file" 9577de2362d3Smrg relink_command= 9578de2362d3Smrg func_source $func_ltwrapper_scriptname_result 9579de2362d3Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9580de2362d3Smrg else 9581de2362d3Smrg relink_command= 9582de2362d3Smrg func_source $dir/$noexename 9583de2362d3Smrg fi 9584de2362d3Smrg 9585de2362d3Smrg # note $name still contains .exe if it was in $file originally 9586de2362d3Smrg # as does the version of $file that was added into $rmfiles 95877821949aSmrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 95887821949aSmrg if test "$fast_install" = yes && test -n "$relink_command"; then 9589de2362d3Smrg func_append rmfiles " $odir/lt-$name" 9590de2362d3Smrg fi 95917821949aSmrg if test "X$noexename" != "X$name" ; then 95927821949aSmrg func_append rmfiles " $odir/lt-${noexename}.c" 9593de2362d3Smrg fi 9594de2362d3Smrg fi 9595de2362d3Smrg fi 9596de2362d3Smrg ;; 9597de2362d3Smrg esac 9598de2362d3Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9599de2362d3Smrg done 9600de2362d3Smrg 96017821949aSmrg # Try to remove the ${objdir}s in the directories where we deleted files 9602de2362d3Smrg for dir in $rmdirs; do 9603de2362d3Smrg if test -d "$dir"; then 9604de2362d3Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9605de2362d3Smrg fi 9606de2362d3Smrg done 9607de2362d3Smrg 9608de2362d3Smrg exit $exit_status 9609de2362d3Smrg} 9610de2362d3Smrg 96117821949aSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 96127821949aSmrg func_mode_uninstall ${1+"$@"} 9613de2362d3Smrg 9614de2362d3Smrgtest -z "$opt_mode" && { 96157821949aSmrg help="$generic_help" 9616de2362d3Smrg func_fatal_help "you must specify a MODE" 9617de2362d3Smrg} 9618de2362d3Smrg 9619de2362d3Smrgtest -z "$exec_cmd" && \ 96207821949aSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 9621de2362d3Smrg 9622de2362d3Smrgif test -n "$exec_cmd"; then 9623de2362d3Smrg eval exec "$exec_cmd" 9624de2362d3Smrg exit $EXIT_FAILURE 9625de2362d3Smrgfi 9626de2362d3Smrg 9627de2362d3Smrgexit $exit_status 9628de2362d3Smrg 9629de2362d3Smrg 9630de2362d3Smrg# The TAGs below are defined such that we never get into a situation 96317821949aSmrg# in which we disable both kinds of libraries. Given conflicting 9632de2362d3Smrg# choices, we go for a static library, that is the most portable, 9633de2362d3Smrg# since we can't tell whether shared libraries were disabled because 9634de2362d3Smrg# the user asked for that or because the platform doesn't support 9635de2362d3Smrg# them. This is particularly important on AIX, because we don't 9636de2362d3Smrg# support having both static and shared libraries enabled at the same 9637de2362d3Smrg# time on that platform, so we default to a shared-only configuration. 9638de2362d3Smrg# If a disable-shared tag is given, we'll fallback to a static-only 9639de2362d3Smrg# configuration. But we'll never go from static-only to shared-only. 9640de2362d3Smrg 9641de2362d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642de2362d3Smrgbuild_libtool_libs=no 9643de2362d3Smrgbuild_old_libs=yes 9644de2362d3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 9645de2362d3Smrg 9646de2362d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647de2362d3Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9648de2362d3Smrg# ### END LIBTOOL TAG CONFIG: disable-static 9649de2362d3Smrg 9650de2362d3Smrg# Local Variables: 9651de2362d3Smrg# mode:shell-script 9652de2362d3Smrg# sh-indentation:2 9653de2362d3Smrg# End: 96547821949aSmrg# vi:sw=2 96557821949aSmrg 9656