ltmain.sh revision 0eb1301b
1c27c18e8Smrg 20eb1301bSmrg# libtool (GNU libtool) 2.4.2 3c27c18e8Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4c27c18e8Smrg 50eb1301bSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 60eb1301bSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7c27c18e8Smrg# This is free software; see the source for copying conditions. There is NO 8c27c18e8Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9c27c18e8Smrg 10c27c18e8Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11c43cc173Smrg# it under the terms of the GNU General Public License as published by 12c43cc173Smrg# the Free Software Foundation; either version 2 of the License, or 13c43cc173Smrg# (at your option) any later version. 14c43cc173Smrg# 15c27c18e8Smrg# As a special exception to the GNU General Public License, 16c27c18e8Smrg# if you distribute this file as part of a program or library that 17c27c18e8Smrg# is built using GNU Libtool, you may include this file under the 18c27c18e8Smrg# same distribution terms that you use for the rest of that program. 19c27c18e8Smrg# 20c27c18e8Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21c43cc173Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22c43cc173Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23c43cc173Smrg# General Public License for more details. 24c43cc173Smrg# 25c43cc173Smrg# You should have received a copy of the GNU General Public License 260eb1301bSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 270eb1301bSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 280eb1301bSmrg# or obtained by writing to the Free Software Foundation, Inc., 290eb1301bSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 3044584a44Smrg 310eb1301bSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 320eb1301bSmrg# 330eb1301bSmrg# Provide generalized library-building support services. 3444584a44Smrg# 350eb1301bSmrg# --config show all configuration variables 360eb1301bSmrg# --debug enable verbose shell tracing 370eb1301bSmrg# -n, --dry-run display commands without modifying any files 380eb1301bSmrg# --features display basic configuration information and exit 390eb1301bSmrg# --mode=MODE use operation mode MODE 400eb1301bSmrg# --preserve-dup-deps don't remove duplicate dependency libraries 410eb1301bSmrg# --quiet, --silent don't print informational messages 420eb1301bSmrg# --no-quiet, --no-silent 430eb1301bSmrg# print informational messages (default) 440eb1301bSmrg# --no-warn don't display warning messages 450eb1301bSmrg# --tag=TAG use configuration variables from tag TAG 460eb1301bSmrg# -v, --verbose print more informational messages than default 470eb1301bSmrg# --no-verbose don't print the extra informational messages 480eb1301bSmrg# --version print version information 490eb1301bSmrg# -h, --help, --help-all print short, long, or detailed help message 5044584a44Smrg# 510eb1301bSmrg# MODE must be one of the following: 520eb1301bSmrg# 530eb1301bSmrg# clean remove files from the build directory 540eb1301bSmrg# compile compile a source file into a libtool object 550eb1301bSmrg# execute automatically set library path, then run a program 560eb1301bSmrg# finish complete the installation of libtool libraries 570eb1301bSmrg# install install libraries or executables 580eb1301bSmrg# link create a library or an executable 590eb1301bSmrg# uninstall remove libraries from an installed directory 600eb1301bSmrg# 610eb1301bSmrg# MODE-ARGS vary depending on the MODE. When passed as first option, 620eb1301bSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 630eb1301bSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 640eb1301bSmrg# 650eb1301bSmrg# When reporting a bug, please describe a test case to reproduce it and 660eb1301bSmrg# include the following information: 670eb1301bSmrg# 680eb1301bSmrg# host-triplet: $host 690eb1301bSmrg# shell: $SHELL 700eb1301bSmrg# compiler: $LTCC 710eb1301bSmrg# compiler flags: $LTCFLAGS 720eb1301bSmrg# linker: $LD (gnu? $with_gnu_ld) 730eb1301bSmrg# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 740eb1301bSmrg# automake: $automake_version 750eb1301bSmrg# autoconf: $autoconf_version 760eb1301bSmrg# 770eb1301bSmrg# Report bugs to <bug-libtool@gnu.org>. 780eb1301bSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 790eb1301bSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 8044584a44Smrg 810eb1301bSmrgPROGRAM=libtool 820eb1301bSmrgPACKAGE=libtool 830eb1301bSmrgVERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" 840eb1301bSmrgTIMESTAMP="" 850eb1301bSmrgpackage_revision=1.3337 8644584a44Smrg 870eb1301bSmrg# Be Bourne compatible 880eb1301bSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8921e67964Smrg emulate sh 9021e67964Smrg NULLCMD=: 910eb1301bSmrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 9221e67964Smrg # is contrary to our usage. Disable this feature. 9321e67964Smrg alias -g '${1+"$@"}'='"$@"' 94c43cc173Smrg setopt NO_GLOB_SUBST 9521e67964Smrgelse 960eb1301bSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 9744584a44Smrgfi 980eb1301bSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 990eb1301bSmrgDUALCASE=1; export DUALCASE # for MKS sh 100c27c18e8Smrg 1010eb1301bSmrg# A function that is used when there is no print builtin or printf. 1020eb1301bSmrgfunc_fallback_echo () 10344584a44Smrg{ 1040eb1301bSmrg eval 'cat <<_LTECHO_EOF 1050eb1301bSmrg$1 1060eb1301bSmrg_LTECHO_EOF' 10744584a44Smrg} 10844584a44Smrg 1090eb1301bSmrg# NLS nuisances: We save the old values to restore during execute mode. 1100eb1301bSmrglt_user_locale= 1110eb1301bSmrglt_safe_locale= 1120eb1301bSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1130eb1301bSmrgdo 1140eb1301bSmrg eval "if test \"\${$lt_var+set}\" = set; then 1150eb1301bSmrg save_$lt_var=\$$lt_var 1160eb1301bSmrg $lt_var=C 1170eb1301bSmrg export $lt_var 1180eb1301bSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 1190eb1301bSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1200eb1301bSmrg fi" 1210eb1301bSmrgdone 1220eb1301bSmrgLC_ALL=C 1230eb1301bSmrgLANGUAGE=C 1240eb1301bSmrgexport LANGUAGE LC_ALL 12544584a44Smrg 1260eb1301bSmrg$lt_unset CDPATH 12744584a44Smrg 12844584a44Smrg 1290eb1301bSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1300eb1301bSmrg# is ksh but when the shell is invoked as "sh" and the current value of 1310eb1301bSmrg# the _XPG environment variable is not equal to 1 (one), the special 1320eb1301bSmrg# positional parameter $0, within a function call, is the name of the 1330eb1301bSmrg# function. 1340eb1301bSmrgprogpath="$0" 13544584a44Smrg 13644584a44Smrg 137c27c18e8Smrg 138c27c18e8Smrg: ${CP="cp -f"} 1390eb1301bSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140c27c18e8Smrg: ${MAKE="make"} 141c27c18e8Smrg: ${MKDIR="mkdir"} 142c27c18e8Smrg: ${MV="mv -f"} 143c27c18e8Smrg: ${RM="rm -f"} 144c27c18e8Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 1450eb1301bSmrg: ${Xsed="$SED -e 1s/^X//"} 146c43cc173Smrg 1470eb1301bSmrg# Global variables: 1480eb1301bSmrgEXIT_SUCCESS=0 1490eb1301bSmrgEXIT_FAILURE=1 1500eb1301bSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 1510eb1301bSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152c27c18e8Smrg 1530eb1301bSmrgexit_status=$EXIT_SUCCESS 154b789ec8aSmrg 1550eb1301bSmrg# Make sure IFS has a sensible default 1560eb1301bSmrglt_nl=' 1570eb1301bSmrg' 1580eb1301bSmrgIFS=" $lt_nl" 159b789ec8aSmrg 1600eb1301bSmrgdirname="s,/[^/]*$,," 1610eb1301bSmrgbasename="s,^.*/,," 162b789ec8aSmrg 1630eb1301bSmrg# func_dirname file append nondir_replacement 1640eb1301bSmrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 1650eb1301bSmrg# otherwise set result to NONDIR_REPLACEMENT. 1660eb1301bSmrgfunc_dirname () 1670eb1301bSmrg{ 1680eb1301bSmrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 1690eb1301bSmrg if test "X$func_dirname_result" = "X${1}"; then 1700eb1301bSmrg func_dirname_result="${3}" 1710eb1301bSmrg else 1720eb1301bSmrg func_dirname_result="$func_dirname_result${2}" 1730eb1301bSmrg fi 1740eb1301bSmrg} # func_dirname may be replaced by extended shell implementation 175b789ec8aSmrg 176b789ec8aSmrg 1770eb1301bSmrg# func_basename file 1780eb1301bSmrgfunc_basename () 1790eb1301bSmrg{ 1800eb1301bSmrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 1810eb1301bSmrg} # func_basename may be replaced by extended shell implementation 182b789ec8aSmrg 183c43cc173Smrg 1840eb1301bSmrg# func_dirname_and_basename file append nondir_replacement 1850eb1301bSmrg# perform func_basename and func_dirname in a single function 1860eb1301bSmrg# call: 1870eb1301bSmrg# dirname: Compute the dirname of FILE. If nonempty, 1880eb1301bSmrg# add APPEND to the result, otherwise set result 1890eb1301bSmrg# to NONDIR_REPLACEMENT. 1900eb1301bSmrg# value returned in "$func_dirname_result" 1910eb1301bSmrg# basename: Compute filename of FILE. 1920eb1301bSmrg# value retuned in "$func_basename_result" 1930eb1301bSmrg# Implementation must be kept synchronized with func_dirname 1940eb1301bSmrg# and func_basename. For efficiency, we do not delegate to 1950eb1301bSmrg# those functions but instead duplicate the functionality here. 1960eb1301bSmrgfunc_dirname_and_basename () 1970eb1301bSmrg{ 1980eb1301bSmrg # Extract subdirectory from the argument. 1990eb1301bSmrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 2000eb1301bSmrg if test "X$func_dirname_result" = "X${1}"; then 2010eb1301bSmrg func_dirname_result="${3}" 2020eb1301bSmrg else 2030eb1301bSmrg func_dirname_result="$func_dirname_result${2}" 2040eb1301bSmrg fi 2050eb1301bSmrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 2060eb1301bSmrg} # func_dirname_and_basename may be replaced by extended shell implementation 207c27c18e8Smrg 20837eb1ca1Smrg 2090eb1301bSmrg# func_stripname prefix suffix name 2100eb1301bSmrg# strip PREFIX and SUFFIX off of NAME. 2110eb1301bSmrg# PREFIX and SUFFIX must not contain globbing or regex special 2120eb1301bSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading 2130eb1301bSmrg# dot (in which case that matches only a dot). 2140eb1301bSmrg# func_strip_suffix prefix name 2150eb1301bSmrgfunc_stripname () 2160eb1301bSmrg{ 2170eb1301bSmrg case ${2} in 2180eb1301bSmrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 2190eb1301bSmrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 2200eb1301bSmrg esac 2210eb1301bSmrg} # func_stripname may be replaced by extended shell implementation 22237eb1ca1Smrg 22337eb1ca1Smrg 2240eb1301bSmrg# These SED scripts presuppose an absolute path with a trailing slash. 2250eb1301bSmrgpathcar='s,^/\([^/]*\).*$,\1,' 2260eb1301bSmrgpathcdr='s,^/[^/]*,,' 2270eb1301bSmrgremovedotparts=':dotsl 2280eb1301bSmrg s@/\./@/@g 2290eb1301bSmrg t dotsl 2300eb1301bSmrg s,/\.$,/,' 2310eb1301bSmrgcollapseslashes='s@/\{1,\}@/@g' 2320eb1301bSmrgfinalslash='s,/*$,/,' 23337eb1ca1Smrg 2340eb1301bSmrg# func_normal_abspath PATH 2350eb1301bSmrg# Remove doubled-up and trailing slashes, "." path components, 2360eb1301bSmrg# and cancel out any ".." path components in PATH after making 2370eb1301bSmrg# it an absolute path. 2380eb1301bSmrg# value returned in "$func_normal_abspath_result" 2390eb1301bSmrgfunc_normal_abspath () 2400eb1301bSmrg{ 2410eb1301bSmrg # Start from root dir and reassemble the path. 2420eb1301bSmrg func_normal_abspath_result= 2430eb1301bSmrg func_normal_abspath_tpath=$1 2440eb1301bSmrg func_normal_abspath_altnamespace= 2450eb1301bSmrg case $func_normal_abspath_tpath in 2460eb1301bSmrg "") 2470eb1301bSmrg # Empty path, that just means $cwd. 2480eb1301bSmrg func_stripname '' '/' "`pwd`" 2490eb1301bSmrg func_normal_abspath_result=$func_stripname_result 2500eb1301bSmrg return 2510eb1301bSmrg ;; 2520eb1301bSmrg # The next three entries are used to spot a run of precisely 2530eb1301bSmrg # two leading slashes without using negated character classes; 2540eb1301bSmrg # we take advantage of case's first-match behaviour. 2550eb1301bSmrg ///*) 2560eb1301bSmrg # Unusual form of absolute path, do nothing. 2570eb1301bSmrg ;; 2580eb1301bSmrg //*) 2590eb1301bSmrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2600eb1301bSmrg # and for example Cygwin uses it to access remote file shares 2610eb1301bSmrg # over CIFS/SMB, so we conserve a leading double slash if found. 2620eb1301bSmrg func_normal_abspath_altnamespace=/ 2630eb1301bSmrg ;; 2640eb1301bSmrg /*) 2650eb1301bSmrg # Absolute path, do nothing. 2660eb1301bSmrg ;; 2670eb1301bSmrg *) 2680eb1301bSmrg # Relative path, prepend $cwd. 2690eb1301bSmrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2700eb1301bSmrg ;; 2710eb1301bSmrg esac 2720eb1301bSmrg # Cancel out all the simple stuff to save iterations. We also want 2730eb1301bSmrg # the path to end with a slash for ease of parsing, so make sure 2740eb1301bSmrg # there is one (and only one) here. 2750eb1301bSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2760eb1301bSmrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2770eb1301bSmrg while :; do 2780eb1301bSmrg # Processed it all yet? 2790eb1301bSmrg if test "$func_normal_abspath_tpath" = / ; then 2800eb1301bSmrg # If we ascended to the root using ".." the result may be empty now. 2810eb1301bSmrg if test -z "$func_normal_abspath_result" ; then 2820eb1301bSmrg func_normal_abspath_result=/ 2830eb1301bSmrg fi 2840eb1301bSmrg break 2850eb1301bSmrg fi 2860eb1301bSmrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2870eb1301bSmrg -e "$pathcar"` 2880eb1301bSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2890eb1301bSmrg -e "$pathcdr"` 2900eb1301bSmrg # Figure out what to do with it 2910eb1301bSmrg case $func_normal_abspath_tcomponent in 2920eb1301bSmrg "") 2930eb1301bSmrg # Trailing empty path component, ignore it. 2940eb1301bSmrg ;; 2950eb1301bSmrg ..) 2960eb1301bSmrg # Parent dir; strip last assembled component from result. 2970eb1301bSmrg func_dirname "$func_normal_abspath_result" 2980eb1301bSmrg func_normal_abspath_result=$func_dirname_result 2990eb1301bSmrg ;; 3000eb1301bSmrg *) 3010eb1301bSmrg # Actual path component, append it. 3020eb1301bSmrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 3030eb1301bSmrg ;; 3040eb1301bSmrg esac 3050eb1301bSmrg done 3060eb1301bSmrg # Restore leading double-slash if one was found on entry. 3070eb1301bSmrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 3080eb1301bSmrg} 3090eb1301bSmrg 3100eb1301bSmrg# func_relative_path SRCDIR DSTDIR 3110eb1301bSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 3120eb1301bSmrg# slash if non-empty, suitable for immediately appending a filename 3130eb1301bSmrg# without needing to append a separator. 3140eb1301bSmrg# value returned in "$func_relative_path_result" 3150eb1301bSmrgfunc_relative_path () 3160eb1301bSmrg{ 3170eb1301bSmrg func_relative_path_result= 3180eb1301bSmrg func_normal_abspath "$1" 3190eb1301bSmrg func_relative_path_tlibdir=$func_normal_abspath_result 3200eb1301bSmrg func_normal_abspath "$2" 3210eb1301bSmrg func_relative_path_tbindir=$func_normal_abspath_result 3220eb1301bSmrg 3230eb1301bSmrg # Ascend the tree starting from libdir 3240eb1301bSmrg while :; do 3250eb1301bSmrg # check if we have found a prefix of bindir 3260eb1301bSmrg case $func_relative_path_tbindir in 3270eb1301bSmrg $func_relative_path_tlibdir) 3280eb1301bSmrg # found an exact match 3290eb1301bSmrg func_relative_path_tcancelled= 3300eb1301bSmrg break 3310eb1301bSmrg ;; 3320eb1301bSmrg $func_relative_path_tlibdir*) 3330eb1301bSmrg # found a matching prefix 3340eb1301bSmrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3350eb1301bSmrg func_relative_path_tcancelled=$func_stripname_result 3360eb1301bSmrg if test -z "$func_relative_path_result"; then 3370eb1301bSmrg func_relative_path_result=. 3380eb1301bSmrg fi 3390eb1301bSmrg break 3400eb1301bSmrg ;; 3410eb1301bSmrg *) 3420eb1301bSmrg func_dirname $func_relative_path_tlibdir 3430eb1301bSmrg func_relative_path_tlibdir=${func_dirname_result} 3440eb1301bSmrg if test "x$func_relative_path_tlibdir" = x ; then 3450eb1301bSmrg # Have to descend all the way to the root! 3460eb1301bSmrg func_relative_path_result=../$func_relative_path_result 3470eb1301bSmrg func_relative_path_tcancelled=$func_relative_path_tbindir 3480eb1301bSmrg break 3490eb1301bSmrg fi 3500eb1301bSmrg func_relative_path_result=../$func_relative_path_result 3510eb1301bSmrg ;; 3520eb1301bSmrg esac 3530eb1301bSmrg done 3540eb1301bSmrg 3550eb1301bSmrg # Now calculate path; take care to avoid doubling-up slashes. 3560eb1301bSmrg func_stripname '' '/' "$func_relative_path_result" 3570eb1301bSmrg func_relative_path_result=$func_stripname_result 3580eb1301bSmrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3590eb1301bSmrg if test "x$func_stripname_result" != x ; then 3600eb1301bSmrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3610eb1301bSmrg fi 3620eb1301bSmrg 3630eb1301bSmrg # Normalisation. If bindir is libdir, return empty string, 3640eb1301bSmrg # else relative path ending with a slash; either way, target 3650eb1301bSmrg # file name can be directly appended. 3660eb1301bSmrg if test ! -z "$func_relative_path_result"; then 3670eb1301bSmrg func_stripname './' '' "$func_relative_path_result/" 3680eb1301bSmrg func_relative_path_result=$func_stripname_result 3690eb1301bSmrg fi 3700eb1301bSmrg} 371c27c18e8Smrg 3720eb1301bSmrg# The name of this program: 3730eb1301bSmrgfunc_dirname_and_basename "$progpath" 3740eb1301bSmrgprogname=$func_basename_result 375c27c18e8Smrg 3760eb1301bSmrg# Make sure we have an absolute path for reexecution: 377c27c18e8Smrgcase $progpath in 378c27c18e8Smrg [\\/]*|[A-Za-z]:\\*) ;; 379c27c18e8Smrg *[\\/]*) 3800eb1301bSmrg progdir=$func_dirname_result 381c27c18e8Smrg progdir=`cd "$progdir" && pwd` 3820eb1301bSmrg progpath="$progdir/$progname" 383c27c18e8Smrg ;; 384c27c18e8Smrg *) 3850eb1301bSmrg save_IFS="$IFS" 386f1ee322dSmrg IFS=${PATH_SEPARATOR-:} 387c27c18e8Smrg for progdir in $PATH; do 3880eb1301bSmrg IFS="$save_IFS" 389c27c18e8Smrg test -x "$progdir/$progname" && break 390c27c18e8Smrg done 3910eb1301bSmrg IFS="$save_IFS" 392c27c18e8Smrg test -n "$progdir" || progdir=`pwd` 3930eb1301bSmrg progpath="$progdir/$progname" 394c27c18e8Smrg ;; 395c27c18e8Smrgesac 396c27c18e8Smrg 3970eb1301bSmrg# Sed substitution that helps us do robust quoting. It backslashifies 3980eb1301bSmrg# metacharacters that are still active within double-quoted strings. 3990eb1301bSmrgXsed="${SED}"' -e 1s/^X//' 4000eb1301bSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 4010eb1301bSmrg 4020eb1301bSmrg# Same as above, but do not quote variable references. 4030eb1301bSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404c27c18e8Smrg 4050eb1301bSmrg# Sed substitution that turns a string into a regex matching for the 4060eb1301bSmrg# string literally. 4070eb1301bSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 408b789ec8aSmrg 4090eb1301bSmrg# Sed substitution that converts a w32 file name or path 4100eb1301bSmrg# which contains forward slashes, into one that contains 4110eb1301bSmrg# (escaped) backslashes. A very naive implementation. 4120eb1301bSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 4130eb1301bSmrg 4140eb1301bSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 4150eb1301bSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 4160eb1301bSmrg# in input to double_quote_subst, that '$' was protected from expansion. 4170eb1301bSmrg# Since each input `\' is now two `\'s, look for any number of runs of 4180eb1301bSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 4190eb1301bSmrgbs='\\' 4200eb1301bSmrgbs2='\\\\' 4210eb1301bSmrgbs4='\\\\\\\\' 4220eb1301bSmrgdollar='\$' 4230eb1301bSmrgsed_double_backslash="\ 4240eb1301bSmrg s/$bs4/&\\ 4250eb1301bSmrg/g 4260eb1301bSmrg s/^$bs2$dollar/$bs&/ 4270eb1301bSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 4280eb1301bSmrg s/\n//g" 429c27c18e8Smrg 4300eb1301bSmrg# Standard options: 431c27c18e8Smrgopt_dry_run=false 4320eb1301bSmrgopt_help=false 433c27c18e8Smrgopt_quiet=false 434c27c18e8Smrgopt_verbose=false 4350eb1301bSmrgopt_warning=: 436c27c18e8Smrg 4370eb1301bSmrg# func_echo arg... 4380eb1301bSmrg# Echo program name prefixed message, along with the current mode 4390eb1301bSmrg# name if it has been set yet. 4400eb1301bSmrgfunc_echo () 4410eb1301bSmrg{ 4420eb1301bSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 4430eb1301bSmrg} 444c27c18e8Smrg 4450eb1301bSmrg# func_verbose arg... 4460eb1301bSmrg# Echo program name prefixed message in verbose mode only. 4470eb1301bSmrgfunc_verbose () 4480eb1301bSmrg{ 4490eb1301bSmrg $opt_verbose && func_echo ${1+"$@"} 450c27c18e8Smrg 4510eb1301bSmrg # A bug in bash halts the script if the last line of a function 4520eb1301bSmrg # fails when set -e is in force, so we need another command to 4530eb1301bSmrg # work around that: 4540eb1301bSmrg : 4550eb1301bSmrg} 456c27c18e8Smrg 4570eb1301bSmrg# func_echo_all arg... 4580eb1301bSmrg# Invoke $ECHO with all args, space-separated. 4590eb1301bSmrgfunc_echo_all () 4600eb1301bSmrg{ 4610eb1301bSmrg $ECHO "$*" 4620eb1301bSmrg} 46337eb1ca1Smrg 4640eb1301bSmrg# func_error arg... 4650eb1301bSmrg# Echo program name prefixed message to standard error. 4660eb1301bSmrgfunc_error () 4670eb1301bSmrg{ 4680eb1301bSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 4690eb1301bSmrg} 470c27c18e8Smrg 4710eb1301bSmrg# func_warning arg... 4720eb1301bSmrg# Echo program name prefixed warning message to standard error. 4730eb1301bSmrgfunc_warning () 4740eb1301bSmrg{ 4750eb1301bSmrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476c27c18e8Smrg 4770eb1301bSmrg # bash bug again: 4780eb1301bSmrg : 4790eb1301bSmrg} 480c27c18e8Smrg 4810eb1301bSmrg# func_fatal_error arg... 4820eb1301bSmrg# Echo program name prefixed message to standard error, and exit. 4830eb1301bSmrgfunc_fatal_error () 484c27c18e8Smrg{ 4850eb1301bSmrg func_error ${1+"$@"} 4860eb1301bSmrg exit $EXIT_FAILURE 4870eb1301bSmrg} 488c27c18e8Smrg 4890eb1301bSmrg# func_fatal_help arg... 4900eb1301bSmrg# Echo program name prefixed message to standard error, followed by 4910eb1301bSmrg# a help hint, and exit. 4920eb1301bSmrgfunc_fatal_help () 4930eb1301bSmrg{ 4940eb1301bSmrg func_error ${1+"$@"} 4950eb1301bSmrg func_fatal_error "$help" 496c27c18e8Smrg} 4970eb1301bSmrghelp="Try \`$progname --help' for more information." ## default 498c27c18e8Smrg 499c27c18e8Smrg 5000eb1301bSmrg# func_grep expression filename 501c27c18e8Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502c27c18e8Smrgfunc_grep () 503c27c18e8Smrg{ 504c27c18e8Smrg $GREP "$1" "$2" >/dev/null 2>&1 505c27c18e8Smrg} 506c27c18e8Smrg 507c27c18e8Smrg 5080eb1301bSmrg# func_mkdir_p directory-path 509c27c18e8Smrg# Make sure the entire path to DIRECTORY-PATH is available. 510c27c18e8Smrgfunc_mkdir_p () 511c27c18e8Smrg{ 5120eb1301bSmrg my_directory_path="$1" 5130eb1301bSmrg my_dir_list= 514c27c18e8Smrg 5150eb1301bSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 51644584a44Smrg 5170eb1301bSmrg # Protect directory names starting with `-' 5180eb1301bSmrg case $my_directory_path in 5190eb1301bSmrg -*) my_directory_path="./$my_directory_path" ;; 520c27c18e8Smrg esac 521c27c18e8Smrg 522c27c18e8Smrg # While some portion of DIR does not yet exist... 5230eb1301bSmrg while test ! -d "$my_directory_path"; do 524c27c18e8Smrg # ...make a list in topmost first order. Use a colon delimited 525c27c18e8Smrg # list incase some portion of path contains whitespace. 5260eb1301bSmrg my_dir_list="$my_directory_path:$my_dir_list" 527c27c18e8Smrg 528c27c18e8Smrg # If the last portion added has no slash in it, the list is done 5290eb1301bSmrg case $my_directory_path in */*) ;; *) break ;; esac 530c27c18e8Smrg 531c27c18e8Smrg # ...otherwise throw away the child directory and loop 5320eb1301bSmrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533c27c18e8Smrg done 5340eb1301bSmrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535c27c18e8Smrg 5360eb1301bSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 5370eb1301bSmrg for my_dir in $my_dir_list; do 5380eb1301bSmrg IFS="$save_mkdir_p_IFS" 5390eb1301bSmrg # mkdir can fail with a `File exist' error if two processes 540c27c18e8Smrg # try to create one of the directories concurrently. Don't 541c27c18e8Smrg # stop in that case! 5420eb1301bSmrg $MKDIR "$my_dir" 2>/dev/null || : 543c27c18e8Smrg done 5440eb1301bSmrg IFS="$save_mkdir_p_IFS" 545c27c18e8Smrg 546c27c18e8Smrg # Bail out if we (or some other process) failed to create a directory. 5470eb1301bSmrg test -d "$my_directory_path" || \ 5480eb1301bSmrg func_fatal_error "Failed to create \`$1'" 549c27c18e8Smrg fi 550c27c18e8Smrg} 551c43cc173Smrg 552c43cc173Smrg 5530eb1301bSmrg# func_mktempdir [string] 554c43cc173Smrg# Make a temporary directory that won't clash with other running 555c43cc173Smrg# libtool processes, and avoids race conditions if possible. If 5560eb1301bSmrg# given, STRING is the basename for that directory. 557c43cc173Smrgfunc_mktempdir () 558c43cc173Smrg{ 5590eb1301bSmrg my_template="${TMPDIR-/tmp}/${1-$progname}" 56044584a44Smrg 5610eb1301bSmrg if test "$opt_dry_run" = ":"; then 562c43cc173Smrg # Return a directory name, but don't create it in dry-run mode 5630eb1301bSmrg my_tmpdir="${my_template}-$$" 564c43cc173Smrg else 565c43cc173Smrg 566c43cc173Smrg # If mktemp works, use that first and foremost 5670eb1301bSmrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568c43cc173Smrg 5690eb1301bSmrg if test ! -d "$my_tmpdir"; then 570c27c18e8Smrg # Failing that, at least try and use $RANDOM to avoid a race 5710eb1301bSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 572c43cc173Smrg 5730eb1301bSmrg save_mktempdir_umask=`umask` 574c27c18e8Smrg umask 0077 5750eb1301bSmrg $MKDIR "$my_tmpdir" 5760eb1301bSmrg umask $save_mktempdir_umask 577c43cc173Smrg fi 578c43cc173Smrg 579c43cc173Smrg # If we're not in dry-run mode, bomb out on failure 5800eb1301bSmrg test -d "$my_tmpdir" || \ 5810eb1301bSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582c43cc173Smrg fi 583c43cc173Smrg 5840eb1301bSmrg $ECHO "$my_tmpdir" 58544584a44Smrg} 58644584a44Smrg 58744584a44Smrg 5880eb1301bSmrg# func_quote_for_eval arg 5890eb1301bSmrg# Aesthetically quote ARG to be evaled later. 5900eb1301bSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 5910eb1301bSmrg# is double-quoted, suitable for a subsequent eval, whereas 5920eb1301bSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 5930eb1301bSmrg# which are still active within double quotes backslashified. 59444584a44Smrgfunc_quote_for_eval () 59544584a44Smrg{ 59644584a44Smrg case $1 in 5970eb1301bSmrg *[\\\`\"\$]*) 5980eb1301bSmrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 59944584a44Smrg *) 6000eb1301bSmrg func_quote_for_eval_unquoted_result="$1" ;; 60144584a44Smrg esac 60244584a44Smrg 6030eb1301bSmrg case $func_quote_for_eval_unquoted_result in 60444584a44Smrg # Double-quote args containing shell metacharacters to delay 6050eb1301bSmrg # word splitting, command substitution and and variable 6060eb1301bSmrg # expansion for a subsequent eval. 60744584a44Smrg # Many Bourne shells cannot handle close brackets correctly 60844584a44Smrg # in scan sets, so we specify it separately. 60944584a44Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 6100eb1301bSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 61144584a44Smrg ;; 6120eb1301bSmrg *) 6130eb1301bSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 61444584a44Smrg esac 61544584a44Smrg} 61644584a44Smrg 61744584a44Smrg 6180eb1301bSmrg# func_quote_for_expand arg 6190eb1301bSmrg# Aesthetically quote ARG to be evaled later; same as above, 6200eb1301bSmrg# but do not quote variable references. 6210eb1301bSmrgfunc_quote_for_expand () 62244584a44Smrg{ 62344584a44Smrg case $1 in 6240eb1301bSmrg *[\\\`\"]*) 6250eb1301bSmrg my_arg=`$ECHO "$1" | $SED \ 6260eb1301bSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 6270eb1301bSmrg *) 6280eb1301bSmrg my_arg="$1" ;; 62944584a44Smrg esac 63044584a44Smrg 6310eb1301bSmrg case $my_arg in 6320eb1301bSmrg # Double-quote args containing shell metacharacters to delay 6330eb1301bSmrg # word splitting and command substitution for a subsequent eval. 6340eb1301bSmrg # Many Bourne shells cannot handle close brackets correctly 6350eb1301bSmrg # in scan sets, so we specify it separately. 6360eb1301bSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 6370eb1301bSmrg my_arg="\"$my_arg\"" 6380eb1301bSmrg ;; 6390eb1301bSmrg esac 64044584a44Smrg 6410eb1301bSmrg func_quote_for_expand_result="$my_arg" 642c43cc173Smrg} 643c43cc173Smrg 644c43cc173Smrg 6450eb1301bSmrg# func_show_eval cmd [fail_exp] 6460eb1301bSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6470eb1301bSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6480eb1301bSmrg# is given, then evaluate it. 6490eb1301bSmrgfunc_show_eval () 650c43cc173Smrg{ 6510eb1301bSmrg my_cmd="$1" 6520eb1301bSmrg my_fail_exp="${2-:}" 65344584a44Smrg 6540eb1301bSmrg ${opt_silent-false} || { 6550eb1301bSmrg func_quote_for_expand "$my_cmd" 6560eb1301bSmrg eval "func_echo $func_quote_for_expand_result" 6570eb1301bSmrg } 65844584a44Smrg 6590eb1301bSmrg if ${opt_dry_run-false}; then :; else 6600eb1301bSmrg eval "$my_cmd" 6610eb1301bSmrg my_status=$? 6620eb1301bSmrg if test "$my_status" -eq 0; then :; else 6630eb1301bSmrg eval "(exit $my_status); $my_fail_exp" 6640eb1301bSmrg fi 6650eb1301bSmrg fi 666c43cc173Smrg} 667c43cc173Smrg 668c43cc173Smrg 6690eb1301bSmrg# func_show_eval_locale cmd [fail_exp] 6700eb1301bSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6710eb1301bSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6720eb1301bSmrg# is given, then evaluate it. Use the saved locale for evaluation. 6730eb1301bSmrgfunc_show_eval_locale () 674c43cc173Smrg{ 6750eb1301bSmrg my_cmd="$1" 6760eb1301bSmrg my_fail_exp="${2-:}" 677c27c18e8Smrg 6780eb1301bSmrg ${opt_silent-false} || { 6790eb1301bSmrg func_quote_for_expand "$my_cmd" 6800eb1301bSmrg eval "func_echo $func_quote_for_expand_result" 6810eb1301bSmrg } 68244584a44Smrg 6830eb1301bSmrg if ${opt_dry_run-false}; then :; else 6840eb1301bSmrg eval "$lt_user_locale 6850eb1301bSmrg $my_cmd" 6860eb1301bSmrg my_status=$? 6870eb1301bSmrg eval "$lt_safe_locale" 6880eb1301bSmrg if test "$my_status" -eq 0; then :; else 6890eb1301bSmrg eval "(exit $my_status); $my_fail_exp" 6900eb1301bSmrg fi 6910eb1301bSmrg fi 692c43cc173Smrg} 693c43cc173Smrg 6940eb1301bSmrg# func_tr_sh 6950eb1301bSmrg# Turn $1 into a string suitable for a shell variable name. 6960eb1301bSmrg# Result is stored in $func_tr_sh_result. All characters 6970eb1301bSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 6980eb1301bSmrg# if $1 begins with a digit, a '_' is prepended as well. 6990eb1301bSmrgfunc_tr_sh () 700c43cc173Smrg{ 7010eb1301bSmrg case $1 in 7020eb1301bSmrg [0-9]* | *[!a-zA-Z0-9_]*) 7030eb1301bSmrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 7040eb1301bSmrg ;; 7050eb1301bSmrg * ) 7060eb1301bSmrg func_tr_sh_result=$1 7070eb1301bSmrg ;; 7080eb1301bSmrg esac 709b789ec8aSmrg} 710b789ec8aSmrg 711c43cc173Smrg 7120eb1301bSmrg# func_version 7130eb1301bSmrg# Echo version message to standard output and exit. 7140eb1301bSmrgfunc_version () 7150eb1301bSmrg{ 7160eb1301bSmrg $opt_debug 717b789ec8aSmrg 7180eb1301bSmrg $SED -n '/(C)/!b go 7190eb1301bSmrg :more 7200eb1301bSmrg /\./!{ 7210eb1301bSmrg N 7220eb1301bSmrg s/\n# / / 7230eb1301bSmrg b more 7240eb1301bSmrg } 7250eb1301bSmrg :go 7260eb1301bSmrg /^# '$PROGRAM' (GNU /,/# warranty; / { 7270eb1301bSmrg s/^# // 7280eb1301bSmrg s/^# *$// 7290eb1301bSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 7300eb1301bSmrg p 7310eb1301bSmrg }' < "$progpath" 7320eb1301bSmrg exit $? 7330eb1301bSmrg} 73444584a44Smrg 7350eb1301bSmrg# func_usage 7360eb1301bSmrg# Echo short help message to standard output and exit. 7370eb1301bSmrgfunc_usage () 738c27c18e8Smrg{ 7390eb1301bSmrg $opt_debug 740b789ec8aSmrg 7410eb1301bSmrg $SED -n '/^# Usage:/,/^# *.*--help/ { 7420eb1301bSmrg s/^# // 7430eb1301bSmrg s/^# *$// 7440eb1301bSmrg s/\$progname/'$progname'/ 7450eb1301bSmrg p 7460eb1301bSmrg }' < "$progpath" 7470eb1301bSmrg echo 7480eb1301bSmrg $ECHO "run \`$progname --help | more' for full usage" 7490eb1301bSmrg exit $? 750c27c18e8Smrg} 751c27c18e8Smrg 7520eb1301bSmrg# func_help [NOEXIT] 7530eb1301bSmrg# Echo long help message to standard output and exit, 7540eb1301bSmrg# unless 'noexit' is passed as argument. 755c27c18e8Smrgfunc_help () 756c27c18e8Smrg{ 7570eb1301bSmrg $opt_debug 7580eb1301bSmrg 7590eb1301bSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 7600eb1301bSmrg :print 7610eb1301bSmrg s/^# // 7620eb1301bSmrg s/^# *$// 7630eb1301bSmrg s*\$progname*'$progname'* 7640eb1301bSmrg s*\$host*'"$host"'* 7650eb1301bSmrg s*\$SHELL*'"$SHELL"'* 7660eb1301bSmrg s*\$LTCC*'"$LTCC"'* 7670eb1301bSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 7680eb1301bSmrg s*\$LD*'"$LD"'* 7690eb1301bSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 7700eb1301bSmrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 7710eb1301bSmrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 7720eb1301bSmrg p 7730eb1301bSmrg d 7740eb1301bSmrg } 7750eb1301bSmrg /^# .* home page:/b print 7760eb1301bSmrg /^# General help using/b print 7770eb1301bSmrg ' < "$progpath" 7780eb1301bSmrg ret=$? 7790eb1301bSmrg if test -z "$1"; then 7800eb1301bSmrg exit $ret 7810eb1301bSmrg fi 782c27c18e8Smrg} 783c27c18e8Smrg 7840eb1301bSmrg# func_missing_arg argname 785c27c18e8Smrg# Echo program name prefixed message to standard error and set global 786c27c18e8Smrg# exit_cmd. 787c27c18e8Smrgfunc_missing_arg () 788c27c18e8Smrg{ 7890eb1301bSmrg $opt_debug 790b789ec8aSmrg 7910eb1301bSmrg func_error "missing argument for $1." 792c27c18e8Smrg exit_cmd=exit 793c43cc173Smrg} 794c43cc173Smrg 795c43cc173Smrg 7960eb1301bSmrg# func_split_short_opt shortopt 797b789ec8aSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 798b789ec8aSmrg# variables after splitting SHORTOPT after the 2nd character. 7990eb1301bSmrgfunc_split_short_opt () 800b789ec8aSmrg{ 8010eb1301bSmrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 8020eb1301bSmrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803b789ec8aSmrg 8040eb1301bSmrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 8050eb1301bSmrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 8060eb1301bSmrg} # func_split_short_opt may be replaced by extended shell implementation 807b789ec8aSmrg 808b789ec8aSmrg 8090eb1301bSmrg# func_split_long_opt longopt 8100eb1301bSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 8110eb1301bSmrg# variables after splitting LONGOPT at the `=' sign. 8120eb1301bSmrgfunc_split_long_opt () 813b789ec8aSmrg{ 8140eb1301bSmrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 8150eb1301bSmrg my_sed_long_arg='1s/^--[^=]*=//' 816b789ec8aSmrg 8170eb1301bSmrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 8180eb1301bSmrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 8190eb1301bSmrg} # func_split_long_opt may be replaced by extended shell implementation 820b789ec8aSmrg 8210eb1301bSmrgexit_cmd=: 822c43cc173Smrg 823c27c18e8Smrg 824c27c18e8Smrg 825c27c18e8Smrg 826c43cc173Smrg 8270eb1301bSmrgmagic="%%%MAGIC variable%%%" 8280eb1301bSmrgmagic_exe="%%%MAGIC EXE variable%%%" 829c43cc173Smrg 8300eb1301bSmrg# Global variables. 8310eb1301bSmrgnonopt= 8320eb1301bSmrgpreserve_args= 8330eb1301bSmrglo2o="s/\\.lo\$/.${objext}/" 8340eb1301bSmrgo2lo="s/\\.${objext}\$/.lo/" 8350eb1301bSmrgextracted_archives= 8360eb1301bSmrgextracted_serial=0 837c43cc173Smrg 8380eb1301bSmrg# If this variable is set in any of the actions, the command in it 8390eb1301bSmrg# will be execed at the end. This prevents here-documents from being 8400eb1301bSmrg# left over by shells. 8410eb1301bSmrgexec_cmd= 842c27c18e8Smrg 8430eb1301bSmrg# func_append var value 8440eb1301bSmrg# Append VALUE to the end of shell variable VAR. 8450eb1301bSmrgfunc_append () 846b789ec8aSmrg{ 8470eb1301bSmrg eval "${1}=\$${1}\${2}" 8480eb1301bSmrg} # func_append may be replaced by extended shell implementation 849b789ec8aSmrg 8500eb1301bSmrg# func_append_quoted var value 8510eb1301bSmrg# Quote VALUE and append to the end of shell variable VAR, separated 8520eb1301bSmrg# by a space. 8530eb1301bSmrgfunc_append_quoted () 854b789ec8aSmrg{ 8550eb1301bSmrg func_quote_for_eval "${2}" 8560eb1301bSmrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 8570eb1301bSmrg} # func_append_quoted may be replaced by extended shell implementation 858b789ec8aSmrg 859b789ec8aSmrg 8600eb1301bSmrg# func_arith arithmetic-term... 8610eb1301bSmrgfunc_arith () 862b789ec8aSmrg{ 8630eb1301bSmrg func_arith_result=`expr "${@}"` 8640eb1301bSmrg} # func_arith may be replaced by extended shell implementation 865b789ec8aSmrg 866b789ec8aSmrg 8670eb1301bSmrg# func_len string 8680eb1301bSmrg# STRING may not start with a hyphen. 8690eb1301bSmrgfunc_len () 8700eb1301bSmrg{ 8710eb1301bSmrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 8720eb1301bSmrg} # func_len may be replaced by extended shell implementation 87344584a44Smrg 87444584a44Smrg 8750eb1301bSmrg# func_lo2o object 8760eb1301bSmrgfunc_lo2o () 8770eb1301bSmrg{ 8780eb1301bSmrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 8790eb1301bSmrg} # func_lo2o may be replaced by extended shell implementation 88044584a44Smrg 88144584a44Smrg 8820eb1301bSmrg# func_xform libobj-or-source 8830eb1301bSmrgfunc_xform () 8840eb1301bSmrg{ 8850eb1301bSmrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 8860eb1301bSmrg} # func_xform may be replaced by extended shell implementation 887b789ec8aSmrg 888b789ec8aSmrg 8890eb1301bSmrg# func_fatal_configuration arg... 890c27c18e8Smrg# Echo program name prefixed message to standard error, followed by 891c27c18e8Smrg# a configuration failure hint, and exit. 892c27c18e8Smrgfunc_fatal_configuration () 893c27c18e8Smrg{ 8940eb1301bSmrg func_error ${1+"$@"} 8950eb1301bSmrg func_error "See the $PACKAGE documentation for more information." 8960eb1301bSmrg func_fatal_error "Fatal configuration error." 897c27c18e8Smrg} 898c43cc173Smrg 89921e67964Smrg 900c27c18e8Smrg# func_config 901c27c18e8Smrg# Display the configuration for all the tags in this script. 902c27c18e8Smrgfunc_config () 903c27c18e8Smrg{ 904c27c18e8Smrg re_begincf='^# ### BEGIN LIBTOOL' 905c27c18e8Smrg re_endcf='^# ### END LIBTOOL' 906c27c18e8Smrg 907c27c18e8Smrg # Default configuration. 908c27c18e8Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909c43cc173Smrg 910c43cc173Smrg # Now print the configurations for the tags. 911c43cc173Smrg for tagname in $taglist; do 912c27c18e8Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913c43cc173Smrg done 914c43cc173Smrg 915c27c18e8Smrg exit $? 916c27c18e8Smrg} 917c43cc173Smrg 918c27c18e8Smrg# func_features 919c27c18e8Smrg# Display the features supported by this script. 920c27c18e8Smrgfunc_features () 921c27c18e8Smrg{ 92237eb1ca1Smrg echo "host: $host" 9230eb1301bSmrg if test "$build_libtool_libs" = yes; then 92437eb1ca1Smrg echo "enable shared libraries" 925c43cc173Smrg else 92637eb1ca1Smrg echo "disable shared libraries" 927c43cc173Smrg fi 9280eb1301bSmrg if test "$build_old_libs" = yes; then 92937eb1ca1Smrg echo "enable static libraries" 930c43cc173Smrg else 93137eb1ca1Smrg echo "disable static libraries" 932c43cc173Smrg fi 933c27c18e8Smrg 934c43cc173Smrg exit $? 935c27c18e8Smrg} 936c43cc173Smrg 9370eb1301bSmrg# func_enable_tag tagname 938c27c18e8Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939c27c18e8Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940c27c18e8Smrg# variable here. 941c27c18e8Smrgfunc_enable_tag () 942c27c18e8Smrg{ 9430eb1301bSmrg # Global variable: 9440eb1301bSmrg tagname="$1" 945c43cc173Smrg 9460eb1301bSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 9470eb1301bSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 9480eb1301bSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 949c43cc173Smrg 9500eb1301bSmrg # Validate tagname. 9510eb1301bSmrg case $tagname in 9520eb1301bSmrg *[!-_A-Za-z0-9,/]*) 9530eb1301bSmrg func_fatal_error "invalid tag name: $tagname" 9540eb1301bSmrg ;; 9550eb1301bSmrg esac 956c43cc173Smrg 9570eb1301bSmrg # Don't test for the "default" C tag, as we know it's 9580eb1301bSmrg # there but not specially marked. 9590eb1301bSmrg case $tagname in 9600eb1301bSmrg CC) ;; 961c27c18e8Smrg *) 9620eb1301bSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 9630eb1301bSmrg taglist="$taglist $tagname" 9640eb1301bSmrg 9650eb1301bSmrg # Evaluate the configuration. Be careful to quote the path 9660eb1301bSmrg # and the sed script, to avoid splitting on whitespace, but 9670eb1301bSmrg # also don't use non-portable quotes within backquotes within 9680eb1301bSmrg # quotes we have to do it in 2 steps: 9690eb1301bSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 9700eb1301bSmrg eval "$extractedcf" 9710eb1301bSmrg else 9720eb1301bSmrg func_error "ignoring unknown tag $tagname" 9730eb1301bSmrg fi 9740eb1301bSmrg ;; 9750eb1301bSmrg esac 976c27c18e8Smrg} 977c27c18e8Smrg 978b789ec8aSmrg# func_check_version_match 979b789ec8aSmrg# Ensure that we are using m4 macros, and libtool script from the same 980b789ec8aSmrg# release of libtool. 981b789ec8aSmrgfunc_check_version_match () 982c27c18e8Smrg{ 9830eb1301bSmrg if test "$package_revision" != "$macro_revision"; then 9840eb1301bSmrg if test "$VERSION" != "$macro_version"; then 9850eb1301bSmrg if test -z "$macro_version"; then 9860eb1301bSmrg cat >&2 <<_LT_EOF 987b789ec8aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 988b789ec8aSmrg$progname: definition of this LT_INIT comes from an older release. 989b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 990b789ec8aSmrg$progname: and run autoconf again. 991b789ec8aSmrg_LT_EOF 9920eb1301bSmrg else 9930eb1301bSmrg cat >&2 <<_LT_EOF 994b789ec8aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 995b789ec8aSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 996b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 997b789ec8aSmrg$progname: and run autoconf again. 998b789ec8aSmrg_LT_EOF 9990eb1301bSmrg fi 10000eb1301bSmrg else 10010eb1301bSmrg cat >&2 <<_LT_EOF 1002b789ec8aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1003b789ec8aSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1004b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1005b789ec8aSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 1006b789ec8aSmrg_LT_EOF 100744584a44Smrg fi 1008b789ec8aSmrg 10090eb1301bSmrg exit $EXIT_MISMATCH 10100eb1301bSmrg fi 10110eb1301bSmrg} 1012b789ec8aSmrg 1013c43cc173Smrg 10140eb1301bSmrg# Shorthand for --mode=foo, only valid as the first argument 10150eb1301bSmrgcase $1 in 10160eb1301bSmrgclean|clea|cle|cl) 10170eb1301bSmrg shift; set dummy --mode clean ${1+"$@"}; shift 10180eb1301bSmrg ;; 10190eb1301bSmrgcompile|compil|compi|comp|com|co|c) 10200eb1301bSmrg shift; set dummy --mode compile ${1+"$@"}; shift 10210eb1301bSmrg ;; 10220eb1301bSmrgexecute|execut|execu|exec|exe|ex|e) 10230eb1301bSmrg shift; set dummy --mode execute ${1+"$@"}; shift 10240eb1301bSmrg ;; 10250eb1301bSmrgfinish|finis|fini|fin|fi|f) 10260eb1301bSmrg shift; set dummy --mode finish ${1+"$@"}; shift 10270eb1301bSmrg ;; 10280eb1301bSmrginstall|instal|insta|inst|ins|in|i) 10290eb1301bSmrg shift; set dummy --mode install ${1+"$@"}; shift 10300eb1301bSmrg ;; 10310eb1301bSmrglink|lin|li|l) 10320eb1301bSmrg shift; set dummy --mode link ${1+"$@"}; shift 10330eb1301bSmrg ;; 10340eb1301bSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 10350eb1301bSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 10360eb1301bSmrg ;; 10370eb1301bSmrgesac 1038b789ec8aSmrg 1039b789ec8aSmrg 104044584a44Smrg 10410eb1301bSmrg# Option defaults: 10420eb1301bSmrgopt_debug=: 10430eb1301bSmrgopt_dry_run=false 10440eb1301bSmrgopt_config=false 10450eb1301bSmrgopt_preserve_dup_deps=false 10460eb1301bSmrgopt_features=false 10470eb1301bSmrgopt_finish=false 10480eb1301bSmrgopt_help=false 10490eb1301bSmrgopt_help_all=false 10500eb1301bSmrgopt_silent=: 10510eb1301bSmrgopt_warning=: 10520eb1301bSmrgopt_verbose=: 10530eb1301bSmrgopt_silent=false 10540eb1301bSmrgopt_verbose=false 1055b789ec8aSmrg 1056b789ec8aSmrg 10570eb1301bSmrg# Parse options once, thoroughly. This comes as soon as possible in the 10580eb1301bSmrg# script to make things like `--version' happen as quickly as we can. 1059b789ec8aSmrg{ 10600eb1301bSmrg # this just eases exit handling 10610eb1301bSmrg while test $# -gt 0; do 10620eb1301bSmrg opt="$1" 10630eb1301bSmrg shift 10640eb1301bSmrg case $opt in 10650eb1301bSmrg --debug|-x) opt_debug='set -x' 10660eb1301bSmrg func_echo "enabling shell trace mode" 10670eb1301bSmrg $opt_debug 10680eb1301bSmrg ;; 10690eb1301bSmrg --dry-run|--dryrun|-n) 10700eb1301bSmrg opt_dry_run=: 10710eb1301bSmrg ;; 10720eb1301bSmrg --config) 10730eb1301bSmrg opt_config=: 10740eb1301bSmrgfunc_config 10750eb1301bSmrg ;; 10760eb1301bSmrg --dlopen|-dlopen) 10770eb1301bSmrg optarg="$1" 10780eb1301bSmrg opt_dlopen="${opt_dlopen+$opt_dlopen 10790eb1301bSmrg}$optarg" 10800eb1301bSmrg shift 10810eb1301bSmrg ;; 10820eb1301bSmrg --preserve-dup-deps) 10830eb1301bSmrg opt_preserve_dup_deps=: 10840eb1301bSmrg ;; 10850eb1301bSmrg --features) 10860eb1301bSmrg opt_features=: 10870eb1301bSmrgfunc_features 10880eb1301bSmrg ;; 10890eb1301bSmrg --finish) 10900eb1301bSmrg opt_finish=: 10910eb1301bSmrgset dummy --mode finish ${1+"$@"}; shift 10920eb1301bSmrg ;; 10930eb1301bSmrg --help) 10940eb1301bSmrg opt_help=: 10950eb1301bSmrg ;; 10960eb1301bSmrg --help-all) 10970eb1301bSmrg opt_help_all=: 10980eb1301bSmrgopt_help=': help-all' 10990eb1301bSmrg ;; 11000eb1301bSmrg --mode) 11010eb1301bSmrg test $# = 0 && func_missing_arg $opt && break 11020eb1301bSmrg optarg="$1" 11030eb1301bSmrg opt_mode="$optarg" 11040eb1301bSmrgcase $optarg in 11050eb1301bSmrg # Valid mode arguments: 11060eb1301bSmrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 11070eb1301bSmrg 11080eb1301bSmrg # Catch anything else as an error 11090eb1301bSmrg *) func_error "invalid argument for $opt" 11100eb1301bSmrg exit_cmd=exit 11110eb1301bSmrg break 11120eb1301bSmrg ;; 11130eb1301bSmrgesac 11140eb1301bSmrg shift 11150eb1301bSmrg ;; 11160eb1301bSmrg --no-silent|--no-quiet) 11170eb1301bSmrg opt_silent=false 11180eb1301bSmrgfunc_append preserve_args " $opt" 11190eb1301bSmrg ;; 11200eb1301bSmrg --no-warning|--no-warn) 11210eb1301bSmrg opt_warning=false 11220eb1301bSmrgfunc_append preserve_args " $opt" 11230eb1301bSmrg ;; 11240eb1301bSmrg --no-verbose) 11250eb1301bSmrg opt_verbose=false 11260eb1301bSmrgfunc_append preserve_args " $opt" 11270eb1301bSmrg ;; 11280eb1301bSmrg --silent|--quiet) 11290eb1301bSmrg opt_silent=: 11300eb1301bSmrgfunc_append preserve_args " $opt" 11310eb1301bSmrg opt_verbose=false 11320eb1301bSmrg ;; 11330eb1301bSmrg --verbose|-v) 11340eb1301bSmrg opt_verbose=: 11350eb1301bSmrgfunc_append preserve_args " $opt" 11360eb1301bSmrgopt_silent=false 11370eb1301bSmrg ;; 11380eb1301bSmrg --tag) 11390eb1301bSmrg test $# = 0 && func_missing_arg $opt && break 11400eb1301bSmrg optarg="$1" 11410eb1301bSmrg opt_tag="$optarg" 11420eb1301bSmrgfunc_append preserve_args " $opt $optarg" 11430eb1301bSmrgfunc_enable_tag "$optarg" 11440eb1301bSmrg shift 11450eb1301bSmrg ;; 11460eb1301bSmrg 11470eb1301bSmrg -\?|-h) func_usage ;; 11480eb1301bSmrg --help) func_help ;; 11490eb1301bSmrg --version) func_version ;; 11500eb1301bSmrg 11510eb1301bSmrg # Separate optargs to long options: 11520eb1301bSmrg --*=*) 11530eb1301bSmrg func_split_long_opt "$opt" 11540eb1301bSmrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 11550eb1301bSmrg shift 11560eb1301bSmrg ;; 11570eb1301bSmrg 11580eb1301bSmrg # Separate non-argument short options: 11590eb1301bSmrg -\?*|-h*|-n*|-v*) 11600eb1301bSmrg func_split_short_opt "$opt" 11610eb1301bSmrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 11620eb1301bSmrg shift 11630eb1301bSmrg ;; 11640eb1301bSmrg 11650eb1301bSmrg --) break ;; 11660eb1301bSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 11670eb1301bSmrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 11680eb1301bSmrg esac 11690eb1301bSmrg done 1170c27c18e8Smrg 11710eb1301bSmrg # Validate options: 1172b789ec8aSmrg 11730eb1301bSmrg # save first non-option argument 11740eb1301bSmrg if test "$#" -gt 0; then 11750eb1301bSmrg nonopt="$opt" 11760eb1301bSmrg shift 11770eb1301bSmrg fi 1178b789ec8aSmrg 11790eb1301bSmrg # preserve --debug 11800eb1301bSmrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181c27c18e8Smrg 11820eb1301bSmrg case $host in 11830eb1301bSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 11840eb1301bSmrg # don't eliminate duplications in $postdeps and $predeps 11850eb1301bSmrg opt_duplicate_compiler_generated_deps=: 11860eb1301bSmrg ;; 11870eb1301bSmrg *) 11880eb1301bSmrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 11890eb1301bSmrg ;; 11900eb1301bSmrg esac 1191c43cc173Smrg 11920eb1301bSmrg $opt_help || { 11930eb1301bSmrg # Sanity checks first: 11940eb1301bSmrg func_check_version_match 1195c27c18e8Smrg 11960eb1301bSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 11970eb1301bSmrg func_fatal_configuration "not configured to build any kind of library" 1198c27c18e8Smrg fi 1199c27c18e8Smrg 12000eb1301bSmrg # Darwin sucks 12010eb1301bSmrg eval std_shrext=\"$shrext_cmds\" 120244584a44Smrg 12030eb1301bSmrg # Only execute mode is allowed to have -dlopen flags. 12040eb1301bSmrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 12050eb1301bSmrg func_error "unrecognized option \`-dlopen'" 12060eb1301bSmrg $ECHO "$help" 1>&2 12070eb1301bSmrg exit $EXIT_FAILURE 12080eb1301bSmrg fi 120944584a44Smrg 12100eb1301bSmrg # Change the help message to a mode-specific one. 12110eb1301bSmrg generic_help="$help" 12120eb1301bSmrg help="Try \`$progname --help --mode=$opt_mode' for more information." 12130eb1301bSmrg } 1214c27c18e8Smrg 1215c27c18e8Smrg 12160eb1301bSmrg # Bail if the options were screwed 12170eb1301bSmrg $exit_cmd $EXIT_FAILURE 1218b789ec8aSmrg} 1219c27c18e8Smrg 122044584a44Smrg 1221c43cc173Smrg 1222c43cc173Smrg 1223b789ec8aSmrg## ----------- ## 1224b789ec8aSmrg## Main. ## 1225b789ec8aSmrg## ----------- ## 1226c43cc173Smrg 1227c27c18e8Smrg# func_lalib_p file 12280eb1301bSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 1230c27c18e8Smrg# determined imposters. 1231c27c18e8Smrgfunc_lalib_p () 1232c27c18e8Smrg{ 1233c27c18e8Smrg test -f "$1" && 12340eb1301bSmrg $SED -e 4q "$1" 2>/dev/null \ 12350eb1301bSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236c27c18e8Smrg} 1237c43cc173Smrg 1238c27c18e8Smrg# func_lalib_unsafe_p file 12390eb1301bSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240c27c18e8Smrg# This function implements the same check as func_lalib_p without 1241c27c18e8Smrg# resorting to external programs. To this end, it redirects stdin and 1242c27c18e8Smrg# closes it afterwards, without saving the original file descriptor. 1243c27c18e8Smrg# As a safety measure, use it only where a negative result would be 12440eb1301bSmrg# fatal anyway. Works if `file' does not exist. 1245c27c18e8Smrgfunc_lalib_unsafe_p () 1246c27c18e8Smrg{ 1247c27c18e8Smrg lalib_p=no 1248c27c18e8Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249c27c18e8Smrg for lalib_p_l in 1 2 3 4 1250c27c18e8Smrg do 1251c27c18e8Smrg read lalib_p_line 12520eb1301bSmrg case "$lalib_p_line" in 1253c27c18e8Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254c27c18e8Smrg esac 1255c27c18e8Smrg done 1256c27c18e8Smrg exec 0<&5 5<&- 1257c27c18e8Smrg fi 12580eb1301bSmrg test "$lalib_p" = yes 1259c27c18e8Smrg} 1260c43cc173Smrg 1261c27c18e8Smrg# func_ltwrapper_script_p file 1262c27c18e8Smrg# True iff FILE is a libtool wrapper script 1263c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 1264c27c18e8Smrg# determined imposters. 1265c27c18e8Smrgfunc_ltwrapper_script_p () 1266c27c18e8Smrg{ 12670eb1301bSmrg func_lalib_p "$1" 1268c27c18e8Smrg} 1269c43cc173Smrg 1270c27c18e8Smrg# func_ltwrapper_executable_p file 1271c27c18e8Smrg# True iff FILE is a libtool wrapper executable 1272c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 1273c27c18e8Smrg# determined imposters. 1274c27c18e8Smrgfunc_ltwrapper_executable_p () 1275c27c18e8Smrg{ 1276c27c18e8Smrg func_ltwrapper_exec_suffix= 1277c27c18e8Smrg case $1 in 1278c27c18e8Smrg *.exe) ;; 1279c27c18e8Smrg *) func_ltwrapper_exec_suffix=.exe ;; 1280c27c18e8Smrg esac 1281c27c18e8Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282c27c18e8Smrg} 1283c43cc173Smrg 1284c27c18e8Smrg# func_ltwrapper_scriptname file 1285c27c18e8Smrg# Assumes file is an ltwrapper_executable 1286c27c18e8Smrg# uses $file to determine the appropriate filename for a 1287c27c18e8Smrg# temporary ltwrapper_script. 1288c27c18e8Smrgfunc_ltwrapper_scriptname () 1289c27c18e8Smrg{ 1290b789ec8aSmrg func_dirname_and_basename "$1" "" "." 1291b789ec8aSmrg func_stripname '' '.exe' "$func_basename_result" 12920eb1301bSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293c27c18e8Smrg} 1294c27c18e8Smrg 1295c27c18e8Smrg# func_ltwrapper_p file 1296c27c18e8Smrg# True iff FILE is a libtool wrapper script or wrapper executable 1297c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 1298c27c18e8Smrg# determined imposters. 1299c27c18e8Smrgfunc_ltwrapper_p () 1300c27c18e8Smrg{ 1301c27c18e8Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302c27c18e8Smrg} 1303c27c18e8Smrg 1304c27c18e8Smrg 1305c27c18e8Smrg# func_execute_cmds commands fail_cmd 1306c27c18e8Smrg# Execute tilde-delimited COMMANDS. 1307c27c18e8Smrg# If FAIL_CMD is given, eval that upon failure. 1308c27c18e8Smrg# FAIL_CMD may read-access the current command in variable CMD! 1309c27c18e8Smrgfunc_execute_cmds () 1310c27c18e8Smrg{ 13110eb1301bSmrg $opt_debug 1312c27c18e8Smrg save_ifs=$IFS; IFS='~' 1313c27c18e8Smrg for cmd in $1; do 131444584a44Smrg IFS=$save_ifs 13150eb1301bSmrg eval cmd=\"$cmd\" 1316c27c18e8Smrg func_show_eval "$cmd" "${2-:}" 1317c27c18e8Smrg done 1318c27c18e8Smrg IFS=$save_ifs 1319c27c18e8Smrg} 1320c27c18e8Smrg 1321c27c18e8Smrg 1322c27c18e8Smrg# func_source file 1323c27c18e8Smrg# Source FILE, adding directory component if necessary. 1324c27c18e8Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325c27c18e8Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326c27c18e8Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 13270eb1301bSmrg# `FILE.' does not work on cygwin managed mounts. 1328c27c18e8Smrgfunc_source () 1329c27c18e8Smrg{ 13300eb1301bSmrg $opt_debug 1331c27c18e8Smrg case $1 in 1332c27c18e8Smrg */* | *\\*) . "$1" ;; 1333c27c18e8Smrg *) . "./$1" ;; 1334c27c18e8Smrg esac 1335c27c18e8Smrg} 1336c27c18e8Smrg 1337c27c18e8Smrg 1338b789ec8aSmrg# func_resolve_sysroot PATH 1339b789ec8aSmrg# Replace a leading = in PATH with a sysroot. Store the result into 1340b789ec8aSmrg# func_resolve_sysroot_result 1341b789ec8aSmrgfunc_resolve_sysroot () 1342b789ec8aSmrg{ 1343b789ec8aSmrg func_resolve_sysroot_result=$1 1344b789ec8aSmrg case $func_resolve_sysroot_result in 1345b789ec8aSmrg =*) 1346b789ec8aSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 1347b789ec8aSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1348b789ec8aSmrg ;; 1349b789ec8aSmrg esac 1350b789ec8aSmrg} 1351b789ec8aSmrg 1352b789ec8aSmrg# func_replace_sysroot PATH 1353b789ec8aSmrg# If PATH begins with the sysroot, replace it with = and 1354b789ec8aSmrg# store the result into func_replace_sysroot_result. 1355b789ec8aSmrgfunc_replace_sysroot () 1356b789ec8aSmrg{ 13570eb1301bSmrg case "$lt_sysroot:$1" in 1358b789ec8aSmrg ?*:"$lt_sysroot"*) 1359b789ec8aSmrg func_stripname "$lt_sysroot" '' "$1" 13600eb1301bSmrg func_replace_sysroot_result="=$func_stripname_result" 1361b789ec8aSmrg ;; 1362b789ec8aSmrg *) 1363b789ec8aSmrg # Including no sysroot. 1364b789ec8aSmrg func_replace_sysroot_result=$1 1365b789ec8aSmrg ;; 1366b789ec8aSmrg esac 1367b789ec8aSmrg} 1368b789ec8aSmrg 1369c27c18e8Smrg# func_infer_tag arg 1370c27c18e8Smrg# Infer tagged configuration to use if any are available and 1371c27c18e8Smrg# if one wasn't chosen via the "--tag" command line option. 1372c27c18e8Smrg# Only attempt this if the compiler in the base compile 1373c27c18e8Smrg# command doesn't match the default compiler. 1374c27c18e8Smrg# arg is usually of the form 'gcc ...' 1375c27c18e8Smrgfunc_infer_tag () 1376c27c18e8Smrg{ 13770eb1301bSmrg $opt_debug 1378c27c18e8Smrg if test -n "$available_tags" && test -z "$tagname"; then 1379c27c18e8Smrg CC_quoted= 1380c27c18e8Smrg for arg in $CC; do 1381b789ec8aSmrg func_append_quoted CC_quoted "$arg" 1382c27c18e8Smrg done 138337eb1ca1Smrg CC_expanded=`func_echo_all $CC` 138437eb1ca1Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385c27c18e8Smrg case $@ in 1386c27c18e8Smrg # Blanks in the command may have been stripped by the calling shell, 1387c27c18e8Smrg # but not from the CC environment variable when configure was run. 138837eb1ca1Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 138937eb1ca1Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390c27c18e8Smrg # Blanks at the start of $base_compile will cause this to fail 1391c27c18e8Smrg # if we don't check for them as well. 1392c27c18e8Smrg *) 1393c27c18e8Smrg for z in $available_tags; do 1394c27c18e8Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395c27c18e8Smrg # Evaluate the configuration. 13960eb1301bSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397c27c18e8Smrg CC_quoted= 1398c27c18e8Smrg for arg in $CC; do 1399c27c18e8Smrg # Double-quote args containing other shell metacharacters. 1400b789ec8aSmrg func_append_quoted CC_quoted "$arg" 1401c27c18e8Smrg done 140237eb1ca1Smrg CC_expanded=`func_echo_all $CC` 140337eb1ca1Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404c27c18e8Smrg case "$@ " in 140537eb1ca1Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 140637eb1ca1Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407c27c18e8Smrg # The compiler in the base compile command matches 1408c27c18e8Smrg # the one in the tagged configuration. 1409c27c18e8Smrg # Assume this is the tagged configuration we want. 1410c27c18e8Smrg tagname=$z 1411c27c18e8Smrg break 1412c27c18e8Smrg ;; 1413c27c18e8Smrg esac 1414c27c18e8Smrg fi 1415c27c18e8Smrg done 1416c27c18e8Smrg # If $tagname still isn't set, then no tagged configuration 1417c27c18e8Smrg # was found and let the user know that the "--tag" command 1418c27c18e8Smrg # line option must be used. 1419c27c18e8Smrg if test -z "$tagname"; then 1420c27c18e8Smrg func_echo "unable to infer tagged configuration" 14210eb1301bSmrg func_fatal_error "specify a tag with \`--tag'" 1422c27c18e8Smrg# else 1423c27c18e8Smrg# func_verbose "using $tagname tagged configuration" 1424c27c18e8Smrg fi 1425c27c18e8Smrg ;; 1426c27c18e8Smrg esac 1427c27c18e8Smrg fi 1428c27c18e8Smrg} 1429c27c18e8Smrg 1430c27c18e8Smrg 1431c27c18e8Smrg 1432b789ec8aSmrg# func_write_libtool_object output_name pic_name nonpic_name 1433b789ec8aSmrg# Create a libtool object file (analogous to a ".la" file), 1434b789ec8aSmrg# but don't create it if we're doing a dry run. 1435b789ec8aSmrgfunc_write_libtool_object () 1436b789ec8aSmrg{ 14370eb1301bSmrg write_libobj=${1} 14380eb1301bSmrg if test "$build_libtool_libs" = yes; then 14390eb1301bSmrg write_lobj=\'${2}\' 1440b789ec8aSmrg else 1441b789ec8aSmrg write_lobj=none 1442b789ec8aSmrg fi 1443b789ec8aSmrg 14440eb1301bSmrg if test "$build_old_libs" = yes; then 14450eb1301bSmrg write_oldobj=\'${3}\' 1446b789ec8aSmrg else 1447b789ec8aSmrg write_oldobj=none 1448b789ec8aSmrg fi 1449b789ec8aSmrg 1450b789ec8aSmrg $opt_dry_run || { 1451b789ec8aSmrg cat >${write_libobj}T <<EOF 1452b789ec8aSmrg# $write_libobj - a libtool object file 14530eb1301bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454b789ec8aSmrg# 1455b789ec8aSmrg# Please DO NOT delete this file! 1456b789ec8aSmrg# It is necessary for linking the library. 1457b789ec8aSmrg 1458b789ec8aSmrg# Name of the PIC object. 1459b789ec8aSmrgpic_object=$write_lobj 1460b789ec8aSmrg 1461b789ec8aSmrg# Name of the non-PIC object 1462b789ec8aSmrgnon_pic_object=$write_oldobj 1463b789ec8aSmrg 1464b789ec8aSmrgEOF 14650eb1301bSmrg $MV "${write_libobj}T" "${write_libobj}" 1466b789ec8aSmrg } 1467b789ec8aSmrg} 1468b789ec8aSmrg 1469b789ec8aSmrg 1470b789ec8aSmrg################################################## 1471b789ec8aSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1472b789ec8aSmrg################################################## 1473b789ec8aSmrg 1474b789ec8aSmrg# func_convert_core_file_wine_to_w32 ARG 1475b789ec8aSmrg# Helper function used by file name conversion functions when $build is *nix, 1476b789ec8aSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1477b789ec8aSmrg# correctly configured wine environment available, with the winepath program 1478b789ec8aSmrg# in $build's $PATH. 1479b789ec8aSmrg# 1480b789ec8aSmrg# ARG is the $build file name to be converted to w32 format. 1481b789ec8aSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1482b789ec8aSmrg# be empty on error (or when ARG is empty) 1483b789ec8aSmrgfunc_convert_core_file_wine_to_w32 () 1484b789ec8aSmrg{ 14850eb1301bSmrg $opt_debug 14860eb1301bSmrg func_convert_core_file_wine_to_w32_result="$1" 1487b789ec8aSmrg if test -n "$1"; then 1488b789ec8aSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 1489b789ec8aSmrg # are forced to check the contents of stdout. On the other hand, if the 1490b789ec8aSmrg # command is not found, the shell will set an exit code of 127 and print 1491b789ec8aSmrg # *an error message* to stdout. So we must check for both error code of 1492b789ec8aSmrg # zero AND non-empty stdout, which explains the odd construction: 1493b789ec8aSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 14940eb1301bSmrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1495b789ec8aSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 14960eb1301bSmrg $SED -e "$lt_sed_naive_backslashify"` 1497b789ec8aSmrg else 1498b789ec8aSmrg func_convert_core_file_wine_to_w32_result= 1499b789ec8aSmrg fi 1500b789ec8aSmrg fi 1501b789ec8aSmrg} 1502b789ec8aSmrg# end: func_convert_core_file_wine_to_w32 1503b789ec8aSmrg 1504b789ec8aSmrg 1505b789ec8aSmrg# func_convert_core_path_wine_to_w32 ARG 1506b789ec8aSmrg# Helper function used by path conversion functions when $build is *nix, and 1507b789ec8aSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1508b789ec8aSmrg# configured wine environment available, with the winepath program in $build's 1509b789ec8aSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 1510b789ec8aSmrg# 1511b789ec8aSmrg# ARG is path to be converted from $build format to win32. 1512b789ec8aSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 1513b789ec8aSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 1514b789ec8aSmrg# are convertible, then the result may be empty. 1515b789ec8aSmrgfunc_convert_core_path_wine_to_w32 () 1516b789ec8aSmrg{ 15170eb1301bSmrg $opt_debug 1518b789ec8aSmrg # unfortunately, winepath doesn't convert paths, only file names 15190eb1301bSmrg func_convert_core_path_wine_to_w32_result="" 1520b789ec8aSmrg if test -n "$1"; then 1521b789ec8aSmrg oldIFS=$IFS 1522b789ec8aSmrg IFS=: 1523b789ec8aSmrg for func_convert_core_path_wine_to_w32_f in $1; do 1524b789ec8aSmrg IFS=$oldIFS 1525b789ec8aSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 15260eb1301bSmrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1527b789ec8aSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 15280eb1301bSmrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1529b789ec8aSmrg else 1530b789ec8aSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1531b789ec8aSmrg fi 1532b789ec8aSmrg fi 1533b789ec8aSmrg done 1534b789ec8aSmrg IFS=$oldIFS 1535b789ec8aSmrg fi 1536b789ec8aSmrg} 1537b789ec8aSmrg# end: func_convert_core_path_wine_to_w32 1538b789ec8aSmrg 1539b789ec8aSmrg 1540b789ec8aSmrg# func_cygpath ARGS... 1541b789ec8aSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1542b789ec8aSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1543b789ec8aSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1544b789ec8aSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 1545b789ec8aSmrg# file name or path is assumed to be in w32 format, as previously converted 1546b789ec8aSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1547b789ec8aSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 1548b789ec8aSmrg# Cygwin format). Returns an empty string on error. 1549b789ec8aSmrg# 1550b789ec8aSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 1551b789ec8aSmrg# be converted. 1552b789ec8aSmrg# 1553b789ec8aSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1554b789ec8aSmrg# environment variable; do not put it in $PATH. 1555b789ec8aSmrgfunc_cygpath () 1556b789ec8aSmrg{ 15570eb1301bSmrg $opt_debug 1558b789ec8aSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1559b789ec8aSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1560b789ec8aSmrg if test "$?" -ne 0; then 1561b789ec8aSmrg # on failure, ensure result is empty 1562b789ec8aSmrg func_cygpath_result= 1563b789ec8aSmrg fi 1564b789ec8aSmrg else 1565b789ec8aSmrg func_cygpath_result= 15660eb1301bSmrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1567b789ec8aSmrg fi 1568b789ec8aSmrg} 1569b789ec8aSmrg#end: func_cygpath 1570b789ec8aSmrg 1571b789ec8aSmrg 1572b789ec8aSmrg# func_convert_core_msys_to_w32 ARG 1573b789ec8aSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 1574b789ec8aSmrg# result in func_convert_core_msys_to_w32_result. 1575b789ec8aSmrgfunc_convert_core_msys_to_w32 () 1576b789ec8aSmrg{ 15770eb1301bSmrg $opt_debug 1578b789ec8aSmrg # awkward: cmd appends spaces to result 1579b789ec8aSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 15800eb1301bSmrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1581b789ec8aSmrg} 1582b789ec8aSmrg#end: func_convert_core_msys_to_w32 1583b789ec8aSmrg 1584b789ec8aSmrg 1585b789ec8aSmrg# func_convert_file_check ARG1 ARG2 1586b789ec8aSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 1587b789ec8aSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 1588b789ec8aSmrg# func_to_host_file_result to ARG1). 1589b789ec8aSmrgfunc_convert_file_check () 1590b789ec8aSmrg{ 15910eb1301bSmrg $opt_debug 15920eb1301bSmrg if test -z "$2" && test -n "$1" ; then 1593b789ec8aSmrg func_error "Could not determine host file name corresponding to" 15940eb1301bSmrg func_error " \`$1'" 1595b789ec8aSmrg func_error "Continuing, but uninstalled executables may not work." 1596b789ec8aSmrg # Fallback: 15970eb1301bSmrg func_to_host_file_result="$1" 1598b789ec8aSmrg fi 1599b789ec8aSmrg} 1600b789ec8aSmrg# end func_convert_file_check 1601b789ec8aSmrg 1602b789ec8aSmrg 1603b789ec8aSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1604b789ec8aSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 1605b789ec8aSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1606b789ec8aSmrg# func_to_host_file_result to a simplistic fallback value (see below). 1607b789ec8aSmrgfunc_convert_path_check () 1608b789ec8aSmrg{ 16090eb1301bSmrg $opt_debug 1610b789ec8aSmrg if test -z "$4" && test -n "$3"; then 1611b789ec8aSmrg func_error "Could not determine the host path corresponding to" 16120eb1301bSmrg func_error " \`$3'" 1613b789ec8aSmrg func_error "Continuing, but uninstalled executables may not work." 1614b789ec8aSmrg # Fallback. This is a deliberately simplistic "conversion" and 1615b789ec8aSmrg # should not be "improved". See libtool.info. 1616b789ec8aSmrg if test "x$1" != "x$2"; then 1617b789ec8aSmrg lt_replace_pathsep_chars="s|$1|$2|g" 1618b789ec8aSmrg func_to_host_path_result=`echo "$3" | 1619b789ec8aSmrg $SED -e "$lt_replace_pathsep_chars"` 1620b789ec8aSmrg else 16210eb1301bSmrg func_to_host_path_result="$3" 1622b789ec8aSmrg fi 1623b789ec8aSmrg fi 1624b789ec8aSmrg} 1625b789ec8aSmrg# end func_convert_path_check 1626b789ec8aSmrg 1627b789ec8aSmrg 1628b789ec8aSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1629b789ec8aSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1630b789ec8aSmrg# and appending REPL if ORIG matches BACKPAT. 1631b789ec8aSmrgfunc_convert_path_front_back_pathsep () 1632b789ec8aSmrg{ 16330eb1301bSmrg $opt_debug 1634b789ec8aSmrg case $4 in 16350eb1301bSmrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1636b789ec8aSmrg ;; 1637b789ec8aSmrg esac 1638b789ec8aSmrg case $4 in 1639b789ec8aSmrg $2 ) func_append func_to_host_path_result "$3" 1640b789ec8aSmrg ;; 1641b789ec8aSmrg esac 1642b789ec8aSmrg} 1643b789ec8aSmrg# end func_convert_path_front_back_pathsep 1644b789ec8aSmrg 1645b789ec8aSmrg 1646b789ec8aSmrg################################################## 1647b789ec8aSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 1648b789ec8aSmrg################################################## 16490eb1301bSmrg# invoked via `$to_host_file_cmd ARG' 1650b789ec8aSmrg# 1651b789ec8aSmrg# In each case, ARG is the path to be converted from $build to $host format. 1652b789ec8aSmrg# Result will be available in $func_to_host_file_result. 1653b789ec8aSmrg 1654b789ec8aSmrg 1655b789ec8aSmrg# func_to_host_file ARG 1656b789ec8aSmrg# Converts the file name ARG from $build format to $host format. Return result 1657b789ec8aSmrg# in func_to_host_file_result. 1658b789ec8aSmrgfunc_to_host_file () 1659b789ec8aSmrg{ 16600eb1301bSmrg $opt_debug 1661b789ec8aSmrg $to_host_file_cmd "$1" 1662b789ec8aSmrg} 1663b789ec8aSmrg# end func_to_host_file 1664b789ec8aSmrg 1665b789ec8aSmrg 1666b789ec8aSmrg# func_to_tool_file ARG LAZY 1667b789ec8aSmrg# converts the file name ARG from $build format to toolchain format. Return 1668b789ec8aSmrg# result in func_to_tool_file_result. If the conversion in use is listed 1669b789ec8aSmrg# in (the comma separated) LAZY, no conversion takes place. 1670b789ec8aSmrgfunc_to_tool_file () 1671b789ec8aSmrg{ 16720eb1301bSmrg $opt_debug 1673b789ec8aSmrg case ,$2, in 1674b789ec8aSmrg *,"$to_tool_file_cmd",*) 1675b789ec8aSmrg func_to_tool_file_result=$1 1676b789ec8aSmrg ;; 1677b789ec8aSmrg *) 1678b789ec8aSmrg $to_tool_file_cmd "$1" 1679b789ec8aSmrg func_to_tool_file_result=$func_to_host_file_result 1680b789ec8aSmrg ;; 1681b789ec8aSmrg esac 1682b789ec8aSmrg} 1683b789ec8aSmrg# end func_to_tool_file 1684b789ec8aSmrg 1685b789ec8aSmrg 1686b789ec8aSmrg# func_convert_file_noop ARG 1687b789ec8aSmrg# Copy ARG to func_to_host_file_result. 1688b789ec8aSmrgfunc_convert_file_noop () 1689b789ec8aSmrg{ 16900eb1301bSmrg func_to_host_file_result="$1" 1691b789ec8aSmrg} 1692b789ec8aSmrg# end func_convert_file_noop 1693b789ec8aSmrg 1694b789ec8aSmrg 1695b789ec8aSmrg# func_convert_file_msys_to_w32 ARG 1696b789ec8aSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1697b789ec8aSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 1698b789ec8aSmrg# func_to_host_file_result. 1699b789ec8aSmrgfunc_convert_file_msys_to_w32 () 1700b789ec8aSmrg{ 17010eb1301bSmrg $opt_debug 17020eb1301bSmrg func_to_host_file_result="$1" 1703b789ec8aSmrg if test -n "$1"; then 1704b789ec8aSmrg func_convert_core_msys_to_w32 "$1" 17050eb1301bSmrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1706b789ec8aSmrg fi 1707b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1708b789ec8aSmrg} 1709b789ec8aSmrg# end func_convert_file_msys_to_w32 1710b789ec8aSmrg 1711b789ec8aSmrg 1712b789ec8aSmrg# func_convert_file_cygwin_to_w32 ARG 1713b789ec8aSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 1714b789ec8aSmrg# func_to_host_file_result. 1715b789ec8aSmrgfunc_convert_file_cygwin_to_w32 () 1716b789ec8aSmrg{ 17170eb1301bSmrg $opt_debug 17180eb1301bSmrg func_to_host_file_result="$1" 1719b789ec8aSmrg if test -n "$1"; then 1720b789ec8aSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1721b789ec8aSmrg # LT_CYGPATH in this case. 1722b789ec8aSmrg func_to_host_file_result=`cygpath -m "$1"` 1723b789ec8aSmrg fi 1724b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1725b789ec8aSmrg} 1726b789ec8aSmrg# end func_convert_file_cygwin_to_w32 1727b789ec8aSmrg 1728b789ec8aSmrg 1729b789ec8aSmrg# func_convert_file_nix_to_w32 ARG 1730b789ec8aSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 1731b789ec8aSmrg# and a working winepath. Returns result in func_to_host_file_result. 1732b789ec8aSmrgfunc_convert_file_nix_to_w32 () 1733b789ec8aSmrg{ 17340eb1301bSmrg $opt_debug 17350eb1301bSmrg func_to_host_file_result="$1" 1736b789ec8aSmrg if test -n "$1"; then 1737b789ec8aSmrg func_convert_core_file_wine_to_w32 "$1" 17380eb1301bSmrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1739b789ec8aSmrg fi 1740b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1741b789ec8aSmrg} 1742b789ec8aSmrg# end func_convert_file_nix_to_w32 1743b789ec8aSmrg 1744b789ec8aSmrg 1745b789ec8aSmrg# func_convert_file_msys_to_cygwin ARG 1746b789ec8aSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1747b789ec8aSmrg# Returns result in func_to_host_file_result. 1748b789ec8aSmrgfunc_convert_file_msys_to_cygwin () 1749b789ec8aSmrg{ 17500eb1301bSmrg $opt_debug 17510eb1301bSmrg func_to_host_file_result="$1" 1752b789ec8aSmrg if test -n "$1"; then 1753b789ec8aSmrg func_convert_core_msys_to_w32 "$1" 1754b789ec8aSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 17550eb1301bSmrg func_to_host_file_result="$func_cygpath_result" 1756b789ec8aSmrg fi 1757b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1758b789ec8aSmrg} 1759b789ec8aSmrg# end func_convert_file_msys_to_cygwin 1760b789ec8aSmrg 1761b789ec8aSmrg 1762b789ec8aSmrg# func_convert_file_nix_to_cygwin ARG 1763b789ec8aSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1764b789ec8aSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1765b789ec8aSmrg# in func_to_host_file_result. 1766b789ec8aSmrgfunc_convert_file_nix_to_cygwin () 1767b789ec8aSmrg{ 17680eb1301bSmrg $opt_debug 17690eb1301bSmrg func_to_host_file_result="$1" 1770b789ec8aSmrg if test -n "$1"; then 1771b789ec8aSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1772b789ec8aSmrg func_convert_core_file_wine_to_w32 "$1" 1773b789ec8aSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 17740eb1301bSmrg func_to_host_file_result="$func_cygpath_result" 1775b789ec8aSmrg fi 1776b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1777b789ec8aSmrg} 1778b789ec8aSmrg# end func_convert_file_nix_to_cygwin 1779b789ec8aSmrg 1780b789ec8aSmrg 1781b789ec8aSmrg############################################# 1782b789ec8aSmrg# $build to $host PATH CONVERSION FUNCTIONS # 1783b789ec8aSmrg############################################# 17840eb1301bSmrg# invoked via `$to_host_path_cmd ARG' 1785b789ec8aSmrg# 1786b789ec8aSmrg# In each case, ARG is the path to be converted from $build to $host format. 1787b789ec8aSmrg# The result will be available in $func_to_host_path_result. 1788b789ec8aSmrg# 1789b789ec8aSmrg# Path separators are also converted from $build format to $host format. If 1790b789ec8aSmrg# ARG begins or ends with a path separator character, it is preserved (but 1791b789ec8aSmrg# converted to $host format) on output. 1792b789ec8aSmrg# 1793b789ec8aSmrg# All path conversion functions are named using the following convention: 1794b789ec8aSmrg# file name conversion function : func_convert_file_X_to_Y () 1795b789ec8aSmrg# path conversion function : func_convert_path_X_to_Y () 1796b789ec8aSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 1797b789ec8aSmrg# same. If conversion functions are added for new $build/$host combinations, 1798b789ec8aSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1799b789ec8aSmrg# will break. 1800b789ec8aSmrg 1801b789ec8aSmrg 1802b789ec8aSmrg# func_init_to_host_path_cmd 1803b789ec8aSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1804b789ec8aSmrg# appropriate value, based on the value of $to_host_file_cmd. 1805b789ec8aSmrgto_host_path_cmd= 1806b789ec8aSmrgfunc_init_to_host_path_cmd () 1807b789ec8aSmrg{ 18080eb1301bSmrg $opt_debug 1809b789ec8aSmrg if test -z "$to_host_path_cmd"; then 1810b789ec8aSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 18110eb1301bSmrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 1812b789ec8aSmrg fi 1813b789ec8aSmrg} 1814b789ec8aSmrg 1815b789ec8aSmrg 1816b789ec8aSmrg# func_to_host_path ARG 1817b789ec8aSmrg# Converts the path ARG from $build format to $host format. Return result 1818b789ec8aSmrg# in func_to_host_path_result. 1819b789ec8aSmrgfunc_to_host_path () 1820b789ec8aSmrg{ 18210eb1301bSmrg $opt_debug 1822b789ec8aSmrg func_init_to_host_path_cmd 1823b789ec8aSmrg $to_host_path_cmd "$1" 1824b789ec8aSmrg} 1825b789ec8aSmrg# end func_to_host_path 1826b789ec8aSmrg 1827b789ec8aSmrg 1828b789ec8aSmrg# func_convert_path_noop ARG 1829b789ec8aSmrg# Copy ARG to func_to_host_path_result. 1830b789ec8aSmrgfunc_convert_path_noop () 1831b789ec8aSmrg{ 18320eb1301bSmrg func_to_host_path_result="$1" 1833b789ec8aSmrg} 1834b789ec8aSmrg# end func_convert_path_noop 1835b789ec8aSmrg 1836b789ec8aSmrg 1837b789ec8aSmrg# func_convert_path_msys_to_w32 ARG 1838b789ec8aSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1839b789ec8aSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 1840b789ec8aSmrg# func_to_host_path_result. 1841b789ec8aSmrgfunc_convert_path_msys_to_w32 () 1842c27c18e8Smrg{ 18430eb1301bSmrg $opt_debug 18440eb1301bSmrg func_to_host_path_result="$1" 1845b789ec8aSmrg if test -n "$1"; then 1846b789ec8aSmrg # Remove leading and trailing path separator characters from ARG. MSYS 1847b789ec8aSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1848b789ec8aSmrg # and winepath ignores them completely. 1849b789ec8aSmrg func_stripname : : "$1" 1850b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 1851b789ec8aSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 18520eb1301bSmrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1853b789ec8aSmrg func_convert_path_check : ";" \ 1854b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1855b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1856b789ec8aSmrg fi 1857b789ec8aSmrg} 1858b789ec8aSmrg# end func_convert_path_msys_to_w32 1859c27c18e8Smrg 1860c27c18e8Smrg 1861b789ec8aSmrg# func_convert_path_cygwin_to_w32 ARG 1862b789ec8aSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 1863b789ec8aSmrg# func_to_host_file_result. 1864b789ec8aSmrgfunc_convert_path_cygwin_to_w32 () 1865b789ec8aSmrg{ 18660eb1301bSmrg $opt_debug 18670eb1301bSmrg func_to_host_path_result="$1" 1868b789ec8aSmrg if test -n "$1"; then 1869b789ec8aSmrg # See func_convert_path_msys_to_w32: 1870b789ec8aSmrg func_stripname : : "$1" 1871b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 1872b789ec8aSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1873b789ec8aSmrg func_convert_path_check : ";" \ 1874b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1875b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1876b789ec8aSmrg fi 1877b789ec8aSmrg} 1878b789ec8aSmrg# end func_convert_path_cygwin_to_w32 1879c27c18e8Smrg 1880c27c18e8Smrg 1881b789ec8aSmrg# func_convert_path_nix_to_w32 ARG 1882b789ec8aSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 1883b789ec8aSmrg# a working winepath. Returns result in func_to_host_file_result. 1884b789ec8aSmrgfunc_convert_path_nix_to_w32 () 1885b789ec8aSmrg{ 18860eb1301bSmrg $opt_debug 18870eb1301bSmrg func_to_host_path_result="$1" 1888b789ec8aSmrg if test -n "$1"; then 1889b789ec8aSmrg # See func_convert_path_msys_to_w32: 1890b789ec8aSmrg func_stripname : : "$1" 1891b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 1892b789ec8aSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 18930eb1301bSmrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1894b789ec8aSmrg func_convert_path_check : ";" \ 1895b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1896b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1897b789ec8aSmrg fi 1898b789ec8aSmrg} 1899b789ec8aSmrg# end func_convert_path_nix_to_w32 1900c27c18e8Smrg 1901b789ec8aSmrg 1902b789ec8aSmrg# func_convert_path_msys_to_cygwin ARG 1903b789ec8aSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1904b789ec8aSmrg# Returns result in func_to_host_file_result. 1905b789ec8aSmrgfunc_convert_path_msys_to_cygwin () 1906b789ec8aSmrg{ 19070eb1301bSmrg $opt_debug 19080eb1301bSmrg func_to_host_path_result="$1" 1909b789ec8aSmrg if test -n "$1"; then 1910b789ec8aSmrg # See func_convert_path_msys_to_w32: 1911b789ec8aSmrg func_stripname : : "$1" 1912b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 1913b789ec8aSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1914b789ec8aSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 19150eb1301bSmrg func_to_host_path_result="$func_cygpath_result" 1916b789ec8aSmrg func_convert_path_check : : \ 1917b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1918b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1919b789ec8aSmrg fi 1920b789ec8aSmrg} 1921b789ec8aSmrg# end func_convert_path_msys_to_cygwin 1922b789ec8aSmrg 1923b789ec8aSmrg 1924b789ec8aSmrg# func_convert_path_nix_to_cygwin ARG 1925b789ec8aSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1926b789ec8aSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1927b789ec8aSmrg# func_to_host_file_result. 1928b789ec8aSmrgfunc_convert_path_nix_to_cygwin () 1929b789ec8aSmrg{ 19300eb1301bSmrg $opt_debug 19310eb1301bSmrg func_to_host_path_result="$1" 1932b789ec8aSmrg if test -n "$1"; then 1933b789ec8aSmrg # Remove leading and trailing path separator characters from 1934b789ec8aSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 1935b789ec8aSmrg # into '.;' and ';.', and winepath ignores them completely. 1936b789ec8aSmrg func_stripname : : "$1" 1937b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 1938b789ec8aSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1939b789ec8aSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 19400eb1301bSmrg func_to_host_path_result="$func_cygpath_result" 1941b789ec8aSmrg func_convert_path_check : : \ 1942b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1943b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1944b789ec8aSmrg fi 1945c27c18e8Smrg} 1946b789ec8aSmrg# end func_convert_path_nix_to_cygwin 1947b789ec8aSmrg 1948c27c18e8Smrg 1949c27c18e8Smrg# func_mode_compile arg... 1950c27c18e8Smrgfunc_mode_compile () 1951c27c18e8Smrg{ 19520eb1301bSmrg $opt_debug 1953c27c18e8Smrg # Get the compilation command and the source file. 1954c27c18e8Smrg base_compile= 19550eb1301bSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956c27c18e8Smrg suppress_opt=yes 1957c27c18e8Smrg suppress_output= 1958c27c18e8Smrg arg_mode=normal 1959c27c18e8Smrg libobj= 1960c27c18e8Smrg later= 1961c27c18e8Smrg pie_flag= 1962c27c18e8Smrg 1963c27c18e8Smrg for arg 1964c27c18e8Smrg do 1965c27c18e8Smrg case $arg_mode in 1966c27c18e8Smrg arg ) 1967c27c18e8Smrg # do not "continue". Instead, add this to base_compile 19680eb1301bSmrg lastarg="$arg" 1969c27c18e8Smrg arg_mode=normal 1970c27c18e8Smrg ;; 1971c27c18e8Smrg 1972c27c18e8Smrg target ) 19730eb1301bSmrg libobj="$arg" 1974c27c18e8Smrg arg_mode=normal 1975c27c18e8Smrg continue 1976c27c18e8Smrg ;; 1977c27c18e8Smrg 1978c27c18e8Smrg normal ) 1979c27c18e8Smrg # Accept any command-line options. 1980c27c18e8Smrg case $arg in 1981c27c18e8Smrg -o) 1982c27c18e8Smrg test -n "$libobj" && \ 19830eb1301bSmrg func_fatal_error "you cannot specify \`-o' more than once" 1984c27c18e8Smrg arg_mode=target 1985c27c18e8Smrg continue 1986c27c18e8Smrg ;; 1987c27c18e8Smrg 1988c27c18e8Smrg -pie | -fpie | -fPIE) 1989b789ec8aSmrg func_append pie_flag " $arg" 1990c27c18e8Smrg continue 1991c27c18e8Smrg ;; 1992c27c18e8Smrg 1993c27c18e8Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1994b789ec8aSmrg func_append later " $arg" 1995c27c18e8Smrg continue 1996c27c18e8Smrg ;; 1997c27c18e8Smrg 1998c27c18e8Smrg -no-suppress) 1999c43cc173Smrg suppress_opt=no 2000c43cc173Smrg continue 2001c43cc173Smrg ;; 2002c43cc173Smrg 2003c43cc173Smrg -Xcompiler) 2004c43cc173Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 2005c43cc173Smrg continue # The current "srcfile" will either be retained or 2006c43cc173Smrg ;; # replaced later. I would guess that would be a bug. 2007c43cc173Smrg 2008c43cc173Smrg -Wc,*) 2009c27c18e8Smrg func_stripname '-Wc,' '' "$arg" 2010c27c18e8Smrg args=$func_stripname_result 2011c43cc173Smrg lastarg= 20120eb1301bSmrg save_ifs="$IFS"; IFS=',' 2013c27c18e8Smrg for arg in $args; do 20140eb1301bSmrg IFS="$save_ifs" 2015b789ec8aSmrg func_append_quoted lastarg "$arg" 2016c43cc173Smrg done 20170eb1301bSmrg IFS="$save_ifs" 2018c27c18e8Smrg func_stripname ' ' '' "$lastarg" 2019c27c18e8Smrg lastarg=$func_stripname_result 2020c43cc173Smrg 2021c43cc173Smrg # Add the arguments to base_compile. 2022b789ec8aSmrg func_append base_compile " $lastarg" 2023c43cc173Smrg continue 2024c43cc173Smrg ;; 2025c43cc173Smrg 2026c27c18e8Smrg *) 2027c43cc173Smrg # Accept the current argument as the source file. 2028c43cc173Smrg # The previous "srcfile" becomes the current argument. 2029c43cc173Smrg # 20300eb1301bSmrg lastarg="$srcfile" 20310eb1301bSmrg srcfile="$arg" 2032c43cc173Smrg ;; 2033c43cc173Smrg esac # case $arg 2034c43cc173Smrg ;; 2035c43cc173Smrg esac # case $arg_mode 2036c43cc173Smrg 2037c43cc173Smrg # Aesthetically quote the previous argument. 2038b789ec8aSmrg func_append_quoted base_compile "$lastarg" 2039c43cc173Smrg done # for arg 2040c43cc173Smrg 2041c43cc173Smrg case $arg_mode in 2042c43cc173Smrg arg) 2043c27c18e8Smrg func_fatal_error "you must specify an argument for -Xcompile" 2044c43cc173Smrg ;; 2045c43cc173Smrg target) 20460eb1301bSmrg func_fatal_error "you must specify a target with \`-o'" 2047c43cc173Smrg ;; 2048c43cc173Smrg *) 2049c43cc173Smrg # Get the name of the library object. 2050c27c18e8Smrg test -z "$libobj" && { 2051c27c18e8Smrg func_basename "$srcfile" 20520eb1301bSmrg libobj="$func_basename_result" 2053c27c18e8Smrg } 2054c43cc173Smrg ;; 2055c43cc173Smrg esac 2056c43cc173Smrg 2057c43cc173Smrg # Recognize several different file suffixes. 2058c43cc173Smrg # If the user specifies -o file.o, it is replaced with file.lo 2059c43cc173Smrg case $libobj in 2060c27c18e8Smrg *.[cCFSifmso] | \ 2061c27c18e8Smrg *.ada | *.adb | *.ads | *.asm | \ 2062c27c18e8Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063f1ee322dSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064c27c18e8Smrg func_xform "$libobj" 2065c27c18e8Smrg libobj=$func_xform_result 2066c27c18e8Smrg ;; 2067c43cc173Smrg esac 2068c43cc173Smrg 2069c43cc173Smrg case $libobj in 2070c27c18e8Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071c43cc173Smrg *) 20720eb1301bSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2073c43cc173Smrg ;; 2074c43cc173Smrg esac 2075c43cc173Smrg 2076c43cc173Smrg func_infer_tag $base_compile 2077c43cc173Smrg 2078c43cc173Smrg for arg in $later; do 2079c43cc173Smrg case $arg in 2080c27c18e8Smrg -shared) 20810eb1301bSmrg test "$build_libtool_libs" != yes && \ 20820eb1301bSmrg func_fatal_configuration "can not build a shared library" 2083c27c18e8Smrg build_old_libs=no 2084c27c18e8Smrg continue 2085c27c18e8Smrg ;; 2086c27c18e8Smrg 2087c43cc173Smrg -static) 2088c27c18e8Smrg build_libtool_libs=no 2089c43cc173Smrg build_old_libs=yes 2090c43cc173Smrg continue 2091c43cc173Smrg ;; 2092c43cc173Smrg 2093c43cc173Smrg -prefer-pic) 2094c43cc173Smrg pic_mode=yes 2095c43cc173Smrg continue 2096c43cc173Smrg ;; 2097c43cc173Smrg 2098c43cc173Smrg -prefer-non-pic) 2099c43cc173Smrg pic_mode=no 2100c43cc173Smrg continue 2101c43cc173Smrg ;; 2102c43cc173Smrg esac 2103c43cc173Smrg done 2104c43cc173Smrg 2105c27c18e8Smrg func_quote_for_eval "$libobj" 2106c27c18e8Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107c27c18e8Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 21080eb1301bSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109c27c18e8Smrg func_dirname_and_basename "$obj" "/" "" 21100eb1301bSmrg objname="$func_basename_result" 21110eb1301bSmrg xdir="$func_dirname_result" 21120eb1301bSmrg lobj=${xdir}$objdir/$objname 2113c43cc173Smrg 2114c27c18e8Smrg test -z "$base_compile" && \ 2115c27c18e8Smrg func_fatal_help "you must specify a compilation command" 2116c43cc173Smrg 2117c43cc173Smrg # Delete any leftover library objects. 21180eb1301bSmrg if test "$build_old_libs" = yes; then 2119c43cc173Smrg removelist="$obj $lobj $libobj ${libobj}T" 2120c43cc173Smrg else 2121c43cc173Smrg removelist="$lobj $libobj ${libobj}T" 2122c43cc173Smrg fi 2123c43cc173Smrg 2124c43cc173Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 2125c43cc173Smrg case $host_os in 2126c27c18e8Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2127c43cc173Smrg pic_mode=default 2128c43cc173Smrg ;; 2129c43cc173Smrg esac 21300eb1301bSmrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131c43cc173Smrg # non-PIC code in shared libraries is not supported 2132c43cc173Smrg pic_mode=default 2133c43cc173Smrg fi 2134c43cc173Smrg 2135c43cc173Smrg # Calculate the filename of the output object if compiler does 2136c43cc173Smrg # not support -o with -c 21370eb1301bSmrg if test "$compiler_c_o" = no; then 21380eb1301bSmrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 21390eb1301bSmrg lockfile="$output_obj.lock" 2140c43cc173Smrg else 2141c43cc173Smrg output_obj= 2142c43cc173Smrg need_locks=no 2143c43cc173Smrg lockfile= 2144c43cc173Smrg fi 2145c43cc173Smrg 2146c43cc173Smrg # Lock this critical section if it is needed 2147c43cc173Smrg # We use this script file to make the link, it avoids creating a new file 21480eb1301bSmrg if test "$need_locks" = yes; then 2149c27c18e8Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150c27c18e8Smrg func_echo "Waiting for $lockfile to be removed" 2151c43cc173Smrg sleep 2 2152c43cc173Smrg done 21530eb1301bSmrg elif test "$need_locks" = warn; then 2154c43cc173Smrg if test -f "$lockfile"; then 2155c27c18e8Smrg $ECHO "\ 2156c43cc173Smrg*** ERROR, $lockfile exists and contains: 2157c43cc173Smrg`cat $lockfile 2>/dev/null` 2158c43cc173Smrg 2159c43cc173SmrgThis indicates that another process is trying to use the same 2160c43cc173Smrgtemporary object file, and libtool could not work around it because 21610eb1301bSmrgyour compiler does not support \`-c' and \`-o' together. If you 2162c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 2163c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 2164c43cc173Smrgcompiler." 2165c43cc173Smrg 2166c27c18e8Smrg $opt_dry_run || $RM $removelist 2167c43cc173Smrg exit $EXIT_FAILURE 2168c43cc173Smrg fi 2169b789ec8aSmrg func_append removelist " $output_obj" 2170c27c18e8Smrg $ECHO "$srcfile" > "$lockfile" 2171c43cc173Smrg fi 2172c43cc173Smrg 2173c27c18e8Smrg $opt_dry_run || $RM $removelist 2174b789ec8aSmrg func_append removelist " $lockfile" 2175c27c18e8Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176c27c18e8Smrg 2177b789ec8aSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2178b789ec8aSmrg srcfile=$func_to_tool_file_result 2179c27c18e8Smrg func_quote_for_eval "$srcfile" 2180c27c18e8Smrg qsrcfile=$func_quote_for_eval_result 2181c43cc173Smrg 2182c43cc173Smrg # Only build a PIC object if we are building libtool libraries. 21830eb1301bSmrg if test "$build_libtool_libs" = yes; then 2184c43cc173Smrg # Without this assignment, base_compile gets emptied. 2185c43cc173Smrg fbsd_hideous_sh_bug=$base_compile 2186c43cc173Smrg 21870eb1301bSmrg if test "$pic_mode" != no; then 2188c43cc173Smrg command="$base_compile $qsrcfile $pic_flag" 2189c43cc173Smrg else 2190c43cc173Smrg # Don't build PIC code 2191c43cc173Smrg command="$base_compile $qsrcfile" 2192c43cc173Smrg fi 2193c43cc173Smrg 2194c27c18e8Smrg func_mkdir_p "$xdir$objdir" 2195c43cc173Smrg 2196c43cc173Smrg if test -z "$output_obj"; then 2197c43cc173Smrg # Place PIC objects in $objdir 2198b789ec8aSmrg func_append command " -o $lobj" 2199c43cc173Smrg fi 2200c43cc173Smrg 2201c27c18e8Smrg func_show_eval_locale "$command" \ 2202c27c18e8Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203c43cc173Smrg 22040eb1301bSmrg if test "$need_locks" = warn && 2205c43cc173Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206c27c18e8Smrg $ECHO "\ 2207c43cc173Smrg*** ERROR, $lockfile contains: 2208c43cc173Smrg`cat $lockfile 2>/dev/null` 2209c43cc173Smrg 2210c43cc173Smrgbut it should contain: 2211c43cc173Smrg$srcfile 2212c43cc173Smrg 2213c43cc173SmrgThis indicates that another process is trying to use the same 2214c43cc173Smrgtemporary object file, and libtool could not work around it because 22150eb1301bSmrgyour compiler does not support \`-c' and \`-o' together. If you 2216c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 2217c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 2218c43cc173Smrgcompiler." 2219c43cc173Smrg 2220c27c18e8Smrg $opt_dry_run || $RM $removelist 2221c43cc173Smrg exit $EXIT_FAILURE 2222c43cc173Smrg fi 2223c43cc173Smrg 2224c43cc173Smrg # Just move the object if needed, then go on to compile the next one 2225c43cc173Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226c27c18e8Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227c27c18e8Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228c43cc173Smrg fi 2229c43cc173Smrg 2230c43cc173Smrg # Allow error messages only from the first compilation. 22310eb1301bSmrg if test "$suppress_opt" = yes; then 2232c27c18e8Smrg suppress_output=' >/dev/null 2>&1' 2233c43cc173Smrg fi 2234c43cc173Smrg fi 2235c43cc173Smrg 2236c43cc173Smrg # Only build a position-dependent object if we build old libraries. 22370eb1301bSmrg if test "$build_old_libs" = yes; then 22380eb1301bSmrg if test "$pic_mode" != yes; then 2239c43cc173Smrg # Don't build PIC code 2240c27c18e8Smrg command="$base_compile $qsrcfile$pie_flag" 2241c43cc173Smrg else 2242c43cc173Smrg command="$base_compile $qsrcfile $pic_flag" 2243c43cc173Smrg fi 22440eb1301bSmrg if test "$compiler_c_o" = yes; then 2245b789ec8aSmrg func_append command " -o $obj" 2246c43cc173Smrg fi 2247c43cc173Smrg 2248c43cc173Smrg # Suppress compiler output if we already did a PIC compilation. 2249b789ec8aSmrg func_append command "$suppress_output" 2250c27c18e8Smrg func_show_eval_locale "$command" \ 2251c27c18e8Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252c43cc173Smrg 22530eb1301bSmrg if test "$need_locks" = warn && 2254c43cc173Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255c27c18e8Smrg $ECHO "\ 2256c43cc173Smrg*** ERROR, $lockfile contains: 2257c43cc173Smrg`cat $lockfile 2>/dev/null` 2258c43cc173Smrg 2259c43cc173Smrgbut it should contain: 2260c43cc173Smrg$srcfile 2261c43cc173Smrg 2262c43cc173SmrgThis indicates that another process is trying to use the same 2263c43cc173Smrgtemporary object file, and libtool could not work around it because 22640eb1301bSmrgyour compiler does not support \`-c' and \`-o' together. If you 2265c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 2266c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 2267c43cc173Smrgcompiler." 2268c43cc173Smrg 2269c27c18e8Smrg $opt_dry_run || $RM $removelist 2270c43cc173Smrg exit $EXIT_FAILURE 2271c43cc173Smrg fi 2272c43cc173Smrg 2273c43cc173Smrg # Just move the object if needed 2274c43cc173Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275c27c18e8Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276c27c18e8Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277c43cc173Smrg fi 2278c43cc173Smrg fi 2279c43cc173Smrg 2280c27c18e8Smrg $opt_dry_run || { 2281c27c18e8Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282c43cc173Smrg 2283c27c18e8Smrg # Unlock the critical section if it was locked 22840eb1301bSmrg if test "$need_locks" != no; then 2285c27c18e8Smrg removelist=$lockfile 2286c27c18e8Smrg $RM "$lockfile" 2287c27c18e8Smrg fi 2288c27c18e8Smrg } 2289c43cc173Smrg 2290c43cc173Smrg exit $EXIT_SUCCESS 2291c27c18e8Smrg} 2292c43cc173Smrg 2293c27c18e8Smrg$opt_help || { 22940eb1301bSmrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295c27c18e8Smrg} 2296c43cc173Smrg 2297c27c18e8Smrgfunc_mode_help () 2298c27c18e8Smrg{ 2299c27c18e8Smrg # We need to display help for each of the modes. 2300b789ec8aSmrg case $opt_mode in 2301c27c18e8Smrg "") 2302c27c18e8Smrg # Generic help is extracted from the usage comments 2303c27c18e8Smrg # at the start of this file. 2304c27c18e8Smrg func_help 2305c27c18e8Smrg ;; 2306c43cc173Smrg 2307c27c18e8Smrg clean) 2308c27c18e8Smrg $ECHO \ 2309c27c18e8Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310c43cc173Smrg 2311c27c18e8SmrgRemove files from the build directory. 2312c43cc173Smrg 2313c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE 23140eb1301bSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315c27c18e8Smrgto RM. 2316c43cc173Smrg 2317c27c18e8SmrgIf FILE is a libtool library, object or program, all the files associated 2318c27c18e8Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319c27c18e8Smrg ;; 2320c43cc173Smrg 2321c27c18e8Smrg compile) 2322c27c18e8Smrg $ECHO \ 2323c27c18e8Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324c43cc173Smrg 2325c27c18e8SmrgCompile a source file into a libtool library object. 2326c43cc173Smrg 2327c27c18e8SmrgThis mode accepts the following additional options: 2328c43cc173Smrg 2329c27c18e8Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330c27c18e8Smrg -no-suppress do not suppress compiler output for multiple passes 233137eb1ca1Smrg -prefer-pic try to build PIC objects only 233237eb1ca1Smrg -prefer-non-pic try to build non-PIC objects only 23330eb1301bSmrg -shared do not build a \`.o' file suitable for static linking 23340eb1301bSmrg -static only build a \`.o' file suitable for static linking 233537eb1ca1Smrg -Wc,FLAG pass FLAG directly to the compiler 2336c43cc173Smrg 23370eb1301bSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338c27c18e8Smrgfrom the given SOURCEFILE. 2339c43cc173Smrg 2340c27c18e8SmrgThe output file name is determined by removing the directory component from 23410eb1301bSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 23420eb1301bSmrglibrary object suffix, \`.lo'." 2343c27c18e8Smrg ;; 2344c43cc173Smrg 2345c27c18e8Smrg execute) 2346c27c18e8Smrg $ECHO \ 2347c27c18e8Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348c43cc173Smrg 2349c27c18e8SmrgAutomatically set library path, then run a program. 2350c43cc173Smrg 2351c27c18e8SmrgThis mode accepts the following additional options: 2352c43cc173Smrg 2353c27c18e8Smrg -dlopen FILE add the directory containing FILE to the library path 2354c43cc173Smrg 23550eb1301bSmrgThis mode sets the library path environment variable according to \`-dlopen' 2356c27c18e8Smrgflags. 2357c43cc173Smrg 2358c27c18e8SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359c27c18e8Smrginto their corresponding uninstalled binary, and any of their required library 2360c27c18e8Smrgdirectories are added to the library path. 2361c43cc173Smrg 2362c27c18e8SmrgThen, COMMAND is executed, with ARGS as arguments." 2363c27c18e8Smrg ;; 2364c43cc173Smrg 2365c27c18e8Smrg finish) 2366c27c18e8Smrg $ECHO \ 2367c27c18e8Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368c43cc173Smrg 2369c27c18e8SmrgComplete the installation of libtool libraries. 2370c43cc173Smrg 2371c27c18e8SmrgEach LIBDIR is a directory that contains libtool libraries. 2372c43cc173Smrg 2373c27c18e8SmrgThe commands that this mode executes may require superuser privileges. Use 23740eb1301bSmrgthe \`--dry-run' option if you just want to see what would be executed." 2375c27c18e8Smrg ;; 2376c43cc173Smrg 2377c27c18e8Smrg install) 2378c27c18e8Smrg $ECHO \ 2379c27c18e8Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380c43cc173Smrg 2381c27c18e8SmrgInstall executables or libraries. 2382c43cc173Smrg 2383c27c18e8SmrgINSTALL-COMMAND is the installation command. The first component should be 23840eb1301bSmrgeither the \`install' or \`cp' program. 2385c43cc173Smrg 2386c27c18e8SmrgThe following components of INSTALL-COMMAND are treated specially: 2387c43cc173Smrg 238837eb1ca1Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389c43cc173Smrg 2390c27c18e8SmrgThe rest of the components are interpreted as arguments to that command (only 2391c27c18e8SmrgBSD-compatible install options are recognized)." 2392c27c18e8Smrg ;; 2393c43cc173Smrg 2394c27c18e8Smrg link) 2395c27c18e8Smrg $ECHO \ 2396c27c18e8Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397c43cc173Smrg 2398c27c18e8SmrgLink object files or libraries together to form another library, or to 2399c27c18e8Smrgcreate an executable program. 2400c43cc173Smrg 2401c27c18e8SmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402c27c18e8Smrga program from several object files. 2403c43cc173Smrg 2404c27c18e8SmrgThe following components of LINK-COMMAND are treated specially: 2405c43cc173Smrg 2406c27c18e8Smrg -all-static do not do any dynamic linking at all 2407c27c18e8Smrg -avoid-version do not add a version suffix if possible 240837eb1ca1Smrg -bindir BINDIR specify path to binaries directory (for systems where 240937eb1ca1Smrg libraries must be found in the PATH setting at runtime) 24100eb1301bSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411c27c18e8Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412c27c18e8Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413c27c18e8Smrg -export-symbols SYMFILE 2414c27c18e8Smrg try to export only the symbols listed in SYMFILE 2415c27c18e8Smrg -export-symbols-regex REGEX 2416c27c18e8Smrg try to export only the symbols matching REGEX 2417c27c18e8Smrg -LLIBDIR search LIBDIR for required installed libraries 2418c27c18e8Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419c27c18e8Smrg -module build a library that can dlopened 2420c27c18e8Smrg -no-fast-install disable the fast-install mode 2421c27c18e8Smrg -no-install link a not-installable executable 2422c27c18e8Smrg -no-undefined declare that a library does not refer to external symbols 2423c27c18e8Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 24240eb1301bSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425c27c18e8Smrg -precious-files-regex REGEX 2426c27c18e8Smrg don't remove output files matching REGEX 2427c27c18e8Smrg -release RELEASE specify package release information 2428c27c18e8Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429c27c18e8Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430c27c18e8Smrg -shared only do dynamic linking of libtool libraries 2431c27c18e8Smrg -shrext SUFFIX override the standard shared library file extension 2432c27c18e8Smrg -static do not do any dynamic linking of uninstalled libtool libraries 2433c27c18e8Smrg -static-libtool-libs 2434c27c18e8Smrg do not do any dynamic linking of libtool libraries 2435c27c18e8Smrg -version-info CURRENT[:REVISION[:AGE]] 2436c27c18e8Smrg specify library version info [each variable defaults to 0] 2437c27c18e8Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 243837eb1ca1Smrg -Wc,FLAG 243937eb1ca1Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 244037eb1ca1Smrg -Wl,FLAG 244137eb1ca1Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 244237eb1ca1Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443c43cc173Smrg 24440eb1301bSmrgAll other options (arguments beginning with \`-') are ignored. 2445c43cc173Smrg 24460eb1301bSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447c27c18e8Smrgtreated as uninstalled libtool libraries, other files are standard or library 2448c27c18e8Smrgobject files. 2449c43cc173Smrg 24500eb1301bSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 24510eb1301bSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452c27c18e8Smrgrequired, except when creating a convenience library. 2453c43cc173Smrg 24540eb1301bSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 24550eb1301bSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456c43cc173Smrg 24570eb1301bSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458c27c18e8Smrgis created, otherwise an executable program is created." 2459c43cc173Smrg ;; 2460c43cc173Smrg 2461c27c18e8Smrg uninstall) 2462c27c18e8Smrg $ECHO \ 2463c27c18e8Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464c43cc173Smrg 2465c27c18e8SmrgRemove libraries from an installation directory. 2466c43cc173Smrg 2467c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE 24680eb1301bSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469c27c18e8Smrgto RM. 2470c43cc173Smrg 2471c27c18e8SmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472c27c18e8SmrgOtherwise, only FILE itself is deleted using RM." 2473c27c18e8Smrg ;; 2474c43cc173Smrg 2475c27c18e8Smrg *) 24760eb1301bSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477c27c18e8Smrg ;; 2478c27c18e8Smrg esac 2479c43cc173Smrg 248037eb1ca1Smrg echo 24810eb1301bSmrg $ECHO "Try \`$progname --help' for more information about other modes." 2482c27c18e8Smrg} 2483c43cc173Smrg 248437eb1ca1Smrg# Now that we've collected a possible --mode arg, show help if necessary 248537eb1ca1Smrgif $opt_help; then 24860eb1301bSmrg if test "$opt_help" = :; then 248737eb1ca1Smrg func_mode_help 248837eb1ca1Smrg else 248937eb1ca1Smrg { 249037eb1ca1Smrg func_help noexit 2491b789ec8aSmrg for opt_mode in compile link execute install finish uninstall clean; do 249237eb1ca1Smrg func_mode_help 249337eb1ca1Smrg done 24940eb1301bSmrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 249537eb1ca1Smrg { 249637eb1ca1Smrg func_help noexit 2497b789ec8aSmrg for opt_mode in compile link execute install finish uninstall clean; do 249837eb1ca1Smrg echo 249937eb1ca1Smrg func_mode_help 250037eb1ca1Smrg done 250137eb1ca1Smrg } | 25020eb1301bSmrg sed '1d 250337eb1ca1Smrg /^When reporting/,/^Report/{ 250437eb1ca1Smrg H 250537eb1ca1Smrg d 250637eb1ca1Smrg } 250737eb1ca1Smrg $x 250837eb1ca1Smrg /information about other modes/d 250937eb1ca1Smrg /more detailed .*MODE/d 251037eb1ca1Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 251137eb1ca1Smrg fi 251237eb1ca1Smrg exit $? 251337eb1ca1Smrgfi 2514c43cc173Smrg 2515c43cc173Smrg 2516c27c18e8Smrg# func_mode_execute arg... 2517c27c18e8Smrgfunc_mode_execute () 2518c27c18e8Smrg{ 25190eb1301bSmrg $opt_debug 2520c27c18e8Smrg # The first argument is the command name. 25210eb1301bSmrg cmd="$nonopt" 2522c27c18e8Smrg test -z "$cmd" && \ 2523c27c18e8Smrg func_fatal_help "you must specify a COMMAND" 2524c43cc173Smrg 2525c27c18e8Smrg # Handle -dlopen flags immediately. 2526b789ec8aSmrg for file in $opt_dlopen; do 2527c27c18e8Smrg test -f "$file" \ 25280eb1301bSmrg || func_fatal_help "\`$file' is not a file" 2529c43cc173Smrg 2530c27c18e8Smrg dir= 2531c27c18e8Smrg case $file in 2532c27c18e8Smrg *.la) 2533b789ec8aSmrg func_resolve_sysroot "$file" 2534b789ec8aSmrg file=$func_resolve_sysroot_result 2535b789ec8aSmrg 2536c27c18e8Smrg # Check to see that this really is a libtool archive. 2537c27c18e8Smrg func_lalib_unsafe_p "$file" \ 25380eb1301bSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2539c43cc173Smrg 2540c27c18e8Smrg # Read the libtool library. 2541c27c18e8Smrg dlname= 2542c27c18e8Smrg library_names= 2543c27c18e8Smrg func_source "$file" 2544c43cc173Smrg 2545c27c18e8Smrg # Skip this library if it cannot be dlopened. 2546c27c18e8Smrg if test -z "$dlname"; then 2547c27c18e8Smrg # Warn if it was a shared library. 2548c27c18e8Smrg test -n "$library_names" && \ 25490eb1301bSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550c27c18e8Smrg continue 2551c27c18e8Smrg fi 2552c43cc173Smrg 2553c27c18e8Smrg func_dirname "$file" "" "." 25540eb1301bSmrg dir="$func_dirname_result" 2555c43cc173Smrg 2556c27c18e8Smrg if test -f "$dir/$objdir/$dlname"; then 2557b789ec8aSmrg func_append dir "/$objdir" 2558c27c18e8Smrg else 2559c27c18e8Smrg if test ! -f "$dir/$dlname"; then 25600eb1301bSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561c27c18e8Smrg fi 2562c27c18e8Smrg fi 2563c43cc173Smrg ;; 2564c43cc173Smrg 2565c27c18e8Smrg *.lo) 2566c27c18e8Smrg # Just add the directory containing the .lo file. 2567c27c18e8Smrg func_dirname "$file" "" "." 25680eb1301bSmrg dir="$func_dirname_result" 2569c43cc173Smrg ;; 2570c43cc173Smrg 2571c27c18e8Smrg *) 25720eb1301bSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573c43cc173Smrg continue 2574c43cc173Smrg ;; 2575c27c18e8Smrg esac 2576c43cc173Smrg 2577c27c18e8Smrg # Get the absolute pathname. 2578c27c18e8Smrg absdir=`cd "$dir" && pwd` 25790eb1301bSmrg test -n "$absdir" && dir="$absdir" 2580c43cc173Smrg 2581c27c18e8Smrg # Now add the directory to shlibpath_var. 2582c27c18e8Smrg if eval "test -z \"\$$shlibpath_var\""; then 2583c27c18e8Smrg eval "$shlibpath_var=\"\$dir\"" 2584c27c18e8Smrg else 2585c27c18e8Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586c27c18e8Smrg fi 2587c27c18e8Smrg done 2588c43cc173Smrg 2589c27c18e8Smrg # This variable tells wrapper scripts just to set shlibpath_var 2590c27c18e8Smrg # rather than running their programs. 25910eb1301bSmrg libtool_execute_magic="$magic" 2592c43cc173Smrg 2593c27c18e8Smrg # Check if any of the arguments is a wrapper script. 2594c27c18e8Smrg args= 2595c27c18e8Smrg for file 2596c27c18e8Smrg do 2597c27c18e8Smrg case $file in 259837eb1ca1Smrg -* | *.la | *.lo ) ;; 2599c27c18e8Smrg *) 2600c27c18e8Smrg # Do a test to see if this is really a libtool program. 2601c27c18e8Smrg if func_ltwrapper_script_p "$file"; then 2602c27c18e8Smrg func_source "$file" 2603c27c18e8Smrg # Transform arg to wrapped name. 26040eb1301bSmrg file="$progdir/$program" 2605c27c18e8Smrg elif func_ltwrapper_executable_p "$file"; then 2606c27c18e8Smrg func_ltwrapper_scriptname "$file" 2607c27c18e8Smrg func_source "$func_ltwrapper_scriptname_result" 2608c27c18e8Smrg # Transform arg to wrapped name. 26090eb1301bSmrg file="$progdir/$program" 2610c27c18e8Smrg fi 2611c27c18e8Smrg ;; 2612c27c18e8Smrg esac 2613c27c18e8Smrg # Quote arguments (to preserve shell metacharacters). 2614b789ec8aSmrg func_append_quoted args "$file" 2615c27c18e8Smrg done 2616c43cc173Smrg 26170eb1301bSmrg if test "X$opt_dry_run" = Xfalse; then 2618c27c18e8Smrg if test -n "$shlibpath_var"; then 2619c27c18e8Smrg # Export the shlibpath_var. 2620c27c18e8Smrg eval "export $shlibpath_var" 2621c27c18e8Smrg fi 2622c43cc173Smrg 2623c27c18e8Smrg # Restore saved environment variables 2624c27c18e8Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625c27c18e8Smrg do 2626c27c18e8Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627c27c18e8Smrg $lt_var=\$save_$lt_var; export $lt_var 2628c43cc173Smrg else 2629c27c18e8Smrg $lt_unset $lt_var 2630c27c18e8Smrg fi" 2631c27c18e8Smrg done 2632c43cc173Smrg 2633c27c18e8Smrg # Now prepare to actually exec the command. 26340eb1301bSmrg exec_cmd="\$cmd$args" 26350eb1301bSmrg else 26360eb1301bSmrg # Display what would be done. 26370eb1301bSmrg if test -n "$shlibpath_var"; then 26380eb1301bSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 26390eb1301bSmrg echo "export $shlibpath_var" 26400eb1301bSmrg fi 26410eb1301bSmrg $ECHO "$cmd$args" 26420eb1301bSmrg exit $EXIT_SUCCESS 2643c27c18e8Smrg fi 2644c27c18e8Smrg} 2645c43cc173Smrg 26460eb1301bSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647c43cc173Smrg 2648c43cc173Smrg 2649c27c18e8Smrg# func_mode_finish arg... 2650c27c18e8Smrgfunc_mode_finish () 2651c27c18e8Smrg{ 26520eb1301bSmrg $opt_debug 2653b789ec8aSmrg libs= 2654b789ec8aSmrg libdirs= 2655c27c18e8Smrg admincmds= 2656c43cc173Smrg 2657b789ec8aSmrg for opt in "$nonopt" ${1+"$@"} 2658b789ec8aSmrg do 2659b789ec8aSmrg if test -d "$opt"; then 2660b789ec8aSmrg func_append libdirs " $opt" 2661b789ec8aSmrg 2662b789ec8aSmrg elif test -f "$opt"; then 2663b789ec8aSmrg if func_lalib_unsafe_p "$opt"; then 2664b789ec8aSmrg func_append libs " $opt" 2665b789ec8aSmrg else 26660eb1301bSmrg func_warning "\`$opt' is not a valid libtool archive" 2667b789ec8aSmrg fi 2668b789ec8aSmrg 2669b789ec8aSmrg else 26700eb1301bSmrg func_fatal_error "invalid argument \`$opt'" 2671b789ec8aSmrg fi 2672b789ec8aSmrg done 2673b789ec8aSmrg 2674b789ec8aSmrg if test -n "$libs"; then 2675b789ec8aSmrg if test -n "$lt_sysroot"; then 2676b789ec8aSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2677b789ec8aSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2678b789ec8aSmrg else 2679b789ec8aSmrg sysroot_cmd= 2680b789ec8aSmrg fi 2681b789ec8aSmrg 2682b789ec8aSmrg # Remove sysroot references 2683b789ec8aSmrg if $opt_dry_run; then 2684b789ec8aSmrg for lib in $libs; do 26850eb1301bSmrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2686b789ec8aSmrg done 2687b789ec8aSmrg else 2688b789ec8aSmrg tmpdir=`func_mktempdir` 2689b789ec8aSmrg for lib in $libs; do 26900eb1301bSmrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2691b789ec8aSmrg > $tmpdir/tmp-la 2692b789ec8aSmrg mv -f $tmpdir/tmp-la $lib 2693b789ec8aSmrg done 2694b789ec8aSmrg ${RM}r "$tmpdir" 2695b789ec8aSmrg fi 2696b789ec8aSmrg fi 2697c43cc173Smrg 2698b789ec8aSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699c27c18e8Smrg for libdir in $libdirs; do 2700c27c18e8Smrg if test -n "$finish_cmds"; then 2701c27c18e8Smrg # Do each command in the finish commands. 2702c27c18e8Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703c27c18e8Smrg'"$cmd"'"' 2704c43cc173Smrg fi 2705c27c18e8Smrg if test -n "$finish_eval"; then 2706c27c18e8Smrg # Do the single finish_eval. 2707c27c18e8Smrg eval cmds=\"$finish_eval\" 2708b789ec8aSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709c27c18e8Smrg $cmds" 2710c27c18e8Smrg fi 2711c27c18e8Smrg done 2712c27c18e8Smrg fi 2713c43cc173Smrg 2714c27c18e8Smrg # Exit here if they wanted silent mode. 27150eb1301bSmrg $opt_silent && exit $EXIT_SUCCESS 2716c43cc173Smrg 2717b789ec8aSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2718b789ec8aSmrg echo "----------------------------------------------------------------------" 2719b789ec8aSmrg echo "Libraries have been installed in:" 2720b789ec8aSmrg for libdir in $libdirs; do 2721b789ec8aSmrg $ECHO " $libdir" 2722b789ec8aSmrg done 2723b789ec8aSmrg echo 2724b789ec8aSmrg echo "If you ever happen to want to link against installed libraries" 2725b789ec8aSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 27260eb1301bSmrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2727b789ec8aSmrg echo "flag during linking and do at least one of the following:" 2728b789ec8aSmrg if test -n "$shlibpath_var"; then 27290eb1301bSmrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2730b789ec8aSmrg echo " during execution" 2731b789ec8aSmrg fi 2732b789ec8aSmrg if test -n "$runpath_var"; then 27330eb1301bSmrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 2734b789ec8aSmrg echo " during linking" 2735b789ec8aSmrg fi 2736b789ec8aSmrg if test -n "$hardcode_libdir_flag_spec"; then 2737b789ec8aSmrg libdir=LIBDIR 2738b789ec8aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 2739c43cc173Smrg 27400eb1301bSmrg $ECHO " - use the \`$flag' linker flag" 2741b789ec8aSmrg fi 2742b789ec8aSmrg if test -n "$admincmds"; then 2743b789ec8aSmrg $ECHO " - have your system administrator run these commands:$admincmds" 2744b789ec8aSmrg fi 2745b789ec8aSmrg if test -f /etc/ld.so.conf; then 27460eb1301bSmrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2747b789ec8aSmrg fi 2748b789ec8aSmrg echo 2749c27c18e8Smrg 2750b789ec8aSmrg echo "See any operating system documentation about shared libraries for" 2751b789ec8aSmrg case $host in 2752b789ec8aSmrg solaris2.[6789]|solaris2.1[0-9]) 2753b789ec8aSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2754b789ec8aSmrg echo "pages." 2755b789ec8aSmrg ;; 2756b789ec8aSmrg *) 2757b789ec8aSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 2758b789ec8aSmrg ;; 2759b789ec8aSmrg esac 2760b789ec8aSmrg echo "----------------------------------------------------------------------" 2761b789ec8aSmrg fi 2762c27c18e8Smrg exit $EXIT_SUCCESS 2763c27c18e8Smrg} 2764c27c18e8Smrg 27650eb1301bSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766c27c18e8Smrg 2767c27c18e8Smrg 2768c27c18e8Smrg# func_mode_install arg... 2769c27c18e8Smrgfunc_mode_install () 2770c27c18e8Smrg{ 27710eb1301bSmrg $opt_debug 2772c27c18e8Smrg # There may be an optional sh(1) argument at the beginning of 2773c27c18e8Smrg # install_prog (especially on Windows NT). 27740eb1301bSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775c27c18e8Smrg # Allow the use of GNU shtool's install command. 27760eb1301bSmrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777c27c18e8Smrg # Aesthetically quote it. 2778c27c18e8Smrg func_quote_for_eval "$nonopt" 2779c27c18e8Smrg install_prog="$func_quote_for_eval_result " 2780c27c18e8Smrg arg=$1 2781c27c18e8Smrg shift 2782c27c18e8Smrg else 2783c27c18e8Smrg install_prog= 2784c27c18e8Smrg arg=$nonopt 2785c27c18e8Smrg fi 2786c27c18e8Smrg 2787c27c18e8Smrg # The real first argument should be the name of the installation program. 2788c27c18e8Smrg # Aesthetically quote it. 2789c27c18e8Smrg func_quote_for_eval "$arg" 2790b789ec8aSmrg func_append install_prog "$func_quote_for_eval_result" 279137eb1ca1Smrg install_shared_prog=$install_prog 279237eb1ca1Smrg case " $install_prog " in 279337eb1ca1Smrg *[\\\ /]cp\ *) install_cp=: ;; 279437eb1ca1Smrg *) install_cp=false ;; 279537eb1ca1Smrg esac 2796c27c18e8Smrg 2797c27c18e8Smrg # We need to accept at least all the BSD install flags. 2798c27c18e8Smrg dest= 2799c27c18e8Smrg files= 2800c27c18e8Smrg opts= 2801c27c18e8Smrg prev= 2802c27c18e8Smrg install_type= 28030eb1301bSmrg isdir=no 2804c27c18e8Smrg stripme= 280537eb1ca1Smrg no_mode=: 2806c27c18e8Smrg for arg 2807c27c18e8Smrg do 280837eb1ca1Smrg arg2= 2809c27c18e8Smrg if test -n "$dest"; then 2810b789ec8aSmrg func_append files " $dest" 2811c27c18e8Smrg dest=$arg 2812c27c18e8Smrg continue 2813c27c18e8Smrg fi 2814c27c18e8Smrg 2815c27c18e8Smrg case $arg in 28160eb1301bSmrg -d) isdir=yes ;; 2817c27c18e8Smrg -f) 281837eb1ca1Smrg if $install_cp; then :; else 281937eb1ca1Smrg prev=$arg 282037eb1ca1Smrg fi 2821c27c18e8Smrg ;; 2822c27c18e8Smrg -g | -m | -o) 2823c27c18e8Smrg prev=$arg 2824c27c18e8Smrg ;; 2825c27c18e8Smrg -s) 2826c27c18e8Smrg stripme=" -s" 2827c27c18e8Smrg continue 2828c27c18e8Smrg ;; 2829c27c18e8Smrg -*) 2830c27c18e8Smrg ;; 2831c27c18e8Smrg *) 2832c27c18e8Smrg # If the previous option needed an argument, then skip it. 2833c27c18e8Smrg if test -n "$prev"; then 28340eb1301bSmrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 283537eb1ca1Smrg arg2=$install_override_mode 283637eb1ca1Smrg no_mode=false 283737eb1ca1Smrg fi 2838c43cc173Smrg prev= 2839c43cc173Smrg else 2840c27c18e8Smrg dest=$arg 2841c27c18e8Smrg continue 2842c43cc173Smrg fi 2843c43cc173Smrg ;; 2844c27c18e8Smrg esac 2845c43cc173Smrg 2846c27c18e8Smrg # Aesthetically quote the argument. 2847c27c18e8Smrg func_quote_for_eval "$arg" 2848b789ec8aSmrg func_append install_prog " $func_quote_for_eval_result" 284937eb1ca1Smrg if test -n "$arg2"; then 285037eb1ca1Smrg func_quote_for_eval "$arg2" 285137eb1ca1Smrg fi 2852b789ec8aSmrg func_append install_shared_prog " $func_quote_for_eval_result" 2853c27c18e8Smrg done 2854c43cc173Smrg 2855c27c18e8Smrg test -z "$install_prog" && \ 2856c27c18e8Smrg func_fatal_help "you must specify an install program" 2857c43cc173Smrg 2858c27c18e8Smrg test -n "$prev" && \ 28590eb1301bSmrg func_fatal_help "the \`$prev' option requires an argument" 2860c43cc173Smrg 286137eb1ca1Smrg if test -n "$install_override_mode" && $no_mode; then 286237eb1ca1Smrg if $install_cp; then :; else 286337eb1ca1Smrg func_quote_for_eval "$install_override_mode" 2864b789ec8aSmrg func_append install_shared_prog " -m $func_quote_for_eval_result" 286537eb1ca1Smrg fi 286637eb1ca1Smrg fi 286737eb1ca1Smrg 2868c27c18e8Smrg if test -z "$files"; then 2869c27c18e8Smrg if test -z "$dest"; then 2870c27c18e8Smrg func_fatal_help "no file or destination specified" 2871c27c18e8Smrg else 2872c27c18e8Smrg func_fatal_help "you must specify a destination" 2873c27c18e8Smrg fi 2874c43cc173Smrg fi 2875c43cc173Smrg 2876c27c18e8Smrg # Strip any trailing slash from the destination. 2877c27c18e8Smrg func_stripname '' '/' "$dest" 2878c27c18e8Smrg dest=$func_stripname_result 2879c43cc173Smrg 2880c27c18e8Smrg # Check to see that the destination is a directory. 28810eb1301bSmrg test -d "$dest" && isdir=yes 28820eb1301bSmrg if test "$isdir" = yes; then 28830eb1301bSmrg destdir="$dest" 2884c27c18e8Smrg destname= 2885c43cc173Smrg else 2886c27c18e8Smrg func_dirname_and_basename "$dest" "" "." 28870eb1301bSmrg destdir="$func_dirname_result" 28880eb1301bSmrg destname="$func_basename_result" 2889c43cc173Smrg 2890c27c18e8Smrg # Not a directory, so check to see that there is only one file specified. 2891c27c18e8Smrg set dummy $files; shift 2892c27c18e8Smrg test "$#" -gt 1 && \ 28930eb1301bSmrg func_fatal_help "\`$dest' is not a directory" 2894c43cc173Smrg fi 2895c27c18e8Smrg case $destdir in 2896c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2897c43cc173Smrg *) 2898c27c18e8Smrg for file in $files; do 2899c27c18e8Smrg case $file in 2900c27c18e8Smrg *.lo) ;; 2901c27c18e8Smrg *) 29020eb1301bSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903c27c18e8Smrg ;; 2904c27c18e8Smrg esac 2905c27c18e8Smrg done 2906c43cc173Smrg ;; 2907c43cc173Smrg esac 2908c43cc173Smrg 2909c27c18e8Smrg # This variable tells wrapper scripts just to set variables rather 2910c27c18e8Smrg # than running their programs. 29110eb1301bSmrg libtool_install_magic="$magic" 2912c43cc173Smrg 2913c27c18e8Smrg staticlibs= 2914c27c18e8Smrg future_libdirs= 2915c27c18e8Smrg current_libdirs= 2916c27c18e8Smrg for file in $files; do 2917c43cc173Smrg 2918c27c18e8Smrg # Do each installation. 2919c27c18e8Smrg case $file in 2920c27c18e8Smrg *.$libext) 2921c27c18e8Smrg # Do the static libraries later. 2922b789ec8aSmrg func_append staticlibs " $file" 2923c27c18e8Smrg ;; 2924c27c18e8Smrg 2925c27c18e8Smrg *.la) 2926b789ec8aSmrg func_resolve_sysroot "$file" 2927b789ec8aSmrg file=$func_resolve_sysroot_result 2928b789ec8aSmrg 2929c27c18e8Smrg # Check to see that this really is a libtool archive. 2930c27c18e8Smrg func_lalib_unsafe_p "$file" \ 29310eb1301bSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932c27c18e8Smrg 2933c27c18e8Smrg library_names= 2934c27c18e8Smrg old_library= 2935c27c18e8Smrg relink_command= 2936c27c18e8Smrg func_source "$file" 2937c27c18e8Smrg 2938c27c18e8Smrg # Add the libdir to current_libdirs if it is the destination. 2939c27c18e8Smrg if test "X$destdir" = "X$libdir"; then 2940c27c18e8Smrg case "$current_libdirs " in 2941c27c18e8Smrg *" $libdir "*) ;; 2942b789ec8aSmrg *) func_append current_libdirs " $libdir" ;; 2943c43cc173Smrg esac 2944c27c18e8Smrg else 2945c27c18e8Smrg # Note the libdir as a future libdir. 2946c27c18e8Smrg case "$future_libdirs " in 2947c27c18e8Smrg *" $libdir "*) ;; 2948b789ec8aSmrg *) func_append future_libdirs " $libdir" ;; 2949c27c18e8Smrg esac 2950c27c18e8Smrg fi 2951c43cc173Smrg 2952c27c18e8Smrg func_dirname "$file" "/" "" 29530eb1301bSmrg dir="$func_dirname_result" 2954b789ec8aSmrg func_append dir "$objdir" 2955c27c18e8Smrg 2956c27c18e8Smrg if test -n "$relink_command"; then 2957c27c18e8Smrg # Determine the prefix the user has applied to our future dir. 295837eb1ca1Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959c27c18e8Smrg 2960c27c18e8Smrg # Don't allow the user to place us outside of our expected 2961c27c18e8Smrg # location b/c this prevents finding dependent libraries that 2962c27c18e8Smrg # are installed to the same prefix. 2963c27c18e8Smrg # At present, this check doesn't affect windows .dll's that 2964c27c18e8Smrg # are installed into $libdir/../bin (currently, that works fine) 2965c27c18e8Smrg # but it's something to keep an eye on. 2966c27c18e8Smrg test "$inst_prefix_dir" = "$destdir" && \ 29670eb1301bSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968c27c18e8Smrg 2969c27c18e8Smrg if test -n "$inst_prefix_dir"; then 2970c27c18e8Smrg # Stick the inst_prefix_dir data into the link command. 297137eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972c27c18e8Smrg else 297337eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974c27c18e8Smrg fi 2975c27c18e8Smrg 29760eb1301bSmrg func_warning "relinking \`$file'" 2977c27c18e8Smrg func_show_eval "$relink_command" \ 29780eb1301bSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979c27c18e8Smrg fi 2980c27c18e8Smrg 2981c27c18e8Smrg # See the names of the shared library. 2982c27c18e8Smrg set dummy $library_names; shift 2983c27c18e8Smrg if test -n "$1"; then 29840eb1301bSmrg realname="$1" 2985c27c18e8Smrg shift 2986c27c18e8Smrg 29870eb1301bSmrg srcname="$realname" 29880eb1301bSmrg test -n "$relink_command" && srcname="$realname"T 2989c27c18e8Smrg 2990c27c18e8Smrg # Install the shared library and build the symlinks. 299137eb1ca1Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992c27c18e8Smrg 'exit $?' 29930eb1301bSmrg tstripme="$stripme" 2994c27c18e8Smrg case $host_os in 2995c27c18e8Smrg cygwin* | mingw* | pw32* | cegcc*) 2996c27c18e8Smrg case $realname in 2997c27c18e8Smrg *.dll.a) 29980eb1301bSmrg tstripme="" 2999c27c18e8Smrg ;; 3000c27c18e8Smrg esac 3001c43cc173Smrg ;; 3002c43cc173Smrg esac 3003c27c18e8Smrg if test -n "$tstripme" && test -n "$striplib"; then 3004c27c18e8Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005c43cc173Smrg fi 3006c27c18e8Smrg 3007c27c18e8Smrg if test "$#" -gt 0; then 3008c27c18e8Smrg # Delete the old symlinks, and create new ones. 30090eb1301bSmrg # Try `ln -sf' first, because the `ln' binary might depend on 3010c27c18e8Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011c27c18e8Smrg # so we also need to try rm && ln -s. 3012c27c18e8Smrg for linkname 3013c27c18e8Smrg do 3014c27c18e8Smrg test "$linkname" != "$realname" \ 3015c27c18e8Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016c43cc173Smrg done 3017c43cc173Smrg fi 3018c43cc173Smrg 3019c27c18e8Smrg # Do each command in the postinstall commands. 30200eb1301bSmrg lib="$destdir/$realname" 3021c27c18e8Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 3022c43cc173Smrg fi 3023c43cc173Smrg 3024c27c18e8Smrg # Install the pseudo-library for information purposes. 3025c27c18e8Smrg func_basename "$file" 30260eb1301bSmrg name="$func_basename_result" 30270eb1301bSmrg instname="$dir/$name"i 3028c27c18e8Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029c43cc173Smrg 3030c27c18e8Smrg # Maybe install the static library, too. 3031b789ec8aSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032c27c18e8Smrg ;; 3033c43cc173Smrg 3034c27c18e8Smrg *.lo) 3035c27c18e8Smrg # Install (i.e. copy) a libtool object. 3036c43cc173Smrg 3037c27c18e8Smrg # Figure out destination file name, if it wasn't already specified. 3038c27c18e8Smrg if test -n "$destname"; then 30390eb1301bSmrg destfile="$destdir/$destname" 3040c27c18e8Smrg else 3041c27c18e8Smrg func_basename "$file" 30420eb1301bSmrg destfile="$func_basename_result" 30430eb1301bSmrg destfile="$destdir/$destfile" 3044c43cc173Smrg fi 3045c43cc173Smrg 3046c27c18e8Smrg # Deduce the name of the destination old-style object file. 3047c27c18e8Smrg case $destfile in 3048c27c18e8Smrg *.lo) 3049c27c18e8Smrg func_lo2o "$destfile" 3050c27c18e8Smrg staticdest=$func_lo2o_result 3051c27c18e8Smrg ;; 3052c27c18e8Smrg *.$objext) 30530eb1301bSmrg staticdest="$destfile" 3054c27c18e8Smrg destfile= 3055c27c18e8Smrg ;; 3056c27c18e8Smrg *) 30570eb1301bSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058c27c18e8Smrg ;; 3059c27c18e8Smrg esac 3060c43cc173Smrg 3061c27c18e8Smrg # Install the libtool object if requested. 3062c27c18e8Smrg test -n "$destfile" && \ 3063c27c18e8Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 3064c43cc173Smrg 3065c27c18e8Smrg # Install the old object if enabled. 30660eb1301bSmrg if test "$build_old_libs" = yes; then 3067c27c18e8Smrg # Deduce the name of the old-style object file. 3068c27c18e8Smrg func_lo2o "$file" 3069c27c18e8Smrg staticobj=$func_lo2o_result 3070c27c18e8Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071c43cc173Smrg fi 3072c27c18e8Smrg exit $EXIT_SUCCESS 3073c27c18e8Smrg ;; 3074c43cc173Smrg 3075c27c18e8Smrg *) 3076c27c18e8Smrg # Figure out destination file name, if it wasn't already specified. 3077c27c18e8Smrg if test -n "$destname"; then 30780eb1301bSmrg destfile="$destdir/$destname" 3079c27c18e8Smrg else 3080c27c18e8Smrg func_basename "$file" 30810eb1301bSmrg destfile="$func_basename_result" 30820eb1301bSmrg destfile="$destdir/$destfile" 3083c27c18e8Smrg fi 3084c43cc173Smrg 3085c27c18e8Smrg # If the file is missing, and there is a .exe on the end, strip it 3086c27c18e8Smrg # because it is most likely a libtool script we actually want to 3087c27c18e8Smrg # install 30880eb1301bSmrg stripped_ext="" 3089c27c18e8Smrg case $file in 3090c27c18e8Smrg *.exe) 3091c27c18e8Smrg if test ! -f "$file"; then 3092c27c18e8Smrg func_stripname '' '.exe' "$file" 3093c27c18e8Smrg file=$func_stripname_result 30940eb1301bSmrg stripped_ext=".exe" 3095c27c18e8Smrg fi 3096c27c18e8Smrg ;; 3097c27c18e8Smrg esac 3098c27c18e8Smrg 3099c27c18e8Smrg # Do a test to see if this is really a libtool program. 3100c27c18e8Smrg case $host in 3101c27c18e8Smrg *cygwin* | *mingw*) 3102c27c18e8Smrg if func_ltwrapper_executable_p "$file"; then 3103c27c18e8Smrg func_ltwrapper_scriptname "$file" 3104c27c18e8Smrg wrapper=$func_ltwrapper_scriptname_result 3105c27c18e8Smrg else 3106c27c18e8Smrg func_stripname '' '.exe' "$file" 3107c27c18e8Smrg wrapper=$func_stripname_result 3108c27c18e8Smrg fi 3109c27c18e8Smrg ;; 3110c43cc173Smrg *) 3111c27c18e8Smrg wrapper=$file 3112c27c18e8Smrg ;; 3113c27c18e8Smrg esac 3114c27c18e8Smrg if func_ltwrapper_script_p "$wrapper"; then 3115c27c18e8Smrg notinst_deplibs= 3116c27c18e8Smrg relink_command= 3117c27c18e8Smrg 3118c27c18e8Smrg func_source "$wrapper" 3119c27c18e8Smrg 3120c27c18e8Smrg # Check the variables that should have been set. 3121c27c18e8Smrg test -z "$generated_by_libtool_version" && \ 31220eb1301bSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123c27c18e8Smrg 31240eb1301bSmrg finalize=yes 3125c27c18e8Smrg for lib in $notinst_deplibs; do 3126c27c18e8Smrg # Check to see that each library is installed. 3127c27c18e8Smrg libdir= 3128c27c18e8Smrg if test -f "$lib"; then 3129c27c18e8Smrg func_source "$lib" 3130c27c18e8Smrg fi 31310eb1301bSmrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132c27c18e8Smrg if test -n "$libdir" && test ! -f "$libfile"; then 31330eb1301bSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 31340eb1301bSmrg finalize=no 3135c27c18e8Smrg fi 3136c27c18e8Smrg done 3137c27c18e8Smrg 3138c27c18e8Smrg relink_command= 3139c27c18e8Smrg func_source "$wrapper" 3140c27c18e8Smrg 3141c27c18e8Smrg outputname= 31420eb1301bSmrg if test "$fast_install" = no && test -n "$relink_command"; then 3143c27c18e8Smrg $opt_dry_run || { 31440eb1301bSmrg if test "$finalize" = yes; then 3145c27c18e8Smrg tmpdir=`func_mktempdir` 3146c27c18e8Smrg func_basename "$file$stripped_ext" 31470eb1301bSmrg file="$func_basename_result" 31480eb1301bSmrg outputname="$tmpdir/$file" 3149c27c18e8Smrg # Replace the output file specification. 315037eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151c27c18e8Smrg 31520eb1301bSmrg $opt_silent || { 3153c27c18e8Smrg func_quote_for_expand "$relink_command" 3154c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 3155c27c18e8Smrg } 3156c27c18e8Smrg if eval "$relink_command"; then : 3157c27c18e8Smrg else 31580eb1301bSmrg func_error "error: relink \`$file' with the above command before installing it" 3159c27c18e8Smrg $opt_dry_run || ${RM}r "$tmpdir" 3160c27c18e8Smrg continue 3161c27c18e8Smrg fi 31620eb1301bSmrg file="$outputname" 3163c27c18e8Smrg else 31640eb1301bSmrg func_warning "cannot relink \`$file'" 3165c27c18e8Smrg fi 3166c27c18e8Smrg } 3167c27c18e8Smrg else 3168c27c18e8Smrg # Install the binary that we compiled earlier. 316937eb1ca1Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170c43cc173Smrg fi 3171c27c18e8Smrg fi 3172c27c18e8Smrg 3173c27c18e8Smrg # remove .exe since cygwin /usr/bin/install will append another 3174c27c18e8Smrg # one anyway 3175c27c18e8Smrg case $install_prog,$host in 3176c27c18e8Smrg */usr/bin/install*,*cygwin*) 3177c27c18e8Smrg case $file:$destfile in 3178c27c18e8Smrg *.exe:*.exe) 3179c27c18e8Smrg # this is ok 3180c27c18e8Smrg ;; 3181c27c18e8Smrg *.exe:*) 3182c27c18e8Smrg destfile=$destfile.exe 3183c27c18e8Smrg ;; 3184c27c18e8Smrg *:*.exe) 3185c27c18e8Smrg func_stripname '' '.exe' "$destfile" 3186c27c18e8Smrg destfile=$func_stripname_result 3187c27c18e8Smrg ;; 3188c27c18e8Smrg esac 3189c43cc173Smrg ;; 3190c43cc173Smrg esac 3191c27c18e8Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192c27c18e8Smrg $opt_dry_run || if test -n "$outputname"; then 3193c27c18e8Smrg ${RM}r "$tmpdir" 3194c27c18e8Smrg fi 3195c27c18e8Smrg ;; 3196c27c18e8Smrg esac 3197c27c18e8Smrg done 3198c43cc173Smrg 3199c27c18e8Smrg for file in $staticlibs; do 3200c27c18e8Smrg func_basename "$file" 32010eb1301bSmrg name="$func_basename_result" 3202c27c18e8Smrg 3203c27c18e8Smrg # Set up the ranlib parameters. 32040eb1301bSmrg oldlib="$destdir/$name" 3205f1ee322dSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206f1ee322dSmrg tool_oldlib=$func_to_tool_file_result 3207c27c18e8Smrg 3208c27c18e8Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209c27c18e8Smrg 3210c27c18e8Smrg if test -n "$stripme" && test -n "$old_striplib"; then 3211f1ee322dSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212c27c18e8Smrg fi 3213c27c18e8Smrg 3214c27c18e8Smrg # Do each command in the postinstall commands. 3215c27c18e8Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216c27c18e8Smrg done 3217c27c18e8Smrg 3218c27c18e8Smrg test -n "$future_libdirs" && \ 32190eb1301bSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3220c27c18e8Smrg 3221c27c18e8Smrg if test -n "$current_libdirs"; then 3222c27c18e8Smrg # Maybe just do a dry run. 3223c27c18e8Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 32240eb1301bSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225c27c18e8Smrg else 3226c27c18e8Smrg exit $EXIT_SUCCESS 3227c27c18e8Smrg fi 3228c27c18e8Smrg} 3229c27c18e8Smrg 32300eb1301bSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231c27c18e8Smrg 3232c27c18e8Smrg 3233c27c18e8Smrg# func_generate_dlsyms outputname originator pic_p 3234c27c18e8Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235c27c18e8Smrg# a dlpreopen symbol table. 3236c27c18e8Smrgfunc_generate_dlsyms () 3237c27c18e8Smrg{ 32380eb1301bSmrg $opt_debug 32390eb1301bSmrg my_outputname="$1" 32400eb1301bSmrg my_originator="$2" 32410eb1301bSmrg my_pic_p="${3-no}" 32420eb1301bSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243c27c18e8Smrg my_dlsyms= 3244c27c18e8Smrg 32450eb1301bSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246c27c18e8Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 32470eb1301bSmrg my_dlsyms="${my_outputname}S.c" 3248c27c18e8Smrg else 3249c27c18e8Smrg func_error "not configured to extract global symbols from dlpreopened files" 3250c27c18e8Smrg fi 3251c27c18e8Smrg fi 3252c27c18e8Smrg 3253c27c18e8Smrg if test -n "$my_dlsyms"; then 3254c27c18e8Smrg case $my_dlsyms in 3255c27c18e8Smrg "") ;; 3256c27c18e8Smrg *.c) 3257c27c18e8Smrg # Discover the nlist of each of the dlfiles. 32580eb1301bSmrg nlist="$output_objdir/${my_outputname}.nm" 3259c27c18e8Smrg 3260c27c18e8Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261c27c18e8Smrg 3262c27c18e8Smrg # Parse the name list into a source file. 3263c27c18e8Smrg func_verbose "creating $output_objdir/$my_dlsyms" 3264c27c18e8Smrg 3265c27c18e8Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 32660eb1301bSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 32670eb1301bSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268c27c18e8Smrg 3269c27c18e8Smrg#ifdef __cplusplus 3270c27c18e8Smrgextern \"C\" { 3271c27c18e8Smrg#endif 3272c27c18e8Smrg 32730eb1301bSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 327437eb1ca1Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 327537eb1ca1Smrg#endif 327637eb1ca1Smrg 3277b789ec8aSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 32780eb1301bSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 32790eb1301bSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 3280b789ec8aSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 3281b789ec8aSmrg# define LT_DLSYM_CONST 32820eb1301bSmrg#elif defined(__osf__) 3283b789ec8aSmrg/* This system does not cope well with relocations in const data. */ 3284b789ec8aSmrg# define LT_DLSYM_CONST 3285b789ec8aSmrg#else 3286b789ec8aSmrg# define LT_DLSYM_CONST const 3287b789ec8aSmrg#endif 3288b789ec8aSmrg 3289c27c18e8Smrg/* External symbol declarations for the compiler. */\ 3290c27c18e8Smrg" 3291c27c18e8Smrg 32920eb1301bSmrg if test "$dlself" = yes; then 32930eb1301bSmrg func_verbose "generating symbol list for \`$output'" 3294c27c18e8Smrg 3295c27c18e8Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296c27c18e8Smrg 3297c27c18e8Smrg # Add our own program objects to the symbol list. 329837eb1ca1Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299c27c18e8Smrg for progfile in $progfiles; do 3300b789ec8aSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 33010eb1301bSmrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3302b789ec8aSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303c27c18e8Smrg done 3304c27c18e8Smrg 3305c27c18e8Smrg if test -n "$exclude_expsyms"; then 3306c27c18e8Smrg $opt_dry_run || { 3307c27c18e8Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 3309c27c18e8Smrg } 3310c43cc173Smrg fi 3311c27c18e8Smrg 3312c27c18e8Smrg if test -n "$export_symbols_regex"; then 3313c27c18e8Smrg $opt_dry_run || { 3314c27c18e8Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 3316c27c18e8Smrg } 3317c27c18e8Smrg fi 3318c27c18e8Smrg 3319c27c18e8Smrg # Prepare the list of exported symbols 3320c27c18e8Smrg if test -z "$export_symbols"; then 33210eb1301bSmrg export_symbols="$output_objdir/$outputname.exp" 3322c27c18e8Smrg $opt_dry_run || { 3323c27c18e8Smrg $RM $export_symbols 33240eb1301bSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325c27c18e8Smrg case $host in 3326c27c18e8Smrg *cygwin* | *mingw* | *cegcc* ) 3327c27c18e8Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328c27c18e8Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329c27c18e8Smrg ;; 3330c27c18e8Smrg esac 3331c27c18e8Smrg } 3332c43cc173Smrg else 3333c27c18e8Smrg $opt_dry_run || { 33340eb1301bSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335c27c18e8Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 3337c27c18e8Smrg case $host in 333837eb1ca1Smrg *cygwin* | *mingw* | *cegcc* ) 3339c27c18e8Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340c27c18e8Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341c27c18e8Smrg ;; 3342c27c18e8Smrg esac 3343c27c18e8Smrg } 3344c43cc173Smrg fi 3345c27c18e8Smrg fi 3346c43cc173Smrg 3347c27c18e8Smrg for dlprefile in $dlprefiles; do 33480eb1301bSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349c27c18e8Smrg func_basename "$dlprefile" 33500eb1301bSmrg name="$func_basename_result" 3351b789ec8aSmrg case $host in 3352b789ec8aSmrg *cygwin* | *mingw* | *cegcc* ) 3353b789ec8aSmrg # if an import library, we need to obtain dlname 3354b789ec8aSmrg if func_win32_import_lib_p "$dlprefile"; then 3355b789ec8aSmrg func_tr_sh "$dlprefile" 3356b789ec8aSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 33570eb1301bSmrg dlprefile_dlbasename="" 3358b789ec8aSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3359b789ec8aSmrg # Use subshell, to avoid clobbering current variable values 3360b789ec8aSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 33610eb1301bSmrg if test -n "$dlprefile_dlname" ; then 3362b789ec8aSmrg func_basename "$dlprefile_dlname" 33630eb1301bSmrg dlprefile_dlbasename="$func_basename_result" 3364b789ec8aSmrg else 3365b789ec8aSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 3366b789ec8aSmrg $sharedlib_from_linklib_cmd "$dlprefile" 3367b789ec8aSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 3368b789ec8aSmrg fi 3369b789ec8aSmrg fi 3370b789ec8aSmrg $opt_dry_run || { 33710eb1301bSmrg if test -n "$dlprefile_dlbasename" ; then 3372b789ec8aSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3373b789ec8aSmrg else 3374b789ec8aSmrg func_warning "Could not compute DLL name from $name" 3375b789ec8aSmrg eval '$ECHO ": $name " >> "$nlist"' 3376b789ec8aSmrg fi 3377b789ec8aSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3378b789ec8aSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3379b789ec8aSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3380b789ec8aSmrg } 3381b789ec8aSmrg else # not an import lib 3382b789ec8aSmrg $opt_dry_run || { 3383b789ec8aSmrg eval '$ECHO ": $name " >> "$nlist"' 3384b789ec8aSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3385b789ec8aSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3386b789ec8aSmrg } 3387b789ec8aSmrg fi 3388b789ec8aSmrg ;; 3389b789ec8aSmrg *) 3390b789ec8aSmrg $opt_dry_run || { 3391b789ec8aSmrg eval '$ECHO ": $name " >> "$nlist"' 3392b789ec8aSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3393b789ec8aSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3394b789ec8aSmrg } 3395b789ec8aSmrg ;; 3396b789ec8aSmrg esac 3397c27c18e8Smrg done 3398c27c18e8Smrg 3399c27c18e8Smrg $opt_dry_run || { 3400c27c18e8Smrg # Make sure we have at least an empty file. 3401c27c18e8Smrg test -f "$nlist" || : > "$nlist" 3402c27c18e8Smrg 3403c27c18e8Smrg if test -n "$exclude_expsyms"; then 3404c27c18e8Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405c27c18e8Smrg $MV "$nlist"T "$nlist" 3406c43cc173Smrg fi 3407c27c18e8Smrg 3408c27c18e8Smrg # Try sorting and uniquifying the output. 3409c27c18e8Smrg if $GREP -v "^: " < "$nlist" | 3410c27c18e8Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411c27c18e8Smrg sort -k 3 3412c27c18e8Smrg else 3413c27c18e8Smrg sort +2 3414c27c18e8Smrg fi | 3415c27c18e8Smrg uniq > "$nlist"S; then 3416c27c18e8Smrg : 3417c43cc173Smrg else 3418c27c18e8Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 3419c43cc173Smrg fi 3420c43cc173Smrg 3421c27c18e8Smrg if test -f "$nlist"S; then 3422c27c18e8Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423c43cc173Smrg else 342437eb1ca1Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425c43cc173Smrg fi 3426c43cc173Smrg 342737eb1ca1Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3428c43cc173Smrg 3429c27c18e8Smrg/* The mapping between symbol names and symbols. */ 3430c27c18e8Smrgtypedef struct { 3431c27c18e8Smrg const char *name; 3432c27c18e8Smrg void *address; 3433c27c18e8Smrg} lt_dlsymlist; 3434b789ec8aSmrgextern LT_DLSYM_CONST lt_dlsymlist 34350eb1301bSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 3436b789ec8aSmrgLT_DLSYM_CONST lt_dlsymlist 3437c27c18e8Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 34380eb1301bSmrg{\ 34390eb1301bSmrg { \"$my_originator\", (void *) 0 }," 3440c43cc173Smrg 3441c27c18e8Smrg case $need_lib_prefix in 3442c27c18e8Smrg no) 3443c27c18e8Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444c27c18e8Smrg ;; 3445c27c18e8Smrg *) 3446c27c18e8Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447c27c18e8Smrg ;; 3448c27c18e8Smrg esac 344937eb1ca1Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3450c27c18e8Smrg {0, (void *) 0} 3451c27c18e8Smrg}; 3452c43cc173Smrg 3453c27c18e8Smrg/* This works around a problem in FreeBSD linker */ 3454c27c18e8Smrg#ifdef FREEBSD_WORKAROUND 3455c27c18e8Smrgstatic const void *lt_preloaded_setup() { 3456c27c18e8Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457c27c18e8Smrg} 3458c27c18e8Smrg#endif 3459c43cc173Smrg 3460c27c18e8Smrg#ifdef __cplusplus 3461c27c18e8Smrg} 3462c27c18e8Smrg#endif\ 3463c27c18e8Smrg" 3464c27c18e8Smrg } # !$opt_dry_run 3465c43cc173Smrg 3466c27c18e8Smrg pic_flag_for_symtable= 3467c27c18e8Smrg case "$compile_command " in 3468c27c18e8Smrg *" -static "*) ;; 3469c27c18e8Smrg *) 3470c27c18e8Smrg case $host in 3471c27c18e8Smrg # compiling the symbol table file with pic_flag works around 3472c27c18e8Smrg # a FreeBSD bug that causes programs to crash when -lm is 3473c27c18e8Smrg # linked before any other PIC object. But we must not use 3474c27c18e8Smrg # pic_flag when linking with -static. The problem exists in 3475c27c18e8Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476f1ee322dSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477c27c18e8Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478c27c18e8Smrg *-*-hpux*) 3479c27c18e8Smrg pic_flag_for_symtable=" $pic_flag" ;; 3480c27c18e8Smrg *) 34810eb1301bSmrg if test "X$my_pic_p" != Xno; then 34820eb1301bSmrg pic_flag_for_symtable=" $pic_flag" 34830eb1301bSmrg fi 3484c27c18e8Smrg ;; 3485c27c18e8Smrg esac 3486c27c18e8Smrg ;; 3487c27c18e8Smrg esac 3488c27c18e8Smrg symtab_cflags= 3489c27c18e8Smrg for arg in $LTCFLAGS; do 3490c27c18e8Smrg case $arg in 3491c27c18e8Smrg -pie | -fpie | -fPIE) ;; 3492b789ec8aSmrg *) func_append symtab_cflags " $arg" ;; 3493c27c18e8Smrg esac 3494c27c18e8Smrg done 3495c43cc173Smrg 3496c27c18e8Smrg # Now compile the dynamic symbol file. 3497c27c18e8Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498c43cc173Smrg 3499c27c18e8Smrg # Clean up the generated files. 35000eb1301bSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501c43cc173Smrg 3502c27c18e8Smrg # Transform the symbol file into the correct name. 35030eb1301bSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504c27c18e8Smrg case $host in 3505c27c18e8Smrg *cygwin* | *mingw* | *cegcc* ) 3506c27c18e8Smrg if test -f "$output_objdir/$my_outputname.def"; then 350737eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 350837eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509c27c18e8Smrg else 351037eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 351137eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512c27c18e8Smrg fi 3513c27c18e8Smrg ;; 3514c27c18e8Smrg *) 351537eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 351637eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517c27c18e8Smrg ;; 3518c27c18e8Smrg esac 3519c27c18e8Smrg ;; 3520c27c18e8Smrg *) 35210eb1301bSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522c27c18e8Smrg ;; 3523c27c18e8Smrg esac 3524c27c18e8Smrg else 3525c27c18e8Smrg # We keep going just in case the user didn't refer to 3526c27c18e8Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527c27c18e8Smrg # really was required. 3528c43cc173Smrg 3529c27c18e8Smrg # Nullify the symbol file. 353037eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 353137eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532c27c18e8Smrg fi 3533c27c18e8Smrg} 3534c43cc173Smrg 3535c27c18e8Smrg# func_win32_libid arg 3536c27c18e8Smrg# return the library type of file 'arg' 3537c27c18e8Smrg# 3538c27c18e8Smrg# Need a lot of goo to handle *both* DLLs and import libs 3539c27c18e8Smrg# Has to be a shell function in order to 'eat' the argument 3540c27c18e8Smrg# that is supplied when $file_magic_command is called. 354137eb1ca1Smrg# Despite the name, also deal with 64 bit binaries. 3542c27c18e8Smrgfunc_win32_libid () 3543c27c18e8Smrg{ 35440eb1301bSmrg $opt_debug 35450eb1301bSmrg win32_libid_type="unknown" 3546c27c18e8Smrg win32_fileres=`file -L $1 2>/dev/null` 3547c27c18e8Smrg case $win32_fileres in 3548c27c18e8Smrg *ar\ archive\ import\ library*) # definitely import 3549c27c18e8Smrg win32_libid_type="x86 archive import" 3550c27c18e8Smrg ;; 3551c27c18e8Smrg *ar\ archive*) # could be an import, or static 355237eb1ca1Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553c27c18e8Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 355437eb1ca1Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 35550eb1301bSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 35560eb1301bSmrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 35570eb1301bSmrg $SED -n -e ' 3558c27c18e8Smrg 1,100{ 3559c27c18e8Smrg / I /{ 35600eb1301bSmrg s,.*,import, 3561c27c18e8Smrg p 3562c27c18e8Smrg q 3563c27c18e8Smrg } 3564c27c18e8Smrg }'` 3565c27c18e8Smrg case $win32_nmres in 3566c27c18e8Smrg import*) win32_libid_type="x86 archive import";; 3567c27c18e8Smrg *) win32_libid_type="x86 archive static";; 3568c27c18e8Smrg esac 3569c27c18e8Smrg fi 3570c27c18e8Smrg ;; 3571c27c18e8Smrg *DLL*) 3572c27c18e8Smrg win32_libid_type="x86 DLL" 3573c27c18e8Smrg ;; 3574c27c18e8Smrg *executable*) # but shell scripts are "executable" too... 3575c27c18e8Smrg case $win32_fileres in 3576c27c18e8Smrg *MS\ Windows\ PE\ Intel*) 3577c27c18e8Smrg win32_libid_type="x86 DLL" 3578c27c18e8Smrg ;; 3579c27c18e8Smrg esac 3580c27c18e8Smrg ;; 3581c27c18e8Smrg esac 3582c27c18e8Smrg $ECHO "$win32_libid_type" 3583c27c18e8Smrg} 3584c43cc173Smrg 3585b789ec8aSmrg# func_cygming_dll_for_implib ARG 3586b789ec8aSmrg# 3587b789ec8aSmrg# Platform-specific function to extract the 3588b789ec8aSmrg# name of the DLL associated with the specified 3589b789ec8aSmrg# import library ARG. 3590b789ec8aSmrg# Invoked by eval'ing the libtool variable 3591b789ec8aSmrg# $sharedlib_from_linklib_cmd 3592b789ec8aSmrg# Result is available in the variable 3593b789ec8aSmrg# $sharedlib_from_linklib_result 3594b789ec8aSmrgfunc_cygming_dll_for_implib () 3595b789ec8aSmrg{ 35960eb1301bSmrg $opt_debug 3597b789ec8aSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3598b789ec8aSmrg} 3599b789ec8aSmrg 3600b789ec8aSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3601b789ec8aSmrg# 3602b789ec8aSmrg# The is the core of a fallback implementation of a 3603b789ec8aSmrg# platform-specific function to extract the name of the 3604b789ec8aSmrg# DLL associated with the specified import library LIBNAME. 3605b789ec8aSmrg# 3606b789ec8aSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 3607b789ec8aSmrg# on the platform and compiler that created the implib. 3608b789ec8aSmrg# 3609b789ec8aSmrg# Echos the name of the DLL associated with the 3610b789ec8aSmrg# specified import library. 3611b789ec8aSmrgfunc_cygming_dll_for_implib_fallback_core () 3612b789ec8aSmrg{ 36130eb1301bSmrg $opt_debug 3614b789ec8aSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3615b789ec8aSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3616b789ec8aSmrg $SED '/^Contents of section '"$match_literal"':/{ 3617b789ec8aSmrg # Place marker at beginning of archive member dllname section 3618b789ec8aSmrg s/.*/====MARK====/ 3619b789ec8aSmrg p 3620b789ec8aSmrg d 3621b789ec8aSmrg } 3622b789ec8aSmrg # These lines can sometimes be longer than 43 characters, but 3623b789ec8aSmrg # are always uninteresting 3624b789ec8aSmrg /:[ ]*file format pe[i]\{,1\}-/d 3625b789ec8aSmrg /^In archive [^:]*:/d 3626b789ec8aSmrg # Ensure marker is printed 3627b789ec8aSmrg /^====MARK====/p 3628b789ec8aSmrg # Remove all lines with less than 43 characters 3629b789ec8aSmrg /^.\{43\}/!d 3630b789ec8aSmrg # From remaining lines, remove first 43 characters 3631b789ec8aSmrg s/^.\{43\}//' | 3632b789ec8aSmrg $SED -n ' 3633b789ec8aSmrg # Join marker and all lines until next marker into a single line 3634b789ec8aSmrg /^====MARK====/ b para 3635b789ec8aSmrg H 3636b789ec8aSmrg $ b para 3637b789ec8aSmrg b 3638b789ec8aSmrg :para 3639b789ec8aSmrg x 3640b789ec8aSmrg s/\n//g 3641b789ec8aSmrg # Remove the marker 3642b789ec8aSmrg s/^====MARK====// 3643b789ec8aSmrg # Remove trailing dots and whitespace 3644b789ec8aSmrg s/[\. \t]*$// 3645b789ec8aSmrg # Print 3646b789ec8aSmrg /./p' | 3647b789ec8aSmrg # we now have a list, one entry per line, of the stringified 3648b789ec8aSmrg # contents of the appropriate section of all members of the 36490eb1301bSmrg # archive which possess that section. Heuristic: eliminate 36500eb1301bSmrg # all those which have a first or second character that is 3651b789ec8aSmrg # a '.' (that is, objdump's representation of an unprintable 3652b789ec8aSmrg # character.) This should work for all archives with less than 3653b789ec8aSmrg # 0x302f exports -- but will fail for DLLs whose name actually 3654b789ec8aSmrg # begins with a literal '.' or a single character followed by 3655b789ec8aSmrg # a '.'. 3656b789ec8aSmrg # 3657b789ec8aSmrg # Of those that remain, print the first one. 3658b789ec8aSmrg $SED -e '/^\./d;/^.\./d;q' 3659b789ec8aSmrg} 3660b789ec8aSmrg 36610eb1301bSmrg# func_cygming_gnu_implib_p ARG 36620eb1301bSmrg# This predicate returns with zero status (TRUE) if 36630eb1301bSmrg# ARG is a GNU/binutils-style import library. Returns 36640eb1301bSmrg# with nonzero status (FALSE) otherwise. 36650eb1301bSmrgfunc_cygming_gnu_implib_p () 36660eb1301bSmrg{ 36670eb1301bSmrg $opt_debug 36680eb1301bSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36690eb1301bSmrg 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)$'` 36700eb1301bSmrg test -n "$func_cygming_gnu_implib_tmp" 36710eb1301bSmrg} 36720eb1301bSmrg 36730eb1301bSmrg# func_cygming_ms_implib_p ARG 36740eb1301bSmrg# This predicate returns with zero status (TRUE) if 36750eb1301bSmrg# ARG is an MS-style import library. Returns 36760eb1301bSmrg# with nonzero status (FALSE) otherwise. 36770eb1301bSmrgfunc_cygming_ms_implib_p () 36780eb1301bSmrg{ 36790eb1301bSmrg $opt_debug 36800eb1301bSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36810eb1301bSmrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 36820eb1301bSmrg test -n "$func_cygming_ms_implib_tmp" 36830eb1301bSmrg} 36840eb1301bSmrg 3685b789ec8aSmrg# func_cygming_dll_for_implib_fallback ARG 3686b789ec8aSmrg# Platform-specific function to extract the 3687b789ec8aSmrg# name of the DLL associated with the specified 3688b789ec8aSmrg# import library ARG. 3689b789ec8aSmrg# 3690b789ec8aSmrg# This fallback implementation is for use when $DLLTOOL 3691b789ec8aSmrg# does not support the --identify-strict option. 3692b789ec8aSmrg# Invoked by eval'ing the libtool variable 3693b789ec8aSmrg# $sharedlib_from_linklib_cmd 3694b789ec8aSmrg# Result is available in the variable 3695b789ec8aSmrg# $sharedlib_from_linklib_result 3696b789ec8aSmrgfunc_cygming_dll_for_implib_fallback () 3697b789ec8aSmrg{ 36980eb1301bSmrg $opt_debug 36990eb1301bSmrg if func_cygming_gnu_implib_p "$1" ; then 3700b789ec8aSmrg # binutils import library 3701b789ec8aSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 37020eb1301bSmrg elif func_cygming_ms_implib_p "$1" ; then 3703b789ec8aSmrg # ms-generated import library 3704b789ec8aSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3705b789ec8aSmrg else 3706b789ec8aSmrg # unknown 37070eb1301bSmrg sharedlib_from_linklib_result="" 3708b789ec8aSmrg fi 3709b789ec8aSmrg} 3710c43cc173Smrg 3711c43cc173Smrg 3712c27c18e8Smrg# func_extract_an_archive dir oldlib 3713c27c18e8Smrgfunc_extract_an_archive () 3714c27c18e8Smrg{ 37150eb1301bSmrg $opt_debug 37160eb1301bSmrg f_ex_an_ar_dir="$1"; shift 37170eb1301bSmrg f_ex_an_ar_oldlib="$1" 37180eb1301bSmrg if test "$lock_old_archive_extraction" = yes; then 371937eb1ca1Smrg lockfile=$f_ex_an_ar_oldlib.lock 372037eb1ca1Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 372137eb1ca1Smrg func_echo "Waiting for $lockfile to be removed" 372237eb1ca1Smrg sleep 2 372337eb1ca1Smrg done 372437eb1ca1Smrg fi 372537eb1ca1Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 372637eb1ca1Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 37270eb1301bSmrg if test "$lock_old_archive_extraction" = yes; then 372837eb1ca1Smrg $opt_dry_run || rm -f "$lockfile" 372937eb1ca1Smrg fi 3730c27c18e8Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731c27c18e8Smrg : 3732c27c18e8Smrg else 3733c27c18e8Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734c27c18e8Smrg fi 3735c27c18e8Smrg} 3736c43cc173Smrg 3737c43cc173Smrg 3738c27c18e8Smrg# func_extract_archives gentop oldlib ... 3739c27c18e8Smrgfunc_extract_archives () 3740c27c18e8Smrg{ 37410eb1301bSmrg $opt_debug 37420eb1301bSmrg my_gentop="$1"; shift 3743c27c18e8Smrg my_oldlibs=${1+"$@"} 37440eb1301bSmrg my_oldobjs="" 37450eb1301bSmrg my_xlib="" 37460eb1301bSmrg my_xabs="" 37470eb1301bSmrg my_xdir="" 3748c43cc173Smrg 3749c27c18e8Smrg for my_xlib in $my_oldlibs; do 3750c27c18e8Smrg # Extract the objects. 3751c27c18e8Smrg case $my_xlib in 37520eb1301bSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753c27c18e8Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754c27c18e8Smrg esac 3755c27c18e8Smrg func_basename "$my_xlib" 37560eb1301bSmrg my_xlib="$func_basename_result" 3757c27c18e8Smrg my_xlib_u=$my_xlib 3758c27c18e8Smrg while :; do 3759c27c18e8Smrg case " $extracted_archives " in 3760c27c18e8Smrg *" $my_xlib_u "*) 3761c27c18e8Smrg func_arith $extracted_serial + 1 3762c27c18e8Smrg extracted_serial=$func_arith_result 3763c27c18e8Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764c27c18e8Smrg *) break ;; 3765c27c18e8Smrg esac 3766c27c18e8Smrg done 3767c27c18e8Smrg extracted_archives="$extracted_archives $my_xlib_u" 37680eb1301bSmrg my_xdir="$my_gentop/$my_xlib_u" 3769c43cc173Smrg 3770c27c18e8Smrg func_mkdir_p "$my_xdir" 3771c27c18e8Smrg 3772c27c18e8Smrg case $host in 3773c27c18e8Smrg *-darwin*) 3774c27c18e8Smrg func_verbose "Extracting $my_xabs" 3775c27c18e8Smrg # Do not bother doing anything if just a dry run 3776c27c18e8Smrg $opt_dry_run || { 3777c27c18e8Smrg darwin_orig_dir=`pwd` 3778c27c18e8Smrg cd $my_xdir || exit $? 3779c27c18e8Smrg darwin_archive=$my_xabs 3780c27c18e8Smrg darwin_curdir=`pwd` 37810eb1301bSmrg darwin_base_archive=`basename "$darwin_archive"` 3782c27c18e8Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783c27c18e8Smrg if test -n "$darwin_arches"; then 3784c27c18e8Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785c27c18e8Smrg darwin_arch= 3786c27c18e8Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 37870eb1301bSmrg for darwin_arch in $darwin_arches ; do 37880eb1301bSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 37890eb1301bSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 37900eb1301bSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 37910eb1301bSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792c27c18e8Smrg cd "$darwin_curdir" 37930eb1301bSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794c27c18e8Smrg done # $darwin_arches 3795c27c18e8Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 37960eb1301bSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797c27c18e8Smrg darwin_file= 3798c27c18e8Smrg darwin_files= 3799c27c18e8Smrg for darwin_file in $darwin_filelist; do 380037eb1ca1Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801c27c18e8Smrg $LIPO -create -output "$darwin_file" $darwin_files 3802c27c18e8Smrg done # $darwin_filelist 3803c27c18e8Smrg $RM -rf unfat-$$ 3804c27c18e8Smrg cd "$darwin_orig_dir" 3805c43cc173Smrg else 3806c27c18e8Smrg cd $darwin_orig_dir 3807c27c18e8Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808c27c18e8Smrg fi # $darwin_arches 3809c27c18e8Smrg } # !$opt_dry_run 3810c27c18e8Smrg ;; 3811c27c18e8Smrg *) 3812c27c18e8Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813c27c18e8Smrg ;; 3814c27c18e8Smrg esac 381537eb1ca1Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816c27c18e8Smrg done 3817c43cc173Smrg 38180eb1301bSmrg func_extract_archives_result="$my_oldobjs" 3819c27c18e8Smrg} 3820c43cc173Smrg 3821c43cc173Smrg 382237eb1ca1Smrg# func_emit_wrapper [arg=no] 382337eb1ca1Smrg# 382437eb1ca1Smrg# Emit a libtool wrapper script on stdout. 382537eb1ca1Smrg# Don't directly open a file because we may want to 382637eb1ca1Smrg# incorporate the script contents within a cygwin/mingw 382737eb1ca1Smrg# wrapper executable. Must ONLY be called from within 382837eb1ca1Smrg# func_mode_link because it depends on a number of variables 382937eb1ca1Smrg# set therein. 3830c27c18e8Smrg# 383137eb1ca1Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 383237eb1ca1Smrg# variable will take. If 'yes', then the emitted script 38330eb1301bSmrg# will assume that the directory in which it is stored is 383437eb1ca1Smrg# the $objdir directory. This is a cygwin/mingw-specific 383537eb1ca1Smrg# behavior. 383637eb1ca1Smrgfunc_emit_wrapper () 3837c27c18e8Smrg{ 383837eb1ca1Smrg func_emit_wrapper_arg1=${1-no} 3839c43cc173Smrg 3840c27c18e8Smrg $ECHO "\ 3841c27c18e8Smrg#! $SHELL 3842c43cc173Smrg 3843c27c18e8Smrg# $output - temporary wrapper script for $objdir/$outputname 38440eb1301bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845c27c18e8Smrg# 3846c27c18e8Smrg# The $output program cannot be directly executed until all the libtool 3847c27c18e8Smrg# libraries that it depends on are installed. 3848c27c18e8Smrg# 3849c27c18e8Smrg# This wrapper script should never be moved out of the build directory. 3850c27c18e8Smrg# If it is, it will not operate correctly. 3851c43cc173Smrg 3852c27c18e8Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3853c27c18e8Smrg# metacharacters that are still active within double-quoted strings. 3854c27c18e8Smrgsed_quote_subst='$sed_quote_subst' 3855c43cc173Smrg 3856c27c18e8Smrg# Be Bourne compatible 3857c27c18e8Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858c27c18e8Smrg emulate sh 3859c27c18e8Smrg NULLCMD=: 3860c27c18e8Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861c27c18e8Smrg # is contrary to our usage. Disable this feature. 3862c27c18e8Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863c27c18e8Smrg setopt NO_GLOB_SUBST 3864c27c18e8Smrgelse 3865c27c18e8Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866c27c18e8Smrgfi 3867c27c18e8SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868c27c18e8SmrgDUALCASE=1; export DUALCASE # for MKS sh 3869c43cc173Smrg 3870c27c18e8Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871c27c18e8Smrg# if CDPATH is set. 3872c27c18e8Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873c43cc173Smrg 3874c27c18e8Smrgrelink_command=\"$relink_command\" 3875c43cc173Smrg 3876c27c18e8Smrg# This environment variable determines our operation mode. 3877c27c18e8Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878c27c18e8Smrg # install mode needs the following variables: 3879c27c18e8Smrg generated_by_libtool_version='$macro_version' 3880c27c18e8Smrg notinst_deplibs='$notinst_deplibs' 3881c27c18e8Smrgelse 3882c27c18e8Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883c27c18e8Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 388437eb1ca1Smrg file=\"\$0\"" 388537eb1ca1Smrg 388637eb1ca1Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 388737eb1ca1Smrg $ECHO "\ 388837eb1ca1Smrg 388937eb1ca1Smrg# A function that is used when there is no print builtin or printf. 389037eb1ca1Smrgfunc_fallback_echo () 389137eb1ca1Smrg{ 389237eb1ca1Smrg eval 'cat <<_LTECHO_EOF 389337eb1ca1Smrg\$1 389437eb1ca1Smrg_LTECHO_EOF' 389537eb1ca1Smrg} 389637eb1ca1Smrg ECHO=\"$qECHO\" 389737eb1ca1Smrg fi 389837eb1ca1Smrg 389937eb1ca1Smrg# Very basic option parsing. These options are (a) specific to 390037eb1ca1Smrg# the libtool wrapper, (b) are identical between the wrapper 39010eb1301bSmrg# /script/ and the wrapper /executable/ which is used only on 390237eb1ca1Smrg# windows platforms, and (c) all begin with the string "--lt-" 39030eb1301bSmrg# (application programs are unlikely to have options which match 390437eb1ca1Smrg# this pattern). 390537eb1ca1Smrg# 390637eb1ca1Smrg# There are only two supported options: --lt-debug and 390737eb1ca1Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 390837eb1ca1Smrg# 390937eb1ca1Smrg# The first argument to this parsing function should be the 391037eb1ca1Smrg# script's $0 value, followed by "$@". 391137eb1ca1Smrglt_option_debug= 391237eb1ca1Smrgfunc_parse_lt_options () 391337eb1ca1Smrg{ 391437eb1ca1Smrg lt_script_arg0=\$0 391537eb1ca1Smrg shift 391637eb1ca1Smrg for lt_opt 391737eb1ca1Smrg do 391837eb1ca1Smrg case \"\$lt_opt\" in 391937eb1ca1Smrg --lt-debug) lt_option_debug=1 ;; 392037eb1ca1Smrg --lt-dump-script) 392137eb1ca1Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 392237eb1ca1Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 392337eb1ca1Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 392437eb1ca1Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 392537eb1ca1Smrg exit 0 392637eb1ca1Smrg ;; 392737eb1ca1Smrg --lt-*) 392837eb1ca1Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 392937eb1ca1Smrg exit 1 393037eb1ca1Smrg ;; 393137eb1ca1Smrg esac 393237eb1ca1Smrg done 393337eb1ca1Smrg 393437eb1ca1Smrg # Print the debug banner immediately: 393537eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 39360eb1301bSmrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 393737eb1ca1Smrg fi 393837eb1ca1Smrg} 393937eb1ca1Smrg 394037eb1ca1Smrg# Used when --lt-debug. Prints its arguments to stdout 394137eb1ca1Smrg# (redirection is the responsibility of the caller) 394237eb1ca1Smrgfunc_lt_dump_args () 394337eb1ca1Smrg{ 394437eb1ca1Smrg lt_dump_args_N=1; 394537eb1ca1Smrg for lt_arg 394637eb1ca1Smrg do 39470eb1301bSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 394837eb1ca1Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 394937eb1ca1Smrg done 395037eb1ca1Smrg} 395137eb1ca1Smrg 395237eb1ca1Smrg# Core function for launching the target application 395337eb1ca1Smrgfunc_exec_program_core () 395437eb1ca1Smrg{ 3955c27c18e8Smrg" 395637eb1ca1Smrg case $host in 395737eb1ca1Smrg # Backslashes separate directories on plain windows 395837eb1ca1Smrg *-*-mingw | *-*-os2* | *-cegcc*) 395937eb1ca1Smrg $ECHO "\ 396037eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 39610eb1301bSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 396237eb1ca1Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 396337eb1ca1Smrg fi 396437eb1ca1Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 396537eb1ca1Smrg" 396637eb1ca1Smrg ;; 396737eb1ca1Smrg 396837eb1ca1Smrg *) 396937eb1ca1Smrg $ECHO "\ 397037eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 39710eb1301bSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 397237eb1ca1Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 397337eb1ca1Smrg fi 397437eb1ca1Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 397537eb1ca1Smrg" 397637eb1ca1Smrg ;; 397737eb1ca1Smrg esac 397837eb1ca1Smrg $ECHO "\ 397937eb1ca1Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 398037eb1ca1Smrg exit 1 398137eb1ca1Smrg} 398237eb1ca1Smrg 398337eb1ca1Smrg# A function to encapsulate launching the target application 398437eb1ca1Smrg# Strips options in the --lt-* namespace from \$@ and 398537eb1ca1Smrg# launches target application with the remaining arguments. 398637eb1ca1Smrgfunc_exec_program () 398737eb1ca1Smrg{ 3988f1ee322dSmrg case \" \$* \" in 3989f1ee322dSmrg *\\ --lt-*) 3990f1ee322dSmrg for lt_wr_arg 3991f1ee322dSmrg do 3992f1ee322dSmrg case \$lt_wr_arg in 3993f1ee322dSmrg --lt-*) ;; 3994f1ee322dSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995f1ee322dSmrg esac 3996f1ee322dSmrg shift 3997f1ee322dSmrg done ;; 3998f1ee322dSmrg esac 399937eb1ca1Smrg func_exec_program_core \${1+\"\$@\"} 400037eb1ca1Smrg} 400137eb1ca1Smrg 400237eb1ca1Smrg # Parse options 400337eb1ca1Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004c43cc173Smrg 4005c27c18e8Smrg # Find the directory that this script lives in. 400637eb1ca1Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007c27c18e8Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008c43cc173Smrg 4009c27c18e8Smrg # Follow symbolic links until we get to the real thisdir. 401037eb1ca1Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011c27c18e8Smrg while test -n \"\$file\"; do 401237eb1ca1Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013c27c18e8Smrg 4014c27c18e8Smrg # If there was a directory component, then change thisdir. 4015c27c18e8Smrg if test \"x\$destdir\" != \"x\$file\"; then 4016c27c18e8Smrg case \"\$destdir\" in 4017c27c18e8Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018c27c18e8Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 4019c43cc173Smrg esac 4020c27c18e8Smrg fi 4021c43cc173Smrg 402237eb1ca1Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 402337eb1ca1Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024c27c18e8Smrg done 4025c43cc173Smrg 4026c27c18e8Smrg # Usually 'no', except on cygwin/mingw when embedded into 4027c27c18e8Smrg # the cwrapper. 402837eb1ca1Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029c27c18e8Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030c27c18e8Smrg # special case for '.' 4031c27c18e8Smrg if test \"\$thisdir\" = \".\"; then 4032c27c18e8Smrg thisdir=\`pwd\` 4033c27c18e8Smrg fi 4034c27c18e8Smrg # remove .libs from thisdir 4035c27c18e8Smrg case \"\$thisdir\" in 403637eb1ca1Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037c27c18e8Smrg $objdir ) thisdir=. ;; 4038c27c18e8Smrg esac 4039c27c18e8Smrg fi 4040c27c18e8Smrg 4041c27c18e8Smrg # Try to get the absolute directory name. 4042c27c18e8Smrg absdir=\`cd \"\$thisdir\" && pwd\` 4043c27c18e8Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044c27c18e8Smrg" 4045c27c18e8Smrg 40460eb1301bSmrg if test "$fast_install" = yes; then 4047c27c18e8Smrg $ECHO "\ 4048c27c18e8Smrg program=lt-'$outputname'$exeext 4049c27c18e8Smrg progdir=\"\$thisdir/$objdir\" 4050c27c18e8Smrg 4051c27c18e8Smrg if test ! -f \"\$progdir/\$program\" || 40520eb1301bSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053c27c18e8Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054c27c18e8Smrg 4055c27c18e8Smrg file=\"\$\$-\$program\" 4056c27c18e8Smrg 4057c27c18e8Smrg if test ! -d \"\$progdir\"; then 4058c27c18e8Smrg $MKDIR \"\$progdir\" 4059c27c18e8Smrg else 4060c27c18e8Smrg $RM \"\$progdir/\$file\" 4061c27c18e8Smrg fi" 4062c27c18e8Smrg 4063c27c18e8Smrg $ECHO "\ 4064c27c18e8Smrg 4065c27c18e8Smrg # relink executable if necessary 4066c27c18e8Smrg if test -n \"\$relink_command\"; then 4067c27c18e8Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068c27c18e8Smrg else 40690eb1301bSmrg $ECHO \"\$relink_command_output\" >&2 4070c27c18e8Smrg $RM \"\$progdir/\$file\" 4071c27c18e8Smrg exit 1 4072c43cc173Smrg fi 4073c27c18e8Smrg fi 4074c43cc173Smrg 4075c27c18e8Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076c27c18e8Smrg { $RM \"\$progdir/\$program\"; 4077c27c18e8Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078c27c18e8Smrg $RM \"\$progdir/\$file\" 4079c27c18e8Smrg fi" 4080c27c18e8Smrg else 4081c27c18e8Smrg $ECHO "\ 4082c27c18e8Smrg program='$outputname' 4083c27c18e8Smrg progdir=\"\$thisdir/$objdir\" 4084c27c18e8Smrg" 4085c43cc173Smrg fi 4086c43cc173Smrg 4087c27c18e8Smrg $ECHO "\ 4088c27c18e8Smrg 4089c27c18e8Smrg if test -f \"\$progdir/\$program\"; then" 4090c27c18e8Smrg 4091b789ec8aSmrg # fixup the dll searchpath if we need to. 4092b789ec8aSmrg # 4093b789ec8aSmrg # Fix the DLL searchpath if we need to. Do this before prepending 4094b789ec8aSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 4095b789ec8aSmrg # libraries must come first. 4096b789ec8aSmrg if test -n "$dllsearchpath"; then 4097b789ec8aSmrg $ECHO "\ 4098b789ec8aSmrg # Add the dll search path components to the executable PATH 4099b789ec8aSmrg PATH=$dllsearchpath:\$PATH 4100b789ec8aSmrg" 4101b789ec8aSmrg fi 4102b789ec8aSmrg 4103c27c18e8Smrg # Export our shlibpath_var if we have one. 41040eb1301bSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105c27c18e8Smrg $ECHO "\ 4106c27c18e8Smrg # Add our own library path to $shlibpath_var 4107c27c18e8Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108c27c18e8Smrg 4109c27c18e8Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110c27c18e8Smrg # The second colon is a workaround for a bug in BeOS R4 sed 411137eb1ca1Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112c27c18e8Smrg 4113c27c18e8Smrg export $shlibpath_var 4114c27c18e8Smrg" 4115c43cc173Smrg fi 4116c43cc173Smrg 4117c27c18e8Smrg $ECHO "\ 4118c27c18e8Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119c27c18e8Smrg # Run the actual program with our arguments. 412037eb1ca1Smrg func_exec_program \${1+\"\$@\"} 4121c27c18e8Smrg fi 4122c27c18e8Smrg else 4123c27c18e8Smrg # The program doesn't exist. 41240eb1301bSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125c27c18e8Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 412637eb1ca1Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127c27c18e8Smrg exit 1 4128c27c18e8Smrg fi 4129c27c18e8Smrgfi\ 4130c27c18e8Smrg" 4131c27c18e8Smrg} 4132c43cc173Smrg 4133c43cc173Smrg 4134c27c18e8Smrg# func_emit_cwrapperexe_src 4135c27c18e8Smrg# emit the source code for a wrapper executable on stdout 4136c27c18e8Smrg# Must ONLY be called from within func_mode_link because 4137c27c18e8Smrg# it depends on a number of variable set therein. 4138c27c18e8Smrgfunc_emit_cwrapperexe_src () 4139c27c18e8Smrg{ 4140c27c18e8Smrg cat <<EOF 4141c43cc173Smrg 4142c27c18e8Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 41430eb1301bSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144c43cc173Smrg 4145c27c18e8Smrg The $output program cannot be directly executed until all the libtool 4146c27c18e8Smrg libraries that it depends on are installed. 4147c43cc173Smrg 4148c27c18e8Smrg This wrapper executable should never be moved out of the build directory. 4149c27c18e8Smrg If it is, it will not operate correctly. 4150c27c18e8Smrg*/ 4151c27c18e8SmrgEOF 4152c27c18e8Smrg cat <<"EOF" 415337eb1ca1Smrg#ifdef _MSC_VER 415437eb1ca1Smrg# define _CRT_SECURE_NO_DEPRECATE 1 415537eb1ca1Smrg#endif 4156c27c18e8Smrg#include <stdio.h> 4157c27c18e8Smrg#include <stdlib.h> 4158c27c18e8Smrg#ifdef _MSC_VER 4159c27c18e8Smrg# include <direct.h> 4160c27c18e8Smrg# include <process.h> 4161c27c18e8Smrg# include <io.h> 4162c27c18e8Smrg#else 4163c27c18e8Smrg# include <unistd.h> 4164c27c18e8Smrg# include <stdint.h> 4165c27c18e8Smrg# ifdef __CYGWIN__ 4166c27c18e8Smrg# include <io.h> 4167c27c18e8Smrg# endif 4168c27c18e8Smrg#endif 4169c27c18e8Smrg#include <malloc.h> 4170c27c18e8Smrg#include <stdarg.h> 4171c27c18e8Smrg#include <assert.h> 4172c27c18e8Smrg#include <string.h> 4173c27c18e8Smrg#include <ctype.h> 4174c27c18e8Smrg#include <errno.h> 4175c27c18e8Smrg#include <fcntl.h> 4176c27c18e8Smrg#include <sys/stat.h> 4177c43cc173Smrg 417837eb1ca1Smrg/* declarations of non-ANSI functions */ 41790eb1301bSmrg#if defined(__MINGW32__) 418037eb1ca1Smrg# ifdef __STRICT_ANSI__ 418137eb1ca1Smrgint _putenv (const char *); 418237eb1ca1Smrg# endif 41830eb1301bSmrg#elif defined(__CYGWIN__) 418437eb1ca1Smrg# ifdef __STRICT_ANSI__ 418537eb1ca1Smrgchar *realpath (const char *, char *); 418637eb1ca1Smrgint putenv (char *); 418737eb1ca1Smrgint setenv (const char *, const char *, int); 418837eb1ca1Smrg# endif 41890eb1301bSmrg/* #elif defined (other platforms) ... */ 419037eb1ca1Smrg#endif 419137eb1ca1Smrg 419237eb1ca1Smrg/* portability defines, excluding path handling macros */ 41930eb1301bSmrg#if defined(_MSC_VER) 419437eb1ca1Smrg# define setmode _setmode 419537eb1ca1Smrg# define stat _stat 419637eb1ca1Smrg# define chmod _chmod 419737eb1ca1Smrg# define getcwd _getcwd 419837eb1ca1Smrg# define putenv _putenv 419937eb1ca1Smrg# define S_IXUSR _S_IEXEC 42000eb1301bSmrg# ifndef _INTPTR_T_DEFINED 42010eb1301bSmrg# define _INTPTR_T_DEFINED 42020eb1301bSmrg# define intptr_t int 42030eb1301bSmrg# endif 42040eb1301bSmrg#elif defined(__MINGW32__) 420537eb1ca1Smrg# define setmode _setmode 420637eb1ca1Smrg# define stat _stat 420737eb1ca1Smrg# define chmod _chmod 420837eb1ca1Smrg# define getcwd _getcwd 420937eb1ca1Smrg# define putenv _putenv 42100eb1301bSmrg#elif defined(__CYGWIN__) 421137eb1ca1Smrg# define HAVE_SETENV 421237eb1ca1Smrg# define FOPEN_WB "wb" 42130eb1301bSmrg/* #elif defined (other platforms) ... */ 421437eb1ca1Smrg#endif 421537eb1ca1Smrg 42160eb1301bSmrg#if defined(PATH_MAX) 4217c27c18e8Smrg# define LT_PATHMAX PATH_MAX 42180eb1301bSmrg#elif defined(MAXPATHLEN) 4219c27c18e8Smrg# define LT_PATHMAX MAXPATHLEN 4220c27c18e8Smrg#else 4221c27c18e8Smrg# define LT_PATHMAX 1024 4222c27c18e8Smrg#endif 4223c43cc173Smrg 4224c27c18e8Smrg#ifndef S_IXOTH 4225c27c18e8Smrg# define S_IXOTH 0 4226c27c18e8Smrg#endif 4227c27c18e8Smrg#ifndef S_IXGRP 4228c27c18e8Smrg# define S_IXGRP 0 4229c27c18e8Smrg#endif 4230c43cc173Smrg 423137eb1ca1Smrg/* path handling portability macros */ 4232c27c18e8Smrg#ifndef DIR_SEPARATOR 4233c27c18e8Smrg# define DIR_SEPARATOR '/' 4234c27c18e8Smrg# define PATH_SEPARATOR ':' 4235c27c18e8Smrg#endif 4236c43cc173Smrg 42370eb1301bSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 42380eb1301bSmrg defined (__OS2__) 4239c27c18e8Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240c27c18e8Smrg# define FOPEN_WB "wb" 4241c27c18e8Smrg# ifndef DIR_SEPARATOR_2 4242c27c18e8Smrg# define DIR_SEPARATOR_2 '\\' 4243c27c18e8Smrg# endif 4244c27c18e8Smrg# ifndef PATH_SEPARATOR_2 4245c27c18e8Smrg# define PATH_SEPARATOR_2 ';' 4246c27c18e8Smrg# endif 4247c27c18e8Smrg#endif 4248c43cc173Smrg 4249c27c18e8Smrg#ifndef DIR_SEPARATOR_2 4250c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251c27c18e8Smrg#else /* DIR_SEPARATOR_2 */ 4252c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) \ 4253c27c18e8Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254c27c18e8Smrg#endif /* DIR_SEPARATOR_2 */ 4255c43cc173Smrg 4256c27c18e8Smrg#ifndef PATH_SEPARATOR_2 4257c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258c27c18e8Smrg#else /* PATH_SEPARATOR_2 */ 4259c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260c27c18e8Smrg#endif /* PATH_SEPARATOR_2 */ 4261c43cc173Smrg 4262c27c18e8Smrg#ifndef FOPEN_WB 4263c27c18e8Smrg# define FOPEN_WB "w" 4264c27c18e8Smrg#endif 4265c27c18e8Smrg#ifndef _O_BINARY 4266c27c18e8Smrg# define _O_BINARY 0 4267c27c18e8Smrg#endif 4268c43cc173Smrg 4269c27c18e8Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270c27c18e8Smrg#define XFREE(stale) do { \ 42710eb1301bSmrg if (stale) { free ((void *) stale); stale = 0; } \ 4272c27c18e8Smrg} while (0) 4273c43cc173Smrg 42740eb1301bSmrg#if defined(LT_DEBUGWRAPPER) 427537eb1ca1Smrgstatic int lt_debug = 1; 4276c27c18e8Smrg#else 427737eb1ca1Smrgstatic int lt_debug = 0; 4278c27c18e8Smrg#endif 4279c43cc173Smrg 428037eb1ca1Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281c43cc173Smrg 4282c27c18e8Smrgvoid *xmalloc (size_t num); 4283c27c18e8Smrgchar *xstrdup (const char *string); 4284c27c18e8Smrgconst char *base_name (const char *name); 4285c27c18e8Smrgchar *find_executable (const char *wrapper); 4286c27c18e8Smrgchar *chase_symlinks (const char *pathspec); 4287c27c18e8Smrgint make_executable (const char *path); 4288c27c18e8Smrgint check_executable (const char *path); 4289c27c18e8Smrgchar *strendzap (char *str, const char *pat); 429037eb1ca1Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 429137eb1ca1Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 429237eb1ca1Smrgstatic const char *nonnull (const char *s); 429337eb1ca1Smrgstatic const char *nonempty (const char *s); 4294c27c18e8Smrgvoid lt_setenv (const char *name, const char *value); 4295c27c18e8Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296c27c18e8Smrgvoid lt_update_exe_path (const char *name, const char *value); 4297c27c18e8Smrgvoid lt_update_lib_path (const char *name, const char *value); 429837eb1ca1Smrgchar **prepare_spawn (char **argv); 429937eb1ca1Smrgvoid lt_dump_script (FILE *f); 4300c27c18e8SmrgEOF 4301c27c18e8Smrg 4302c27c18e8Smrg cat <<EOF 43030eb1301bSmrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304c27c18e8Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305c27c18e8SmrgEOF 4306c43cc173Smrg 43070eb1301bSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4308b789ec8aSmrg func_to_host_path "$temp_rpath" 4309c27c18e8Smrg cat <<EOF 4310b789ec8aSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311c27c18e8SmrgEOF 4312c27c18e8Smrg else 4313c27c18e8Smrg cat <<"EOF" 4314c27c18e8Smrgconst char * LIB_PATH_VALUE = ""; 4315c27c18e8SmrgEOF 4316c27c18e8Smrg fi 4317c43cc173Smrg 4318c27c18e8Smrg if test -n "$dllsearchpath"; then 4319b789ec8aSmrg func_to_host_path "$dllsearchpath:" 4320c27c18e8Smrg cat <<EOF 4321c27c18e8Smrgconst char * EXE_PATH_VARNAME = "PATH"; 4322b789ec8aSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323c27c18e8SmrgEOF 4324c27c18e8Smrg else 4325c27c18e8Smrg cat <<"EOF" 4326c27c18e8Smrgconst char * EXE_PATH_VARNAME = ""; 4327c27c18e8Smrgconst char * EXE_PATH_VALUE = ""; 4328c27c18e8SmrgEOF 4329c27c18e8Smrg fi 4330c43cc173Smrg 43310eb1301bSmrg if test "$fast_install" = yes; then 4332c27c18e8Smrg cat <<EOF 4333c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334c27c18e8SmrgEOF 4335c27c18e8Smrg else 4336c27c18e8Smrg cat <<EOF 4337c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338c27c18e8SmrgEOF 4339c27c18e8Smrg fi 4340c43cc173Smrg 4341c43cc173Smrg 4342c27c18e8Smrg cat <<"EOF" 4343c43cc173Smrg 4344c27c18e8Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345c43cc173Smrg 4346c27c18e8Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347c27c18e8Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 434837eb1ca1Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349c27c18e8Smrg 4350c27c18e8Smrgint 4351c27c18e8Smrgmain (int argc, char *argv[]) 4352c27c18e8Smrg{ 4353c27c18e8Smrg char **newargz; 4354c27c18e8Smrg int newargc; 4355c27c18e8Smrg char *tmp_pathspec; 4356c27c18e8Smrg char *actual_cwrapper_path; 4357c27c18e8Smrg char *actual_cwrapper_name; 4358c27c18e8Smrg char *target_name; 4359c27c18e8Smrg char *lt_argv_zero; 43600eb1301bSmrg intptr_t rval = 127; 4361c27c18e8Smrg 4362c27c18e8Smrg int i; 4363c27c18e8Smrg 4364c27c18e8Smrg program_name = (char *) xstrdup (base_name (argv[0])); 43650eb1301bSmrg newargz = XMALLOC (char *, argc + 1); 4366c27c18e8Smrg 436737eb1ca1Smrg /* very simple arg parsing; don't want to rely on getopt 436837eb1ca1Smrg * also, copy all non cwrapper options to newargz, except 436937eb1ca1Smrg * argz[0], which is handled differently 437037eb1ca1Smrg */ 437137eb1ca1Smrg newargc=0; 4372c27c18e8Smrg for (i = 1; i < argc; i++) 4373c27c18e8Smrg { 43740eb1301bSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375c27c18e8Smrg { 4376c27c18e8SmrgEOF 43770eb1301bSmrg case "$host" in 4378c27c18e8Smrg *mingw* | *cygwin* ) 4379c27c18e8Smrg # make stdout use "unix" line endings 4380c27c18e8Smrg echo " setmode(1,_O_BINARY);" 4381c27c18e8Smrg ;; 4382c27c18e8Smrg esac 4383c27c18e8Smrg 4384c27c18e8Smrg cat <<"EOF" 438537eb1ca1Smrg lt_dump_script (stdout); 4386c27c18e8Smrg return 0; 4387c27c18e8Smrg } 43880eb1301bSmrg if (strcmp (argv[i], debug_opt) == 0) 438937eb1ca1Smrg { 439037eb1ca1Smrg lt_debug = 1; 439137eb1ca1Smrg continue; 439237eb1ca1Smrg } 43930eb1301bSmrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 439437eb1ca1Smrg { 439537eb1ca1Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 439637eb1ca1Smrg namespace, but it is not one of the ones we know about and 439737eb1ca1Smrg have already dealt with, above (inluding dump-script), then 439837eb1ca1Smrg report an error. Otherwise, targets might begin to believe 439937eb1ca1Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 440037eb1ca1Smrg namespace. The first time any user complains about this, we'll 440137eb1ca1Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 440237eb1ca1Smrg or a configure.ac-settable value. 440337eb1ca1Smrg */ 440437eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 440537eb1ca1Smrg "unrecognized %s option: '%s'", 440637eb1ca1Smrg ltwrapper_option_prefix, argv[i]); 440737eb1ca1Smrg } 440837eb1ca1Smrg /* otherwise ... */ 440937eb1ca1Smrg newargz[++newargc] = xstrdup (argv[i]); 4410c27c18e8Smrg } 441137eb1ca1Smrg newargz[++newargc] = NULL; 441237eb1ca1Smrg 441337eb1ca1SmrgEOF 441437eb1ca1Smrg cat <<EOF 441537eb1ca1Smrg /* The GNU banner must be the first non-error debug message */ 44160eb1301bSmrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 441737eb1ca1SmrgEOF 441837eb1ca1Smrg cat <<"EOF" 441937eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 442037eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421c27c18e8Smrg 4422c27c18e8Smrg tmp_pathspec = find_executable (argv[0]); 4423c27c18e8Smrg if (tmp_pathspec == NULL) 442437eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 442537eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 442637eb1ca1Smrg "(main) found exe (before symlink chase) at: %s\n", 442737eb1ca1Smrg tmp_pathspec); 4428c27c18e8Smrg 4429c27c18e8Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 443037eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 443137eb1ca1Smrg "(main) found exe (after symlink chase) at: %s\n", 443237eb1ca1Smrg actual_cwrapper_path); 4433c27c18e8Smrg XFREE (tmp_pathspec); 4434c27c18e8Smrg 443537eb1ca1Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436c27c18e8Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437c27c18e8Smrg 4438c27c18e8Smrg /* wrapper name transforms */ 4439c27c18e8Smrg strendzap (actual_cwrapper_name, ".exe"); 4440c27c18e8Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441c27c18e8Smrg XFREE (actual_cwrapper_name); 4442c27c18e8Smrg actual_cwrapper_name = tmp_pathspec; 4443c27c18e8Smrg tmp_pathspec = 0; 4444c27c18e8Smrg 4445c27c18e8Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446c27c18e8Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447c27c18e8Smrg strendzap (target_name, ".exe"); 4448c27c18e8Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449c27c18e8Smrg XFREE (target_name); 4450c27c18e8Smrg target_name = tmp_pathspec; 4451c27c18e8Smrg tmp_pathspec = 0; 4452c27c18e8Smrg 445337eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 445437eb1ca1Smrg "(main) libtool target name: %s\n", 445537eb1ca1Smrg target_name); 4456c27c18e8SmrgEOF 4457c27c18e8Smrg 4458c27c18e8Smrg cat <<EOF 4459c27c18e8Smrg newargz[0] = 4460c27c18e8Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461c27c18e8Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462c27c18e8Smrg strcpy (newargz[0], actual_cwrapper_path); 4463c27c18e8Smrg strcat (newargz[0], "$objdir"); 4464c27c18e8Smrg strcat (newargz[0], "/"); 4465c27c18e8SmrgEOF 4466c27c18e8Smrg 4467c27c18e8Smrg cat <<"EOF" 4468c27c18e8Smrg /* stop here, and copy so we don't have to do this twice */ 4469c27c18e8Smrg tmp_pathspec = xstrdup (newargz[0]); 4470c27c18e8Smrg 4471c27c18e8Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472c27c18e8Smrg strcat (newargz[0], actual_cwrapper_name); 4473c27c18e8Smrg 4474c27c18e8Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475c27c18e8Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476c27c18e8Smrg XFREE (tmp_pathspec); 4477c27c18e8Smrg tmp_pathspec = NULL; 4478c27c18e8SmrgEOF 4479c27c18e8Smrg 4480c27c18e8Smrg case $host_os in 4481c27c18e8Smrg mingw*) 4482c27c18e8Smrg cat <<"EOF" 4483c27c18e8Smrg { 4484c27c18e8Smrg char* p; 4485c27c18e8Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486c27c18e8Smrg { 4487c27c18e8Smrg *p = '/'; 4488c27c18e8Smrg } 4489c27c18e8Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490c27c18e8Smrg { 4491c27c18e8Smrg *p = '/'; 4492c27c18e8Smrg } 4493c27c18e8Smrg } 4494c27c18e8SmrgEOF 4495c43cc173Smrg ;; 4496c27c18e8Smrg esac 4497c27c18e8Smrg 4498c27c18e8Smrg cat <<"EOF" 4499c27c18e8Smrg XFREE (target_name); 4500c27c18e8Smrg XFREE (actual_cwrapper_path); 4501c27c18e8Smrg XFREE (actual_cwrapper_name); 4502c27c18e8Smrg 4503c27c18e8Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504c27c18e8Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4505b789ec8aSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4506b789ec8aSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4507b789ec8aSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 4508b789ec8aSmrg libraries must come first. */ 4509c27c18e8Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4510b789ec8aSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511c27c18e8Smrg 451237eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 451337eb1ca1Smrg nonnull (lt_argv_zero)); 4514c27c18e8Smrg for (i = 0; i < newargc; i++) 4515c27c18e8Smrg { 451637eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 451737eb1ca1Smrg i, nonnull (newargz[i])); 4518c27c18e8Smrg } 4519c43cc173Smrg 4520c43cc173SmrgEOF 4521c43cc173Smrg 4522c27c18e8Smrg case $host_os in 4523c27c18e8Smrg mingw*) 4524c27c18e8Smrg cat <<"EOF" 4525c27c18e8Smrg /* execv doesn't actually work on mingw as expected on unix */ 452637eb1ca1Smrg newargz = prepare_spawn (newargz); 45270eb1301bSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528c27c18e8Smrg if (rval == -1) 4529c27c18e8Smrg { 4530c27c18e8Smrg /* failed to start process */ 453137eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 453237eb1ca1Smrg "(main) failed to launch target \"%s\": %s\n", 453337eb1ca1Smrg lt_argv_zero, nonnull (strerror (errno))); 4534c27c18e8Smrg return 127; 4535c27c18e8Smrg } 4536c27c18e8Smrg return rval; 4537c27c18e8SmrgEOF 4538c27c18e8Smrg ;; 4539c27c18e8Smrg *) 4540c27c18e8Smrg cat <<"EOF" 4541c27c18e8Smrg execv (lt_argv_zero, newargz); 4542c27c18e8Smrg return rval; /* =127, but avoids unused variable warning */ 4543c27c18e8SmrgEOF 4544c27c18e8Smrg ;; 4545c27c18e8Smrg esac 4546c43cc173Smrg 4547c27c18e8Smrg cat <<"EOF" 4548c27c18e8Smrg} 4549c43cc173Smrg 4550c27c18e8Smrgvoid * 4551c27c18e8Smrgxmalloc (size_t num) 4552c27c18e8Smrg{ 4553c27c18e8Smrg void *p = (void *) malloc (num); 4554c27c18e8Smrg if (!p) 455537eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556c43cc173Smrg 4557c27c18e8Smrg return p; 4558c27c18e8Smrg} 4559c43cc173Smrg 4560c27c18e8Smrgchar * 4561c27c18e8Smrgxstrdup (const char *string) 4562c27c18e8Smrg{ 4563c27c18e8Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564c27c18e8Smrg string) : NULL; 4565c27c18e8Smrg} 4566c43cc173Smrg 4567c27c18e8Smrgconst char * 4568c27c18e8Smrgbase_name (const char *name) 4569c27c18e8Smrg{ 4570c27c18e8Smrg const char *base; 4571c43cc173Smrg 45720eb1301bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573c27c18e8Smrg /* Skip over the disk name in MSDOS pathnames. */ 4574c27c18e8Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575c27c18e8Smrg name += 2; 4576c27c18e8Smrg#endif 4577c43cc173Smrg 4578c27c18e8Smrg for (base = name; *name; name++) 4579c27c18e8Smrg if (IS_DIR_SEPARATOR (*name)) 4580c27c18e8Smrg base = name + 1; 4581c27c18e8Smrg return base; 4582c27c18e8Smrg} 4583c43cc173Smrg 4584c27c18e8Smrgint 4585c27c18e8Smrgcheck_executable (const char *path) 4586c27c18e8Smrg{ 4587c27c18e8Smrg struct stat st; 4588c43cc173Smrg 458937eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 459037eb1ca1Smrg nonempty (path)); 4591c27c18e8Smrg if ((!path) || (!*path)) 4592c27c18e8Smrg return 0; 4593c43cc173Smrg 4594c27c18e8Smrg if ((stat (path, &st) >= 0) 4595c27c18e8Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596c27c18e8Smrg return 1; 4597c27c18e8Smrg else 4598c27c18e8Smrg return 0; 4599c27c18e8Smrg} 4600c43cc173Smrg 4601c27c18e8Smrgint 4602c27c18e8Smrgmake_executable (const char *path) 4603c27c18e8Smrg{ 4604c27c18e8Smrg int rval = 0; 4605c27c18e8Smrg struct stat st; 4606c43cc173Smrg 460737eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 460837eb1ca1Smrg nonempty (path)); 4609c27c18e8Smrg if ((!path) || (!*path)) 4610c27c18e8Smrg return 0; 4611c43cc173Smrg 4612c27c18e8Smrg if (stat (path, &st) >= 0) 4613c27c18e8Smrg { 4614c27c18e8Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615c27c18e8Smrg } 4616c27c18e8Smrg return rval; 4617c27c18e8Smrg} 4618c43cc173Smrg 4619c27c18e8Smrg/* Searches for the full path of the wrapper. Returns 4620c27c18e8Smrg newly allocated full path name if found, NULL otherwise 4621c27c18e8Smrg Does not chase symlinks, even on platforms that support them. 4622c27c18e8Smrg*/ 4623c27c18e8Smrgchar * 4624c27c18e8Smrgfind_executable (const char *wrapper) 4625c27c18e8Smrg{ 4626c27c18e8Smrg int has_slash = 0; 4627c27c18e8Smrg const char *p; 4628c27c18e8Smrg const char *p_next; 4629c27c18e8Smrg /* static buffer for getcwd */ 4630c27c18e8Smrg char tmp[LT_PATHMAX + 1]; 46310eb1301bSmrg int tmp_len; 4632c27c18e8Smrg char *concat_name; 4633c43cc173Smrg 463437eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 463537eb1ca1Smrg nonempty (wrapper)); 4636c43cc173Smrg 4637c27c18e8Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638c27c18e8Smrg return NULL; 4639c43cc173Smrg 4640c27c18e8Smrg /* Absolute path? */ 46410eb1301bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642c27c18e8Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643c27c18e8Smrg { 4644c27c18e8Smrg concat_name = xstrdup (wrapper); 4645c27c18e8Smrg if (check_executable (concat_name)) 4646c27c18e8Smrg return concat_name; 4647c27c18e8Smrg XFREE (concat_name); 4648c27c18e8Smrg } 4649c27c18e8Smrg else 4650c27c18e8Smrg { 4651c27c18e8Smrg#endif 4652c27c18e8Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653c27c18e8Smrg { 4654c27c18e8Smrg concat_name = xstrdup (wrapper); 4655c27c18e8Smrg if (check_executable (concat_name)) 4656c27c18e8Smrg return concat_name; 4657c27c18e8Smrg XFREE (concat_name); 4658c27c18e8Smrg } 46590eb1301bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660c27c18e8Smrg } 4661c27c18e8Smrg#endif 4662c43cc173Smrg 4663c27c18e8Smrg for (p = wrapper; *p; p++) 4664c27c18e8Smrg if (*p == '/') 4665c27c18e8Smrg { 4666c27c18e8Smrg has_slash = 1; 4667c27c18e8Smrg break; 4668c27c18e8Smrg } 4669c27c18e8Smrg if (!has_slash) 4670c27c18e8Smrg { 4671c27c18e8Smrg /* no slashes; search PATH */ 4672c27c18e8Smrg const char *path = getenv ("PATH"); 4673c27c18e8Smrg if (path != NULL) 4674c27c18e8Smrg { 4675c27c18e8Smrg for (p = path; *p; p = p_next) 4676c27c18e8Smrg { 4677c27c18e8Smrg const char *q; 4678c27c18e8Smrg size_t p_len; 4679c27c18e8Smrg for (q = p; *q; q++) 4680c27c18e8Smrg if (IS_PATH_SEPARATOR (*q)) 4681c27c18e8Smrg break; 46820eb1301bSmrg p_len = q - p; 4683c27c18e8Smrg p_next = (*q == '\0' ? q : q + 1); 4684c27c18e8Smrg if (p_len == 0) 4685c27c18e8Smrg { 4686c27c18e8Smrg /* empty path: current directory */ 4687c27c18e8Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 468837eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 468937eb1ca1Smrg nonnull (strerror (errno))); 4690c27c18e8Smrg tmp_len = strlen (tmp); 4691c27c18e8Smrg concat_name = 4692c27c18e8Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693c27c18e8Smrg memcpy (concat_name, tmp, tmp_len); 4694c27c18e8Smrg concat_name[tmp_len] = '/'; 4695c27c18e8Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4696c27c18e8Smrg } 4697c27c18e8Smrg else 4698c27c18e8Smrg { 4699c27c18e8Smrg concat_name = 4700c27c18e8Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701c27c18e8Smrg memcpy (concat_name, p, p_len); 4702c27c18e8Smrg concat_name[p_len] = '/'; 4703c27c18e8Smrg strcpy (concat_name + p_len + 1, wrapper); 4704c27c18e8Smrg } 4705c27c18e8Smrg if (check_executable (concat_name)) 4706c27c18e8Smrg return concat_name; 4707c27c18e8Smrg XFREE (concat_name); 4708c27c18e8Smrg } 4709c27c18e8Smrg } 4710c27c18e8Smrg /* not found in PATH; assume curdir */ 4711c27c18e8Smrg } 4712c27c18e8Smrg /* Relative path | not found in path: prepend cwd */ 4713c27c18e8Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 471437eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 471537eb1ca1Smrg nonnull (strerror (errno))); 4716c27c18e8Smrg tmp_len = strlen (tmp); 4717c27c18e8Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718c27c18e8Smrg memcpy (concat_name, tmp, tmp_len); 4719c27c18e8Smrg concat_name[tmp_len] = '/'; 4720c27c18e8Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4721c43cc173Smrg 4722c27c18e8Smrg if (check_executable (concat_name)) 4723c27c18e8Smrg return concat_name; 4724c27c18e8Smrg XFREE (concat_name); 4725c27c18e8Smrg return NULL; 4726c27c18e8Smrg} 4727c43cc173Smrg 4728c27c18e8Smrgchar * 4729c27c18e8Smrgchase_symlinks (const char *pathspec) 4730c27c18e8Smrg{ 4731c27c18e8Smrg#ifndef S_ISLNK 4732c27c18e8Smrg return xstrdup (pathspec); 4733c27c18e8Smrg#else 4734c27c18e8Smrg char buf[LT_PATHMAX]; 4735c27c18e8Smrg struct stat s; 4736c27c18e8Smrg char *tmp_pathspec = xstrdup (pathspec); 4737c27c18e8Smrg char *p; 4738c27c18e8Smrg int has_symlinks = 0; 4739c27c18e8Smrg while (strlen (tmp_pathspec) && !has_symlinks) 4740c27c18e8Smrg { 474137eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 474237eb1ca1Smrg "checking path component for symlinks: %s\n", 474337eb1ca1Smrg tmp_pathspec); 4744c27c18e8Smrg if (lstat (tmp_pathspec, &s) == 0) 4745c27c18e8Smrg { 4746c27c18e8Smrg if (S_ISLNK (s.st_mode) != 0) 4747c27c18e8Smrg { 4748c27c18e8Smrg has_symlinks = 1; 4749c27c18e8Smrg break; 4750c27c18e8Smrg } 4751c43cc173Smrg 4752c27c18e8Smrg /* search backwards for last DIR_SEPARATOR */ 4753c27c18e8Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754c27c18e8Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755c27c18e8Smrg p--; 4756c27c18e8Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757c27c18e8Smrg { 4758c27c18e8Smrg /* no more DIR_SEPARATORS left */ 4759c27c18e8Smrg break; 4760c27c18e8Smrg } 4761c27c18e8Smrg *p = '\0'; 4762c27c18e8Smrg } 4763c27c18e8Smrg else 4764c27c18e8Smrg { 476537eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 476637eb1ca1Smrg "error accessing file \"%s\": %s", 476737eb1ca1Smrg tmp_pathspec, nonnull (strerror (errno))); 4768c27c18e8Smrg } 4769c27c18e8Smrg } 4770c27c18e8Smrg XFREE (tmp_pathspec); 4771c43cc173Smrg 4772c27c18e8Smrg if (!has_symlinks) 4773c27c18e8Smrg { 4774c27c18e8Smrg return xstrdup (pathspec); 4775c27c18e8Smrg } 4776c43cc173Smrg 4777c27c18e8Smrg tmp_pathspec = realpath (pathspec, buf); 4778c27c18e8Smrg if (tmp_pathspec == 0) 4779c27c18e8Smrg { 478037eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 478137eb1ca1Smrg "could not follow symlinks for %s", pathspec); 4782c27c18e8Smrg } 4783c27c18e8Smrg return xstrdup (tmp_pathspec); 4784c27c18e8Smrg#endif 4785c27c18e8Smrg} 4786c43cc173Smrg 4787c27c18e8Smrgchar * 4788c27c18e8Smrgstrendzap (char *str, const char *pat) 4789c27c18e8Smrg{ 4790c27c18e8Smrg size_t len, patlen; 4791c43cc173Smrg 4792c27c18e8Smrg assert (str != NULL); 4793c27c18e8Smrg assert (pat != NULL); 4794c43cc173Smrg 4795c27c18e8Smrg len = strlen (str); 4796c27c18e8Smrg patlen = strlen (pat); 4797c43cc173Smrg 4798c27c18e8Smrg if (patlen <= len) 4799c27c18e8Smrg { 4800c27c18e8Smrg str += len - patlen; 48010eb1301bSmrg if (strcmp (str, pat) == 0) 4802c27c18e8Smrg *str = '\0'; 4803c27c18e8Smrg } 4804c27c18e8Smrg return str; 4805c27c18e8Smrg} 4806c43cc173Smrg 480737eb1ca1Smrgvoid 480837eb1ca1Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 480937eb1ca1Smrg{ 481037eb1ca1Smrg va_list args; 481137eb1ca1Smrg if (lt_debug) 481237eb1ca1Smrg { 481337eb1ca1Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 481437eb1ca1Smrg va_start (args, fmt); 481537eb1ca1Smrg (void) vfprintf (stderr, fmt, args); 481637eb1ca1Smrg va_end (args); 481737eb1ca1Smrg } 481837eb1ca1Smrg} 481937eb1ca1Smrg 4820c27c18e8Smrgstatic void 482137eb1ca1Smrglt_error_core (int exit_status, const char *file, 482237eb1ca1Smrg int line, const char *mode, 4823c27c18e8Smrg const char *message, va_list ap) 4824c27c18e8Smrg{ 482537eb1ca1Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826c27c18e8Smrg vfprintf (stderr, message, ap); 4827c27c18e8Smrg fprintf (stderr, ".\n"); 4828c43cc173Smrg 4829c27c18e8Smrg if (exit_status >= 0) 4830c27c18e8Smrg exit (exit_status); 4831c27c18e8Smrg} 4832c43cc173Smrg 4833c27c18e8Smrgvoid 483437eb1ca1Smrglt_fatal (const char *file, int line, const char *message, ...) 4835c27c18e8Smrg{ 4836c27c18e8Smrg va_list ap; 4837c27c18e8Smrg va_start (ap, message); 483837eb1ca1Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839c27c18e8Smrg va_end (ap); 4840c27c18e8Smrg} 4841c43cc173Smrg 484237eb1ca1Smrgstatic const char * 484337eb1ca1Smrgnonnull (const char *s) 484437eb1ca1Smrg{ 484537eb1ca1Smrg return s ? s : "(null)"; 484637eb1ca1Smrg} 484737eb1ca1Smrg 484837eb1ca1Smrgstatic const char * 484937eb1ca1Smrgnonempty (const char *s) 485037eb1ca1Smrg{ 485137eb1ca1Smrg return (s && !*s) ? "(empty)" : nonnull (s); 485237eb1ca1Smrg} 485337eb1ca1Smrg 4854c27c18e8Smrgvoid 4855c27c18e8Smrglt_setenv (const char *name, const char *value) 4856c27c18e8Smrg{ 485737eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 485837eb1ca1Smrg "(lt_setenv) setting '%s' to '%s'\n", 485937eb1ca1Smrg nonnull (name), nonnull (value)); 4860c27c18e8Smrg { 4861c27c18e8Smrg#ifdef HAVE_SETENV 4862c27c18e8Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863c27c18e8Smrg char *str = xstrdup (value); 4864c27c18e8Smrg setenv (name, str, 1); 4865c27c18e8Smrg#else 48660eb1301bSmrg int len = strlen (name) + 1 + strlen (value) + 1; 4867c27c18e8Smrg char *str = XMALLOC (char, len); 4868c27c18e8Smrg sprintf (str, "%s=%s", name, value); 4869c27c18e8Smrg if (putenv (str) != EXIT_SUCCESS) 4870c27c18e8Smrg { 4871c27c18e8Smrg XFREE (str); 4872c27c18e8Smrg } 4873c27c18e8Smrg#endif 4874c27c18e8Smrg } 4875c27c18e8Smrg} 4876c43cc173Smrg 4877c27c18e8Smrgchar * 4878c27c18e8Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879c27c18e8Smrg{ 4880c27c18e8Smrg char *new_value; 4881c27c18e8Smrg if (orig_value && *orig_value) 4882c27c18e8Smrg { 48830eb1301bSmrg int orig_value_len = strlen (orig_value); 48840eb1301bSmrg int add_len = strlen (add); 4885c27c18e8Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886c27c18e8Smrg if (to_end) 4887c27c18e8Smrg { 4888c27c18e8Smrg strcpy (new_value, orig_value); 4889c27c18e8Smrg strcpy (new_value + orig_value_len, add); 4890c27c18e8Smrg } 4891c27c18e8Smrg else 4892c27c18e8Smrg { 4893c27c18e8Smrg strcpy (new_value, add); 4894c27c18e8Smrg strcpy (new_value + add_len, orig_value); 4895c27c18e8Smrg } 4896c27c18e8Smrg } 4897c27c18e8Smrg else 4898c27c18e8Smrg { 4899c27c18e8Smrg new_value = xstrdup (add); 4900c27c18e8Smrg } 4901c27c18e8Smrg return new_value; 4902c27c18e8Smrg} 4903c43cc173Smrg 4904c27c18e8Smrgvoid 4905c27c18e8Smrglt_update_exe_path (const char *name, const char *value) 4906c27c18e8Smrg{ 490737eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 490837eb1ca1Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 490937eb1ca1Smrg nonnull (name), nonnull (value)); 4910c43cc173Smrg 4911c27c18e8Smrg if (name && *name && value && *value) 4912c27c18e8Smrg { 4913c27c18e8Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914c27c18e8Smrg /* some systems can't cope with a ':'-terminated path #' */ 49150eb1301bSmrg int len = strlen (new_value); 49160eb1301bSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917c27c18e8Smrg { 49180eb1301bSmrg new_value[len-1] = '\0'; 4919c27c18e8Smrg } 4920c27c18e8Smrg lt_setenv (name, new_value); 4921c27c18e8Smrg XFREE (new_value); 4922c27c18e8Smrg } 4923c27c18e8Smrg} 4924c43cc173Smrg 4925c27c18e8Smrgvoid 4926c27c18e8Smrglt_update_lib_path (const char *name, const char *value) 4927c27c18e8Smrg{ 492837eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 492937eb1ca1Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 493037eb1ca1Smrg nonnull (name), nonnull (value)); 4931c43cc173Smrg 4932c27c18e8Smrg if (name && *name && value && *value) 4933c27c18e8Smrg { 4934c27c18e8Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935c27c18e8Smrg lt_setenv (name, new_value); 4936c27c18e8Smrg XFREE (new_value); 4937c27c18e8Smrg } 4938c27c18e8Smrg} 4939c43cc173Smrg 494037eb1ca1SmrgEOF 494137eb1ca1Smrg case $host_os in 494237eb1ca1Smrg mingw*) 494337eb1ca1Smrg cat <<"EOF" 494437eb1ca1Smrg 494537eb1ca1Smrg/* Prepares an argument vector before calling spawn(). 494637eb1ca1Smrg Note that spawn() does not by itself call the command interpreter 494737eb1ca1Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 494837eb1ca1Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 494937eb1ca1Smrg GetVersionEx(&v); 495037eb1ca1Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 495137eb1ca1Smrg }) ? "cmd.exe" : "command.com"). 495237eb1ca1Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 495337eb1ca1Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 495437eb1ca1Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 495537eb1ca1Smrg special way: 495637eb1ca1Smrg - Space and tab are interpreted as delimiters. They are not treated as 495737eb1ca1Smrg delimiters if they are surrounded by double quotes: "...". 495837eb1ca1Smrg - Unescaped double quotes are removed from the input. Their only effect is 495937eb1ca1Smrg that within double quotes, space and tab are treated like normal 496037eb1ca1Smrg characters. 496137eb1ca1Smrg - Backslashes not followed by double quotes are not special. 496237eb1ca1Smrg - But 2*n+1 backslashes followed by a double quote become 496337eb1ca1Smrg n backslashes followed by a double quote (n >= 0): 496437eb1ca1Smrg \" -> " 496537eb1ca1Smrg \\\" -> \" 496637eb1ca1Smrg \\\\\" -> \\" 496737eb1ca1Smrg */ 496837eb1ca1Smrg#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" 496937eb1ca1Smrg#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" 497037eb1ca1Smrgchar ** 497137eb1ca1Smrgprepare_spawn (char **argv) 497237eb1ca1Smrg{ 497337eb1ca1Smrg size_t argc; 497437eb1ca1Smrg char **new_argv; 497537eb1ca1Smrg size_t i; 497637eb1ca1Smrg 497737eb1ca1Smrg /* Count number of arguments. */ 497837eb1ca1Smrg for (argc = 0; argv[argc] != NULL; argc++) 497937eb1ca1Smrg ; 498037eb1ca1Smrg 498137eb1ca1Smrg /* Allocate new argument vector. */ 498237eb1ca1Smrg new_argv = XMALLOC (char *, argc + 1); 498337eb1ca1Smrg 498437eb1ca1Smrg /* Put quoted arguments into the new argument vector. */ 498537eb1ca1Smrg for (i = 0; i < argc; i++) 498637eb1ca1Smrg { 498737eb1ca1Smrg const char *string = argv[i]; 498837eb1ca1Smrg 498937eb1ca1Smrg if (string[0] == '\0') 499037eb1ca1Smrg new_argv[i] = xstrdup ("\"\""); 499137eb1ca1Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 499237eb1ca1Smrg { 499337eb1ca1Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 499437eb1ca1Smrg size_t length; 499537eb1ca1Smrg unsigned int backslashes; 499637eb1ca1Smrg const char *s; 499737eb1ca1Smrg char *quoted_string; 499837eb1ca1Smrg char *p; 499937eb1ca1Smrg 500037eb1ca1Smrg length = 0; 500137eb1ca1Smrg backslashes = 0; 500237eb1ca1Smrg if (quote_around) 500337eb1ca1Smrg length++; 500437eb1ca1Smrg for (s = string; *s != '\0'; s++) 500537eb1ca1Smrg { 500637eb1ca1Smrg char c = *s; 500737eb1ca1Smrg if (c == '"') 500837eb1ca1Smrg length += backslashes + 1; 500937eb1ca1Smrg length++; 501037eb1ca1Smrg if (c == '\\') 501137eb1ca1Smrg backslashes++; 501237eb1ca1Smrg else 501337eb1ca1Smrg backslashes = 0; 501437eb1ca1Smrg } 501537eb1ca1Smrg if (quote_around) 501637eb1ca1Smrg length += backslashes + 1; 501737eb1ca1Smrg 501837eb1ca1Smrg quoted_string = XMALLOC (char, length + 1); 501937eb1ca1Smrg 502037eb1ca1Smrg p = quoted_string; 502137eb1ca1Smrg backslashes = 0; 502237eb1ca1Smrg if (quote_around) 502337eb1ca1Smrg *p++ = '"'; 502437eb1ca1Smrg for (s = string; *s != '\0'; s++) 502537eb1ca1Smrg { 502637eb1ca1Smrg char c = *s; 502737eb1ca1Smrg if (c == '"') 502837eb1ca1Smrg { 502937eb1ca1Smrg unsigned int j; 503037eb1ca1Smrg for (j = backslashes + 1; j > 0; j--) 503137eb1ca1Smrg *p++ = '\\'; 503237eb1ca1Smrg } 503337eb1ca1Smrg *p++ = c; 503437eb1ca1Smrg if (c == '\\') 503537eb1ca1Smrg backslashes++; 503637eb1ca1Smrg else 503737eb1ca1Smrg backslashes = 0; 503837eb1ca1Smrg } 503937eb1ca1Smrg if (quote_around) 504037eb1ca1Smrg { 504137eb1ca1Smrg unsigned int j; 504237eb1ca1Smrg for (j = backslashes; j > 0; j--) 504337eb1ca1Smrg *p++ = '\\'; 504437eb1ca1Smrg *p++ = '"'; 504537eb1ca1Smrg } 504637eb1ca1Smrg *p = '\0'; 504737eb1ca1Smrg 504837eb1ca1Smrg new_argv[i] = quoted_string; 504937eb1ca1Smrg } 505037eb1ca1Smrg else 505137eb1ca1Smrg new_argv[i] = (char *) string; 505237eb1ca1Smrg } 505337eb1ca1Smrg new_argv[argc] = NULL; 505437eb1ca1Smrg 505537eb1ca1Smrg return new_argv; 505637eb1ca1Smrg} 505737eb1ca1SmrgEOF 505837eb1ca1Smrg ;; 505937eb1ca1Smrg esac 506037eb1ca1Smrg 506137eb1ca1Smrg cat <<"EOF" 506237eb1ca1Smrgvoid lt_dump_script (FILE* f) 506337eb1ca1Smrg{ 506437eb1ca1SmrgEOF 506537eb1ca1Smrg func_emit_wrapper yes | 5066f1ee322dSmrg $SED -n -e ' 5067f1ee322dSmrgs/^\(.\{79\}\)\(..*\)/\1\ 5068f1ee322dSmrg\2/ 5069f1ee322dSmrgh 5070f1ee322dSmrgs/\([\\"]\)/\\\1/g 5071f1ee322dSmrgs/$/\\n/ 5072f1ee322dSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 5073f1ee322dSmrgg 5074f1ee322dSmrgD' 507537eb1ca1Smrg cat <<"EOF" 507637eb1ca1Smrg} 5077c27c18e8SmrgEOF 5078c27c18e8Smrg} 5079c27c18e8Smrg# end: func_emit_cwrapperexe_src 5080c43cc173Smrg 508137eb1ca1Smrg# func_win32_import_lib_p ARG 508237eb1ca1Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 508337eb1ca1Smrgfunc_win32_import_lib_p () 508437eb1ca1Smrg{ 50850eb1301bSmrg $opt_debug 508637eb1ca1Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 508737eb1ca1Smrg *import*) : ;; 508837eb1ca1Smrg *) false ;; 508937eb1ca1Smrg esac 509037eb1ca1Smrg} 509137eb1ca1Smrg 5092c27c18e8Smrg# func_mode_link arg... 5093c27c18e8Smrgfunc_mode_link () 5094c27c18e8Smrg{ 50950eb1301bSmrg $opt_debug 5096c27c18e8Smrg case $host in 5097c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098c27c18e8Smrg # It is impossible to link a dll without this setting, and 5099c27c18e8Smrg # we shouldn't force the makefile maintainer to figure out 51000eb1301bSmrg # which system we are compiling for in order to pass an extra 5101c27c18e8Smrg # flag for every libtool invocation. 5102c27c18e8Smrg # allow_undefined=no 5103c43cc173Smrg 5104c27c18e8Smrg # FIXME: Unfortunately, there are problems with the above when trying 51050eb1301bSmrg # to make a dll which has undefined symbols, in which case not 5106c27c18e8Smrg # even a static library is built. For now, we need to specify 5107c27c18e8Smrg # -no-undefined on the libtool link line when we can be certain 5108c27c18e8Smrg # that all symbols are satisfied, otherwise we get a static library. 5109c27c18e8Smrg allow_undefined=yes 5110c27c18e8Smrg ;; 5111c27c18e8Smrg *) 5112c27c18e8Smrg allow_undefined=yes 5113c27c18e8Smrg ;; 5114c27c18e8Smrg esac 5115c27c18e8Smrg libtool_args=$nonopt 5116c27c18e8Smrg base_compile="$nonopt $@" 5117c27c18e8Smrg compile_command=$nonopt 5118c27c18e8Smrg finalize_command=$nonopt 5119c43cc173Smrg 5120c27c18e8Smrg compile_rpath= 5121c27c18e8Smrg finalize_rpath= 5122c27c18e8Smrg compile_shlibpath= 5123c27c18e8Smrg finalize_shlibpath= 5124c27c18e8Smrg convenience= 5125c27c18e8Smrg old_convenience= 5126c27c18e8Smrg deplibs= 5127c27c18e8Smrg old_deplibs= 5128c27c18e8Smrg compiler_flags= 5129c27c18e8Smrg linker_flags= 5130c27c18e8Smrg dllsearchpath= 5131c27c18e8Smrg lib_search_path=`pwd` 5132c27c18e8Smrg inst_prefix_dir= 5133c27c18e8Smrg new_inherited_linker_flags= 5134c43cc173Smrg 5135c27c18e8Smrg avoid_version=no 513637eb1ca1Smrg bindir= 5137c27c18e8Smrg dlfiles= 5138c27c18e8Smrg dlprefiles= 5139c27c18e8Smrg dlself=no 5140c27c18e8Smrg export_dynamic=no 5141c27c18e8Smrg export_symbols= 5142c27c18e8Smrg export_symbols_regex= 5143c27c18e8Smrg generated= 5144c27c18e8Smrg libobjs= 5145c27c18e8Smrg ltlibs= 5146c27c18e8Smrg module=no 5147c27c18e8Smrg no_install=no 5148c27c18e8Smrg objs= 5149c27c18e8Smrg non_pic_objects= 5150c27c18e8Smrg precious_files_regex= 5151c27c18e8Smrg prefer_static_libs=no 51520eb1301bSmrg preload=no 5153c27c18e8Smrg prev= 5154c27c18e8Smrg prevarg= 5155c27c18e8Smrg release= 5156c27c18e8Smrg rpath= 5157c27c18e8Smrg xrpath= 5158c27c18e8Smrg perm_rpath= 5159c27c18e8Smrg temp_rpath= 5160c27c18e8Smrg thread_safe=no 5161c27c18e8Smrg vinfo= 5162c27c18e8Smrg vinfo_number=no 5163c27c18e8Smrg weak_libs= 51640eb1301bSmrg single_module="${wl}-single_module" 5165c27c18e8Smrg func_infer_tag $base_compile 5166c43cc173Smrg 5167c27c18e8Smrg # We need to know -static, to get the right output filenames. 5168c27c18e8Smrg for arg 5169c27c18e8Smrg do 5170c27c18e8Smrg case $arg in 5171c27c18e8Smrg -shared) 51720eb1301bSmrg test "$build_libtool_libs" != yes && \ 51730eb1301bSmrg func_fatal_configuration "can not build a shared library" 5174c27c18e8Smrg build_old_libs=no 5175c27c18e8Smrg break 5176c27c18e8Smrg ;; 5177c27c18e8Smrg -all-static | -static | -static-libtool-libs) 5178c27c18e8Smrg case $arg in 5179c27c18e8Smrg -all-static) 51800eb1301bSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181c27c18e8Smrg func_warning "complete static linking is impossible in this configuration" 5182c27c18e8Smrg fi 5183c27c18e8Smrg if test -n "$link_static_flag"; then 5184c27c18e8Smrg dlopen_self=$dlopen_self_static 5185c27c18e8Smrg fi 5186c27c18e8Smrg prefer_static_libs=yes 5187c27c18e8Smrg ;; 5188c27c18e8Smrg -static) 5189c27c18e8Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190c27c18e8Smrg dlopen_self=$dlopen_self_static 5191c27c18e8Smrg fi 5192c27c18e8Smrg prefer_static_libs=built 5193c27c18e8Smrg ;; 5194c27c18e8Smrg -static-libtool-libs) 5195c27c18e8Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196c27c18e8Smrg dlopen_self=$dlopen_self_static 5197c27c18e8Smrg fi 5198c27c18e8Smrg prefer_static_libs=yes 5199c27c18e8Smrg ;; 5200c27c18e8Smrg esac 5201c27c18e8Smrg build_libtool_libs=no 5202c27c18e8Smrg build_old_libs=yes 5203c27c18e8Smrg break 5204c43cc173Smrg ;; 5205c43cc173Smrg esac 5206c27c18e8Smrg done 5207c43cc173Smrg 5208c27c18e8Smrg # See if our shared archives depend on static archives. 5209c27c18e8Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210c43cc173Smrg 5211c27c18e8Smrg # Go through the arguments, transforming them on the way. 5212c27c18e8Smrg while test "$#" -gt 0; do 52130eb1301bSmrg arg="$1" 5214c27c18e8Smrg shift 5215c27c18e8Smrg func_quote_for_eval "$arg" 5216c27c18e8Smrg qarg=$func_quote_for_eval_unquoted_result 5217c27c18e8Smrg func_append libtool_args " $func_quote_for_eval_result" 5218c43cc173Smrg 5219c27c18e8Smrg # If the previous option needs an argument, assign it. 5220c27c18e8Smrg if test -n "$prev"; then 5221c27c18e8Smrg case $prev in 5222c27c18e8Smrg output) 5223c27c18e8Smrg func_append compile_command " @OUTPUT@" 5224c27c18e8Smrg func_append finalize_command " @OUTPUT@" 5225c43cc173Smrg ;; 5226c43cc173Smrg esac 5227c43cc173Smrg 5228c27c18e8Smrg case $prev in 522937eb1ca1Smrg bindir) 52300eb1301bSmrg bindir="$arg" 523137eb1ca1Smrg prev= 523237eb1ca1Smrg continue 523337eb1ca1Smrg ;; 5234c27c18e8Smrg dlfiles|dlprefiles) 52350eb1301bSmrg if test "$preload" = no; then 5236c27c18e8Smrg # Add the symbol object into the linking commands. 5237c27c18e8Smrg func_append compile_command " @SYMFILE@" 5238c27c18e8Smrg func_append finalize_command " @SYMFILE@" 52390eb1301bSmrg preload=yes 52400eb1301bSmrg fi 5241c27c18e8Smrg case $arg in 5242c27c18e8Smrg *.la | *.lo) ;; # We handle these cases below. 5243c27c18e8Smrg force) 52440eb1301bSmrg if test "$dlself" = no; then 5245c27c18e8Smrg dlself=needless 5246c27c18e8Smrg export_dynamic=yes 5247c27c18e8Smrg fi 5248c27c18e8Smrg prev= 5249c27c18e8Smrg continue 5250c27c18e8Smrg ;; 5251c27c18e8Smrg self) 52520eb1301bSmrg if test "$prev" = dlprefiles; then 5253c27c18e8Smrg dlself=yes 52540eb1301bSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255c27c18e8Smrg dlself=yes 5256c43cc173Smrg else 5257c27c18e8Smrg dlself=needless 5258c27c18e8Smrg export_dynamic=yes 5259c43cc173Smrg fi 5260c27c18e8Smrg prev= 5261c27c18e8Smrg continue 5262c27c18e8Smrg ;; 5263c27c18e8Smrg *) 52640eb1301bSmrg if test "$prev" = dlfiles; then 5265b789ec8aSmrg func_append dlfiles " $arg" 5266c27c18e8Smrg else 5267b789ec8aSmrg func_append dlprefiles " $arg" 5268c27c18e8Smrg fi 5269c27c18e8Smrg prev= 5270c27c18e8Smrg continue 5271c27c18e8Smrg ;; 5272c43cc173Smrg esac 5273c43cc173Smrg ;; 5274c27c18e8Smrg expsyms) 52750eb1301bSmrg export_symbols="$arg" 5276c27c18e8Smrg test -f "$arg" \ 52770eb1301bSmrg || func_fatal_error "symbol file \`$arg' does not exist" 5278c27c18e8Smrg prev= 5279c27c18e8Smrg continue 5280c27c18e8Smrg ;; 5281c27c18e8Smrg expsyms_regex) 52820eb1301bSmrg export_symbols_regex="$arg" 5283c27c18e8Smrg prev= 5284c27c18e8Smrg continue 5285c27c18e8Smrg ;; 5286c27c18e8Smrg framework) 5287c27c18e8Smrg case $host in 5288c27c18e8Smrg *-*-darwin*) 5289c27c18e8Smrg case "$deplibs " in 5290c27c18e8Smrg *" $qarg.ltframework "*) ;; 5291b789ec8aSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292c27c18e8Smrg ;; 5293c43cc173Smrg esac 5294c27c18e8Smrg ;; 5295c43cc173Smrg esac 5296c27c18e8Smrg prev= 5297c27c18e8Smrg continue 5298c27c18e8Smrg ;; 5299c27c18e8Smrg inst_prefix) 53000eb1301bSmrg inst_prefix_dir="$arg" 5301c27c18e8Smrg prev= 5302c27c18e8Smrg continue 5303c27c18e8Smrg ;; 5304c27c18e8Smrg objectlist) 5305c27c18e8Smrg if test -f "$arg"; then 5306c27c18e8Smrg save_arg=$arg 5307c27c18e8Smrg moreargs= 5308c27c18e8Smrg for fil in `cat "$save_arg"` 5309c27c18e8Smrg do 5310b789ec8aSmrg# func_append moreargs " $fil" 5311c27c18e8Smrg arg=$fil 5312c27c18e8Smrg # A libtool-controlled object. 5313c43cc173Smrg 5314c27c18e8Smrg # Check to see that this really is a libtool object. 5315c27c18e8Smrg if func_lalib_unsafe_p "$arg"; then 5316c27c18e8Smrg pic_object= 5317c27c18e8Smrg non_pic_object= 5318c43cc173Smrg 5319c27c18e8Smrg # Read the .lo file 5320c27c18e8Smrg func_source "$arg" 5321c43cc173Smrg 5322c27c18e8Smrg if test -z "$pic_object" || 5323c27c18e8Smrg test -z "$non_pic_object" || 53240eb1301bSmrg test "$pic_object" = none && 53250eb1301bSmrg test "$non_pic_object" = none; then 53260eb1301bSmrg func_fatal_error "cannot find name of object for \`$arg'" 5327c27c18e8Smrg fi 5328c43cc173Smrg 5329c27c18e8Smrg # Extract subdirectory from the argument. 5330c27c18e8Smrg func_dirname "$arg" "/" "" 53310eb1301bSmrg xdir="$func_dirname_result" 5332c43cc173Smrg 53330eb1301bSmrg if test "$pic_object" != none; then 5334c27c18e8Smrg # Prepend the subdirectory the object is found in. 53350eb1301bSmrg pic_object="$xdir$pic_object" 5336c43cc173Smrg 53370eb1301bSmrg if test "$prev" = dlfiles; then 53380eb1301bSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5339b789ec8aSmrg func_append dlfiles " $pic_object" 5340c27c18e8Smrg prev= 5341c27c18e8Smrg continue 5342c27c18e8Smrg else 5343c27c18e8Smrg # If libtool objects are unsupported, then we need to preload. 5344c27c18e8Smrg prev=dlprefiles 5345c27c18e8Smrg fi 5346c27c18e8Smrg fi 5347c43cc173Smrg 5348c27c18e8Smrg # CHECK ME: I think I busted this. -Ossama 53490eb1301bSmrg if test "$prev" = dlprefiles; then 5350c27c18e8Smrg # Preload the old-style object. 5351b789ec8aSmrg func_append dlprefiles " $pic_object" 5352c27c18e8Smrg prev= 5353c27c18e8Smrg fi 5354c43cc173Smrg 5355c27c18e8Smrg # A PIC object. 5356c27c18e8Smrg func_append libobjs " $pic_object" 53570eb1301bSmrg arg="$pic_object" 5358c27c18e8Smrg fi 5359c43cc173Smrg 5360c27c18e8Smrg # Non-PIC object. 53610eb1301bSmrg if test "$non_pic_object" != none; then 5362c27c18e8Smrg # Prepend the subdirectory the object is found in. 53630eb1301bSmrg non_pic_object="$xdir$non_pic_object" 5364c43cc173Smrg 5365c27c18e8Smrg # A standard non-PIC object 5366c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 53670eb1301bSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 53680eb1301bSmrg arg="$non_pic_object" 5369c27c18e8Smrg fi 5370c27c18e8Smrg else 5371c27c18e8Smrg # If the PIC object exists, use it instead. 5372c27c18e8Smrg # $xdir was prepended to $pic_object above. 53730eb1301bSmrg non_pic_object="$pic_object" 5374c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 5375c27c18e8Smrg fi 5376c27c18e8Smrg else 5377c27c18e8Smrg # Only an error if not doing a dry-run. 5378c27c18e8Smrg if $opt_dry_run; then 5379c27c18e8Smrg # Extract subdirectory from the argument. 5380c27c18e8Smrg func_dirname "$arg" "/" "" 53810eb1301bSmrg xdir="$func_dirname_result" 5382c27c18e8Smrg 5383c27c18e8Smrg func_lo2o "$arg" 5384c27c18e8Smrg pic_object=$xdir$objdir/$func_lo2o_result 5385c27c18e8Smrg non_pic_object=$xdir$func_lo2o_result 5386c27c18e8Smrg func_append libobjs " $pic_object" 5387c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 5388c27c18e8Smrg else 53890eb1301bSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5390c27c18e8Smrg fi 5391c27c18e8Smrg fi 5392c43cc173Smrg done 5393c27c18e8Smrg else 53940eb1301bSmrg func_fatal_error "link input file \`$arg' does not exist" 5395c43cc173Smrg fi 5396c27c18e8Smrg arg=$save_arg 5397c27c18e8Smrg prev= 5398c27c18e8Smrg continue 5399c27c18e8Smrg ;; 5400c27c18e8Smrg precious_regex) 54010eb1301bSmrg precious_files_regex="$arg" 5402c27c18e8Smrg prev= 5403c27c18e8Smrg continue 5404c27c18e8Smrg ;; 5405c27c18e8Smrg release) 54060eb1301bSmrg release="-$arg" 5407c27c18e8Smrg prev= 5408c27c18e8Smrg continue 5409c27c18e8Smrg ;; 5410c27c18e8Smrg rpath | xrpath) 5411c27c18e8Smrg # We need an absolute path. 5412c27c18e8Smrg case $arg in 5413c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414c27c18e8Smrg *) 5415c27c18e8Smrg func_fatal_error "only absolute run-paths are allowed" 5416c27c18e8Smrg ;; 5417c43cc173Smrg esac 54180eb1301bSmrg if test "$prev" = rpath; then 5419c27c18e8Smrg case "$rpath " in 5420c27c18e8Smrg *" $arg "*) ;; 5421b789ec8aSmrg *) func_append rpath " $arg" ;; 5422c27c18e8Smrg esac 5423c27c18e8Smrg else 5424c27c18e8Smrg case "$xrpath " in 5425c27c18e8Smrg *" $arg "*) ;; 5426b789ec8aSmrg *) func_append xrpath " $arg" ;; 5427c27c18e8Smrg esac 5428c27c18e8Smrg fi 5429c27c18e8Smrg prev= 5430c27c18e8Smrg continue 5431c27c18e8Smrg ;; 5432c27c18e8Smrg shrext) 54330eb1301bSmrg shrext_cmds="$arg" 5434c27c18e8Smrg prev= 5435c27c18e8Smrg continue 5436c27c18e8Smrg ;; 5437c27c18e8Smrg weak) 5438b789ec8aSmrg func_append weak_libs " $arg" 5439c27c18e8Smrg prev= 5440c27c18e8Smrg continue 5441c27c18e8Smrg ;; 5442c27c18e8Smrg xcclinker) 5443b789ec8aSmrg func_append linker_flags " $qarg" 5444b789ec8aSmrg func_append compiler_flags " $qarg" 5445c27c18e8Smrg prev= 5446c27c18e8Smrg func_append compile_command " $qarg" 5447c27c18e8Smrg func_append finalize_command " $qarg" 5448c27c18e8Smrg continue 5449c27c18e8Smrg ;; 5450c27c18e8Smrg xcompiler) 5451b789ec8aSmrg func_append compiler_flags " $qarg" 5452c27c18e8Smrg prev= 5453c27c18e8Smrg func_append compile_command " $qarg" 5454c27c18e8Smrg func_append finalize_command " $qarg" 5455c27c18e8Smrg continue 5456c27c18e8Smrg ;; 5457c27c18e8Smrg xlinker) 5458b789ec8aSmrg func_append linker_flags " $qarg" 5459b789ec8aSmrg func_append compiler_flags " $wl$qarg" 5460c27c18e8Smrg prev= 5461c27c18e8Smrg func_append compile_command " $wl$qarg" 5462c27c18e8Smrg func_append finalize_command " $wl$qarg" 5463c27c18e8Smrg continue 5464c43cc173Smrg ;; 5465c43cc173Smrg *) 5466c27c18e8Smrg eval "$prev=\"\$arg\"" 5467c27c18e8Smrg prev= 5468c27c18e8Smrg continue 5469c43cc173Smrg ;; 5470c43cc173Smrg esac 5471c27c18e8Smrg fi # test -n "$prev" 5472c43cc173Smrg 54730eb1301bSmrg prevarg="$arg" 5474c43cc173Smrg 5475c27c18e8Smrg case $arg in 5476c27c18e8Smrg -all-static) 5477c27c18e8Smrg if test -n "$link_static_flag"; then 5478c27c18e8Smrg # See comment for -static flag below, for more details. 5479c27c18e8Smrg func_append compile_command " $link_static_flag" 5480c27c18e8Smrg func_append finalize_command " $link_static_flag" 5481c43cc173Smrg fi 5482c27c18e8Smrg continue 5483c27c18e8Smrg ;; 5484c43cc173Smrg 5485c27c18e8Smrg -allow-undefined) 5486c27c18e8Smrg # FIXME: remove this flag sometime in the future. 54870eb1301bSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488c27c18e8Smrg ;; 5489c43cc173Smrg 5490c27c18e8Smrg -avoid-version) 5491c27c18e8Smrg avoid_version=yes 5492c27c18e8Smrg continue 5493c27c18e8Smrg ;; 5494c43cc173Smrg 549537eb1ca1Smrg -bindir) 549637eb1ca1Smrg prev=bindir 549737eb1ca1Smrg continue 549837eb1ca1Smrg ;; 549937eb1ca1Smrg 5500c27c18e8Smrg -dlopen) 5501c27c18e8Smrg prev=dlfiles 5502c27c18e8Smrg continue 5503c27c18e8Smrg ;; 5504c43cc173Smrg 5505c27c18e8Smrg -dlpreopen) 5506c27c18e8Smrg prev=dlprefiles 5507c27c18e8Smrg continue 5508c27c18e8Smrg ;; 5509c43cc173Smrg 5510c27c18e8Smrg -export-dynamic) 5511c27c18e8Smrg export_dynamic=yes 5512c27c18e8Smrg continue 5513c27c18e8Smrg ;; 5514c43cc173Smrg 5515c27c18e8Smrg -export-symbols | -export-symbols-regex) 5516c27c18e8Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517c27c18e8Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518c27c18e8Smrg fi 55190eb1301bSmrg if test "X$arg" = "X-export-symbols"; then 5520c27c18e8Smrg prev=expsyms 5521c43cc173Smrg else 5522c27c18e8Smrg prev=expsyms_regex 5523c43cc173Smrg fi 5524c27c18e8Smrg continue 5525c27c18e8Smrg ;; 5526c43cc173Smrg 5527c27c18e8Smrg -framework) 5528c27c18e8Smrg prev=framework 5529c27c18e8Smrg continue 5530c27c18e8Smrg ;; 5531c43cc173Smrg 5532c27c18e8Smrg -inst-prefix-dir) 5533c27c18e8Smrg prev=inst_prefix 5534c27c18e8Smrg continue 5535c27c18e8Smrg ;; 5536c43cc173Smrg 5537c27c18e8Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538c27c18e8Smrg # so, if we see these flags be careful not to treat them like -L 5539c27c18e8Smrg -L[A-Z][A-Z]*:*) 5540c27c18e8Smrg case $with_gcc/$host in 5541c27c18e8Smrg no/*-*-irix* | /*-*-irix*) 5542c27c18e8Smrg func_append compile_command " $arg" 5543c27c18e8Smrg func_append finalize_command " $arg" 5544c27c18e8Smrg ;; 5545c27c18e8Smrg esac 5546c27c18e8Smrg continue 5547c27c18e8Smrg ;; 5548c43cc173Smrg 5549c27c18e8Smrg -L*) 5550b789ec8aSmrg func_stripname "-L" '' "$arg" 5551b789ec8aSmrg if test -z "$func_stripname_result"; then 5552c27c18e8Smrg if test "$#" -gt 0; then 55530eb1301bSmrg func_fatal_error "require no space between \`-L' and \`$1'" 5554c43cc173Smrg else 55550eb1301bSmrg func_fatal_error "need path for \`-L' option" 5556c43cc173Smrg fi 5557c27c18e8Smrg fi 5558b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 5559b789ec8aSmrg dir=$func_resolve_sysroot_result 5560c27c18e8Smrg # We need an absolute path. 5561c27c18e8Smrg case $dir in 5562c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563c27c18e8Smrg *) 5564c27c18e8Smrg absdir=`cd "$dir" && pwd` 5565c27c18e8Smrg test -z "$absdir" && \ 55660eb1301bSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 55670eb1301bSmrg dir="$absdir" 5568c27c18e8Smrg ;; 5569c43cc173Smrg esac 5570c27c18e8Smrg case "$deplibs " in 5571b789ec8aSmrg *" -L$dir "* | *" $arg "*) 5572b789ec8aSmrg # Will only happen for absolute or sysroot arguments 5573b789ec8aSmrg ;; 5574c27c18e8Smrg *) 5575b789ec8aSmrg # Preserve sysroot, but never include relative directories 5576b789ec8aSmrg case $dir in 5577b789ec8aSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5578b789ec8aSmrg *) func_append deplibs " -L$dir" ;; 5579b789ec8aSmrg esac 5580b789ec8aSmrg func_append lib_search_path " $dir" 5581c27c18e8Smrg ;; 5582c43cc173Smrg esac 5583c43cc173Smrg case $host in 5584c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 558537eb1ca1Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586c27c18e8Smrg case :$dllsearchpath: in 5587c27c18e8Smrg *":$dir:"*) ;; 5588c27c18e8Smrg ::) dllsearchpath=$dir;; 5589b789ec8aSmrg *) func_append dllsearchpath ":$dir";; 5590c27c18e8Smrg esac 5591c27c18e8Smrg case :$dllsearchpath: in 5592c27c18e8Smrg *":$testbindir:"*) ;; 5593c27c18e8Smrg ::) dllsearchpath=$testbindir;; 5594b789ec8aSmrg *) func_append dllsearchpath ":$testbindir";; 5595c27c18e8Smrg esac 5596c27c18e8Smrg ;; 5597c43cc173Smrg esac 5598c27c18e8Smrg continue 5599c27c18e8Smrg ;; 5600c43cc173Smrg 5601c27c18e8Smrg -l*) 56020eb1301bSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603c27c18e8Smrg case $host in 560437eb1ca1Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605c27c18e8Smrg # These systems don't actually have a C or math library (as such) 5606c27c18e8Smrg continue 5607c27c18e8Smrg ;; 5608c27c18e8Smrg *-*-os2*) 5609c27c18e8Smrg # These systems don't actually have a C library (as such) 56100eb1301bSmrg test "X$arg" = "X-lc" && continue 5611c27c18e8Smrg ;; 56120eb1301bSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613c27c18e8Smrg # Do not include libc due to us having libc/libc_r. 56140eb1301bSmrg test "X$arg" = "X-lc" && continue 5615c27c18e8Smrg ;; 5616c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 5617c27c18e8Smrg # Rhapsody C and math libraries are in the System framework 5618b789ec8aSmrg func_append deplibs " System.ltframework" 5619c27c18e8Smrg continue 5620c27c18e8Smrg ;; 5621c27c18e8Smrg *-*-sco3.2v5* | *-*-sco5v6*) 5622c27c18e8Smrg # Causes problems with __ctype 56230eb1301bSmrg test "X$arg" = "X-lc" && continue 5624c27c18e8Smrg ;; 5625c27c18e8Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626c27c18e8Smrg # Compiler inserts libc in the correct place for threads to work 56270eb1301bSmrg test "X$arg" = "X-lc" && continue 5628c27c18e8Smrg ;; 5629c27c18e8Smrg esac 56300eb1301bSmrg elif test "X$arg" = "X-lc_r"; then 5631c27c18e8Smrg case $host in 56320eb1301bSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633c27c18e8Smrg # Do not include libc_r directly, use -pthread flag. 5634c27c18e8Smrg continue 5635c27c18e8Smrg ;; 5636c27c18e8Smrg esac 5637c27c18e8Smrg fi 5638b789ec8aSmrg func_append deplibs " $arg" 5639c27c18e8Smrg continue 5640c27c18e8Smrg ;; 5641c43cc173Smrg 5642c27c18e8Smrg -module) 5643c27c18e8Smrg module=yes 5644c27c18e8Smrg continue 5645c27c18e8Smrg ;; 5646c43cc173Smrg 5647c27c18e8Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648c27c18e8Smrg # classes, name mangling, and exception handling. 5649c27c18e8Smrg # Darwin uses the -arch flag to determine output architecture. 5650b789ec8aSmrg -model|-arch|-isysroot|--sysroot) 5651b789ec8aSmrg func_append compiler_flags " $arg" 5652c27c18e8Smrg func_append compile_command " $arg" 5653c27c18e8Smrg func_append finalize_command " $arg" 5654c27c18e8Smrg prev=xcompiler 5655c27c18e8Smrg continue 5656c27c18e8Smrg ;; 5657c43cc173Smrg 5658f1ee322dSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659f1ee322dSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 5660b789ec8aSmrg func_append compiler_flags " $arg" 5661c27c18e8Smrg func_append compile_command " $arg" 5662c27c18e8Smrg func_append finalize_command " $arg" 5663c27c18e8Smrg case "$new_inherited_linker_flags " in 5664c27c18e8Smrg *" $arg "*) ;; 5665b789ec8aSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666c27c18e8Smrg esac 5667c27c18e8Smrg continue 5668c27c18e8Smrg ;; 5669c43cc173Smrg 5670c27c18e8Smrg -multi_module) 56710eb1301bSmrg single_module="${wl}-multi_module" 5672c27c18e8Smrg continue 5673c27c18e8Smrg ;; 5674c43cc173Smrg 5675c27c18e8Smrg -no-fast-install) 5676c27c18e8Smrg fast_install=no 5677c27c18e8Smrg continue 5678c27c18e8Smrg ;; 5679c43cc173Smrg 5680c27c18e8Smrg -no-install) 5681c27c18e8Smrg case $host in 5682c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683c27c18e8Smrg # The PATH hackery in wrapper scripts is required on Windows 5684c27c18e8Smrg # and Darwin in order for the loader to find any dlls it needs. 56850eb1301bSmrg func_warning "\`-no-install' is ignored for $host" 56860eb1301bSmrg func_warning "assuming \`-no-fast-install' instead" 5687c27c18e8Smrg fast_install=no 5688c27c18e8Smrg ;; 5689c27c18e8Smrg *) no_install=yes ;; 5690c27c18e8Smrg esac 5691c27c18e8Smrg continue 5692c27c18e8Smrg ;; 5693c43cc173Smrg 5694c27c18e8Smrg -no-undefined) 5695c27c18e8Smrg allow_undefined=no 5696c27c18e8Smrg continue 5697c27c18e8Smrg ;; 5698c43cc173Smrg 5699c27c18e8Smrg -objectlist) 5700c27c18e8Smrg prev=objectlist 5701c27c18e8Smrg continue 5702c27c18e8Smrg ;; 5703c43cc173Smrg 5704c27c18e8Smrg -o) prev=output ;; 5705c43cc173Smrg 5706c27c18e8Smrg -precious-files-regex) 5707c27c18e8Smrg prev=precious_regex 5708c27c18e8Smrg continue 5709c27c18e8Smrg ;; 5710c43cc173Smrg 5711c27c18e8Smrg -release) 5712c27c18e8Smrg prev=release 5713c27c18e8Smrg continue 5714c27c18e8Smrg ;; 5715c43cc173Smrg 5716c27c18e8Smrg -rpath) 5717c27c18e8Smrg prev=rpath 5718c27c18e8Smrg continue 5719c27c18e8Smrg ;; 5720c43cc173Smrg 5721c27c18e8Smrg -R) 5722c27c18e8Smrg prev=xrpath 5723c27c18e8Smrg continue 5724c27c18e8Smrg ;; 5725c43cc173Smrg 5726c27c18e8Smrg -R*) 5727c27c18e8Smrg func_stripname '-R' '' "$arg" 5728c27c18e8Smrg dir=$func_stripname_result 5729c27c18e8Smrg # We need an absolute path. 5730c27c18e8Smrg case $dir in 5731c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5732b789ec8aSmrg =*) 5733b789ec8aSmrg func_stripname '=' '' "$dir" 5734b789ec8aSmrg dir=$lt_sysroot$func_stripname_result 5735b789ec8aSmrg ;; 5736c27c18e8Smrg *) 5737c27c18e8Smrg func_fatal_error "only absolute run-paths are allowed" 5738c27c18e8Smrg ;; 5739c27c18e8Smrg esac 5740c27c18e8Smrg case "$xrpath " in 5741c27c18e8Smrg *" $dir "*) ;; 5742b789ec8aSmrg *) func_append xrpath " $dir" ;; 5743c27c18e8Smrg esac 5744c27c18e8Smrg continue 5745c27c18e8Smrg ;; 5746c43cc173Smrg 5747c27c18e8Smrg -shared) 5748c27c18e8Smrg # The effects of -shared are defined in a previous loop. 5749c27c18e8Smrg continue 5750c27c18e8Smrg ;; 5751c43cc173Smrg 5752c27c18e8Smrg -shrext) 5753c27c18e8Smrg prev=shrext 5754c27c18e8Smrg continue 5755c27c18e8Smrg ;; 5756c43cc173Smrg 5757c27c18e8Smrg -static | -static-libtool-libs) 5758c27c18e8Smrg # The effects of -static are defined in a previous loop. 5759c27c18e8Smrg # We used to do the same as -all-static on platforms that 5760c27c18e8Smrg # didn't have a PIC flag, but the assumption that the effects 5761c27c18e8Smrg # would be equivalent was wrong. It would break on at least 5762c27c18e8Smrg # Digital Unix and AIX. 5763c27c18e8Smrg continue 5764c27c18e8Smrg ;; 5765c43cc173Smrg 5766c27c18e8Smrg -thread-safe) 5767c27c18e8Smrg thread_safe=yes 5768c27c18e8Smrg continue 5769c27c18e8Smrg ;; 5770c43cc173Smrg 5771c27c18e8Smrg -version-info) 5772c27c18e8Smrg prev=vinfo 5773c27c18e8Smrg continue 5774c27c18e8Smrg ;; 5775c43cc173Smrg 5776c27c18e8Smrg -version-number) 5777c27c18e8Smrg prev=vinfo 5778c27c18e8Smrg vinfo_number=yes 5779c27c18e8Smrg continue 5780c27c18e8Smrg ;; 5781c43cc173Smrg 5782c27c18e8Smrg -weak) 5783c27c18e8Smrg prev=weak 5784c27c18e8Smrg continue 5785c27c18e8Smrg ;; 5786c43cc173Smrg 5787c27c18e8Smrg -Wc,*) 5788c27c18e8Smrg func_stripname '-Wc,' '' "$arg" 5789c27c18e8Smrg args=$func_stripname_result 5790c27c18e8Smrg arg= 57910eb1301bSmrg save_ifs="$IFS"; IFS=',' 5792c27c18e8Smrg for flag in $args; do 57930eb1301bSmrg IFS="$save_ifs" 5794c27c18e8Smrg func_quote_for_eval "$flag" 5795b789ec8aSmrg func_append arg " $func_quote_for_eval_result" 5796b789ec8aSmrg func_append compiler_flags " $func_quote_for_eval_result" 5797c27c18e8Smrg done 57980eb1301bSmrg IFS="$save_ifs" 5799c27c18e8Smrg func_stripname ' ' '' "$arg" 5800c27c18e8Smrg arg=$func_stripname_result 5801c27c18e8Smrg ;; 5802c43cc173Smrg 5803c27c18e8Smrg -Wl,*) 5804c27c18e8Smrg func_stripname '-Wl,' '' "$arg" 5805c27c18e8Smrg args=$func_stripname_result 5806c27c18e8Smrg arg= 58070eb1301bSmrg save_ifs="$IFS"; IFS=',' 5808c27c18e8Smrg for flag in $args; do 58090eb1301bSmrg IFS="$save_ifs" 5810c27c18e8Smrg func_quote_for_eval "$flag" 5811b789ec8aSmrg func_append arg " $wl$func_quote_for_eval_result" 5812b789ec8aSmrg func_append compiler_flags " $wl$func_quote_for_eval_result" 5813b789ec8aSmrg func_append linker_flags " $func_quote_for_eval_result" 5814c27c18e8Smrg done 58150eb1301bSmrg IFS="$save_ifs" 5816c27c18e8Smrg func_stripname ' ' '' "$arg" 5817c27c18e8Smrg arg=$func_stripname_result 5818c27c18e8Smrg ;; 5819c43cc173Smrg 5820c27c18e8Smrg -Xcompiler) 5821c27c18e8Smrg prev=xcompiler 5822c27c18e8Smrg continue 5823c27c18e8Smrg ;; 5824c43cc173Smrg 5825c27c18e8Smrg -Xlinker) 5826c27c18e8Smrg prev=xlinker 5827c27c18e8Smrg continue 5828c27c18e8Smrg ;; 5829c43cc173Smrg 5830c27c18e8Smrg -XCClinker) 5831c27c18e8Smrg prev=xcclinker 5832c27c18e8Smrg continue 5833c27c18e8Smrg ;; 5834c43cc173Smrg 5835c27c18e8Smrg # -msg_* for osf cc 5836c27c18e8Smrg -msg_*) 5837c27c18e8Smrg func_quote_for_eval "$arg" 58380eb1301bSmrg arg="$func_quote_for_eval_result" 5839c27c18e8Smrg ;; 5840c43cc173Smrg 584137eb1ca1Smrg # Flags to be passed through unchanged, with rationale: 584237eb1ca1Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 584337eb1ca1Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 584437eb1ca1Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 584537eb1ca1Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 584637eb1ca1Smrg # -q* compiler args for the IBM compiler 584737eb1ca1Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 584837eb1ca1Smrg # -F/path path to uninstalled frameworks, gcc on darwin 584937eb1ca1Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 585037eb1ca1Smrg # @file GCC response files 585137eb1ca1Smrg # -tp=* Portland pgcc target processor selection 5852b789ec8aSmrg # --sysroot=* for sysroot support 58530eb1301bSmrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854c27c18e8Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5855b789ec8aSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 58560eb1301bSmrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857c27c18e8Smrg func_quote_for_eval "$arg" 58580eb1301bSmrg arg="$func_quote_for_eval_result" 5859c27c18e8Smrg func_append compile_command " $arg" 5860c27c18e8Smrg func_append finalize_command " $arg" 5861b789ec8aSmrg func_append compiler_flags " $arg" 5862c27c18e8Smrg continue 5863c27c18e8Smrg ;; 5864c43cc173Smrg 5865c27c18e8Smrg # Some other compiler flag. 5866c27c18e8Smrg -* | +*) 5867c27c18e8Smrg func_quote_for_eval "$arg" 58680eb1301bSmrg arg="$func_quote_for_eval_result" 5869c27c18e8Smrg ;; 5870c43cc173Smrg 5871c27c18e8Smrg *.$objext) 5872c27c18e8Smrg # A standard object. 5873b789ec8aSmrg func_append objs " $arg" 5874c27c18e8Smrg ;; 5875c43cc173Smrg 5876c27c18e8Smrg *.lo) 5877c27c18e8Smrg # A libtool-controlled object. 5878c43cc173Smrg 5879c27c18e8Smrg # Check to see that this really is a libtool object. 5880c27c18e8Smrg if func_lalib_unsafe_p "$arg"; then 5881c27c18e8Smrg pic_object= 5882c27c18e8Smrg non_pic_object= 5883c43cc173Smrg 5884c27c18e8Smrg # Read the .lo file 5885c27c18e8Smrg func_source "$arg" 5886c43cc173Smrg 5887c27c18e8Smrg if test -z "$pic_object" || 5888c27c18e8Smrg test -z "$non_pic_object" || 58890eb1301bSmrg test "$pic_object" = none && 58900eb1301bSmrg test "$non_pic_object" = none; then 58910eb1301bSmrg func_fatal_error "cannot find name of object for \`$arg'" 5892c27c18e8Smrg fi 5893c43cc173Smrg 5894c27c18e8Smrg # Extract subdirectory from the argument. 5895c27c18e8Smrg func_dirname "$arg" "/" "" 58960eb1301bSmrg xdir="$func_dirname_result" 5897c43cc173Smrg 58980eb1301bSmrg if test "$pic_object" != none; then 5899c27c18e8Smrg # Prepend the subdirectory the object is found in. 59000eb1301bSmrg pic_object="$xdir$pic_object" 5901c43cc173Smrg 59020eb1301bSmrg if test "$prev" = dlfiles; then 59030eb1301bSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5904b789ec8aSmrg func_append dlfiles " $pic_object" 5905c27c18e8Smrg prev= 5906c27c18e8Smrg continue 5907c27c18e8Smrg else 5908c27c18e8Smrg # If libtool objects are unsupported, then we need to preload. 5909c27c18e8Smrg prev=dlprefiles 5910c27c18e8Smrg fi 5911c27c18e8Smrg fi 5912c43cc173Smrg 5913c27c18e8Smrg # CHECK ME: I think I busted this. -Ossama 59140eb1301bSmrg if test "$prev" = dlprefiles; then 5915c27c18e8Smrg # Preload the old-style object. 5916b789ec8aSmrg func_append dlprefiles " $pic_object" 5917c27c18e8Smrg prev= 5918c27c18e8Smrg fi 5919c43cc173Smrg 5920c27c18e8Smrg # A PIC object. 5921c27c18e8Smrg func_append libobjs " $pic_object" 59220eb1301bSmrg arg="$pic_object" 59230eb1301bSmrg fi 5924c43cc173Smrg 5925c27c18e8Smrg # Non-PIC object. 59260eb1301bSmrg if test "$non_pic_object" != none; then 5927c27c18e8Smrg # Prepend the subdirectory the object is found in. 59280eb1301bSmrg non_pic_object="$xdir$non_pic_object" 5929c43cc173Smrg 5930c27c18e8Smrg # A standard non-PIC object 5931c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 59320eb1301bSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 59330eb1301bSmrg arg="$non_pic_object" 5934c27c18e8Smrg fi 5935c27c18e8Smrg else 5936c27c18e8Smrg # If the PIC object exists, use it instead. 5937c27c18e8Smrg # $xdir was prepended to $pic_object above. 59380eb1301bSmrg non_pic_object="$pic_object" 5939c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 5940c27c18e8Smrg fi 5941c27c18e8Smrg else 5942c27c18e8Smrg # Only an error if not doing a dry-run. 5943c27c18e8Smrg if $opt_dry_run; then 5944c27c18e8Smrg # Extract subdirectory from the argument. 5945c27c18e8Smrg func_dirname "$arg" "/" "" 59460eb1301bSmrg xdir="$func_dirname_result" 5947c27c18e8Smrg 5948c27c18e8Smrg func_lo2o "$arg" 5949c27c18e8Smrg pic_object=$xdir$objdir/$func_lo2o_result 5950c27c18e8Smrg non_pic_object=$xdir$func_lo2o_result 5951c27c18e8Smrg func_append libobjs " $pic_object" 5952c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 5953c27c18e8Smrg else 59540eb1301bSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5955c27c18e8Smrg fi 5956c27c18e8Smrg fi 5957c27c18e8Smrg ;; 5958c43cc173Smrg 5959c27c18e8Smrg *.$libext) 5960c27c18e8Smrg # An archive. 5961b789ec8aSmrg func_append deplibs " $arg" 5962b789ec8aSmrg func_append old_deplibs " $arg" 5963c27c18e8Smrg continue 5964c27c18e8Smrg ;; 5965c43cc173Smrg 5966c27c18e8Smrg *.la) 5967c27c18e8Smrg # A libtool-controlled library. 5968c43cc173Smrg 5969b789ec8aSmrg func_resolve_sysroot "$arg" 59700eb1301bSmrg if test "$prev" = dlfiles; then 5971c27c18e8Smrg # This library was specified with -dlopen. 5972b789ec8aSmrg func_append dlfiles " $func_resolve_sysroot_result" 5973c27c18e8Smrg prev= 59740eb1301bSmrg elif test "$prev" = dlprefiles; then 5975c27c18e8Smrg # The library was specified with -dlpreopen. 5976b789ec8aSmrg func_append dlprefiles " $func_resolve_sysroot_result" 5977c27c18e8Smrg prev= 5978c27c18e8Smrg else 5979b789ec8aSmrg func_append deplibs " $func_resolve_sysroot_result" 5980c27c18e8Smrg fi 5981c27c18e8Smrg continue 5982c27c18e8Smrg ;; 5983c43cc173Smrg 5984c27c18e8Smrg # Some other compiler argument. 5985c27c18e8Smrg *) 5986c27c18e8Smrg # Unknown arguments in both finalize_command and compile_command need 5987c27c18e8Smrg # to be aesthetically quoted because they are evaled later. 5988c27c18e8Smrg func_quote_for_eval "$arg" 59890eb1301bSmrg arg="$func_quote_for_eval_result" 5990c27c18e8Smrg ;; 5991c27c18e8Smrg esac # arg 5992c43cc173Smrg 5993c27c18e8Smrg # Now actually substitute the argument into the commands. 5994c27c18e8Smrg if test -n "$arg"; then 5995c27c18e8Smrg func_append compile_command " $arg" 5996c27c18e8Smrg func_append finalize_command " $arg" 5997c27c18e8Smrg fi 5998c27c18e8Smrg done # argument parsing loop 599921e67964Smrg 6000c27c18e8Smrg test -n "$prev" && \ 60010eb1301bSmrg func_fatal_help "the \`$prevarg' option requires an argument" 6002c43cc173Smrg 60030eb1301bSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004c27c18e8Smrg eval arg=\"$export_dynamic_flag_spec\" 6005c27c18e8Smrg func_append compile_command " $arg" 6006c27c18e8Smrg func_append finalize_command " $arg" 6007c27c18e8Smrg fi 6008c43cc173Smrg 6009c27c18e8Smrg oldlibs= 6010c27c18e8Smrg # calculate the name of the file, without its directory 6011c27c18e8Smrg func_basename "$output" 60120eb1301bSmrg outputname="$func_basename_result" 60130eb1301bSmrg libobjs_save="$libobjs" 6014c27c18e8Smrg 6015c27c18e8Smrg if test -n "$shlibpath_var"; then 6016c27c18e8Smrg # get the directories listed in $shlibpath_var 60170eb1301bSmrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018c43cc173Smrg else 6019c27c18e8Smrg shlib_search_path= 6020c43cc173Smrg fi 6021c27c18e8Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022c27c18e8Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023c43cc173Smrg 6024c27c18e8Smrg func_dirname "$output" "/" "" 60250eb1301bSmrg output_objdir="$func_dirname_result$objdir" 6026b789ec8aSmrg func_to_tool_file "$output_objdir/" 6027b789ec8aSmrg tool_output_objdir=$func_to_tool_file_result 6028c27c18e8Smrg # Create the object directory. 6029c27c18e8Smrg func_mkdir_p "$output_objdir" 6030c43cc173Smrg 6031c27c18e8Smrg # Determine the type of output 6032c27c18e8Smrg case $output in 6033c27c18e8Smrg "") 6034c27c18e8Smrg func_fatal_help "you must specify an output file" 6035c27c18e8Smrg ;; 6036c27c18e8Smrg *.$libext) linkmode=oldlib ;; 6037c27c18e8Smrg *.lo | *.$objext) linkmode=obj ;; 6038c27c18e8Smrg *.la) linkmode=lib ;; 6039c27c18e8Smrg *) linkmode=prog ;; # Anything else should be a program. 6040c27c18e8Smrg esac 6041c27c18e8Smrg 6042c27c18e8Smrg specialdeplibs= 6043c27c18e8Smrg 6044c27c18e8Smrg libs= 6045c27c18e8Smrg # Find all interdependent deplibs by searching for libraries 6046c27c18e8Smrg # that are linked more than once (e.g. -la -lb -la) 6047c27c18e8Smrg for deplib in $deplibs; do 60480eb1301bSmrg if $opt_preserve_dup_deps ; then 6049c27c18e8Smrg case "$libs " in 6050b789ec8aSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051c27c18e8Smrg esac 6052c27c18e8Smrg fi 6053b789ec8aSmrg func_append libs " $deplib" 6054c27c18e8Smrg done 6055c27c18e8Smrg 60560eb1301bSmrg if test "$linkmode" = lib; then 6057c27c18e8Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058c27c18e8Smrg 6059c27c18e8Smrg # Compute libraries that are listed more than once in $predeps 6060c27c18e8Smrg # $postdeps and mark them as special (i.e., whose duplicates are 6061c27c18e8Smrg # not to be eliminated). 6062c27c18e8Smrg pre_post_deps= 6063c27c18e8Smrg if $opt_duplicate_compiler_generated_deps; then 6064c27c18e8Smrg for pre_post_dep in $predeps $postdeps; do 6065c27c18e8Smrg case "$pre_post_deps " in 6066b789ec8aSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067c27c18e8Smrg esac 6068b789ec8aSmrg func_append pre_post_deps " $pre_post_dep" 6069c27c18e8Smrg done 6070c27c18e8Smrg fi 6071c27c18e8Smrg pre_post_deps= 6072c27c18e8Smrg fi 6073c27c18e8Smrg 6074c27c18e8Smrg deplibs= 6075c27c18e8Smrg newdependency_libs= 6076c27c18e8Smrg newlib_search_path= 6077c27c18e8Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078c27c18e8Smrg notinst_deplibs= # not-installed libtool libraries 6079c27c18e8Smrg notinst_path= # paths that contain not-installed libtool libraries 6080c27c18e8Smrg 6081c27c18e8Smrg case $linkmode in 6082c27c18e8Smrg lib) 6083c27c18e8Smrg passes="conv dlpreopen link" 6084c27c18e8Smrg for file in $dlfiles $dlprefiles; do 6085c27c18e8Smrg case $file in 6086c27c18e8Smrg *.la) ;; 6087c27c18e8Smrg *) 60880eb1301bSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089c27c18e8Smrg ;; 6090c27c18e8Smrg esac 6091c27c18e8Smrg done 6092c27c18e8Smrg ;; 6093c27c18e8Smrg prog) 6094c27c18e8Smrg compile_deplibs= 6095c27c18e8Smrg finalize_deplibs= 60960eb1301bSmrg alldeplibs=no 6097c27c18e8Smrg newdlfiles= 6098c27c18e8Smrg newdlprefiles= 6099c27c18e8Smrg passes="conv scan dlopen dlpreopen link" 6100c27c18e8Smrg ;; 6101c27c18e8Smrg *) passes="conv" 6102c27c18e8Smrg ;; 6103c27c18e8Smrg esac 6104c27c18e8Smrg 6105c27c18e8Smrg for pass in $passes; do 6106c27c18e8Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107c27c18e8Smrg # so that -L comes before libs that need it for instance... 61080eb1301bSmrg if test "$linkmode,$pass" = "lib,link"; then 6109c27c18e8Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110c27c18e8Smrg ## order, and fix it there properly 6111c27c18e8Smrg tmp_deplibs= 6112c27c18e8Smrg for deplib in $deplibs; do 6113c27c18e8Smrg tmp_deplibs="$deplib $tmp_deplibs" 6114c27c18e8Smrg done 61150eb1301bSmrg deplibs="$tmp_deplibs" 6116c27c18e8Smrg fi 6117c27c18e8Smrg 61180eb1301bSmrg if test "$linkmode,$pass" = "lib,link" || 61190eb1301bSmrg test "$linkmode,$pass" = "prog,scan"; then 61200eb1301bSmrg libs="$deplibs" 6121c27c18e8Smrg deplibs= 6122c27c18e8Smrg fi 61230eb1301bSmrg if test "$linkmode" = prog; then 6124c27c18e8Smrg case $pass in 61250eb1301bSmrg dlopen) libs="$dlfiles" ;; 61260eb1301bSmrg dlpreopen) libs="$dlprefiles" ;; 61270eb1301bSmrg link) 61280eb1301bSmrg libs="$deplibs %DEPLIBS%" 61290eb1301bSmrg test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" 61300eb1301bSmrg ;; 6131c27c18e8Smrg esac 6132c27c18e8Smrg fi 61330eb1301bSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6134c27c18e8Smrg # Collect and forward deplibs of preopened libtool libs 6135c27c18e8Smrg for lib in $dlprefiles; do 6136c27c18e8Smrg # Ignore non-libtool-libs 6137c27c18e8Smrg dependency_libs= 6138b789ec8aSmrg func_resolve_sysroot "$lib" 6139c27c18e8Smrg case $lib in 6140b789ec8aSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 6141c27c18e8Smrg esac 6142c27c18e8Smrg 6143c27c18e8Smrg # Collect preopened libtool deplibs, except any this library 6144c27c18e8Smrg # has declared as weak libs 6145c27c18e8Smrg for deplib in $dependency_libs; do 614637eb1ca1Smrg func_basename "$deplib" 614737eb1ca1Smrg deplib_base=$func_basename_result 6148c27c18e8Smrg case " $weak_libs " in 6149c27c18e8Smrg *" $deplib_base "*) ;; 6150b789ec8aSmrg *) func_append deplibs " $deplib" ;; 6151c27c18e8Smrg esac 6152c27c18e8Smrg done 6153c27c18e8Smrg done 61540eb1301bSmrg libs="$dlprefiles" 6155c27c18e8Smrg fi 61560eb1301bSmrg if test "$pass" = dlopen; then 6157c27c18e8Smrg # Collect dlpreopened libraries 61580eb1301bSmrg save_deplibs="$deplibs" 6159c27c18e8Smrg deplibs= 6160c27c18e8Smrg fi 6161c27c18e8Smrg 6162c27c18e8Smrg for deplib in $libs; do 6163c27c18e8Smrg lib= 61640eb1301bSmrg found=no 6165c27c18e8Smrg case $deplib in 6166f1ee322dSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6167f1ee322dSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 61680eb1301bSmrg if test "$linkmode,$pass" = "prog,link"; then 6169c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 6170c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 6171c27c18e8Smrg else 6172b789ec8aSmrg func_append compiler_flags " $deplib" 61730eb1301bSmrg if test "$linkmode" = lib ; then 6174c27c18e8Smrg case "$new_inherited_linker_flags " in 6175c27c18e8Smrg *" $deplib "*) ;; 6176b789ec8aSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6177c27c18e8Smrg esac 6178c27c18e8Smrg fi 6179c27c18e8Smrg fi 6180c27c18e8Smrg continue 6181c27c18e8Smrg ;; 6182c27c18e8Smrg -l*) 61830eb1301bSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 61840eb1301bSmrg func_warning "\`-l' is ignored for archives/objects" 6185c27c18e8Smrg continue 6186c27c18e8Smrg fi 6187c27c18e8Smrg func_stripname '-l' '' "$deplib" 6188c27c18e8Smrg name=$func_stripname_result 61890eb1301bSmrg if test "$linkmode" = lib; then 6190c27c18e8Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6191c27c18e8Smrg else 6192c27c18e8Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6193c27c18e8Smrg fi 6194c27c18e8Smrg for searchdir in $searchdirs; do 6195c27c18e8Smrg for search_ext in .la $std_shrext .so .a; do 6196c27c18e8Smrg # Search the libtool library 61970eb1301bSmrg lib="$searchdir/lib${name}${search_ext}" 6198c27c18e8Smrg if test -f "$lib"; then 61990eb1301bSmrg if test "$search_ext" = ".la"; then 62000eb1301bSmrg found=yes 6201c27c18e8Smrg else 62020eb1301bSmrg found=no 6203c27c18e8Smrg fi 6204c27c18e8Smrg break 2 6205c27c18e8Smrg fi 6206c27c18e8Smrg done 6207c27c18e8Smrg done 62080eb1301bSmrg if test "$found" != yes; then 62090eb1301bSmrg # deplib doesn't seem to be a libtool library 62100eb1301bSmrg if test "$linkmode,$pass" = "prog,link"; then 62110eb1301bSmrg compile_deplibs="$deplib $compile_deplibs" 62120eb1301bSmrg finalize_deplibs="$deplib $finalize_deplibs" 62130eb1301bSmrg else 62140eb1301bSmrg deplibs="$deplib $deplibs" 62150eb1301bSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 62160eb1301bSmrg fi 62170eb1301bSmrg continue 62180eb1301bSmrg else # deplib is a libtool library 6219c27c18e8Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6220c27c18e8Smrg # We need to do some special things here, and not later. 62210eb1301bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6222c27c18e8Smrg case " $predeps $postdeps " in 6223c27c18e8Smrg *" $deplib "*) 6224c27c18e8Smrg if func_lalib_p "$lib"; then 6225c27c18e8Smrg library_names= 6226c27c18e8Smrg old_library= 6227c27c18e8Smrg func_source "$lib" 6228c27c18e8Smrg for l in $old_library $library_names; do 62290eb1301bSmrg ll="$l" 6230c27c18e8Smrg done 62310eb1301bSmrg if test "X$ll" = "X$old_library" ; then # only static version available 62320eb1301bSmrg found=no 6233c27c18e8Smrg func_dirname "$lib" "" "." 62340eb1301bSmrg ladir="$func_dirname_result" 6235c27c18e8Smrg lib=$ladir/$old_library 62360eb1301bSmrg if test "$linkmode,$pass" = "prog,link"; then 6237c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 6238c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 6239c27c18e8Smrg else 6240c27c18e8Smrg deplibs="$deplib $deplibs" 62410eb1301bSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6242c27c18e8Smrg fi 6243c27c18e8Smrg continue 6244c27c18e8Smrg fi 6245c27c18e8Smrg fi 6246c27c18e8Smrg ;; 6247c27c18e8Smrg *) ;; 6248c27c18e8Smrg esac 6249c27c18e8Smrg fi 6250c27c18e8Smrg fi 6251c27c18e8Smrg ;; # -l 6252c27c18e8Smrg *.ltframework) 62530eb1301bSmrg if test "$linkmode,$pass" = "prog,link"; then 6254c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 6255c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 6256c27c18e8Smrg else 6257c27c18e8Smrg deplibs="$deplib $deplibs" 62580eb1301bSmrg if test "$linkmode" = lib ; then 6259c27c18e8Smrg case "$new_inherited_linker_flags " in 6260c27c18e8Smrg *" $deplib "*) ;; 6261b789ec8aSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6262c27c18e8Smrg esac 6263c27c18e8Smrg fi 6264c27c18e8Smrg fi 6265c27c18e8Smrg continue 6266c27c18e8Smrg ;; 6267c27c18e8Smrg -L*) 6268c27c18e8Smrg case $linkmode in 6269c27c18e8Smrg lib) 6270c27c18e8Smrg deplibs="$deplib $deplibs" 62710eb1301bSmrg test "$pass" = conv && continue 6272c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 6273c27c18e8Smrg func_stripname '-L' '' "$deplib" 6274b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 6275b789ec8aSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6276c27c18e8Smrg ;; 6277c27c18e8Smrg prog) 62780eb1301bSmrg if test "$pass" = conv; then 6279c27c18e8Smrg deplibs="$deplib $deplibs" 6280c27c18e8Smrg continue 6281c27c18e8Smrg fi 62820eb1301bSmrg if test "$pass" = scan; then 6283c27c18e8Smrg deplibs="$deplib $deplibs" 6284c27c18e8Smrg else 6285c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 6286c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 6287c27c18e8Smrg fi 6288c27c18e8Smrg func_stripname '-L' '' "$deplib" 6289b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 6290b789ec8aSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6291c27c18e8Smrg ;; 6292c27c18e8Smrg *) 62930eb1301bSmrg func_warning "\`-L' is ignored for archives/objects" 6294c27c18e8Smrg ;; 6295c27c18e8Smrg esac # linkmode 6296c27c18e8Smrg continue 6297c27c18e8Smrg ;; # -L 6298c27c18e8Smrg -R*) 62990eb1301bSmrg if test "$pass" = link; then 6300c27c18e8Smrg func_stripname '-R' '' "$deplib" 6301b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 6302b789ec8aSmrg dir=$func_resolve_sysroot_result 6303c27c18e8Smrg # Make sure the xrpath contains only unique directories. 6304c27c18e8Smrg case "$xrpath " in 6305c27c18e8Smrg *" $dir "*) ;; 6306b789ec8aSmrg *) func_append xrpath " $dir" ;; 6307c27c18e8Smrg esac 6308c27c18e8Smrg fi 6309c27c18e8Smrg deplibs="$deplib $deplibs" 6310c27c18e8Smrg continue 6311c27c18e8Smrg ;; 6312b789ec8aSmrg *.la) 6313b789ec8aSmrg func_resolve_sysroot "$deplib" 6314b789ec8aSmrg lib=$func_resolve_sysroot_result 6315b789ec8aSmrg ;; 6316c27c18e8Smrg *.$libext) 63170eb1301bSmrg if test "$pass" = conv; then 6318c27c18e8Smrg deplibs="$deplib $deplibs" 6319c27c18e8Smrg continue 6320c27c18e8Smrg fi 6321c27c18e8Smrg case $linkmode in 6322c27c18e8Smrg lib) 6323c27c18e8Smrg # Linking convenience modules into shared libraries is allowed, 6324c27c18e8Smrg # but linking other static libraries is non-portable. 6325c27c18e8Smrg case " $dlpreconveniencelibs " in 6326c27c18e8Smrg *" $deplib "*) ;; 6327c27c18e8Smrg *) 63280eb1301bSmrg valid_a_lib=no 6329c27c18e8Smrg case $deplibs_check_method in 6330c27c18e8Smrg match_pattern*) 6331c27c18e8Smrg set dummy $deplibs_check_method; shift 6332c27c18e8Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 633337eb1ca1Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6334c27c18e8Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 63350eb1301bSmrg valid_a_lib=yes 6336c27c18e8Smrg fi 6337c27c18e8Smrg ;; 6338c27c18e8Smrg pass_all) 63390eb1301bSmrg valid_a_lib=yes 6340c27c18e8Smrg ;; 6341c27c18e8Smrg esac 63420eb1301bSmrg if test "$valid_a_lib" != yes; then 634337eb1ca1Smrg echo 6344c27c18e8Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 634537eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 634637eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 634737eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 634837eb1ca1Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 634937eb1ca1Smrg echo "*** that it is just a static archive that I should not use here." 63500eb1301bSmrg else 63510eb1301bSmrg echo 63520eb1301bSmrg $ECHO "*** Warning: Linking the shared library $output against the" 63530eb1301bSmrg $ECHO "*** static library $deplib is not portable!" 63540eb1301bSmrg deplibs="$deplib $deplibs" 6355c27c18e8Smrg fi 6356c27c18e8Smrg ;; 6357c27c18e8Smrg esac 6358c27c18e8Smrg continue 6359c27c18e8Smrg ;; 6360c27c18e8Smrg prog) 63610eb1301bSmrg if test "$pass" != link; then 6362c27c18e8Smrg deplibs="$deplib $deplibs" 6363c27c18e8Smrg else 6364c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 6365c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 6366c27c18e8Smrg fi 6367c27c18e8Smrg continue 6368c27c18e8Smrg ;; 6369c27c18e8Smrg esac # linkmode 6370c27c18e8Smrg ;; # *.$libext 6371c27c18e8Smrg *.lo | *.$objext) 63720eb1301bSmrg if test "$pass" = conv; then 6373c27c18e8Smrg deplibs="$deplib $deplibs" 63740eb1301bSmrg elif test "$linkmode" = prog; then 63750eb1301bSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6376c27c18e8Smrg # If there is no dlopen support or we're linking statically, 6377c27c18e8Smrg # we need to preload. 6378b789ec8aSmrg func_append newdlprefiles " $deplib" 6379c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 6380c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 6381c27c18e8Smrg else 6382b789ec8aSmrg func_append newdlfiles " $deplib" 6383c27c18e8Smrg fi 6384c27c18e8Smrg fi 6385c27c18e8Smrg continue 6386c27c18e8Smrg ;; 6387c27c18e8Smrg %DEPLIBS%) 63880eb1301bSmrg alldeplibs=yes 6389c27c18e8Smrg continue 6390c27c18e8Smrg ;; 6391c27c18e8Smrg esac # case $deplib 6392c27c18e8Smrg 63930eb1301bSmrg if test "$found" = yes || test -f "$lib"; then : 63940eb1301bSmrg else 63950eb1301bSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 63960eb1301bSmrg fi 6397c27c18e8Smrg 6398c27c18e8Smrg # Check to see that this really is a libtool archive. 6399c27c18e8Smrg func_lalib_unsafe_p "$lib" \ 64000eb1301bSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6401c27c18e8Smrg 6402c27c18e8Smrg func_dirname "$lib" "" "." 64030eb1301bSmrg ladir="$func_dirname_result" 6404c27c18e8Smrg 6405c27c18e8Smrg dlname= 6406c27c18e8Smrg dlopen= 6407c27c18e8Smrg dlpreopen= 6408c27c18e8Smrg libdir= 6409c27c18e8Smrg library_names= 6410c27c18e8Smrg old_library= 6411c27c18e8Smrg inherited_linker_flags= 6412c27c18e8Smrg # If the library was installed with an old release of libtool, 6413c27c18e8Smrg # it will not redefine variables installed, or shouldnotlink 6414c27c18e8Smrg installed=yes 6415c27c18e8Smrg shouldnotlink=no 6416c27c18e8Smrg avoidtemprpath= 6417c27c18e8Smrg 6418c27c18e8Smrg 6419c27c18e8Smrg # Read the .la file 6420c27c18e8Smrg func_source "$lib" 6421c27c18e8Smrg 6422c27c18e8Smrg # Convert "-framework foo" to "foo.ltframework" 6423c27c18e8Smrg if test -n "$inherited_linker_flags"; then 642437eb1ca1Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6425c27c18e8Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6426c27c18e8Smrg case " $new_inherited_linker_flags " in 6427c27c18e8Smrg *" $tmp_inherited_linker_flag "*) ;; 6428b789ec8aSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6429c27c18e8Smrg esac 6430c27c18e8Smrg done 6431c27c18e8Smrg fi 643237eb1ca1Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 64330eb1301bSmrg if test "$linkmode,$pass" = "lib,link" || 64340eb1301bSmrg test "$linkmode,$pass" = "prog,scan" || 64350eb1301bSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6436b789ec8aSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 6437b789ec8aSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6438c27c18e8Smrg fi 6439c27c18e8Smrg 64400eb1301bSmrg if test "$pass" = conv; then 6441c27c18e8Smrg # Only check for convenience libraries 6442c27c18e8Smrg deplibs="$lib $deplibs" 6443c27c18e8Smrg if test -z "$libdir"; then 6444c27c18e8Smrg if test -z "$old_library"; then 64450eb1301bSmrg func_fatal_error "cannot find name of link library for \`$lib'" 6446c27c18e8Smrg fi 6447c27c18e8Smrg # It is a libtool convenience library, so add in its objects. 6448b789ec8aSmrg func_append convenience " $ladir/$objdir/$old_library" 6449b789ec8aSmrg func_append old_convenience " $ladir/$objdir/$old_library" 64500eb1301bSmrg tmp_libs= 64510eb1301bSmrg for deplib in $dependency_libs; do 64520eb1301bSmrg deplibs="$deplib $deplibs" 64530eb1301bSmrg if $opt_preserve_dup_deps ; then 64540eb1301bSmrg case "$tmp_libs " in 64550eb1301bSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 64560eb1301bSmrg esac 64570eb1301bSmrg fi 64580eb1301bSmrg func_append tmp_libs " $deplib" 64590eb1301bSmrg done 64600eb1301bSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 64610eb1301bSmrg func_fatal_error "\`$lib' is not a convenience library" 6462c27c18e8Smrg fi 6463c27c18e8Smrg continue 6464c27c18e8Smrg fi # $pass = conv 6465c27c18e8Smrg 6466c27c18e8Smrg 6467c27c18e8Smrg # Get the name of the library we link against. 6468c27c18e8Smrg linklib= 6469b789ec8aSmrg if test -n "$old_library" && 64700eb1301bSmrg { test "$prefer_static_libs" = yes || 64710eb1301bSmrg test "$prefer_static_libs,$installed" = "built,no"; }; then 6472b789ec8aSmrg linklib=$old_library 6473b789ec8aSmrg else 6474b789ec8aSmrg for l in $old_library $library_names; do 64750eb1301bSmrg linklib="$l" 6476b789ec8aSmrg done 6477b789ec8aSmrg fi 6478c27c18e8Smrg if test -z "$linklib"; then 64790eb1301bSmrg func_fatal_error "cannot find name of link library for \`$lib'" 6480c27c18e8Smrg fi 6481c27c18e8Smrg 6482c27c18e8Smrg # This library was specified with -dlopen. 64830eb1301bSmrg if test "$pass" = dlopen; then 64840eb1301bSmrg if test -z "$libdir"; then 64850eb1301bSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 64860eb1301bSmrg fi 6487c27c18e8Smrg if test -z "$dlname" || 64880eb1301bSmrg test "$dlopen_support" != yes || 64890eb1301bSmrg test "$build_libtool_libs" = no; then 6490c27c18e8Smrg # If there is no dlname, no dlopen support or we're linking 6491c27c18e8Smrg # statically, we need to preload. We also need to preload any 6492c27c18e8Smrg # dependent libraries so libltdl's deplib preloader doesn't 6493c27c18e8Smrg # bomb out in the load deplibs phase. 6494b789ec8aSmrg func_append dlprefiles " $lib $dependency_libs" 6495c27c18e8Smrg else 6496b789ec8aSmrg func_append newdlfiles " $lib" 6497c27c18e8Smrg fi 6498c27c18e8Smrg continue 6499c27c18e8Smrg fi # $pass = dlopen 6500c27c18e8Smrg 6501c27c18e8Smrg # We need an absolute path. 6502c27c18e8Smrg case $ladir in 65030eb1301bSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6504c27c18e8Smrg *) 6505c27c18e8Smrg abs_ladir=`cd "$ladir" && pwd` 6506c27c18e8Smrg if test -z "$abs_ladir"; then 65070eb1301bSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 6508c27c18e8Smrg func_warning "passing it literally to the linker, although it might fail" 65090eb1301bSmrg abs_ladir="$ladir" 6510c27c18e8Smrg fi 6511c27c18e8Smrg ;; 6512c27c18e8Smrg esac 6513c27c18e8Smrg func_basename "$lib" 65140eb1301bSmrg laname="$func_basename_result" 6515c27c18e8Smrg 6516c27c18e8Smrg # Find the relevant object directory and library name. 65170eb1301bSmrg if test "X$installed" = Xyes; then 6518b789ec8aSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 65190eb1301bSmrg func_warning "library \`$lib' was moved." 65200eb1301bSmrg dir="$ladir" 65210eb1301bSmrg absdir="$abs_ladir" 65220eb1301bSmrg libdir="$abs_ladir" 6523c27c18e8Smrg else 65240eb1301bSmrg dir="$lt_sysroot$libdir" 65250eb1301bSmrg absdir="$lt_sysroot$libdir" 6526c27c18e8Smrg fi 65270eb1301bSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6528c27c18e8Smrg else 6529c27c18e8Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 65300eb1301bSmrg dir="$ladir" 65310eb1301bSmrg absdir="$abs_ladir" 6532c27c18e8Smrg # Remove this search path later 6533b789ec8aSmrg func_append notinst_path " $abs_ladir" 6534c27c18e8Smrg else 65350eb1301bSmrg dir="$ladir/$objdir" 65360eb1301bSmrg absdir="$abs_ladir/$objdir" 6537c27c18e8Smrg # Remove this search path later 6538b789ec8aSmrg func_append notinst_path " $abs_ladir" 6539c27c18e8Smrg fi 6540c27c18e8Smrg fi # $installed = yes 6541c27c18e8Smrg func_stripname 'lib' '.la' "$laname" 6542c27c18e8Smrg name=$func_stripname_result 6543c27c18e8Smrg 6544c27c18e8Smrg # This library was specified with -dlpreopen. 65450eb1301bSmrg if test "$pass" = dlpreopen; then 65460eb1301bSmrg if test -z "$libdir" && test "$linkmode" = prog; then 65470eb1301bSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6548c27c18e8Smrg fi 65490eb1301bSmrg case "$host" in 6550b789ec8aSmrg # special handling for platforms with PE-DLLs. 6551b789ec8aSmrg *cygwin* | *mingw* | *cegcc* ) 6552b789ec8aSmrg # Linker will automatically link against shared library if both 6553b789ec8aSmrg # static and shared are present. Therefore, ensure we extract 6554b789ec8aSmrg # symbols from the import library if a shared library is present 6555b789ec8aSmrg # (otherwise, the dlopen module name will be incorrect). We do 6556b789ec8aSmrg # this by putting the import library name into $newdlprefiles. 6557b789ec8aSmrg # We recover the dlopen module name by 'saving' the la file 6558b789ec8aSmrg # name in a special purpose variable, and (later) extracting the 6559b789ec8aSmrg # dlname from the la file. 6560b789ec8aSmrg if test -n "$dlname"; then 6561b789ec8aSmrg func_tr_sh "$dir/$linklib" 6562b789ec8aSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6563b789ec8aSmrg func_append newdlprefiles " $dir/$linklib" 6564b789ec8aSmrg else 6565b789ec8aSmrg func_append newdlprefiles " $dir/$old_library" 6566b789ec8aSmrg # Keep a list of preopened convenience libraries to check 6567b789ec8aSmrg # that they are being used correctly in the link pass. 6568b789ec8aSmrg test -z "$libdir" && \ 6569b789ec8aSmrg func_append dlpreconveniencelibs " $dir/$old_library" 6570b789ec8aSmrg fi 6571b789ec8aSmrg ;; 6572b789ec8aSmrg * ) 6573b789ec8aSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 6574b789ec8aSmrg # are required to link). 6575b789ec8aSmrg if test -n "$old_library"; then 6576b789ec8aSmrg func_append newdlprefiles " $dir/$old_library" 6577b789ec8aSmrg # Keep a list of preopened convenience libraries to check 6578b789ec8aSmrg # that they are being used correctly in the link pass. 6579b789ec8aSmrg test -z "$libdir" && \ 6580b789ec8aSmrg func_append dlpreconveniencelibs " $dir/$old_library" 6581b789ec8aSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 6582b789ec8aSmrg elif test -n "$dlname"; then 6583b789ec8aSmrg func_append newdlprefiles " $dir/$dlname" 6584b789ec8aSmrg else 6585b789ec8aSmrg func_append newdlprefiles " $dir/$linklib" 6586b789ec8aSmrg fi 6587b789ec8aSmrg ;; 6588b789ec8aSmrg esac 6589c27c18e8Smrg fi # $pass = dlpreopen 6590c27c18e8Smrg 6591c27c18e8Smrg if test -z "$libdir"; then 6592c27c18e8Smrg # Link the convenience library 65930eb1301bSmrg if test "$linkmode" = lib; then 6594c27c18e8Smrg deplibs="$dir/$old_library $deplibs" 65950eb1301bSmrg elif test "$linkmode,$pass" = "prog,link"; then 6596c27c18e8Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 6597c27c18e8Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6598c27c18e8Smrg else 6599c27c18e8Smrg deplibs="$lib $deplibs" # used for prog,scan pass 6600c27c18e8Smrg fi 6601c27c18e8Smrg continue 6602c27c18e8Smrg fi 6603c27c18e8Smrg 6604c27c18e8Smrg 66050eb1301bSmrg if test "$linkmode" = prog && test "$pass" != link; then 6606b789ec8aSmrg func_append newlib_search_path " $ladir" 6607c27c18e8Smrg deplibs="$lib $deplibs" 6608c27c18e8Smrg 66090eb1301bSmrg linkalldeplibs=no 66100eb1301bSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 66110eb1301bSmrg test "$build_libtool_libs" = no; then 66120eb1301bSmrg linkalldeplibs=yes 6613c27c18e8Smrg fi 6614c27c18e8Smrg 6615c27c18e8Smrg tmp_libs= 6616c27c18e8Smrg for deplib in $dependency_libs; do 6617c27c18e8Smrg case $deplib in 6618c27c18e8Smrg -L*) func_stripname '-L' '' "$deplib" 6619b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 6620b789ec8aSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6621c27c18e8Smrg ;; 6622c27c18e8Smrg esac 6623c27c18e8Smrg # Need to link against all dependency_libs? 66240eb1301bSmrg if test "$linkalldeplibs" = yes; then 6625c27c18e8Smrg deplibs="$deplib $deplibs" 6626c27c18e8Smrg else 6627c27c18e8Smrg # Need to hardcode shared library paths 6628c27c18e8Smrg # or/and link against static libraries 6629c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 6630c27c18e8Smrg fi 66310eb1301bSmrg if $opt_preserve_dup_deps ; then 6632c27c18e8Smrg case "$tmp_libs " in 6633b789ec8aSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6634c27c18e8Smrg esac 6635c27c18e8Smrg fi 6636b789ec8aSmrg func_append tmp_libs " $deplib" 6637c27c18e8Smrg done # for deplib 6638c27c18e8Smrg continue 6639c27c18e8Smrg fi # $linkmode = prog... 6640c27c18e8Smrg 66410eb1301bSmrg if test "$linkmode,$pass" = "prog,link"; then 6642c27c18e8Smrg if test -n "$library_names" && 66430eb1301bSmrg { { test "$prefer_static_libs" = no || 66440eb1301bSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6645c27c18e8Smrg test -z "$old_library"; }; then 6646c27c18e8Smrg # We need to hardcode the library path 66470eb1301bSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6648c27c18e8Smrg # Make sure the rpath contains only unique directories. 66490eb1301bSmrg case "$temp_rpath:" in 6650c27c18e8Smrg *"$absdir:"*) ;; 6651b789ec8aSmrg *) func_append temp_rpath "$absdir:" ;; 6652c27c18e8Smrg esac 6653c27c18e8Smrg fi 6654c27c18e8Smrg 6655c27c18e8Smrg # Hardcode the library path. 6656c27c18e8Smrg # Skip directories that are in the system default run-time 6657c27c18e8Smrg # search path. 6658c27c18e8Smrg case " $sys_lib_dlsearch_path " in 6659c27c18e8Smrg *" $absdir "*) ;; 6660c27c18e8Smrg *) 6661c27c18e8Smrg case "$compile_rpath " in 6662c27c18e8Smrg *" $absdir "*) ;; 6663b789ec8aSmrg *) func_append compile_rpath " $absdir" ;; 6664c27c18e8Smrg esac 6665c27c18e8Smrg ;; 6666c27c18e8Smrg esac 6667c27c18e8Smrg case " $sys_lib_dlsearch_path " in 6668c27c18e8Smrg *" $libdir "*) ;; 6669c27c18e8Smrg *) 6670c27c18e8Smrg case "$finalize_rpath " in 6671c27c18e8Smrg *" $libdir "*) ;; 6672b789ec8aSmrg *) func_append finalize_rpath " $libdir" ;; 6673c27c18e8Smrg esac 6674c27c18e8Smrg ;; 6675c27c18e8Smrg esac 6676c27c18e8Smrg fi # $linkmode,$pass = prog,link... 6677c27c18e8Smrg 66780eb1301bSmrg if test "$alldeplibs" = yes && 66790eb1301bSmrg { test "$deplibs_check_method" = pass_all || 66800eb1301bSmrg { test "$build_libtool_libs" = yes && 6681c27c18e8Smrg test -n "$library_names"; }; }; then 6682c27c18e8Smrg # We only need to search for static libraries 6683c27c18e8Smrg continue 6684c27c18e8Smrg fi 6685c27c18e8Smrg fi 6686c27c18e8Smrg 6687c27c18e8Smrg link_static=no # Whether the deplib will be linked statically 6688c27c18e8Smrg use_static_libs=$prefer_static_libs 66890eb1301bSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 6690c27c18e8Smrg use_static_libs=no 6691c27c18e8Smrg fi 6692c27c18e8Smrg if test -n "$library_names" && 66930eb1301bSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6694c27c18e8Smrg case $host in 66950eb1301bSmrg *cygwin* | *mingw* | *cegcc*) 6696c27c18e8Smrg # No point in relinking DLLs because paths are not encoded 6697b789ec8aSmrg func_append notinst_deplibs " $lib" 6698c27c18e8Smrg need_relink=no 6699c27c18e8Smrg ;; 6700c27c18e8Smrg *) 67010eb1301bSmrg if test "$installed" = no; then 6702b789ec8aSmrg func_append notinst_deplibs " $lib" 6703c27c18e8Smrg need_relink=yes 6704c27c18e8Smrg fi 6705c27c18e8Smrg ;; 6706c27c18e8Smrg esac 6707c27c18e8Smrg # This is a shared library 6708c27c18e8Smrg 6709c27c18e8Smrg # Warn about portability, can't link against -module's on some 6710c27c18e8Smrg # systems (darwin). Don't bleat about dlopened modules though! 67110eb1301bSmrg dlopenmodule="" 6712c27c18e8Smrg for dlpremoduletest in $dlprefiles; do 6713c27c18e8Smrg if test "X$dlpremoduletest" = "X$lib"; then 67140eb1301bSmrg dlopenmodule="$dlpremoduletest" 6715c27c18e8Smrg break 6716c27c18e8Smrg fi 6717c27c18e8Smrg done 67180eb1301bSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 671937eb1ca1Smrg echo 67200eb1301bSmrg if test "$linkmode" = prog; then 6721c27c18e8Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6722c27c18e8Smrg else 6723c27c18e8Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6724c27c18e8Smrg fi 6725c27c18e8Smrg $ECHO "*** $linklib is not portable!" 6726c27c18e8Smrg fi 67270eb1301bSmrg if test "$linkmode" = lib && 67280eb1301bSmrg test "$hardcode_into_libs" = yes; then 6729c27c18e8Smrg # Hardcode the library path. 6730c27c18e8Smrg # Skip directories that are in the system default run-time 6731c27c18e8Smrg # search path. 6732c27c18e8Smrg case " $sys_lib_dlsearch_path " in 6733c27c18e8Smrg *" $absdir "*) ;; 6734c27c18e8Smrg *) 6735c27c18e8Smrg case "$compile_rpath " in 6736c27c18e8Smrg *" $absdir "*) ;; 6737b789ec8aSmrg *) func_append compile_rpath " $absdir" ;; 6738c27c18e8Smrg esac 6739c27c18e8Smrg ;; 6740c27c18e8Smrg esac 6741c27c18e8Smrg case " $sys_lib_dlsearch_path " in 6742c27c18e8Smrg *" $libdir "*) ;; 6743c27c18e8Smrg *) 6744c27c18e8Smrg case "$finalize_rpath " in 6745c27c18e8Smrg *" $libdir "*) ;; 6746b789ec8aSmrg *) func_append finalize_rpath " $libdir" ;; 6747c27c18e8Smrg esac 6748c27c18e8Smrg ;; 6749c27c18e8Smrg esac 6750c27c18e8Smrg fi 6751c27c18e8Smrg 6752c27c18e8Smrg if test -n "$old_archive_from_expsyms_cmds"; then 6753c27c18e8Smrg # figure out the soname 6754c27c18e8Smrg set dummy $library_names 6755c27c18e8Smrg shift 67560eb1301bSmrg realname="$1" 6757c27c18e8Smrg shift 6758c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6759c27c18e8Smrg # use dlname if we got it. it's perfectly good, no? 6760c27c18e8Smrg if test -n "$dlname"; then 67610eb1301bSmrg soname="$dlname" 6762c27c18e8Smrg elif test -n "$soname_spec"; then 6763c27c18e8Smrg # bleh windows 6764c27c18e8Smrg case $host in 67650eb1301bSmrg *cygwin* | mingw* | *cegcc*) 6766c27c18e8Smrg func_arith $current - $age 6767c27c18e8Smrg major=$func_arith_result 67680eb1301bSmrg versuffix="-$major" 6769c27c18e8Smrg ;; 6770c27c18e8Smrg esac 6771c27c18e8Smrg eval soname=\"$soname_spec\" 6772c27c18e8Smrg else 67730eb1301bSmrg soname="$realname" 6774c27c18e8Smrg fi 6775c27c18e8Smrg 6776c27c18e8Smrg # Make a new name for the extract_expsyms_cmds to use 67770eb1301bSmrg soroot="$soname" 6778c27c18e8Smrg func_basename "$soroot" 67790eb1301bSmrg soname="$func_basename_result" 6780c27c18e8Smrg func_stripname 'lib' '.dll' "$soname" 6781c27c18e8Smrg newlib=libimp-$func_stripname_result.a 6782c27c18e8Smrg 6783c27c18e8Smrg # If the library has no export list, then create one now 6784c27c18e8Smrg if test -f "$output_objdir/$soname-def"; then : 6785c27c18e8Smrg else 67860eb1301bSmrg func_verbose "extracting exported symbol list from \`$soname'" 6787c27c18e8Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6788c27c18e8Smrg fi 6789c27c18e8Smrg 6790c27c18e8Smrg # Create $newlib 6791c27c18e8Smrg if test -f "$output_objdir/$newlib"; then :; else 67920eb1301bSmrg func_verbose "generating import library for \`$soname'" 6793c27c18e8Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6794c27c18e8Smrg fi 6795c27c18e8Smrg # make sure the library variables are pointing to the new library 6796c27c18e8Smrg dir=$output_objdir 6797c27c18e8Smrg linklib=$newlib 6798c27c18e8Smrg fi # test -n "$old_archive_from_expsyms_cmds" 6799c27c18e8Smrg 68000eb1301bSmrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6801c27c18e8Smrg add_shlibpath= 6802c27c18e8Smrg add_dir= 6803c27c18e8Smrg add= 6804c27c18e8Smrg lib_linked=yes 6805c27c18e8Smrg case $hardcode_action in 6806c27c18e8Smrg immediate | unsupported) 68070eb1301bSmrg if test "$hardcode_direct" = no; then 68080eb1301bSmrg add="$dir/$linklib" 6809c27c18e8Smrg case $host in 68100eb1301bSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 68110eb1301bSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6812c27c18e8Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 68130eb1301bSmrg *-*-unixware7*) add_dir="-L$dir" ;; 6814c27c18e8Smrg *-*-darwin* ) 68150eb1301bSmrg # if the lib is a (non-dlopened) module then we can not 6816c27c18e8Smrg # link against it, someone is ignoring the earlier warnings 6817c27c18e8Smrg if /usr/bin/file -L $add 2> /dev/null | 68180eb1301bSmrg $GREP ": [^:]* bundle" >/dev/null ; then 6819c27c18e8Smrg if test "X$dlopenmodule" != "X$lib"; then 6820c27c18e8Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 68210eb1301bSmrg if test -z "$old_library" ; then 682237eb1ca1Smrg echo 682337eb1ca1Smrg echo "*** And there doesn't seem to be a static archive available" 682437eb1ca1Smrg echo "*** The link will probably fail, sorry" 6825c27c18e8Smrg else 68260eb1301bSmrg add="$dir/$old_library" 6827c27c18e8Smrg fi 6828c27c18e8Smrg elif test -n "$old_library"; then 68290eb1301bSmrg add="$dir/$old_library" 6830c27c18e8Smrg fi 6831c27c18e8Smrg fi 6832c27c18e8Smrg esac 68330eb1301bSmrg elif test "$hardcode_minus_L" = no; then 6834c27c18e8Smrg case $host in 68350eb1301bSmrg *-*-sunos*) add_shlibpath="$dir" ;; 6836c27c18e8Smrg esac 68370eb1301bSmrg add_dir="-L$dir" 68380eb1301bSmrg add="-l$name" 68390eb1301bSmrg elif test "$hardcode_shlibpath_var" = no; then 68400eb1301bSmrg add_shlibpath="$dir" 68410eb1301bSmrg add="-l$name" 6842c27c18e8Smrg else 6843c27c18e8Smrg lib_linked=no 6844c27c18e8Smrg fi 6845c27c18e8Smrg ;; 6846c27c18e8Smrg relink) 68470eb1301bSmrg if test "$hardcode_direct" = yes && 68480eb1301bSmrg test "$hardcode_direct_absolute" = no; then 68490eb1301bSmrg add="$dir/$linklib" 68500eb1301bSmrg elif test "$hardcode_minus_L" = yes; then 68510eb1301bSmrg add_dir="-L$absdir" 6852c27c18e8Smrg # Try looking first in the location we're being installed to. 6853c27c18e8Smrg if test -n "$inst_prefix_dir"; then 6854c27c18e8Smrg case $libdir in 6855c27c18e8Smrg [\\/]*) 6856b789ec8aSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 6857c27c18e8Smrg ;; 6858c27c18e8Smrg esac 6859c27c18e8Smrg fi 68600eb1301bSmrg add="-l$name" 68610eb1301bSmrg elif test "$hardcode_shlibpath_var" = yes; then 68620eb1301bSmrg add_shlibpath="$dir" 68630eb1301bSmrg add="-l$name" 6864c27c18e8Smrg else 6865c27c18e8Smrg lib_linked=no 6866c27c18e8Smrg fi 6867c27c18e8Smrg ;; 6868c27c18e8Smrg *) lib_linked=no ;; 6869c27c18e8Smrg esac 6870c27c18e8Smrg 68710eb1301bSmrg if test "$lib_linked" != yes; then 6872c27c18e8Smrg func_fatal_configuration "unsupported hardcode properties" 6873c27c18e8Smrg fi 6874c27c18e8Smrg 6875c27c18e8Smrg if test -n "$add_shlibpath"; then 6876c27c18e8Smrg case :$compile_shlibpath: in 6877c27c18e8Smrg *":$add_shlibpath:"*) ;; 6878b789ec8aSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6879c27c18e8Smrg esac 6880c27c18e8Smrg fi 68810eb1301bSmrg if test "$linkmode" = prog; then 6882c27c18e8Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6883c27c18e8Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6884c27c18e8Smrg else 6885c27c18e8Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6886c27c18e8Smrg test -n "$add" && deplibs="$add $deplibs" 68870eb1301bSmrg if test "$hardcode_direct" != yes && 68880eb1301bSmrg test "$hardcode_minus_L" != yes && 68890eb1301bSmrg test "$hardcode_shlibpath_var" = yes; then 6890c27c18e8Smrg case :$finalize_shlibpath: in 6891c27c18e8Smrg *":$libdir:"*) ;; 6892b789ec8aSmrg *) func_append finalize_shlibpath "$libdir:" ;; 6893c27c18e8Smrg esac 6894c27c18e8Smrg fi 6895c27c18e8Smrg fi 6896c27c18e8Smrg fi 6897c27c18e8Smrg 68980eb1301bSmrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6899c27c18e8Smrg add_shlibpath= 6900c27c18e8Smrg add_dir= 6901c27c18e8Smrg add= 6902c27c18e8Smrg # Finalize command for both is simple: just hardcode it. 69030eb1301bSmrg if test "$hardcode_direct" = yes && 69040eb1301bSmrg test "$hardcode_direct_absolute" = no; then 69050eb1301bSmrg add="$libdir/$linklib" 69060eb1301bSmrg elif test "$hardcode_minus_L" = yes; then 69070eb1301bSmrg add_dir="-L$libdir" 69080eb1301bSmrg add="-l$name" 69090eb1301bSmrg elif test "$hardcode_shlibpath_var" = yes; then 6910c27c18e8Smrg case :$finalize_shlibpath: in 6911c27c18e8Smrg *":$libdir:"*) ;; 6912b789ec8aSmrg *) func_append finalize_shlibpath "$libdir:" ;; 6913c27c18e8Smrg esac 69140eb1301bSmrg add="-l$name" 69150eb1301bSmrg elif test "$hardcode_automatic" = yes; then 6916c27c18e8Smrg if test -n "$inst_prefix_dir" && 69170eb1301bSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 69180eb1301bSmrg add="$inst_prefix_dir$libdir/$linklib" 6919c27c18e8Smrg else 69200eb1301bSmrg add="$libdir/$linklib" 6921c27c18e8Smrg fi 6922c27c18e8Smrg else 6923c27c18e8Smrg # We cannot seem to hardcode it, guess we'll fake it. 69240eb1301bSmrg add_dir="-L$libdir" 6925c27c18e8Smrg # Try looking first in the location we're being installed to. 6926c27c18e8Smrg if test -n "$inst_prefix_dir"; then 6927c27c18e8Smrg case $libdir in 6928c27c18e8Smrg [\\/]*) 6929b789ec8aSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 6930c27c18e8Smrg ;; 6931c27c18e8Smrg esac 6932c27c18e8Smrg fi 69330eb1301bSmrg add="-l$name" 6934c27c18e8Smrg fi 6935c27c18e8Smrg 69360eb1301bSmrg if test "$linkmode" = prog; then 6937c27c18e8Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6938c27c18e8Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6939c27c18e8Smrg else 6940c27c18e8Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6941c27c18e8Smrg test -n "$add" && deplibs="$add $deplibs" 6942c27c18e8Smrg fi 6943c27c18e8Smrg fi 69440eb1301bSmrg elif test "$linkmode" = prog; then 6945c27c18e8Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6946c27c18e8Smrg # is not unsupported. This is valid on all known static and 6947c27c18e8Smrg # shared platforms. 69480eb1301bSmrg if test "$hardcode_direct" != unsupported; then 69490eb1301bSmrg test -n "$old_library" && linklib="$old_library" 6950c27c18e8Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 6951c27c18e8Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6952c27c18e8Smrg else 6953c27c18e8Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6954c27c18e8Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6955c27c18e8Smrg fi 69560eb1301bSmrg elif test "$build_libtool_libs" = yes; then 6957c27c18e8Smrg # Not a shared library 69580eb1301bSmrg if test "$deplibs_check_method" != pass_all; then 6959c27c18e8Smrg # We're trying link a shared library against a static one 6960c27c18e8Smrg # but the system doesn't support it. 6961c27c18e8Smrg 6962c27c18e8Smrg # Just print a warning and add the library to dependency_libs so 6963c27c18e8Smrg # that the program can be linked against the static library. 696437eb1ca1Smrg echo 69650eb1301bSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 696637eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 696737eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 696837eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have." 69690eb1301bSmrg if test "$module" = yes; then 697037eb1ca1Smrg echo "*** But as you try to build a module library, libtool will still create " 697137eb1ca1Smrg echo "*** a static module, that should work as long as the dlopening application" 697237eb1ca1Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6973c27c18e8Smrg if test -z "$global_symbol_pipe"; then 697437eb1ca1Smrg echo 697537eb1ca1Smrg echo "*** However, this would only work if libtool was able to extract symbol" 69760eb1301bSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 697737eb1ca1Smrg echo "*** not find such a program. So, this module is probably useless." 69780eb1301bSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6979c27c18e8Smrg fi 69800eb1301bSmrg if test "$build_old_libs" = no; then 6981c27c18e8Smrg build_libtool_libs=module 6982c27c18e8Smrg build_old_libs=yes 6983c27c18e8Smrg else 6984c27c18e8Smrg build_libtool_libs=no 6985c27c18e8Smrg fi 6986c27c18e8Smrg fi 6987c27c18e8Smrg else 6988c27c18e8Smrg deplibs="$dir/$old_library $deplibs" 6989c27c18e8Smrg link_static=yes 6990c27c18e8Smrg fi 6991c27c18e8Smrg fi # link shared/static library? 6992c27c18e8Smrg 69930eb1301bSmrg if test "$linkmode" = lib; then 6994c27c18e8Smrg if test -n "$dependency_libs" && 69950eb1301bSmrg { test "$hardcode_into_libs" != yes || 69960eb1301bSmrg test "$build_old_libs" = yes || 69970eb1301bSmrg test "$link_static" = yes; }; then 6998c27c18e8Smrg # Extract -R from dependency_libs 6999c27c18e8Smrg temp_deplibs= 7000c27c18e8Smrg for libdir in $dependency_libs; do 7001c27c18e8Smrg case $libdir in 7002c27c18e8Smrg -R*) func_stripname '-R' '' "$libdir" 7003c27c18e8Smrg temp_xrpath=$func_stripname_result 7004c27c18e8Smrg case " $xrpath " in 7005c27c18e8Smrg *" $temp_xrpath "*) ;; 7006b789ec8aSmrg *) func_append xrpath " $temp_xrpath";; 7007c27c18e8Smrg esac;; 7008b789ec8aSmrg *) func_append temp_deplibs " $libdir";; 7009c27c18e8Smrg esac 7010c27c18e8Smrg done 70110eb1301bSmrg dependency_libs="$temp_deplibs" 7012c27c18e8Smrg fi 7013c27c18e8Smrg 7014b789ec8aSmrg func_append newlib_search_path " $absdir" 7015c27c18e8Smrg # Link against this library 70160eb1301bSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7017c27c18e8Smrg # ... and its dependency_libs 7018c27c18e8Smrg tmp_libs= 7019c27c18e8Smrg for deplib in $dependency_libs; do 7020c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 7021b789ec8aSmrg case $deplib in 7022b789ec8aSmrg -L*) func_stripname '-L' '' "$deplib" 7023b789ec8aSmrg func_resolve_sysroot "$func_stripname_result";; 7024b789ec8aSmrg *) func_resolve_sysroot "$deplib" ;; 7025b789ec8aSmrg esac 70260eb1301bSmrg if $opt_preserve_dup_deps ; then 7027c27c18e8Smrg case "$tmp_libs " in 7028b789ec8aSmrg *" $func_resolve_sysroot_result "*) 7029b789ec8aSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7030c27c18e8Smrg esac 7031c27c18e8Smrg fi 7032b789ec8aSmrg func_append tmp_libs " $func_resolve_sysroot_result" 7033c27c18e8Smrg done 7034c27c18e8Smrg 70350eb1301bSmrg if test "$link_all_deplibs" != no; then 7036c27c18e8Smrg # Add the search paths of all dependency libraries 7037c27c18e8Smrg for deplib in $dependency_libs; do 703837eb1ca1Smrg path= 7039c27c18e8Smrg case $deplib in 70400eb1301bSmrg -L*) path="$deplib" ;; 7041c27c18e8Smrg *.la) 7042b789ec8aSmrg func_resolve_sysroot "$deplib" 7043b789ec8aSmrg deplib=$func_resolve_sysroot_result 7044c27c18e8Smrg func_dirname "$deplib" "" "." 7045b789ec8aSmrg dir=$func_dirname_result 7046c27c18e8Smrg # We need an absolute path. 7047c27c18e8Smrg case $dir in 70480eb1301bSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7049c27c18e8Smrg *) 7050c27c18e8Smrg absdir=`cd "$dir" && pwd` 7051c27c18e8Smrg if test -z "$absdir"; then 70520eb1301bSmrg func_warning "cannot determine absolute directory name of \`$dir'" 70530eb1301bSmrg absdir="$dir" 7054c27c18e8Smrg fi 7055c27c18e8Smrg ;; 7056c27c18e8Smrg esac 7057c27c18e8Smrg if $GREP "^installed=no" $deplib > /dev/null; then 7058c27c18e8Smrg case $host in 7059c27c18e8Smrg *-*-darwin*) 7060c27c18e8Smrg depdepl= 70610eb1301bSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 70620eb1301bSmrg if test -n "$deplibrary_names" ; then 70630eb1301bSmrg for tmp in $deplibrary_names ; do 7064c27c18e8Smrg depdepl=$tmp 7065c27c18e8Smrg done 70660eb1301bSmrg if test -f "$absdir/$objdir/$depdepl" ; then 70670eb1301bSmrg depdepl="$absdir/$objdir/$depdepl" 70680eb1301bSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7069c27c18e8Smrg if test -z "$darwin_install_name"; then 70700eb1301bSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7071c27c18e8Smrg fi 70720eb1301bSmrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 70730eb1301bSmrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7074c27c18e8Smrg path= 7075c27c18e8Smrg fi 7076c27c18e8Smrg fi 7077c27c18e8Smrg ;; 7078c27c18e8Smrg *) 70790eb1301bSmrg path="-L$absdir/$objdir" 7080c27c18e8Smrg ;; 7081c27c18e8Smrg esac 7082c27c18e8Smrg else 70830eb1301bSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7084c27c18e8Smrg test -z "$libdir" && \ 70850eb1301bSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7086c27c18e8Smrg test "$absdir" != "$libdir" && \ 70870eb1301bSmrg func_warning "\`$deplib' seems to be moved" 7088c27c18e8Smrg 70890eb1301bSmrg path="-L$absdir" 7090c27c18e8Smrg fi 7091c27c18e8Smrg ;; 7092c27c18e8Smrg esac 7093c27c18e8Smrg case " $deplibs " in 7094c27c18e8Smrg *" $path "*) ;; 7095c27c18e8Smrg *) deplibs="$path $deplibs" ;; 7096c27c18e8Smrg esac 7097c27c18e8Smrg done 7098c27c18e8Smrg fi # link_all_deplibs != no 7099c27c18e8Smrg fi # linkmode = lib 7100c27c18e8Smrg done # for deplib in $libs 71010eb1301bSmrg if test "$pass" = link; then 71020eb1301bSmrg if test "$linkmode" = "prog"; then 7103c27c18e8Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7104c27c18e8Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7105c27c18e8Smrg else 710637eb1ca1Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7107c27c18e8Smrg fi 7108c27c18e8Smrg fi 71090eb1301bSmrg dependency_libs="$newdependency_libs" 71100eb1301bSmrg if test "$pass" = dlpreopen; then 7111c27c18e8Smrg # Link the dlpreopened libraries before other libraries 7112c27c18e8Smrg for deplib in $save_deplibs; do 7113c27c18e8Smrg deplibs="$deplib $deplibs" 7114c27c18e8Smrg done 7115c27c18e8Smrg fi 71160eb1301bSmrg if test "$pass" != dlopen; then 71170eb1301bSmrg if test "$pass" != conv; then 7118c27c18e8Smrg # Make sure lib_search_path contains only unique directories. 7119c27c18e8Smrg lib_search_path= 7120c27c18e8Smrg for dir in $newlib_search_path; do 7121c27c18e8Smrg case "$lib_search_path " in 7122c27c18e8Smrg *" $dir "*) ;; 7123b789ec8aSmrg *) func_append lib_search_path " $dir" ;; 7124c27c18e8Smrg esac 7125c27c18e8Smrg done 7126c27c18e8Smrg newlib_search_path= 71270eb1301bSmrg fi 7128c27c18e8Smrg 71290eb1301bSmrg if test "$linkmode,$pass" != "prog,link"; then 71300eb1301bSmrg vars="deplibs" 713144584a44Smrg else 71320eb1301bSmrg vars="compile_deplibs finalize_deplibs" 7133c27c18e8Smrg fi 7134c27c18e8Smrg for var in $vars dependency_libs; do 7135c27c18e8Smrg # Add libraries to $var in reverse order 7136c27c18e8Smrg eval tmp_libs=\"\$$var\" 7137c27c18e8Smrg new_libs= 7138c27c18e8Smrg for deplib in $tmp_libs; do 7139c27c18e8Smrg # FIXME: Pedantically, this is the right thing to do, so 7140c27c18e8Smrg # that some nasty dependency loop isn't accidentally 7141c27c18e8Smrg # broken: 7142c27c18e8Smrg #new_libs="$deplib $new_libs" 7143c27c18e8Smrg # Pragmatically, this seems to cause very few problems in 7144c27c18e8Smrg # practice: 7145c27c18e8Smrg case $deplib in 7146c27c18e8Smrg -L*) new_libs="$deplib $new_libs" ;; 7147c27c18e8Smrg -R*) ;; 7148c27c18e8Smrg *) 7149c27c18e8Smrg # And here is the reason: when a library appears more 7150c27c18e8Smrg # than once as an explicit dependence of a library, or 7151c27c18e8Smrg # is implicitly linked in more than once by the 7152c27c18e8Smrg # compiler, it is considered special, and multiple 7153c27c18e8Smrg # occurrences thereof are not removed. Compare this 7154c27c18e8Smrg # with having the same library being listed as a 7155c27c18e8Smrg # dependency of multiple other libraries: in this case, 7156c27c18e8Smrg # we know (pedantically, we assume) the library does not 7157c27c18e8Smrg # need to be listed more than once, so we keep only the 7158c27c18e8Smrg # last copy. This is not always right, but it is rare 7159c27c18e8Smrg # enough that we require users that really mean to play 7160c27c18e8Smrg # such unportable linking tricks to link the library 7161c27c18e8Smrg # using -Wl,-lname, so that libtool does not consider it 7162c27c18e8Smrg # for duplicate removal. 7163c27c18e8Smrg case " $specialdeplibs " in 7164c27c18e8Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7165c27c18e8Smrg *) 7166c27c18e8Smrg case " $new_libs " in 7167c27c18e8Smrg *" $deplib "*) ;; 7168c27c18e8Smrg *) new_libs="$deplib $new_libs" ;; 7169c27c18e8Smrg esac 7170c27c18e8Smrg ;; 7171c27c18e8Smrg esac 7172c27c18e8Smrg ;; 7173c27c18e8Smrg esac 7174c27c18e8Smrg done 7175c27c18e8Smrg tmp_libs= 7176c27c18e8Smrg for deplib in $new_libs; do 7177c27c18e8Smrg case $deplib in 7178c27c18e8Smrg -L*) 7179c27c18e8Smrg case " $tmp_libs " in 7180c27c18e8Smrg *" $deplib "*) ;; 7181b789ec8aSmrg *) func_append tmp_libs " $deplib" ;; 7182c27c18e8Smrg esac 7183c27c18e8Smrg ;; 7184b789ec8aSmrg *) func_append tmp_libs " $deplib" ;; 7185c27c18e8Smrg esac 7186c27c18e8Smrg done 7187c27c18e8Smrg eval $var=\"$tmp_libs\" 7188c27c18e8Smrg done # for var 7189c27c18e8Smrg fi 7190c27c18e8Smrg # Last step: remove runtime libs from dependency_libs 7191c27c18e8Smrg # (they stay in deplibs) 7192c27c18e8Smrg tmp_libs= 71930eb1301bSmrg for i in $dependency_libs ; do 7194c27c18e8Smrg case " $predeps $postdeps $compiler_lib_search_path " in 7195c27c18e8Smrg *" $i "*) 71960eb1301bSmrg i="" 7197c27c18e8Smrg ;; 7198c27c18e8Smrg esac 71990eb1301bSmrg if test -n "$i" ; then 7200b789ec8aSmrg func_append tmp_libs " $i" 7201c27c18e8Smrg fi 7202c27c18e8Smrg done 7203c27c18e8Smrg dependency_libs=$tmp_libs 7204c27c18e8Smrg done # for pass 72050eb1301bSmrg if test "$linkmode" = prog; then 72060eb1301bSmrg dlfiles="$newdlfiles" 7207c27c18e8Smrg fi 72080eb1301bSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 72090eb1301bSmrg dlprefiles="$newdlprefiles" 7210c27c18e8Smrg fi 7211c27c18e8Smrg 7212c27c18e8Smrg case $linkmode in 7213c27c18e8Smrg oldlib) 72140eb1301bSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 72150eb1301bSmrg func_warning "\`-dlopen' is ignored for archives" 7216c27c18e8Smrg fi 7217c27c18e8Smrg 7218c27c18e8Smrg case " $deplibs" in 7219c27c18e8Smrg *\ -l* | *\ -L*) 72200eb1301bSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7221c27c18e8Smrg esac 7222c27c18e8Smrg 7223c27c18e8Smrg test -n "$rpath" && \ 72240eb1301bSmrg func_warning "\`-rpath' is ignored for archives" 7225c27c18e8Smrg 7226c27c18e8Smrg test -n "$xrpath" && \ 72270eb1301bSmrg func_warning "\`-R' is ignored for archives" 7228c27c18e8Smrg 7229c27c18e8Smrg test -n "$vinfo" && \ 72300eb1301bSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 7231c27c18e8Smrg 7232c27c18e8Smrg test -n "$release" && \ 72330eb1301bSmrg func_warning "\`-release' is ignored for archives" 7234c27c18e8Smrg 7235c27c18e8Smrg test -n "$export_symbols$export_symbols_regex" && \ 72360eb1301bSmrg func_warning "\`-export-symbols' is ignored for archives" 7237c27c18e8Smrg 7238c27c18e8Smrg # Now set the variables for building old libraries. 7239c27c18e8Smrg build_libtool_libs=no 72400eb1301bSmrg oldlibs="$output" 7241b789ec8aSmrg func_append objs "$old_deplibs" 7242c27c18e8Smrg ;; 7243c27c18e8Smrg 7244c27c18e8Smrg lib) 72450eb1301bSmrg # Make sure we only generate libraries of the form `libNAME.la'. 7246c27c18e8Smrg case $outputname in 7247c27c18e8Smrg lib*) 7248c27c18e8Smrg func_stripname 'lib' '.la' "$outputname" 7249c27c18e8Smrg name=$func_stripname_result 7250c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 7251c27c18e8Smrg eval libname=\"$libname_spec\" 7252c27c18e8Smrg ;; 7253c27c18e8Smrg *) 72540eb1301bSmrg test "$module" = no && \ 72550eb1301bSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7256c27c18e8Smrg 72570eb1301bSmrg if test "$need_lib_prefix" != no; then 7258c27c18e8Smrg # Add the "lib" prefix for modules if required 7259c27c18e8Smrg func_stripname '' '.la' "$outputname" 7260c27c18e8Smrg name=$func_stripname_result 7261c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 7262c27c18e8Smrg eval libname=\"$libname_spec\" 7263c27c18e8Smrg else 7264c27c18e8Smrg func_stripname '' '.la' "$outputname" 7265c27c18e8Smrg libname=$func_stripname_result 7266c27c18e8Smrg fi 7267c27c18e8Smrg ;; 7268c27c18e8Smrg esac 7269c27c18e8Smrg 7270c27c18e8Smrg if test -n "$objs"; then 72710eb1301bSmrg if test "$deplibs_check_method" != pass_all; then 72720eb1301bSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7273c27c18e8Smrg else 727437eb1ca1Smrg echo 7275c27c18e8Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7276c27c18e8Smrg $ECHO "*** objects $objs is not portable!" 7277b789ec8aSmrg func_append libobjs " $objs" 7278c27c18e8Smrg fi 7279c27c18e8Smrg fi 7280c27c18e8Smrg 72810eb1301bSmrg test "$dlself" != no && \ 72820eb1301bSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7283c27c18e8Smrg 7284c27c18e8Smrg set dummy $rpath 7285c27c18e8Smrg shift 72860eb1301bSmrg test "$#" -gt 1 && \ 72870eb1301bSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7288c27c18e8Smrg 72890eb1301bSmrg install_libdir="$1" 7290c27c18e8Smrg 7291c27c18e8Smrg oldlibs= 7292c27c18e8Smrg if test -z "$rpath"; then 72930eb1301bSmrg if test "$build_libtool_libs" = yes; then 7294c27c18e8Smrg # Building a libtool convenience library. 72950eb1301bSmrg # Some compilers have problems with a `.al' extension so 7296c27c18e8Smrg # convenience libraries should have the same extension an 7297c27c18e8Smrg # archive normally would. 7298c27c18e8Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7299c27c18e8Smrg build_libtool_libs=convenience 7300c27c18e8Smrg build_old_libs=yes 7301c27c18e8Smrg fi 7302c27c18e8Smrg 7303c27c18e8Smrg test -n "$vinfo" && \ 73040eb1301bSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7305c27c18e8Smrg 7306c27c18e8Smrg test -n "$release" && \ 73070eb1301bSmrg func_warning "\`-release' is ignored for convenience libraries" 7308c27c18e8Smrg else 7309c27c18e8Smrg 7310c27c18e8Smrg # Parse the version information argument. 73110eb1301bSmrg save_ifs="$IFS"; IFS=':' 7312c27c18e8Smrg set dummy $vinfo 0 0 0 7313c27c18e8Smrg shift 73140eb1301bSmrg IFS="$save_ifs" 7315c27c18e8Smrg 7316c27c18e8Smrg test -n "$7" && \ 73170eb1301bSmrg func_fatal_help "too many parameters to \`-version-info'" 7318c27c18e8Smrg 7319c27c18e8Smrg # convert absolute version numbers to libtool ages 7320c27c18e8Smrg # this retains compatibility with .la files and attempts 7321c27c18e8Smrg # to make the code below a bit more comprehensible 7322c27c18e8Smrg 7323c27c18e8Smrg case $vinfo_number in 7324c27c18e8Smrg yes) 73250eb1301bSmrg number_major="$1" 73260eb1301bSmrg number_minor="$2" 73270eb1301bSmrg number_revision="$3" 7328c27c18e8Smrg # 7329c27c18e8Smrg # There are really only two kinds -- those that 7330c27c18e8Smrg # use the current revision as the major version 7331c27c18e8Smrg # and those that subtract age and use age as 7332c27c18e8Smrg # a minor version. But, then there is irix 73330eb1301bSmrg # which has an extra 1 added just for fun 7334c27c18e8Smrg # 7335c27c18e8Smrg case $version_type in 7336f1ee322dSmrg # correct linux to gnu/linux during the next big refactor 73370eb1301bSmrg darwin|linux|osf|windows|none) 7338c27c18e8Smrg func_arith $number_major + $number_minor 7339c27c18e8Smrg current=$func_arith_result 73400eb1301bSmrg age="$number_minor" 73410eb1301bSmrg revision="$number_revision" 7342c27c18e8Smrg ;; 73430eb1301bSmrg freebsd-aout|freebsd-elf|qnx|sunos) 73440eb1301bSmrg current="$number_major" 73450eb1301bSmrg revision="$number_minor" 73460eb1301bSmrg age="0" 7347c27c18e8Smrg ;; 7348c27c18e8Smrg irix|nonstopux) 7349c27c18e8Smrg func_arith $number_major + $number_minor 7350c27c18e8Smrg current=$func_arith_result 73510eb1301bSmrg age="$number_minor" 73520eb1301bSmrg revision="$number_minor" 7353c27c18e8Smrg lt_irix_increment=no 7354c27c18e8Smrg ;; 73550eb1301bSmrg *) 73560eb1301bSmrg func_fatal_configuration "$modename: unknown library version type \`$version_type'" 73570eb1301bSmrg ;; 7358c27c18e8Smrg esac 7359c27c18e8Smrg ;; 7360c27c18e8Smrg no) 73610eb1301bSmrg current="$1" 73620eb1301bSmrg revision="$2" 73630eb1301bSmrg age="$3" 7364c27c18e8Smrg ;; 7365c27c18e8Smrg esac 7366c27c18e8Smrg 7367c27c18e8Smrg # Check that each of the things are valid numbers. 7368c27c18e8Smrg case $current in 7369c27c18e8Smrg 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]) ;; 7370c27c18e8Smrg *) 73710eb1301bSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 73720eb1301bSmrg func_fatal_error "\`$vinfo' is not valid version information" 7373c27c18e8Smrg ;; 7374c27c18e8Smrg esac 7375c27c18e8Smrg 7376c27c18e8Smrg case $revision in 7377c27c18e8Smrg 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]) ;; 7378c27c18e8Smrg *) 73790eb1301bSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 73800eb1301bSmrg func_fatal_error "\`$vinfo' is not valid version information" 7381c27c18e8Smrg ;; 7382c27c18e8Smrg esac 7383c27c18e8Smrg 7384c27c18e8Smrg case $age in 7385c27c18e8Smrg 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]) ;; 7386c27c18e8Smrg *) 73870eb1301bSmrg func_error "AGE \`$age' must be a nonnegative integer" 73880eb1301bSmrg func_fatal_error "\`$vinfo' is not valid version information" 7389c27c18e8Smrg ;; 7390c27c18e8Smrg esac 7391c27c18e8Smrg 7392c27c18e8Smrg if test "$age" -gt "$current"; then 73930eb1301bSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 73940eb1301bSmrg func_fatal_error "\`$vinfo' is not valid version information" 7395c27c18e8Smrg fi 7396c27c18e8Smrg 7397c27c18e8Smrg # Calculate the version variables. 7398c27c18e8Smrg major= 7399c27c18e8Smrg versuffix= 7400c27c18e8Smrg verstring= 7401c27c18e8Smrg case $version_type in 7402c27c18e8Smrg none) ;; 7403c27c18e8Smrg 7404c27c18e8Smrg darwin) 7405c27c18e8Smrg # Like Linux, but with the current version available in 7406c27c18e8Smrg # verstring for coding it into the library header 7407c27c18e8Smrg func_arith $current - $age 7408c27c18e8Smrg major=.$func_arith_result 74090eb1301bSmrg versuffix="$major.$age.$revision" 7410c27c18e8Smrg # Darwin ld doesn't like 0 for these options... 7411c27c18e8Smrg func_arith $current + 1 7412c27c18e8Smrg minor_current=$func_arith_result 74130eb1301bSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7414c27c18e8Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7415c27c18e8Smrg ;; 7416c27c18e8Smrg 7417c27c18e8Smrg freebsd-aout) 74180eb1301bSmrg major=".$current" 74190eb1301bSmrg versuffix=".$current.$revision"; 7420c27c18e8Smrg ;; 7421c27c18e8Smrg 7422c27c18e8Smrg freebsd-elf) 74230eb1301bSmrg major=".$current" 74240eb1301bSmrg versuffix=".$current" 7425c27c18e8Smrg ;; 7426c27c18e8Smrg 7427c27c18e8Smrg irix | nonstopux) 74280eb1301bSmrg if test "X$lt_irix_increment" = "Xno"; then 7429c27c18e8Smrg func_arith $current - $age 7430c27c18e8Smrg else 7431c27c18e8Smrg func_arith $current - $age + 1 7432c27c18e8Smrg fi 7433c27c18e8Smrg major=$func_arith_result 7434c27c18e8Smrg 7435c27c18e8Smrg case $version_type in 7436c27c18e8Smrg nonstopux) verstring_prefix=nonstopux ;; 7437c27c18e8Smrg *) verstring_prefix=sgi ;; 7438c27c18e8Smrg esac 74390eb1301bSmrg verstring="$verstring_prefix$major.$revision" 7440c27c18e8Smrg 7441c27c18e8Smrg # Add in all the interfaces that we are compatible with. 7442c27c18e8Smrg loop=$revision 74430eb1301bSmrg while test "$loop" -ne 0; do 7444c27c18e8Smrg func_arith $revision - $loop 7445c27c18e8Smrg iface=$func_arith_result 7446c27c18e8Smrg func_arith $loop - 1 7447c27c18e8Smrg loop=$func_arith_result 74480eb1301bSmrg verstring="$verstring_prefix$major.$iface:$verstring" 7449c27c18e8Smrg done 7450c27c18e8Smrg 74510eb1301bSmrg # Before this point, $major must not contain `.'. 7452c27c18e8Smrg major=.$major 74530eb1301bSmrg versuffix="$major.$revision" 7454c27c18e8Smrg ;; 7455c27c18e8Smrg 7456f1ee322dSmrg linux) # correct to gnu/linux during the next big refactor 7457c27c18e8Smrg func_arith $current - $age 7458c27c18e8Smrg major=.$func_arith_result 74590eb1301bSmrg versuffix="$major.$age.$revision" 7460c27c18e8Smrg ;; 7461c27c18e8Smrg 7462c27c18e8Smrg osf) 7463c27c18e8Smrg func_arith $current - $age 7464c27c18e8Smrg major=.$func_arith_result 74650eb1301bSmrg versuffix=".$current.$age.$revision" 74660eb1301bSmrg verstring="$current.$age.$revision" 7467c27c18e8Smrg 7468c27c18e8Smrg # Add in all the interfaces that we are compatible with. 7469c27c18e8Smrg loop=$age 74700eb1301bSmrg while test "$loop" -ne 0; do 7471c27c18e8Smrg func_arith $current - $loop 7472c27c18e8Smrg iface=$func_arith_result 7473c27c18e8Smrg func_arith $loop - 1 7474c27c18e8Smrg loop=$func_arith_result 74750eb1301bSmrg verstring="$verstring:${iface}.0" 7476c27c18e8Smrg done 7477c27c18e8Smrg 7478c27c18e8Smrg # Make executables depend on our current version. 74790eb1301bSmrg func_append verstring ":${current}.0" 7480c27c18e8Smrg ;; 7481c27c18e8Smrg 7482c27c18e8Smrg qnx) 74830eb1301bSmrg major=".$current" 74840eb1301bSmrg versuffix=".$current" 7485c27c18e8Smrg ;; 7486c27c18e8Smrg 7487c27c18e8Smrg sunos) 74880eb1301bSmrg major=".$current" 74890eb1301bSmrg versuffix=".$current.$revision" 7490c27c18e8Smrg ;; 7491c27c18e8Smrg 7492c27c18e8Smrg windows) 7493c27c18e8Smrg # Use '-' rather than '.', since we only want one 74940eb1301bSmrg # extension on DOS 8.3 filesystems. 7495c27c18e8Smrg func_arith $current - $age 7496c27c18e8Smrg major=$func_arith_result 74970eb1301bSmrg versuffix="-$major" 7498c27c18e8Smrg ;; 7499c27c18e8Smrg 7500c27c18e8Smrg *) 75010eb1301bSmrg func_fatal_configuration "unknown library version type \`$version_type'" 7502c27c18e8Smrg ;; 7503c27c18e8Smrg esac 7504c27c18e8Smrg 7505c27c18e8Smrg # Clear the version info if we defaulted, and they specified a release. 7506c27c18e8Smrg if test -z "$vinfo" && test -n "$release"; then 7507c27c18e8Smrg major= 7508c27c18e8Smrg case $version_type in 7509c27c18e8Smrg darwin) 7510c27c18e8Smrg # we can't check for "0.0" in archive_cmds due to quoting 7511c27c18e8Smrg # problems, so we reset it completely 7512c27c18e8Smrg verstring= 7513c27c18e8Smrg ;; 7514c27c18e8Smrg *) 75150eb1301bSmrg verstring="0.0" 7516c27c18e8Smrg ;; 7517c27c18e8Smrg esac 75180eb1301bSmrg if test "$need_version" = no; then 7519c27c18e8Smrg versuffix= 7520c27c18e8Smrg else 75210eb1301bSmrg versuffix=".0.0" 7522c27c18e8Smrg fi 7523c27c18e8Smrg fi 7524c27c18e8Smrg 7525c27c18e8Smrg # Remove version info from name if versioning should be avoided 75260eb1301bSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 7527c27c18e8Smrg major= 7528c27c18e8Smrg versuffix= 75290eb1301bSmrg verstring="" 7530c27c18e8Smrg fi 7531c27c18e8Smrg 7532c27c18e8Smrg # Check to see if the archive will have undefined symbols. 75330eb1301bSmrg if test "$allow_undefined" = yes; then 75340eb1301bSmrg if test "$allow_undefined_flag" = unsupported; then 75350eb1301bSmrg func_warning "undefined symbols not allowed in $host shared libraries" 75360eb1301bSmrg build_libtool_libs=no 75370eb1301bSmrg build_old_libs=yes 7538c27c18e8Smrg fi 7539c27c18e8Smrg else 7540c27c18e8Smrg # Don't allow undefined symbols. 75410eb1301bSmrg allow_undefined_flag="$no_undefined_flag" 7542c27c18e8Smrg fi 7543c27c18e8Smrg 7544c27c18e8Smrg fi 7545c27c18e8Smrg 75460eb1301bSmrg func_generate_dlsyms "$libname" "$libname" "yes" 7547b789ec8aSmrg func_append libobjs " $symfileobj" 75480eb1301bSmrg test "X$libobjs" = "X " && libobjs= 7549c27c18e8Smrg 75500eb1301bSmrg if test "$opt_mode" != relink; then 7551c27c18e8Smrg # Remove our outputs, but don't remove object files since they 7552c27c18e8Smrg # may have been created when compiling PIC objects. 7553c27c18e8Smrg removelist= 7554c27c18e8Smrg tempremovelist=`$ECHO "$output_objdir/*"` 7555c27c18e8Smrg for p in $tempremovelist; do 7556c27c18e8Smrg case $p in 7557c27c18e8Smrg *.$objext | *.gcno) 7558c27c18e8Smrg ;; 75590eb1301bSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 75600eb1301bSmrg if test "X$precious_files_regex" != "X"; then 7561c27c18e8Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7562c27c18e8Smrg then 7563c27c18e8Smrg continue 7564c27c18e8Smrg fi 7565c27c18e8Smrg fi 7566b789ec8aSmrg func_append removelist " $p" 7567c27c18e8Smrg ;; 7568c27c18e8Smrg *) ;; 7569c27c18e8Smrg esac 7570c27c18e8Smrg done 7571c27c18e8Smrg test -n "$removelist" && \ 7572c27c18e8Smrg func_show_eval "${RM}r \$removelist" 7573c27c18e8Smrg fi 7574c27c18e8Smrg 7575c27c18e8Smrg # Now set the variables for building old libraries. 75760eb1301bSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7577b789ec8aSmrg func_append oldlibs " $output_objdir/$libname.$libext" 7578c27c18e8Smrg 7579c27c18e8Smrg # Transform .lo files to .o files. 75800eb1301bSmrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7581c27c18e8Smrg fi 7582c27c18e8Smrg 7583c27c18e8Smrg # Eliminate all temporary directories. 7584c27c18e8Smrg #for path in $notinst_path; do 758537eb1ca1Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 758637eb1ca1Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 758737eb1ca1Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7588c27c18e8Smrg #done 7589c27c18e8Smrg 7590c27c18e8Smrg if test -n "$xrpath"; then 7591c27c18e8Smrg # If the user specified any rpath flags, then add them. 7592c27c18e8Smrg temp_xrpath= 7593c27c18e8Smrg for libdir in $xrpath; do 7594b789ec8aSmrg func_replace_sysroot "$libdir" 7595b789ec8aSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7596c27c18e8Smrg case "$finalize_rpath " in 7597c27c18e8Smrg *" $libdir "*) ;; 7598b789ec8aSmrg *) func_append finalize_rpath " $libdir" ;; 7599c27c18e8Smrg esac 7600c27c18e8Smrg done 76010eb1301bSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7602c27c18e8Smrg dependency_libs="$temp_xrpath $dependency_libs" 7603c27c18e8Smrg fi 7604c27c18e8Smrg fi 7605c27c18e8Smrg 7606c27c18e8Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 76070eb1301bSmrg old_dlfiles="$dlfiles" 7608c27c18e8Smrg dlfiles= 7609c27c18e8Smrg for lib in $old_dlfiles; do 7610c27c18e8Smrg case " $dlprefiles $dlfiles " in 7611c27c18e8Smrg *" $lib "*) ;; 7612b789ec8aSmrg *) func_append dlfiles " $lib" ;; 7613c27c18e8Smrg esac 7614c27c18e8Smrg done 7615c27c18e8Smrg 7616c27c18e8Smrg # Make sure dlprefiles contains only unique files 76170eb1301bSmrg old_dlprefiles="$dlprefiles" 7618c27c18e8Smrg dlprefiles= 7619c27c18e8Smrg for lib in $old_dlprefiles; do 7620c27c18e8Smrg case "$dlprefiles " in 7621c27c18e8Smrg *" $lib "*) ;; 7622b789ec8aSmrg *) func_append dlprefiles " $lib" ;; 7623c27c18e8Smrg esac 7624c27c18e8Smrg done 7625c27c18e8Smrg 76260eb1301bSmrg if test "$build_libtool_libs" = yes; then 7627c27c18e8Smrg if test -n "$rpath"; then 7628c27c18e8Smrg case $host in 762937eb1ca1Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7630c27c18e8Smrg # these systems don't actually have a c library (as such)! 7631c27c18e8Smrg ;; 7632c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7633c27c18e8Smrg # Rhapsody C library is in the System framework 7634b789ec8aSmrg func_append deplibs " System.ltframework" 7635c27c18e8Smrg ;; 7636c27c18e8Smrg *-*-netbsd*) 7637c27c18e8Smrg # Don't link with libc until the a.out ld.so is fixed. 7638c27c18e8Smrg ;; 7639c27c18e8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7640c27c18e8Smrg # Do not include libc due to us having libc/libc_r. 7641c27c18e8Smrg ;; 7642c27c18e8Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7643c27c18e8Smrg # Causes problems with __ctype 7644c27c18e8Smrg ;; 7645c27c18e8Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7646c27c18e8Smrg # Compiler inserts libc in the correct place for threads to work 7647c27c18e8Smrg ;; 7648c27c18e8Smrg *) 7649c27c18e8Smrg # Add libc to deplibs on all other systems if necessary. 76500eb1301bSmrg if test "$build_libtool_need_lc" = "yes"; then 7651b789ec8aSmrg func_append deplibs " -lc" 7652c27c18e8Smrg fi 7653c27c18e8Smrg ;; 7654c27c18e8Smrg esac 7655c27c18e8Smrg fi 7656c27c18e8Smrg 7657c27c18e8Smrg # Transform deplibs into only deplibs that can be linked in shared. 7658c27c18e8Smrg name_save=$name 7659c27c18e8Smrg libname_save=$libname 7660c27c18e8Smrg release_save=$release 7661c27c18e8Smrg versuffix_save=$versuffix 7662c27c18e8Smrg major_save=$major 7663c27c18e8Smrg # I'm not sure if I'm treating the release correctly. I think 7664c27c18e8Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 7665c27c18e8Smrg # add it in twice. Is that correct? 76660eb1301bSmrg release="" 76670eb1301bSmrg versuffix="" 76680eb1301bSmrg major="" 7669c27c18e8Smrg newdeplibs= 7670c27c18e8Smrg droppeddeps=no 7671c27c18e8Smrg case $deplibs_check_method in 7672c27c18e8Smrg pass_all) 7673c27c18e8Smrg # Don't check for shared/static. Everything works. 7674c27c18e8Smrg # This might be a little naive. We might want to check 7675c27c18e8Smrg # whether the library exists or not. But this is on 7676c27c18e8Smrg # osf3 & osf4 and I'm not really sure... Just 7677c27c18e8Smrg # implementing what was already the behavior. 7678c27c18e8Smrg newdeplibs=$deplibs 7679c27c18e8Smrg ;; 7680c27c18e8Smrg test_compile) 7681c27c18e8Smrg # This code stresses the "libraries are programs" paradigm to its 7682c27c18e8Smrg # limits. Maybe even breaks it. We compile a program, linking it 7683c27c18e8Smrg # against the deplibs as a proxy for the library. Then we can check 7684c27c18e8Smrg # whether they linked in statically or dynamically with ldd. 7685c27c18e8Smrg $opt_dry_run || $RM conftest.c 7686c27c18e8Smrg cat > conftest.c <<EOF 7687c27c18e8Smrg int main() { return 0; } 7688c27c18e8SmrgEOF 7689c27c18e8Smrg $opt_dry_run || $RM conftest 7690c27c18e8Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7691c27c18e8Smrg ldd_output=`ldd conftest` 7692c27c18e8Smrg for i in $deplibs; do 7693c27c18e8Smrg case $i in 7694c27c18e8Smrg -l*) 7695c27c18e8Smrg func_stripname -l '' "$i" 7696c27c18e8Smrg name=$func_stripname_result 76970eb1301bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7698c27c18e8Smrg case " $predeps $postdeps " in 7699c27c18e8Smrg *" $i "*) 7700b789ec8aSmrg func_append newdeplibs " $i" 77010eb1301bSmrg i="" 7702c27c18e8Smrg ;; 7703c27c18e8Smrg esac 7704c27c18e8Smrg fi 77050eb1301bSmrg if test -n "$i" ; then 7706c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7707c27c18e8Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7708c27c18e8Smrg set dummy $deplib_matches; shift 7709c27c18e8Smrg deplib_match=$1 77100eb1301bSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7711b789ec8aSmrg func_append newdeplibs " $i" 7712c27c18e8Smrg else 7713c27c18e8Smrg droppeddeps=yes 771437eb1ca1Smrg echo 7715c27c18e8Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 771637eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 771737eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 771837eb1ca1Smrg echo "*** shared version of the library, which I believe you do not have" 771937eb1ca1Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 772037eb1ca1Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7721c27c18e8Smrg fi 7722c27c18e8Smrg fi 7723c27c18e8Smrg ;; 7724c27c18e8Smrg *) 7725b789ec8aSmrg func_append newdeplibs " $i" 7726c27c18e8Smrg ;; 7727c27c18e8Smrg esac 7728c27c18e8Smrg done 7729c27c18e8Smrg else 7730c27c18e8Smrg # Error occurred in the first compile. Let's try to salvage 7731c27c18e8Smrg # the situation: Compile a separate program for each library. 7732c27c18e8Smrg for i in $deplibs; do 7733c27c18e8Smrg case $i in 7734c27c18e8Smrg -l*) 7735c27c18e8Smrg func_stripname -l '' "$i" 7736c27c18e8Smrg name=$func_stripname_result 7737c27c18e8Smrg $opt_dry_run || $RM conftest 7738c27c18e8Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7739c27c18e8Smrg ldd_output=`ldd conftest` 77400eb1301bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7741c27c18e8Smrg case " $predeps $postdeps " in 7742c27c18e8Smrg *" $i "*) 7743b789ec8aSmrg func_append newdeplibs " $i" 77440eb1301bSmrg i="" 7745c27c18e8Smrg ;; 7746c27c18e8Smrg esac 7747c27c18e8Smrg fi 77480eb1301bSmrg if test -n "$i" ; then 7749c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7750c27c18e8Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7751c27c18e8Smrg set dummy $deplib_matches; shift 7752c27c18e8Smrg deplib_match=$1 77530eb1301bSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7754b789ec8aSmrg func_append newdeplibs " $i" 7755c27c18e8Smrg else 7756c27c18e8Smrg droppeddeps=yes 775737eb1ca1Smrg echo 7758c27c18e8Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 775937eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 776037eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 776137eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 776237eb1ca1Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 776337eb1ca1Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7764c27c18e8Smrg fi 7765c27c18e8Smrg fi 7766c27c18e8Smrg else 7767c27c18e8Smrg droppeddeps=yes 776837eb1ca1Smrg echo 7769c27c18e8Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 777037eb1ca1Smrg echo "*** make it link in! You will probably need to install it or some" 777137eb1ca1Smrg echo "*** library that it depends on before this library will be fully" 777237eb1ca1Smrg echo "*** functional. Installing it before continuing would be even better." 7773c27c18e8Smrg fi 7774c27c18e8Smrg ;; 7775c27c18e8Smrg *) 7776b789ec8aSmrg func_append newdeplibs " $i" 7777c27c18e8Smrg ;; 7778c27c18e8Smrg esac 7779c27c18e8Smrg done 7780c27c18e8Smrg fi 7781c27c18e8Smrg ;; 7782c27c18e8Smrg file_magic*) 7783c27c18e8Smrg set dummy $deplibs_check_method; shift 7784c27c18e8Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7785c27c18e8Smrg for a_deplib in $deplibs; do 7786c27c18e8Smrg case $a_deplib in 7787c27c18e8Smrg -l*) 7788c27c18e8Smrg func_stripname -l '' "$a_deplib" 7789c27c18e8Smrg name=$func_stripname_result 77900eb1301bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7791c27c18e8Smrg case " $predeps $postdeps " in 7792c27c18e8Smrg *" $a_deplib "*) 7793b789ec8aSmrg func_append newdeplibs " $a_deplib" 77940eb1301bSmrg a_deplib="" 7795c27c18e8Smrg ;; 7796c27c18e8Smrg esac 7797c27c18e8Smrg fi 77980eb1301bSmrg if test -n "$a_deplib" ; then 7799c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7800b789ec8aSmrg if test -n "$file_magic_glob"; then 7801b789ec8aSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7802b789ec8aSmrg else 7803b789ec8aSmrg libnameglob=$libname 7804b789ec8aSmrg fi 78050eb1301bSmrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7806c27c18e8Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78070eb1301bSmrg if test "$want_nocaseglob" = yes; then 7808b789ec8aSmrg shopt -s nocaseglob 7809b789ec8aSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7810b789ec8aSmrg $nocaseglob 7811b789ec8aSmrg else 7812b789ec8aSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7813b789ec8aSmrg fi 7814c27c18e8Smrg for potent_lib in $potential_libs; do 7815c27c18e8Smrg # Follow soft links. 7816c27c18e8Smrg if ls -lLd "$potent_lib" 2>/dev/null | 7817c27c18e8Smrg $GREP " -> " >/dev/null; then 7818c27c18e8Smrg continue 7819c27c18e8Smrg fi 7820c27c18e8Smrg # The statement above tries to avoid entering an 7821c27c18e8Smrg # endless loop below, in case of cyclic links. 7822c27c18e8Smrg # We might still enter an endless loop, since a link 7823c27c18e8Smrg # loop can be closed while we follow links, 7824c27c18e8Smrg # but so what? 78250eb1301bSmrg potlib="$potent_lib" 7826c27c18e8Smrg while test -h "$potlib" 2>/dev/null; do 78270eb1301bSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7828c27c18e8Smrg case $potliblink in 78290eb1301bSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 78300eb1301bSmrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7831c27c18e8Smrg esac 7832c27c18e8Smrg done 7833c27c18e8Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7834c27c18e8Smrg $SED -e 10q | 7835c27c18e8Smrg $EGREP "$file_magic_regex" > /dev/null; then 7836b789ec8aSmrg func_append newdeplibs " $a_deplib" 78370eb1301bSmrg a_deplib="" 7838c27c18e8Smrg break 2 7839c27c18e8Smrg fi 7840c27c18e8Smrg done 7841c27c18e8Smrg done 7842c27c18e8Smrg fi 78430eb1301bSmrg if test -n "$a_deplib" ; then 7844c27c18e8Smrg droppeddeps=yes 784537eb1ca1Smrg echo 7846c27c18e8Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 784737eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 784837eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 784937eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 785037eb1ca1Smrg echo "*** because I did check the linker path looking for a file starting" 78510eb1301bSmrg if test -z "$potlib" ; then 7852c27c18e8Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7853c27c18e8Smrg else 7854c27c18e8Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7855c27c18e8Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 7856c27c18e8Smrg fi 7857c27c18e8Smrg fi 7858c27c18e8Smrg ;; 7859c27c18e8Smrg *) 7860c27c18e8Smrg # Add a -L argument. 7861b789ec8aSmrg func_append newdeplibs " $a_deplib" 7862c27c18e8Smrg ;; 7863c27c18e8Smrg esac 7864c27c18e8Smrg done # Gone through all deplibs. 7865c27c18e8Smrg ;; 7866c27c18e8Smrg match_pattern*) 7867c27c18e8Smrg set dummy $deplibs_check_method; shift 7868c27c18e8Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7869c27c18e8Smrg for a_deplib in $deplibs; do 7870c27c18e8Smrg case $a_deplib in 7871c27c18e8Smrg -l*) 7872c27c18e8Smrg func_stripname -l '' "$a_deplib" 7873c27c18e8Smrg name=$func_stripname_result 78740eb1301bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7875c27c18e8Smrg case " $predeps $postdeps " in 7876c27c18e8Smrg *" $a_deplib "*) 7877b789ec8aSmrg func_append newdeplibs " $a_deplib" 78780eb1301bSmrg a_deplib="" 7879c27c18e8Smrg ;; 7880c27c18e8Smrg esac 7881c27c18e8Smrg fi 78820eb1301bSmrg if test -n "$a_deplib" ; then 7883c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7884c27c18e8Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7885c27c18e8Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7886c27c18e8Smrg for potent_lib in $potential_libs; do 78870eb1301bSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 788837eb1ca1Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7889c27c18e8Smrg $EGREP "$match_pattern_regex" > /dev/null; then 7890b789ec8aSmrg func_append newdeplibs " $a_deplib" 78910eb1301bSmrg a_deplib="" 7892c27c18e8Smrg break 2 7893c27c18e8Smrg fi 7894c27c18e8Smrg done 7895c27c18e8Smrg done 7896c27c18e8Smrg fi 78970eb1301bSmrg if test -n "$a_deplib" ; then 7898c27c18e8Smrg droppeddeps=yes 789937eb1ca1Smrg echo 7900c27c18e8Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 790137eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 790237eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 790337eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 790437eb1ca1Smrg echo "*** because I did check the linker path looking for a file starting" 79050eb1301bSmrg if test -z "$potlib" ; then 7906c27c18e8Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7907c27c18e8Smrg else 7908c27c18e8Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7909c27c18e8Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7910c27c18e8Smrg fi 7911c27c18e8Smrg fi 7912c27c18e8Smrg ;; 7913c27c18e8Smrg *) 7914c27c18e8Smrg # Add a -L argument. 7915b789ec8aSmrg func_append newdeplibs " $a_deplib" 7916c27c18e8Smrg ;; 7917c27c18e8Smrg esac 7918c27c18e8Smrg done # Gone through all deplibs. 7919c27c18e8Smrg ;; 7920c27c18e8Smrg none | unknown | *) 79210eb1301bSmrg newdeplibs="" 792237eb1ca1Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 79230eb1301bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 79240eb1301bSmrg for i in $predeps $postdeps ; do 7925c27c18e8Smrg # can't use Xsed below, because $i might contain '/' 79260eb1301bSmrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7927c27c18e8Smrg done 7928c27c18e8Smrg fi 792937eb1ca1Smrg case $tmp_deplibs in 793037eb1ca1Smrg *[!\ \ ]*) 793137eb1ca1Smrg echo 79320eb1301bSmrg if test "X$deplibs_check_method" = "Xnone"; then 793337eb1ca1Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7934c27c18e8Smrg else 793537eb1ca1Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 7936c27c18e8Smrg fi 793737eb1ca1Smrg echo "*** All declared inter-library dependencies are being dropped." 7938c27c18e8Smrg droppeddeps=yes 793937eb1ca1Smrg ;; 794037eb1ca1Smrg esac 7941c27c18e8Smrg ;; 7942c27c18e8Smrg esac 7943c27c18e8Smrg versuffix=$versuffix_save 7944c27c18e8Smrg major=$major_save 7945c27c18e8Smrg release=$release_save 7946c27c18e8Smrg libname=$libname_save 7947c27c18e8Smrg name=$name_save 7948c27c18e8Smrg 7949c27c18e8Smrg case $host in 7950c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7951c27c18e8Smrg # On Rhapsody replace the C library with the System framework 795237eb1ca1Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7953c27c18e8Smrg ;; 7954c27c18e8Smrg esac 7955c27c18e8Smrg 79560eb1301bSmrg if test "$droppeddeps" = yes; then 79570eb1301bSmrg if test "$module" = yes; then 795837eb1ca1Smrg echo 795937eb1ca1Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7960c27c18e8Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 796137eb1ca1Smrg echo "*** a static module, that should work as long as the dlopening" 796237eb1ca1Smrg echo "*** application is linked with the -dlopen flag." 7963c27c18e8Smrg if test -z "$global_symbol_pipe"; then 796437eb1ca1Smrg echo 796537eb1ca1Smrg echo "*** However, this would only work if libtool was able to extract symbol" 79660eb1301bSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 796737eb1ca1Smrg echo "*** not find such a program. So, this module is probably useless." 79680eb1301bSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7969c27c18e8Smrg fi 79700eb1301bSmrg if test "$build_old_libs" = no; then 79710eb1301bSmrg oldlibs="$output_objdir/$libname.$libext" 7972c27c18e8Smrg build_libtool_libs=module 7973c27c18e8Smrg build_old_libs=yes 7974c27c18e8Smrg else 7975c27c18e8Smrg build_libtool_libs=no 7976c27c18e8Smrg fi 7977c27c18e8Smrg else 797837eb1ca1Smrg echo "*** The inter-library dependencies that have been dropped here will be" 797937eb1ca1Smrg echo "*** automatically added whenever a program is linked with this library" 798037eb1ca1Smrg echo "*** or is declared to -dlopen it." 7981c27c18e8Smrg 79820eb1301bSmrg if test "$allow_undefined" = no; then 798337eb1ca1Smrg echo 798437eb1ca1Smrg echo "*** Since this library must not contain undefined symbols," 798537eb1ca1Smrg echo "*** because either the platform does not support them or" 798637eb1ca1Smrg echo "*** it was explicitly requested with -no-undefined," 798737eb1ca1Smrg echo "*** libtool will only create a static version of it." 79880eb1301bSmrg if test "$build_old_libs" = no; then 79890eb1301bSmrg oldlibs="$output_objdir/$libname.$libext" 7990c27c18e8Smrg build_libtool_libs=module 7991c27c18e8Smrg build_old_libs=yes 7992c27c18e8Smrg else 7993c27c18e8Smrg build_libtool_libs=no 7994c27c18e8Smrg fi 7995c27c18e8Smrg fi 7996c27c18e8Smrg fi 7997c27c18e8Smrg fi 7998c27c18e8Smrg # Done checking deplibs! 7999c27c18e8Smrg deplibs=$newdeplibs 8000c27c18e8Smrg fi 8001c27c18e8Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8002c27c18e8Smrg case $host in 8003c27c18e8Smrg *-*-darwin*) 800437eb1ca1Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 800537eb1ca1Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 800637eb1ca1Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8007c27c18e8Smrg ;; 8008c27c18e8Smrg esac 8009c27c18e8Smrg 8010c27c18e8Smrg # move library search paths that coincide with paths to not yet 8011c27c18e8Smrg # installed libraries to the beginning of the library search list 8012c27c18e8Smrg new_libs= 8013c27c18e8Smrg for path in $notinst_path; do 8014c27c18e8Smrg case " $new_libs " in 8015c27c18e8Smrg *" -L$path/$objdir "*) ;; 8016c27c18e8Smrg *) 8017c27c18e8Smrg case " $deplibs " in 8018c27c18e8Smrg *" -L$path/$objdir "*) 8019b789ec8aSmrg func_append new_libs " -L$path/$objdir" ;; 8020c27c18e8Smrg esac 8021c27c18e8Smrg ;; 8022c27c18e8Smrg esac 8023c27c18e8Smrg done 8024c27c18e8Smrg for deplib in $deplibs; do 8025c27c18e8Smrg case $deplib in 8026c27c18e8Smrg -L*) 8027c27c18e8Smrg case " $new_libs " in 8028c27c18e8Smrg *" $deplib "*) ;; 8029b789ec8aSmrg *) func_append new_libs " $deplib" ;; 8030c27c18e8Smrg esac 8031c27c18e8Smrg ;; 8032b789ec8aSmrg *) func_append new_libs " $deplib" ;; 8033c27c18e8Smrg esac 8034c27c18e8Smrg done 80350eb1301bSmrg deplibs="$new_libs" 8036c27c18e8Smrg 8037c27c18e8Smrg # All the library-specific variables (install_libdir is set above). 8038c27c18e8Smrg library_names= 8039c27c18e8Smrg old_library= 8040c27c18e8Smrg dlname= 8041c27c18e8Smrg 8042c27c18e8Smrg # Test again, we may have decided not to build it any more 80430eb1301bSmrg if test "$build_libtool_libs" = yes; then 80440eb1301bSmrg # Remove ${wl} instances when linking with ld. 8045f1ee322dSmrg # FIXME: should test the right _cmds variable. 8046f1ee322dSmrg case $archive_cmds in 8047f1ee322dSmrg *\$LD\ *) wl= ;; 8048f1ee322dSmrg esac 80490eb1301bSmrg if test "$hardcode_into_libs" = yes; then 8050c27c18e8Smrg # Hardcode the library paths 8051c27c18e8Smrg hardcode_libdirs= 8052c27c18e8Smrg dep_rpath= 80530eb1301bSmrg rpath="$finalize_rpath" 80540eb1301bSmrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8055c27c18e8Smrg for libdir in $rpath; do 8056c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 8057c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 8058b789ec8aSmrg func_replace_sysroot "$libdir" 8059b789ec8aSmrg libdir=$func_replace_sysroot_result 8060c27c18e8Smrg if test -z "$hardcode_libdirs"; then 80610eb1301bSmrg hardcode_libdirs="$libdir" 8062c27c18e8Smrg else 8063c27c18e8Smrg # Just accumulate the unique libdirs. 8064c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8065c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8066c27c18e8Smrg ;; 8067c27c18e8Smrg *) 8068b789ec8aSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8069c27c18e8Smrg ;; 8070c27c18e8Smrg esac 8071c27c18e8Smrg fi 8072c27c18e8Smrg else 8073c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8074b789ec8aSmrg func_append dep_rpath " $flag" 8075c27c18e8Smrg fi 8076c27c18e8Smrg elif test -n "$runpath_var"; then 8077c27c18e8Smrg case "$perm_rpath " in 8078c27c18e8Smrg *" $libdir "*) ;; 8079f1ee322dSmrg *) func_append perm_rpath " $libdir" ;; 8080c27c18e8Smrg esac 8081c27c18e8Smrg fi 8082c27c18e8Smrg done 8083c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 8084c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 8085c27c18e8Smrg test -n "$hardcode_libdirs"; then 80860eb1301bSmrg libdir="$hardcode_libdirs" 8087f1ee322dSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8088c27c18e8Smrg fi 8089c27c18e8Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8090c27c18e8Smrg # We should set the runpath_var. 8091c27c18e8Smrg rpath= 8092c27c18e8Smrg for dir in $perm_rpath; do 8093b789ec8aSmrg func_append rpath "$dir:" 8094c27c18e8Smrg done 8095c27c18e8Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8096c27c18e8Smrg fi 8097c27c18e8Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8098c27c18e8Smrg fi 8099c43cc173Smrg 81000eb1301bSmrg shlibpath="$finalize_shlibpath" 81010eb1301bSmrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8102c27c18e8Smrg if test -n "$shlibpath"; then 8103c27c18e8Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8104c27c18e8Smrg fi 8105c43cc173Smrg 8106c27c18e8Smrg # Get the real and link names of the library. 8107c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 8108c27c18e8Smrg eval library_names=\"$library_names_spec\" 8109c27c18e8Smrg set dummy $library_names 8110c27c18e8Smrg shift 81110eb1301bSmrg realname="$1" 8112c27c18e8Smrg shift 8113c43cc173Smrg 8114c27c18e8Smrg if test -n "$soname_spec"; then 8115c27c18e8Smrg eval soname=\"$soname_spec\" 8116c27c18e8Smrg else 81170eb1301bSmrg soname="$realname" 8118c27c18e8Smrg fi 8119c27c18e8Smrg if test -z "$dlname"; then 8120c27c18e8Smrg dlname=$soname 8121c27c18e8Smrg fi 8122c43cc173Smrg 81230eb1301bSmrg lib="$output_objdir/$realname" 8124c27c18e8Smrg linknames= 8125c27c18e8Smrg for link 8126c27c18e8Smrg do 8127b789ec8aSmrg func_append linknames " $link" 8128c27c18e8Smrg done 8129c43cc173Smrg 8130c27c18e8Smrg # Use standard objects if they are pic 813137eb1ca1Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8132c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 8133c43cc173Smrg 8134c27c18e8Smrg delfiles= 8135c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8136c27c18e8Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 81370eb1301bSmrg export_symbols="$output_objdir/$libname.uexp" 8138b789ec8aSmrg func_append delfiles " $export_symbols" 8139c27c18e8Smrg fi 8140c43cc173Smrg 8141c27c18e8Smrg orig_export_symbols= 8142c27c18e8Smrg case $host_os in 8143c27c18e8Smrg cygwin* | mingw* | cegcc*) 8144c27c18e8Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8145c27c18e8Smrg # exporting using user supplied symfile 81460eb1301bSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8147c27c18e8Smrg # and it's NOT already a .def file. Must figure out 8148c27c18e8Smrg # which of the given symbols are data symbols and tag 8149c27c18e8Smrg # them as such. So, trigger use of export_symbols_cmds. 8150c27c18e8Smrg # export_symbols gets reassigned inside the "prepare 8151c27c18e8Smrg # the list of exported symbols" if statement, so the 8152c27c18e8Smrg # include_expsyms logic still works. 81530eb1301bSmrg orig_export_symbols="$export_symbols" 8154c27c18e8Smrg export_symbols= 8155c27c18e8Smrg always_export_symbols=yes 81560eb1301bSmrg fi 8157c27c18e8Smrg fi 8158c27c18e8Smrg ;; 8159c27c18e8Smrg esac 8160c43cc173Smrg 8161c27c18e8Smrg # Prepare the list of exported symbols 8162c27c18e8Smrg if test -z "$export_symbols"; then 81630eb1301bSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 81640eb1301bSmrg func_verbose "generating symbol list for \`$libname.la'" 81650eb1301bSmrg export_symbols="$output_objdir/$libname.exp" 8166c27c18e8Smrg $opt_dry_run || $RM $export_symbols 8167c27c18e8Smrg cmds=$export_symbols_cmds 81680eb1301bSmrg save_ifs="$IFS"; IFS='~' 8169b789ec8aSmrg for cmd1 in $cmds; do 81700eb1301bSmrg IFS="$save_ifs" 8171b789ec8aSmrg # Take the normal branch if the nm_file_list_spec branch 8172b789ec8aSmrg # doesn't work or if tool conversion is not needed. 8173b789ec8aSmrg case $nm_file_list_spec~$to_tool_file_cmd in 8174b789ec8aSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8175b789ec8aSmrg try_normal_branch=yes 8176b789ec8aSmrg eval cmd=\"$cmd1\" 8177b789ec8aSmrg func_len " $cmd" 8178b789ec8aSmrg len=$func_len_result 8179b789ec8aSmrg ;; 8180b789ec8aSmrg *) 8181b789ec8aSmrg try_normal_branch=no 8182b789ec8aSmrg ;; 8183b789ec8aSmrg esac 81840eb1301bSmrg if test "$try_normal_branch" = yes \ 8185b789ec8aSmrg && { test "$len" -lt "$max_cmd_len" \ 8186b789ec8aSmrg || test "$max_cmd_len" -le -1; } 8187b789ec8aSmrg then 8188b789ec8aSmrg func_show_eval "$cmd" 'exit $?' 8189b789ec8aSmrg skipped_export=false 8190b789ec8aSmrg elif test -n "$nm_file_list_spec"; then 8191b789ec8aSmrg func_basename "$output" 8192b789ec8aSmrg output_la=$func_basename_result 8193b789ec8aSmrg save_libobjs=$libobjs 8194b789ec8aSmrg save_output=$output 81950eb1301bSmrg output=${output_objdir}/${output_la}.nm 8196b789ec8aSmrg func_to_tool_file "$output" 8197b789ec8aSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 8198b789ec8aSmrg func_append delfiles " $output" 8199b789ec8aSmrg func_verbose "creating $NM input file list: $output" 8200b789ec8aSmrg for obj in $save_libobjs; do 8201b789ec8aSmrg func_to_tool_file "$obj" 8202b789ec8aSmrg $ECHO "$func_to_tool_file_result" 8203b789ec8aSmrg done > "$output" 8204b789ec8aSmrg eval cmd=\"$cmd1\" 8205c27c18e8Smrg func_show_eval "$cmd" 'exit $?' 8206b789ec8aSmrg output=$save_output 8207b789ec8aSmrg libobjs=$save_libobjs 8208c27c18e8Smrg skipped_export=false 8209c27c18e8Smrg else 8210c27c18e8Smrg # The command line is too long to execute in one step. 8211c27c18e8Smrg func_verbose "using reloadable object file for export list..." 8212c27c18e8Smrg skipped_export=: 8213c27c18e8Smrg # Break out early, otherwise skipped_export may be 8214c27c18e8Smrg # set to false by a later but shorter cmd. 8215c27c18e8Smrg break 8216c27c18e8Smrg fi 8217c27c18e8Smrg done 82180eb1301bSmrg IFS="$save_ifs" 82190eb1301bSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8220c27c18e8Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8221c27c18e8Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8222c27c18e8Smrg fi 8223c27c18e8Smrg fi 8224c27c18e8Smrg fi 8225c43cc173Smrg 8226c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 82270eb1301bSmrg tmp_export_symbols="$export_symbols" 82280eb1301bSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 822937eb1ca1Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8230c27c18e8Smrg fi 8231c43cc173Smrg 82320eb1301bSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8233c27c18e8Smrg # The given exports_symbols file has to be filtered, so filter it. 82340eb1301bSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8235c27c18e8Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 82360eb1301bSmrg # 's' commands which not all seds can handle. GNU sed should be fine 8237c27c18e8Smrg # though. Also, the filter scales superlinearly with the number of 8238c27c18e8Smrg # global variables. join(1) would be nice here, but unfortunately 8239c27c18e8Smrg # isn't a blessed tool. 8240c27c18e8Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8241b789ec8aSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8242c27c18e8Smrg export_symbols=$output_objdir/$libname.def 8243c27c18e8Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8244c43cc173Smrg fi 8245c43cc173Smrg 8246c27c18e8Smrg tmp_deplibs= 8247c27c18e8Smrg for test_deplib in $deplibs; do 8248c27c18e8Smrg case " $convenience " in 8249c27c18e8Smrg *" $test_deplib "*) ;; 8250c27c18e8Smrg *) 8251b789ec8aSmrg func_append tmp_deplibs " $test_deplib" 8252c27c18e8Smrg ;; 8253c27c18e8Smrg esac 8254c27c18e8Smrg done 82550eb1301bSmrg deplibs="$tmp_deplibs" 8256c43cc173Smrg 8257c27c18e8Smrg if test -n "$convenience"; then 8258c27c18e8Smrg if test -n "$whole_archive_flag_spec" && 82590eb1301bSmrg test "$compiler_needs_object" = yes && 8260c27c18e8Smrg test -z "$libobjs"; then 8261c27c18e8Smrg # extract the archives, so we have objects to list. 8262c27c18e8Smrg # TODO: could optimize this to just extract one archive. 8263c27c18e8Smrg whole_archive_flag_spec= 8264c27c18e8Smrg fi 8265c27c18e8Smrg if test -n "$whole_archive_flag_spec"; then 8266c27c18e8Smrg save_libobjs=$libobjs 8267c27c18e8Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8268c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 8269c27c18e8Smrg else 82700eb1301bSmrg gentop="$output_objdir/${outputname}x" 8271b789ec8aSmrg func_append generated " $gentop" 8272c43cc173Smrg 8273c27c18e8Smrg func_extract_archives $gentop $convenience 8274b789ec8aSmrg func_append libobjs " $func_extract_archives_result" 8275c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 8276c27c18e8Smrg fi 8277c27c18e8Smrg fi 8278c43cc173Smrg 82790eb1301bSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8280c27c18e8Smrg eval flag=\"$thread_safe_flag_spec\" 8281b789ec8aSmrg func_append linker_flags " $flag" 8282c27c18e8Smrg fi 8283c43cc173Smrg 8284c27c18e8Smrg # Make a backup of the uninstalled library when relinking 82850eb1301bSmrg if test "$opt_mode" = relink; then 8286c27c18e8Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8287c43cc173Smrg fi 8288c43cc173Smrg 8289c27c18e8Smrg # Do each of the archive commands. 82900eb1301bSmrg if test "$module" = yes && test -n "$module_cmds" ; then 8291c27c18e8Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8292c27c18e8Smrg eval test_cmds=\"$module_expsym_cmds\" 8293c27c18e8Smrg cmds=$module_expsym_cmds 8294c27c18e8Smrg else 8295c27c18e8Smrg eval test_cmds=\"$module_cmds\" 8296c27c18e8Smrg cmds=$module_cmds 8297c27c18e8Smrg fi 8298c27c18e8Smrg else 8299c27c18e8Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8300c27c18e8Smrg eval test_cmds=\"$archive_expsym_cmds\" 8301c27c18e8Smrg cmds=$archive_expsym_cmds 8302c27c18e8Smrg else 8303c27c18e8Smrg eval test_cmds=\"$archive_cmds\" 8304c27c18e8Smrg cmds=$archive_cmds 8305c27c18e8Smrg fi 8306c43cc173Smrg fi 8307c43cc173Smrg 83080eb1301bSmrg if test "X$skipped_export" != "X:" && 8309c27c18e8Smrg func_len " $test_cmds" && 8310c27c18e8Smrg len=$func_len_result && 8311c27c18e8Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8312c27c18e8Smrg : 8313c27c18e8Smrg else 8314c27c18e8Smrg # The command line is too long to link in one step, link piecewise 8315c27c18e8Smrg # or, if using GNU ld and skipped_export is not :, use a linker 8316c27c18e8Smrg # script. 8317c43cc173Smrg 8318c27c18e8Smrg # Save the value of $output and $libobjs because we want to 8319c27c18e8Smrg # use them later. If we have whole_archive_flag_spec, we 8320c27c18e8Smrg # want to use save_libobjs as it was before 8321c27c18e8Smrg # whole_archive_flag_spec was expanded, because we can't 8322c27c18e8Smrg # assume the linker understands whole_archive_flag_spec. 8323c27c18e8Smrg # This may have to be revisited, in case too many 8324c27c18e8Smrg # convenience libraries get linked in and end up exceeding 8325c27c18e8Smrg # the spec. 8326c27c18e8Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8327c27c18e8Smrg save_libobjs=$libobjs 8328c27c18e8Smrg fi 8329c27c18e8Smrg save_output=$output 833037eb1ca1Smrg func_basename "$output" 833137eb1ca1Smrg output_la=$func_basename_result 8332c43cc173Smrg 8333c27c18e8Smrg # Clear the reloadable object creation command queue and 8334c27c18e8Smrg # initialize k to one. 8335c27c18e8Smrg test_cmds= 8336c27c18e8Smrg concat_cmds= 8337c27c18e8Smrg objlist= 8338c27c18e8Smrg last_robj= 8339c27c18e8Smrg k=1 8340c43cc173Smrg 83410eb1301bSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 83420eb1301bSmrg output=${output_objdir}/${output_la}.lnkscript 8343c27c18e8Smrg func_verbose "creating GNU ld script: $output" 834437eb1ca1Smrg echo 'INPUT (' > $output 8345c27c18e8Smrg for obj in $save_libobjs 8346c27c18e8Smrg do 8347b789ec8aSmrg func_to_tool_file "$obj" 8348b789ec8aSmrg $ECHO "$func_to_tool_file_result" >> $output 8349c27c18e8Smrg done 835037eb1ca1Smrg echo ')' >> $output 8351b789ec8aSmrg func_append delfiles " $output" 8352b789ec8aSmrg func_to_tool_file "$output" 8353b789ec8aSmrg output=$func_to_tool_file_result 83540eb1301bSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 83550eb1301bSmrg output=${output_objdir}/${output_la}.lnk 8356c27c18e8Smrg func_verbose "creating linker input file list: $output" 8357c27c18e8Smrg : > $output 8358c27c18e8Smrg set x $save_libobjs 8359c27c18e8Smrg shift 8360c27c18e8Smrg firstobj= 83610eb1301bSmrg if test "$compiler_needs_object" = yes; then 8362c27c18e8Smrg firstobj="$1 " 8363c27c18e8Smrg shift 8364c27c18e8Smrg fi 8365c27c18e8Smrg for obj 8366c27c18e8Smrg do 8367b789ec8aSmrg func_to_tool_file "$obj" 8368b789ec8aSmrg $ECHO "$func_to_tool_file_result" >> $output 8369c27c18e8Smrg done 8370b789ec8aSmrg func_append delfiles " $output" 8371b789ec8aSmrg func_to_tool_file "$output" 8372b789ec8aSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8373c27c18e8Smrg else 8374c27c18e8Smrg if test -n "$save_libobjs"; then 8375c27c18e8Smrg func_verbose "creating reloadable object files..." 83760eb1301bSmrg output=$output_objdir/$output_la-${k}.$objext 8377c27c18e8Smrg eval test_cmds=\"$reload_cmds\" 8378c27c18e8Smrg func_len " $test_cmds" 8379c27c18e8Smrg len0=$func_len_result 8380c27c18e8Smrg len=$len0 8381c27c18e8Smrg 8382c27c18e8Smrg # Loop over the list of objects to be linked. 8383c27c18e8Smrg for obj in $save_libobjs 8384c27c18e8Smrg do 8385c27c18e8Smrg func_len " $obj" 8386c27c18e8Smrg func_arith $len + $func_len_result 8387c27c18e8Smrg len=$func_arith_result 83880eb1301bSmrg if test "X$objlist" = X || 8389c27c18e8Smrg test "$len" -lt "$max_cmd_len"; then 8390c27c18e8Smrg func_append objlist " $obj" 8391c27c18e8Smrg else 8392c27c18e8Smrg # The command $test_cmds is almost too long, add a 8393c27c18e8Smrg # command to the queue. 83940eb1301bSmrg if test "$k" -eq 1 ; then 8395c27c18e8Smrg # The first file doesn't have a previous command to add. 839637eb1ca1Smrg reload_objs=$objlist 839737eb1ca1Smrg eval concat_cmds=\"$reload_cmds\" 8398c27c18e8Smrg else 8399c27c18e8Smrg # All subsequent reloadable object files will link in 8400c27c18e8Smrg # the last one created. 840137eb1ca1Smrg reload_objs="$objlist $last_robj" 840237eb1ca1Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8403c27c18e8Smrg fi 84040eb1301bSmrg last_robj=$output_objdir/$output_la-${k}.$objext 8405c27c18e8Smrg func_arith $k + 1 8406c27c18e8Smrg k=$func_arith_result 84070eb1301bSmrg output=$output_objdir/$output_la-${k}.$objext 840837eb1ca1Smrg objlist=" $obj" 8409c27c18e8Smrg func_len " $last_robj" 8410c27c18e8Smrg func_arith $len0 + $func_len_result 8411c27c18e8Smrg len=$func_arith_result 8412c27c18e8Smrg fi 8413c27c18e8Smrg done 8414c27c18e8Smrg # Handle the remaining objects by creating one last 8415c27c18e8Smrg # reloadable object file. All subsequent reloadable object 8416c27c18e8Smrg # files will link in the last one created. 8417c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 841837eb1ca1Smrg reload_objs="$objlist $last_robj" 84190eb1301bSmrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8420c27c18e8Smrg if test -n "$last_robj"; then 84210eb1301bSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8422c27c18e8Smrg fi 8423b789ec8aSmrg func_append delfiles " $output" 8424c43cc173Smrg 8425c27c18e8Smrg else 8426c27c18e8Smrg output= 8427c27c18e8Smrg fi 8428c27c18e8Smrg 84290eb1301bSmrg if ${skipped_export-false}; then 84300eb1301bSmrg func_verbose "generating symbol list for \`$libname.la'" 84310eb1301bSmrg export_symbols="$output_objdir/$libname.exp" 8432c27c18e8Smrg $opt_dry_run || $RM $export_symbols 8433c27c18e8Smrg libobjs=$output 8434c27c18e8Smrg # Append the command to create the export file. 8435c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8436c27c18e8Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8437c27c18e8Smrg if test -n "$last_robj"; then 8438c27c18e8Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8439c27c18e8Smrg fi 84400eb1301bSmrg fi 8441c43cc173Smrg 8442c27c18e8Smrg test -n "$save_libobjs" && 8443c27c18e8Smrg func_verbose "creating a temporary reloadable object file: $output" 8444c43cc173Smrg 8445c27c18e8Smrg # Loop through the commands generated above and execute them. 84460eb1301bSmrg save_ifs="$IFS"; IFS='~' 8447c27c18e8Smrg for cmd in $concat_cmds; do 84480eb1301bSmrg IFS="$save_ifs" 84490eb1301bSmrg $opt_silent || { 8450c27c18e8Smrg func_quote_for_expand "$cmd" 8451c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 8452c27c18e8Smrg } 8453c27c18e8Smrg $opt_dry_run || eval "$cmd" || { 8454c27c18e8Smrg lt_exit=$? 8455c27c18e8Smrg 8456c27c18e8Smrg # Restore the uninstalled library and exit 84570eb1301bSmrg if test "$opt_mode" = relink; then 8458c27c18e8Smrg ( cd "$output_objdir" && \ 8459c27c18e8Smrg $RM "${realname}T" && \ 8460c27c18e8Smrg $MV "${realname}U" "$realname" ) 8461c27c18e8Smrg fi 8462c43cc173Smrg 8463c27c18e8Smrg exit $lt_exit 8464c27c18e8Smrg } 8465c27c18e8Smrg done 84660eb1301bSmrg IFS="$save_ifs" 8467c43cc173Smrg 8468c27c18e8Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8469c27c18e8Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8470c27c18e8Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8471c43cc173Smrg fi 8472c43cc173Smrg fi 8473c43cc173Smrg 84740eb1301bSmrg if ${skipped_export-false}; then 8475c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 84760eb1301bSmrg tmp_export_symbols="$export_symbols" 84770eb1301bSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 847837eb1ca1Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8479c27c18e8Smrg fi 8480c43cc173Smrg 8481c27c18e8Smrg if test -n "$orig_export_symbols"; then 8482c27c18e8Smrg # The given exports_symbols file has to be filtered, so filter it. 84830eb1301bSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8484c27c18e8Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 84850eb1301bSmrg # 's' commands which not all seds can handle. GNU sed should be fine 8486c27c18e8Smrg # though. Also, the filter scales superlinearly with the number of 8487c27c18e8Smrg # global variables. join(1) would be nice here, but unfortunately 8488c27c18e8Smrg # isn't a blessed tool. 8489c27c18e8Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8490b789ec8aSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8491c27c18e8Smrg export_symbols=$output_objdir/$libname.def 8492c27c18e8Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8493c27c18e8Smrg fi 84940eb1301bSmrg fi 8495c43cc173Smrg 8496c27c18e8Smrg libobjs=$output 8497c27c18e8Smrg # Restore the value of output. 8498c27c18e8Smrg output=$save_output 8499c43cc173Smrg 8500c27c18e8Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8501c27c18e8Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8502c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 8503c27c18e8Smrg fi 8504c27c18e8Smrg # Expand the library linking commands again to reset the 8505c27c18e8Smrg # value of $libobjs for piecewise linking. 8506c27c18e8Smrg 8507c27c18e8Smrg # Do each of the archive commands. 85080eb1301bSmrg if test "$module" = yes && test -n "$module_cmds" ; then 8509c27c18e8Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8510c27c18e8Smrg cmds=$module_expsym_cmds 8511c43cc173Smrg else 8512c27c18e8Smrg cmds=$module_cmds 8513c43cc173Smrg fi 8514c43cc173Smrg else 8515c27c18e8Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8516c27c18e8Smrg cmds=$archive_expsym_cmds 8517c27c18e8Smrg else 8518c27c18e8Smrg cmds=$archive_cmds 8519c27c18e8Smrg fi 8520c43cc173Smrg fi 8521c43cc173Smrg fi 8522c43cc173Smrg 8523c27c18e8Smrg if test -n "$delfiles"; then 8524c27c18e8Smrg # Append the command to remove temporary files to $cmds. 8525c27c18e8Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 8526c27c18e8Smrg fi 8527c43cc173Smrg 8528c27c18e8Smrg # Add any objects from preloaded convenience libraries 8529c27c18e8Smrg if test -n "$dlprefiles"; then 85300eb1301bSmrg gentop="$output_objdir/${outputname}x" 8531b789ec8aSmrg func_append generated " $gentop" 8532c43cc173Smrg 8533c27c18e8Smrg func_extract_archives $gentop $dlprefiles 8534b789ec8aSmrg func_append libobjs " $func_extract_archives_result" 8535c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 8536c43cc173Smrg fi 8537c43cc173Smrg 85380eb1301bSmrg save_ifs="$IFS"; IFS='~' 8539c27c18e8Smrg for cmd in $cmds; do 85400eb1301bSmrg IFS="$save_ifs" 8541c27c18e8Smrg eval cmd=\"$cmd\" 85420eb1301bSmrg $opt_silent || { 8543c27c18e8Smrg func_quote_for_expand "$cmd" 8544c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 8545c27c18e8Smrg } 8546c27c18e8Smrg $opt_dry_run || eval "$cmd" || { 8547c27c18e8Smrg lt_exit=$? 8548c43cc173Smrg 8549c27c18e8Smrg # Restore the uninstalled library and exit 85500eb1301bSmrg if test "$opt_mode" = relink; then 8551c27c18e8Smrg ( cd "$output_objdir" && \ 8552c27c18e8Smrg $RM "${realname}T" && \ 8553c27c18e8Smrg $MV "${realname}U" "$realname" ) 8554c43cc173Smrg fi 8555c43cc173Smrg 8556c27c18e8Smrg exit $lt_exit 8557c27c18e8Smrg } 8558c27c18e8Smrg done 85590eb1301bSmrg IFS="$save_ifs" 8560c43cc173Smrg 8561c27c18e8Smrg # Restore the uninstalled library and exit 85620eb1301bSmrg if test "$opt_mode" = relink; then 8563c27c18e8Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8564c43cc173Smrg 8565c27c18e8Smrg if test -n "$convenience"; then 8566c27c18e8Smrg if test -z "$whole_archive_flag_spec"; then 8567c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 8568c27c18e8Smrg fi 8569c27c18e8Smrg fi 8570c43cc173Smrg 8571c27c18e8Smrg exit $EXIT_SUCCESS 8572c27c18e8Smrg fi 8573c43cc173Smrg 8574c27c18e8Smrg # Create links to the real library. 8575c27c18e8Smrg for linkname in $linknames; do 8576c27c18e8Smrg if test "$realname" != "$linkname"; then 8577c27c18e8Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8578c43cc173Smrg fi 8579c43cc173Smrg done 8580c43cc173Smrg 8581c27c18e8Smrg # If -module or -export-dynamic was specified, set the dlname. 85820eb1301bSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 8583c27c18e8Smrg # On all known operating systems, these are identical. 85840eb1301bSmrg dlname="$soname" 8585c27c18e8Smrg fi 8586c27c18e8Smrg fi 8587c43cc173Smrg ;; 8588c43cc173Smrg 8589c27c18e8Smrg obj) 85900eb1301bSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 85910eb1301bSmrg func_warning "\`-dlopen' is ignored for objects" 8592c27c18e8Smrg fi 8593c43cc173Smrg 8594c27c18e8Smrg case " $deplibs" in 8595c27c18e8Smrg *\ -l* | *\ -L*) 85960eb1301bSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 8597c43cc173Smrg esac 8598c43cc173Smrg 8599c27c18e8Smrg test -n "$rpath" && \ 86000eb1301bSmrg func_warning "\`-rpath' is ignored for objects" 8601c43cc173Smrg 8602c27c18e8Smrg test -n "$xrpath" && \ 86030eb1301bSmrg func_warning "\`-R' is ignored for objects" 8604c43cc173Smrg 8605c27c18e8Smrg test -n "$vinfo" && \ 86060eb1301bSmrg func_warning "\`-version-info' is ignored for objects" 8607c27c18e8Smrg 8608c27c18e8Smrg test -n "$release" && \ 86090eb1301bSmrg func_warning "\`-release' is ignored for objects" 8610c27c18e8Smrg 8611c27c18e8Smrg case $output in 8612c27c18e8Smrg *.lo) 8613c27c18e8Smrg test -n "$objs$old_deplibs" && \ 86140eb1301bSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8615c27c18e8Smrg 8616c27c18e8Smrg libobj=$output 8617c27c18e8Smrg func_lo2o "$libobj" 8618c27c18e8Smrg obj=$func_lo2o_result 8619c43cc173Smrg ;; 8620c43cc173Smrg *) 8621c27c18e8Smrg libobj= 86220eb1301bSmrg obj="$output" 8623c43cc173Smrg ;; 8624c43cc173Smrg esac 8625c43cc173Smrg 8626c27c18e8Smrg # Delete the old objects. 8627c27c18e8Smrg $opt_dry_run || $RM $obj $libobj 8628c43cc173Smrg 8629c27c18e8Smrg # Objects from convenience libraries. This assumes 8630c27c18e8Smrg # single-version convenience libraries. Whenever we create 8631c27c18e8Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 8632c27c18e8Smrg # the extraction. 8633c27c18e8Smrg reload_conv_objs= 8634c27c18e8Smrg gentop= 86350eb1301bSmrg # reload_cmds runs $LD directly, so let us get rid of 86360eb1301bSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 86370eb1301bSmrg # turning comma into space.. 86380eb1301bSmrg wl= 86390eb1301bSmrg 8640c27c18e8Smrg if test -n "$convenience"; then 8641c27c18e8Smrg if test -n "$whole_archive_flag_spec"; then 8642c27c18e8Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 86430eb1301bSmrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8644c27c18e8Smrg else 86450eb1301bSmrg gentop="$output_objdir/${obj}x" 8646b789ec8aSmrg func_append generated " $gentop" 8647c43cc173Smrg 8648c27c18e8Smrg func_extract_archives $gentop $convenience 8649c27c18e8Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8650c27c18e8Smrg fi 8651c43cc173Smrg fi 8652c43cc173Smrg 8653b789ec8aSmrg # If we're not building shared, we need to use non_pic_objs 86540eb1301bSmrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8655b789ec8aSmrg 8656c27c18e8Smrg # Create the old-style object. 86570eb1301bSmrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8658c43cc173Smrg 86590eb1301bSmrg output="$obj" 8660c27c18e8Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8661c43cc173Smrg 8662c27c18e8Smrg # Exit if we aren't doing a library object file. 8663c27c18e8Smrg if test -z "$libobj"; then 8664c27c18e8Smrg if test -n "$gentop"; then 8665c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 8666c27c18e8Smrg fi 8667c27c18e8Smrg 8668c27c18e8Smrg exit $EXIT_SUCCESS 8669c43cc173Smrg fi 8670c27c18e8Smrg 86710eb1301bSmrg if test "$build_libtool_libs" != yes; then 8672c27c18e8Smrg if test -n "$gentop"; then 8673c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 8674c27c18e8Smrg fi 8675c27c18e8Smrg 8676c27c18e8Smrg # Create an invalid libtool object if no PIC, so that we don't 8677c27c18e8Smrg # accidentally link it into a program. 8678c27c18e8Smrg # $show "echo timestamp > $libobj" 8679c27c18e8Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8680c27c18e8Smrg exit $EXIT_SUCCESS 86810eb1301bSmrg fi 8682c27c18e8Smrg 86830eb1301bSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8684c27c18e8Smrg # Only do commands if we really have different PIC objects. 8685c27c18e8Smrg reload_objs="$libobjs $reload_conv_objs" 86860eb1301bSmrg output="$libobj" 8687c27c18e8Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8688c27c18e8Smrg fi 8689c27c18e8Smrg 8690c27c18e8Smrg if test -n "$gentop"; then 8691c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 8692c27c18e8Smrg fi 8693c27c18e8Smrg 8694c27c18e8Smrg exit $EXIT_SUCCESS 8695c43cc173Smrg ;; 8696c43cc173Smrg 8697c27c18e8Smrg prog) 8698c27c18e8Smrg case $host in 8699c27c18e8Smrg *cygwin*) func_stripname '' '.exe' "$output" 8700c27c18e8Smrg output=$func_stripname_result.exe;; 8701c27c18e8Smrg esac 8702c27c18e8Smrg test -n "$vinfo" && \ 87030eb1301bSmrg func_warning "\`-version-info' is ignored for programs" 8704c43cc173Smrg 8705c27c18e8Smrg test -n "$release" && \ 87060eb1301bSmrg func_warning "\`-release' is ignored for programs" 8707c43cc173Smrg 87080eb1301bSmrg test "$preload" = yes \ 87090eb1301bSmrg && test "$dlopen_support" = unknown \ 87100eb1301bSmrg && test "$dlopen_self" = unknown \ 87110eb1301bSmrg && test "$dlopen_self_static" = unknown && \ 87120eb1301bSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8713c27c18e8Smrg 8714c27c18e8Smrg case $host in 8715c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 8716c27c18e8Smrg # On Rhapsody replace the C library is the System framework 871737eb1ca1Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 871837eb1ca1Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8719c43cc173Smrg ;; 8720c27c18e8Smrg esac 8721c43cc173Smrg 8722c27c18e8Smrg case $host in 8723c27c18e8Smrg *-*-darwin*) 8724c27c18e8Smrg # Don't allow lazy linking, it breaks C++ global constructors 8725c27c18e8Smrg # But is supposedly fixed on 10.4 or later (yay!). 87260eb1301bSmrg if test "$tagname" = CXX ; then 8727c27c18e8Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8728c27c18e8Smrg 10.[0123]) 87290eb1301bSmrg func_append compile_command " ${wl}-bind_at_load" 87300eb1301bSmrg func_append finalize_command " ${wl}-bind_at_load" 8731c27c18e8Smrg ;; 8732c27c18e8Smrg esac 8733c43cc173Smrg fi 8734c27c18e8Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 873537eb1ca1Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 873637eb1ca1Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8737c27c18e8Smrg ;; 8738c27c18e8Smrg esac 8739c43cc173Smrg 8740c43cc173Smrg 8741c27c18e8Smrg # move library search paths that coincide with paths to not yet 8742c27c18e8Smrg # installed libraries to the beginning of the library search list 8743c27c18e8Smrg new_libs= 8744c27c18e8Smrg for path in $notinst_path; do 8745c27c18e8Smrg case " $new_libs " in 8746c27c18e8Smrg *" -L$path/$objdir "*) ;; 8747c27c18e8Smrg *) 8748c27c18e8Smrg case " $compile_deplibs " in 8749c27c18e8Smrg *" -L$path/$objdir "*) 8750b789ec8aSmrg func_append new_libs " -L$path/$objdir" ;; 8751c43cc173Smrg esac 8752c27c18e8Smrg ;; 8753c27c18e8Smrg esac 8754c27c18e8Smrg done 8755c27c18e8Smrg for deplib in $compile_deplibs; do 8756c27c18e8Smrg case $deplib in 8757c27c18e8Smrg -L*) 8758c27c18e8Smrg case " $new_libs " in 8759c27c18e8Smrg *" $deplib "*) ;; 8760b789ec8aSmrg *) func_append new_libs " $deplib" ;; 8761c43cc173Smrg esac 8762c27c18e8Smrg ;; 8763b789ec8aSmrg *) func_append new_libs " $deplib" ;; 8764c27c18e8Smrg esac 8765c27c18e8Smrg done 87660eb1301bSmrg compile_deplibs="$new_libs" 8767c43cc173Smrg 8768c43cc173Smrg 8769b789ec8aSmrg func_append compile_command " $compile_deplibs" 8770b789ec8aSmrg func_append finalize_command " $finalize_deplibs" 8771c43cc173Smrg 8772c27c18e8Smrg if test -n "$rpath$xrpath"; then 8773c27c18e8Smrg # If the user specified any rpath flags, then add them. 8774c27c18e8Smrg for libdir in $rpath $xrpath; do 8775c27c18e8Smrg # This is the magic to use -rpath. 8776c27c18e8Smrg case "$finalize_rpath " in 8777c27c18e8Smrg *" $libdir "*) ;; 8778b789ec8aSmrg *) func_append finalize_rpath " $libdir" ;; 8779c27c18e8Smrg esac 8780c27c18e8Smrg done 8781c27c18e8Smrg fi 8782c43cc173Smrg 8783c27c18e8Smrg # Now hardcode the library paths 8784c27c18e8Smrg rpath= 8785c27c18e8Smrg hardcode_libdirs= 8786c27c18e8Smrg for libdir in $compile_rpath $finalize_rpath; do 8787c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 8788c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 8789c27c18e8Smrg if test -z "$hardcode_libdirs"; then 87900eb1301bSmrg hardcode_libdirs="$libdir" 8791c27c18e8Smrg else 8792c27c18e8Smrg # Just accumulate the unique libdirs. 8793c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8794c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8795c27c18e8Smrg ;; 8796c27c18e8Smrg *) 8797b789ec8aSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8798c27c18e8Smrg ;; 8799c27c18e8Smrg esac 8800c27c18e8Smrg fi 8801c43cc173Smrg else 8802c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8803b789ec8aSmrg func_append rpath " $flag" 8804c43cc173Smrg fi 8805c27c18e8Smrg elif test -n "$runpath_var"; then 8806c27c18e8Smrg case "$perm_rpath " in 8807c27c18e8Smrg *" $libdir "*) ;; 8808b789ec8aSmrg *) func_append perm_rpath " $libdir" ;; 8809c27c18e8Smrg esac 8810c27c18e8Smrg fi 8811c27c18e8Smrg case $host in 8812c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 88130eb1301bSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8814c27c18e8Smrg case :$dllsearchpath: in 8815c27c18e8Smrg *":$libdir:"*) ;; 8816c27c18e8Smrg ::) dllsearchpath=$libdir;; 8817b789ec8aSmrg *) func_append dllsearchpath ":$libdir";; 8818c27c18e8Smrg esac 8819c27c18e8Smrg case :$dllsearchpath: in 8820c27c18e8Smrg *":$testbindir:"*) ;; 8821c27c18e8Smrg ::) dllsearchpath=$testbindir;; 8822b789ec8aSmrg *) func_append dllsearchpath ":$testbindir";; 8823c27c18e8Smrg esac 8824c27c18e8Smrg ;; 8825c27c18e8Smrg esac 8826c27c18e8Smrg done 8827c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 8828c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 8829c27c18e8Smrg test -n "$hardcode_libdirs"; then 88300eb1301bSmrg libdir="$hardcode_libdirs" 8831c27c18e8Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8832c27c18e8Smrg fi 88330eb1301bSmrg compile_rpath="$rpath" 8834c43cc173Smrg 8835c27c18e8Smrg rpath= 8836c27c18e8Smrg hardcode_libdirs= 8837c27c18e8Smrg for libdir in $finalize_rpath; do 8838c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 8839c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 8840c27c18e8Smrg if test -z "$hardcode_libdirs"; then 88410eb1301bSmrg hardcode_libdirs="$libdir" 8842c27c18e8Smrg else 8843c27c18e8Smrg # Just accumulate the unique libdirs. 8844c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8845c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8846c27c18e8Smrg ;; 8847c27c18e8Smrg *) 8848b789ec8aSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8849c27c18e8Smrg ;; 8850c27c18e8Smrg esac 8851c27c18e8Smrg fi 8852c43cc173Smrg else 8853c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8854b789ec8aSmrg func_append rpath " $flag" 8855c43cc173Smrg fi 8856c27c18e8Smrg elif test -n "$runpath_var"; then 8857c27c18e8Smrg case "$finalize_perm_rpath " in 8858c27c18e8Smrg *" $libdir "*) ;; 8859b789ec8aSmrg *) func_append finalize_perm_rpath " $libdir" ;; 8860c27c18e8Smrg esac 8861c43cc173Smrg fi 8862c27c18e8Smrg done 8863c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 8864c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 8865c27c18e8Smrg test -n "$hardcode_libdirs"; then 88660eb1301bSmrg libdir="$hardcode_libdirs" 8867c27c18e8Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8868c27c18e8Smrg fi 88690eb1301bSmrg finalize_rpath="$rpath" 8870c43cc173Smrg 88710eb1301bSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8872c27c18e8Smrg # Transform all the library objects into standard objects. 887337eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 887437eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8875c27c18e8Smrg fi 8876c43cc173Smrg 88770eb1301bSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8878c43cc173Smrg 8879c27c18e8Smrg # template prelinking step 8880c27c18e8Smrg if test -n "$prelink_cmds"; then 8881c27c18e8Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 8882c27c18e8Smrg fi 8883c43cc173Smrg 88840eb1301bSmrg wrappers_required=yes 8885c27c18e8Smrg case $host in 888637eb1ca1Smrg *cegcc* | *mingw32ce*) 888737eb1ca1Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 88880eb1301bSmrg wrappers_required=no 888937eb1ca1Smrg ;; 8890c27c18e8Smrg *cygwin* | *mingw* ) 88910eb1301bSmrg if test "$build_libtool_libs" != yes; then 88920eb1301bSmrg wrappers_required=no 88930eb1301bSmrg fi 8894c27c18e8Smrg ;; 8895c27c18e8Smrg *) 88960eb1301bSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 88970eb1301bSmrg wrappers_required=no 8898c27c18e8Smrg fi 8899c27c18e8Smrg ;; 8900c27c18e8Smrg esac 89010eb1301bSmrg if test "$wrappers_required" = no; then 8902c27c18e8Smrg # Replace the output file specification. 890337eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 89040eb1301bSmrg link_command="$compile_command$compile_rpath" 8905c43cc173Smrg 8906c27c18e8Smrg # We have no uninstalled library dependencies, so finalize right now. 8907c27c18e8Smrg exit_status=0 8908c27c18e8Smrg func_show_eval "$link_command" 'exit_status=$?' 8909c43cc173Smrg 8910b789ec8aSmrg if test -n "$postlink_cmds"; then 8911b789ec8aSmrg func_to_tool_file "$output" 8912b789ec8aSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8913b789ec8aSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 8914b789ec8aSmrg fi 8915b789ec8aSmrg 8916c27c18e8Smrg # Delete the generated files. 89170eb1301bSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 89180eb1301bSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8919c43cc173Smrg fi 8920c43cc173Smrg 8921c27c18e8Smrg exit $exit_status 89220eb1301bSmrg fi 8923c43cc173Smrg 8924c27c18e8Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8925c27c18e8Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8926c27c18e8Smrg fi 8927c27c18e8Smrg if test -n "$finalize_shlibpath"; then 8928c27c18e8Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8929c27c18e8Smrg fi 8930c43cc173Smrg 8931c27c18e8Smrg compile_var= 8932c27c18e8Smrg finalize_var= 8933c27c18e8Smrg if test -n "$runpath_var"; then 8934c27c18e8Smrg if test -n "$perm_rpath"; then 8935c27c18e8Smrg # We should set the runpath_var. 8936c27c18e8Smrg rpath= 8937c27c18e8Smrg for dir in $perm_rpath; do 8938b789ec8aSmrg func_append rpath "$dir:" 8939c27c18e8Smrg done 8940c27c18e8Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8941c43cc173Smrg fi 8942c27c18e8Smrg if test -n "$finalize_perm_rpath"; then 8943c27c18e8Smrg # We should set the runpath_var. 8944c27c18e8Smrg rpath= 8945c27c18e8Smrg for dir in $finalize_perm_rpath; do 8946b789ec8aSmrg func_append rpath "$dir:" 8947c27c18e8Smrg done 8948c27c18e8Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8949c43cc173Smrg fi 8950c27c18e8Smrg fi 8951c43cc173Smrg 89520eb1301bSmrg if test "$no_install" = yes; then 8953c27c18e8Smrg # We don't need to create a wrapper script. 89540eb1301bSmrg link_command="$compile_var$compile_command$compile_rpath" 8955c27c18e8Smrg # Replace the output file specification. 895637eb1ca1Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8957c27c18e8Smrg # Delete the old output file. 8958c27c18e8Smrg $opt_dry_run || $RM $output 8959c27c18e8Smrg # Link the executable and exit 8960c27c18e8Smrg func_show_eval "$link_command" 'exit $?' 8961b789ec8aSmrg 8962b789ec8aSmrg if test -n "$postlink_cmds"; then 8963b789ec8aSmrg func_to_tool_file "$output" 8964b789ec8aSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8965b789ec8aSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 8966b789ec8aSmrg fi 8967b789ec8aSmrg 8968c43cc173Smrg exit $EXIT_SUCCESS 8969c27c18e8Smrg fi 8970c43cc173Smrg 89710eb1301bSmrg if test "$hardcode_action" = relink; then 89720eb1301bSmrg # Fast installation is not supported 89730eb1301bSmrg link_command="$compile_var$compile_command$compile_rpath" 89740eb1301bSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8975c27c18e8Smrg 89760eb1301bSmrg func_warning "this platform does not like uninstalled shared libraries" 89770eb1301bSmrg func_warning "\`$output' will be relinked during installation" 89780eb1301bSmrg else 89790eb1301bSmrg if test "$fast_install" != no; then 89800eb1301bSmrg link_command="$finalize_var$compile_command$finalize_rpath" 89810eb1301bSmrg if test "$fast_install" = yes; then 89820eb1301bSmrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 89830eb1301bSmrg else 89840eb1301bSmrg # fast_install is set to needless 89850eb1301bSmrg relink_command= 89860eb1301bSmrg fi 89870eb1301bSmrg else 89880eb1301bSmrg link_command="$compile_var$compile_command$compile_rpath" 89890eb1301bSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 89900eb1301bSmrg fi 89910eb1301bSmrg fi 8992c43cc173Smrg 8993c27c18e8Smrg # Replace the output file specification. 899437eb1ca1Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8995c43cc173Smrg 8996c27c18e8Smrg # Delete the old output files. 8997c27c18e8Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8998c43cc173Smrg 8999c27c18e8Smrg func_show_eval "$link_command" 'exit $?' 9000c43cc173Smrg 9001b789ec8aSmrg if test -n "$postlink_cmds"; then 9002b789ec8aSmrg func_to_tool_file "$output_objdir/$outputname" 9003b789ec8aSmrg 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'` 9004b789ec8aSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 9005b789ec8aSmrg fi 9006b789ec8aSmrg 9007c27c18e8Smrg # Now create the wrapper script. 9008c27c18e8Smrg func_verbose "creating $output" 9009c43cc173Smrg 9010c27c18e8Smrg # Quote the relink command for shipping. 9011c27c18e8Smrg if test -n "$relink_command"; then 9012c27c18e8Smrg # Preserve any variables that may affect compiler behavior 9013c27c18e8Smrg for var in $variables_saved_for_relink; do 9014c27c18e8Smrg if eval test -z \"\${$var+set}\"; then 9015c27c18e8Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9016c27c18e8Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9017c27c18e8Smrg relink_command="$var=; export $var; $relink_command" 9018c43cc173Smrg else 9019c27c18e8Smrg func_quote_for_eval "$var_value" 9020c27c18e8Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9021c43cc173Smrg fi 9022c27c18e8Smrg done 9023c27c18e8Smrg relink_command="(cd `pwd`; $relink_command)" 902437eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9025c27c18e8Smrg fi 9026c27c18e8Smrg 9027c27c18e8Smrg # Only actually do things if not in dry run mode. 9028c27c18e8Smrg $opt_dry_run || { 9029c27c18e8Smrg # win32 will think the script is a binary if it has 9030c27c18e8Smrg # a .exe suffix, so we strip it off here. 9031c27c18e8Smrg case $output in 9032c27c18e8Smrg *.exe) func_stripname '' '.exe' "$output" 9033c27c18e8Smrg output=$func_stripname_result ;; 9034c27c18e8Smrg esac 9035c27c18e8Smrg # test for cygwin because mv fails w/o .exe extensions 9036c27c18e8Smrg case $host in 9037c27c18e8Smrg *cygwin*) 9038c27c18e8Smrg exeext=.exe 9039c27c18e8Smrg func_stripname '' '.exe' "$outputname" 9040c27c18e8Smrg outputname=$func_stripname_result ;; 9041c27c18e8Smrg *) exeext= ;; 9042c43cc173Smrg esac 9043c27c18e8Smrg case $host in 9044c27c18e8Smrg *cygwin* | *mingw* ) 9045c27c18e8Smrg func_dirname_and_basename "$output" "" "." 9046c27c18e8Smrg output_name=$func_basename_result 9047c27c18e8Smrg output_path=$func_dirname_result 90480eb1301bSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 90490eb1301bSmrg cwrapper="$output_path/$output_name.exe" 9050c27c18e8Smrg $RM $cwrappersource $cwrapper 9051c27c18e8Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9052c27c18e8Smrg 9053c27c18e8Smrg func_emit_cwrapperexe_src > $cwrappersource 9054c27c18e8Smrg 9055c27c18e8Smrg # The wrapper executable is built using the $host compiler, 9056c27c18e8Smrg # because it contains $host paths and files. If cross- 9057c27c18e8Smrg # compiling, it, like the target executable, must be 9058c27c18e8Smrg # executed on the $host or under an emulation environment. 9059c27c18e8Smrg $opt_dry_run || { 9060c27c18e8Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9061c27c18e8Smrg $STRIP $cwrapper 9062c27c18e8Smrg } 9063c43cc173Smrg 9064c27c18e8Smrg # Now, create the wrapper script for func_source use: 9065c27c18e8Smrg func_ltwrapper_scriptname $cwrapper 9066c27c18e8Smrg $RM $func_ltwrapper_scriptname_result 9067c27c18e8Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9068c27c18e8Smrg $opt_dry_run || { 9069c27c18e8Smrg # note: this script will not be executed, so do not chmod. 90700eb1301bSmrg if test "x$build" = "x$host" ; then 9071c27c18e8Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9072c27c18e8Smrg else 9073c27c18e8Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9074c27c18e8Smrg fi 9075c27c18e8Smrg } 9076c27c18e8Smrg ;; 9077c27c18e8Smrg * ) 9078c27c18e8Smrg $RM $output 9079c27c18e8Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9080c43cc173Smrg 9081c27c18e8Smrg func_emit_wrapper no > $output 9082c27c18e8Smrg chmod +x $output 9083c27c18e8Smrg ;; 9084c27c18e8Smrg esac 9085c27c18e8Smrg } 9086c27c18e8Smrg exit $EXIT_SUCCESS 9087c27c18e8Smrg ;; 9088c27c18e8Smrg esac 9089c43cc173Smrg 9090c27c18e8Smrg # See if we need to build an old-fashioned archive. 9091c27c18e8Smrg for oldlib in $oldlibs; do 9092c43cc173Smrg 90930eb1301bSmrg if test "$build_libtool_libs" = convenience; then 90940eb1301bSmrg oldobjs="$libobjs_save $symfileobj" 90950eb1301bSmrg addlibs="$convenience" 90960eb1301bSmrg build_libtool_libs=no 90970eb1301bSmrg else 90980eb1301bSmrg if test "$build_libtool_libs" = module; then 90990eb1301bSmrg oldobjs="$libobjs_save" 910044584a44Smrg build_libtool_libs=no 91010eb1301bSmrg else 9102c27c18e8Smrg oldobjs="$old_deplibs $non_pic_objects" 91030eb1301bSmrg if test "$preload" = yes && test -f "$symfileobj"; then 91040eb1301bSmrg func_append oldobjs " $symfileobj" 91050eb1301bSmrg fi 91060eb1301bSmrg fi 91070eb1301bSmrg addlibs="$old_convenience" 91080eb1301bSmrg fi 9109c43cc173Smrg 9110c27c18e8Smrg if test -n "$addlibs"; then 91110eb1301bSmrg gentop="$output_objdir/${outputname}x" 9112b789ec8aSmrg func_append generated " $gentop" 9113c43cc173Smrg 9114c27c18e8Smrg func_extract_archives $gentop $addlibs 9115b789ec8aSmrg func_append oldobjs " $func_extract_archives_result" 9116c27c18e8Smrg fi 9117c43cc173Smrg 9118c27c18e8Smrg # Do each command in the archive commands. 91190eb1301bSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9120c27c18e8Smrg cmds=$old_archive_from_new_cmds 9121c27c18e8Smrg else 9122c43cc173Smrg 9123c27c18e8Smrg # Add any objects from preloaded convenience libraries 9124c27c18e8Smrg if test -n "$dlprefiles"; then 91250eb1301bSmrg gentop="$output_objdir/${outputname}x" 9126b789ec8aSmrg func_append generated " $gentop" 9127c43cc173Smrg 9128c27c18e8Smrg func_extract_archives $gentop $dlprefiles 9129b789ec8aSmrg func_append oldobjs " $func_extract_archives_result" 9130c27c18e8Smrg fi 9131c43cc173Smrg 9132c27c18e8Smrg # POSIX demands no paths to be encoded in archives. We have 9133c27c18e8Smrg # to avoid creating archives with duplicate basenames if we 9134c27c18e8Smrg # might have to extract them afterwards, e.g., when creating a 9135c27c18e8Smrg # static archive out of a convenience library, or when linking 9136c27c18e8Smrg # the entirety of a libtool archive into another (currently 9137c27c18e8Smrg # not supported by libtool). 9138c27c18e8Smrg if (for obj in $oldobjs 9139c27c18e8Smrg do 9140c27c18e8Smrg func_basename "$obj" 9141c27c18e8Smrg $ECHO "$func_basename_result" 9142c27c18e8Smrg done | sort | sort -uc >/dev/null 2>&1); then 9143c27c18e8Smrg : 9144c27c18e8Smrg else 914537eb1ca1Smrg echo "copying selected object files to avoid basename conflicts..." 91460eb1301bSmrg gentop="$output_objdir/${outputname}x" 9147b789ec8aSmrg func_append generated " $gentop" 9148c27c18e8Smrg func_mkdir_p "$gentop" 9149c27c18e8Smrg save_oldobjs=$oldobjs 9150c27c18e8Smrg oldobjs= 9151c27c18e8Smrg counter=1 9152c27c18e8Smrg for obj in $save_oldobjs 9153c27c18e8Smrg do 9154c27c18e8Smrg func_basename "$obj" 91550eb1301bSmrg objbase="$func_basename_result" 9156c27c18e8Smrg case " $oldobjs " in 9157c27c18e8Smrg " ") oldobjs=$obj ;; 9158c27c18e8Smrg *[\ /]"$objbase "*) 9159c27c18e8Smrg while :; do 9160c27c18e8Smrg # Make sure we don't pick an alternate name that also 9161c27c18e8Smrg # overlaps. 9162c27c18e8Smrg newobj=lt$counter-$objbase 9163c27c18e8Smrg func_arith $counter + 1 9164c27c18e8Smrg counter=$func_arith_result 9165c27c18e8Smrg case " $oldobjs " in 9166c27c18e8Smrg *[\ /]"$newobj "*) ;; 9167c27c18e8Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9168c27c18e8Smrg esac 9169c27c18e8Smrg done 9170c27c18e8Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9171b789ec8aSmrg func_append oldobjs " $gentop/$newobj" 9172c27c18e8Smrg ;; 9173b789ec8aSmrg *) func_append oldobjs " $obj" ;; 9174c27c18e8Smrg esac 9175c43cc173Smrg done 9176c43cc173Smrg fi 9177f1ee322dSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9178f1ee322dSmrg tool_oldlib=$func_to_tool_file_result 9179c27c18e8Smrg eval cmds=\"$old_archive_cmds\" 9180c43cc173Smrg 9181c27c18e8Smrg func_len " $cmds" 9182c27c18e8Smrg len=$func_len_result 9183c27c18e8Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9184c27c18e8Smrg cmds=$old_archive_cmds 9185b789ec8aSmrg elif test -n "$archiver_list_spec"; then 9186b789ec8aSmrg func_verbose "using command file archive linking..." 9187b789ec8aSmrg for obj in $oldobjs 9188b789ec8aSmrg do 9189b789ec8aSmrg func_to_tool_file "$obj" 9190b789ec8aSmrg $ECHO "$func_to_tool_file_result" 9191b789ec8aSmrg done > $output_objdir/$libname.libcmd 9192b789ec8aSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 9193b789ec8aSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9194b789ec8aSmrg cmds=$old_archive_cmds 9195c27c18e8Smrg else 9196c27c18e8Smrg # the command line is too long to link in one step, link in parts 9197c27c18e8Smrg func_verbose "using piecewise archive linking..." 9198c27c18e8Smrg save_RANLIB=$RANLIB 9199c27c18e8Smrg RANLIB=: 9200c27c18e8Smrg objlist= 9201c27c18e8Smrg concat_cmds= 9202c27c18e8Smrg save_oldobjs=$oldobjs 9203c27c18e8Smrg oldobjs= 9204c27c18e8Smrg # Is there a better way of finding the last object in the list? 9205c27c18e8Smrg for obj in $save_oldobjs 9206c27c18e8Smrg do 9207c27c18e8Smrg last_oldobj=$obj 9208c27c18e8Smrg done 9209c27c18e8Smrg eval test_cmds=\"$old_archive_cmds\" 9210c27c18e8Smrg func_len " $test_cmds" 9211c27c18e8Smrg len0=$func_len_result 9212c27c18e8Smrg len=$len0 9213c27c18e8Smrg for obj in $save_oldobjs 9214c27c18e8Smrg do 9215c27c18e8Smrg func_len " $obj" 9216c27c18e8Smrg func_arith $len + $func_len_result 9217c27c18e8Smrg len=$func_arith_result 9218c27c18e8Smrg func_append objlist " $obj" 9219c27c18e8Smrg if test "$len" -lt "$max_cmd_len"; then 9220c27c18e8Smrg : 9221c27c18e8Smrg else 9222c27c18e8Smrg # the above command should be used before it gets too long 9223c27c18e8Smrg oldobjs=$objlist 92240eb1301bSmrg if test "$obj" = "$last_oldobj" ; then 9225c27c18e8Smrg RANLIB=$save_RANLIB 9226c27c18e8Smrg fi 9227c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 92280eb1301bSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9229c27c18e8Smrg objlist= 9230c27c18e8Smrg len=$len0 9231c27c18e8Smrg fi 9232c27c18e8Smrg done 9233c27c18e8Smrg RANLIB=$save_RANLIB 9234c27c18e8Smrg oldobjs=$objlist 92350eb1301bSmrg if test "X$oldobjs" = "X" ; then 9236c27c18e8Smrg eval cmds=\"\$concat_cmds\" 9237c27c18e8Smrg else 9238c27c18e8Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9239c27c18e8Smrg fi 9240c27c18e8Smrg fi 9241c27c18e8Smrg fi 9242c27c18e8Smrg func_execute_cmds "$cmds" 'exit $?' 9243c43cc173Smrg done 9244c43cc173Smrg 9245c27c18e8Smrg test -n "$generated" && \ 9246c27c18e8Smrg func_show_eval "${RM}r$generated" 9247c43cc173Smrg 9248c27c18e8Smrg # Now create the libtool archive. 9249c27c18e8Smrg case $output in 9250c27c18e8Smrg *.la) 9251c27c18e8Smrg old_library= 92520eb1301bSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9253c27c18e8Smrg func_verbose "creating $output" 9254c43cc173Smrg 9255c27c18e8Smrg # Preserve any variables that may affect compiler behavior 9256c27c18e8Smrg for var in $variables_saved_for_relink; do 9257c27c18e8Smrg if eval test -z \"\${$var+set}\"; then 9258c27c18e8Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9259c27c18e8Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9260c27c18e8Smrg relink_command="$var=; export $var; $relink_command" 9261c43cc173Smrg else 9262c27c18e8Smrg func_quote_for_eval "$var_value" 9263c27c18e8Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9264c43cc173Smrg fi 9265c27c18e8Smrg done 9266c27c18e8Smrg # Quote the link command for shipping. 92670eb1301bSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 926837eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 92690eb1301bSmrg if test "$hardcode_automatic" = yes ; then 9270c27c18e8Smrg relink_command= 9271c27c18e8Smrg fi 9272c43cc173Smrg 9273c27c18e8Smrg # Only create the output if not a dry run. 9274c27c18e8Smrg $opt_dry_run || { 9275c27c18e8Smrg for installed in no yes; do 92760eb1301bSmrg if test "$installed" = yes; then 9277c27c18e8Smrg if test -z "$install_libdir"; then 9278c27c18e8Smrg break 9279c27c18e8Smrg fi 92800eb1301bSmrg output="$output_objdir/$outputname"i 9281c27c18e8Smrg # Replace all uninstalled libtool libraries with the installed ones 9282c27c18e8Smrg newdependency_libs= 9283c27c18e8Smrg for deplib in $dependency_libs; do 9284c27c18e8Smrg case $deplib in 9285c27c18e8Smrg *.la) 9286c27c18e8Smrg func_basename "$deplib" 92870eb1301bSmrg name="$func_basename_result" 9288f1ee322dSmrg func_resolve_sysroot "$deplib" 92890eb1301bSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9290c27c18e8Smrg test -z "$libdir" && \ 92910eb1301bSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 9292b789ec8aSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9293b789ec8aSmrg ;; 9294b789ec8aSmrg -L*) 9295b789ec8aSmrg func_stripname -L '' "$deplib" 9296b789ec8aSmrg func_replace_sysroot "$func_stripname_result" 9297b789ec8aSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9298b789ec8aSmrg ;; 9299b789ec8aSmrg -R*) 9300b789ec8aSmrg func_stripname -R '' "$deplib" 9301b789ec8aSmrg func_replace_sysroot "$func_stripname_result" 9302b789ec8aSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 9303c27c18e8Smrg ;; 9304b789ec8aSmrg *) func_append newdependency_libs " $deplib" ;; 9305c27c18e8Smrg esac 9306c27c18e8Smrg done 93070eb1301bSmrg dependency_libs="$newdependency_libs" 9308c27c18e8Smrg newdlfiles= 9309c27c18e8Smrg 9310c27c18e8Smrg for lib in $dlfiles; do 9311c27c18e8Smrg case $lib in 9312c27c18e8Smrg *.la) 9313c27c18e8Smrg func_basename "$lib" 93140eb1301bSmrg name="$func_basename_result" 93150eb1301bSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9316c27c18e8Smrg test -z "$libdir" && \ 93170eb1301bSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 9318b789ec8aSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9319c27c18e8Smrg ;; 9320b789ec8aSmrg *) func_append newdlfiles " $lib" ;; 9321c27c18e8Smrg esac 9322c27c18e8Smrg done 93230eb1301bSmrg dlfiles="$newdlfiles" 9324c27c18e8Smrg newdlprefiles= 9325c27c18e8Smrg for lib in $dlprefiles; do 9326c27c18e8Smrg case $lib in 9327c27c18e8Smrg *.la) 9328c27c18e8Smrg # Only pass preopened files to the pseudo-archive (for 9329c27c18e8Smrg # eventual linking with the app. that links it) if we 9330c27c18e8Smrg # didn't already link the preopened objects directly into 9331c27c18e8Smrg # the library: 9332c27c18e8Smrg func_basename "$lib" 93330eb1301bSmrg name="$func_basename_result" 93340eb1301bSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9335c27c18e8Smrg test -z "$libdir" && \ 93360eb1301bSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 9337b789ec8aSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9338c27c18e8Smrg ;; 9339c27c18e8Smrg esac 9340c27c18e8Smrg done 93410eb1301bSmrg dlprefiles="$newdlprefiles" 9342c27c18e8Smrg else 9343c27c18e8Smrg newdlfiles= 9344c27c18e8Smrg for lib in $dlfiles; do 9345c27c18e8Smrg case $lib in 93460eb1301bSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9347c27c18e8Smrg *) abs=`pwd`"/$lib" ;; 9348c27c18e8Smrg esac 9349b789ec8aSmrg func_append newdlfiles " $abs" 9350c27c18e8Smrg done 93510eb1301bSmrg dlfiles="$newdlfiles" 9352c27c18e8Smrg newdlprefiles= 9353c27c18e8Smrg for lib in $dlprefiles; do 9354c27c18e8Smrg case $lib in 93550eb1301bSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9356c27c18e8Smrg *) abs=`pwd`"/$lib" ;; 9357c27c18e8Smrg esac 9358b789ec8aSmrg func_append newdlprefiles " $abs" 9359c27c18e8Smrg done 93600eb1301bSmrg dlprefiles="$newdlprefiles" 9361c27c18e8Smrg fi 9362c27c18e8Smrg $RM $output 9363c27c18e8Smrg # place dlname in correct position for cygwin 936437eb1ca1Smrg # In fact, it would be nice if we could use this code for all target 936537eb1ca1Smrg # systems that can't hard-code library paths into their executables 936637eb1ca1Smrg # and that have no shared library path variable independent of PATH, 936737eb1ca1Smrg # but it turns out we can't easily determine that from inspecting 936837eb1ca1Smrg # libtool variables, so we have to hard-code the OSs to which it 936937eb1ca1Smrg # applies here; at the moment, that means platforms that use the PE 937037eb1ca1Smrg # object format with DLL files. See the long comment at the top of 937137eb1ca1Smrg # tests/bindir.at for full details. 9372c27c18e8Smrg tdlname=$dlname 9373c27c18e8Smrg case $host,$output,$installed,$module,$dlname in 937437eb1ca1Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 937537eb1ca1Smrg # If a -bindir argument was supplied, place the dll there. 93760eb1301bSmrg if test "x$bindir" != x ; 93770eb1301bSmrg then 937837eb1ca1Smrg func_relative_path "$install_libdir" "$bindir" 93790eb1301bSmrg tdlname=$func_relative_path_result$dlname 938037eb1ca1Smrg else 938137eb1ca1Smrg # Otherwise fall back on heuristic. 938237eb1ca1Smrg tdlname=../bin/$dlname 938337eb1ca1Smrg fi 938437eb1ca1Smrg ;; 9385c27c18e8Smrg esac 9386c27c18e8Smrg $ECHO > $output "\ 9387c27c18e8Smrg# $outputname - a libtool library file 93880eb1301bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9389c27c18e8Smrg# 9390c27c18e8Smrg# Please DO NOT delete this file! 9391c27c18e8Smrg# It is necessary for linking the library. 9392c43cc173Smrg 9393c27c18e8Smrg# The name that we can dlopen(3). 9394c27c18e8Smrgdlname='$tdlname' 9395c43cc173Smrg 9396c27c18e8Smrg# Names of this library. 9397c27c18e8Smrglibrary_names='$library_names' 9398c43cc173Smrg 9399c27c18e8Smrg# The name of the static archive. 9400c27c18e8Smrgold_library='$old_library' 9401c43cc173Smrg 94020eb1301bSmrg# Linker flags that can not go in dependency_libs. 9403c27c18e8Smrginherited_linker_flags='$new_inherited_linker_flags' 9404c43cc173Smrg 9405c27c18e8Smrg# Libraries that this one depends upon. 9406c27c18e8Smrgdependency_libs='$dependency_libs' 9407c43cc173Smrg 9408c27c18e8Smrg# Names of additional weak libraries provided by this library 9409c27c18e8Smrgweak_library_names='$weak_libs' 9410c43cc173Smrg 9411c27c18e8Smrg# Version information for $libname. 9412c27c18e8Smrgcurrent=$current 9413c27c18e8Smrgage=$age 9414c27c18e8Smrgrevision=$revision 9415c43cc173Smrg 9416c27c18e8Smrg# Is this an already installed library? 9417c27c18e8Smrginstalled=$installed 9418c43cc173Smrg 9419c27c18e8Smrg# Should we warn about portability when linking against -modules? 9420c27c18e8Smrgshouldnotlink=$module 9421c43cc173Smrg 9422c27c18e8Smrg# Files to dlopen/dlpreopen 9423c27c18e8Smrgdlopen='$dlfiles' 9424c27c18e8Smrgdlpreopen='$dlprefiles' 9425c43cc173Smrg 9426c27c18e8Smrg# Directory that this library needs to be installed in: 9427c27c18e8Smrglibdir='$install_libdir'" 94280eb1301bSmrg if test "$installed" = no && test "$need_relink" = yes; then 9429c27c18e8Smrg $ECHO >> $output "\ 9430c27c18e8Smrgrelink_command=\"$relink_command\"" 9431c27c18e8Smrg fi 9432c27c18e8Smrg done 9433c27c18e8Smrg } 9434c43cc173Smrg 9435c27c18e8Smrg # Do a symbolic link so that the libtool archive can be found in 9436c27c18e8Smrg # LD_LIBRARY_PATH before the program is installed. 9437c27c18e8Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9438c27c18e8Smrg ;; 9439c27c18e8Smrg esac 9440c27c18e8Smrg exit $EXIT_SUCCESS 9441c27c18e8Smrg} 9442c43cc173Smrg 94430eb1301bSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 94440eb1301bSmrg func_mode_link ${1+"$@"} 9445c43cc173Smrg 9446c43cc173Smrg 9447c27c18e8Smrg# func_mode_uninstall arg... 9448c27c18e8Smrgfunc_mode_uninstall () 9449c27c18e8Smrg{ 94500eb1301bSmrg $opt_debug 94510eb1301bSmrg RM="$nonopt" 9452c43cc173Smrg files= 94530eb1301bSmrg rmforce= 9454c43cc173Smrg exit_status=0 9455c43cc173Smrg 9456c43cc173Smrg # This variable tells wrapper scripts just to set variables rather 9457c43cc173Smrg # than running their programs. 94580eb1301bSmrg libtool_install_magic="$magic" 9459c43cc173Smrg 9460c43cc173Smrg for arg 9461c43cc173Smrg do 9462c43cc173Smrg case $arg in 94630eb1301bSmrg -f) func_append RM " $arg"; rmforce=yes ;; 9464b789ec8aSmrg -*) func_append RM " $arg" ;; 9465b789ec8aSmrg *) func_append files " $arg" ;; 9466c43cc173Smrg esac 9467c43cc173Smrg done 9468c43cc173Smrg 9469c27c18e8Smrg test -z "$RM" && \ 9470c27c18e8Smrg func_fatal_help "you must specify an RM program" 9471c43cc173Smrg 9472c43cc173Smrg rmdirs= 9473c43cc173Smrg 9474c43cc173Smrg for file in $files; do 9475c27c18e8Smrg func_dirname "$file" "" "." 94760eb1301bSmrg dir="$func_dirname_result" 94770eb1301bSmrg if test "X$dir" = X.; then 94780eb1301bSmrg odir="$objdir" 9479c43cc173Smrg else 94800eb1301bSmrg odir="$dir/$objdir" 9481c43cc173Smrg fi 9482c27c18e8Smrg func_basename "$file" 94830eb1301bSmrg name="$func_basename_result" 94840eb1301bSmrg test "$opt_mode" = uninstall && odir="$dir" 9485c43cc173Smrg 9486b789ec8aSmrg # Remember odir for removal later, being careful to avoid duplicates 94870eb1301bSmrg if test "$opt_mode" = clean; then 9488c43cc173Smrg case " $rmdirs " in 9489b789ec8aSmrg *" $odir "*) ;; 9490b789ec8aSmrg *) func_append rmdirs " $odir" ;; 9491c43cc173Smrg esac 9492c43cc173Smrg fi 9493c43cc173Smrg 9494c43cc173Smrg # Don't error if the file doesn't exist and rm -f was used. 9495c27c18e8Smrg if { test -L "$file"; } >/dev/null 2>&1 || 9496c27c18e8Smrg { test -h "$file"; } >/dev/null 2>&1 || 9497c27c18e8Smrg test -f "$file"; then 9498c43cc173Smrg : 9499c43cc173Smrg elif test -d "$file"; then 9500c43cc173Smrg exit_status=1 9501c43cc173Smrg continue 95020eb1301bSmrg elif test "$rmforce" = yes; then 9503c43cc173Smrg continue 9504c43cc173Smrg fi 9505c43cc173Smrg 95060eb1301bSmrg rmfiles="$file" 9507c43cc173Smrg 9508c43cc173Smrg case $name in 9509c43cc173Smrg *.la) 9510c43cc173Smrg # Possibly a libtool archive, so verify it. 9511c27c18e8Smrg if func_lalib_p "$file"; then 9512c27c18e8Smrg func_source $dir/$name 9513c43cc173Smrg 9514c43cc173Smrg # Delete the libtool libraries and symlinks. 9515c43cc173Smrg for n in $library_names; do 9516b789ec8aSmrg func_append rmfiles " $odir/$n" 9517c43cc173Smrg done 9518b789ec8aSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9519c43cc173Smrg 95200eb1301bSmrg case "$opt_mode" in 9521c43cc173Smrg clean) 9522b789ec8aSmrg case " $library_names " in 9523c43cc173Smrg *" $dlname "*) ;; 9524b789ec8aSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9525c43cc173Smrg esac 9526b789ec8aSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9527c43cc173Smrg ;; 9528c43cc173Smrg uninstall) 9529c43cc173Smrg if test -n "$library_names"; then 9530c43cc173Smrg # Do each command in the postuninstall commands. 95310eb1301bSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9532c43cc173Smrg fi 9533c43cc173Smrg 9534c43cc173Smrg if test -n "$old_library"; then 9535c43cc173Smrg # Do each command in the old_postuninstall commands. 95360eb1301bSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9537c43cc173Smrg fi 9538c43cc173Smrg # FIXME: should reinstall the best remaining shared library. 9539c43cc173Smrg ;; 9540c43cc173Smrg esac 9541c43cc173Smrg fi 9542c43cc173Smrg ;; 9543c43cc173Smrg 9544c43cc173Smrg *.lo) 9545c43cc173Smrg # Possibly a libtool object, so verify it. 9546c27c18e8Smrg if func_lalib_p "$file"; then 9547c43cc173Smrg 9548c43cc173Smrg # Read the .lo file 9549c27c18e8Smrg func_source $dir/$name 9550c43cc173Smrg 9551c43cc173Smrg # Add PIC object to the list of files to remove. 95520eb1301bSmrg if test -n "$pic_object" && 95530eb1301bSmrg test "$pic_object" != none; then 9554b789ec8aSmrg func_append rmfiles " $dir/$pic_object" 9555c43cc173Smrg fi 9556c43cc173Smrg 9557c43cc173Smrg # Add non-PIC object to the list of files to remove. 95580eb1301bSmrg if test -n "$non_pic_object" && 95590eb1301bSmrg test "$non_pic_object" != none; then 9560b789ec8aSmrg func_append rmfiles " $dir/$non_pic_object" 9561c43cc173Smrg fi 9562c43cc173Smrg fi 9563c43cc173Smrg ;; 9564c43cc173Smrg 9565c43cc173Smrg *) 95660eb1301bSmrg if test "$opt_mode" = clean ; then 9567c43cc173Smrg noexename=$name 9568c43cc173Smrg case $file in 9569c43cc173Smrg *.exe) 9570c27c18e8Smrg func_stripname '' '.exe' "$file" 9571c27c18e8Smrg file=$func_stripname_result 9572c27c18e8Smrg func_stripname '' '.exe' "$name" 9573c27c18e8Smrg noexename=$func_stripname_result 9574c43cc173Smrg # $file with .exe has already been added to rmfiles, 9575c43cc173Smrg # add $file without .exe 9576b789ec8aSmrg func_append rmfiles " $file" 9577c43cc173Smrg ;; 9578c43cc173Smrg esac 9579c43cc173Smrg # Do a test to see if this is a libtool program. 9580c27c18e8Smrg if func_ltwrapper_p "$file"; then 9581c27c18e8Smrg if func_ltwrapper_executable_p "$file"; then 9582c27c18e8Smrg func_ltwrapper_scriptname "$file" 9583c27c18e8Smrg relink_command= 9584c27c18e8Smrg func_source $func_ltwrapper_scriptname_result 9585b789ec8aSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9586c27c18e8Smrg else 9587c27c18e8Smrg relink_command= 9588c27c18e8Smrg func_source $dir/$noexename 9589c27c18e8Smrg fi 9590c43cc173Smrg 9591c43cc173Smrg # note $name still contains .exe if it was in $file originally 9592c43cc173Smrg # as does the version of $file that was added into $rmfiles 95930eb1301bSmrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 95940eb1301bSmrg if test "$fast_install" = yes && test -n "$relink_command"; then 9595b789ec8aSmrg func_append rmfiles " $odir/lt-$name" 9596c43cc173Smrg fi 95970eb1301bSmrg if test "X$noexename" != "X$name" ; then 95980eb1301bSmrg func_append rmfiles " $odir/lt-${noexename}.c" 9599c43cc173Smrg fi 9600c43cc173Smrg fi 9601c43cc173Smrg fi 9602c43cc173Smrg ;; 9603c43cc173Smrg esac 9604c27c18e8Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9605c43cc173Smrg done 9606c43cc173Smrg 96070eb1301bSmrg # Try to remove the ${objdir}s in the directories where we deleted files 9608c43cc173Smrg for dir in $rmdirs; do 9609c43cc173Smrg if test -d "$dir"; then 9610c27c18e8Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9611c43cc173Smrg fi 9612c43cc173Smrg done 9613c43cc173Smrg 9614c43cc173Smrg exit $exit_status 9615c27c18e8Smrg} 9616c43cc173Smrg 96170eb1301bSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 96180eb1301bSmrg func_mode_uninstall ${1+"$@"} 9619c43cc173Smrg 9620b789ec8aSmrgtest -z "$opt_mode" && { 96210eb1301bSmrg help="$generic_help" 9622c27c18e8Smrg func_fatal_help "you must specify a MODE" 9623c27c18e8Smrg} 9624c27c18e8Smrg 9625c27c18e8Smrgtest -z "$exec_cmd" && \ 96260eb1301bSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 9627c43cc173Smrg 9628c43cc173Smrgif test -n "$exec_cmd"; then 9629c27c18e8Smrg eval exec "$exec_cmd" 9630c43cc173Smrg exit $EXIT_FAILURE 9631c43cc173Smrgfi 9632c43cc173Smrg 9633c27c18e8Smrgexit $exit_status 9634c43cc173Smrg 9635c43cc173Smrg 9636c43cc173Smrg# The TAGs below are defined such that we never get into a situation 96370eb1301bSmrg# in which we disable both kinds of libraries. Given conflicting 9638c43cc173Smrg# choices, we go for a static library, that is the most portable, 9639c43cc173Smrg# since we can't tell whether shared libraries were disabled because 9640c43cc173Smrg# the user asked for that or because the platform doesn't support 9641c43cc173Smrg# them. This is particularly important on AIX, because we don't 9642c43cc173Smrg# support having both static and shared libraries enabled at the same 9643c43cc173Smrg# time on that platform, so we default to a shared-only configuration. 9644c43cc173Smrg# If a disable-shared tag is given, we'll fallback to a static-only 9645c43cc173Smrg# configuration. But we'll never go from static-only to shared-only. 9646c43cc173Smrg 9647c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9648c27c18e8Smrgbuild_libtool_libs=no 9649c27c18e8Smrgbuild_old_libs=yes 9650c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 9651c43cc173Smrg 9652c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9653c27c18e8Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9654c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-static 9655c43cc173Smrg 9656c43cc173Smrg# Local Variables: 9657c43cc173Smrg# mode:shell-script 9658c43cc173Smrg# sh-indentation:2 9659c43cc173Smrg# End: 96600eb1301bSmrg# vi:sw=2 96610eb1301bSmrg 9662