ltmain.sh revision 4e7590ef
149dc963fSmrg 24e7590efSmrg# libtool (GNU libtool) 2.4.2 349dc963fSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 449dc963fSmrg 57aa89044Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 64e7590efSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 749dc963fSmrg# This is free software; see the source for copying conditions. There is NO 849dc963fSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 949dc963fSmrg 1049dc963fSmrg# GNU Libtool is free software; you can redistribute it and/or modify 114b0ead49Smrg# it under the terms of the GNU General Public License as published by 124b0ead49Smrg# the Free Software Foundation; either version 2 of the License, or 134b0ead49Smrg# (at your option) any later version. 144b0ead49Smrg# 1549dc963fSmrg# As a special exception to the GNU General Public License, 1649dc963fSmrg# if you distribute this file as part of a program or library that 1749dc963fSmrg# is built using GNU Libtool, you may include this file under the 1849dc963fSmrg# same distribution terms that you use for the rest of that program. 1949dc963fSmrg# 2049dc963fSmrg# GNU Libtool is distributed in the hope that it will be useful, but 214b0ead49Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 224b0ead49Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 234b0ead49Smrg# General Public License for more details. 244b0ead49Smrg# 254b0ead49Smrg# You should have received a copy of the GNU General Public License 2649dc963fSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 2749dc963fSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 2849dc963fSmrg# or obtained by writing to the Free Software Foundation, Inc., 2949dc963fSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 304b0ead49Smrg 3149dc963fSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 3249dc963fSmrg# 3349dc963fSmrg# Provide generalized library-building support services. 3449dc963fSmrg# 357aa89044Smrg# --config show all configuration variables 367aa89044Smrg# --debug enable verbose shell tracing 377aa89044Smrg# -n, --dry-run display commands without modifying any files 387aa89044Smrg# --features display basic configuration information and exit 397aa89044Smrg# --mode=MODE use operation mode MODE 407aa89044Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 417aa89044Smrg# --quiet, --silent don't print informational messages 427aa89044Smrg# --no-quiet, --no-silent 437aa89044Smrg# print informational messages (default) 444e7590efSmrg# --no-warn don't display warning messages 457aa89044Smrg# --tag=TAG use configuration variables from tag TAG 467aa89044Smrg# -v, --verbose print more informational messages than default 477aa89044Smrg# --no-verbose don't print the extra informational messages 487aa89044Smrg# --version print version information 497aa89044Smrg# -h, --help, --help-all print short, long, or detailed help message 5049dc963fSmrg# 5149dc963fSmrg# MODE must be one of the following: 5249dc963fSmrg# 537aa89044Smrg# clean remove files from the build directory 547aa89044Smrg# compile compile a source file into a libtool object 557aa89044Smrg# execute automatically set library path, then run a program 567aa89044Smrg# finish complete the installation of libtool libraries 577aa89044Smrg# install install libraries or executables 587aa89044Smrg# link create a library or an executable 597aa89044Smrg# uninstall remove libraries from an installed directory 6049dc963fSmrg# 617aa89044Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 627aa89044Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 6349dc963fSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 6449dc963fSmrg# 6549dc963fSmrg# When reporting a bug, please describe a test case to reproduce it and 6649dc963fSmrg# include the following information: 6749dc963fSmrg# 687aa89044Smrg# host-triplet: $host 697aa89044Smrg# shell: $SHELL 707aa89044Smrg# compiler: $LTCC 717aa89044Smrg# compiler flags: $LTCFLAGS 727aa89044Smrg# linker: $LD (gnu? $with_gnu_ld) 734e7590efSmrg# $progname: (GNU libtool) 2.4.2 747aa89044Smrg# automake: $automake_version 757aa89044Smrg# autoconf: $autoconf_version 7649dc963fSmrg# 7749dc963fSmrg# Report bugs to <bug-libtool@gnu.org>. 784e7590efSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 794e7590efSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 804b0ead49Smrg 817aa89044SmrgPROGRAM=libtool 824b0ead49SmrgPACKAGE=libtool 834e7590efSmrgVERSION=2.4.2 8449dc963fSmrgTIMESTAMP="" 854e7590efSmrgpackage_revision=1.3337 8652b01e16Smrg 8749dc963fSmrg# Be Bourne compatible 8852b01e16Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8952b01e16Smrg emulate sh 9052b01e16Smrg NULLCMD=: 9152b01e16Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 9252b01e16Smrg # is contrary to our usage. Disable this feature. 9352b01e16Smrg alias -g '${1+"$@"}'='"$@"' 944b0ead49Smrg setopt NO_GLOB_SUBST 9552b01e16Smrgelse 9652b01e16Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 974b0ead49Smrgfi 9852b01e16SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9952b01e16SmrgDUALCASE=1; export DUALCASE # for MKS sh 1004b0ead49Smrg 1017aa89044Smrg# A function that is used when there is no print builtin or printf. 1027aa89044Smrgfunc_fallback_echo () 1037aa89044Smrg{ 1047aa89044Smrg eval 'cat <<_LTECHO_EOF 1057aa89044Smrg$1 1067aa89044Smrg_LTECHO_EOF' 1077aa89044Smrg} 1087aa89044Smrg 10949dc963fSmrg# NLS nuisances: We save the old values to restore during execute mode. 11049dc963fSmrglt_user_locale= 11149dc963fSmrglt_safe_locale= 11252b01e16Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 11352b01e16Smrgdo 11452b01e16Smrg eval "if test \"\${$lt_var+set}\" = set; then 11549dc963fSmrg save_$lt_var=\$$lt_var 11649dc963fSmrg $lt_var=C 11752b01e16Smrg export $lt_var 11849dc963fSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 11949dc963fSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 12052b01e16Smrg fi" 12152b01e16Smrgdone 1227aa89044SmrgLC_ALL=C 1237aa89044SmrgLANGUAGE=C 1247aa89044Smrgexport LANGUAGE LC_ALL 12552b01e16Smrg 12649dc963fSmrg$lt_unset CDPATH 12749dc963fSmrg 12849dc963fSmrg 1297aa89044Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1307aa89044Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1317aa89044Smrg# the _XPG environment variable is not equal to 1 (one), the special 1327aa89044Smrg# positional parameter $0, within a function call, is the name of the 1337aa89044Smrg# function. 1347aa89044Smrgprogpath="$0" 13549dc963fSmrg 13649dc963fSmrg 13749dc963fSmrg 13849dc963fSmrg: ${CP="cp -f"} 1397aa89044Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 14049dc963fSmrg: ${MAKE="make"} 14149dc963fSmrg: ${MKDIR="mkdir"} 14249dc963fSmrg: ${MV="mv -f"} 14349dc963fSmrg: ${RM="rm -f"} 14449dc963fSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 14549dc963fSmrg: ${Xsed="$SED -e 1s/^X//"} 14649dc963fSmrg 14749dc963fSmrg# Global variables: 14849dc963fSmrgEXIT_SUCCESS=0 14949dc963fSmrgEXIT_FAILURE=1 15049dc963fSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 15149dc963fSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 15249dc963fSmrg 15349dc963fSmrgexit_status=$EXIT_SUCCESS 1544b0ead49Smrg 1554b0ead49Smrg# Make sure IFS has a sensible default 1564b0ead49Smrglt_nl=' 1574b0ead49Smrg' 1584b0ead49SmrgIFS=" $lt_nl" 1594b0ead49Smrg 16049dc963fSmrgdirname="s,/[^/]*$,," 16149dc963fSmrgbasename="s,^.*/,," 16249dc963fSmrg 1634e7590efSmrg# func_dirname file append nondir_replacement 1644e7590efSmrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 1654e7590efSmrg# otherwise set result to NONDIR_REPLACEMENT. 1664e7590efSmrgfunc_dirname () 1674e7590efSmrg{ 1684e7590efSmrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 1694e7590efSmrg if test "X$func_dirname_result" = "X${1}"; then 1704e7590efSmrg func_dirname_result="${3}" 1714e7590efSmrg else 1724e7590efSmrg func_dirname_result="$func_dirname_result${2}" 1734e7590efSmrg fi 1744e7590efSmrg} # func_dirname may be replaced by extended shell implementation 1754e7590efSmrg 1764e7590efSmrg 1774e7590efSmrg# func_basename file 1784e7590efSmrgfunc_basename () 1794e7590efSmrg{ 1804e7590efSmrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 1814e7590efSmrg} # func_basename may be replaced by extended shell implementation 1824e7590efSmrg 1834e7590efSmrg 18449dc963fSmrg# func_dirname_and_basename file append nondir_replacement 18549dc963fSmrg# perform func_basename and func_dirname in a single function 18649dc963fSmrg# call: 18749dc963fSmrg# dirname: Compute the dirname of FILE. If nonempty, 18849dc963fSmrg# add APPEND to the result, otherwise set result 18949dc963fSmrg# to NONDIR_REPLACEMENT. 19049dc963fSmrg# value returned in "$func_dirname_result" 19149dc963fSmrg# basename: Compute filename of FILE. 19249dc963fSmrg# value retuned in "$func_basename_result" 19349dc963fSmrg# Implementation must be kept synchronized with func_dirname 19449dc963fSmrg# and func_basename. For efficiency, we do not delegate to 19549dc963fSmrg# those functions but instead duplicate the functionality here. 19649dc963fSmrgfunc_dirname_and_basename () 19749dc963fSmrg{ 1984e7590efSmrg # Extract subdirectory from the argument. 1994e7590efSmrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 2004e7590efSmrg if test "X$func_dirname_result" = "X${1}"; then 2014e7590efSmrg func_dirname_result="${3}" 2024e7590efSmrg else 2034e7590efSmrg func_dirname_result="$func_dirname_result${2}" 2044e7590efSmrg fi 2054e7590efSmrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 2064e7590efSmrg} # func_dirname_and_basename may be replaced by extended shell implementation 2074e7590efSmrg 2084e7590efSmrg 2094e7590efSmrg# func_stripname prefix suffix name 2104e7590efSmrg# strip PREFIX and SUFFIX off of NAME. 2114e7590efSmrg# PREFIX and SUFFIX must not contain globbing or regex special 2124e7590efSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading 2134e7590efSmrg# dot (in which case that matches only a dot). 2144e7590efSmrg# func_strip_suffix prefix name 2154e7590efSmrgfunc_stripname () 2164e7590efSmrg{ 2174e7590efSmrg case ${2} in 2184e7590efSmrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 2194e7590efSmrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 2204e7590efSmrg esac 2214e7590efSmrg} # func_stripname may be replaced by extended shell implementation 2224b0ead49Smrg 22349dc963fSmrg 2247aa89044Smrg# These SED scripts presuppose an absolute path with a trailing slash. 2257aa89044Smrgpathcar='s,^/\([^/]*\).*$,\1,' 2267aa89044Smrgpathcdr='s,^/[^/]*,,' 2277aa89044Smrgremovedotparts=':dotsl 2287aa89044Smrg s@/\./@/@g 2297aa89044Smrg t dotsl 2307aa89044Smrg s,/\.$,/,' 2317aa89044Smrgcollapseslashes='s@/\{1,\}@/@g' 2327aa89044Smrgfinalslash='s,/*$,/,' 2337aa89044Smrg 2347aa89044Smrg# func_normal_abspath PATH 2357aa89044Smrg# Remove doubled-up and trailing slashes, "." path components, 2367aa89044Smrg# and cancel out any ".." path components in PATH after making 2377aa89044Smrg# it an absolute path. 2387aa89044Smrg# value returned in "$func_normal_abspath_result" 2397aa89044Smrgfunc_normal_abspath () 2407aa89044Smrg{ 2417aa89044Smrg # Start from root dir and reassemble the path. 2427aa89044Smrg func_normal_abspath_result= 2437aa89044Smrg func_normal_abspath_tpath=$1 2447aa89044Smrg func_normal_abspath_altnamespace= 2457aa89044Smrg case $func_normal_abspath_tpath in 2467aa89044Smrg "") 2477aa89044Smrg # Empty path, that just means $cwd. 2487aa89044Smrg func_stripname '' '/' "`pwd`" 2497aa89044Smrg func_normal_abspath_result=$func_stripname_result 2507aa89044Smrg return 2517aa89044Smrg ;; 2527aa89044Smrg # The next three entries are used to spot a run of precisely 2537aa89044Smrg # two leading slashes without using negated character classes; 2547aa89044Smrg # we take advantage of case's first-match behaviour. 2557aa89044Smrg ///*) 2567aa89044Smrg # Unusual form of absolute path, do nothing. 2577aa89044Smrg ;; 2587aa89044Smrg //*) 2597aa89044Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2607aa89044Smrg # and for example Cygwin uses it to access remote file shares 2617aa89044Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 2627aa89044Smrg func_normal_abspath_altnamespace=/ 2637aa89044Smrg ;; 2647aa89044Smrg /*) 2657aa89044Smrg # Absolute path, do nothing. 2667aa89044Smrg ;; 2677aa89044Smrg *) 2687aa89044Smrg # Relative path, prepend $cwd. 2697aa89044Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2707aa89044Smrg ;; 2717aa89044Smrg esac 2727aa89044Smrg # Cancel out all the simple stuff to save iterations. We also want 2737aa89044Smrg # the path to end with a slash for ease of parsing, so make sure 2747aa89044Smrg # there is one (and only one) here. 2757aa89044Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2767aa89044Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2777aa89044Smrg while :; do 2787aa89044Smrg # Processed it all yet? 2797aa89044Smrg if test "$func_normal_abspath_tpath" = / ; then 2807aa89044Smrg # If we ascended to the root using ".." the result may be empty now. 2817aa89044Smrg if test -z "$func_normal_abspath_result" ; then 2827aa89044Smrg func_normal_abspath_result=/ 2837aa89044Smrg fi 2847aa89044Smrg break 2857aa89044Smrg fi 2867aa89044Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2877aa89044Smrg -e "$pathcar"` 2887aa89044Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2897aa89044Smrg -e "$pathcdr"` 2907aa89044Smrg # Figure out what to do with it 2917aa89044Smrg case $func_normal_abspath_tcomponent in 2927aa89044Smrg "") 2937aa89044Smrg # Trailing empty path component, ignore it. 2947aa89044Smrg ;; 2957aa89044Smrg ..) 2967aa89044Smrg # Parent dir; strip last assembled component from result. 2977aa89044Smrg func_dirname "$func_normal_abspath_result" 2987aa89044Smrg func_normal_abspath_result=$func_dirname_result 2997aa89044Smrg ;; 3007aa89044Smrg *) 3017aa89044Smrg # Actual path component, append it. 3027aa89044Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 3037aa89044Smrg ;; 3047aa89044Smrg esac 3057aa89044Smrg done 3067aa89044Smrg # Restore leading double-slash if one was found on entry. 3077aa89044Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 3087aa89044Smrg} 3097aa89044Smrg 3107aa89044Smrg# func_relative_path SRCDIR DSTDIR 3117aa89044Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 3127aa89044Smrg# slash if non-empty, suitable for immediately appending a filename 3137aa89044Smrg# without needing to append a separator. 3147aa89044Smrg# value returned in "$func_relative_path_result" 3157aa89044Smrgfunc_relative_path () 3167aa89044Smrg{ 3177aa89044Smrg func_relative_path_result= 3187aa89044Smrg func_normal_abspath "$1" 3197aa89044Smrg func_relative_path_tlibdir=$func_normal_abspath_result 3207aa89044Smrg func_normal_abspath "$2" 3217aa89044Smrg func_relative_path_tbindir=$func_normal_abspath_result 3227aa89044Smrg 3237aa89044Smrg # Ascend the tree starting from libdir 3247aa89044Smrg while :; do 3257aa89044Smrg # check if we have found a prefix of bindir 3267aa89044Smrg case $func_relative_path_tbindir in 3277aa89044Smrg $func_relative_path_tlibdir) 3287aa89044Smrg # found an exact match 3297aa89044Smrg func_relative_path_tcancelled= 3307aa89044Smrg break 3317aa89044Smrg ;; 3327aa89044Smrg $func_relative_path_tlibdir*) 3337aa89044Smrg # found a matching prefix 3347aa89044Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3357aa89044Smrg func_relative_path_tcancelled=$func_stripname_result 3367aa89044Smrg if test -z "$func_relative_path_result"; then 3377aa89044Smrg func_relative_path_result=. 3387aa89044Smrg fi 3397aa89044Smrg break 3407aa89044Smrg ;; 3417aa89044Smrg *) 3427aa89044Smrg func_dirname $func_relative_path_tlibdir 3437aa89044Smrg func_relative_path_tlibdir=${func_dirname_result} 3447aa89044Smrg if test "x$func_relative_path_tlibdir" = x ; then 3457aa89044Smrg # Have to descend all the way to the root! 3467aa89044Smrg func_relative_path_result=../$func_relative_path_result 3477aa89044Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 3487aa89044Smrg break 3497aa89044Smrg fi 3507aa89044Smrg func_relative_path_result=../$func_relative_path_result 3517aa89044Smrg ;; 3527aa89044Smrg esac 3537aa89044Smrg done 3547aa89044Smrg 3557aa89044Smrg # Now calculate path; take care to avoid doubling-up slashes. 3567aa89044Smrg func_stripname '' '/' "$func_relative_path_result" 3577aa89044Smrg func_relative_path_result=$func_stripname_result 3587aa89044Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3597aa89044Smrg if test "x$func_stripname_result" != x ; then 3607aa89044Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3617aa89044Smrg fi 3627aa89044Smrg 3637aa89044Smrg # Normalisation. If bindir is libdir, return empty string, 3647aa89044Smrg # else relative path ending with a slash; either way, target 3657aa89044Smrg # file name can be directly appended. 3667aa89044Smrg if test ! -z "$func_relative_path_result"; then 3677aa89044Smrg func_stripname './' '' "$func_relative_path_result/" 3687aa89044Smrg func_relative_path_result=$func_stripname_result 3697aa89044Smrg fi 3707aa89044Smrg} 37149dc963fSmrg 37249dc963fSmrg# The name of this program: 37349dc963fSmrgfunc_dirname_and_basename "$progpath" 37449dc963fSmrgprogname=$func_basename_result 37549dc963fSmrg 37649dc963fSmrg# Make sure we have an absolute path for reexecution: 37749dc963fSmrgcase $progpath in 37849dc963fSmrg [\\/]*|[A-Za-z]:\\*) ;; 37949dc963fSmrg *[\\/]*) 38049dc963fSmrg progdir=$func_dirname_result 38149dc963fSmrg progdir=`cd "$progdir" && pwd` 38249dc963fSmrg progpath="$progdir/$progname" 38349dc963fSmrg ;; 38449dc963fSmrg *) 38549dc963fSmrg save_IFS="$IFS" 3864e7590efSmrg IFS=${PATH_SEPARATOR-:} 38749dc963fSmrg for progdir in $PATH; do 38849dc963fSmrg IFS="$save_IFS" 38949dc963fSmrg test -x "$progdir/$progname" && break 39049dc963fSmrg done 39149dc963fSmrg IFS="$save_IFS" 39249dc963fSmrg test -n "$progdir" || progdir=`pwd` 39349dc963fSmrg progpath="$progdir/$progname" 39449dc963fSmrg ;; 39549dc963fSmrgesac 39649dc963fSmrg 39749dc963fSmrg# Sed substitution that helps us do robust quoting. It backslashifies 39849dc963fSmrg# metacharacters that are still active within double-quoted strings. 39949dc963fSmrgXsed="${SED}"' -e 1s/^X//' 40049dc963fSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 40149dc963fSmrg 40249dc963fSmrg# Same as above, but do not quote variable references. 40349dc963fSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 40449dc963fSmrg 4054e7590efSmrg# Sed substitution that turns a string into a regex matching for the 4064e7590efSmrg# string literally. 4074e7590efSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 4084e7590efSmrg 4094e7590efSmrg# Sed substitution that converts a w32 file name or path 4104e7590efSmrg# which contains forward slashes, into one that contains 4114e7590efSmrg# (escaped) backslashes. A very naive implementation. 4124e7590efSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 4134e7590efSmrg 41449dc963fSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 41549dc963fSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 41649dc963fSmrg# in input to double_quote_subst, that '$' was protected from expansion. 41749dc963fSmrg# Since each input `\' is now two `\'s, look for any number of runs of 41849dc963fSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 41949dc963fSmrgbs='\\' 42049dc963fSmrgbs2='\\\\' 42149dc963fSmrgbs4='\\\\\\\\' 42249dc963fSmrgdollar='\$' 42349dc963fSmrgsed_double_backslash="\ 42449dc963fSmrg s/$bs4/&\\ 42549dc963fSmrg/g 42649dc963fSmrg s/^$bs2$dollar/$bs&/ 42749dc963fSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 42849dc963fSmrg s/\n//g" 42949dc963fSmrg 43049dc963fSmrg# Standard options: 43149dc963fSmrgopt_dry_run=false 43249dc963fSmrgopt_help=false 43349dc963fSmrgopt_quiet=false 43449dc963fSmrgopt_verbose=false 43549dc963fSmrgopt_warning=: 43649dc963fSmrg 43749dc963fSmrg# func_echo arg... 43849dc963fSmrg# Echo program name prefixed message, along with the current mode 43949dc963fSmrg# name if it has been set yet. 44049dc963fSmrgfunc_echo () 44149dc963fSmrg{ 4424e7590efSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 44349dc963fSmrg} 44449dc963fSmrg 44549dc963fSmrg# func_verbose arg... 44649dc963fSmrg# Echo program name prefixed message in verbose mode only. 44749dc963fSmrgfunc_verbose () 44849dc963fSmrg{ 44949dc963fSmrg $opt_verbose && func_echo ${1+"$@"} 45049dc963fSmrg 45149dc963fSmrg # A bug in bash halts the script if the last line of a function 45249dc963fSmrg # fails when set -e is in force, so we need another command to 45349dc963fSmrg # work around that: 45449dc963fSmrg : 45549dc963fSmrg} 45649dc963fSmrg 4577aa89044Smrg# func_echo_all arg... 4587aa89044Smrg# Invoke $ECHO with all args, space-separated. 4597aa89044Smrgfunc_echo_all () 4607aa89044Smrg{ 4617aa89044Smrg $ECHO "$*" 4627aa89044Smrg} 4637aa89044Smrg 46449dc963fSmrg# func_error arg... 46549dc963fSmrg# Echo program name prefixed message to standard error. 46649dc963fSmrgfunc_error () 46749dc963fSmrg{ 4684e7590efSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 46949dc963fSmrg} 47049dc963fSmrg 47149dc963fSmrg# func_warning arg... 47249dc963fSmrg# Echo program name prefixed warning message to standard error. 47349dc963fSmrgfunc_warning () 47449dc963fSmrg{ 4754e7590efSmrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 47649dc963fSmrg 47749dc963fSmrg # bash bug again: 47849dc963fSmrg : 47949dc963fSmrg} 48049dc963fSmrg 48149dc963fSmrg# func_fatal_error arg... 48249dc963fSmrg# Echo program name prefixed message to standard error, and exit. 48349dc963fSmrgfunc_fatal_error () 48449dc963fSmrg{ 48549dc963fSmrg func_error ${1+"$@"} 48649dc963fSmrg exit $EXIT_FAILURE 48749dc963fSmrg} 48849dc963fSmrg 48949dc963fSmrg# func_fatal_help arg... 49049dc963fSmrg# Echo program name prefixed message to standard error, followed by 49149dc963fSmrg# a help hint, and exit. 49249dc963fSmrgfunc_fatal_help () 49349dc963fSmrg{ 49449dc963fSmrg func_error ${1+"$@"} 49549dc963fSmrg func_fatal_error "$help" 49649dc963fSmrg} 49749dc963fSmrghelp="Try \`$progname --help' for more information." ## default 49849dc963fSmrg 49949dc963fSmrg 50049dc963fSmrg# func_grep expression filename 50149dc963fSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 50249dc963fSmrgfunc_grep () 50349dc963fSmrg{ 50449dc963fSmrg $GREP "$1" "$2" >/dev/null 2>&1 50549dc963fSmrg} 50649dc963fSmrg 50749dc963fSmrg 50849dc963fSmrg# func_mkdir_p directory-path 50949dc963fSmrg# Make sure the entire path to DIRECTORY-PATH is available. 51049dc963fSmrgfunc_mkdir_p () 51149dc963fSmrg{ 51249dc963fSmrg my_directory_path="$1" 51349dc963fSmrg my_dir_list= 51449dc963fSmrg 51549dc963fSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 51649dc963fSmrg 51749dc963fSmrg # Protect directory names starting with `-' 51849dc963fSmrg case $my_directory_path in 51949dc963fSmrg -*) my_directory_path="./$my_directory_path" ;; 52049dc963fSmrg esac 52149dc963fSmrg 52249dc963fSmrg # While some portion of DIR does not yet exist... 52349dc963fSmrg while test ! -d "$my_directory_path"; do 52449dc963fSmrg # ...make a list in topmost first order. Use a colon delimited 52549dc963fSmrg # list incase some portion of path contains whitespace. 52649dc963fSmrg my_dir_list="$my_directory_path:$my_dir_list" 52749dc963fSmrg 52849dc963fSmrg # If the last portion added has no slash in it, the list is done 52949dc963fSmrg case $my_directory_path in */*) ;; *) break ;; esac 53049dc963fSmrg 53149dc963fSmrg # ...otherwise throw away the child directory and loop 5327aa89044Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 53349dc963fSmrg done 5347aa89044Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 53549dc963fSmrg 53649dc963fSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 53749dc963fSmrg for my_dir in $my_dir_list; do 53849dc963fSmrg IFS="$save_mkdir_p_IFS" 53949dc963fSmrg # mkdir can fail with a `File exist' error if two processes 54049dc963fSmrg # try to create one of the directories concurrently. Don't 54149dc963fSmrg # stop in that case! 54249dc963fSmrg $MKDIR "$my_dir" 2>/dev/null || : 54349dc963fSmrg done 54449dc963fSmrg IFS="$save_mkdir_p_IFS" 54549dc963fSmrg 54649dc963fSmrg # Bail out if we (or some other process) failed to create a directory. 54749dc963fSmrg test -d "$my_directory_path" || \ 54849dc963fSmrg func_fatal_error "Failed to create \`$1'" 54949dc963fSmrg fi 55049dc963fSmrg} 5514b0ead49Smrg 5524b0ead49Smrg 5534b0ead49Smrg# func_mktempdir [string] 5544b0ead49Smrg# Make a temporary directory that won't clash with other running 5554b0ead49Smrg# libtool processes, and avoids race conditions if possible. If 5564b0ead49Smrg# given, STRING is the basename for that directory. 5574b0ead49Smrgfunc_mktempdir () 5584b0ead49Smrg{ 5594b0ead49Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 5604b0ead49Smrg 56149dc963fSmrg if test "$opt_dry_run" = ":"; then 5624b0ead49Smrg # Return a directory name, but don't create it in dry-run mode 5634b0ead49Smrg my_tmpdir="${my_template}-$$" 5644b0ead49Smrg else 5654b0ead49Smrg 5664b0ead49Smrg # If mktemp works, use that first and foremost 5674b0ead49Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 5684b0ead49Smrg 5694b0ead49Smrg if test ! -d "$my_tmpdir"; then 57049dc963fSmrg # Failing that, at least try and use $RANDOM to avoid a race 57149dc963fSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 5724b0ead49Smrg 57349dc963fSmrg save_mktempdir_umask=`umask` 57449dc963fSmrg umask 0077 57549dc963fSmrg $MKDIR "$my_tmpdir" 57649dc963fSmrg umask $save_mktempdir_umask 5774b0ead49Smrg fi 5784b0ead49Smrg 5794b0ead49Smrg # If we're not in dry-run mode, bomb out on failure 58049dc963fSmrg test -d "$my_tmpdir" || \ 58149dc963fSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 5824b0ead49Smrg fi 5834b0ead49Smrg 5847aa89044Smrg $ECHO "$my_tmpdir" 5854b0ead49Smrg} 5864b0ead49Smrg 5874b0ead49Smrg 58849dc963fSmrg# func_quote_for_eval arg 58949dc963fSmrg# Aesthetically quote ARG to be evaled later. 59049dc963fSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 59149dc963fSmrg# is double-quoted, suitable for a subsequent eval, whereas 59249dc963fSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 59349dc963fSmrg# which are still active within double quotes backslashified. 59449dc963fSmrgfunc_quote_for_eval () 5954b0ead49Smrg{ 59649dc963fSmrg case $1 in 59749dc963fSmrg *[\\\`\"\$]*) 5987aa89044Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 59949dc963fSmrg *) 60049dc963fSmrg func_quote_for_eval_unquoted_result="$1" ;; 60149dc963fSmrg esac 60249dc963fSmrg 60349dc963fSmrg case $func_quote_for_eval_unquoted_result in 60449dc963fSmrg # Double-quote args containing shell metacharacters to delay 60549dc963fSmrg # word splitting, command substitution and and variable 60649dc963fSmrg # expansion for a subsequent eval. 60749dc963fSmrg # Many Bourne shells cannot handle close brackets correctly 60849dc963fSmrg # in scan sets, so we specify it separately. 60949dc963fSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 61049dc963fSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 61149dc963fSmrg ;; 61249dc963fSmrg *) 61349dc963fSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 6144b0ead49Smrg esac 6154b0ead49Smrg} 6164b0ead49Smrg 6174b0ead49Smrg 61849dc963fSmrg# func_quote_for_expand arg 61949dc963fSmrg# Aesthetically quote ARG to be evaled later; same as above, 62049dc963fSmrg# but do not quote variable references. 62149dc963fSmrgfunc_quote_for_expand () 6224b0ead49Smrg{ 62349dc963fSmrg case $1 in 62449dc963fSmrg *[\\\`\"]*) 6257aa89044Smrg my_arg=`$ECHO "$1" | $SED \ 62649dc963fSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 6274b0ead49Smrg *) 62849dc963fSmrg my_arg="$1" ;; 62949dc963fSmrg esac 63049dc963fSmrg 63149dc963fSmrg case $my_arg in 63249dc963fSmrg # Double-quote args containing shell metacharacters to delay 63349dc963fSmrg # word splitting and command substitution for a subsequent eval. 63449dc963fSmrg # Many Bourne shells cannot handle close brackets correctly 63549dc963fSmrg # in scan sets, so we specify it separately. 63649dc963fSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 63749dc963fSmrg my_arg="\"$my_arg\"" 63849dc963fSmrg ;; 63949dc963fSmrg esac 64049dc963fSmrg 64149dc963fSmrg func_quote_for_expand_result="$my_arg" 6424b0ead49Smrg} 6434b0ead49Smrg 6444b0ead49Smrg 64549dc963fSmrg# func_show_eval cmd [fail_exp] 64649dc963fSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 64749dc963fSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 64849dc963fSmrg# is given, then evaluate it. 64949dc963fSmrgfunc_show_eval () 6504b0ead49Smrg{ 65149dc963fSmrg my_cmd="$1" 65249dc963fSmrg my_fail_exp="${2-:}" 6534b0ead49Smrg 65449dc963fSmrg ${opt_silent-false} || { 65549dc963fSmrg func_quote_for_expand "$my_cmd" 65649dc963fSmrg eval "func_echo $func_quote_for_expand_result" 65749dc963fSmrg } 65849dc963fSmrg 65949dc963fSmrg if ${opt_dry_run-false}; then :; else 66049dc963fSmrg eval "$my_cmd" 66149dc963fSmrg my_status=$? 66249dc963fSmrg if test "$my_status" -eq 0; then :; else 66349dc963fSmrg eval "(exit $my_status); $my_fail_exp" 66449dc963fSmrg fi 6654b0ead49Smrg fi 6664b0ead49Smrg} 6674b0ead49Smrg 66849dc963fSmrg 66949dc963fSmrg# func_show_eval_locale cmd [fail_exp] 67049dc963fSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 67149dc963fSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 67249dc963fSmrg# is given, then evaluate it. Use the saved locale for evaluation. 67349dc963fSmrgfunc_show_eval_locale () 6744b0ead49Smrg{ 67549dc963fSmrg my_cmd="$1" 67649dc963fSmrg my_fail_exp="${2-:}" 67749dc963fSmrg 67849dc963fSmrg ${opt_silent-false} || { 67949dc963fSmrg func_quote_for_expand "$my_cmd" 68049dc963fSmrg eval "func_echo $func_quote_for_expand_result" 68149dc963fSmrg } 68249dc963fSmrg 68349dc963fSmrg if ${opt_dry_run-false}; then :; else 68449dc963fSmrg eval "$lt_user_locale 68549dc963fSmrg $my_cmd" 68649dc963fSmrg my_status=$? 68749dc963fSmrg eval "$lt_safe_locale" 68849dc963fSmrg if test "$my_status" -eq 0; then :; else 68949dc963fSmrg eval "(exit $my_status); $my_fail_exp" 69049dc963fSmrg fi 6914b0ead49Smrg fi 69249dc963fSmrg} 6934b0ead49Smrg 6944e7590efSmrg# func_tr_sh 6954e7590efSmrg# Turn $1 into a string suitable for a shell variable name. 6964e7590efSmrg# Result is stored in $func_tr_sh_result. All characters 6974e7590efSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 6984e7590efSmrg# if $1 begins with a digit, a '_' is prepended as well. 6994e7590efSmrgfunc_tr_sh () 7004e7590efSmrg{ 7014e7590efSmrg case $1 in 7024e7590efSmrg [0-9]* | *[!a-zA-Z0-9_]*) 7034e7590efSmrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 7044e7590efSmrg ;; 7054e7590efSmrg * ) 7064e7590efSmrg func_tr_sh_result=$1 7074e7590efSmrg ;; 7084e7590efSmrg esac 7094e7590efSmrg} 7104e7590efSmrg 7114b0ead49Smrg 71249dc963fSmrg# func_version 71349dc963fSmrg# Echo version message to standard output and exit. 71449dc963fSmrgfunc_version () 71549dc963fSmrg{ 7164e7590efSmrg $opt_debug 7174e7590efSmrg 7187aa89044Smrg $SED -n '/(C)/!b go 7197aa89044Smrg :more 7207aa89044Smrg /\./!{ 7217aa89044Smrg N 7227aa89044Smrg s/\n# / / 7237aa89044Smrg b more 7247aa89044Smrg } 7257aa89044Smrg :go 7267aa89044Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 72749dc963fSmrg s/^# // 72849dc963fSmrg s/^# *$// 72949dc963fSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 73049dc963fSmrg p 73149dc963fSmrg }' < "$progpath" 73249dc963fSmrg exit $? 73349dc963fSmrg} 73449dc963fSmrg 73549dc963fSmrg# func_usage 73649dc963fSmrg# Echo short help message to standard output and exit. 73749dc963fSmrgfunc_usage () 73849dc963fSmrg{ 7394e7590efSmrg $opt_debug 7404e7590efSmrg 7417aa89044Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 74249dc963fSmrg s/^# // 74349dc963fSmrg s/^# *$// 74449dc963fSmrg s/\$progname/'$progname'/ 74549dc963fSmrg p 74649dc963fSmrg }' < "$progpath" 7477aa89044Smrg echo 74849dc963fSmrg $ECHO "run \`$progname --help | more' for full usage" 74949dc963fSmrg exit $? 75049dc963fSmrg} 75149dc963fSmrg 7527aa89044Smrg# func_help [NOEXIT] 7537aa89044Smrg# Echo long help message to standard output and exit, 7547aa89044Smrg# unless 'noexit' is passed as argument. 75549dc963fSmrgfunc_help () 75649dc963fSmrg{ 7574e7590efSmrg $opt_debug 7584e7590efSmrg 75949dc963fSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 7604e7590efSmrg :print 76149dc963fSmrg s/^# // 76249dc963fSmrg s/^# *$// 76349dc963fSmrg s*\$progname*'$progname'* 76449dc963fSmrg s*\$host*'"$host"'* 76549dc963fSmrg s*\$SHELL*'"$SHELL"'* 76649dc963fSmrg s*\$LTCC*'"$LTCC"'* 76749dc963fSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 76849dc963fSmrg s*\$LD*'"$LD"'* 76949dc963fSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 7704e7590efSmrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 7714e7590efSmrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 77249dc963fSmrg p 7734e7590efSmrg d 7744e7590efSmrg } 7754e7590efSmrg /^# .* home page:/b print 7764e7590efSmrg /^# General help using/b print 7774e7590efSmrg ' < "$progpath" 7787aa89044Smrg ret=$? 7797aa89044Smrg if test -z "$1"; then 7807aa89044Smrg exit $ret 7817aa89044Smrg fi 78249dc963fSmrg} 78349dc963fSmrg 78449dc963fSmrg# func_missing_arg argname 78549dc963fSmrg# Echo program name prefixed message to standard error and set global 78649dc963fSmrg# exit_cmd. 78749dc963fSmrgfunc_missing_arg () 78849dc963fSmrg{ 7894e7590efSmrg $opt_debug 7904e7590efSmrg 7917aa89044Smrg func_error "missing argument for $1." 79249dc963fSmrg exit_cmd=exit 7934b0ead49Smrg} 7944b0ead49Smrg 7954b0ead49Smrg 7964e7590efSmrg# func_split_short_opt shortopt 7974e7590efSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 7984e7590efSmrg# variables after splitting SHORTOPT after the 2nd character. 7994e7590efSmrgfunc_split_short_opt () 8004e7590efSmrg{ 8014e7590efSmrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 8024e7590efSmrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 8034e7590efSmrg 8044e7590efSmrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 8054e7590efSmrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 8064e7590efSmrg} # func_split_short_opt may be replaced by extended shell implementation 8074e7590efSmrg 8084e7590efSmrg 8094e7590efSmrg# func_split_long_opt longopt 8104e7590efSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 8114e7590efSmrg# variables after splitting LONGOPT at the `=' sign. 8124e7590efSmrgfunc_split_long_opt () 8134e7590efSmrg{ 8144e7590efSmrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 8154e7590efSmrg my_sed_long_arg='1s/^--[^=]*=//' 8164e7590efSmrg 8174e7590efSmrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 8184e7590efSmrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 8194e7590efSmrg} # func_split_long_opt may be replaced by extended shell implementation 8204e7590efSmrg 8214e7590efSmrgexit_cmd=: 8224b0ead49Smrg 82349dc963fSmrg 82449dc963fSmrg 82549dc963fSmrg 8264b0ead49Smrg 82749dc963fSmrgmagic="%%%MAGIC variable%%%" 82849dc963fSmrgmagic_exe="%%%MAGIC EXE variable%%%" 8294b0ead49Smrg 83049dc963fSmrg# Global variables. 83149dc963fSmrgnonopt= 83249dc963fSmrgpreserve_args= 83349dc963fSmrglo2o="s/\\.lo\$/.${objext}/" 83449dc963fSmrgo2lo="s/\\.${objext}\$/.lo/" 83549dc963fSmrgextracted_archives= 83649dc963fSmrgextracted_serial=0 8374b0ead49Smrg 83849dc963fSmrg# If this variable is set in any of the actions, the command in it 83949dc963fSmrg# will be execed at the end. This prevents here-documents from being 84049dc963fSmrg# left over by shells. 84149dc963fSmrgexec_cmd= 84249dc963fSmrg 8434e7590efSmrg# func_append var value 8444e7590efSmrg# Append VALUE to the end of shell variable VAR. 8454e7590efSmrgfunc_append () 8464e7590efSmrg{ 8474e7590efSmrg eval "${1}=\$${1}\${2}" 8484e7590efSmrg} # func_append may be replaced by extended shell implementation 8494e7590efSmrg 8504e7590efSmrg# func_append_quoted var value 8514e7590efSmrg# Quote VALUE and append to the end of shell variable VAR, separated 8524e7590efSmrg# by a space. 8534e7590efSmrgfunc_append_quoted () 8544e7590efSmrg{ 8554e7590efSmrg func_quote_for_eval "${2}" 8564e7590efSmrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 8574e7590efSmrg} # func_append_quoted may be replaced by extended shell implementation 8584e7590efSmrg 8594e7590efSmrg 8604e7590efSmrg# func_arith arithmetic-term... 8614e7590efSmrgfunc_arith () 8624e7590efSmrg{ 8634e7590efSmrg func_arith_result=`expr "${@}"` 8644e7590efSmrg} # func_arith may be replaced by extended shell implementation 8654e7590efSmrg 8664e7590efSmrg 8674e7590efSmrg# func_len string 8684e7590efSmrg# STRING may not start with a hyphen. 8694e7590efSmrgfunc_len () 8704e7590efSmrg{ 8714e7590efSmrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 8724e7590efSmrg} # func_len may be replaced by extended shell implementation 8734e7590efSmrg 8744e7590efSmrg 8754e7590efSmrg# func_lo2o object 8764e7590efSmrgfunc_lo2o () 8774e7590efSmrg{ 8784e7590efSmrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 8794e7590efSmrg} # func_lo2o may be replaced by extended shell implementation 8804e7590efSmrg 8814e7590efSmrg 8824e7590efSmrg# func_xform libobj-or-source 8834e7590efSmrgfunc_xform () 8844e7590efSmrg{ 8854e7590efSmrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 8864e7590efSmrg} # func_xform may be replaced by extended shell implementation 8874e7590efSmrg 8884e7590efSmrg 88949dc963fSmrg# func_fatal_configuration arg... 89049dc963fSmrg# Echo program name prefixed message to standard error, followed by 89149dc963fSmrg# a configuration failure hint, and exit. 89249dc963fSmrgfunc_fatal_configuration () 89349dc963fSmrg{ 89449dc963fSmrg func_error ${1+"$@"} 89549dc963fSmrg func_error "See the $PACKAGE documentation for more information." 89649dc963fSmrg func_fatal_error "Fatal configuration error." 89749dc963fSmrg} 8984b0ead49Smrg 89952b01e16Smrg 90049dc963fSmrg# func_config 90149dc963fSmrg# Display the configuration for all the tags in this script. 90249dc963fSmrgfunc_config () 90349dc963fSmrg{ 90449dc963fSmrg re_begincf='^# ### BEGIN LIBTOOL' 90549dc963fSmrg re_endcf='^# ### END LIBTOOL' 90649dc963fSmrg 90749dc963fSmrg # Default configuration. 90849dc963fSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 9094b0ead49Smrg 9104b0ead49Smrg # Now print the configurations for the tags. 9114b0ead49Smrg for tagname in $taglist; do 91249dc963fSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 9134b0ead49Smrg done 9144b0ead49Smrg 91549dc963fSmrg exit $? 91649dc963fSmrg} 9174b0ead49Smrg 91849dc963fSmrg# func_features 91949dc963fSmrg# Display the features supported by this script. 92049dc963fSmrgfunc_features () 92149dc963fSmrg{ 9227aa89044Smrg echo "host: $host" 9234b0ead49Smrg if test "$build_libtool_libs" = yes; then 9247aa89044Smrg echo "enable shared libraries" 9254b0ead49Smrg else 9267aa89044Smrg echo "disable shared libraries" 9274b0ead49Smrg fi 9284b0ead49Smrg if test "$build_old_libs" = yes; then 9297aa89044Smrg echo "enable static libraries" 9304b0ead49Smrg else 9317aa89044Smrg echo "disable static libraries" 9324b0ead49Smrg fi 93349dc963fSmrg 9344b0ead49Smrg exit $? 93549dc963fSmrg} 9364b0ead49Smrg 93749dc963fSmrg# func_enable_tag tagname 93849dc963fSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 93949dc963fSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 94049dc963fSmrg# variable here. 94149dc963fSmrgfunc_enable_tag () 94249dc963fSmrg{ 94349dc963fSmrg # Global variable: 94449dc963fSmrg tagname="$1" 9454b0ead49Smrg 94649dc963fSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 94749dc963fSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 94849dc963fSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 9494b0ead49Smrg 95049dc963fSmrg # Validate tagname. 95149dc963fSmrg case $tagname in 95249dc963fSmrg *[!-_A-Za-z0-9,/]*) 95349dc963fSmrg func_fatal_error "invalid tag name: $tagname" 95449dc963fSmrg ;; 95549dc963fSmrg esac 9564b0ead49Smrg 95749dc963fSmrg # Don't test for the "default" C tag, as we know it's 95849dc963fSmrg # there but not specially marked. 95949dc963fSmrg case $tagname in 96049dc963fSmrg CC) ;; 96149dc963fSmrg *) 96249dc963fSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 96349dc963fSmrg taglist="$taglist $tagname" 96449dc963fSmrg 96549dc963fSmrg # Evaluate the configuration. Be careful to quote the path 96649dc963fSmrg # and the sed script, to avoid splitting on whitespace, but 96749dc963fSmrg # also don't use non-portable quotes within backquotes within 96849dc963fSmrg # quotes we have to do it in 2 steps: 96949dc963fSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 97049dc963fSmrg eval "$extractedcf" 97149dc963fSmrg else 97249dc963fSmrg func_error "ignoring unknown tag $tagname" 97349dc963fSmrg fi 97449dc963fSmrg ;; 97549dc963fSmrg esac 97649dc963fSmrg} 97749dc963fSmrg 9784e7590efSmrg# func_check_version_match 9794e7590efSmrg# Ensure that we are using m4 macros, and libtool script from the same 9804e7590efSmrg# release of libtool. 9814e7590efSmrgfunc_check_version_match () 98249dc963fSmrg{ 9834e7590efSmrg if test "$package_revision" != "$macro_revision"; then 9844e7590efSmrg if test "$VERSION" != "$macro_version"; then 9854e7590efSmrg if test -z "$macro_version"; then 9864e7590efSmrg cat >&2 <<_LT_EOF 9874e7590efSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9884e7590efSmrg$progname: definition of this LT_INIT comes from an older release. 9894e7590efSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9904e7590efSmrg$progname: and run autoconf again. 9914e7590efSmrg_LT_EOF 9924e7590efSmrg else 9934e7590efSmrg cat >&2 <<_LT_EOF 9944e7590efSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9954e7590efSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 9964e7590efSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9974e7590efSmrg$progname: and run autoconf again. 9984e7590efSmrg_LT_EOF 9994e7590efSmrg fi 10004e7590efSmrg else 10014e7590efSmrg cat >&2 <<_LT_EOF 10024e7590efSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 10034e7590efSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 10044e7590efSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 10054e7590efSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 10064e7590efSmrg_LT_EOF 10074e7590efSmrg fi 10084e7590efSmrg 10094e7590efSmrg exit $EXIT_MISMATCH 10104e7590efSmrg fi 10114e7590efSmrg} 10124e7590efSmrg 10134e7590efSmrg 10144e7590efSmrg# Shorthand for --mode=foo, only valid as the first argument 10154e7590efSmrgcase $1 in 10164e7590efSmrgclean|clea|cle|cl) 10174e7590efSmrg shift; set dummy --mode clean ${1+"$@"}; shift 10184e7590efSmrg ;; 10194e7590efSmrgcompile|compil|compi|comp|com|co|c) 10204e7590efSmrg shift; set dummy --mode compile ${1+"$@"}; shift 10214e7590efSmrg ;; 10224e7590efSmrgexecute|execut|execu|exec|exe|ex|e) 10234e7590efSmrg shift; set dummy --mode execute ${1+"$@"}; shift 10244e7590efSmrg ;; 10254e7590efSmrgfinish|finis|fini|fin|fi|f) 10264e7590efSmrg shift; set dummy --mode finish ${1+"$@"}; shift 10274e7590efSmrg ;; 10284e7590efSmrginstall|instal|insta|inst|ins|in|i) 10294e7590efSmrg shift; set dummy --mode install ${1+"$@"}; shift 10304e7590efSmrg ;; 10314e7590efSmrglink|lin|li|l) 10324e7590efSmrg shift; set dummy --mode link ${1+"$@"}; shift 10334e7590efSmrg ;; 10344e7590efSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 10354e7590efSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 10364e7590efSmrg ;; 10374e7590efSmrgesac 10384e7590efSmrg 10394e7590efSmrg 10404e7590efSmrg 10414e7590efSmrg# Option defaults: 10424e7590efSmrgopt_debug=: 10434e7590efSmrgopt_dry_run=false 10444e7590efSmrgopt_config=false 10454e7590efSmrgopt_preserve_dup_deps=false 10464e7590efSmrgopt_features=false 10474e7590efSmrgopt_finish=false 10484e7590efSmrgopt_help=false 10494e7590efSmrgopt_help_all=false 10504e7590efSmrgopt_silent=: 10514e7590efSmrgopt_warning=: 10524e7590efSmrgopt_verbose=: 10534e7590efSmrgopt_silent=false 10544e7590efSmrgopt_verbose=false 10554b0ead49Smrg 10564b0ead49Smrg 10574e7590efSmrg# Parse options once, thoroughly. This comes as soon as possible in the 10584e7590efSmrg# script to make things like `--version' happen as quickly as we can. 10594e7590efSmrg{ 10604e7590efSmrg # this just eases exit handling 10614e7590efSmrg while test $# -gt 0; do 106249dc963fSmrg opt="$1" 106349dc963fSmrg shift 106449dc963fSmrg case $opt in 10654e7590efSmrg --debug|-x) opt_debug='set -x' 106649dc963fSmrg func_echo "enabling shell trace mode" 106749dc963fSmrg $opt_debug 106849dc963fSmrg ;; 10694e7590efSmrg --dry-run|--dryrun|-n) 10704e7590efSmrg opt_dry_run=: 107149dc963fSmrg ;; 10724e7590efSmrg --config) 10734e7590efSmrg opt_config=: 10744e7590efSmrgfunc_config 10754e7590efSmrg ;; 10764e7590efSmrg --dlopen|-dlopen) 10774e7590efSmrg optarg="$1" 10784e7590efSmrg opt_dlopen="${opt_dlopen+$opt_dlopen 10794e7590efSmrg}$optarg" 108049dc963fSmrg shift 108149dc963fSmrg ;; 108249dc963fSmrg --preserve-dup-deps) 10834e7590efSmrg opt_preserve_dup_deps=: 10847aa89044Smrg ;; 10854e7590efSmrg --features) 10864e7590efSmrg opt_features=: 10874e7590efSmrgfunc_features 108849dc963fSmrg ;; 10894e7590efSmrg --finish) 10904e7590efSmrg opt_finish=: 10914e7590efSmrgset dummy --mode finish ${1+"$@"}; shift 10924e7590efSmrg ;; 10934e7590efSmrg --help) 10944e7590efSmrg opt_help=: 10954e7590efSmrg ;; 10964e7590efSmrg --help-all) 10974e7590efSmrg opt_help_all=: 10984e7590efSmrgopt_help=': help-all' 10994e7590efSmrg ;; 11004e7590efSmrg --mode) 11014e7590efSmrg test $# = 0 && func_missing_arg $opt && break 11024e7590efSmrg optarg="$1" 11034e7590efSmrg opt_mode="$optarg" 11044e7590efSmrgcase $optarg in 11054e7590efSmrg # Valid mode arguments: 11064e7590efSmrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 11074e7590efSmrg 11084e7590efSmrg # Catch anything else as an error 11094e7590efSmrg *) func_error "invalid argument for $opt" 11104e7590efSmrg exit_cmd=exit 11114e7590efSmrg break 11124e7590efSmrg ;; 11134e7590efSmrgesac 11144e7590efSmrg shift 11154e7590efSmrg ;; 11164e7590efSmrg --no-silent|--no-quiet) 111749dc963fSmrg opt_silent=false 11184e7590efSmrgfunc_append preserve_args " $opt" 11197aa89044Smrg ;; 11204e7590efSmrg --no-warning|--no-warn) 11214e7590efSmrg opt_warning=false 11224e7590efSmrgfunc_append preserve_args " $opt" 11234e7590efSmrg ;; 11244e7590efSmrg --no-verbose) 11257aa89044Smrg opt_verbose=false 11264e7590efSmrgfunc_append preserve_args " $opt" 112749dc963fSmrg ;; 11284e7590efSmrg --silent|--quiet) 11294e7590efSmrg opt_silent=: 11304e7590efSmrgfunc_append preserve_args " $opt" 11314e7590efSmrg opt_verbose=false 11324e7590efSmrg ;; 11334e7590efSmrg --verbose|-v) 11344e7590efSmrg opt_verbose=: 11354e7590efSmrgfunc_append preserve_args " $opt" 11364e7590efSmrgopt_silent=false 11374e7590efSmrg ;; 11384e7590efSmrg --tag) 11394e7590efSmrg test $# = 0 && func_missing_arg $opt && break 11404e7590efSmrg optarg="$1" 11414e7590efSmrg opt_tag="$optarg" 11424e7590efSmrgfunc_append preserve_args " $opt $optarg" 11434e7590efSmrgfunc_enable_tag "$optarg" 114449dc963fSmrg shift 114549dc963fSmrg ;; 114649dc963fSmrg 11474e7590efSmrg -\?|-h) func_usage ;; 11484e7590efSmrg --help) func_help ;; 11494e7590efSmrg --version) func_version ;; 11504e7590efSmrg 115149dc963fSmrg # Separate optargs to long options: 11524e7590efSmrg --*=*) 11534e7590efSmrg func_split_long_opt "$opt" 11544e7590efSmrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 115549dc963fSmrg shift 115649dc963fSmrg ;; 115749dc963fSmrg 11584e7590efSmrg # Separate non-argument short options: 11594e7590efSmrg -\?*|-h*|-n*|-v*) 11604e7590efSmrg func_split_short_opt "$opt" 11614e7590efSmrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 11624e7590efSmrg shift 116349dc963fSmrg ;; 11644e7590efSmrg 11654e7590efSmrg --) break ;; 11664e7590efSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 11674e7590efSmrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 116849dc963fSmrg esac 116949dc963fSmrg done 117049dc963fSmrg 11714e7590efSmrg # Validate options: 11724e7590efSmrg 11734e7590efSmrg # save first non-option argument 11744e7590efSmrg if test "$#" -gt 0; then 11754e7590efSmrg nonopt="$opt" 11764e7590efSmrg shift 11774e7590efSmrg fi 11784e7590efSmrg 11794e7590efSmrg # preserve --debug 11804e7590efSmrg test "$opt_debug" = : || func_append preserve_args " --debug" 118149dc963fSmrg 118249dc963fSmrg case $host in 118349dc963fSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 118449dc963fSmrg # don't eliminate duplications in $postdeps and $predeps 118549dc963fSmrg opt_duplicate_compiler_generated_deps=: 11864b0ead49Smrg ;; 11874b0ead49Smrg *) 11884e7590efSmrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 118949dc963fSmrg ;; 119049dc963fSmrg esac 11914b0ead49Smrg 11924e7590efSmrg $opt_help || { 11934e7590efSmrg # Sanity checks first: 11944e7590efSmrg func_check_version_match 119549dc963fSmrg 11964e7590efSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 11974e7590efSmrg func_fatal_configuration "not configured to build any kind of library" 119849dc963fSmrg fi 119949dc963fSmrg 12004e7590efSmrg # Darwin sucks 12014e7590efSmrg eval std_shrext=\"$shrext_cmds\" 120249dc963fSmrg 12034e7590efSmrg # Only execute mode is allowed to have -dlopen flags. 12044e7590efSmrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 12054e7590efSmrg func_error "unrecognized option \`-dlopen'" 12064e7590efSmrg $ECHO "$help" 1>&2 12074e7590efSmrg exit $EXIT_FAILURE 12084e7590efSmrg fi 120949dc963fSmrg 12104e7590efSmrg # Change the help message to a mode-specific one. 12114e7590efSmrg generic_help="$help" 12124e7590efSmrg help="Try \`$progname --help --mode=$opt_mode' for more information." 12134e7590efSmrg } 121449dc963fSmrg 121549dc963fSmrg 12164e7590efSmrg # Bail if the options were screwed 12174e7590efSmrg $exit_cmd $EXIT_FAILURE 12184e7590efSmrg} 121949dc963fSmrg 122049dc963fSmrg 12214b0ead49Smrg 12224b0ead49Smrg 12234e7590efSmrg## ----------- ## 12244e7590efSmrg## Main. ## 12254e7590efSmrg## ----------- ## 12264b0ead49Smrg 122749dc963fSmrg# func_lalib_p file 122849dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 122949dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 123049dc963fSmrg# determined imposters. 123149dc963fSmrgfunc_lalib_p () 123249dc963fSmrg{ 123349dc963fSmrg test -f "$1" && 123449dc963fSmrg $SED -e 4q "$1" 2>/dev/null \ 123549dc963fSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 123649dc963fSmrg} 12374b0ead49Smrg 123849dc963fSmrg# func_lalib_unsafe_p file 123949dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 124049dc963fSmrg# This function implements the same check as func_lalib_p without 124149dc963fSmrg# resorting to external programs. To this end, it redirects stdin and 124249dc963fSmrg# closes it afterwards, without saving the original file descriptor. 124349dc963fSmrg# As a safety measure, use it only where a negative result would be 124449dc963fSmrg# fatal anyway. Works if `file' does not exist. 124549dc963fSmrgfunc_lalib_unsafe_p () 124649dc963fSmrg{ 124749dc963fSmrg lalib_p=no 124849dc963fSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 124949dc963fSmrg for lalib_p_l in 1 2 3 4 125049dc963fSmrg do 125149dc963fSmrg read lalib_p_line 125249dc963fSmrg case "$lalib_p_line" in 125349dc963fSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 125449dc963fSmrg esac 125549dc963fSmrg done 125649dc963fSmrg exec 0<&5 5<&- 125749dc963fSmrg fi 125849dc963fSmrg test "$lalib_p" = yes 125949dc963fSmrg} 12604b0ead49Smrg 126149dc963fSmrg# func_ltwrapper_script_p file 126249dc963fSmrg# True iff FILE is a libtool wrapper script 126349dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 126449dc963fSmrg# determined imposters. 126549dc963fSmrgfunc_ltwrapper_script_p () 126649dc963fSmrg{ 126749dc963fSmrg func_lalib_p "$1" 126849dc963fSmrg} 12694b0ead49Smrg 127049dc963fSmrg# func_ltwrapper_executable_p file 127149dc963fSmrg# True iff FILE is a libtool wrapper executable 127249dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 127349dc963fSmrg# determined imposters. 127449dc963fSmrgfunc_ltwrapper_executable_p () 127549dc963fSmrg{ 127649dc963fSmrg func_ltwrapper_exec_suffix= 127749dc963fSmrg case $1 in 127849dc963fSmrg *.exe) ;; 127949dc963fSmrg *) func_ltwrapper_exec_suffix=.exe ;; 128049dc963fSmrg esac 128149dc963fSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 128249dc963fSmrg} 12834b0ead49Smrg 128449dc963fSmrg# func_ltwrapper_scriptname file 128549dc963fSmrg# Assumes file is an ltwrapper_executable 128649dc963fSmrg# uses $file to determine the appropriate filename for a 128749dc963fSmrg# temporary ltwrapper_script. 128849dc963fSmrgfunc_ltwrapper_scriptname () 128949dc963fSmrg{ 12904e7590efSmrg func_dirname_and_basename "$1" "" "." 12914e7590efSmrg func_stripname '' '.exe' "$func_basename_result" 12924e7590efSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 129349dc963fSmrg} 129449dc963fSmrg 129549dc963fSmrg# func_ltwrapper_p file 129649dc963fSmrg# True iff FILE is a libtool wrapper script or wrapper executable 129749dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 129849dc963fSmrg# determined imposters. 129949dc963fSmrgfunc_ltwrapper_p () 130049dc963fSmrg{ 130149dc963fSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 130249dc963fSmrg} 130349dc963fSmrg 130449dc963fSmrg 130549dc963fSmrg# func_execute_cmds commands fail_cmd 130649dc963fSmrg# Execute tilde-delimited COMMANDS. 130749dc963fSmrg# If FAIL_CMD is given, eval that upon failure. 130849dc963fSmrg# FAIL_CMD may read-access the current command in variable CMD! 130949dc963fSmrgfunc_execute_cmds () 131049dc963fSmrg{ 131149dc963fSmrg $opt_debug 131249dc963fSmrg save_ifs=$IFS; IFS='~' 131349dc963fSmrg for cmd in $1; do 131449dc963fSmrg IFS=$save_ifs 131549dc963fSmrg eval cmd=\"$cmd\" 131649dc963fSmrg func_show_eval "$cmd" "${2-:}" 131749dc963fSmrg done 131849dc963fSmrg IFS=$save_ifs 131949dc963fSmrg} 132049dc963fSmrg 132149dc963fSmrg 132249dc963fSmrg# func_source file 132349dc963fSmrg# Source FILE, adding directory component if necessary. 132449dc963fSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 132549dc963fSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 132649dc963fSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 132749dc963fSmrg# `FILE.' does not work on cygwin managed mounts. 132849dc963fSmrgfunc_source () 132949dc963fSmrg{ 133049dc963fSmrg $opt_debug 133149dc963fSmrg case $1 in 133249dc963fSmrg */* | *\\*) . "$1" ;; 133349dc963fSmrg *) . "./$1" ;; 133449dc963fSmrg esac 133549dc963fSmrg} 133649dc963fSmrg 133749dc963fSmrg 13384e7590efSmrg# func_resolve_sysroot PATH 13394e7590efSmrg# Replace a leading = in PATH with a sysroot. Store the result into 13404e7590efSmrg# func_resolve_sysroot_result 13414e7590efSmrgfunc_resolve_sysroot () 13424e7590efSmrg{ 13434e7590efSmrg func_resolve_sysroot_result=$1 13444e7590efSmrg case $func_resolve_sysroot_result in 13454e7590efSmrg =*) 13464e7590efSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 13474e7590efSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 13484e7590efSmrg ;; 13494e7590efSmrg esac 13504e7590efSmrg} 13514e7590efSmrg 13524e7590efSmrg# func_replace_sysroot PATH 13534e7590efSmrg# If PATH begins with the sysroot, replace it with = and 13544e7590efSmrg# store the result into func_replace_sysroot_result. 13554e7590efSmrgfunc_replace_sysroot () 13564e7590efSmrg{ 13574e7590efSmrg case "$lt_sysroot:$1" in 13584e7590efSmrg ?*:"$lt_sysroot"*) 13594e7590efSmrg func_stripname "$lt_sysroot" '' "$1" 13604e7590efSmrg func_replace_sysroot_result="=$func_stripname_result" 13614e7590efSmrg ;; 13624e7590efSmrg *) 13634e7590efSmrg # Including no sysroot. 13644e7590efSmrg func_replace_sysroot_result=$1 13654e7590efSmrg ;; 13664e7590efSmrg esac 13674e7590efSmrg} 13684e7590efSmrg 136949dc963fSmrg# func_infer_tag arg 137049dc963fSmrg# Infer tagged configuration to use if any are available and 137149dc963fSmrg# if one wasn't chosen via the "--tag" command line option. 137249dc963fSmrg# Only attempt this if the compiler in the base compile 137349dc963fSmrg# command doesn't match the default compiler. 137449dc963fSmrg# arg is usually of the form 'gcc ...' 137549dc963fSmrgfunc_infer_tag () 137649dc963fSmrg{ 137749dc963fSmrg $opt_debug 137849dc963fSmrg if test -n "$available_tags" && test -z "$tagname"; then 137949dc963fSmrg CC_quoted= 138049dc963fSmrg for arg in $CC; do 13814e7590efSmrg func_append_quoted CC_quoted "$arg" 138249dc963fSmrg done 13837aa89044Smrg CC_expanded=`func_echo_all $CC` 13847aa89044Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 138549dc963fSmrg case $@ in 138649dc963fSmrg # Blanks in the command may have been stripped by the calling shell, 138749dc963fSmrg # but not from the CC environment variable when configure was run. 13887aa89044Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 13897aa89044Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 139049dc963fSmrg # Blanks at the start of $base_compile will cause this to fail 139149dc963fSmrg # if we don't check for them as well. 139249dc963fSmrg *) 139349dc963fSmrg for z in $available_tags; do 139449dc963fSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 139549dc963fSmrg # Evaluate the configuration. 139649dc963fSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 139749dc963fSmrg CC_quoted= 139849dc963fSmrg for arg in $CC; do 139949dc963fSmrg # Double-quote args containing other shell metacharacters. 14004e7590efSmrg func_append_quoted CC_quoted "$arg" 140149dc963fSmrg done 14027aa89044Smrg CC_expanded=`func_echo_all $CC` 14037aa89044Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 140449dc963fSmrg case "$@ " in 14057aa89044Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 14067aa89044Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 140749dc963fSmrg # The compiler in the base compile command matches 140849dc963fSmrg # the one in the tagged configuration. 140949dc963fSmrg # Assume this is the tagged configuration we want. 141049dc963fSmrg tagname=$z 141149dc963fSmrg break 141249dc963fSmrg ;; 141349dc963fSmrg esac 141449dc963fSmrg fi 141549dc963fSmrg done 141649dc963fSmrg # If $tagname still isn't set, then no tagged configuration 141749dc963fSmrg # was found and let the user know that the "--tag" command 141849dc963fSmrg # line option must be used. 141949dc963fSmrg if test -z "$tagname"; then 142049dc963fSmrg func_echo "unable to infer tagged configuration" 142149dc963fSmrg func_fatal_error "specify a tag with \`--tag'" 142249dc963fSmrg# else 142349dc963fSmrg# func_verbose "using $tagname tagged configuration" 142449dc963fSmrg fi 142549dc963fSmrg ;; 142649dc963fSmrg esac 142749dc963fSmrg fi 142849dc963fSmrg} 142949dc963fSmrg 143049dc963fSmrg 14314e7590efSmrg 14324e7590efSmrg# func_write_libtool_object output_name pic_name nonpic_name 14334e7590efSmrg# Create a libtool object file (analogous to a ".la" file), 14344e7590efSmrg# but don't create it if we're doing a dry run. 14354e7590efSmrgfunc_write_libtool_object () 14364e7590efSmrg{ 14374e7590efSmrg write_libobj=${1} 14384e7590efSmrg if test "$build_libtool_libs" = yes; then 14394e7590efSmrg write_lobj=\'${2}\' 14404e7590efSmrg else 14414e7590efSmrg write_lobj=none 14424e7590efSmrg fi 14434e7590efSmrg 14444e7590efSmrg if test "$build_old_libs" = yes; then 14454e7590efSmrg write_oldobj=\'${3}\' 14464e7590efSmrg else 14474e7590efSmrg write_oldobj=none 14484e7590efSmrg fi 14494e7590efSmrg 14504e7590efSmrg $opt_dry_run || { 14514e7590efSmrg cat >${write_libobj}T <<EOF 14524e7590efSmrg# $write_libobj - a libtool object file 14534e7590efSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 14544e7590efSmrg# 14554e7590efSmrg# Please DO NOT delete this file! 14564e7590efSmrg# It is necessary for linking the library. 14574e7590efSmrg 14584e7590efSmrg# Name of the PIC object. 14594e7590efSmrgpic_object=$write_lobj 14604e7590efSmrg 14614e7590efSmrg# Name of the non-PIC object 14624e7590efSmrgnon_pic_object=$write_oldobj 14634e7590efSmrg 14644e7590efSmrgEOF 14654e7590efSmrg $MV "${write_libobj}T" "${write_libobj}" 14664e7590efSmrg } 14674e7590efSmrg} 14684e7590efSmrg 14694e7590efSmrg 14704e7590efSmrg################################################## 14714e7590efSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 14724e7590efSmrg################################################## 14734e7590efSmrg 14744e7590efSmrg# func_convert_core_file_wine_to_w32 ARG 14754e7590efSmrg# Helper function used by file name conversion functions when $build is *nix, 14764e7590efSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 14774e7590efSmrg# correctly configured wine environment available, with the winepath program 14784e7590efSmrg# in $build's $PATH. 14794e7590efSmrg# 14804e7590efSmrg# ARG is the $build file name to be converted to w32 format. 14814e7590efSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 14824e7590efSmrg# be empty on error (or when ARG is empty) 14834e7590efSmrgfunc_convert_core_file_wine_to_w32 () 14844e7590efSmrg{ 14854e7590efSmrg $opt_debug 14864e7590efSmrg func_convert_core_file_wine_to_w32_result="$1" 14874e7590efSmrg if test -n "$1"; then 14884e7590efSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 14894e7590efSmrg # are forced to check the contents of stdout. On the other hand, if the 14904e7590efSmrg # command is not found, the shell will set an exit code of 127 and print 14914e7590efSmrg # *an error message* to stdout. So we must check for both error code of 14924e7590efSmrg # zero AND non-empty stdout, which explains the odd construction: 14934e7590efSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 14944e7590efSmrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 14954e7590efSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 14964e7590efSmrg $SED -e "$lt_sed_naive_backslashify"` 14974e7590efSmrg else 14984e7590efSmrg func_convert_core_file_wine_to_w32_result= 14994e7590efSmrg fi 15004e7590efSmrg fi 15014e7590efSmrg} 15024e7590efSmrg# end: func_convert_core_file_wine_to_w32 15034e7590efSmrg 15044e7590efSmrg 15054e7590efSmrg# func_convert_core_path_wine_to_w32 ARG 15064e7590efSmrg# Helper function used by path conversion functions when $build is *nix, and 15074e7590efSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 15084e7590efSmrg# configured wine environment available, with the winepath program in $build's 15094e7590efSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 15104e7590efSmrg# 15114e7590efSmrg# ARG is path to be converted from $build format to win32. 15124e7590efSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 15134e7590efSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 15144e7590efSmrg# are convertible, then the result may be empty. 15154e7590efSmrgfunc_convert_core_path_wine_to_w32 () 15164e7590efSmrg{ 15174e7590efSmrg $opt_debug 15184e7590efSmrg # unfortunately, winepath doesn't convert paths, only file names 15194e7590efSmrg func_convert_core_path_wine_to_w32_result="" 15204e7590efSmrg if test -n "$1"; then 15214e7590efSmrg oldIFS=$IFS 15224e7590efSmrg IFS=: 15234e7590efSmrg for func_convert_core_path_wine_to_w32_f in $1; do 15244e7590efSmrg IFS=$oldIFS 15254e7590efSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 15264e7590efSmrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 15274e7590efSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 15284e7590efSmrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 15294e7590efSmrg else 15304e7590efSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 15314e7590efSmrg fi 15324e7590efSmrg fi 15334e7590efSmrg done 15344e7590efSmrg IFS=$oldIFS 15354e7590efSmrg fi 15364e7590efSmrg} 15374e7590efSmrg# end: func_convert_core_path_wine_to_w32 15384e7590efSmrg 15394e7590efSmrg 15404e7590efSmrg# func_cygpath ARGS... 15414e7590efSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 15424e7590efSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 15434e7590efSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 15444e7590efSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 15454e7590efSmrg# file name or path is assumed to be in w32 format, as previously converted 15464e7590efSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 15474e7590efSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 15484e7590efSmrg# Cygwin format). Returns an empty string on error. 15494e7590efSmrg# 15504e7590efSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 15514e7590efSmrg# be converted. 15524e7590efSmrg# 15534e7590efSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 15544e7590efSmrg# environment variable; do not put it in $PATH. 15554e7590efSmrgfunc_cygpath () 15564e7590efSmrg{ 15574e7590efSmrg $opt_debug 15584e7590efSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 15594e7590efSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 15604e7590efSmrg if test "$?" -ne 0; then 15614e7590efSmrg # on failure, ensure result is empty 15624e7590efSmrg func_cygpath_result= 15634e7590efSmrg fi 15644e7590efSmrg else 15654e7590efSmrg func_cygpath_result= 15664e7590efSmrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 15674e7590efSmrg fi 15684e7590efSmrg} 15694e7590efSmrg#end: func_cygpath 15704e7590efSmrg 15714e7590efSmrg 15724e7590efSmrg# func_convert_core_msys_to_w32 ARG 15734e7590efSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 15744e7590efSmrg# result in func_convert_core_msys_to_w32_result. 15754e7590efSmrgfunc_convert_core_msys_to_w32 () 15764e7590efSmrg{ 15774e7590efSmrg $opt_debug 15784e7590efSmrg # awkward: cmd appends spaces to result 15794e7590efSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 15804e7590efSmrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 15814e7590efSmrg} 15824e7590efSmrg#end: func_convert_core_msys_to_w32 15834e7590efSmrg 15844e7590efSmrg 15854e7590efSmrg# func_convert_file_check ARG1 ARG2 15864e7590efSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 15874e7590efSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 15884e7590efSmrg# func_to_host_file_result to ARG1). 15894e7590efSmrgfunc_convert_file_check () 15904e7590efSmrg{ 15914e7590efSmrg $opt_debug 15924e7590efSmrg if test -z "$2" && test -n "$1" ; then 15934e7590efSmrg func_error "Could not determine host file name corresponding to" 15944e7590efSmrg func_error " \`$1'" 15954e7590efSmrg func_error "Continuing, but uninstalled executables may not work." 15964e7590efSmrg # Fallback: 15974e7590efSmrg func_to_host_file_result="$1" 15984e7590efSmrg fi 15994e7590efSmrg} 16004e7590efSmrg# end func_convert_file_check 16014e7590efSmrg 16024e7590efSmrg 16034e7590efSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 16044e7590efSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 16054e7590efSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 16064e7590efSmrg# func_to_host_file_result to a simplistic fallback value (see below). 16074e7590efSmrgfunc_convert_path_check () 16084e7590efSmrg{ 16094e7590efSmrg $opt_debug 16104e7590efSmrg if test -z "$4" && test -n "$3"; then 16114e7590efSmrg func_error "Could not determine the host path corresponding to" 16124e7590efSmrg func_error " \`$3'" 16134e7590efSmrg func_error "Continuing, but uninstalled executables may not work." 16144e7590efSmrg # Fallback. This is a deliberately simplistic "conversion" and 16154e7590efSmrg # should not be "improved". See libtool.info. 16164e7590efSmrg if test "x$1" != "x$2"; then 16174e7590efSmrg lt_replace_pathsep_chars="s|$1|$2|g" 16184e7590efSmrg func_to_host_path_result=`echo "$3" | 16194e7590efSmrg $SED -e "$lt_replace_pathsep_chars"` 16204e7590efSmrg else 16214e7590efSmrg func_to_host_path_result="$3" 16224e7590efSmrg fi 16234e7590efSmrg fi 16244e7590efSmrg} 16254e7590efSmrg# end func_convert_path_check 16264e7590efSmrg 16274e7590efSmrg 16284e7590efSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 16294e7590efSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 16304e7590efSmrg# and appending REPL if ORIG matches BACKPAT. 16314e7590efSmrgfunc_convert_path_front_back_pathsep () 16324e7590efSmrg{ 16334e7590efSmrg $opt_debug 16344e7590efSmrg case $4 in 16354e7590efSmrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 16364e7590efSmrg ;; 16374e7590efSmrg esac 16384e7590efSmrg case $4 in 16394e7590efSmrg $2 ) func_append func_to_host_path_result "$3" 16404e7590efSmrg ;; 16414e7590efSmrg esac 16424e7590efSmrg} 16434e7590efSmrg# end func_convert_path_front_back_pathsep 16444e7590efSmrg 16454e7590efSmrg 16464e7590efSmrg################################################## 16474e7590efSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 16484e7590efSmrg################################################## 16494e7590efSmrg# invoked via `$to_host_file_cmd ARG' 16504e7590efSmrg# 16514e7590efSmrg# In each case, ARG is the path to be converted from $build to $host format. 16524e7590efSmrg# Result will be available in $func_to_host_file_result. 16534e7590efSmrg 16544e7590efSmrg 16554e7590efSmrg# func_to_host_file ARG 16564e7590efSmrg# Converts the file name ARG from $build format to $host format. Return result 16574e7590efSmrg# in func_to_host_file_result. 16584e7590efSmrgfunc_to_host_file () 16594e7590efSmrg{ 16604e7590efSmrg $opt_debug 16614e7590efSmrg $to_host_file_cmd "$1" 16624e7590efSmrg} 16634e7590efSmrg# end func_to_host_file 16644e7590efSmrg 16654e7590efSmrg 16664e7590efSmrg# func_to_tool_file ARG LAZY 16674e7590efSmrg# converts the file name ARG from $build format to toolchain format. Return 16684e7590efSmrg# result in func_to_tool_file_result. If the conversion in use is listed 16694e7590efSmrg# in (the comma separated) LAZY, no conversion takes place. 16704e7590efSmrgfunc_to_tool_file () 16714e7590efSmrg{ 16724e7590efSmrg $opt_debug 16734e7590efSmrg case ,$2, in 16744e7590efSmrg *,"$to_tool_file_cmd",*) 16754e7590efSmrg func_to_tool_file_result=$1 16764e7590efSmrg ;; 16774e7590efSmrg *) 16784e7590efSmrg $to_tool_file_cmd "$1" 16794e7590efSmrg func_to_tool_file_result=$func_to_host_file_result 16804e7590efSmrg ;; 16814e7590efSmrg esac 16824e7590efSmrg} 16834e7590efSmrg# end func_to_tool_file 16844e7590efSmrg 16854e7590efSmrg 16864e7590efSmrg# func_convert_file_noop ARG 16874e7590efSmrg# Copy ARG to func_to_host_file_result. 16884e7590efSmrgfunc_convert_file_noop () 16894e7590efSmrg{ 16904e7590efSmrg func_to_host_file_result="$1" 16914e7590efSmrg} 16924e7590efSmrg# end func_convert_file_noop 16934e7590efSmrg 16944e7590efSmrg 16954e7590efSmrg# func_convert_file_msys_to_w32 ARG 16964e7590efSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 16974e7590efSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 16984e7590efSmrg# func_to_host_file_result. 16994e7590efSmrgfunc_convert_file_msys_to_w32 () 17004e7590efSmrg{ 17014e7590efSmrg $opt_debug 17024e7590efSmrg func_to_host_file_result="$1" 17034e7590efSmrg if test -n "$1"; then 17044e7590efSmrg func_convert_core_msys_to_w32 "$1" 17054e7590efSmrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 17064e7590efSmrg fi 17074e7590efSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17084e7590efSmrg} 17094e7590efSmrg# end func_convert_file_msys_to_w32 17104e7590efSmrg 17114e7590efSmrg 17124e7590efSmrg# func_convert_file_cygwin_to_w32 ARG 17134e7590efSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 17144e7590efSmrg# func_to_host_file_result. 17154e7590efSmrgfunc_convert_file_cygwin_to_w32 () 17164e7590efSmrg{ 17174e7590efSmrg $opt_debug 17184e7590efSmrg func_to_host_file_result="$1" 17194e7590efSmrg if test -n "$1"; then 17204e7590efSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 17214e7590efSmrg # LT_CYGPATH in this case. 17224e7590efSmrg func_to_host_file_result=`cygpath -m "$1"` 17234e7590efSmrg fi 17244e7590efSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17254e7590efSmrg} 17264e7590efSmrg# end func_convert_file_cygwin_to_w32 17274e7590efSmrg 17284e7590efSmrg 17294e7590efSmrg# func_convert_file_nix_to_w32 ARG 17304e7590efSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 17314e7590efSmrg# and a working winepath. Returns result in func_to_host_file_result. 17324e7590efSmrgfunc_convert_file_nix_to_w32 () 17334e7590efSmrg{ 17344e7590efSmrg $opt_debug 17354e7590efSmrg func_to_host_file_result="$1" 17364e7590efSmrg if test -n "$1"; then 17374e7590efSmrg func_convert_core_file_wine_to_w32 "$1" 17384e7590efSmrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 17394e7590efSmrg fi 17404e7590efSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17414e7590efSmrg} 17424e7590efSmrg# end func_convert_file_nix_to_w32 17434e7590efSmrg 17444e7590efSmrg 17454e7590efSmrg# func_convert_file_msys_to_cygwin ARG 17464e7590efSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 17474e7590efSmrg# Returns result in func_to_host_file_result. 17484e7590efSmrgfunc_convert_file_msys_to_cygwin () 17494e7590efSmrg{ 17504e7590efSmrg $opt_debug 17514e7590efSmrg func_to_host_file_result="$1" 17524e7590efSmrg if test -n "$1"; then 17534e7590efSmrg func_convert_core_msys_to_w32 "$1" 17544e7590efSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 17554e7590efSmrg func_to_host_file_result="$func_cygpath_result" 17564e7590efSmrg fi 17574e7590efSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17584e7590efSmrg} 17594e7590efSmrg# end func_convert_file_msys_to_cygwin 17604e7590efSmrg 17614e7590efSmrg 17624e7590efSmrg# func_convert_file_nix_to_cygwin ARG 17634e7590efSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 17644e7590efSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 17654e7590efSmrg# in func_to_host_file_result. 17664e7590efSmrgfunc_convert_file_nix_to_cygwin () 17674e7590efSmrg{ 17684e7590efSmrg $opt_debug 17694e7590efSmrg func_to_host_file_result="$1" 17704e7590efSmrg if test -n "$1"; then 17714e7590efSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 17724e7590efSmrg func_convert_core_file_wine_to_w32 "$1" 17734e7590efSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 17744e7590efSmrg func_to_host_file_result="$func_cygpath_result" 17754e7590efSmrg fi 17764e7590efSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17774e7590efSmrg} 17784e7590efSmrg# end func_convert_file_nix_to_cygwin 17794e7590efSmrg 17804e7590efSmrg 17814e7590efSmrg############################################# 17824e7590efSmrg# $build to $host PATH CONVERSION FUNCTIONS # 17834e7590efSmrg############################################# 17844e7590efSmrg# invoked via `$to_host_path_cmd ARG' 17854e7590efSmrg# 17864e7590efSmrg# In each case, ARG is the path to be converted from $build to $host format. 17874e7590efSmrg# The result will be available in $func_to_host_path_result. 17884e7590efSmrg# 17894e7590efSmrg# Path separators are also converted from $build format to $host format. If 17904e7590efSmrg# ARG begins or ends with a path separator character, it is preserved (but 17914e7590efSmrg# converted to $host format) on output. 17924e7590efSmrg# 17934e7590efSmrg# All path conversion functions are named using the following convention: 17944e7590efSmrg# file name conversion function : func_convert_file_X_to_Y () 17954e7590efSmrg# path conversion function : func_convert_path_X_to_Y () 17964e7590efSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 17974e7590efSmrg# same. If conversion functions are added for new $build/$host combinations, 17984e7590efSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 17994e7590efSmrg# will break. 18004e7590efSmrg 18014e7590efSmrg 18024e7590efSmrg# func_init_to_host_path_cmd 18034e7590efSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 18044e7590efSmrg# appropriate value, based on the value of $to_host_file_cmd. 18054e7590efSmrgto_host_path_cmd= 18064e7590efSmrgfunc_init_to_host_path_cmd () 18074e7590efSmrg{ 18084e7590efSmrg $opt_debug 18094e7590efSmrg if test -z "$to_host_path_cmd"; then 18104e7590efSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 18114e7590efSmrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 18124e7590efSmrg fi 18134e7590efSmrg} 18144e7590efSmrg 18154e7590efSmrg 18164e7590efSmrg# func_to_host_path ARG 18174e7590efSmrg# Converts the path ARG from $build format to $host format. Return result 18184e7590efSmrg# in func_to_host_path_result. 18194e7590efSmrgfunc_to_host_path () 18204e7590efSmrg{ 18214e7590efSmrg $opt_debug 18224e7590efSmrg func_init_to_host_path_cmd 18234e7590efSmrg $to_host_path_cmd "$1" 18244e7590efSmrg} 18254e7590efSmrg# end func_to_host_path 18264e7590efSmrg 18274e7590efSmrg 18284e7590efSmrg# func_convert_path_noop ARG 18294e7590efSmrg# Copy ARG to func_to_host_path_result. 18304e7590efSmrgfunc_convert_path_noop () 18314e7590efSmrg{ 18324e7590efSmrg func_to_host_path_result="$1" 18334e7590efSmrg} 18344e7590efSmrg# end func_convert_path_noop 18354e7590efSmrg 18364e7590efSmrg 18374e7590efSmrg# func_convert_path_msys_to_w32 ARG 18384e7590efSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 18394e7590efSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 18404e7590efSmrg# func_to_host_path_result. 18414e7590efSmrgfunc_convert_path_msys_to_w32 () 18424e7590efSmrg{ 18434e7590efSmrg $opt_debug 18444e7590efSmrg func_to_host_path_result="$1" 18454e7590efSmrg if test -n "$1"; then 18464e7590efSmrg # Remove leading and trailing path separator characters from ARG. MSYS 18474e7590efSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 18484e7590efSmrg # and winepath ignores them completely. 18494e7590efSmrg func_stripname : : "$1" 18504e7590efSmrg func_to_host_path_tmp1=$func_stripname_result 18514e7590efSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 18524e7590efSmrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 18534e7590efSmrg func_convert_path_check : ";" \ 18544e7590efSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18554e7590efSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18564e7590efSmrg fi 18574e7590efSmrg} 18584e7590efSmrg# end func_convert_path_msys_to_w32 18594e7590efSmrg 18604e7590efSmrg 18614e7590efSmrg# func_convert_path_cygwin_to_w32 ARG 18624e7590efSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 18634e7590efSmrg# func_to_host_file_result. 18644e7590efSmrgfunc_convert_path_cygwin_to_w32 () 18654e7590efSmrg{ 18664e7590efSmrg $opt_debug 18674e7590efSmrg func_to_host_path_result="$1" 18684e7590efSmrg if test -n "$1"; then 18694e7590efSmrg # See func_convert_path_msys_to_w32: 18704e7590efSmrg func_stripname : : "$1" 18714e7590efSmrg func_to_host_path_tmp1=$func_stripname_result 18724e7590efSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 18734e7590efSmrg func_convert_path_check : ";" \ 18744e7590efSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18754e7590efSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18764e7590efSmrg fi 18774e7590efSmrg} 18784e7590efSmrg# end func_convert_path_cygwin_to_w32 18794e7590efSmrg 18804e7590efSmrg 18814e7590efSmrg# func_convert_path_nix_to_w32 ARG 18824e7590efSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 18834e7590efSmrg# a working winepath. Returns result in func_to_host_file_result. 18844e7590efSmrgfunc_convert_path_nix_to_w32 () 188549dc963fSmrg{ 18864e7590efSmrg $opt_debug 18874e7590efSmrg func_to_host_path_result="$1" 18884e7590efSmrg if test -n "$1"; then 18894e7590efSmrg # See func_convert_path_msys_to_w32: 18904e7590efSmrg func_stripname : : "$1" 18914e7590efSmrg func_to_host_path_tmp1=$func_stripname_result 18924e7590efSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 18934e7590efSmrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 18944e7590efSmrg func_convert_path_check : ";" \ 18954e7590efSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18964e7590efSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18974e7590efSmrg fi 18984e7590efSmrg} 18994e7590efSmrg# end func_convert_path_nix_to_w32 190049dc963fSmrg 190149dc963fSmrg 19024e7590efSmrg# func_convert_path_msys_to_cygwin ARG 19034e7590efSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 19044e7590efSmrg# Returns result in func_to_host_file_result. 19054e7590efSmrgfunc_convert_path_msys_to_cygwin () 19064e7590efSmrg{ 19074e7590efSmrg $opt_debug 19084e7590efSmrg func_to_host_path_result="$1" 19094e7590efSmrg if test -n "$1"; then 19104e7590efSmrg # See func_convert_path_msys_to_w32: 19114e7590efSmrg func_stripname : : "$1" 19124e7590efSmrg func_to_host_path_tmp1=$func_stripname_result 19134e7590efSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 19144e7590efSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 19154e7590efSmrg func_to_host_path_result="$func_cygpath_result" 19164e7590efSmrg func_convert_path_check : : \ 19174e7590efSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19184e7590efSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19194e7590efSmrg fi 19204e7590efSmrg} 19214e7590efSmrg# end func_convert_path_msys_to_cygwin 192249dc963fSmrg 192349dc963fSmrg 19244e7590efSmrg# func_convert_path_nix_to_cygwin ARG 19254e7590efSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 19264e7590efSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 19274e7590efSmrg# func_to_host_file_result. 19284e7590efSmrgfunc_convert_path_nix_to_cygwin () 19294e7590efSmrg{ 19304e7590efSmrg $opt_debug 19314e7590efSmrg func_to_host_path_result="$1" 19324e7590efSmrg if test -n "$1"; then 19334e7590efSmrg # Remove leading and trailing path separator characters from 19344e7590efSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 19354e7590efSmrg # into '.;' and ';.', and winepath ignores them completely. 19364e7590efSmrg func_stripname : : "$1" 19374e7590efSmrg func_to_host_path_tmp1=$func_stripname_result 19384e7590efSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 19394e7590efSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 19404e7590efSmrg func_to_host_path_result="$func_cygpath_result" 19414e7590efSmrg func_convert_path_check : : \ 19424e7590efSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19434e7590efSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19444e7590efSmrg fi 194549dc963fSmrg} 19464e7590efSmrg# end func_convert_path_nix_to_cygwin 19474e7590efSmrg 194849dc963fSmrg 194949dc963fSmrg# func_mode_compile arg... 195049dc963fSmrgfunc_mode_compile () 195149dc963fSmrg{ 195249dc963fSmrg $opt_debug 195349dc963fSmrg # Get the compilation command and the source file. 195449dc963fSmrg base_compile= 195549dc963fSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 195649dc963fSmrg suppress_opt=yes 195749dc963fSmrg suppress_output= 195849dc963fSmrg arg_mode=normal 195949dc963fSmrg libobj= 196049dc963fSmrg later= 196149dc963fSmrg pie_flag= 196249dc963fSmrg 196349dc963fSmrg for arg 196449dc963fSmrg do 196549dc963fSmrg case $arg_mode in 196649dc963fSmrg arg ) 196749dc963fSmrg # do not "continue". Instead, add this to base_compile 196849dc963fSmrg lastarg="$arg" 196949dc963fSmrg arg_mode=normal 197049dc963fSmrg ;; 197149dc963fSmrg 197249dc963fSmrg target ) 197349dc963fSmrg libobj="$arg" 197449dc963fSmrg arg_mode=normal 197549dc963fSmrg continue 197649dc963fSmrg ;; 197749dc963fSmrg 197849dc963fSmrg normal ) 197949dc963fSmrg # Accept any command-line options. 198049dc963fSmrg case $arg in 198149dc963fSmrg -o) 198249dc963fSmrg test -n "$libobj" && \ 198349dc963fSmrg func_fatal_error "you cannot specify \`-o' more than once" 198449dc963fSmrg arg_mode=target 198549dc963fSmrg continue 198649dc963fSmrg ;; 198749dc963fSmrg 198849dc963fSmrg -pie | -fpie | -fPIE) 19894e7590efSmrg func_append pie_flag " $arg" 199049dc963fSmrg continue 199149dc963fSmrg ;; 199249dc963fSmrg 199349dc963fSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 19944e7590efSmrg func_append later " $arg" 199549dc963fSmrg continue 199649dc963fSmrg ;; 199749dc963fSmrg 199849dc963fSmrg -no-suppress) 19994b0ead49Smrg suppress_opt=no 20004b0ead49Smrg continue 20014b0ead49Smrg ;; 20024b0ead49Smrg 20034b0ead49Smrg -Xcompiler) 20044b0ead49Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 20054b0ead49Smrg continue # The current "srcfile" will either be retained or 20064b0ead49Smrg ;; # replaced later. I would guess that would be a bug. 20074b0ead49Smrg 20084b0ead49Smrg -Wc,*) 200949dc963fSmrg func_stripname '-Wc,' '' "$arg" 201049dc963fSmrg args=$func_stripname_result 20114b0ead49Smrg lastarg= 20124b0ead49Smrg save_ifs="$IFS"; IFS=',' 201349dc963fSmrg for arg in $args; do 20144b0ead49Smrg IFS="$save_ifs" 20154e7590efSmrg func_append_quoted lastarg "$arg" 20164b0ead49Smrg done 20174b0ead49Smrg IFS="$save_ifs" 201849dc963fSmrg func_stripname ' ' '' "$lastarg" 201949dc963fSmrg lastarg=$func_stripname_result 20204b0ead49Smrg 20214b0ead49Smrg # Add the arguments to base_compile. 20224e7590efSmrg func_append base_compile " $lastarg" 20234b0ead49Smrg continue 20244b0ead49Smrg ;; 20254b0ead49Smrg 202649dc963fSmrg *) 20274b0ead49Smrg # Accept the current argument as the source file. 20284b0ead49Smrg # The previous "srcfile" becomes the current argument. 20294b0ead49Smrg # 20304b0ead49Smrg lastarg="$srcfile" 20314b0ead49Smrg srcfile="$arg" 20324b0ead49Smrg ;; 20334b0ead49Smrg esac # case $arg 20344b0ead49Smrg ;; 20354b0ead49Smrg esac # case $arg_mode 20364b0ead49Smrg 20374b0ead49Smrg # Aesthetically quote the previous argument. 20384e7590efSmrg func_append_quoted base_compile "$lastarg" 20394b0ead49Smrg done # for arg 20404b0ead49Smrg 20414b0ead49Smrg case $arg_mode in 20424b0ead49Smrg arg) 204349dc963fSmrg func_fatal_error "you must specify an argument for -Xcompile" 20444b0ead49Smrg ;; 20454b0ead49Smrg target) 204649dc963fSmrg func_fatal_error "you must specify a target with \`-o'" 20474b0ead49Smrg ;; 20484b0ead49Smrg *) 20494b0ead49Smrg # Get the name of the library object. 205049dc963fSmrg test -z "$libobj" && { 205149dc963fSmrg func_basename "$srcfile" 205249dc963fSmrg libobj="$func_basename_result" 205349dc963fSmrg } 20544b0ead49Smrg ;; 20554b0ead49Smrg esac 20564b0ead49Smrg 20574b0ead49Smrg # Recognize several different file suffixes. 20584b0ead49Smrg # If the user specifies -o file.o, it is replaced with file.lo 20594b0ead49Smrg case $libobj in 206049dc963fSmrg *.[cCFSifmso] | \ 206149dc963fSmrg *.ada | *.adb | *.ads | *.asm | \ 206249dc963fSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 20634e7590efSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 206449dc963fSmrg func_xform "$libobj" 206549dc963fSmrg libobj=$func_xform_result 206649dc963fSmrg ;; 20674b0ead49Smrg esac 20684b0ead49Smrg 20694b0ead49Smrg case $libobj in 207049dc963fSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 20714b0ead49Smrg *) 207249dc963fSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 20734b0ead49Smrg ;; 20744b0ead49Smrg esac 20754b0ead49Smrg 20764b0ead49Smrg func_infer_tag $base_compile 20774b0ead49Smrg 20784b0ead49Smrg for arg in $later; do 20794b0ead49Smrg case $arg in 208049dc963fSmrg -shared) 208149dc963fSmrg test "$build_libtool_libs" != yes && \ 208249dc963fSmrg func_fatal_configuration "can not build a shared library" 208349dc963fSmrg build_old_libs=no 208449dc963fSmrg continue 208549dc963fSmrg ;; 208649dc963fSmrg 20874b0ead49Smrg -static) 208849dc963fSmrg build_libtool_libs=no 20894b0ead49Smrg build_old_libs=yes 20904b0ead49Smrg continue 20914b0ead49Smrg ;; 20924b0ead49Smrg 20934b0ead49Smrg -prefer-pic) 20944b0ead49Smrg pic_mode=yes 20954b0ead49Smrg continue 20964b0ead49Smrg ;; 20974b0ead49Smrg 20984b0ead49Smrg -prefer-non-pic) 20994b0ead49Smrg pic_mode=no 21004b0ead49Smrg continue 21014b0ead49Smrg ;; 21024b0ead49Smrg esac 21034b0ead49Smrg done 21044b0ead49Smrg 210549dc963fSmrg func_quote_for_eval "$libobj" 210649dc963fSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 210749dc963fSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 210849dc963fSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 210949dc963fSmrg func_dirname_and_basename "$obj" "/" "" 211049dc963fSmrg objname="$func_basename_result" 211149dc963fSmrg xdir="$func_dirname_result" 21124b0ead49Smrg lobj=${xdir}$objdir/$objname 21134b0ead49Smrg 211449dc963fSmrg test -z "$base_compile" && \ 211549dc963fSmrg func_fatal_help "you must specify a compilation command" 21164b0ead49Smrg 21174b0ead49Smrg # Delete any leftover library objects. 21184b0ead49Smrg if test "$build_old_libs" = yes; then 21194b0ead49Smrg removelist="$obj $lobj $libobj ${libobj}T" 21204b0ead49Smrg else 21214b0ead49Smrg removelist="$lobj $libobj ${libobj}T" 21224b0ead49Smrg fi 21234b0ead49Smrg 21244b0ead49Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 21254b0ead49Smrg case $host_os in 212649dc963fSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 21274b0ead49Smrg pic_mode=default 21284b0ead49Smrg ;; 21294b0ead49Smrg esac 21304b0ead49Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 21314b0ead49Smrg # non-PIC code in shared libraries is not supported 21324b0ead49Smrg pic_mode=default 21334b0ead49Smrg fi 21344b0ead49Smrg 21354b0ead49Smrg # Calculate the filename of the output object if compiler does 21364b0ead49Smrg # not support -o with -c 21374b0ead49Smrg if test "$compiler_c_o" = no; then 21387aa89044Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 21394b0ead49Smrg lockfile="$output_obj.lock" 21404b0ead49Smrg else 21414b0ead49Smrg output_obj= 21424b0ead49Smrg need_locks=no 21434b0ead49Smrg lockfile= 21444b0ead49Smrg fi 21454b0ead49Smrg 21464b0ead49Smrg # Lock this critical section if it is needed 21474b0ead49Smrg # We use this script file to make the link, it avoids creating a new file 21484b0ead49Smrg if test "$need_locks" = yes; then 214949dc963fSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 215049dc963fSmrg func_echo "Waiting for $lockfile to be removed" 21514b0ead49Smrg sleep 2 21524b0ead49Smrg done 21534b0ead49Smrg elif test "$need_locks" = warn; then 21544b0ead49Smrg if test -f "$lockfile"; then 215549dc963fSmrg $ECHO "\ 21564b0ead49Smrg*** ERROR, $lockfile exists and contains: 21574b0ead49Smrg`cat $lockfile 2>/dev/null` 21584b0ead49Smrg 21594b0ead49SmrgThis indicates that another process is trying to use the same 21604b0ead49Smrgtemporary object file, and libtool could not work around it because 21614b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 21624b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 21634b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 21644b0ead49Smrgcompiler." 21654b0ead49Smrg 216649dc963fSmrg $opt_dry_run || $RM $removelist 21674b0ead49Smrg exit $EXIT_FAILURE 21684b0ead49Smrg fi 21694e7590efSmrg func_append removelist " $output_obj" 217049dc963fSmrg $ECHO "$srcfile" > "$lockfile" 21714b0ead49Smrg fi 21724b0ead49Smrg 217349dc963fSmrg $opt_dry_run || $RM $removelist 21744e7590efSmrg func_append removelist " $lockfile" 217549dc963fSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 217649dc963fSmrg 21774e7590efSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 21784e7590efSmrg srcfile=$func_to_tool_file_result 217949dc963fSmrg func_quote_for_eval "$srcfile" 218049dc963fSmrg qsrcfile=$func_quote_for_eval_result 21814b0ead49Smrg 21824b0ead49Smrg # Only build a PIC object if we are building libtool libraries. 21834b0ead49Smrg if test "$build_libtool_libs" = yes; then 21844b0ead49Smrg # Without this assignment, base_compile gets emptied. 21854b0ead49Smrg fbsd_hideous_sh_bug=$base_compile 21864b0ead49Smrg 21874b0ead49Smrg if test "$pic_mode" != no; then 21884b0ead49Smrg command="$base_compile $qsrcfile $pic_flag" 21894b0ead49Smrg else 21904b0ead49Smrg # Don't build PIC code 21914b0ead49Smrg command="$base_compile $qsrcfile" 21924b0ead49Smrg fi 21934b0ead49Smrg 219449dc963fSmrg func_mkdir_p "$xdir$objdir" 21954b0ead49Smrg 21964b0ead49Smrg if test -z "$output_obj"; then 21974b0ead49Smrg # Place PIC objects in $objdir 21984e7590efSmrg func_append command " -o $lobj" 21994b0ead49Smrg fi 22004b0ead49Smrg 220149dc963fSmrg func_show_eval_locale "$command" \ 220249dc963fSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 22034b0ead49Smrg 22044b0ead49Smrg if test "$need_locks" = warn && 22054b0ead49Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 220649dc963fSmrg $ECHO "\ 22074b0ead49Smrg*** ERROR, $lockfile contains: 22084b0ead49Smrg`cat $lockfile 2>/dev/null` 22094b0ead49Smrg 22104b0ead49Smrgbut it should contain: 22114b0ead49Smrg$srcfile 22124b0ead49Smrg 22134b0ead49SmrgThis indicates that another process is trying to use the same 22144b0ead49Smrgtemporary object file, and libtool could not work around it because 22154b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 22164b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 22174b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 22184b0ead49Smrgcompiler." 22194b0ead49Smrg 222049dc963fSmrg $opt_dry_run || $RM $removelist 22214b0ead49Smrg exit $EXIT_FAILURE 22224b0ead49Smrg fi 22234b0ead49Smrg 22244b0ead49Smrg # Just move the object if needed, then go on to compile the next one 22254b0ead49Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 222649dc963fSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 222749dc963fSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 22284b0ead49Smrg fi 22294b0ead49Smrg 22304b0ead49Smrg # Allow error messages only from the first compilation. 22314b0ead49Smrg if test "$suppress_opt" = yes; then 223249dc963fSmrg suppress_output=' >/dev/null 2>&1' 22334b0ead49Smrg fi 22344b0ead49Smrg fi 22354b0ead49Smrg 22364b0ead49Smrg # Only build a position-dependent object if we build old libraries. 22374b0ead49Smrg if test "$build_old_libs" = yes; then 22384b0ead49Smrg if test "$pic_mode" != yes; then 22394b0ead49Smrg # Don't build PIC code 224049dc963fSmrg command="$base_compile $qsrcfile$pie_flag" 22414b0ead49Smrg else 22424b0ead49Smrg command="$base_compile $qsrcfile $pic_flag" 22434b0ead49Smrg fi 22444b0ead49Smrg if test "$compiler_c_o" = yes; then 22454e7590efSmrg func_append command " -o $obj" 22464b0ead49Smrg fi 22474b0ead49Smrg 22484b0ead49Smrg # Suppress compiler output if we already did a PIC compilation. 22494e7590efSmrg func_append command "$suppress_output" 225049dc963fSmrg func_show_eval_locale "$command" \ 225149dc963fSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 22524b0ead49Smrg 22534b0ead49Smrg if test "$need_locks" = warn && 22544b0ead49Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 225549dc963fSmrg $ECHO "\ 22564b0ead49Smrg*** ERROR, $lockfile contains: 22574b0ead49Smrg`cat $lockfile 2>/dev/null` 22584b0ead49Smrg 22594b0ead49Smrgbut it should contain: 22604b0ead49Smrg$srcfile 22614b0ead49Smrg 22624b0ead49SmrgThis indicates that another process is trying to use the same 22634b0ead49Smrgtemporary object file, and libtool could not work around it because 22644b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 22654b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 22664b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 22674b0ead49Smrgcompiler." 22684b0ead49Smrg 226949dc963fSmrg $opt_dry_run || $RM $removelist 22704b0ead49Smrg exit $EXIT_FAILURE 22714b0ead49Smrg fi 22724b0ead49Smrg 22734b0ead49Smrg # Just move the object if needed 22744b0ead49Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 227549dc963fSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 227649dc963fSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 22774b0ead49Smrg fi 22784b0ead49Smrg fi 22794b0ead49Smrg 228049dc963fSmrg $opt_dry_run || { 228149dc963fSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 22824b0ead49Smrg 228349dc963fSmrg # Unlock the critical section if it was locked 228449dc963fSmrg if test "$need_locks" != no; then 228549dc963fSmrg removelist=$lockfile 228649dc963fSmrg $RM "$lockfile" 228749dc963fSmrg fi 228849dc963fSmrg } 22894b0ead49Smrg 22904b0ead49Smrg exit $EXIT_SUCCESS 229149dc963fSmrg} 22924b0ead49Smrg 229349dc963fSmrg$opt_help || { 22944e7590efSmrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 229549dc963fSmrg} 22964b0ead49Smrg 229749dc963fSmrgfunc_mode_help () 229849dc963fSmrg{ 229949dc963fSmrg # We need to display help for each of the modes. 23004e7590efSmrg case $opt_mode in 230149dc963fSmrg "") 230249dc963fSmrg # Generic help is extracted from the usage comments 230349dc963fSmrg # at the start of this file. 230449dc963fSmrg func_help 230549dc963fSmrg ;; 23064b0ead49Smrg 230749dc963fSmrg clean) 230849dc963fSmrg $ECHO \ 230949dc963fSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 23104b0ead49Smrg 231149dc963fSmrgRemove files from the build directory. 23124b0ead49Smrg 231349dc963fSmrgRM is the name of the program to use to delete files associated with each FILE 231449dc963fSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 231549dc963fSmrgto RM. 23164b0ead49Smrg 231749dc963fSmrgIf FILE is a libtool library, object or program, all the files associated 231849dc963fSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 231949dc963fSmrg ;; 23204b0ead49Smrg 232149dc963fSmrg compile) 232249dc963fSmrg $ECHO \ 232349dc963fSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 23244b0ead49Smrg 232549dc963fSmrgCompile a source file into a libtool library object. 23264b0ead49Smrg 232749dc963fSmrgThis mode accepts the following additional options: 23284b0ead49Smrg 232949dc963fSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 233049dc963fSmrg -no-suppress do not suppress compiler output for multiple passes 23317aa89044Smrg -prefer-pic try to build PIC objects only 23327aa89044Smrg -prefer-non-pic try to build non-PIC objects only 233349dc963fSmrg -shared do not build a \`.o' file suitable for static linking 233449dc963fSmrg -static only build a \`.o' file suitable for static linking 23357aa89044Smrg -Wc,FLAG pass FLAG directly to the compiler 23364b0ead49Smrg 233749dc963fSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 233849dc963fSmrgfrom the given SOURCEFILE. 23394b0ead49Smrg 234049dc963fSmrgThe output file name is determined by removing the directory component from 234149dc963fSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 234249dc963fSmrglibrary object suffix, \`.lo'." 234349dc963fSmrg ;; 23444b0ead49Smrg 234549dc963fSmrg execute) 234649dc963fSmrg $ECHO \ 234749dc963fSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 23484b0ead49Smrg 234949dc963fSmrgAutomatically set library path, then run a program. 23504b0ead49Smrg 235149dc963fSmrgThis mode accepts the following additional options: 23524b0ead49Smrg 235349dc963fSmrg -dlopen FILE add the directory containing FILE to the library path 23544b0ead49Smrg 235549dc963fSmrgThis mode sets the library path environment variable according to \`-dlopen' 235649dc963fSmrgflags. 23574b0ead49Smrg 235849dc963fSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 235949dc963fSmrginto their corresponding uninstalled binary, and any of their required library 236049dc963fSmrgdirectories are added to the library path. 23614b0ead49Smrg 236249dc963fSmrgThen, COMMAND is executed, with ARGS as arguments." 236349dc963fSmrg ;; 23644b0ead49Smrg 236549dc963fSmrg finish) 236649dc963fSmrg $ECHO \ 236749dc963fSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 23684b0ead49Smrg 236949dc963fSmrgComplete the installation of libtool libraries. 23704b0ead49Smrg 237149dc963fSmrgEach LIBDIR is a directory that contains libtool libraries. 23724b0ead49Smrg 237349dc963fSmrgThe commands that this mode executes may require superuser privileges. Use 237449dc963fSmrgthe \`--dry-run' option if you just want to see what would be executed." 237549dc963fSmrg ;; 23764b0ead49Smrg 237749dc963fSmrg install) 237849dc963fSmrg $ECHO \ 237949dc963fSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 23804b0ead49Smrg 238149dc963fSmrgInstall executables or libraries. 23824b0ead49Smrg 238349dc963fSmrgINSTALL-COMMAND is the installation command. The first component should be 238449dc963fSmrgeither the \`install' or \`cp' program. 23854b0ead49Smrg 238649dc963fSmrgThe following components of INSTALL-COMMAND are treated specially: 23874b0ead49Smrg 23887aa89044Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 23894b0ead49Smrg 239049dc963fSmrgThe rest of the components are interpreted as arguments to that command (only 239149dc963fSmrgBSD-compatible install options are recognized)." 239249dc963fSmrg ;; 23934b0ead49Smrg 239449dc963fSmrg link) 239549dc963fSmrg $ECHO \ 239649dc963fSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 23974b0ead49Smrg 239849dc963fSmrgLink object files or libraries together to form another library, or to 239949dc963fSmrgcreate an executable program. 24004b0ead49Smrg 240149dc963fSmrgLINK-COMMAND is a command using the C compiler that you would use to create 240249dc963fSmrga program from several object files. 24034b0ead49Smrg 240449dc963fSmrgThe following components of LINK-COMMAND are treated specially: 24054b0ead49Smrg 240649dc963fSmrg -all-static do not do any dynamic linking at all 240749dc963fSmrg -avoid-version do not add a version suffix if possible 24087aa89044Smrg -bindir BINDIR specify path to binaries directory (for systems where 24097aa89044Smrg libraries must be found in the PATH setting at runtime) 241049dc963fSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 241149dc963fSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 241249dc963fSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 241349dc963fSmrg -export-symbols SYMFILE 241449dc963fSmrg try to export only the symbols listed in SYMFILE 241549dc963fSmrg -export-symbols-regex REGEX 241649dc963fSmrg try to export only the symbols matching REGEX 241749dc963fSmrg -LLIBDIR search LIBDIR for required installed libraries 241849dc963fSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 241949dc963fSmrg -module build a library that can dlopened 242049dc963fSmrg -no-fast-install disable the fast-install mode 242149dc963fSmrg -no-install link a not-installable executable 242249dc963fSmrg -no-undefined declare that a library does not refer to external symbols 242349dc963fSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 242449dc963fSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 242549dc963fSmrg -precious-files-regex REGEX 242649dc963fSmrg don't remove output files matching REGEX 242749dc963fSmrg -release RELEASE specify package release information 242849dc963fSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 242949dc963fSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 243049dc963fSmrg -shared only do dynamic linking of libtool libraries 243149dc963fSmrg -shrext SUFFIX override the standard shared library file extension 243249dc963fSmrg -static do not do any dynamic linking of uninstalled libtool libraries 243349dc963fSmrg -static-libtool-libs 243449dc963fSmrg do not do any dynamic linking of libtool libraries 243549dc963fSmrg -version-info CURRENT[:REVISION[:AGE]] 243649dc963fSmrg specify library version info [each variable defaults to 0] 243749dc963fSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 24387aa89044Smrg -Wc,FLAG 24397aa89044Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 24407aa89044Smrg -Wl,FLAG 24417aa89044Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 24427aa89044Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 24434b0ead49Smrg 244449dc963fSmrgAll other options (arguments beginning with \`-') are ignored. 24454b0ead49Smrg 244649dc963fSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 244749dc963fSmrgtreated as uninstalled libtool libraries, other files are standard or library 244849dc963fSmrgobject files. 244952b01e16Smrg 245049dc963fSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 245149dc963fSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 245249dc963fSmrgrequired, except when creating a convenience library. 24534b0ead49Smrg 245449dc963fSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 245549dc963fSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 24564b0ead49Smrg 245749dc963fSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 245849dc963fSmrgis created, otherwise an executable program is created." 24594b0ead49Smrg ;; 24604b0ead49Smrg 246149dc963fSmrg uninstall) 246249dc963fSmrg $ECHO \ 246349dc963fSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 24644b0ead49Smrg 246549dc963fSmrgRemove libraries from an installation directory. 24664b0ead49Smrg 246749dc963fSmrgRM is the name of the program to use to delete files associated with each FILE 246849dc963fSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 246949dc963fSmrgto RM. 24704b0ead49Smrg 247149dc963fSmrgIf FILE is a libtool library, all the files associated with it are deleted. 247249dc963fSmrgOtherwise, only FILE itself is deleted using RM." 247349dc963fSmrg ;; 24744b0ead49Smrg 247549dc963fSmrg *) 24764e7590efSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 247749dc963fSmrg ;; 247849dc963fSmrg esac 24794b0ead49Smrg 24807aa89044Smrg echo 248149dc963fSmrg $ECHO "Try \`$progname --help' for more information about other modes." 248249dc963fSmrg} 24834b0ead49Smrg 24847aa89044Smrg# Now that we've collected a possible --mode arg, show help if necessary 24857aa89044Smrgif $opt_help; then 24867aa89044Smrg if test "$opt_help" = :; then 24877aa89044Smrg func_mode_help 24887aa89044Smrg else 24897aa89044Smrg { 24907aa89044Smrg func_help noexit 24914e7590efSmrg for opt_mode in compile link execute install finish uninstall clean; do 24927aa89044Smrg func_mode_help 24937aa89044Smrg done 24947aa89044Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 24957aa89044Smrg { 24967aa89044Smrg func_help noexit 24974e7590efSmrg for opt_mode in compile link execute install finish uninstall clean; do 24987aa89044Smrg echo 24997aa89044Smrg func_mode_help 25007aa89044Smrg done 25017aa89044Smrg } | 25027aa89044Smrg sed '1d 25037aa89044Smrg /^When reporting/,/^Report/{ 25047aa89044Smrg H 25057aa89044Smrg d 25067aa89044Smrg } 25077aa89044Smrg $x 25087aa89044Smrg /information about other modes/d 25097aa89044Smrg /more detailed .*MODE/d 25107aa89044Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 25117aa89044Smrg fi 25127aa89044Smrg exit $? 25137aa89044Smrgfi 25144b0ead49Smrg 25154b0ead49Smrg 251649dc963fSmrg# func_mode_execute arg... 251749dc963fSmrgfunc_mode_execute () 251849dc963fSmrg{ 251949dc963fSmrg $opt_debug 252049dc963fSmrg # The first argument is the command name. 252149dc963fSmrg cmd="$nonopt" 252249dc963fSmrg test -z "$cmd" && \ 252349dc963fSmrg func_fatal_help "you must specify a COMMAND" 25244b0ead49Smrg 252549dc963fSmrg # Handle -dlopen flags immediately. 25264e7590efSmrg for file in $opt_dlopen; do 252749dc963fSmrg test -f "$file" \ 252849dc963fSmrg || func_fatal_help "\`$file' is not a file" 25294b0ead49Smrg 253049dc963fSmrg dir= 253149dc963fSmrg case $file in 253249dc963fSmrg *.la) 25334e7590efSmrg func_resolve_sysroot "$file" 25344e7590efSmrg file=$func_resolve_sysroot_result 25354e7590efSmrg 253649dc963fSmrg # Check to see that this really is a libtool archive. 253749dc963fSmrg func_lalib_unsafe_p "$file" \ 253849dc963fSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 25394b0ead49Smrg 254049dc963fSmrg # Read the libtool library. 254149dc963fSmrg dlname= 254249dc963fSmrg library_names= 254349dc963fSmrg func_source "$file" 25444b0ead49Smrg 254549dc963fSmrg # Skip this library if it cannot be dlopened. 254649dc963fSmrg if test -z "$dlname"; then 254749dc963fSmrg # Warn if it was a shared library. 254849dc963fSmrg test -n "$library_names" && \ 254949dc963fSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 255049dc963fSmrg continue 255149dc963fSmrg fi 25524b0ead49Smrg 255349dc963fSmrg func_dirname "$file" "" "." 255449dc963fSmrg dir="$func_dirname_result" 25554b0ead49Smrg 255649dc963fSmrg if test -f "$dir/$objdir/$dlname"; then 25574e7590efSmrg func_append dir "/$objdir" 255849dc963fSmrg else 255949dc963fSmrg if test ! -f "$dir/$dlname"; then 256049dc963fSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 256149dc963fSmrg fi 256249dc963fSmrg fi 25634b0ead49Smrg ;; 25644b0ead49Smrg 256549dc963fSmrg *.lo) 256649dc963fSmrg # Just add the directory containing the .lo file. 256749dc963fSmrg func_dirname "$file" "" "." 256849dc963fSmrg dir="$func_dirname_result" 25694b0ead49Smrg ;; 25704b0ead49Smrg 257149dc963fSmrg *) 257249dc963fSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 25734b0ead49Smrg continue 25744b0ead49Smrg ;; 257549dc963fSmrg esac 25764b0ead49Smrg 257749dc963fSmrg # Get the absolute pathname. 257849dc963fSmrg absdir=`cd "$dir" && pwd` 257949dc963fSmrg test -n "$absdir" && dir="$absdir" 25804b0ead49Smrg 258149dc963fSmrg # Now add the directory to shlibpath_var. 258249dc963fSmrg if eval "test -z \"\$$shlibpath_var\""; then 258349dc963fSmrg eval "$shlibpath_var=\"\$dir\"" 258449dc963fSmrg else 258549dc963fSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 258649dc963fSmrg fi 258749dc963fSmrg done 25884b0ead49Smrg 258949dc963fSmrg # This variable tells wrapper scripts just to set shlibpath_var 259049dc963fSmrg # rather than running their programs. 259149dc963fSmrg libtool_execute_magic="$magic" 25924b0ead49Smrg 259349dc963fSmrg # Check if any of the arguments is a wrapper script. 259449dc963fSmrg args= 259549dc963fSmrg for file 259649dc963fSmrg do 259749dc963fSmrg case $file in 25987aa89044Smrg -* | *.la | *.lo ) ;; 259949dc963fSmrg *) 260049dc963fSmrg # Do a test to see if this is really a libtool program. 260149dc963fSmrg if func_ltwrapper_script_p "$file"; then 260249dc963fSmrg func_source "$file" 260349dc963fSmrg # Transform arg to wrapped name. 260449dc963fSmrg file="$progdir/$program" 260549dc963fSmrg elif func_ltwrapper_executable_p "$file"; then 260649dc963fSmrg func_ltwrapper_scriptname "$file" 260749dc963fSmrg func_source "$func_ltwrapper_scriptname_result" 260849dc963fSmrg # Transform arg to wrapped name. 260949dc963fSmrg file="$progdir/$program" 261049dc963fSmrg fi 261149dc963fSmrg ;; 261249dc963fSmrg esac 261349dc963fSmrg # Quote arguments (to preserve shell metacharacters). 26144e7590efSmrg func_append_quoted args "$file" 261549dc963fSmrg done 26164b0ead49Smrg 261749dc963fSmrg if test "X$opt_dry_run" = Xfalse; then 261849dc963fSmrg if test -n "$shlibpath_var"; then 261949dc963fSmrg # Export the shlibpath_var. 262049dc963fSmrg eval "export $shlibpath_var" 262149dc963fSmrg fi 26224b0ead49Smrg 262349dc963fSmrg # Restore saved environment variables 262449dc963fSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 262549dc963fSmrg do 262649dc963fSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 262749dc963fSmrg $lt_var=\$save_$lt_var; export $lt_var 26284b0ead49Smrg else 262949dc963fSmrg $lt_unset $lt_var 263049dc963fSmrg fi" 263149dc963fSmrg done 26324b0ead49Smrg 263349dc963fSmrg # Now prepare to actually exec the command. 263449dc963fSmrg exec_cmd="\$cmd$args" 263549dc963fSmrg else 263649dc963fSmrg # Display what would be done. 263749dc963fSmrg if test -n "$shlibpath_var"; then 263849dc963fSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 26397aa89044Smrg echo "export $shlibpath_var" 264049dc963fSmrg fi 264149dc963fSmrg $ECHO "$cmd$args" 264249dc963fSmrg exit $EXIT_SUCCESS 264349dc963fSmrg fi 264449dc963fSmrg} 26454b0ead49Smrg 26464e7590efSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 26474b0ead49Smrg 26484b0ead49Smrg 264949dc963fSmrg# func_mode_finish arg... 265049dc963fSmrgfunc_mode_finish () 265149dc963fSmrg{ 265249dc963fSmrg $opt_debug 26534e7590efSmrg libs= 26544e7590efSmrg libdirs= 265549dc963fSmrg admincmds= 26564b0ead49Smrg 26574e7590efSmrg for opt in "$nonopt" ${1+"$@"} 26584e7590efSmrg do 26594e7590efSmrg if test -d "$opt"; then 26604e7590efSmrg func_append libdirs " $opt" 26614e7590efSmrg 26624e7590efSmrg elif test -f "$opt"; then 26634e7590efSmrg if func_lalib_unsafe_p "$opt"; then 26644e7590efSmrg func_append libs " $opt" 26654e7590efSmrg else 26664e7590efSmrg func_warning "\`$opt' is not a valid libtool archive" 26674e7590efSmrg fi 26684e7590efSmrg 26694e7590efSmrg else 26704e7590efSmrg func_fatal_error "invalid argument \`$opt'" 26714e7590efSmrg fi 26724e7590efSmrg done 26734e7590efSmrg 26744e7590efSmrg if test -n "$libs"; then 26754e7590efSmrg if test -n "$lt_sysroot"; then 26764e7590efSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 26774e7590efSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 26784e7590efSmrg else 26794e7590efSmrg sysroot_cmd= 26804e7590efSmrg fi 26814e7590efSmrg 26824e7590efSmrg # Remove sysroot references 26834e7590efSmrg if $opt_dry_run; then 26844e7590efSmrg for lib in $libs; do 26854e7590efSmrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 26864e7590efSmrg done 26874e7590efSmrg else 26884e7590efSmrg tmpdir=`func_mktempdir` 26894e7590efSmrg for lib in $libs; do 26904e7590efSmrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 26914e7590efSmrg > $tmpdir/tmp-la 26924e7590efSmrg mv -f $tmpdir/tmp-la $lib 26934e7590efSmrg done 26944e7590efSmrg ${RM}r "$tmpdir" 26954e7590efSmrg fi 26964e7590efSmrg fi 26974b0ead49Smrg 26984e7590efSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 269949dc963fSmrg for libdir in $libdirs; do 270049dc963fSmrg if test -n "$finish_cmds"; then 270149dc963fSmrg # Do each command in the finish commands. 270249dc963fSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 270349dc963fSmrg'"$cmd"'"' 27044b0ead49Smrg fi 270549dc963fSmrg if test -n "$finish_eval"; then 270649dc963fSmrg # Do the single finish_eval. 270749dc963fSmrg eval cmds=\"$finish_eval\" 27084e7590efSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 270949dc963fSmrg $cmds" 271049dc963fSmrg fi 271149dc963fSmrg done 271249dc963fSmrg fi 27134b0ead49Smrg 271449dc963fSmrg # Exit here if they wanted silent mode. 271549dc963fSmrg $opt_silent && exit $EXIT_SUCCESS 27164b0ead49Smrg 27174e7590efSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 27184e7590efSmrg echo "----------------------------------------------------------------------" 27194e7590efSmrg echo "Libraries have been installed in:" 27204e7590efSmrg for libdir in $libdirs; do 27214e7590efSmrg $ECHO " $libdir" 27224e7590efSmrg done 27234e7590efSmrg echo 27244e7590efSmrg echo "If you ever happen to want to link against installed libraries" 27254e7590efSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 27264e7590efSmrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 27274e7590efSmrg echo "flag during linking and do at least one of the following:" 27284e7590efSmrg if test -n "$shlibpath_var"; then 27294e7590efSmrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 27304e7590efSmrg echo " during execution" 27314e7590efSmrg fi 27324e7590efSmrg if test -n "$runpath_var"; then 27334e7590efSmrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 27344e7590efSmrg echo " during linking" 27354e7590efSmrg fi 27364e7590efSmrg if test -n "$hardcode_libdir_flag_spec"; then 27374e7590efSmrg libdir=LIBDIR 27384e7590efSmrg eval flag=\"$hardcode_libdir_flag_spec\" 273949dc963fSmrg 27404e7590efSmrg $ECHO " - use the \`$flag' linker flag" 27414e7590efSmrg fi 27424e7590efSmrg if test -n "$admincmds"; then 27434e7590efSmrg $ECHO " - have your system administrator run these commands:$admincmds" 27444e7590efSmrg fi 27454e7590efSmrg if test -f /etc/ld.so.conf; then 27464e7590efSmrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 27474e7590efSmrg fi 27484e7590efSmrg echo 274949dc963fSmrg 27504e7590efSmrg echo "See any operating system documentation about shared libraries for" 27514e7590efSmrg case $host in 27524e7590efSmrg solaris2.[6789]|solaris2.1[0-9]) 27534e7590efSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 27544e7590efSmrg echo "pages." 27554e7590efSmrg ;; 27564e7590efSmrg *) 27574e7590efSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 27584e7590efSmrg ;; 27594e7590efSmrg esac 27604e7590efSmrg echo "----------------------------------------------------------------------" 27614e7590efSmrg fi 276249dc963fSmrg exit $EXIT_SUCCESS 276349dc963fSmrg} 276449dc963fSmrg 27654e7590efSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 276649dc963fSmrg 276749dc963fSmrg 276849dc963fSmrg# func_mode_install arg... 276949dc963fSmrgfunc_mode_install () 277049dc963fSmrg{ 277149dc963fSmrg $opt_debug 277249dc963fSmrg # There may be an optional sh(1) argument at the beginning of 277349dc963fSmrg # install_prog (especially on Windows NT). 277449dc963fSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 277549dc963fSmrg # Allow the use of GNU shtool's install command. 27767aa89044Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 277749dc963fSmrg # Aesthetically quote it. 277849dc963fSmrg func_quote_for_eval "$nonopt" 277949dc963fSmrg install_prog="$func_quote_for_eval_result " 278049dc963fSmrg arg=$1 278149dc963fSmrg shift 278249dc963fSmrg else 278349dc963fSmrg install_prog= 278449dc963fSmrg arg=$nonopt 278549dc963fSmrg fi 278649dc963fSmrg 278749dc963fSmrg # The real first argument should be the name of the installation program. 278849dc963fSmrg # Aesthetically quote it. 278949dc963fSmrg func_quote_for_eval "$arg" 27904e7590efSmrg func_append install_prog "$func_quote_for_eval_result" 27917aa89044Smrg install_shared_prog=$install_prog 27927aa89044Smrg case " $install_prog " in 27937aa89044Smrg *[\\\ /]cp\ *) install_cp=: ;; 27947aa89044Smrg *) install_cp=false ;; 27957aa89044Smrg esac 279649dc963fSmrg 279749dc963fSmrg # We need to accept at least all the BSD install flags. 279849dc963fSmrg dest= 279949dc963fSmrg files= 280049dc963fSmrg opts= 280149dc963fSmrg prev= 280249dc963fSmrg install_type= 280349dc963fSmrg isdir=no 280449dc963fSmrg stripme= 28057aa89044Smrg no_mode=: 280649dc963fSmrg for arg 280749dc963fSmrg do 28087aa89044Smrg arg2= 280949dc963fSmrg if test -n "$dest"; then 28104e7590efSmrg func_append files " $dest" 281149dc963fSmrg dest=$arg 281249dc963fSmrg continue 281349dc963fSmrg fi 281449dc963fSmrg 281549dc963fSmrg case $arg in 281649dc963fSmrg -d) isdir=yes ;; 281749dc963fSmrg -f) 28187aa89044Smrg if $install_cp; then :; else 28197aa89044Smrg prev=$arg 28207aa89044Smrg fi 282149dc963fSmrg ;; 282249dc963fSmrg -g | -m | -o) 282349dc963fSmrg prev=$arg 282449dc963fSmrg ;; 282549dc963fSmrg -s) 282649dc963fSmrg stripme=" -s" 282749dc963fSmrg continue 282849dc963fSmrg ;; 282949dc963fSmrg -*) 283049dc963fSmrg ;; 283149dc963fSmrg *) 283249dc963fSmrg # If the previous option needed an argument, then skip it. 283349dc963fSmrg if test -n "$prev"; then 28347aa89044Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 28357aa89044Smrg arg2=$install_override_mode 28367aa89044Smrg no_mode=false 28377aa89044Smrg fi 28384b0ead49Smrg prev= 28394b0ead49Smrg else 284049dc963fSmrg dest=$arg 284149dc963fSmrg continue 28424b0ead49Smrg fi 28434b0ead49Smrg ;; 284449dc963fSmrg esac 28454b0ead49Smrg 284649dc963fSmrg # Aesthetically quote the argument. 284749dc963fSmrg func_quote_for_eval "$arg" 28484e7590efSmrg func_append install_prog " $func_quote_for_eval_result" 28497aa89044Smrg if test -n "$arg2"; then 28507aa89044Smrg func_quote_for_eval "$arg2" 28517aa89044Smrg fi 28524e7590efSmrg func_append install_shared_prog " $func_quote_for_eval_result" 285349dc963fSmrg done 28544b0ead49Smrg 285549dc963fSmrg test -z "$install_prog" && \ 285649dc963fSmrg func_fatal_help "you must specify an install program" 28574b0ead49Smrg 285849dc963fSmrg test -n "$prev" && \ 285949dc963fSmrg func_fatal_help "the \`$prev' option requires an argument" 28604b0ead49Smrg 28617aa89044Smrg if test -n "$install_override_mode" && $no_mode; then 28627aa89044Smrg if $install_cp; then :; else 28637aa89044Smrg func_quote_for_eval "$install_override_mode" 28644e7590efSmrg func_append install_shared_prog " -m $func_quote_for_eval_result" 28657aa89044Smrg fi 28667aa89044Smrg fi 28677aa89044Smrg 286849dc963fSmrg if test -z "$files"; then 286949dc963fSmrg if test -z "$dest"; then 287049dc963fSmrg func_fatal_help "no file or destination specified" 287149dc963fSmrg else 287249dc963fSmrg func_fatal_help "you must specify a destination" 287349dc963fSmrg fi 28744b0ead49Smrg fi 28754b0ead49Smrg 287649dc963fSmrg # Strip any trailing slash from the destination. 287749dc963fSmrg func_stripname '' '/' "$dest" 287849dc963fSmrg dest=$func_stripname_result 28794b0ead49Smrg 288049dc963fSmrg # Check to see that the destination is a directory. 288149dc963fSmrg test -d "$dest" && isdir=yes 288249dc963fSmrg if test "$isdir" = yes; then 288349dc963fSmrg destdir="$dest" 288449dc963fSmrg destname= 28854b0ead49Smrg else 288649dc963fSmrg func_dirname_and_basename "$dest" "" "." 288749dc963fSmrg destdir="$func_dirname_result" 288849dc963fSmrg destname="$func_basename_result" 28894b0ead49Smrg 289049dc963fSmrg # Not a directory, so check to see that there is only one file specified. 289149dc963fSmrg set dummy $files; shift 289249dc963fSmrg test "$#" -gt 1 && \ 289349dc963fSmrg func_fatal_help "\`$dest' is not a directory" 28944b0ead49Smrg fi 289549dc963fSmrg case $destdir in 289649dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 28974b0ead49Smrg *) 289849dc963fSmrg for file in $files; do 289949dc963fSmrg case $file in 290049dc963fSmrg *.lo) ;; 290149dc963fSmrg *) 290249dc963fSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 290349dc963fSmrg ;; 290449dc963fSmrg esac 290549dc963fSmrg done 29064b0ead49Smrg ;; 29074b0ead49Smrg esac 29084b0ead49Smrg 290949dc963fSmrg # This variable tells wrapper scripts just to set variables rather 291049dc963fSmrg # than running their programs. 291149dc963fSmrg libtool_install_magic="$magic" 29124b0ead49Smrg 291349dc963fSmrg staticlibs= 291449dc963fSmrg future_libdirs= 291549dc963fSmrg current_libdirs= 291649dc963fSmrg for file in $files; do 29174b0ead49Smrg 291849dc963fSmrg # Do each installation. 291949dc963fSmrg case $file in 292049dc963fSmrg *.$libext) 292149dc963fSmrg # Do the static libraries later. 29224e7590efSmrg func_append staticlibs " $file" 292349dc963fSmrg ;; 292449dc963fSmrg 292549dc963fSmrg *.la) 29264e7590efSmrg func_resolve_sysroot "$file" 29274e7590efSmrg file=$func_resolve_sysroot_result 29284e7590efSmrg 292949dc963fSmrg # Check to see that this really is a libtool archive. 293049dc963fSmrg func_lalib_unsafe_p "$file" \ 293149dc963fSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 293249dc963fSmrg 293349dc963fSmrg library_names= 293449dc963fSmrg old_library= 293549dc963fSmrg relink_command= 293649dc963fSmrg func_source "$file" 293749dc963fSmrg 293849dc963fSmrg # Add the libdir to current_libdirs if it is the destination. 293949dc963fSmrg if test "X$destdir" = "X$libdir"; then 294049dc963fSmrg case "$current_libdirs " in 294149dc963fSmrg *" $libdir "*) ;; 29424e7590efSmrg *) func_append current_libdirs " $libdir" ;; 29434b0ead49Smrg esac 294449dc963fSmrg else 294549dc963fSmrg # Note the libdir as a future libdir. 294649dc963fSmrg case "$future_libdirs " in 294749dc963fSmrg *" $libdir "*) ;; 29484e7590efSmrg *) func_append future_libdirs " $libdir" ;; 294949dc963fSmrg esac 295049dc963fSmrg fi 29514b0ead49Smrg 295249dc963fSmrg func_dirname "$file" "/" "" 295349dc963fSmrg dir="$func_dirname_result" 29544e7590efSmrg func_append dir "$objdir" 295549dc963fSmrg 295649dc963fSmrg if test -n "$relink_command"; then 295749dc963fSmrg # Determine the prefix the user has applied to our future dir. 29587aa89044Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 295949dc963fSmrg 296049dc963fSmrg # Don't allow the user to place us outside of our expected 296149dc963fSmrg # location b/c this prevents finding dependent libraries that 296249dc963fSmrg # are installed to the same prefix. 296349dc963fSmrg # At present, this check doesn't affect windows .dll's that 296449dc963fSmrg # are installed into $libdir/../bin (currently, that works fine) 296549dc963fSmrg # but it's something to keep an eye on. 296649dc963fSmrg test "$inst_prefix_dir" = "$destdir" && \ 296749dc963fSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 296849dc963fSmrg 296949dc963fSmrg if test -n "$inst_prefix_dir"; then 297049dc963fSmrg # Stick the inst_prefix_dir data into the link command. 29717aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 297249dc963fSmrg else 29737aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 297449dc963fSmrg fi 297549dc963fSmrg 297649dc963fSmrg func_warning "relinking \`$file'" 297749dc963fSmrg func_show_eval "$relink_command" \ 297849dc963fSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 297949dc963fSmrg fi 298049dc963fSmrg 298149dc963fSmrg # See the names of the shared library. 298249dc963fSmrg set dummy $library_names; shift 298349dc963fSmrg if test -n "$1"; then 298449dc963fSmrg realname="$1" 298549dc963fSmrg shift 298649dc963fSmrg 298749dc963fSmrg srcname="$realname" 298849dc963fSmrg test -n "$relink_command" && srcname="$realname"T 298949dc963fSmrg 299049dc963fSmrg # Install the shared library and build the symlinks. 29917aa89044Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 299249dc963fSmrg 'exit $?' 299349dc963fSmrg tstripme="$stripme" 299449dc963fSmrg case $host_os in 299549dc963fSmrg cygwin* | mingw* | pw32* | cegcc*) 299649dc963fSmrg case $realname in 299749dc963fSmrg *.dll.a) 299849dc963fSmrg tstripme="" 299949dc963fSmrg ;; 300049dc963fSmrg esac 30014b0ead49Smrg ;; 30024b0ead49Smrg esac 300349dc963fSmrg if test -n "$tstripme" && test -n "$striplib"; then 300449dc963fSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 30054b0ead49Smrg fi 300649dc963fSmrg 300749dc963fSmrg if test "$#" -gt 0; then 300849dc963fSmrg # Delete the old symlinks, and create new ones. 300949dc963fSmrg # Try `ln -sf' first, because the `ln' binary might depend on 301049dc963fSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 301149dc963fSmrg # so we also need to try rm && ln -s. 301249dc963fSmrg for linkname 301349dc963fSmrg do 301449dc963fSmrg test "$linkname" != "$realname" \ 301549dc963fSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 30164b0ead49Smrg done 30174b0ead49Smrg fi 30184b0ead49Smrg 301949dc963fSmrg # Do each command in the postinstall commands. 302049dc963fSmrg lib="$destdir/$realname" 302149dc963fSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 30224b0ead49Smrg fi 30234b0ead49Smrg 302449dc963fSmrg # Install the pseudo-library for information purposes. 302549dc963fSmrg func_basename "$file" 302649dc963fSmrg name="$func_basename_result" 302749dc963fSmrg instname="$dir/$name"i 302849dc963fSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 30294b0ead49Smrg 303049dc963fSmrg # Maybe install the static library, too. 30314e7590efSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 303249dc963fSmrg ;; 30334b0ead49Smrg 303449dc963fSmrg *.lo) 303549dc963fSmrg # Install (i.e. copy) a libtool object. 30364b0ead49Smrg 303749dc963fSmrg # Figure out destination file name, if it wasn't already specified. 303849dc963fSmrg if test -n "$destname"; then 303949dc963fSmrg destfile="$destdir/$destname" 304049dc963fSmrg else 304149dc963fSmrg func_basename "$file" 304249dc963fSmrg destfile="$func_basename_result" 304349dc963fSmrg destfile="$destdir/$destfile" 30444b0ead49Smrg fi 30454b0ead49Smrg 304649dc963fSmrg # Deduce the name of the destination old-style object file. 304749dc963fSmrg case $destfile in 304849dc963fSmrg *.lo) 304949dc963fSmrg func_lo2o "$destfile" 305049dc963fSmrg staticdest=$func_lo2o_result 305149dc963fSmrg ;; 305249dc963fSmrg *.$objext) 305349dc963fSmrg staticdest="$destfile" 305449dc963fSmrg destfile= 305549dc963fSmrg ;; 305649dc963fSmrg *) 305749dc963fSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 305849dc963fSmrg ;; 305949dc963fSmrg esac 30604b0ead49Smrg 306149dc963fSmrg # Install the libtool object if requested. 306249dc963fSmrg test -n "$destfile" && \ 306349dc963fSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 30644b0ead49Smrg 306549dc963fSmrg # Install the old object if enabled. 306649dc963fSmrg if test "$build_old_libs" = yes; then 306749dc963fSmrg # Deduce the name of the old-style object file. 306849dc963fSmrg func_lo2o "$file" 306949dc963fSmrg staticobj=$func_lo2o_result 307049dc963fSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 30714b0ead49Smrg fi 307249dc963fSmrg exit $EXIT_SUCCESS 307349dc963fSmrg ;; 30744b0ead49Smrg 307549dc963fSmrg *) 307649dc963fSmrg # Figure out destination file name, if it wasn't already specified. 307749dc963fSmrg if test -n "$destname"; then 307849dc963fSmrg destfile="$destdir/$destname" 307949dc963fSmrg else 308049dc963fSmrg func_basename "$file" 308149dc963fSmrg destfile="$func_basename_result" 308249dc963fSmrg destfile="$destdir/$destfile" 308349dc963fSmrg fi 30844b0ead49Smrg 308549dc963fSmrg # If the file is missing, and there is a .exe on the end, strip it 308649dc963fSmrg # because it is most likely a libtool script we actually want to 308749dc963fSmrg # install 308849dc963fSmrg stripped_ext="" 308949dc963fSmrg case $file in 309049dc963fSmrg *.exe) 309149dc963fSmrg if test ! -f "$file"; then 309249dc963fSmrg func_stripname '' '.exe' "$file" 309349dc963fSmrg file=$func_stripname_result 309449dc963fSmrg stripped_ext=".exe" 309549dc963fSmrg fi 309649dc963fSmrg ;; 309749dc963fSmrg esac 309849dc963fSmrg 309949dc963fSmrg # Do a test to see if this is really a libtool program. 310049dc963fSmrg case $host in 310149dc963fSmrg *cygwin* | *mingw*) 310249dc963fSmrg if func_ltwrapper_executable_p "$file"; then 310349dc963fSmrg func_ltwrapper_scriptname "$file" 310449dc963fSmrg wrapper=$func_ltwrapper_scriptname_result 310549dc963fSmrg else 310649dc963fSmrg func_stripname '' '.exe' "$file" 310749dc963fSmrg wrapper=$func_stripname_result 310849dc963fSmrg fi 310949dc963fSmrg ;; 31104b0ead49Smrg *) 311149dc963fSmrg wrapper=$file 311249dc963fSmrg ;; 311349dc963fSmrg esac 311449dc963fSmrg if func_ltwrapper_script_p "$wrapper"; then 311549dc963fSmrg notinst_deplibs= 311649dc963fSmrg relink_command= 311749dc963fSmrg 311849dc963fSmrg func_source "$wrapper" 311949dc963fSmrg 312049dc963fSmrg # Check the variables that should have been set. 312149dc963fSmrg test -z "$generated_by_libtool_version" && \ 312249dc963fSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 312349dc963fSmrg 312449dc963fSmrg finalize=yes 312549dc963fSmrg for lib in $notinst_deplibs; do 312649dc963fSmrg # Check to see that each library is installed. 312749dc963fSmrg libdir= 312849dc963fSmrg if test -f "$lib"; then 312949dc963fSmrg func_source "$lib" 313049dc963fSmrg fi 31317aa89044Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 313249dc963fSmrg if test -n "$libdir" && test ! -f "$libfile"; then 313349dc963fSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 313449dc963fSmrg finalize=no 313549dc963fSmrg fi 313649dc963fSmrg done 313749dc963fSmrg 313849dc963fSmrg relink_command= 313949dc963fSmrg func_source "$wrapper" 314049dc963fSmrg 314149dc963fSmrg outputname= 314249dc963fSmrg if test "$fast_install" = no && test -n "$relink_command"; then 314349dc963fSmrg $opt_dry_run || { 314449dc963fSmrg if test "$finalize" = yes; then 314549dc963fSmrg tmpdir=`func_mktempdir` 314649dc963fSmrg func_basename "$file$stripped_ext" 314749dc963fSmrg file="$func_basename_result" 314849dc963fSmrg outputname="$tmpdir/$file" 314949dc963fSmrg # Replace the output file specification. 31507aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 315149dc963fSmrg 315249dc963fSmrg $opt_silent || { 315349dc963fSmrg func_quote_for_expand "$relink_command" 315449dc963fSmrg eval "func_echo $func_quote_for_expand_result" 315549dc963fSmrg } 315649dc963fSmrg if eval "$relink_command"; then : 315749dc963fSmrg else 315849dc963fSmrg func_error "error: relink \`$file' with the above command before installing it" 315949dc963fSmrg $opt_dry_run || ${RM}r "$tmpdir" 316049dc963fSmrg continue 316149dc963fSmrg fi 316249dc963fSmrg file="$outputname" 316349dc963fSmrg else 316449dc963fSmrg func_warning "cannot relink \`$file'" 316549dc963fSmrg fi 316649dc963fSmrg } 316749dc963fSmrg else 316849dc963fSmrg # Install the binary that we compiled earlier. 31697aa89044Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 31704b0ead49Smrg fi 317149dc963fSmrg fi 317249dc963fSmrg 317349dc963fSmrg # remove .exe since cygwin /usr/bin/install will append another 317449dc963fSmrg # one anyway 317549dc963fSmrg case $install_prog,$host in 317649dc963fSmrg */usr/bin/install*,*cygwin*) 317749dc963fSmrg case $file:$destfile in 317849dc963fSmrg *.exe:*.exe) 317949dc963fSmrg # this is ok 318049dc963fSmrg ;; 318149dc963fSmrg *.exe:*) 318249dc963fSmrg destfile=$destfile.exe 318349dc963fSmrg ;; 318449dc963fSmrg *:*.exe) 318549dc963fSmrg func_stripname '' '.exe' "$destfile" 318649dc963fSmrg destfile=$func_stripname_result 318749dc963fSmrg ;; 318849dc963fSmrg esac 31894b0ead49Smrg ;; 31904b0ead49Smrg esac 319149dc963fSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 319249dc963fSmrg $opt_dry_run || if test -n "$outputname"; then 319349dc963fSmrg ${RM}r "$tmpdir" 319449dc963fSmrg fi 319549dc963fSmrg ;; 319649dc963fSmrg esac 319749dc963fSmrg done 31984b0ead49Smrg 319949dc963fSmrg for file in $staticlibs; do 320049dc963fSmrg func_basename "$file" 320149dc963fSmrg name="$func_basename_result" 320249dc963fSmrg 320349dc963fSmrg # Set up the ranlib parameters. 320449dc963fSmrg oldlib="$destdir/$name" 32054e7590efSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 32064e7590efSmrg tool_oldlib=$func_to_tool_file_result 320749dc963fSmrg 320849dc963fSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 320949dc963fSmrg 321049dc963fSmrg if test -n "$stripme" && test -n "$old_striplib"; then 32114e7590efSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 321249dc963fSmrg fi 321349dc963fSmrg 321449dc963fSmrg # Do each command in the postinstall commands. 321549dc963fSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 321649dc963fSmrg done 321749dc963fSmrg 321849dc963fSmrg test -n "$future_libdirs" && \ 321949dc963fSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 322049dc963fSmrg 322149dc963fSmrg if test -n "$current_libdirs"; then 322249dc963fSmrg # Maybe just do a dry run. 322349dc963fSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 322449dc963fSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 322549dc963fSmrg else 322649dc963fSmrg exit $EXIT_SUCCESS 322749dc963fSmrg fi 322849dc963fSmrg} 322949dc963fSmrg 32304e7590efSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 323149dc963fSmrg 323249dc963fSmrg 323349dc963fSmrg# func_generate_dlsyms outputname originator pic_p 323449dc963fSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 323549dc963fSmrg# a dlpreopen symbol table. 323649dc963fSmrgfunc_generate_dlsyms () 323749dc963fSmrg{ 323849dc963fSmrg $opt_debug 323949dc963fSmrg my_outputname="$1" 324049dc963fSmrg my_originator="$2" 324149dc963fSmrg my_pic_p="${3-no}" 324249dc963fSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 324349dc963fSmrg my_dlsyms= 324449dc963fSmrg 324549dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 324649dc963fSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 324749dc963fSmrg my_dlsyms="${my_outputname}S.c" 324849dc963fSmrg else 324949dc963fSmrg func_error "not configured to extract global symbols from dlpreopened files" 325049dc963fSmrg fi 325149dc963fSmrg fi 325249dc963fSmrg 325349dc963fSmrg if test -n "$my_dlsyms"; then 325449dc963fSmrg case $my_dlsyms in 325549dc963fSmrg "") ;; 325649dc963fSmrg *.c) 325749dc963fSmrg # Discover the nlist of each of the dlfiles. 325849dc963fSmrg nlist="$output_objdir/${my_outputname}.nm" 325949dc963fSmrg 326049dc963fSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 326149dc963fSmrg 326249dc963fSmrg # Parse the name list into a source file. 326349dc963fSmrg func_verbose "creating $output_objdir/$my_dlsyms" 326449dc963fSmrg 326549dc963fSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 326649dc963fSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 326749dc963fSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 326849dc963fSmrg 326949dc963fSmrg#ifdef __cplusplus 327049dc963fSmrgextern \"C\" { 327149dc963fSmrg#endif 327249dc963fSmrg 32737aa89044Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 32747aa89044Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 32757aa89044Smrg#endif 32767aa89044Smrg 32774e7590efSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 32784e7590efSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 32794e7590efSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 32804e7590efSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 32814e7590efSmrg# define LT_DLSYM_CONST 32824e7590efSmrg#elif defined(__osf__) 32834e7590efSmrg/* This system does not cope well with relocations in const data. */ 32844e7590efSmrg# define LT_DLSYM_CONST 32854e7590efSmrg#else 32864e7590efSmrg# define LT_DLSYM_CONST const 32874e7590efSmrg#endif 32884e7590efSmrg 328949dc963fSmrg/* External symbol declarations for the compiler. */\ 329049dc963fSmrg" 329149dc963fSmrg 329249dc963fSmrg if test "$dlself" = yes; then 329349dc963fSmrg func_verbose "generating symbol list for \`$output'" 329449dc963fSmrg 329549dc963fSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 329649dc963fSmrg 329749dc963fSmrg # Add our own program objects to the symbol list. 32987aa89044Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 329949dc963fSmrg for progfile in $progfiles; do 33004e7590efSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 33014e7590efSmrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 33024e7590efSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 330349dc963fSmrg done 330449dc963fSmrg 330549dc963fSmrg if test -n "$exclude_expsyms"; then 330649dc963fSmrg $opt_dry_run || { 330749dc963fSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 330849dc963fSmrg eval '$MV "$nlist"T "$nlist"' 330949dc963fSmrg } 33104b0ead49Smrg fi 331149dc963fSmrg 331249dc963fSmrg if test -n "$export_symbols_regex"; then 331349dc963fSmrg $opt_dry_run || { 331449dc963fSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 331549dc963fSmrg eval '$MV "$nlist"T "$nlist"' 331649dc963fSmrg } 331749dc963fSmrg fi 331849dc963fSmrg 331949dc963fSmrg # Prepare the list of exported symbols 332049dc963fSmrg if test -z "$export_symbols"; then 332149dc963fSmrg export_symbols="$output_objdir/$outputname.exp" 332249dc963fSmrg $opt_dry_run || { 332349dc963fSmrg $RM $export_symbols 332449dc963fSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 332549dc963fSmrg case $host in 332649dc963fSmrg *cygwin* | *mingw* | *cegcc* ) 332749dc963fSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 332849dc963fSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 332949dc963fSmrg ;; 333049dc963fSmrg esac 333149dc963fSmrg } 33324b0ead49Smrg else 333349dc963fSmrg $opt_dry_run || { 333449dc963fSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 333549dc963fSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 333649dc963fSmrg eval '$MV "$nlist"T "$nlist"' 333749dc963fSmrg case $host in 33387aa89044Smrg *cygwin* | *mingw* | *cegcc* ) 333949dc963fSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 334049dc963fSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 334149dc963fSmrg ;; 334249dc963fSmrg esac 334349dc963fSmrg } 33444b0ead49Smrg fi 334549dc963fSmrg fi 33464b0ead49Smrg 334749dc963fSmrg for dlprefile in $dlprefiles; do 334849dc963fSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 334949dc963fSmrg func_basename "$dlprefile" 335049dc963fSmrg name="$func_basename_result" 33514e7590efSmrg case $host in 33524e7590efSmrg *cygwin* | *mingw* | *cegcc* ) 33534e7590efSmrg # if an import library, we need to obtain dlname 33544e7590efSmrg if func_win32_import_lib_p "$dlprefile"; then 33554e7590efSmrg func_tr_sh "$dlprefile" 33564e7590efSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 33574e7590efSmrg dlprefile_dlbasename="" 33584e7590efSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 33594e7590efSmrg # Use subshell, to avoid clobbering current variable values 33604e7590efSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 33614e7590efSmrg if test -n "$dlprefile_dlname" ; then 33624e7590efSmrg func_basename "$dlprefile_dlname" 33634e7590efSmrg dlprefile_dlbasename="$func_basename_result" 33644e7590efSmrg else 33654e7590efSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 33664e7590efSmrg $sharedlib_from_linklib_cmd "$dlprefile" 33674e7590efSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 33684e7590efSmrg fi 33694e7590efSmrg fi 33704e7590efSmrg $opt_dry_run || { 33714e7590efSmrg if test -n "$dlprefile_dlbasename" ; then 33724e7590efSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 33734e7590efSmrg else 33744e7590efSmrg func_warning "Could not compute DLL name from $name" 33754e7590efSmrg eval '$ECHO ": $name " >> "$nlist"' 33764e7590efSmrg fi 33774e7590efSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33784e7590efSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 33794e7590efSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 33804e7590efSmrg } 33814e7590efSmrg else # not an import lib 33824e7590efSmrg $opt_dry_run || { 33834e7590efSmrg eval '$ECHO ": $name " >> "$nlist"' 33844e7590efSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33854e7590efSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33864e7590efSmrg } 33874e7590efSmrg fi 33884e7590efSmrg ;; 33894e7590efSmrg *) 33904e7590efSmrg $opt_dry_run || { 33914e7590efSmrg eval '$ECHO ": $name " >> "$nlist"' 33924e7590efSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33934e7590efSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33944e7590efSmrg } 33954e7590efSmrg ;; 33964e7590efSmrg esac 339749dc963fSmrg done 339849dc963fSmrg 339949dc963fSmrg $opt_dry_run || { 340049dc963fSmrg # Make sure we have at least an empty file. 340149dc963fSmrg test -f "$nlist" || : > "$nlist" 340249dc963fSmrg 340349dc963fSmrg if test -n "$exclude_expsyms"; then 340449dc963fSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 340549dc963fSmrg $MV "$nlist"T "$nlist" 34064b0ead49Smrg fi 340749dc963fSmrg 340849dc963fSmrg # Try sorting and uniquifying the output. 340949dc963fSmrg if $GREP -v "^: " < "$nlist" | 341049dc963fSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 341149dc963fSmrg sort -k 3 341249dc963fSmrg else 341349dc963fSmrg sort +2 341449dc963fSmrg fi | 341549dc963fSmrg uniq > "$nlist"S; then 341649dc963fSmrg : 34174b0ead49Smrg else 341849dc963fSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 34194b0ead49Smrg fi 34204b0ead49Smrg 342149dc963fSmrg if test -f "$nlist"S; then 342249dc963fSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 34234b0ead49Smrg else 34247aa89044Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 34254b0ead49Smrg fi 34264b0ead49Smrg 34277aa89044Smrg echo >> "$output_objdir/$my_dlsyms" "\ 34284b0ead49Smrg 342949dc963fSmrg/* The mapping between symbol names and symbols. */ 343049dc963fSmrgtypedef struct { 343149dc963fSmrg const char *name; 343249dc963fSmrg void *address; 343349dc963fSmrg} lt_dlsymlist; 34344e7590efSmrgextern LT_DLSYM_CONST lt_dlsymlist 343549dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 34364e7590efSmrgLT_DLSYM_CONST lt_dlsymlist 343749dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 343849dc963fSmrg{\ 343949dc963fSmrg { \"$my_originator\", (void *) 0 }," 34404b0ead49Smrg 344149dc963fSmrg case $need_lib_prefix in 344249dc963fSmrg no) 344349dc963fSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 344449dc963fSmrg ;; 344549dc963fSmrg *) 344649dc963fSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 344749dc963fSmrg ;; 344849dc963fSmrg esac 34497aa89044Smrg echo >> "$output_objdir/$my_dlsyms" "\ 345049dc963fSmrg {0, (void *) 0} 345149dc963fSmrg}; 34524b0ead49Smrg 345349dc963fSmrg/* This works around a problem in FreeBSD linker */ 345449dc963fSmrg#ifdef FREEBSD_WORKAROUND 345549dc963fSmrgstatic const void *lt_preloaded_setup() { 345649dc963fSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 345749dc963fSmrg} 345849dc963fSmrg#endif 345949dc963fSmrg 346049dc963fSmrg#ifdef __cplusplus 346149dc963fSmrg} 346249dc963fSmrg#endif\ 346349dc963fSmrg" 346449dc963fSmrg } # !$opt_dry_run 346549dc963fSmrg 346649dc963fSmrg pic_flag_for_symtable= 346749dc963fSmrg case "$compile_command " in 346849dc963fSmrg *" -static "*) ;; 346949dc963fSmrg *) 347049dc963fSmrg case $host in 347149dc963fSmrg # compiling the symbol table file with pic_flag works around 347249dc963fSmrg # a FreeBSD bug that causes programs to crash when -lm is 347349dc963fSmrg # linked before any other PIC object. But we must not use 347449dc963fSmrg # pic_flag when linking with -static. The problem exists in 347549dc963fSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 34764e7590efSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 347749dc963fSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 347849dc963fSmrg *-*-hpux*) 347949dc963fSmrg pic_flag_for_symtable=" $pic_flag" ;; 348049dc963fSmrg *) 348149dc963fSmrg if test "X$my_pic_p" != Xno; then 348249dc963fSmrg pic_flag_for_symtable=" $pic_flag" 34834b0ead49Smrg fi 348449dc963fSmrg ;; 348549dc963fSmrg esac 348649dc963fSmrg ;; 348749dc963fSmrg esac 348849dc963fSmrg symtab_cflags= 348949dc963fSmrg for arg in $LTCFLAGS; do 349049dc963fSmrg case $arg in 349149dc963fSmrg -pie | -fpie | -fPIE) ;; 34924e7590efSmrg *) func_append symtab_cflags " $arg" ;; 349349dc963fSmrg esac 349449dc963fSmrg done 34954b0ead49Smrg 349649dc963fSmrg # Now compile the dynamic symbol file. 349749dc963fSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 34984b0ead49Smrg 349949dc963fSmrg # Clean up the generated files. 350049dc963fSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 35014b0ead49Smrg 350249dc963fSmrg # Transform the symbol file into the correct name. 350349dc963fSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 350449dc963fSmrg case $host in 350549dc963fSmrg *cygwin* | *mingw* | *cegcc* ) 350649dc963fSmrg if test -f "$output_objdir/$my_outputname.def"; then 35077aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 35087aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 350949dc963fSmrg else 35107aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35117aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35124b0ead49Smrg fi 351349dc963fSmrg ;; 351449dc963fSmrg *) 35157aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35167aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 351749dc963fSmrg ;; 351849dc963fSmrg esac 351949dc963fSmrg ;; 352049dc963fSmrg *) 352149dc963fSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 352249dc963fSmrg ;; 352349dc963fSmrg esac 352449dc963fSmrg else 352549dc963fSmrg # We keep going just in case the user didn't refer to 352649dc963fSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 352749dc963fSmrg # really was required. 35284b0ead49Smrg 352949dc963fSmrg # Nullify the symbol file. 35307aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 35317aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 353249dc963fSmrg fi 353349dc963fSmrg} 35344b0ead49Smrg 353549dc963fSmrg# func_win32_libid arg 353649dc963fSmrg# return the library type of file 'arg' 353749dc963fSmrg# 353849dc963fSmrg# Need a lot of goo to handle *both* DLLs and import libs 353949dc963fSmrg# Has to be a shell function in order to 'eat' the argument 354049dc963fSmrg# that is supplied when $file_magic_command is called. 35417aa89044Smrg# Despite the name, also deal with 64 bit binaries. 354249dc963fSmrgfunc_win32_libid () 354349dc963fSmrg{ 354449dc963fSmrg $opt_debug 354549dc963fSmrg win32_libid_type="unknown" 354649dc963fSmrg win32_fileres=`file -L $1 2>/dev/null` 354749dc963fSmrg case $win32_fileres in 354849dc963fSmrg *ar\ archive\ import\ library*) # definitely import 354949dc963fSmrg win32_libid_type="x86 archive import" 355049dc963fSmrg ;; 355149dc963fSmrg *ar\ archive*) # could be an import, or static 35527aa89044Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 355349dc963fSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 35547aa89044Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 35554e7590efSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 35564e7590efSmrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 355749dc963fSmrg $SED -n -e ' 355849dc963fSmrg 1,100{ 355949dc963fSmrg / I /{ 356049dc963fSmrg s,.*,import, 356149dc963fSmrg p 356249dc963fSmrg q 356349dc963fSmrg } 356449dc963fSmrg }'` 356549dc963fSmrg case $win32_nmres in 356649dc963fSmrg import*) win32_libid_type="x86 archive import";; 356749dc963fSmrg *) win32_libid_type="x86 archive static";; 356849dc963fSmrg esac 356949dc963fSmrg fi 357049dc963fSmrg ;; 357149dc963fSmrg *DLL*) 357249dc963fSmrg win32_libid_type="x86 DLL" 357349dc963fSmrg ;; 357449dc963fSmrg *executable*) # but shell scripts are "executable" too... 357549dc963fSmrg case $win32_fileres in 357649dc963fSmrg *MS\ Windows\ PE\ Intel*) 357749dc963fSmrg win32_libid_type="x86 DLL" 357849dc963fSmrg ;; 357949dc963fSmrg esac 358049dc963fSmrg ;; 358149dc963fSmrg esac 358249dc963fSmrg $ECHO "$win32_libid_type" 358349dc963fSmrg} 35844b0ead49Smrg 35854e7590efSmrg# func_cygming_dll_for_implib ARG 35864e7590efSmrg# 35874e7590efSmrg# Platform-specific function to extract the 35884e7590efSmrg# name of the DLL associated with the specified 35894e7590efSmrg# import library ARG. 35904e7590efSmrg# Invoked by eval'ing the libtool variable 35914e7590efSmrg# $sharedlib_from_linklib_cmd 35924e7590efSmrg# Result is available in the variable 35934e7590efSmrg# $sharedlib_from_linklib_result 35944e7590efSmrgfunc_cygming_dll_for_implib () 35954e7590efSmrg{ 35964e7590efSmrg $opt_debug 35974e7590efSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 35984e7590efSmrg} 35994e7590efSmrg 36004e7590efSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 36014e7590efSmrg# 36024e7590efSmrg# The is the core of a fallback implementation of a 36034e7590efSmrg# platform-specific function to extract the name of the 36044e7590efSmrg# DLL associated with the specified import library LIBNAME. 36054e7590efSmrg# 36064e7590efSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 36074e7590efSmrg# on the platform and compiler that created the implib. 36084e7590efSmrg# 36094e7590efSmrg# Echos the name of the DLL associated with the 36104e7590efSmrg# specified import library. 36114e7590efSmrgfunc_cygming_dll_for_implib_fallback_core () 36124e7590efSmrg{ 36134e7590efSmrg $opt_debug 36144e7590efSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 36154e7590efSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 36164e7590efSmrg $SED '/^Contents of section '"$match_literal"':/{ 36174e7590efSmrg # Place marker at beginning of archive member dllname section 36184e7590efSmrg s/.*/====MARK====/ 36194e7590efSmrg p 36204e7590efSmrg d 36214e7590efSmrg } 36224e7590efSmrg # These lines can sometimes be longer than 43 characters, but 36234e7590efSmrg # are always uninteresting 36244e7590efSmrg /:[ ]*file format pe[i]\{,1\}-/d 36254e7590efSmrg /^In archive [^:]*:/d 36264e7590efSmrg # Ensure marker is printed 36274e7590efSmrg /^====MARK====/p 36284e7590efSmrg # Remove all lines with less than 43 characters 36294e7590efSmrg /^.\{43\}/!d 36304e7590efSmrg # From remaining lines, remove first 43 characters 36314e7590efSmrg s/^.\{43\}//' | 36324e7590efSmrg $SED -n ' 36334e7590efSmrg # Join marker and all lines until next marker into a single line 36344e7590efSmrg /^====MARK====/ b para 36354e7590efSmrg H 36364e7590efSmrg $ b para 36374e7590efSmrg b 36384e7590efSmrg :para 36394e7590efSmrg x 36404e7590efSmrg s/\n//g 36414e7590efSmrg # Remove the marker 36424e7590efSmrg s/^====MARK====// 36434e7590efSmrg # Remove trailing dots and whitespace 36444e7590efSmrg s/[\. \t]*$// 36454e7590efSmrg # Print 36464e7590efSmrg /./p' | 36474e7590efSmrg # we now have a list, one entry per line, of the stringified 36484e7590efSmrg # contents of the appropriate section of all members of the 36494e7590efSmrg # archive which possess that section. Heuristic: eliminate 36504e7590efSmrg # all those which have a first or second character that is 36514e7590efSmrg # a '.' (that is, objdump's representation of an unprintable 36524e7590efSmrg # character.) This should work for all archives with less than 36534e7590efSmrg # 0x302f exports -- but will fail for DLLs whose name actually 36544e7590efSmrg # begins with a literal '.' or a single character followed by 36554e7590efSmrg # a '.'. 36564e7590efSmrg # 36574e7590efSmrg # Of those that remain, print the first one. 36584e7590efSmrg $SED -e '/^\./d;/^.\./d;q' 36594e7590efSmrg} 36604e7590efSmrg 36614e7590efSmrg# func_cygming_gnu_implib_p ARG 36624e7590efSmrg# This predicate returns with zero status (TRUE) if 36634e7590efSmrg# ARG is a GNU/binutils-style import library. Returns 36644e7590efSmrg# with nonzero status (FALSE) otherwise. 36654e7590efSmrgfunc_cygming_gnu_implib_p () 36664e7590efSmrg{ 36674e7590efSmrg $opt_debug 36684e7590efSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36694e7590efSmrg 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)$'` 36704e7590efSmrg test -n "$func_cygming_gnu_implib_tmp" 36714e7590efSmrg} 36724e7590efSmrg 36734e7590efSmrg# func_cygming_ms_implib_p ARG 36744e7590efSmrg# This predicate returns with zero status (TRUE) if 36754e7590efSmrg# ARG is an MS-style import library. Returns 36764e7590efSmrg# with nonzero status (FALSE) otherwise. 36774e7590efSmrgfunc_cygming_ms_implib_p () 36784e7590efSmrg{ 36794e7590efSmrg $opt_debug 36804e7590efSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36814e7590efSmrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 36824e7590efSmrg test -n "$func_cygming_ms_implib_tmp" 36834e7590efSmrg} 36844e7590efSmrg 36854e7590efSmrg# func_cygming_dll_for_implib_fallback ARG 36864e7590efSmrg# Platform-specific function to extract the 36874e7590efSmrg# name of the DLL associated with the specified 36884e7590efSmrg# import library ARG. 36894e7590efSmrg# 36904e7590efSmrg# This fallback implementation is for use when $DLLTOOL 36914e7590efSmrg# does not support the --identify-strict option. 36924e7590efSmrg# Invoked by eval'ing the libtool variable 36934e7590efSmrg# $sharedlib_from_linklib_cmd 36944e7590efSmrg# Result is available in the variable 36954e7590efSmrg# $sharedlib_from_linklib_result 36964e7590efSmrgfunc_cygming_dll_for_implib_fallback () 36974e7590efSmrg{ 36984e7590efSmrg $opt_debug 36994e7590efSmrg if func_cygming_gnu_implib_p "$1" ; then 37004e7590efSmrg # binutils import library 37014e7590efSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 37024e7590efSmrg elif func_cygming_ms_implib_p "$1" ; then 37034e7590efSmrg # ms-generated import library 37044e7590efSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 37054e7590efSmrg else 37064e7590efSmrg # unknown 37074e7590efSmrg sharedlib_from_linklib_result="" 37084e7590efSmrg fi 37094e7590efSmrg} 37104b0ead49Smrg 37114b0ead49Smrg 371249dc963fSmrg# func_extract_an_archive dir oldlib 371349dc963fSmrgfunc_extract_an_archive () 371449dc963fSmrg{ 371549dc963fSmrg $opt_debug 371649dc963fSmrg f_ex_an_ar_dir="$1"; shift 371749dc963fSmrg f_ex_an_ar_oldlib="$1" 37187aa89044Smrg if test "$lock_old_archive_extraction" = yes; then 37197aa89044Smrg lockfile=$f_ex_an_ar_oldlib.lock 37207aa89044Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 37217aa89044Smrg func_echo "Waiting for $lockfile to be removed" 37227aa89044Smrg sleep 2 37237aa89044Smrg done 37247aa89044Smrg fi 37257aa89044Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 37267aa89044Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 37277aa89044Smrg if test "$lock_old_archive_extraction" = yes; then 37287aa89044Smrg $opt_dry_run || rm -f "$lockfile" 37297aa89044Smrg fi 373049dc963fSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 373149dc963fSmrg : 373249dc963fSmrg else 373349dc963fSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 373449dc963fSmrg fi 373549dc963fSmrg} 37364b0ead49Smrg 37374b0ead49Smrg 373849dc963fSmrg# func_extract_archives gentop oldlib ... 373949dc963fSmrgfunc_extract_archives () 374049dc963fSmrg{ 374149dc963fSmrg $opt_debug 374249dc963fSmrg my_gentop="$1"; shift 374349dc963fSmrg my_oldlibs=${1+"$@"} 374449dc963fSmrg my_oldobjs="" 374549dc963fSmrg my_xlib="" 374649dc963fSmrg my_xabs="" 374749dc963fSmrg my_xdir="" 37484b0ead49Smrg 374949dc963fSmrg for my_xlib in $my_oldlibs; do 375049dc963fSmrg # Extract the objects. 375149dc963fSmrg case $my_xlib in 375249dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 375349dc963fSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 375449dc963fSmrg esac 375549dc963fSmrg func_basename "$my_xlib" 375649dc963fSmrg my_xlib="$func_basename_result" 375749dc963fSmrg my_xlib_u=$my_xlib 375849dc963fSmrg while :; do 375949dc963fSmrg case " $extracted_archives " in 376049dc963fSmrg *" $my_xlib_u "*) 376149dc963fSmrg func_arith $extracted_serial + 1 376249dc963fSmrg extracted_serial=$func_arith_result 376349dc963fSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 376449dc963fSmrg *) break ;; 376549dc963fSmrg esac 376649dc963fSmrg done 376749dc963fSmrg extracted_archives="$extracted_archives $my_xlib_u" 376849dc963fSmrg my_xdir="$my_gentop/$my_xlib_u" 37694b0ead49Smrg 377049dc963fSmrg func_mkdir_p "$my_xdir" 37714b0ead49Smrg 377249dc963fSmrg case $host in 377349dc963fSmrg *-darwin*) 377449dc963fSmrg func_verbose "Extracting $my_xabs" 377549dc963fSmrg # Do not bother doing anything if just a dry run 377649dc963fSmrg $opt_dry_run || { 377749dc963fSmrg darwin_orig_dir=`pwd` 377849dc963fSmrg cd $my_xdir || exit $? 377949dc963fSmrg darwin_archive=$my_xabs 378049dc963fSmrg darwin_curdir=`pwd` 378149dc963fSmrg darwin_base_archive=`basename "$darwin_archive"` 378249dc963fSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 378349dc963fSmrg if test -n "$darwin_arches"; then 378449dc963fSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 378549dc963fSmrg darwin_arch= 378649dc963fSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 378749dc963fSmrg for darwin_arch in $darwin_arches ; do 378849dc963fSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 378949dc963fSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 379049dc963fSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 379149dc963fSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 379249dc963fSmrg cd "$darwin_curdir" 379349dc963fSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 379449dc963fSmrg done # $darwin_arches 379549dc963fSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 379649dc963fSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 379749dc963fSmrg darwin_file= 379849dc963fSmrg darwin_files= 379949dc963fSmrg for darwin_file in $darwin_filelist; do 38007aa89044Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 380149dc963fSmrg $LIPO -create -output "$darwin_file" $darwin_files 380249dc963fSmrg done # $darwin_filelist 380349dc963fSmrg $RM -rf unfat-$$ 380449dc963fSmrg cd "$darwin_orig_dir" 38054b0ead49Smrg else 380649dc963fSmrg cd $darwin_orig_dir 380749dc963fSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 380849dc963fSmrg fi # $darwin_arches 380949dc963fSmrg } # !$opt_dry_run 381049dc963fSmrg ;; 381149dc963fSmrg *) 381249dc963fSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 381349dc963fSmrg ;; 381449dc963fSmrg esac 38157aa89044Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 381649dc963fSmrg done 38174b0ead49Smrg 381849dc963fSmrg func_extract_archives_result="$my_oldobjs" 381949dc963fSmrg} 38204b0ead49Smrg 38214b0ead49Smrg 38227aa89044Smrg# func_emit_wrapper [arg=no] 38237aa89044Smrg# 38247aa89044Smrg# Emit a libtool wrapper script on stdout. 38257aa89044Smrg# Don't directly open a file because we may want to 38267aa89044Smrg# incorporate the script contents within a cygwin/mingw 38277aa89044Smrg# wrapper executable. Must ONLY be called from within 38287aa89044Smrg# func_mode_link because it depends on a number of variables 38297aa89044Smrg# set therein. 383049dc963fSmrg# 38317aa89044Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 38327aa89044Smrg# variable will take. If 'yes', then the emitted script 38337aa89044Smrg# will assume that the directory in which it is stored is 38347aa89044Smrg# the $objdir directory. This is a cygwin/mingw-specific 38357aa89044Smrg# behavior. 38367aa89044Smrgfunc_emit_wrapper () 383749dc963fSmrg{ 38387aa89044Smrg func_emit_wrapper_arg1=${1-no} 38394b0ead49Smrg 384049dc963fSmrg $ECHO "\ 384149dc963fSmrg#! $SHELL 38424b0ead49Smrg 384349dc963fSmrg# $output - temporary wrapper script for $objdir/$outputname 384449dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 384549dc963fSmrg# 384649dc963fSmrg# The $output program cannot be directly executed until all the libtool 384749dc963fSmrg# libraries that it depends on are installed. 384849dc963fSmrg# 384949dc963fSmrg# This wrapper script should never be moved out of the build directory. 385049dc963fSmrg# If it is, it will not operate correctly. 38514b0ead49Smrg 385249dc963fSmrg# Sed substitution that helps us do robust quoting. It backslashifies 385349dc963fSmrg# metacharacters that are still active within double-quoted strings. 385449dc963fSmrgsed_quote_subst='$sed_quote_subst' 38554b0ead49Smrg 385649dc963fSmrg# Be Bourne compatible 385749dc963fSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 385849dc963fSmrg emulate sh 385949dc963fSmrg NULLCMD=: 386049dc963fSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 386149dc963fSmrg # is contrary to our usage. Disable this feature. 386249dc963fSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 386349dc963fSmrg setopt NO_GLOB_SUBST 386449dc963fSmrgelse 386549dc963fSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 386649dc963fSmrgfi 386749dc963fSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 386849dc963fSmrgDUALCASE=1; export DUALCASE # for MKS sh 38694b0ead49Smrg 387049dc963fSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 387149dc963fSmrg# if CDPATH is set. 387249dc963fSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 38734b0ead49Smrg 387449dc963fSmrgrelink_command=\"$relink_command\" 38754b0ead49Smrg 387649dc963fSmrg# This environment variable determines our operation mode. 387749dc963fSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 387849dc963fSmrg # install mode needs the following variables: 387949dc963fSmrg generated_by_libtool_version='$macro_version' 388049dc963fSmrg notinst_deplibs='$notinst_deplibs' 388149dc963fSmrgelse 388249dc963fSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 388349dc963fSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 38847aa89044Smrg file=\"\$0\"" 38857aa89044Smrg 38867aa89044Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 38877aa89044Smrg $ECHO "\ 38887aa89044Smrg 38897aa89044Smrg# A function that is used when there is no print builtin or printf. 38907aa89044Smrgfunc_fallback_echo () 38917aa89044Smrg{ 38927aa89044Smrg eval 'cat <<_LTECHO_EOF 38937aa89044Smrg\$1 38947aa89044Smrg_LTECHO_EOF' 38957aa89044Smrg} 38967aa89044Smrg ECHO=\"$qECHO\" 38977aa89044Smrg fi 38987aa89044Smrg 38997aa89044Smrg# Very basic option parsing. These options are (a) specific to 39007aa89044Smrg# the libtool wrapper, (b) are identical between the wrapper 39017aa89044Smrg# /script/ and the wrapper /executable/ which is used only on 39027aa89044Smrg# windows platforms, and (c) all begin with the string "--lt-" 39037aa89044Smrg# (application programs are unlikely to have options which match 39047aa89044Smrg# this pattern). 39057aa89044Smrg# 39067aa89044Smrg# There are only two supported options: --lt-debug and 39077aa89044Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 39087aa89044Smrg# 39097aa89044Smrg# The first argument to this parsing function should be the 39107aa89044Smrg# script's $0 value, followed by "$@". 39117aa89044Smrglt_option_debug= 39127aa89044Smrgfunc_parse_lt_options () 39137aa89044Smrg{ 39147aa89044Smrg lt_script_arg0=\$0 39157aa89044Smrg shift 39167aa89044Smrg for lt_opt 39177aa89044Smrg do 39187aa89044Smrg case \"\$lt_opt\" in 39197aa89044Smrg --lt-debug) lt_option_debug=1 ;; 39207aa89044Smrg --lt-dump-script) 39217aa89044Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 39227aa89044Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 39237aa89044Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 39247aa89044Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 39257aa89044Smrg exit 0 39267aa89044Smrg ;; 39277aa89044Smrg --lt-*) 39287aa89044Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 39297aa89044Smrg exit 1 39307aa89044Smrg ;; 39317aa89044Smrg esac 39327aa89044Smrg done 39337aa89044Smrg 39347aa89044Smrg # Print the debug banner immediately: 39357aa89044Smrg if test -n \"\$lt_option_debug\"; then 39367aa89044Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 39377aa89044Smrg fi 39387aa89044Smrg} 39397aa89044Smrg 39407aa89044Smrg# Used when --lt-debug. Prints its arguments to stdout 39417aa89044Smrg# (redirection is the responsibility of the caller) 39427aa89044Smrgfunc_lt_dump_args () 39437aa89044Smrg{ 39447aa89044Smrg lt_dump_args_N=1; 39457aa89044Smrg for lt_arg 39467aa89044Smrg do 39477aa89044Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 39487aa89044Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 39497aa89044Smrg done 39507aa89044Smrg} 39517aa89044Smrg 39527aa89044Smrg# Core function for launching the target application 39537aa89044Smrgfunc_exec_program_core () 39547aa89044Smrg{ 395549dc963fSmrg" 39567aa89044Smrg case $host in 39577aa89044Smrg # Backslashes separate directories on plain windows 39587aa89044Smrg *-*-mingw | *-*-os2* | *-cegcc*) 39597aa89044Smrg $ECHO "\ 39607aa89044Smrg if test -n \"\$lt_option_debug\"; then 39617aa89044Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 39627aa89044Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 39637aa89044Smrg fi 39647aa89044Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 39657aa89044Smrg" 39667aa89044Smrg ;; 39677aa89044Smrg 39687aa89044Smrg *) 39697aa89044Smrg $ECHO "\ 39707aa89044Smrg if test -n \"\$lt_option_debug\"; then 39717aa89044Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 39727aa89044Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 39737aa89044Smrg fi 39747aa89044Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 39757aa89044Smrg" 39767aa89044Smrg ;; 39777aa89044Smrg esac 39787aa89044Smrg $ECHO "\ 39797aa89044Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 39807aa89044Smrg exit 1 39817aa89044Smrg} 39827aa89044Smrg 39837aa89044Smrg# A function to encapsulate launching the target application 39847aa89044Smrg# Strips options in the --lt-* namespace from \$@ and 39857aa89044Smrg# launches target application with the remaining arguments. 39867aa89044Smrgfunc_exec_program () 39877aa89044Smrg{ 39884e7590efSmrg case \" \$* \" in 39894e7590efSmrg *\\ --lt-*) 39904e7590efSmrg for lt_wr_arg 39914e7590efSmrg do 39924e7590efSmrg case \$lt_wr_arg in 39934e7590efSmrg --lt-*) ;; 39944e7590efSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 39954e7590efSmrg esac 39964e7590efSmrg shift 39974e7590efSmrg done ;; 39984e7590efSmrg esac 39997aa89044Smrg func_exec_program_core \${1+\"\$@\"} 40007aa89044Smrg} 40017aa89044Smrg 40027aa89044Smrg # Parse options 40037aa89044Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 40044b0ead49Smrg 400549dc963fSmrg # Find the directory that this script lives in. 40067aa89044Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 400749dc963fSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 40084b0ead49Smrg 400949dc963fSmrg # Follow symbolic links until we get to the real thisdir. 40107aa89044Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 401149dc963fSmrg while test -n \"\$file\"; do 40127aa89044Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 40134b0ead49Smrg 401449dc963fSmrg # If there was a directory component, then change thisdir. 401549dc963fSmrg if test \"x\$destdir\" != \"x\$file\"; then 401649dc963fSmrg case \"\$destdir\" in 401749dc963fSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 401849dc963fSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 40194b0ead49Smrg esac 402049dc963fSmrg fi 40214b0ead49Smrg 40227aa89044Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 40237aa89044Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 402449dc963fSmrg done 40254b0ead49Smrg 402649dc963fSmrg # Usually 'no', except on cygwin/mingw when embedded into 402749dc963fSmrg # the cwrapper. 40287aa89044Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 402949dc963fSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 403049dc963fSmrg # special case for '.' 403149dc963fSmrg if test \"\$thisdir\" = \".\"; then 403249dc963fSmrg thisdir=\`pwd\` 403349dc963fSmrg fi 403449dc963fSmrg # remove .libs from thisdir 403549dc963fSmrg case \"\$thisdir\" in 40367aa89044Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 403749dc963fSmrg $objdir ) thisdir=. ;; 403849dc963fSmrg esac 403949dc963fSmrg fi 404049dc963fSmrg 404149dc963fSmrg # Try to get the absolute directory name. 404249dc963fSmrg absdir=\`cd \"\$thisdir\" && pwd\` 404349dc963fSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 404449dc963fSmrg" 404549dc963fSmrg 404649dc963fSmrg if test "$fast_install" = yes; then 404749dc963fSmrg $ECHO "\ 404849dc963fSmrg program=lt-'$outputname'$exeext 404949dc963fSmrg progdir=\"\$thisdir/$objdir\" 405049dc963fSmrg 405149dc963fSmrg if test ! -f \"\$progdir/\$program\" || 405249dc963fSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 405349dc963fSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 405449dc963fSmrg 405549dc963fSmrg file=\"\$\$-\$program\" 405649dc963fSmrg 405749dc963fSmrg if test ! -d \"\$progdir\"; then 405849dc963fSmrg $MKDIR \"\$progdir\" 405949dc963fSmrg else 406049dc963fSmrg $RM \"\$progdir/\$file\" 406149dc963fSmrg fi" 406249dc963fSmrg 406349dc963fSmrg $ECHO "\ 406449dc963fSmrg 406549dc963fSmrg # relink executable if necessary 406649dc963fSmrg if test -n \"\$relink_command\"; then 406749dc963fSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 406849dc963fSmrg else 406949dc963fSmrg $ECHO \"\$relink_command_output\" >&2 407049dc963fSmrg $RM \"\$progdir/\$file\" 407149dc963fSmrg exit 1 40724b0ead49Smrg fi 407349dc963fSmrg fi 40744b0ead49Smrg 407549dc963fSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 407649dc963fSmrg { $RM \"\$progdir/\$program\"; 407749dc963fSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 407849dc963fSmrg $RM \"\$progdir/\$file\" 407949dc963fSmrg fi" 408049dc963fSmrg else 408149dc963fSmrg $ECHO "\ 408249dc963fSmrg program='$outputname' 408349dc963fSmrg progdir=\"\$thisdir/$objdir\" 408449dc963fSmrg" 40854b0ead49Smrg fi 40864b0ead49Smrg 408749dc963fSmrg $ECHO "\ 40884b0ead49Smrg 408949dc963fSmrg if test -f \"\$progdir/\$program\"; then" 40904b0ead49Smrg 40914e7590efSmrg # fixup the dll searchpath if we need to. 40924e7590efSmrg # 40934e7590efSmrg # Fix the DLL searchpath if we need to. Do this before prepending 40944e7590efSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 40954e7590efSmrg # libraries must come first. 40964e7590efSmrg if test -n "$dllsearchpath"; then 40974e7590efSmrg $ECHO "\ 40984e7590efSmrg # Add the dll search path components to the executable PATH 40994e7590efSmrg PATH=$dllsearchpath:\$PATH 41004e7590efSmrg" 41014e7590efSmrg fi 41024e7590efSmrg 410349dc963fSmrg # Export our shlibpath_var if we have one. 410449dc963fSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 410549dc963fSmrg $ECHO "\ 410649dc963fSmrg # Add our own library path to $shlibpath_var 410749dc963fSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 410849dc963fSmrg 410949dc963fSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 411049dc963fSmrg # The second colon is a workaround for a bug in BeOS R4 sed 41117aa89044Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 41124b0ead49Smrg 411349dc963fSmrg export $shlibpath_var 411449dc963fSmrg" 41154b0ead49Smrg fi 41164b0ead49Smrg 411749dc963fSmrg $ECHO "\ 411849dc963fSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 411949dc963fSmrg # Run the actual program with our arguments. 41207aa89044Smrg func_exec_program \${1+\"\$@\"} 412149dc963fSmrg fi 412249dc963fSmrg else 412349dc963fSmrg # The program doesn't exist. 412449dc963fSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 412549dc963fSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 41267aa89044Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 412749dc963fSmrg exit 1 412849dc963fSmrg fi 412949dc963fSmrgfi\ 413049dc963fSmrg" 413149dc963fSmrg} 41324b0ead49Smrg 41334b0ead49Smrg 413449dc963fSmrg# func_emit_cwrapperexe_src 413549dc963fSmrg# emit the source code for a wrapper executable on stdout 413649dc963fSmrg# Must ONLY be called from within func_mode_link because 413749dc963fSmrg# it depends on a number of variable set therein. 413849dc963fSmrgfunc_emit_cwrapperexe_src () 413949dc963fSmrg{ 414049dc963fSmrg cat <<EOF 41414b0ead49Smrg 414249dc963fSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 414349dc963fSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 41444b0ead49Smrg 414549dc963fSmrg The $output program cannot be directly executed until all the libtool 414649dc963fSmrg libraries that it depends on are installed. 41474b0ead49Smrg 414849dc963fSmrg This wrapper executable should never be moved out of the build directory. 414949dc963fSmrg If it is, it will not operate correctly. 415049dc963fSmrg*/ 415149dc963fSmrgEOF 415249dc963fSmrg cat <<"EOF" 41537aa89044Smrg#ifdef _MSC_VER 41547aa89044Smrg# define _CRT_SECURE_NO_DEPRECATE 1 41557aa89044Smrg#endif 415649dc963fSmrg#include <stdio.h> 415749dc963fSmrg#include <stdlib.h> 415849dc963fSmrg#ifdef _MSC_VER 415949dc963fSmrg# include <direct.h> 416049dc963fSmrg# include <process.h> 416149dc963fSmrg# include <io.h> 416249dc963fSmrg#else 416349dc963fSmrg# include <unistd.h> 416449dc963fSmrg# include <stdint.h> 416549dc963fSmrg# ifdef __CYGWIN__ 416649dc963fSmrg# include <io.h> 416749dc963fSmrg# endif 416849dc963fSmrg#endif 416949dc963fSmrg#include <malloc.h> 417049dc963fSmrg#include <stdarg.h> 417149dc963fSmrg#include <assert.h> 417249dc963fSmrg#include <string.h> 417349dc963fSmrg#include <ctype.h> 417449dc963fSmrg#include <errno.h> 417549dc963fSmrg#include <fcntl.h> 417649dc963fSmrg#include <sys/stat.h> 41774b0ead49Smrg 41787aa89044Smrg/* declarations of non-ANSI functions */ 41797aa89044Smrg#if defined(__MINGW32__) 41807aa89044Smrg# ifdef __STRICT_ANSI__ 41817aa89044Smrgint _putenv (const char *); 41827aa89044Smrg# endif 41837aa89044Smrg#elif defined(__CYGWIN__) 41847aa89044Smrg# ifdef __STRICT_ANSI__ 41857aa89044Smrgchar *realpath (const char *, char *); 41867aa89044Smrgint putenv (char *); 41877aa89044Smrgint setenv (const char *, const char *, int); 41887aa89044Smrg# endif 41897aa89044Smrg/* #elif defined (other platforms) ... */ 41907aa89044Smrg#endif 41917aa89044Smrg 41927aa89044Smrg/* portability defines, excluding path handling macros */ 41937aa89044Smrg#if defined(_MSC_VER) 41947aa89044Smrg# define setmode _setmode 41957aa89044Smrg# define stat _stat 41967aa89044Smrg# define chmod _chmod 41977aa89044Smrg# define getcwd _getcwd 41987aa89044Smrg# define putenv _putenv 41997aa89044Smrg# define S_IXUSR _S_IEXEC 42007aa89044Smrg# ifndef _INTPTR_T_DEFINED 42017aa89044Smrg# define _INTPTR_T_DEFINED 42027aa89044Smrg# define intptr_t int 42037aa89044Smrg# endif 42047aa89044Smrg#elif defined(__MINGW32__) 42057aa89044Smrg# define setmode _setmode 42067aa89044Smrg# define stat _stat 42077aa89044Smrg# define chmod _chmod 42087aa89044Smrg# define getcwd _getcwd 42097aa89044Smrg# define putenv _putenv 42107aa89044Smrg#elif defined(__CYGWIN__) 42117aa89044Smrg# define HAVE_SETENV 42127aa89044Smrg# define FOPEN_WB "wb" 42137aa89044Smrg/* #elif defined (other platforms) ... */ 42147aa89044Smrg#endif 42157aa89044Smrg 421649dc963fSmrg#if defined(PATH_MAX) 421749dc963fSmrg# define LT_PATHMAX PATH_MAX 421849dc963fSmrg#elif defined(MAXPATHLEN) 421949dc963fSmrg# define LT_PATHMAX MAXPATHLEN 422049dc963fSmrg#else 422149dc963fSmrg# define LT_PATHMAX 1024 422249dc963fSmrg#endif 42234b0ead49Smrg 422449dc963fSmrg#ifndef S_IXOTH 422549dc963fSmrg# define S_IXOTH 0 422649dc963fSmrg#endif 422749dc963fSmrg#ifndef S_IXGRP 422849dc963fSmrg# define S_IXGRP 0 422949dc963fSmrg#endif 42304b0ead49Smrg 42317aa89044Smrg/* path handling portability macros */ 423249dc963fSmrg#ifndef DIR_SEPARATOR 423349dc963fSmrg# define DIR_SEPARATOR '/' 423449dc963fSmrg# define PATH_SEPARATOR ':' 423549dc963fSmrg#endif 42364b0ead49Smrg 423749dc963fSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 423849dc963fSmrg defined (__OS2__) 423949dc963fSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 424049dc963fSmrg# define FOPEN_WB "wb" 424149dc963fSmrg# ifndef DIR_SEPARATOR_2 424249dc963fSmrg# define DIR_SEPARATOR_2 '\\' 424349dc963fSmrg# endif 424449dc963fSmrg# ifndef PATH_SEPARATOR_2 424549dc963fSmrg# define PATH_SEPARATOR_2 ';' 424649dc963fSmrg# endif 424749dc963fSmrg#endif 42484b0ead49Smrg 424949dc963fSmrg#ifndef DIR_SEPARATOR_2 425049dc963fSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 425149dc963fSmrg#else /* DIR_SEPARATOR_2 */ 425249dc963fSmrg# define IS_DIR_SEPARATOR(ch) \ 425349dc963fSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 425449dc963fSmrg#endif /* DIR_SEPARATOR_2 */ 42554b0ead49Smrg 425649dc963fSmrg#ifndef PATH_SEPARATOR_2 425749dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 425849dc963fSmrg#else /* PATH_SEPARATOR_2 */ 425949dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 426049dc963fSmrg#endif /* PATH_SEPARATOR_2 */ 42614b0ead49Smrg 426249dc963fSmrg#ifndef FOPEN_WB 426349dc963fSmrg# define FOPEN_WB "w" 426449dc963fSmrg#endif 426549dc963fSmrg#ifndef _O_BINARY 426649dc963fSmrg# define _O_BINARY 0 426749dc963fSmrg#endif 42684b0ead49Smrg 426949dc963fSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 427049dc963fSmrg#define XFREE(stale) do { \ 427149dc963fSmrg if (stale) { free ((void *) stale); stale = 0; } \ 427249dc963fSmrg} while (0) 42734b0ead49Smrg 42747aa89044Smrg#if defined(LT_DEBUGWRAPPER) 42757aa89044Smrgstatic int lt_debug = 1; 427649dc963fSmrg#else 42777aa89044Smrgstatic int lt_debug = 0; 427849dc963fSmrg#endif 42794b0ead49Smrg 42807aa89044Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 42814b0ead49Smrg 428249dc963fSmrgvoid *xmalloc (size_t num); 428349dc963fSmrgchar *xstrdup (const char *string); 428449dc963fSmrgconst char *base_name (const char *name); 428549dc963fSmrgchar *find_executable (const char *wrapper); 428649dc963fSmrgchar *chase_symlinks (const char *pathspec); 428749dc963fSmrgint make_executable (const char *path); 428849dc963fSmrgint check_executable (const char *path); 428949dc963fSmrgchar *strendzap (char *str, const char *pat); 42907aa89044Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 42917aa89044Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 42927aa89044Smrgstatic const char *nonnull (const char *s); 42937aa89044Smrgstatic const char *nonempty (const char *s); 429449dc963fSmrgvoid lt_setenv (const char *name, const char *value); 429549dc963fSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 429649dc963fSmrgvoid lt_update_exe_path (const char *name, const char *value); 429749dc963fSmrgvoid lt_update_lib_path (const char *name, const char *value); 42987aa89044Smrgchar **prepare_spawn (char **argv); 42997aa89044Smrgvoid lt_dump_script (FILE *f); 430049dc963fSmrgEOF 430149dc963fSmrg 430249dc963fSmrg cat <<EOF 43034e7590efSmrgvolatile const char * MAGIC_EXE = "$magic_exe"; 430449dc963fSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 430549dc963fSmrgEOF 43064b0ead49Smrg 430749dc963fSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 43084e7590efSmrg func_to_host_path "$temp_rpath" 430949dc963fSmrg cat <<EOF 43104e7590efSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 431149dc963fSmrgEOF 431249dc963fSmrg else 431349dc963fSmrg cat <<"EOF" 431449dc963fSmrgconst char * LIB_PATH_VALUE = ""; 431549dc963fSmrgEOF 43164b0ead49Smrg fi 43174b0ead49Smrg 431849dc963fSmrg if test -n "$dllsearchpath"; then 43194e7590efSmrg func_to_host_path "$dllsearchpath:" 432049dc963fSmrg cat <<EOF 432149dc963fSmrgconst char * EXE_PATH_VARNAME = "PATH"; 43224e7590efSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 43234b0ead49SmrgEOF 43244b0ead49Smrg else 432549dc963fSmrg cat <<"EOF" 432649dc963fSmrgconst char * EXE_PATH_VARNAME = ""; 432749dc963fSmrgconst char * EXE_PATH_VALUE = ""; 432849dc963fSmrgEOF 43294b0ead49Smrg fi 433049dc963fSmrg 433149dc963fSmrg if test "$fast_install" = yes; then 433249dc963fSmrg cat <<EOF 433349dc963fSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 433449dc963fSmrgEOF 43354b0ead49Smrg else 433649dc963fSmrg cat <<EOF 433749dc963fSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 433849dc963fSmrgEOF 43394b0ead49Smrg fi 43404b0ead49Smrg 43414b0ead49Smrg 434249dc963fSmrg cat <<"EOF" 43434b0ead49Smrg 434449dc963fSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 43454b0ead49Smrg 434649dc963fSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 434749dc963fSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 43487aa89044Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 43494b0ead49Smrg 435049dc963fSmrgint 435149dc963fSmrgmain (int argc, char *argv[]) 435249dc963fSmrg{ 435349dc963fSmrg char **newargz; 435449dc963fSmrg int newargc; 435549dc963fSmrg char *tmp_pathspec; 435649dc963fSmrg char *actual_cwrapper_path; 435749dc963fSmrg char *actual_cwrapper_name; 435849dc963fSmrg char *target_name; 435949dc963fSmrg char *lt_argv_zero; 436049dc963fSmrg intptr_t rval = 127; 43614b0ead49Smrg 436249dc963fSmrg int i; 43634b0ead49Smrg 436449dc963fSmrg program_name = (char *) xstrdup (base_name (argv[0])); 43657aa89044Smrg newargz = XMALLOC (char *, argc + 1); 43664b0ead49Smrg 43677aa89044Smrg /* very simple arg parsing; don't want to rely on getopt 43687aa89044Smrg * also, copy all non cwrapper options to newargz, except 43697aa89044Smrg * argz[0], which is handled differently 43707aa89044Smrg */ 43717aa89044Smrg newargc=0; 437249dc963fSmrg for (i = 1; i < argc; i++) 437349dc963fSmrg { 437449dc963fSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 437549dc963fSmrg { 437649dc963fSmrgEOF 437749dc963fSmrg case "$host" in 437849dc963fSmrg *mingw* | *cygwin* ) 437949dc963fSmrg # make stdout use "unix" line endings 438049dc963fSmrg echo " setmode(1,_O_BINARY);" 438149dc963fSmrg ;; 438249dc963fSmrg esac 43834b0ead49Smrg 438449dc963fSmrg cat <<"EOF" 43857aa89044Smrg lt_dump_script (stdout); 438649dc963fSmrg return 0; 438749dc963fSmrg } 43887aa89044Smrg if (strcmp (argv[i], debug_opt) == 0) 43897aa89044Smrg { 43907aa89044Smrg lt_debug = 1; 43917aa89044Smrg continue; 43927aa89044Smrg } 43937aa89044Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 43947aa89044Smrg { 43957aa89044Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 43967aa89044Smrg namespace, but it is not one of the ones we know about and 43977aa89044Smrg have already dealt with, above (inluding dump-script), then 43987aa89044Smrg report an error. Otherwise, targets might begin to believe 43997aa89044Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 44007aa89044Smrg namespace. The first time any user complains about this, we'll 44017aa89044Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 44027aa89044Smrg or a configure.ac-settable value. 44037aa89044Smrg */ 44047aa89044Smrg lt_fatal (__FILE__, __LINE__, 44057aa89044Smrg "unrecognized %s option: '%s'", 44067aa89044Smrg ltwrapper_option_prefix, argv[i]); 44077aa89044Smrg } 44087aa89044Smrg /* otherwise ... */ 44097aa89044Smrg newargz[++newargc] = xstrdup (argv[i]); 441049dc963fSmrg } 44117aa89044Smrg newargz[++newargc] = NULL; 44127aa89044Smrg 44137aa89044SmrgEOF 44147aa89044Smrg cat <<EOF 44157aa89044Smrg /* The GNU banner must be the first non-error debug message */ 44167aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 44177aa89044SmrgEOF 44187aa89044Smrg cat <<"EOF" 44197aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 44207aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 44214b0ead49Smrg 442249dc963fSmrg tmp_pathspec = find_executable (argv[0]); 442349dc963fSmrg if (tmp_pathspec == NULL) 44247aa89044Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 44257aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 44267aa89044Smrg "(main) found exe (before symlink chase) at: %s\n", 44277aa89044Smrg tmp_pathspec); 442849dc963fSmrg 442949dc963fSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 44307aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 44317aa89044Smrg "(main) found exe (after symlink chase) at: %s\n", 44327aa89044Smrg actual_cwrapper_path); 443349dc963fSmrg XFREE (tmp_pathspec); 443449dc963fSmrg 44357aa89044Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 443649dc963fSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 443749dc963fSmrg 443849dc963fSmrg /* wrapper name transforms */ 443949dc963fSmrg strendzap (actual_cwrapper_name, ".exe"); 444049dc963fSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 444149dc963fSmrg XFREE (actual_cwrapper_name); 444249dc963fSmrg actual_cwrapper_name = tmp_pathspec; 444349dc963fSmrg tmp_pathspec = 0; 444449dc963fSmrg 444549dc963fSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 444649dc963fSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 444749dc963fSmrg strendzap (target_name, ".exe"); 444849dc963fSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 444949dc963fSmrg XFREE (target_name); 445049dc963fSmrg target_name = tmp_pathspec; 445149dc963fSmrg tmp_pathspec = 0; 445249dc963fSmrg 44537aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 44547aa89044Smrg "(main) libtool target name: %s\n", 44557aa89044Smrg target_name); 445649dc963fSmrgEOF 44574b0ead49Smrg 445849dc963fSmrg cat <<EOF 445949dc963fSmrg newargz[0] = 446049dc963fSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 446149dc963fSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 446249dc963fSmrg strcpy (newargz[0], actual_cwrapper_path); 446349dc963fSmrg strcat (newargz[0], "$objdir"); 446449dc963fSmrg strcat (newargz[0], "/"); 446549dc963fSmrgEOF 44664b0ead49Smrg 446749dc963fSmrg cat <<"EOF" 446849dc963fSmrg /* stop here, and copy so we don't have to do this twice */ 446949dc963fSmrg tmp_pathspec = xstrdup (newargz[0]); 44704b0ead49Smrg 447149dc963fSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 447249dc963fSmrg strcat (newargz[0], actual_cwrapper_name); 44734b0ead49Smrg 447449dc963fSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 447549dc963fSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 447649dc963fSmrg XFREE (tmp_pathspec); 447749dc963fSmrg tmp_pathspec = NULL; 447849dc963fSmrgEOF 44794b0ead49Smrg 448049dc963fSmrg case $host_os in 448149dc963fSmrg mingw*) 448249dc963fSmrg cat <<"EOF" 448349dc963fSmrg { 448449dc963fSmrg char* p; 448549dc963fSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 448649dc963fSmrg { 448749dc963fSmrg *p = '/'; 448849dc963fSmrg } 448949dc963fSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 449049dc963fSmrg { 449149dc963fSmrg *p = '/'; 449249dc963fSmrg } 449349dc963fSmrg } 449449dc963fSmrgEOF 449549dc963fSmrg ;; 449649dc963fSmrg esac 44974b0ead49Smrg 449849dc963fSmrg cat <<"EOF" 449949dc963fSmrg XFREE (target_name); 450049dc963fSmrg XFREE (actual_cwrapper_path); 450149dc963fSmrg XFREE (actual_cwrapper_name); 45024b0ead49Smrg 450349dc963fSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 450449dc963fSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 45054e7590efSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 45064e7590efSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 45074e7590efSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 45084e7590efSmrg libraries must come first. */ 450949dc963fSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 45104e7590efSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 45114b0ead49Smrg 45127aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 45137aa89044Smrg nonnull (lt_argv_zero)); 451449dc963fSmrg for (i = 0; i < newargc; i++) 451549dc963fSmrg { 45167aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 45177aa89044Smrg i, nonnull (newargz[i])); 451849dc963fSmrg } 45194b0ead49Smrg 452049dc963fSmrgEOF 45214b0ead49Smrg 452249dc963fSmrg case $host_os in 452349dc963fSmrg mingw*) 452449dc963fSmrg cat <<"EOF" 452549dc963fSmrg /* execv doesn't actually work on mingw as expected on unix */ 45267aa89044Smrg newargz = prepare_spawn (newargz); 452749dc963fSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 452849dc963fSmrg if (rval == -1) 452949dc963fSmrg { 453049dc963fSmrg /* failed to start process */ 45317aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 45327aa89044Smrg "(main) failed to launch target \"%s\": %s\n", 45337aa89044Smrg lt_argv_zero, nonnull (strerror (errno))); 453449dc963fSmrg return 127; 453549dc963fSmrg } 453649dc963fSmrg return rval; 453749dc963fSmrgEOF 453849dc963fSmrg ;; 453949dc963fSmrg *) 454049dc963fSmrg cat <<"EOF" 454149dc963fSmrg execv (lt_argv_zero, newargz); 454249dc963fSmrg return rval; /* =127, but avoids unused variable warning */ 454349dc963fSmrgEOF 454449dc963fSmrg ;; 454549dc963fSmrg esac 45464b0ead49Smrg 454749dc963fSmrg cat <<"EOF" 454849dc963fSmrg} 45494b0ead49Smrg 455049dc963fSmrgvoid * 455149dc963fSmrgxmalloc (size_t num) 455249dc963fSmrg{ 455349dc963fSmrg void *p = (void *) malloc (num); 455449dc963fSmrg if (!p) 45557aa89044Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 45564b0ead49Smrg 455749dc963fSmrg return p; 455849dc963fSmrg} 45594b0ead49Smrg 456049dc963fSmrgchar * 456149dc963fSmrgxstrdup (const char *string) 456249dc963fSmrg{ 456349dc963fSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 456449dc963fSmrg string) : NULL; 456549dc963fSmrg} 45664b0ead49Smrg 456749dc963fSmrgconst char * 456849dc963fSmrgbase_name (const char *name) 456949dc963fSmrg{ 457049dc963fSmrg const char *base; 45714b0ead49Smrg 457249dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 457349dc963fSmrg /* Skip over the disk name in MSDOS pathnames. */ 457449dc963fSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 457549dc963fSmrg name += 2; 457649dc963fSmrg#endif 45774b0ead49Smrg 457849dc963fSmrg for (base = name; *name; name++) 457949dc963fSmrg if (IS_DIR_SEPARATOR (*name)) 458049dc963fSmrg base = name + 1; 458149dc963fSmrg return base; 458249dc963fSmrg} 45834b0ead49Smrg 458449dc963fSmrgint 458549dc963fSmrgcheck_executable (const char *path) 458649dc963fSmrg{ 458749dc963fSmrg struct stat st; 45884b0ead49Smrg 45897aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 45907aa89044Smrg nonempty (path)); 459149dc963fSmrg if ((!path) || (!*path)) 459249dc963fSmrg return 0; 45934b0ead49Smrg 459449dc963fSmrg if ((stat (path, &st) >= 0) 459549dc963fSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 459649dc963fSmrg return 1; 459749dc963fSmrg else 459849dc963fSmrg return 0; 459949dc963fSmrg} 46004b0ead49Smrg 460149dc963fSmrgint 460249dc963fSmrgmake_executable (const char *path) 460349dc963fSmrg{ 460449dc963fSmrg int rval = 0; 460549dc963fSmrg struct stat st; 46064b0ead49Smrg 46077aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 46087aa89044Smrg nonempty (path)); 460949dc963fSmrg if ((!path) || (!*path)) 461049dc963fSmrg return 0; 46114b0ead49Smrg 461249dc963fSmrg if (stat (path, &st) >= 0) 461349dc963fSmrg { 461449dc963fSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 461549dc963fSmrg } 461649dc963fSmrg return rval; 461749dc963fSmrg} 46184b0ead49Smrg 461949dc963fSmrg/* Searches for the full path of the wrapper. Returns 462049dc963fSmrg newly allocated full path name if found, NULL otherwise 462149dc963fSmrg Does not chase symlinks, even on platforms that support them. 462249dc963fSmrg*/ 462349dc963fSmrgchar * 462449dc963fSmrgfind_executable (const char *wrapper) 462549dc963fSmrg{ 462649dc963fSmrg int has_slash = 0; 462749dc963fSmrg const char *p; 462849dc963fSmrg const char *p_next; 462949dc963fSmrg /* static buffer for getcwd */ 463049dc963fSmrg char tmp[LT_PATHMAX + 1]; 463149dc963fSmrg int tmp_len; 463249dc963fSmrg char *concat_name; 46334b0ead49Smrg 46347aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 46357aa89044Smrg nonempty (wrapper)); 46364b0ead49Smrg 463749dc963fSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 463849dc963fSmrg return NULL; 46394b0ead49Smrg 464049dc963fSmrg /* Absolute path? */ 464149dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 464249dc963fSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 464349dc963fSmrg { 464449dc963fSmrg concat_name = xstrdup (wrapper); 464549dc963fSmrg if (check_executable (concat_name)) 464649dc963fSmrg return concat_name; 464749dc963fSmrg XFREE (concat_name); 464849dc963fSmrg } 464949dc963fSmrg else 465049dc963fSmrg { 465149dc963fSmrg#endif 465249dc963fSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 465349dc963fSmrg { 465449dc963fSmrg concat_name = xstrdup (wrapper); 465549dc963fSmrg if (check_executable (concat_name)) 465649dc963fSmrg return concat_name; 465749dc963fSmrg XFREE (concat_name); 465849dc963fSmrg } 465949dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 466049dc963fSmrg } 466149dc963fSmrg#endif 46624b0ead49Smrg 466349dc963fSmrg for (p = wrapper; *p; p++) 466449dc963fSmrg if (*p == '/') 466549dc963fSmrg { 466649dc963fSmrg has_slash = 1; 466749dc963fSmrg break; 466849dc963fSmrg } 466949dc963fSmrg if (!has_slash) 467049dc963fSmrg { 467149dc963fSmrg /* no slashes; search PATH */ 467249dc963fSmrg const char *path = getenv ("PATH"); 467349dc963fSmrg if (path != NULL) 467449dc963fSmrg { 467549dc963fSmrg for (p = path; *p; p = p_next) 467649dc963fSmrg { 467749dc963fSmrg const char *q; 467849dc963fSmrg size_t p_len; 467949dc963fSmrg for (q = p; *q; q++) 468049dc963fSmrg if (IS_PATH_SEPARATOR (*q)) 468149dc963fSmrg break; 468249dc963fSmrg p_len = q - p; 468349dc963fSmrg p_next = (*q == '\0' ? q : q + 1); 468449dc963fSmrg if (p_len == 0) 468549dc963fSmrg { 468649dc963fSmrg /* empty path: current directory */ 468749dc963fSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 46887aa89044Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 46897aa89044Smrg nonnull (strerror (errno))); 469049dc963fSmrg tmp_len = strlen (tmp); 469149dc963fSmrg concat_name = 469249dc963fSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 469349dc963fSmrg memcpy (concat_name, tmp, tmp_len); 469449dc963fSmrg concat_name[tmp_len] = '/'; 469549dc963fSmrg strcpy (concat_name + tmp_len + 1, wrapper); 469649dc963fSmrg } 469749dc963fSmrg else 469849dc963fSmrg { 469949dc963fSmrg concat_name = 470049dc963fSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 470149dc963fSmrg memcpy (concat_name, p, p_len); 470249dc963fSmrg concat_name[p_len] = '/'; 470349dc963fSmrg strcpy (concat_name + p_len + 1, wrapper); 470449dc963fSmrg } 470549dc963fSmrg if (check_executable (concat_name)) 470649dc963fSmrg return concat_name; 470749dc963fSmrg XFREE (concat_name); 470849dc963fSmrg } 470949dc963fSmrg } 471049dc963fSmrg /* not found in PATH; assume curdir */ 471149dc963fSmrg } 471249dc963fSmrg /* Relative path | not found in path: prepend cwd */ 471349dc963fSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 47147aa89044Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 47157aa89044Smrg nonnull (strerror (errno))); 471649dc963fSmrg tmp_len = strlen (tmp); 471749dc963fSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 471849dc963fSmrg memcpy (concat_name, tmp, tmp_len); 471949dc963fSmrg concat_name[tmp_len] = '/'; 472049dc963fSmrg strcpy (concat_name + tmp_len + 1, wrapper); 47214b0ead49Smrg 472249dc963fSmrg if (check_executable (concat_name)) 472349dc963fSmrg return concat_name; 472449dc963fSmrg XFREE (concat_name); 472549dc963fSmrg return NULL; 472649dc963fSmrg} 47274b0ead49Smrg 472849dc963fSmrgchar * 472949dc963fSmrgchase_symlinks (const char *pathspec) 473049dc963fSmrg{ 473149dc963fSmrg#ifndef S_ISLNK 473249dc963fSmrg return xstrdup (pathspec); 473349dc963fSmrg#else 473449dc963fSmrg char buf[LT_PATHMAX]; 473549dc963fSmrg struct stat s; 473649dc963fSmrg char *tmp_pathspec = xstrdup (pathspec); 473749dc963fSmrg char *p; 473849dc963fSmrg int has_symlinks = 0; 473949dc963fSmrg while (strlen (tmp_pathspec) && !has_symlinks) 474049dc963fSmrg { 47417aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 47427aa89044Smrg "checking path component for symlinks: %s\n", 47437aa89044Smrg tmp_pathspec); 474449dc963fSmrg if (lstat (tmp_pathspec, &s) == 0) 474549dc963fSmrg { 474649dc963fSmrg if (S_ISLNK (s.st_mode) != 0) 474749dc963fSmrg { 474849dc963fSmrg has_symlinks = 1; 474949dc963fSmrg break; 475049dc963fSmrg } 47514b0ead49Smrg 475249dc963fSmrg /* search backwards for last DIR_SEPARATOR */ 475349dc963fSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 475449dc963fSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 475549dc963fSmrg p--; 475649dc963fSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 475749dc963fSmrg { 475849dc963fSmrg /* no more DIR_SEPARATORS left */ 475949dc963fSmrg break; 476049dc963fSmrg } 476149dc963fSmrg *p = '\0'; 476249dc963fSmrg } 476349dc963fSmrg else 476449dc963fSmrg { 47657aa89044Smrg lt_fatal (__FILE__, __LINE__, 47667aa89044Smrg "error accessing file \"%s\": %s", 47677aa89044Smrg tmp_pathspec, nonnull (strerror (errno))); 476849dc963fSmrg } 476949dc963fSmrg } 477049dc963fSmrg XFREE (tmp_pathspec); 47714b0ead49Smrg 477249dc963fSmrg if (!has_symlinks) 477349dc963fSmrg { 477449dc963fSmrg return xstrdup (pathspec); 477549dc963fSmrg } 47764b0ead49Smrg 477749dc963fSmrg tmp_pathspec = realpath (pathspec, buf); 477849dc963fSmrg if (tmp_pathspec == 0) 477949dc963fSmrg { 47807aa89044Smrg lt_fatal (__FILE__, __LINE__, 47817aa89044Smrg "could not follow symlinks for %s", pathspec); 478249dc963fSmrg } 478349dc963fSmrg return xstrdup (tmp_pathspec); 478449dc963fSmrg#endif 478549dc963fSmrg} 47864b0ead49Smrg 478749dc963fSmrgchar * 478849dc963fSmrgstrendzap (char *str, const char *pat) 478949dc963fSmrg{ 479049dc963fSmrg size_t len, patlen; 47914b0ead49Smrg 479249dc963fSmrg assert (str != NULL); 479349dc963fSmrg assert (pat != NULL); 47944b0ead49Smrg 479549dc963fSmrg len = strlen (str); 479649dc963fSmrg patlen = strlen (pat); 47974b0ead49Smrg 479849dc963fSmrg if (patlen <= len) 479949dc963fSmrg { 480049dc963fSmrg str += len - patlen; 480149dc963fSmrg if (strcmp (str, pat) == 0) 480249dc963fSmrg *str = '\0'; 480349dc963fSmrg } 480449dc963fSmrg return str; 480549dc963fSmrg} 48064b0ead49Smrg 48077aa89044Smrgvoid 48087aa89044Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 48097aa89044Smrg{ 48107aa89044Smrg va_list args; 48117aa89044Smrg if (lt_debug) 48127aa89044Smrg { 48137aa89044Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 48147aa89044Smrg va_start (args, fmt); 48157aa89044Smrg (void) vfprintf (stderr, fmt, args); 48167aa89044Smrg va_end (args); 48177aa89044Smrg } 48187aa89044Smrg} 48197aa89044Smrg 482049dc963fSmrgstatic void 48217aa89044Smrglt_error_core (int exit_status, const char *file, 48227aa89044Smrg int line, const char *mode, 482349dc963fSmrg const char *message, va_list ap) 482449dc963fSmrg{ 48257aa89044Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 482649dc963fSmrg vfprintf (stderr, message, ap); 482749dc963fSmrg fprintf (stderr, ".\n"); 48284b0ead49Smrg 482949dc963fSmrg if (exit_status >= 0) 483049dc963fSmrg exit (exit_status); 483149dc963fSmrg} 48324b0ead49Smrg 483349dc963fSmrgvoid 48347aa89044Smrglt_fatal (const char *file, int line, const char *message, ...) 483549dc963fSmrg{ 483649dc963fSmrg va_list ap; 483749dc963fSmrg va_start (ap, message); 48387aa89044Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 483949dc963fSmrg va_end (ap); 484049dc963fSmrg} 48414b0ead49Smrg 48427aa89044Smrgstatic const char * 48437aa89044Smrgnonnull (const char *s) 48447aa89044Smrg{ 48457aa89044Smrg return s ? s : "(null)"; 48467aa89044Smrg} 48477aa89044Smrg 48487aa89044Smrgstatic const char * 48497aa89044Smrgnonempty (const char *s) 48507aa89044Smrg{ 48517aa89044Smrg return (s && !*s) ? "(empty)" : nonnull (s); 48527aa89044Smrg} 48537aa89044Smrg 485449dc963fSmrgvoid 485549dc963fSmrglt_setenv (const char *name, const char *value) 485649dc963fSmrg{ 48577aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 48587aa89044Smrg "(lt_setenv) setting '%s' to '%s'\n", 48597aa89044Smrg nonnull (name), nonnull (value)); 486049dc963fSmrg { 486149dc963fSmrg#ifdef HAVE_SETENV 486249dc963fSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 486349dc963fSmrg char *str = xstrdup (value); 486449dc963fSmrg setenv (name, str, 1); 486549dc963fSmrg#else 486649dc963fSmrg int len = strlen (name) + 1 + strlen (value) + 1; 486749dc963fSmrg char *str = XMALLOC (char, len); 486849dc963fSmrg sprintf (str, "%s=%s", name, value); 486949dc963fSmrg if (putenv (str) != EXIT_SUCCESS) 487049dc963fSmrg { 487149dc963fSmrg XFREE (str); 487249dc963fSmrg } 487349dc963fSmrg#endif 487449dc963fSmrg } 487549dc963fSmrg} 48764b0ead49Smrg 487749dc963fSmrgchar * 487849dc963fSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 487949dc963fSmrg{ 488049dc963fSmrg char *new_value; 488149dc963fSmrg if (orig_value && *orig_value) 488249dc963fSmrg { 488349dc963fSmrg int orig_value_len = strlen (orig_value); 488449dc963fSmrg int add_len = strlen (add); 488549dc963fSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 488649dc963fSmrg if (to_end) 488749dc963fSmrg { 488849dc963fSmrg strcpy (new_value, orig_value); 488949dc963fSmrg strcpy (new_value + orig_value_len, add); 489049dc963fSmrg } 489149dc963fSmrg else 489249dc963fSmrg { 489349dc963fSmrg strcpy (new_value, add); 489449dc963fSmrg strcpy (new_value + add_len, orig_value); 489549dc963fSmrg } 489649dc963fSmrg } 489749dc963fSmrg else 489849dc963fSmrg { 489949dc963fSmrg new_value = xstrdup (add); 490049dc963fSmrg } 490149dc963fSmrg return new_value; 490249dc963fSmrg} 49034b0ead49Smrg 490449dc963fSmrgvoid 490549dc963fSmrglt_update_exe_path (const char *name, const char *value) 490649dc963fSmrg{ 49077aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 49087aa89044Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 49097aa89044Smrg nonnull (name), nonnull (value)); 49104b0ead49Smrg 491149dc963fSmrg if (name && *name && value && *value) 491249dc963fSmrg { 491349dc963fSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 491449dc963fSmrg /* some systems can't cope with a ':'-terminated path #' */ 491549dc963fSmrg int len = strlen (new_value); 491649dc963fSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 491749dc963fSmrg { 491849dc963fSmrg new_value[len-1] = '\0'; 491949dc963fSmrg } 492049dc963fSmrg lt_setenv (name, new_value); 492149dc963fSmrg XFREE (new_value); 492249dc963fSmrg } 492349dc963fSmrg} 49244b0ead49Smrg 492549dc963fSmrgvoid 492649dc963fSmrglt_update_lib_path (const char *name, const char *value) 492749dc963fSmrg{ 49287aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 49297aa89044Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 49307aa89044Smrg nonnull (name), nonnull (value)); 49314b0ead49Smrg 493249dc963fSmrg if (name && *name && value && *value) 493349dc963fSmrg { 493449dc963fSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 493549dc963fSmrg lt_setenv (name, new_value); 493649dc963fSmrg XFREE (new_value); 493749dc963fSmrg } 493849dc963fSmrg} 49394b0ead49Smrg 49407aa89044SmrgEOF 49417aa89044Smrg case $host_os in 49427aa89044Smrg mingw*) 49437aa89044Smrg cat <<"EOF" 49447aa89044Smrg 49457aa89044Smrg/* Prepares an argument vector before calling spawn(). 49467aa89044Smrg Note that spawn() does not by itself call the command interpreter 49477aa89044Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 49487aa89044Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 49497aa89044Smrg GetVersionEx(&v); 49507aa89044Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 49517aa89044Smrg }) ? "cmd.exe" : "command.com"). 49527aa89044Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 49537aa89044Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 49547aa89044Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 49557aa89044Smrg special way: 49567aa89044Smrg - Space and tab are interpreted as delimiters. They are not treated as 49577aa89044Smrg delimiters if they are surrounded by double quotes: "...". 49587aa89044Smrg - Unescaped double quotes are removed from the input. Their only effect is 49597aa89044Smrg that within double quotes, space and tab are treated like normal 49607aa89044Smrg characters. 49617aa89044Smrg - Backslashes not followed by double quotes are not special. 49627aa89044Smrg - But 2*n+1 backslashes followed by a double quote become 49637aa89044Smrg n backslashes followed by a double quote (n >= 0): 49647aa89044Smrg \" -> " 49657aa89044Smrg \\\" -> \" 49667aa89044Smrg \\\\\" -> \\" 49677aa89044Smrg */ 49687aa89044Smrg#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" 49697aa89044Smrg#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" 49707aa89044Smrgchar ** 49717aa89044Smrgprepare_spawn (char **argv) 49727aa89044Smrg{ 49737aa89044Smrg size_t argc; 49747aa89044Smrg char **new_argv; 49757aa89044Smrg size_t i; 49767aa89044Smrg 49777aa89044Smrg /* Count number of arguments. */ 49787aa89044Smrg for (argc = 0; argv[argc] != NULL; argc++) 49797aa89044Smrg ; 49807aa89044Smrg 49817aa89044Smrg /* Allocate new argument vector. */ 49827aa89044Smrg new_argv = XMALLOC (char *, argc + 1); 49837aa89044Smrg 49847aa89044Smrg /* Put quoted arguments into the new argument vector. */ 49857aa89044Smrg for (i = 0; i < argc; i++) 49867aa89044Smrg { 49877aa89044Smrg const char *string = argv[i]; 49887aa89044Smrg 49897aa89044Smrg if (string[0] == '\0') 49907aa89044Smrg new_argv[i] = xstrdup ("\"\""); 49917aa89044Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 49927aa89044Smrg { 49937aa89044Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 49947aa89044Smrg size_t length; 49957aa89044Smrg unsigned int backslashes; 49967aa89044Smrg const char *s; 49977aa89044Smrg char *quoted_string; 49987aa89044Smrg char *p; 49997aa89044Smrg 50007aa89044Smrg length = 0; 50017aa89044Smrg backslashes = 0; 50027aa89044Smrg if (quote_around) 50037aa89044Smrg length++; 50047aa89044Smrg for (s = string; *s != '\0'; s++) 50057aa89044Smrg { 50067aa89044Smrg char c = *s; 50077aa89044Smrg if (c == '"') 50087aa89044Smrg length += backslashes + 1; 50097aa89044Smrg length++; 50107aa89044Smrg if (c == '\\') 50117aa89044Smrg backslashes++; 50127aa89044Smrg else 50137aa89044Smrg backslashes = 0; 50147aa89044Smrg } 50157aa89044Smrg if (quote_around) 50167aa89044Smrg length += backslashes + 1; 50177aa89044Smrg 50187aa89044Smrg quoted_string = XMALLOC (char, length + 1); 50197aa89044Smrg 50207aa89044Smrg p = quoted_string; 50217aa89044Smrg backslashes = 0; 50227aa89044Smrg if (quote_around) 50237aa89044Smrg *p++ = '"'; 50247aa89044Smrg for (s = string; *s != '\0'; s++) 50257aa89044Smrg { 50267aa89044Smrg char c = *s; 50277aa89044Smrg if (c == '"') 50287aa89044Smrg { 50297aa89044Smrg unsigned int j; 50307aa89044Smrg for (j = backslashes + 1; j > 0; j--) 50317aa89044Smrg *p++ = '\\'; 50327aa89044Smrg } 50337aa89044Smrg *p++ = c; 50347aa89044Smrg if (c == '\\') 50357aa89044Smrg backslashes++; 50367aa89044Smrg else 50377aa89044Smrg backslashes = 0; 50387aa89044Smrg } 50397aa89044Smrg if (quote_around) 50407aa89044Smrg { 50417aa89044Smrg unsigned int j; 50427aa89044Smrg for (j = backslashes; j > 0; j--) 50437aa89044Smrg *p++ = '\\'; 50447aa89044Smrg *p++ = '"'; 50457aa89044Smrg } 50467aa89044Smrg *p = '\0'; 50477aa89044Smrg 50487aa89044Smrg new_argv[i] = quoted_string; 50497aa89044Smrg } 50507aa89044Smrg else 50517aa89044Smrg new_argv[i] = (char *) string; 50527aa89044Smrg } 50537aa89044Smrg new_argv[argc] = NULL; 50547aa89044Smrg 50557aa89044Smrg return new_argv; 50567aa89044Smrg} 50577aa89044SmrgEOF 50587aa89044Smrg ;; 50597aa89044Smrg esac 50607aa89044Smrg 50617aa89044Smrg cat <<"EOF" 50627aa89044Smrgvoid lt_dump_script (FILE* f) 50637aa89044Smrg{ 50647aa89044SmrgEOF 50657aa89044Smrg func_emit_wrapper yes | 50664e7590efSmrg $SED -n -e ' 50674e7590efSmrgs/^\(.\{79\}\)\(..*\)/\1\ 50684e7590efSmrg\2/ 50694e7590efSmrgh 50704e7590efSmrgs/\([\\"]\)/\\\1/g 50714e7590efSmrgs/$/\\n/ 50724e7590efSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 50734e7590efSmrgg 50744e7590efSmrgD' 50757aa89044Smrg cat <<"EOF" 50767aa89044Smrg} 507749dc963fSmrgEOF 507849dc963fSmrg} 507949dc963fSmrg# end: func_emit_cwrapperexe_src 50804b0ead49Smrg 50817aa89044Smrg# func_win32_import_lib_p ARG 50827aa89044Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 50837aa89044Smrgfunc_win32_import_lib_p () 50847aa89044Smrg{ 50857aa89044Smrg $opt_debug 50867aa89044Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 50877aa89044Smrg *import*) : ;; 50887aa89044Smrg *) false ;; 50897aa89044Smrg esac 50907aa89044Smrg} 50917aa89044Smrg 509249dc963fSmrg# func_mode_link arg... 509349dc963fSmrgfunc_mode_link () 509449dc963fSmrg{ 509549dc963fSmrg $opt_debug 509649dc963fSmrg case $host in 509749dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 509849dc963fSmrg # It is impossible to link a dll without this setting, and 509949dc963fSmrg # we shouldn't force the makefile maintainer to figure out 510049dc963fSmrg # which system we are compiling for in order to pass an extra 510149dc963fSmrg # flag for every libtool invocation. 510249dc963fSmrg # allow_undefined=no 51034b0ead49Smrg 510449dc963fSmrg # FIXME: Unfortunately, there are problems with the above when trying 510549dc963fSmrg # to make a dll which has undefined symbols, in which case not 510649dc963fSmrg # even a static library is built. For now, we need to specify 510749dc963fSmrg # -no-undefined on the libtool link line when we can be certain 510849dc963fSmrg # that all symbols are satisfied, otherwise we get a static library. 510949dc963fSmrg allow_undefined=yes 511049dc963fSmrg ;; 511149dc963fSmrg *) 511249dc963fSmrg allow_undefined=yes 511349dc963fSmrg ;; 511449dc963fSmrg esac 511549dc963fSmrg libtool_args=$nonopt 511649dc963fSmrg base_compile="$nonopt $@" 511749dc963fSmrg compile_command=$nonopt 511849dc963fSmrg finalize_command=$nonopt 51194b0ead49Smrg 512049dc963fSmrg compile_rpath= 512149dc963fSmrg finalize_rpath= 512249dc963fSmrg compile_shlibpath= 512349dc963fSmrg finalize_shlibpath= 512449dc963fSmrg convenience= 512549dc963fSmrg old_convenience= 512649dc963fSmrg deplibs= 512749dc963fSmrg old_deplibs= 512849dc963fSmrg compiler_flags= 512949dc963fSmrg linker_flags= 513049dc963fSmrg dllsearchpath= 513149dc963fSmrg lib_search_path=`pwd` 513249dc963fSmrg inst_prefix_dir= 513349dc963fSmrg new_inherited_linker_flags= 51344b0ead49Smrg 513549dc963fSmrg avoid_version=no 51367aa89044Smrg bindir= 513749dc963fSmrg dlfiles= 513849dc963fSmrg dlprefiles= 513949dc963fSmrg dlself=no 514049dc963fSmrg export_dynamic=no 514149dc963fSmrg export_symbols= 514249dc963fSmrg export_symbols_regex= 514349dc963fSmrg generated= 514449dc963fSmrg libobjs= 514549dc963fSmrg ltlibs= 514649dc963fSmrg module=no 514749dc963fSmrg no_install=no 514849dc963fSmrg objs= 514949dc963fSmrg non_pic_objects= 515049dc963fSmrg precious_files_regex= 515149dc963fSmrg prefer_static_libs=no 515249dc963fSmrg preload=no 515349dc963fSmrg prev= 515449dc963fSmrg prevarg= 515549dc963fSmrg release= 515649dc963fSmrg rpath= 515749dc963fSmrg xrpath= 515849dc963fSmrg perm_rpath= 515949dc963fSmrg temp_rpath= 516049dc963fSmrg thread_safe=no 516149dc963fSmrg vinfo= 516249dc963fSmrg vinfo_number=no 516349dc963fSmrg weak_libs= 516449dc963fSmrg single_module="${wl}-single_module" 516549dc963fSmrg func_infer_tag $base_compile 516649dc963fSmrg 516749dc963fSmrg # We need to know -static, to get the right output filenames. 516849dc963fSmrg for arg 516949dc963fSmrg do 517049dc963fSmrg case $arg in 517149dc963fSmrg -shared) 517249dc963fSmrg test "$build_libtool_libs" != yes && \ 517349dc963fSmrg func_fatal_configuration "can not build a shared library" 517449dc963fSmrg build_old_libs=no 517549dc963fSmrg break 517649dc963fSmrg ;; 517749dc963fSmrg -all-static | -static | -static-libtool-libs) 517849dc963fSmrg case $arg in 517949dc963fSmrg -all-static) 518049dc963fSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 518149dc963fSmrg func_warning "complete static linking is impossible in this configuration" 518249dc963fSmrg fi 518349dc963fSmrg if test -n "$link_static_flag"; then 518449dc963fSmrg dlopen_self=$dlopen_self_static 518549dc963fSmrg fi 518649dc963fSmrg prefer_static_libs=yes 518749dc963fSmrg ;; 518849dc963fSmrg -static) 518949dc963fSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 519049dc963fSmrg dlopen_self=$dlopen_self_static 519149dc963fSmrg fi 519249dc963fSmrg prefer_static_libs=built 519349dc963fSmrg ;; 519449dc963fSmrg -static-libtool-libs) 519549dc963fSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 519649dc963fSmrg dlopen_self=$dlopen_self_static 51974b0ead49Smrg fi 519849dc963fSmrg prefer_static_libs=yes 519949dc963fSmrg ;; 520049dc963fSmrg esac 520149dc963fSmrg build_libtool_libs=no 520249dc963fSmrg build_old_libs=yes 520349dc963fSmrg break 520449dc963fSmrg ;; 520549dc963fSmrg esac 520649dc963fSmrg done 52074b0ead49Smrg 520849dc963fSmrg # See if our shared archives depend on static archives. 520949dc963fSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 52104b0ead49Smrg 521149dc963fSmrg # Go through the arguments, transforming them on the way. 521249dc963fSmrg while test "$#" -gt 0; do 521349dc963fSmrg arg="$1" 521449dc963fSmrg shift 521549dc963fSmrg func_quote_for_eval "$arg" 521649dc963fSmrg qarg=$func_quote_for_eval_unquoted_result 521749dc963fSmrg func_append libtool_args " $func_quote_for_eval_result" 52184b0ead49Smrg 521949dc963fSmrg # If the previous option needs an argument, assign it. 522049dc963fSmrg if test -n "$prev"; then 522149dc963fSmrg case $prev in 522249dc963fSmrg output) 522349dc963fSmrg func_append compile_command " @OUTPUT@" 522449dc963fSmrg func_append finalize_command " @OUTPUT@" 522549dc963fSmrg ;; 522649dc963fSmrg esac 52274b0ead49Smrg 522849dc963fSmrg case $prev in 52297aa89044Smrg bindir) 52307aa89044Smrg bindir="$arg" 52317aa89044Smrg prev= 52327aa89044Smrg continue 52337aa89044Smrg ;; 523449dc963fSmrg dlfiles|dlprefiles) 523549dc963fSmrg if test "$preload" = no; then 523649dc963fSmrg # Add the symbol object into the linking commands. 523749dc963fSmrg func_append compile_command " @SYMFILE@" 523849dc963fSmrg func_append finalize_command " @SYMFILE@" 523949dc963fSmrg preload=yes 524049dc963fSmrg fi 524149dc963fSmrg case $arg in 524249dc963fSmrg *.la | *.lo) ;; # We handle these cases below. 524349dc963fSmrg force) 524449dc963fSmrg if test "$dlself" = no; then 524549dc963fSmrg dlself=needless 524649dc963fSmrg export_dynamic=yes 524749dc963fSmrg fi 524849dc963fSmrg prev= 524949dc963fSmrg continue 525049dc963fSmrg ;; 525149dc963fSmrg self) 525249dc963fSmrg if test "$prev" = dlprefiles; then 525349dc963fSmrg dlself=yes 525449dc963fSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 525549dc963fSmrg dlself=yes 52564b0ead49Smrg else 525749dc963fSmrg dlself=needless 525849dc963fSmrg export_dynamic=yes 52594b0ead49Smrg fi 526049dc963fSmrg prev= 526149dc963fSmrg continue 526249dc963fSmrg ;; 526349dc963fSmrg *) 526449dc963fSmrg if test "$prev" = dlfiles; then 52654e7590efSmrg func_append dlfiles " $arg" 52664b0ead49Smrg else 52674e7590efSmrg func_append dlprefiles " $arg" 52684b0ead49Smrg fi 526949dc963fSmrg prev= 527049dc963fSmrg continue 527149dc963fSmrg ;; 527249dc963fSmrg esac 527349dc963fSmrg ;; 527449dc963fSmrg expsyms) 527549dc963fSmrg export_symbols="$arg" 527649dc963fSmrg test -f "$arg" \ 527749dc963fSmrg || func_fatal_error "symbol file \`$arg' does not exist" 527849dc963fSmrg prev= 527949dc963fSmrg continue 528049dc963fSmrg ;; 528149dc963fSmrg expsyms_regex) 528249dc963fSmrg export_symbols_regex="$arg" 528349dc963fSmrg prev= 528449dc963fSmrg continue 528549dc963fSmrg ;; 528649dc963fSmrg framework) 52874b0ead49Smrg case $host in 528849dc963fSmrg *-*-darwin*) 528949dc963fSmrg case "$deplibs " in 529049dc963fSmrg *" $qarg.ltframework "*) ;; 52914e7590efSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 529249dc963fSmrg ;; 529349dc963fSmrg esac 529449dc963fSmrg ;; 52954b0ead49Smrg esac 529649dc963fSmrg prev= 529749dc963fSmrg continue 52984b0ead49Smrg ;; 529949dc963fSmrg inst_prefix) 530049dc963fSmrg inst_prefix_dir="$arg" 530149dc963fSmrg prev= 530249dc963fSmrg continue 53034b0ead49Smrg ;; 530449dc963fSmrg objectlist) 530549dc963fSmrg if test -f "$arg"; then 530649dc963fSmrg save_arg=$arg 530749dc963fSmrg moreargs= 530849dc963fSmrg for fil in `cat "$save_arg"` 530949dc963fSmrg do 53104e7590efSmrg# func_append moreargs " $fil" 531149dc963fSmrg arg=$fil 531249dc963fSmrg # A libtool-controlled object. 53134b0ead49Smrg 531449dc963fSmrg # Check to see that this really is a libtool object. 531549dc963fSmrg if func_lalib_unsafe_p "$arg"; then 531649dc963fSmrg pic_object= 531749dc963fSmrg non_pic_object= 53184b0ead49Smrg 531949dc963fSmrg # Read the .lo file 532049dc963fSmrg func_source "$arg" 53214b0ead49Smrg 532249dc963fSmrg if test -z "$pic_object" || 532349dc963fSmrg test -z "$non_pic_object" || 532449dc963fSmrg test "$pic_object" = none && 532549dc963fSmrg test "$non_pic_object" = none; then 532649dc963fSmrg func_fatal_error "cannot find name of object for \`$arg'" 532749dc963fSmrg fi 53284b0ead49Smrg 532949dc963fSmrg # Extract subdirectory from the argument. 533049dc963fSmrg func_dirname "$arg" "/" "" 533149dc963fSmrg xdir="$func_dirname_result" 53324b0ead49Smrg 533349dc963fSmrg if test "$pic_object" != none; then 533449dc963fSmrg # Prepend the subdirectory the object is found in. 533549dc963fSmrg pic_object="$xdir$pic_object" 53364b0ead49Smrg 533749dc963fSmrg if test "$prev" = dlfiles; then 533849dc963fSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 53394e7590efSmrg func_append dlfiles " $pic_object" 534049dc963fSmrg prev= 534149dc963fSmrg continue 534249dc963fSmrg else 534349dc963fSmrg # If libtool objects are unsupported, then we need to preload. 534449dc963fSmrg prev=dlprefiles 534549dc963fSmrg fi 534649dc963fSmrg fi 53474b0ead49Smrg 534849dc963fSmrg # CHECK ME: I think I busted this. -Ossama 534949dc963fSmrg if test "$prev" = dlprefiles; then 535049dc963fSmrg # Preload the old-style object. 53514e7590efSmrg func_append dlprefiles " $pic_object" 535249dc963fSmrg prev= 535349dc963fSmrg fi 53544b0ead49Smrg 535549dc963fSmrg # A PIC object. 535649dc963fSmrg func_append libobjs " $pic_object" 535749dc963fSmrg arg="$pic_object" 535849dc963fSmrg fi 53594b0ead49Smrg 536049dc963fSmrg # Non-PIC object. 536149dc963fSmrg if test "$non_pic_object" != none; then 536249dc963fSmrg # Prepend the subdirectory the object is found in. 536349dc963fSmrg non_pic_object="$xdir$non_pic_object" 53644b0ead49Smrg 536549dc963fSmrg # A standard non-PIC object 536649dc963fSmrg func_append non_pic_objects " $non_pic_object" 536749dc963fSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 536849dc963fSmrg arg="$non_pic_object" 536949dc963fSmrg fi 537049dc963fSmrg else 537149dc963fSmrg # If the PIC object exists, use it instead. 537249dc963fSmrg # $xdir was prepended to $pic_object above. 537349dc963fSmrg non_pic_object="$pic_object" 537449dc963fSmrg func_append non_pic_objects " $non_pic_object" 537549dc963fSmrg fi 537649dc963fSmrg else 537749dc963fSmrg # Only an error if not doing a dry-run. 537849dc963fSmrg if $opt_dry_run; then 537949dc963fSmrg # Extract subdirectory from the argument. 538049dc963fSmrg func_dirname "$arg" "/" "" 538149dc963fSmrg xdir="$func_dirname_result" 538249dc963fSmrg 538349dc963fSmrg func_lo2o "$arg" 538449dc963fSmrg pic_object=$xdir$objdir/$func_lo2o_result 538549dc963fSmrg non_pic_object=$xdir$func_lo2o_result 538649dc963fSmrg func_append libobjs " $pic_object" 538749dc963fSmrg func_append non_pic_objects " $non_pic_object" 538849dc963fSmrg else 538949dc963fSmrg func_fatal_error "\`$arg' is not a valid libtool object" 539049dc963fSmrg fi 539149dc963fSmrg fi 539249dc963fSmrg done 53934b0ead49Smrg else 539449dc963fSmrg func_fatal_error "link input file \`$arg' does not exist" 53954b0ead49Smrg fi 539649dc963fSmrg arg=$save_arg 539749dc963fSmrg prev= 539849dc963fSmrg continue 539949dc963fSmrg ;; 540049dc963fSmrg precious_regex) 540149dc963fSmrg precious_files_regex="$arg" 540249dc963fSmrg prev= 540349dc963fSmrg continue 540449dc963fSmrg ;; 540549dc963fSmrg release) 540649dc963fSmrg release="-$arg" 540749dc963fSmrg prev= 540849dc963fSmrg continue 540949dc963fSmrg ;; 541049dc963fSmrg rpath | xrpath) 541149dc963fSmrg # We need an absolute path. 541249dc963fSmrg case $arg in 541349dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 541449dc963fSmrg *) 541549dc963fSmrg func_fatal_error "only absolute run-paths are allowed" 541649dc963fSmrg ;; 541749dc963fSmrg esac 541849dc963fSmrg if test "$prev" = rpath; then 541949dc963fSmrg case "$rpath " in 542049dc963fSmrg *" $arg "*) ;; 54214e7590efSmrg *) func_append rpath " $arg" ;; 542249dc963fSmrg esac 54234b0ead49Smrg else 542449dc963fSmrg case "$xrpath " in 542549dc963fSmrg *" $arg "*) ;; 54264e7590efSmrg *) func_append xrpath " $arg" ;; 542749dc963fSmrg esac 54284b0ead49Smrg fi 542949dc963fSmrg prev= 543049dc963fSmrg continue 543149dc963fSmrg ;; 543249dc963fSmrg shrext) 543349dc963fSmrg shrext_cmds="$arg" 543449dc963fSmrg prev= 543549dc963fSmrg continue 543649dc963fSmrg ;; 543749dc963fSmrg weak) 54384e7590efSmrg func_append weak_libs " $arg" 543949dc963fSmrg prev= 544049dc963fSmrg continue 544149dc963fSmrg ;; 544249dc963fSmrg xcclinker) 54434e7590efSmrg func_append linker_flags " $qarg" 54444e7590efSmrg func_append compiler_flags " $qarg" 544549dc963fSmrg prev= 544649dc963fSmrg func_append compile_command " $qarg" 544749dc963fSmrg func_append finalize_command " $qarg" 544849dc963fSmrg continue 544949dc963fSmrg ;; 545049dc963fSmrg xcompiler) 54514e7590efSmrg func_append compiler_flags " $qarg" 545249dc963fSmrg prev= 545349dc963fSmrg func_append compile_command " $qarg" 545449dc963fSmrg func_append finalize_command " $qarg" 545549dc963fSmrg continue 545649dc963fSmrg ;; 545749dc963fSmrg xlinker) 54584e7590efSmrg func_append linker_flags " $qarg" 54594e7590efSmrg func_append compiler_flags " $wl$qarg" 546049dc963fSmrg prev= 546149dc963fSmrg func_append compile_command " $wl$qarg" 546249dc963fSmrg func_append finalize_command " $wl$qarg" 546349dc963fSmrg continue 546449dc963fSmrg ;; 546549dc963fSmrg *) 546649dc963fSmrg eval "$prev=\"\$arg\"" 546749dc963fSmrg prev= 546849dc963fSmrg continue 546949dc963fSmrg ;; 54704b0ead49Smrg esac 547149dc963fSmrg fi # test -n "$prev" 54724b0ead49Smrg 547349dc963fSmrg prevarg="$arg" 54744b0ead49Smrg 547549dc963fSmrg case $arg in 547649dc963fSmrg -all-static) 547749dc963fSmrg if test -n "$link_static_flag"; then 547849dc963fSmrg # See comment for -static flag below, for more details. 547949dc963fSmrg func_append compile_command " $link_static_flag" 548049dc963fSmrg func_append finalize_command " $link_static_flag" 548149dc963fSmrg fi 548249dc963fSmrg continue 548349dc963fSmrg ;; 54844b0ead49Smrg 548549dc963fSmrg -allow-undefined) 548649dc963fSmrg # FIXME: remove this flag sometime in the future. 548749dc963fSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 548849dc963fSmrg ;; 54894b0ead49Smrg 549049dc963fSmrg -avoid-version) 549149dc963fSmrg avoid_version=yes 549249dc963fSmrg continue 549349dc963fSmrg ;; 54944b0ead49Smrg 54957aa89044Smrg -bindir) 54967aa89044Smrg prev=bindir 54977aa89044Smrg continue 54987aa89044Smrg ;; 54997aa89044Smrg 550049dc963fSmrg -dlopen) 550149dc963fSmrg prev=dlfiles 550249dc963fSmrg continue 550349dc963fSmrg ;; 55044b0ead49Smrg 550549dc963fSmrg -dlpreopen) 550649dc963fSmrg prev=dlprefiles 550749dc963fSmrg continue 550849dc963fSmrg ;; 55094b0ead49Smrg 551049dc963fSmrg -export-dynamic) 551149dc963fSmrg export_dynamic=yes 551249dc963fSmrg continue 551349dc963fSmrg ;; 55144b0ead49Smrg 551549dc963fSmrg -export-symbols | -export-symbols-regex) 551649dc963fSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 551749dc963fSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 551849dc963fSmrg fi 551949dc963fSmrg if test "X$arg" = "X-export-symbols"; then 552049dc963fSmrg prev=expsyms 552149dc963fSmrg else 552249dc963fSmrg prev=expsyms_regex 552349dc963fSmrg fi 552449dc963fSmrg continue 552549dc963fSmrg ;; 55264b0ead49Smrg 552749dc963fSmrg -framework) 552849dc963fSmrg prev=framework 552949dc963fSmrg continue 553049dc963fSmrg ;; 55314b0ead49Smrg 553249dc963fSmrg -inst-prefix-dir) 553349dc963fSmrg prev=inst_prefix 553449dc963fSmrg continue 553549dc963fSmrg ;; 55364b0ead49Smrg 553749dc963fSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 553849dc963fSmrg # so, if we see these flags be careful not to treat them like -L 553949dc963fSmrg -L[A-Z][A-Z]*:*) 554049dc963fSmrg case $with_gcc/$host in 554149dc963fSmrg no/*-*-irix* | /*-*-irix*) 554249dc963fSmrg func_append compile_command " $arg" 554349dc963fSmrg func_append finalize_command " $arg" 554449dc963fSmrg ;; 554549dc963fSmrg esac 554649dc963fSmrg continue 554749dc963fSmrg ;; 55484b0ead49Smrg 554949dc963fSmrg -L*) 55504e7590efSmrg func_stripname "-L" '' "$arg" 55514e7590efSmrg if test -z "$func_stripname_result"; then 555249dc963fSmrg if test "$#" -gt 0; then 555349dc963fSmrg func_fatal_error "require no space between \`-L' and \`$1'" 555449dc963fSmrg else 555549dc963fSmrg func_fatal_error "need path for \`-L' option" 555649dc963fSmrg fi 555749dc963fSmrg fi 55584e7590efSmrg func_resolve_sysroot "$func_stripname_result" 55594e7590efSmrg dir=$func_resolve_sysroot_result 556049dc963fSmrg # We need an absolute path. 556149dc963fSmrg case $dir in 556249dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 556349dc963fSmrg *) 556449dc963fSmrg absdir=`cd "$dir" && pwd` 556549dc963fSmrg test -z "$absdir" && \ 556649dc963fSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 556749dc963fSmrg dir="$absdir" 556849dc963fSmrg ;; 556949dc963fSmrg esac 557049dc963fSmrg case "$deplibs " in 55714e7590efSmrg *" -L$dir "* | *" $arg "*) 55724e7590efSmrg # Will only happen for absolute or sysroot arguments 55734e7590efSmrg ;; 557449dc963fSmrg *) 55754e7590efSmrg # Preserve sysroot, but never include relative directories 55764e7590efSmrg case $dir in 55774e7590efSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 55784e7590efSmrg *) func_append deplibs " -L$dir" ;; 55794e7590efSmrg esac 55804e7590efSmrg func_append lib_search_path " $dir" 558149dc963fSmrg ;; 558249dc963fSmrg esac 558349dc963fSmrg case $host in 558449dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 55857aa89044Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 558649dc963fSmrg case :$dllsearchpath: in 558749dc963fSmrg *":$dir:"*) ;; 558849dc963fSmrg ::) dllsearchpath=$dir;; 55894e7590efSmrg *) func_append dllsearchpath ":$dir";; 559049dc963fSmrg esac 559149dc963fSmrg case :$dllsearchpath: in 559249dc963fSmrg *":$testbindir:"*) ;; 559349dc963fSmrg ::) dllsearchpath=$testbindir;; 55944e7590efSmrg *) func_append dllsearchpath ":$testbindir";; 559549dc963fSmrg esac 559649dc963fSmrg ;; 559749dc963fSmrg esac 559849dc963fSmrg continue 559949dc963fSmrg ;; 56004b0ead49Smrg 560149dc963fSmrg -l*) 560249dc963fSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 560349dc963fSmrg case $host in 56047aa89044Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 560549dc963fSmrg # These systems don't actually have a C or math library (as such) 560649dc963fSmrg continue 560749dc963fSmrg ;; 560849dc963fSmrg *-*-os2*) 560949dc963fSmrg # These systems don't actually have a C library (as such) 561049dc963fSmrg test "X$arg" = "X-lc" && continue 561149dc963fSmrg ;; 561249dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 561349dc963fSmrg # Do not include libc due to us having libc/libc_r. 561449dc963fSmrg test "X$arg" = "X-lc" && continue 561549dc963fSmrg ;; 561649dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 561749dc963fSmrg # Rhapsody C and math libraries are in the System framework 56184e7590efSmrg func_append deplibs " System.ltframework" 561949dc963fSmrg continue 562049dc963fSmrg ;; 562149dc963fSmrg *-*-sco3.2v5* | *-*-sco5v6*) 562249dc963fSmrg # Causes problems with __ctype 562349dc963fSmrg test "X$arg" = "X-lc" && continue 562449dc963fSmrg ;; 562549dc963fSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 562649dc963fSmrg # Compiler inserts libc in the correct place for threads to work 562749dc963fSmrg test "X$arg" = "X-lc" && continue 562849dc963fSmrg ;; 562949dc963fSmrg esac 563049dc963fSmrg elif test "X$arg" = "X-lc_r"; then 563149dc963fSmrg case $host in 563249dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 563349dc963fSmrg # Do not include libc_r directly, use -pthread flag. 563449dc963fSmrg continue 563549dc963fSmrg ;; 563649dc963fSmrg esac 563749dc963fSmrg fi 56384e7590efSmrg func_append deplibs " $arg" 563949dc963fSmrg continue 564049dc963fSmrg ;; 56414b0ead49Smrg 564249dc963fSmrg -module) 564349dc963fSmrg module=yes 564449dc963fSmrg continue 564549dc963fSmrg ;; 56464b0ead49Smrg 564749dc963fSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 564849dc963fSmrg # classes, name mangling, and exception handling. 564949dc963fSmrg # Darwin uses the -arch flag to determine output architecture. 56504e7590efSmrg -model|-arch|-isysroot|--sysroot) 56514e7590efSmrg func_append compiler_flags " $arg" 565249dc963fSmrg func_append compile_command " $arg" 565349dc963fSmrg func_append finalize_command " $arg" 565449dc963fSmrg prev=xcompiler 565549dc963fSmrg continue 565649dc963fSmrg ;; 56574b0ead49Smrg 56584e7590efSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 56594e7590efSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 56604e7590efSmrg func_append compiler_flags " $arg" 566149dc963fSmrg func_append compile_command " $arg" 566249dc963fSmrg func_append finalize_command " $arg" 566349dc963fSmrg case "$new_inherited_linker_flags " in 566449dc963fSmrg *" $arg "*) ;; 56654e7590efSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 566649dc963fSmrg esac 566749dc963fSmrg continue 566849dc963fSmrg ;; 56694b0ead49Smrg 567049dc963fSmrg -multi_module) 567149dc963fSmrg single_module="${wl}-multi_module" 567249dc963fSmrg continue 567349dc963fSmrg ;; 56744b0ead49Smrg 567549dc963fSmrg -no-fast-install) 567649dc963fSmrg fast_install=no 567749dc963fSmrg continue 567849dc963fSmrg ;; 56794b0ead49Smrg 568049dc963fSmrg -no-install) 568149dc963fSmrg case $host in 568249dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 568349dc963fSmrg # The PATH hackery in wrapper scripts is required on Windows 568449dc963fSmrg # and Darwin in order for the loader to find any dlls it needs. 568549dc963fSmrg func_warning "\`-no-install' is ignored for $host" 568649dc963fSmrg func_warning "assuming \`-no-fast-install' instead" 568749dc963fSmrg fast_install=no 568849dc963fSmrg ;; 568949dc963fSmrg *) no_install=yes ;; 569049dc963fSmrg esac 569149dc963fSmrg continue 569249dc963fSmrg ;; 56934b0ead49Smrg 569449dc963fSmrg -no-undefined) 569549dc963fSmrg allow_undefined=no 569649dc963fSmrg continue 569749dc963fSmrg ;; 56984b0ead49Smrg 569949dc963fSmrg -objectlist) 570049dc963fSmrg prev=objectlist 570149dc963fSmrg continue 570249dc963fSmrg ;; 57034b0ead49Smrg 570449dc963fSmrg -o) prev=output ;; 57054b0ead49Smrg 570649dc963fSmrg -precious-files-regex) 570749dc963fSmrg prev=precious_regex 570849dc963fSmrg continue 570949dc963fSmrg ;; 57104b0ead49Smrg 571149dc963fSmrg -release) 571249dc963fSmrg prev=release 571349dc963fSmrg continue 571449dc963fSmrg ;; 57154b0ead49Smrg 571649dc963fSmrg -rpath) 571749dc963fSmrg prev=rpath 571849dc963fSmrg continue 571949dc963fSmrg ;; 57204b0ead49Smrg 572149dc963fSmrg -R) 572249dc963fSmrg prev=xrpath 572349dc963fSmrg continue 572449dc963fSmrg ;; 57254b0ead49Smrg 572649dc963fSmrg -R*) 572749dc963fSmrg func_stripname '-R' '' "$arg" 572849dc963fSmrg dir=$func_stripname_result 572949dc963fSmrg # We need an absolute path. 573049dc963fSmrg case $dir in 573149dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 57324e7590efSmrg =*) 57334e7590efSmrg func_stripname '=' '' "$dir" 57344e7590efSmrg dir=$lt_sysroot$func_stripname_result 57354e7590efSmrg ;; 573649dc963fSmrg *) 573749dc963fSmrg func_fatal_error "only absolute run-paths are allowed" 573849dc963fSmrg ;; 573949dc963fSmrg esac 574049dc963fSmrg case "$xrpath " in 574149dc963fSmrg *" $dir "*) ;; 57424e7590efSmrg *) func_append xrpath " $dir" ;; 574349dc963fSmrg esac 574449dc963fSmrg continue 574549dc963fSmrg ;; 57464b0ead49Smrg 574749dc963fSmrg -shared) 574849dc963fSmrg # The effects of -shared are defined in a previous loop. 574949dc963fSmrg continue 575049dc963fSmrg ;; 57514b0ead49Smrg 575249dc963fSmrg -shrext) 575349dc963fSmrg prev=shrext 575449dc963fSmrg continue 575549dc963fSmrg ;; 57564b0ead49Smrg 575749dc963fSmrg -static | -static-libtool-libs) 575849dc963fSmrg # The effects of -static are defined in a previous loop. 575949dc963fSmrg # We used to do the same as -all-static on platforms that 576049dc963fSmrg # didn't have a PIC flag, but the assumption that the effects 576149dc963fSmrg # would be equivalent was wrong. It would break on at least 576249dc963fSmrg # Digital Unix and AIX. 576349dc963fSmrg continue 576449dc963fSmrg ;; 57654b0ead49Smrg 576649dc963fSmrg -thread-safe) 576749dc963fSmrg thread_safe=yes 576849dc963fSmrg continue 576949dc963fSmrg ;; 57704b0ead49Smrg 577149dc963fSmrg -version-info) 577249dc963fSmrg prev=vinfo 577349dc963fSmrg continue 577449dc963fSmrg ;; 57754b0ead49Smrg 577649dc963fSmrg -version-number) 577749dc963fSmrg prev=vinfo 577849dc963fSmrg vinfo_number=yes 577949dc963fSmrg continue 578049dc963fSmrg ;; 57814b0ead49Smrg 578249dc963fSmrg -weak) 578349dc963fSmrg prev=weak 578449dc963fSmrg continue 578549dc963fSmrg ;; 57864b0ead49Smrg 578749dc963fSmrg -Wc,*) 578849dc963fSmrg func_stripname '-Wc,' '' "$arg" 578949dc963fSmrg args=$func_stripname_result 579049dc963fSmrg arg= 579149dc963fSmrg save_ifs="$IFS"; IFS=',' 579249dc963fSmrg for flag in $args; do 579349dc963fSmrg IFS="$save_ifs" 579449dc963fSmrg func_quote_for_eval "$flag" 57954e7590efSmrg func_append arg " $func_quote_for_eval_result" 57964e7590efSmrg func_append compiler_flags " $func_quote_for_eval_result" 579749dc963fSmrg done 579849dc963fSmrg IFS="$save_ifs" 579949dc963fSmrg func_stripname ' ' '' "$arg" 580049dc963fSmrg arg=$func_stripname_result 580149dc963fSmrg ;; 58024b0ead49Smrg 580349dc963fSmrg -Wl,*) 580449dc963fSmrg func_stripname '-Wl,' '' "$arg" 580549dc963fSmrg args=$func_stripname_result 580649dc963fSmrg arg= 580749dc963fSmrg save_ifs="$IFS"; IFS=',' 580849dc963fSmrg for flag in $args; do 580949dc963fSmrg IFS="$save_ifs" 581049dc963fSmrg func_quote_for_eval "$flag" 58114e7590efSmrg func_append arg " $wl$func_quote_for_eval_result" 58124e7590efSmrg func_append compiler_flags " $wl$func_quote_for_eval_result" 58134e7590efSmrg func_append linker_flags " $func_quote_for_eval_result" 581449dc963fSmrg done 581549dc963fSmrg IFS="$save_ifs" 581649dc963fSmrg func_stripname ' ' '' "$arg" 581749dc963fSmrg arg=$func_stripname_result 581849dc963fSmrg ;; 58194b0ead49Smrg 582049dc963fSmrg -Xcompiler) 582149dc963fSmrg prev=xcompiler 582249dc963fSmrg continue 582349dc963fSmrg ;; 58244b0ead49Smrg 582549dc963fSmrg -Xlinker) 582649dc963fSmrg prev=xlinker 582749dc963fSmrg continue 582849dc963fSmrg ;; 58294b0ead49Smrg 583049dc963fSmrg -XCClinker) 583149dc963fSmrg prev=xcclinker 583249dc963fSmrg continue 583349dc963fSmrg ;; 58344b0ead49Smrg 583549dc963fSmrg # -msg_* for osf cc 583649dc963fSmrg -msg_*) 583749dc963fSmrg func_quote_for_eval "$arg" 583849dc963fSmrg arg="$func_quote_for_eval_result" 583949dc963fSmrg ;; 58404b0ead49Smrg 58417aa89044Smrg # Flags to be passed through unchanged, with rationale: 58427aa89044Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 58437aa89044Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 58447aa89044Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 58457aa89044Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 58467aa89044Smrg # -q* compiler args for the IBM compiler 58477aa89044Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 58487aa89044Smrg # -F/path path to uninstalled frameworks, gcc on darwin 58497aa89044Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 58507aa89044Smrg # @file GCC response files 58517aa89044Smrg # -tp=* Portland pgcc target processor selection 58524e7590efSmrg # --sysroot=* for sysroot support 58534e7590efSmrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 585449dc963fSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 58554e7590efSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 58564e7590efSmrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 585749dc963fSmrg func_quote_for_eval "$arg" 585849dc963fSmrg arg="$func_quote_for_eval_result" 585949dc963fSmrg func_append compile_command " $arg" 586049dc963fSmrg func_append finalize_command " $arg" 58614e7590efSmrg func_append compiler_flags " $arg" 586249dc963fSmrg continue 586349dc963fSmrg ;; 58644b0ead49Smrg 586549dc963fSmrg # Some other compiler flag. 586649dc963fSmrg -* | +*) 586749dc963fSmrg func_quote_for_eval "$arg" 586849dc963fSmrg arg="$func_quote_for_eval_result" 586949dc963fSmrg ;; 58704b0ead49Smrg 587149dc963fSmrg *.$objext) 587249dc963fSmrg # A standard object. 58734e7590efSmrg func_append objs " $arg" 587449dc963fSmrg ;; 58754b0ead49Smrg 587649dc963fSmrg *.lo) 587749dc963fSmrg # A libtool-controlled object. 58784b0ead49Smrg 587949dc963fSmrg # Check to see that this really is a libtool object. 588049dc963fSmrg if func_lalib_unsafe_p "$arg"; then 588149dc963fSmrg pic_object= 588249dc963fSmrg non_pic_object= 58834b0ead49Smrg 588449dc963fSmrg # Read the .lo file 588549dc963fSmrg func_source "$arg" 58864b0ead49Smrg 588749dc963fSmrg if test -z "$pic_object" || 588849dc963fSmrg test -z "$non_pic_object" || 588949dc963fSmrg test "$pic_object" = none && 589049dc963fSmrg test "$non_pic_object" = none; then 589149dc963fSmrg func_fatal_error "cannot find name of object for \`$arg'" 589249dc963fSmrg fi 58934b0ead49Smrg 589449dc963fSmrg # Extract subdirectory from the argument. 589549dc963fSmrg func_dirname "$arg" "/" "" 589649dc963fSmrg xdir="$func_dirname_result" 589752b01e16Smrg 589849dc963fSmrg if test "$pic_object" != none; then 589949dc963fSmrg # Prepend the subdirectory the object is found in. 590049dc963fSmrg pic_object="$xdir$pic_object" 59014b0ead49Smrg 590249dc963fSmrg if test "$prev" = dlfiles; then 590349dc963fSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 59044e7590efSmrg func_append dlfiles " $pic_object" 590549dc963fSmrg prev= 590649dc963fSmrg continue 590749dc963fSmrg else 590849dc963fSmrg # If libtool objects are unsupported, then we need to preload. 590949dc963fSmrg prev=dlprefiles 591049dc963fSmrg fi 591149dc963fSmrg fi 59124b0ead49Smrg 591349dc963fSmrg # CHECK ME: I think I busted this. -Ossama 591449dc963fSmrg if test "$prev" = dlprefiles; then 591549dc963fSmrg # Preload the old-style object. 59164e7590efSmrg func_append dlprefiles " $pic_object" 591749dc963fSmrg prev= 591849dc963fSmrg fi 59194b0ead49Smrg 592049dc963fSmrg # A PIC object. 592149dc963fSmrg func_append libobjs " $pic_object" 592249dc963fSmrg arg="$pic_object" 592349dc963fSmrg fi 59244b0ead49Smrg 592549dc963fSmrg # Non-PIC object. 592649dc963fSmrg if test "$non_pic_object" != none; then 592749dc963fSmrg # Prepend the subdirectory the object is found in. 592849dc963fSmrg non_pic_object="$xdir$non_pic_object" 59294b0ead49Smrg 593049dc963fSmrg # A standard non-PIC object 593149dc963fSmrg func_append non_pic_objects " $non_pic_object" 593249dc963fSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 593349dc963fSmrg arg="$non_pic_object" 593449dc963fSmrg fi 593549dc963fSmrg else 593649dc963fSmrg # If the PIC object exists, use it instead. 593749dc963fSmrg # $xdir was prepended to $pic_object above. 593849dc963fSmrg non_pic_object="$pic_object" 593949dc963fSmrg func_append non_pic_objects " $non_pic_object" 594049dc963fSmrg fi 594149dc963fSmrg else 594249dc963fSmrg # Only an error if not doing a dry-run. 594349dc963fSmrg if $opt_dry_run; then 594449dc963fSmrg # Extract subdirectory from the argument. 594549dc963fSmrg func_dirname "$arg" "/" "" 594649dc963fSmrg xdir="$func_dirname_result" 594749dc963fSmrg 594849dc963fSmrg func_lo2o "$arg" 594949dc963fSmrg pic_object=$xdir$objdir/$func_lo2o_result 595049dc963fSmrg non_pic_object=$xdir$func_lo2o_result 595149dc963fSmrg func_append libobjs " $pic_object" 595249dc963fSmrg func_append non_pic_objects " $non_pic_object" 595349dc963fSmrg else 595449dc963fSmrg func_fatal_error "\`$arg' is not a valid libtool object" 595549dc963fSmrg fi 595649dc963fSmrg fi 595749dc963fSmrg ;; 59584b0ead49Smrg 595949dc963fSmrg *.$libext) 596049dc963fSmrg # An archive. 59614e7590efSmrg func_append deplibs " $arg" 59624e7590efSmrg func_append old_deplibs " $arg" 596349dc963fSmrg continue 596449dc963fSmrg ;; 596549dc963fSmrg 596649dc963fSmrg *.la) 596749dc963fSmrg # A libtool-controlled library. 596849dc963fSmrg 59694e7590efSmrg func_resolve_sysroot "$arg" 597049dc963fSmrg if test "$prev" = dlfiles; then 597149dc963fSmrg # This library was specified with -dlopen. 59724e7590efSmrg func_append dlfiles " $func_resolve_sysroot_result" 597349dc963fSmrg prev= 597449dc963fSmrg elif test "$prev" = dlprefiles; then 597549dc963fSmrg # The library was specified with -dlpreopen. 59764e7590efSmrg func_append dlprefiles " $func_resolve_sysroot_result" 597749dc963fSmrg prev= 597849dc963fSmrg else 59794e7590efSmrg func_append deplibs " $func_resolve_sysroot_result" 598049dc963fSmrg fi 598149dc963fSmrg continue 598249dc963fSmrg ;; 598349dc963fSmrg 598449dc963fSmrg # Some other compiler argument. 598549dc963fSmrg *) 598649dc963fSmrg # Unknown arguments in both finalize_command and compile_command need 598749dc963fSmrg # to be aesthetically quoted because they are evaled later. 598849dc963fSmrg func_quote_for_eval "$arg" 598949dc963fSmrg arg="$func_quote_for_eval_result" 599049dc963fSmrg ;; 599149dc963fSmrg esac # arg 599249dc963fSmrg 599349dc963fSmrg # Now actually substitute the argument into the commands. 599449dc963fSmrg if test -n "$arg"; then 599549dc963fSmrg func_append compile_command " $arg" 599649dc963fSmrg func_append finalize_command " $arg" 599749dc963fSmrg fi 599849dc963fSmrg done # argument parsing loop 599949dc963fSmrg 600049dc963fSmrg test -n "$prev" && \ 600149dc963fSmrg func_fatal_help "the \`$prevarg' option requires an argument" 600249dc963fSmrg 600349dc963fSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 600449dc963fSmrg eval arg=\"$export_dynamic_flag_spec\" 600549dc963fSmrg func_append compile_command " $arg" 600649dc963fSmrg func_append finalize_command " $arg" 600749dc963fSmrg fi 600849dc963fSmrg 600949dc963fSmrg oldlibs= 601049dc963fSmrg # calculate the name of the file, without its directory 601149dc963fSmrg func_basename "$output" 601249dc963fSmrg outputname="$func_basename_result" 601349dc963fSmrg libobjs_save="$libobjs" 601449dc963fSmrg 601549dc963fSmrg if test -n "$shlibpath_var"; then 601649dc963fSmrg # get the directories listed in $shlibpath_var 60177aa89044Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 601849dc963fSmrg else 601949dc963fSmrg shlib_search_path= 602049dc963fSmrg fi 602149dc963fSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 602249dc963fSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 602349dc963fSmrg 602449dc963fSmrg func_dirname "$output" "/" "" 602549dc963fSmrg output_objdir="$func_dirname_result$objdir" 60264e7590efSmrg func_to_tool_file "$output_objdir/" 60274e7590efSmrg tool_output_objdir=$func_to_tool_file_result 602849dc963fSmrg # Create the object directory. 602949dc963fSmrg func_mkdir_p "$output_objdir" 603049dc963fSmrg 603149dc963fSmrg # Determine the type of output 603249dc963fSmrg case $output in 603349dc963fSmrg "") 603449dc963fSmrg func_fatal_help "you must specify an output file" 603549dc963fSmrg ;; 603649dc963fSmrg *.$libext) linkmode=oldlib ;; 603749dc963fSmrg *.lo | *.$objext) linkmode=obj ;; 603849dc963fSmrg *.la) linkmode=lib ;; 603949dc963fSmrg *) linkmode=prog ;; # Anything else should be a program. 604049dc963fSmrg esac 604149dc963fSmrg 604249dc963fSmrg specialdeplibs= 604349dc963fSmrg 604449dc963fSmrg libs= 604549dc963fSmrg # Find all interdependent deplibs by searching for libraries 604649dc963fSmrg # that are linked more than once (e.g. -la -lb -la) 604749dc963fSmrg for deplib in $deplibs; do 60484e7590efSmrg if $opt_preserve_dup_deps ; then 604949dc963fSmrg case "$libs " in 60504e7590efSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 605149dc963fSmrg esac 605249dc963fSmrg fi 60534e7590efSmrg func_append libs " $deplib" 605449dc963fSmrg done 605549dc963fSmrg 605649dc963fSmrg if test "$linkmode" = lib; then 605749dc963fSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 605849dc963fSmrg 605949dc963fSmrg # Compute libraries that are listed more than once in $predeps 606049dc963fSmrg # $postdeps and mark them as special (i.e., whose duplicates are 606149dc963fSmrg # not to be eliminated). 606249dc963fSmrg pre_post_deps= 606349dc963fSmrg if $opt_duplicate_compiler_generated_deps; then 606449dc963fSmrg for pre_post_dep in $predeps $postdeps; do 606549dc963fSmrg case "$pre_post_deps " in 60664e7590efSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 606749dc963fSmrg esac 60684e7590efSmrg func_append pre_post_deps " $pre_post_dep" 606949dc963fSmrg done 607049dc963fSmrg fi 607149dc963fSmrg pre_post_deps= 607249dc963fSmrg fi 607349dc963fSmrg 607449dc963fSmrg deplibs= 607549dc963fSmrg newdependency_libs= 607649dc963fSmrg newlib_search_path= 607749dc963fSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 607849dc963fSmrg notinst_deplibs= # not-installed libtool libraries 607949dc963fSmrg notinst_path= # paths that contain not-installed libtool libraries 608049dc963fSmrg 608149dc963fSmrg case $linkmode in 608249dc963fSmrg lib) 608349dc963fSmrg passes="conv dlpreopen link" 608449dc963fSmrg for file in $dlfiles $dlprefiles; do 608549dc963fSmrg case $file in 608649dc963fSmrg *.la) ;; 608749dc963fSmrg *) 608849dc963fSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 608949dc963fSmrg ;; 609049dc963fSmrg esac 609149dc963fSmrg done 609249dc963fSmrg ;; 609349dc963fSmrg prog) 609449dc963fSmrg compile_deplibs= 609549dc963fSmrg finalize_deplibs= 609649dc963fSmrg alldeplibs=no 609749dc963fSmrg newdlfiles= 609849dc963fSmrg newdlprefiles= 609949dc963fSmrg passes="conv scan dlopen dlpreopen link" 610049dc963fSmrg ;; 610149dc963fSmrg *) passes="conv" 610249dc963fSmrg ;; 610349dc963fSmrg esac 610449dc963fSmrg 610549dc963fSmrg for pass in $passes; do 610649dc963fSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 610749dc963fSmrg # so that -L comes before libs that need it for instance... 610849dc963fSmrg if test "$linkmode,$pass" = "lib,link"; then 610949dc963fSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 611049dc963fSmrg ## order, and fix it there properly 611149dc963fSmrg tmp_deplibs= 611249dc963fSmrg for deplib in $deplibs; do 611349dc963fSmrg tmp_deplibs="$deplib $tmp_deplibs" 611449dc963fSmrg done 611549dc963fSmrg deplibs="$tmp_deplibs" 611649dc963fSmrg fi 611749dc963fSmrg 611849dc963fSmrg if test "$linkmode,$pass" = "lib,link" || 611949dc963fSmrg test "$linkmode,$pass" = "prog,scan"; then 612049dc963fSmrg libs="$deplibs" 612149dc963fSmrg deplibs= 612249dc963fSmrg fi 612349dc963fSmrg if test "$linkmode" = prog; then 612449dc963fSmrg case $pass in 612549dc963fSmrg dlopen) libs="$dlfiles" ;; 612649dc963fSmrg dlpreopen) libs="$dlprefiles" ;; 612749dc963fSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 612849dc963fSmrg esac 612949dc963fSmrg fi 613049dc963fSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 613149dc963fSmrg # Collect and forward deplibs of preopened libtool libs 613249dc963fSmrg for lib in $dlprefiles; do 613349dc963fSmrg # Ignore non-libtool-libs 613449dc963fSmrg dependency_libs= 61354e7590efSmrg func_resolve_sysroot "$lib" 613649dc963fSmrg case $lib in 61374e7590efSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 613849dc963fSmrg esac 613949dc963fSmrg 614049dc963fSmrg # Collect preopened libtool deplibs, except any this library 614149dc963fSmrg # has declared as weak libs 614249dc963fSmrg for deplib in $dependency_libs; do 61437aa89044Smrg func_basename "$deplib" 61447aa89044Smrg deplib_base=$func_basename_result 614549dc963fSmrg case " $weak_libs " in 614649dc963fSmrg *" $deplib_base "*) ;; 61474e7590efSmrg *) func_append deplibs " $deplib" ;; 614849dc963fSmrg esac 614949dc963fSmrg done 615049dc963fSmrg done 615149dc963fSmrg libs="$dlprefiles" 615249dc963fSmrg fi 615349dc963fSmrg if test "$pass" = dlopen; then 615449dc963fSmrg # Collect dlpreopened libraries 615549dc963fSmrg save_deplibs="$deplibs" 615649dc963fSmrg deplibs= 615749dc963fSmrg fi 615849dc963fSmrg 615949dc963fSmrg for deplib in $libs; do 616049dc963fSmrg lib= 616149dc963fSmrg found=no 616249dc963fSmrg case $deplib in 61634e7590efSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 61644e7590efSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 616549dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 616649dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 616749dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 616849dc963fSmrg else 61694e7590efSmrg func_append compiler_flags " $deplib" 617049dc963fSmrg if test "$linkmode" = lib ; then 617149dc963fSmrg case "$new_inherited_linker_flags " in 617249dc963fSmrg *" $deplib "*) ;; 61734e7590efSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 617449dc963fSmrg esac 617549dc963fSmrg fi 617649dc963fSmrg fi 617749dc963fSmrg continue 617849dc963fSmrg ;; 617949dc963fSmrg -l*) 618049dc963fSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 618149dc963fSmrg func_warning "\`-l' is ignored for archives/objects" 618249dc963fSmrg continue 618349dc963fSmrg fi 618449dc963fSmrg func_stripname '-l' '' "$deplib" 618549dc963fSmrg name=$func_stripname_result 618649dc963fSmrg if test "$linkmode" = lib; then 618749dc963fSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 618849dc963fSmrg else 618949dc963fSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 619049dc963fSmrg fi 619149dc963fSmrg for searchdir in $searchdirs; do 619249dc963fSmrg for search_ext in .la $std_shrext .so .a; do 619349dc963fSmrg # Search the libtool library 619449dc963fSmrg lib="$searchdir/lib${name}${search_ext}" 619549dc963fSmrg if test -f "$lib"; then 619649dc963fSmrg if test "$search_ext" = ".la"; then 619749dc963fSmrg found=yes 619849dc963fSmrg else 619949dc963fSmrg found=no 620049dc963fSmrg fi 620149dc963fSmrg break 2 620249dc963fSmrg fi 620349dc963fSmrg done 620449dc963fSmrg done 620549dc963fSmrg if test "$found" != yes; then 620649dc963fSmrg # deplib doesn't seem to be a libtool library 620749dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 620849dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 620949dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 621049dc963fSmrg else 621149dc963fSmrg deplibs="$deplib $deplibs" 621249dc963fSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 621349dc963fSmrg fi 621449dc963fSmrg continue 621549dc963fSmrg else # deplib is a libtool library 621649dc963fSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 621749dc963fSmrg # We need to do some special things here, and not later. 621849dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 621949dc963fSmrg case " $predeps $postdeps " in 622049dc963fSmrg *" $deplib "*) 622149dc963fSmrg if func_lalib_p "$lib"; then 622249dc963fSmrg library_names= 622349dc963fSmrg old_library= 622449dc963fSmrg func_source "$lib" 622549dc963fSmrg for l in $old_library $library_names; do 622649dc963fSmrg ll="$l" 622749dc963fSmrg done 622849dc963fSmrg if test "X$ll" = "X$old_library" ; then # only static version available 622949dc963fSmrg found=no 623049dc963fSmrg func_dirname "$lib" "" "." 623149dc963fSmrg ladir="$func_dirname_result" 623249dc963fSmrg lib=$ladir/$old_library 623349dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 623449dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 623549dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 623649dc963fSmrg else 623749dc963fSmrg deplibs="$deplib $deplibs" 623849dc963fSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 623949dc963fSmrg fi 624049dc963fSmrg continue 624149dc963fSmrg fi 624249dc963fSmrg fi 624349dc963fSmrg ;; 624449dc963fSmrg *) ;; 624549dc963fSmrg esac 624649dc963fSmrg fi 624749dc963fSmrg fi 624849dc963fSmrg ;; # -l 624949dc963fSmrg *.ltframework) 625049dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 625149dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 625249dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 625349dc963fSmrg else 625449dc963fSmrg deplibs="$deplib $deplibs" 625549dc963fSmrg if test "$linkmode" = lib ; then 625649dc963fSmrg case "$new_inherited_linker_flags " in 625749dc963fSmrg *" $deplib "*) ;; 62584e7590efSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 625949dc963fSmrg esac 626049dc963fSmrg fi 626149dc963fSmrg fi 626249dc963fSmrg continue 626349dc963fSmrg ;; 626449dc963fSmrg -L*) 626549dc963fSmrg case $linkmode in 626649dc963fSmrg lib) 626749dc963fSmrg deplibs="$deplib $deplibs" 626849dc963fSmrg test "$pass" = conv && continue 626949dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 627049dc963fSmrg func_stripname '-L' '' "$deplib" 62714e7590efSmrg func_resolve_sysroot "$func_stripname_result" 62724e7590efSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 627349dc963fSmrg ;; 627449dc963fSmrg prog) 627549dc963fSmrg if test "$pass" = conv; then 627649dc963fSmrg deplibs="$deplib $deplibs" 627749dc963fSmrg continue 627849dc963fSmrg fi 627949dc963fSmrg if test "$pass" = scan; then 628049dc963fSmrg deplibs="$deplib $deplibs" 628149dc963fSmrg else 628249dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 628349dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 628449dc963fSmrg fi 628549dc963fSmrg func_stripname '-L' '' "$deplib" 62864e7590efSmrg func_resolve_sysroot "$func_stripname_result" 62874e7590efSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 628849dc963fSmrg ;; 628949dc963fSmrg *) 629049dc963fSmrg func_warning "\`-L' is ignored for archives/objects" 629149dc963fSmrg ;; 629249dc963fSmrg esac # linkmode 629349dc963fSmrg continue 629449dc963fSmrg ;; # -L 629549dc963fSmrg -R*) 629649dc963fSmrg if test "$pass" = link; then 629749dc963fSmrg func_stripname '-R' '' "$deplib" 62984e7590efSmrg func_resolve_sysroot "$func_stripname_result" 62994e7590efSmrg dir=$func_resolve_sysroot_result 630049dc963fSmrg # Make sure the xrpath contains only unique directories. 630149dc963fSmrg case "$xrpath " in 630249dc963fSmrg *" $dir "*) ;; 63034e7590efSmrg *) func_append xrpath " $dir" ;; 630449dc963fSmrg esac 630549dc963fSmrg fi 630649dc963fSmrg deplibs="$deplib $deplibs" 630749dc963fSmrg continue 630849dc963fSmrg ;; 63094e7590efSmrg *.la) 63104e7590efSmrg func_resolve_sysroot "$deplib" 63114e7590efSmrg lib=$func_resolve_sysroot_result 63124e7590efSmrg ;; 631349dc963fSmrg *.$libext) 631449dc963fSmrg if test "$pass" = conv; then 631549dc963fSmrg deplibs="$deplib $deplibs" 631649dc963fSmrg continue 631749dc963fSmrg fi 631849dc963fSmrg case $linkmode in 631949dc963fSmrg lib) 632049dc963fSmrg # Linking convenience modules into shared libraries is allowed, 632149dc963fSmrg # but linking other static libraries is non-portable. 632249dc963fSmrg case " $dlpreconveniencelibs " in 632349dc963fSmrg *" $deplib "*) ;; 632449dc963fSmrg *) 632549dc963fSmrg valid_a_lib=no 632649dc963fSmrg case $deplibs_check_method in 632749dc963fSmrg match_pattern*) 632849dc963fSmrg set dummy $deplibs_check_method; shift 632949dc963fSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 63307aa89044Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 633149dc963fSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 633249dc963fSmrg valid_a_lib=yes 633349dc963fSmrg fi 633449dc963fSmrg ;; 633549dc963fSmrg pass_all) 633649dc963fSmrg valid_a_lib=yes 633749dc963fSmrg ;; 633849dc963fSmrg esac 633949dc963fSmrg if test "$valid_a_lib" != yes; then 63407aa89044Smrg echo 634149dc963fSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 63427aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 63437aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 63447aa89044Smrg echo "*** shared version of the library, which you do not appear to have" 63457aa89044Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 63467aa89044Smrg echo "*** that it is just a static archive that I should not use here." 634749dc963fSmrg else 63487aa89044Smrg echo 634949dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the" 635049dc963fSmrg $ECHO "*** static library $deplib is not portable!" 635149dc963fSmrg deplibs="$deplib $deplibs" 635249dc963fSmrg fi 635349dc963fSmrg ;; 635449dc963fSmrg esac 635549dc963fSmrg continue 635649dc963fSmrg ;; 635749dc963fSmrg prog) 635849dc963fSmrg if test "$pass" != link; then 635949dc963fSmrg deplibs="$deplib $deplibs" 636049dc963fSmrg else 636149dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 636249dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 636349dc963fSmrg fi 636449dc963fSmrg continue 636549dc963fSmrg ;; 636649dc963fSmrg esac # linkmode 636749dc963fSmrg ;; # *.$libext 636849dc963fSmrg *.lo | *.$objext) 636949dc963fSmrg if test "$pass" = conv; then 637049dc963fSmrg deplibs="$deplib $deplibs" 637149dc963fSmrg elif test "$linkmode" = prog; then 637249dc963fSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 637349dc963fSmrg # If there is no dlopen support or we're linking statically, 637449dc963fSmrg # we need to preload. 63754e7590efSmrg func_append newdlprefiles " $deplib" 637649dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 637749dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 637849dc963fSmrg else 63794e7590efSmrg func_append newdlfiles " $deplib" 638049dc963fSmrg fi 638149dc963fSmrg fi 638249dc963fSmrg continue 638349dc963fSmrg ;; 638449dc963fSmrg %DEPLIBS%) 638549dc963fSmrg alldeplibs=yes 638649dc963fSmrg continue 638749dc963fSmrg ;; 638849dc963fSmrg esac # case $deplib 638949dc963fSmrg 639049dc963fSmrg if test "$found" = yes || test -f "$lib"; then : 639149dc963fSmrg else 639249dc963fSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 639349dc963fSmrg fi 639449dc963fSmrg 639549dc963fSmrg # Check to see that this really is a libtool archive. 639649dc963fSmrg func_lalib_unsafe_p "$lib" \ 639749dc963fSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 639849dc963fSmrg 639949dc963fSmrg func_dirname "$lib" "" "." 640049dc963fSmrg ladir="$func_dirname_result" 640149dc963fSmrg 640249dc963fSmrg dlname= 640349dc963fSmrg dlopen= 640449dc963fSmrg dlpreopen= 640549dc963fSmrg libdir= 640649dc963fSmrg library_names= 640749dc963fSmrg old_library= 640849dc963fSmrg inherited_linker_flags= 640949dc963fSmrg # If the library was installed with an old release of libtool, 641049dc963fSmrg # it will not redefine variables installed, or shouldnotlink 641149dc963fSmrg installed=yes 641249dc963fSmrg shouldnotlink=no 641349dc963fSmrg avoidtemprpath= 641449dc963fSmrg 641549dc963fSmrg 641649dc963fSmrg # Read the .la file 641749dc963fSmrg func_source "$lib" 641849dc963fSmrg 641949dc963fSmrg # Convert "-framework foo" to "foo.ltframework" 642049dc963fSmrg if test -n "$inherited_linker_flags"; then 64217aa89044Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 642249dc963fSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 642349dc963fSmrg case " $new_inherited_linker_flags " in 642449dc963fSmrg *" $tmp_inherited_linker_flag "*) ;; 64254e7590efSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 642649dc963fSmrg esac 642749dc963fSmrg done 642849dc963fSmrg fi 64297aa89044Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 643049dc963fSmrg if test "$linkmode,$pass" = "lib,link" || 643149dc963fSmrg test "$linkmode,$pass" = "prog,scan" || 643249dc963fSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 64334e7590efSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 64344e7590efSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 643549dc963fSmrg fi 643649dc963fSmrg 643749dc963fSmrg if test "$pass" = conv; then 643849dc963fSmrg # Only check for convenience libraries 643949dc963fSmrg deplibs="$lib $deplibs" 644049dc963fSmrg if test -z "$libdir"; then 644149dc963fSmrg if test -z "$old_library"; then 644249dc963fSmrg func_fatal_error "cannot find name of link library for \`$lib'" 644349dc963fSmrg fi 644449dc963fSmrg # It is a libtool convenience library, so add in its objects. 64454e7590efSmrg func_append convenience " $ladir/$objdir/$old_library" 64464e7590efSmrg func_append old_convenience " $ladir/$objdir/$old_library" 644749dc963fSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 644849dc963fSmrg func_fatal_error "\`$lib' is not a convenience library" 644949dc963fSmrg fi 645049dc963fSmrg tmp_libs= 645149dc963fSmrg for deplib in $dependency_libs; do 645249dc963fSmrg deplibs="$deplib $deplibs" 64534e7590efSmrg if $opt_preserve_dup_deps ; then 645449dc963fSmrg case "$tmp_libs " in 64554e7590efSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 645649dc963fSmrg esac 645749dc963fSmrg fi 64584e7590efSmrg func_append tmp_libs " $deplib" 645949dc963fSmrg done 646049dc963fSmrg continue 646149dc963fSmrg fi # $pass = conv 646249dc963fSmrg 646349dc963fSmrg 646449dc963fSmrg # Get the name of the library we link against. 646549dc963fSmrg linklib= 64664e7590efSmrg if test -n "$old_library" && 64674e7590efSmrg { test "$prefer_static_libs" = yes || 64684e7590efSmrg test "$prefer_static_libs,$installed" = "built,no"; }; then 64694e7590efSmrg linklib=$old_library 64704e7590efSmrg else 64714e7590efSmrg for l in $old_library $library_names; do 64724e7590efSmrg linklib="$l" 64734e7590efSmrg done 64744e7590efSmrg fi 647549dc963fSmrg if test -z "$linklib"; then 647649dc963fSmrg func_fatal_error "cannot find name of link library for \`$lib'" 647749dc963fSmrg fi 647849dc963fSmrg 647949dc963fSmrg # This library was specified with -dlopen. 648049dc963fSmrg if test "$pass" = dlopen; then 648149dc963fSmrg if test -z "$libdir"; then 648249dc963fSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 648349dc963fSmrg fi 648449dc963fSmrg if test -z "$dlname" || 648549dc963fSmrg test "$dlopen_support" != yes || 648649dc963fSmrg test "$build_libtool_libs" = no; then 648749dc963fSmrg # If there is no dlname, no dlopen support or we're linking 648849dc963fSmrg # statically, we need to preload. We also need to preload any 648949dc963fSmrg # dependent libraries so libltdl's deplib preloader doesn't 649049dc963fSmrg # bomb out in the load deplibs phase. 64914e7590efSmrg func_append dlprefiles " $lib $dependency_libs" 649249dc963fSmrg else 64934e7590efSmrg func_append newdlfiles " $lib" 649449dc963fSmrg fi 649549dc963fSmrg continue 649649dc963fSmrg fi # $pass = dlopen 649749dc963fSmrg 649849dc963fSmrg # We need an absolute path. 649949dc963fSmrg case $ladir in 650049dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 650149dc963fSmrg *) 650249dc963fSmrg abs_ladir=`cd "$ladir" && pwd` 650349dc963fSmrg if test -z "$abs_ladir"; then 650449dc963fSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 650549dc963fSmrg func_warning "passing it literally to the linker, although it might fail" 650649dc963fSmrg abs_ladir="$ladir" 650749dc963fSmrg fi 650849dc963fSmrg ;; 650949dc963fSmrg esac 651049dc963fSmrg func_basename "$lib" 651149dc963fSmrg laname="$func_basename_result" 651249dc963fSmrg 651349dc963fSmrg # Find the relevant object directory and library name. 651449dc963fSmrg if test "X$installed" = Xyes; then 65154e7590efSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 651649dc963fSmrg func_warning "library \`$lib' was moved." 651749dc963fSmrg dir="$ladir" 651849dc963fSmrg absdir="$abs_ladir" 651949dc963fSmrg libdir="$abs_ladir" 652049dc963fSmrg else 65214e7590efSmrg dir="$lt_sysroot$libdir" 65224e7590efSmrg absdir="$lt_sysroot$libdir" 652349dc963fSmrg fi 652449dc963fSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 652549dc963fSmrg else 652649dc963fSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 652749dc963fSmrg dir="$ladir" 652849dc963fSmrg absdir="$abs_ladir" 652949dc963fSmrg # Remove this search path later 65304e7590efSmrg func_append notinst_path " $abs_ladir" 653149dc963fSmrg else 653249dc963fSmrg dir="$ladir/$objdir" 653349dc963fSmrg absdir="$abs_ladir/$objdir" 653449dc963fSmrg # Remove this search path later 65354e7590efSmrg func_append notinst_path " $abs_ladir" 653649dc963fSmrg fi 653749dc963fSmrg fi # $installed = yes 653849dc963fSmrg func_stripname 'lib' '.la' "$laname" 653949dc963fSmrg name=$func_stripname_result 654049dc963fSmrg 654149dc963fSmrg # This library was specified with -dlpreopen. 654249dc963fSmrg if test "$pass" = dlpreopen; then 654349dc963fSmrg if test -z "$libdir" && test "$linkmode" = prog; then 654449dc963fSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 654549dc963fSmrg fi 65464e7590efSmrg case "$host" in 65474e7590efSmrg # special handling for platforms with PE-DLLs. 65484e7590efSmrg *cygwin* | *mingw* | *cegcc* ) 65494e7590efSmrg # Linker will automatically link against shared library if both 65504e7590efSmrg # static and shared are present. Therefore, ensure we extract 65514e7590efSmrg # symbols from the import library if a shared library is present 65524e7590efSmrg # (otherwise, the dlopen module name will be incorrect). We do 65534e7590efSmrg # this by putting the import library name into $newdlprefiles. 65544e7590efSmrg # We recover the dlopen module name by 'saving' the la file 65554e7590efSmrg # name in a special purpose variable, and (later) extracting the 65564e7590efSmrg # dlname from the la file. 65574e7590efSmrg if test -n "$dlname"; then 65584e7590efSmrg func_tr_sh "$dir/$linklib" 65594e7590efSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 65604e7590efSmrg func_append newdlprefiles " $dir/$linklib" 65614e7590efSmrg else 65624e7590efSmrg func_append newdlprefiles " $dir/$old_library" 65634e7590efSmrg # Keep a list of preopened convenience libraries to check 65644e7590efSmrg # that they are being used correctly in the link pass. 65654e7590efSmrg test -z "$libdir" && \ 65664e7590efSmrg func_append dlpreconveniencelibs " $dir/$old_library" 65674e7590efSmrg fi 65684e7590efSmrg ;; 65694e7590efSmrg * ) 65704e7590efSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 65714e7590efSmrg # are required to link). 65724e7590efSmrg if test -n "$old_library"; then 65734e7590efSmrg func_append newdlprefiles " $dir/$old_library" 65744e7590efSmrg # Keep a list of preopened convenience libraries to check 65754e7590efSmrg # that they are being used correctly in the link pass. 65764e7590efSmrg test -z "$libdir" && \ 65774e7590efSmrg func_append dlpreconveniencelibs " $dir/$old_library" 65784e7590efSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 65794e7590efSmrg elif test -n "$dlname"; then 65804e7590efSmrg func_append newdlprefiles " $dir/$dlname" 65814e7590efSmrg else 65824e7590efSmrg func_append newdlprefiles " $dir/$linklib" 65834e7590efSmrg fi 65844e7590efSmrg ;; 65854e7590efSmrg esac 658649dc963fSmrg fi # $pass = dlpreopen 658749dc963fSmrg 658849dc963fSmrg if test -z "$libdir"; then 658949dc963fSmrg # Link the convenience library 659049dc963fSmrg if test "$linkmode" = lib; then 659149dc963fSmrg deplibs="$dir/$old_library $deplibs" 659249dc963fSmrg elif test "$linkmode,$pass" = "prog,link"; then 659349dc963fSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 659449dc963fSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 659549dc963fSmrg else 659649dc963fSmrg deplibs="$lib $deplibs" # used for prog,scan pass 659749dc963fSmrg fi 659849dc963fSmrg continue 659949dc963fSmrg fi 660049dc963fSmrg 660149dc963fSmrg 660249dc963fSmrg if test "$linkmode" = prog && test "$pass" != link; then 66034e7590efSmrg func_append newlib_search_path " $ladir" 660449dc963fSmrg deplibs="$lib $deplibs" 660549dc963fSmrg 660649dc963fSmrg linkalldeplibs=no 660749dc963fSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 660849dc963fSmrg test "$build_libtool_libs" = no; then 660949dc963fSmrg linkalldeplibs=yes 661049dc963fSmrg fi 661149dc963fSmrg 661249dc963fSmrg tmp_libs= 661349dc963fSmrg for deplib in $dependency_libs; do 661449dc963fSmrg case $deplib in 661549dc963fSmrg -L*) func_stripname '-L' '' "$deplib" 66164e7590efSmrg func_resolve_sysroot "$func_stripname_result" 66174e7590efSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 661849dc963fSmrg ;; 661949dc963fSmrg esac 662049dc963fSmrg # Need to link against all dependency_libs? 662149dc963fSmrg if test "$linkalldeplibs" = yes; then 662249dc963fSmrg deplibs="$deplib $deplibs" 662349dc963fSmrg else 662449dc963fSmrg # Need to hardcode shared library paths 662549dc963fSmrg # or/and link against static libraries 662649dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 662749dc963fSmrg fi 66284e7590efSmrg if $opt_preserve_dup_deps ; then 662949dc963fSmrg case "$tmp_libs " in 66304e7590efSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 663149dc963fSmrg esac 663249dc963fSmrg fi 66334e7590efSmrg func_append tmp_libs " $deplib" 663449dc963fSmrg done # for deplib 663549dc963fSmrg continue 663649dc963fSmrg fi # $linkmode = prog... 663749dc963fSmrg 663849dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 663949dc963fSmrg if test -n "$library_names" && 664049dc963fSmrg { { test "$prefer_static_libs" = no || 664149dc963fSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 664249dc963fSmrg test -z "$old_library"; }; then 664349dc963fSmrg # We need to hardcode the library path 664449dc963fSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 664549dc963fSmrg # Make sure the rpath contains only unique directories. 664649dc963fSmrg case "$temp_rpath:" in 664749dc963fSmrg *"$absdir:"*) ;; 66484e7590efSmrg *) func_append temp_rpath "$absdir:" ;; 664949dc963fSmrg esac 665049dc963fSmrg fi 665149dc963fSmrg 665249dc963fSmrg # Hardcode the library path. 665349dc963fSmrg # Skip directories that are in the system default run-time 665449dc963fSmrg # search path. 665549dc963fSmrg case " $sys_lib_dlsearch_path " in 665649dc963fSmrg *" $absdir "*) ;; 665749dc963fSmrg *) 665849dc963fSmrg case "$compile_rpath " in 665949dc963fSmrg *" $absdir "*) ;; 66604e7590efSmrg *) func_append compile_rpath " $absdir" ;; 666149dc963fSmrg esac 666249dc963fSmrg ;; 666349dc963fSmrg esac 666449dc963fSmrg case " $sys_lib_dlsearch_path " in 666549dc963fSmrg *" $libdir "*) ;; 666649dc963fSmrg *) 666749dc963fSmrg case "$finalize_rpath " in 666849dc963fSmrg *" $libdir "*) ;; 66694e7590efSmrg *) func_append finalize_rpath " $libdir" ;; 667049dc963fSmrg esac 667149dc963fSmrg ;; 667249dc963fSmrg esac 667349dc963fSmrg fi # $linkmode,$pass = prog,link... 667449dc963fSmrg 667549dc963fSmrg if test "$alldeplibs" = yes && 667649dc963fSmrg { test "$deplibs_check_method" = pass_all || 667749dc963fSmrg { test "$build_libtool_libs" = yes && 667849dc963fSmrg test -n "$library_names"; }; }; then 667949dc963fSmrg # We only need to search for static libraries 668049dc963fSmrg continue 668149dc963fSmrg fi 668249dc963fSmrg fi 668349dc963fSmrg 668449dc963fSmrg link_static=no # Whether the deplib will be linked statically 668549dc963fSmrg use_static_libs=$prefer_static_libs 668649dc963fSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 668749dc963fSmrg use_static_libs=no 668849dc963fSmrg fi 668949dc963fSmrg if test -n "$library_names" && 669049dc963fSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 669149dc963fSmrg case $host in 669249dc963fSmrg *cygwin* | *mingw* | *cegcc*) 669349dc963fSmrg # No point in relinking DLLs because paths are not encoded 66944e7590efSmrg func_append notinst_deplibs " $lib" 669549dc963fSmrg need_relink=no 669649dc963fSmrg ;; 669749dc963fSmrg *) 669849dc963fSmrg if test "$installed" = no; then 66994e7590efSmrg func_append notinst_deplibs " $lib" 670049dc963fSmrg need_relink=yes 670149dc963fSmrg fi 670249dc963fSmrg ;; 670349dc963fSmrg esac 670449dc963fSmrg # This is a shared library 670549dc963fSmrg 670649dc963fSmrg # Warn about portability, can't link against -module's on some 670749dc963fSmrg # systems (darwin). Don't bleat about dlopened modules though! 670849dc963fSmrg dlopenmodule="" 670949dc963fSmrg for dlpremoduletest in $dlprefiles; do 671049dc963fSmrg if test "X$dlpremoduletest" = "X$lib"; then 671149dc963fSmrg dlopenmodule="$dlpremoduletest" 671249dc963fSmrg break 671349dc963fSmrg fi 671449dc963fSmrg done 671549dc963fSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 67167aa89044Smrg echo 671749dc963fSmrg if test "$linkmode" = prog; then 671849dc963fSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 671949dc963fSmrg else 672049dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 672149dc963fSmrg fi 672249dc963fSmrg $ECHO "*** $linklib is not portable!" 672349dc963fSmrg fi 672449dc963fSmrg if test "$linkmode" = lib && 672549dc963fSmrg test "$hardcode_into_libs" = yes; then 672649dc963fSmrg # Hardcode the library path. 672749dc963fSmrg # Skip directories that are in the system default run-time 672849dc963fSmrg # search path. 672949dc963fSmrg case " $sys_lib_dlsearch_path " in 673049dc963fSmrg *" $absdir "*) ;; 673149dc963fSmrg *) 673249dc963fSmrg case "$compile_rpath " in 673349dc963fSmrg *" $absdir "*) ;; 67344e7590efSmrg *) func_append compile_rpath " $absdir" ;; 673549dc963fSmrg esac 673649dc963fSmrg ;; 673749dc963fSmrg esac 673849dc963fSmrg case " $sys_lib_dlsearch_path " in 673949dc963fSmrg *" $libdir "*) ;; 674049dc963fSmrg *) 674149dc963fSmrg case "$finalize_rpath " in 674249dc963fSmrg *" $libdir "*) ;; 67434e7590efSmrg *) func_append finalize_rpath " $libdir" ;; 674449dc963fSmrg esac 674549dc963fSmrg ;; 674649dc963fSmrg esac 674749dc963fSmrg fi 674849dc963fSmrg 674949dc963fSmrg if test -n "$old_archive_from_expsyms_cmds"; then 675049dc963fSmrg # figure out the soname 675149dc963fSmrg set dummy $library_names 675249dc963fSmrg shift 675349dc963fSmrg realname="$1" 675449dc963fSmrg shift 675549dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 675649dc963fSmrg # use dlname if we got it. it's perfectly good, no? 675749dc963fSmrg if test -n "$dlname"; then 675849dc963fSmrg soname="$dlname" 675949dc963fSmrg elif test -n "$soname_spec"; then 676049dc963fSmrg # bleh windows 676149dc963fSmrg case $host in 676249dc963fSmrg *cygwin* | mingw* | *cegcc*) 676349dc963fSmrg func_arith $current - $age 676449dc963fSmrg major=$func_arith_result 676549dc963fSmrg versuffix="-$major" 676649dc963fSmrg ;; 676749dc963fSmrg esac 676849dc963fSmrg eval soname=\"$soname_spec\" 676949dc963fSmrg else 677049dc963fSmrg soname="$realname" 677149dc963fSmrg fi 677249dc963fSmrg 677349dc963fSmrg # Make a new name for the extract_expsyms_cmds to use 677449dc963fSmrg soroot="$soname" 677549dc963fSmrg func_basename "$soroot" 677649dc963fSmrg soname="$func_basename_result" 677749dc963fSmrg func_stripname 'lib' '.dll' "$soname" 677849dc963fSmrg newlib=libimp-$func_stripname_result.a 677949dc963fSmrg 678049dc963fSmrg # If the library has no export list, then create one now 678149dc963fSmrg if test -f "$output_objdir/$soname-def"; then : 678249dc963fSmrg else 678349dc963fSmrg func_verbose "extracting exported symbol list from \`$soname'" 678449dc963fSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 678549dc963fSmrg fi 678649dc963fSmrg 678749dc963fSmrg # Create $newlib 678849dc963fSmrg if test -f "$output_objdir/$newlib"; then :; else 678949dc963fSmrg func_verbose "generating import library for \`$soname'" 679049dc963fSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 679149dc963fSmrg fi 679249dc963fSmrg # make sure the library variables are pointing to the new library 679349dc963fSmrg dir=$output_objdir 679449dc963fSmrg linklib=$newlib 679549dc963fSmrg fi # test -n "$old_archive_from_expsyms_cmds" 679649dc963fSmrg 67974e7590efSmrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 679849dc963fSmrg add_shlibpath= 679949dc963fSmrg add_dir= 680049dc963fSmrg add= 680149dc963fSmrg lib_linked=yes 680249dc963fSmrg case $hardcode_action in 680349dc963fSmrg immediate | unsupported) 680449dc963fSmrg if test "$hardcode_direct" = no; then 680549dc963fSmrg add="$dir/$linklib" 680649dc963fSmrg case $host in 680749dc963fSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 680849dc963fSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 680949dc963fSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 681049dc963fSmrg *-*-unixware7*) add_dir="-L$dir" ;; 681149dc963fSmrg *-*-darwin* ) 681249dc963fSmrg # if the lib is a (non-dlopened) module then we can not 681349dc963fSmrg # link against it, someone is ignoring the earlier warnings 681449dc963fSmrg if /usr/bin/file -L $add 2> /dev/null | 681549dc963fSmrg $GREP ": [^:]* bundle" >/dev/null ; then 681649dc963fSmrg if test "X$dlopenmodule" != "X$lib"; then 681749dc963fSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 681849dc963fSmrg if test -z "$old_library" ; then 68197aa89044Smrg echo 68207aa89044Smrg echo "*** And there doesn't seem to be a static archive available" 68217aa89044Smrg echo "*** The link will probably fail, sorry" 682249dc963fSmrg else 682349dc963fSmrg add="$dir/$old_library" 682449dc963fSmrg fi 682549dc963fSmrg elif test -n "$old_library"; then 682649dc963fSmrg add="$dir/$old_library" 682749dc963fSmrg fi 682849dc963fSmrg fi 682949dc963fSmrg esac 683049dc963fSmrg elif test "$hardcode_minus_L" = no; then 683149dc963fSmrg case $host in 683249dc963fSmrg *-*-sunos*) add_shlibpath="$dir" ;; 683349dc963fSmrg esac 683449dc963fSmrg add_dir="-L$dir" 683549dc963fSmrg add="-l$name" 683649dc963fSmrg elif test "$hardcode_shlibpath_var" = no; then 683749dc963fSmrg add_shlibpath="$dir" 683849dc963fSmrg add="-l$name" 683949dc963fSmrg else 684049dc963fSmrg lib_linked=no 684149dc963fSmrg fi 684249dc963fSmrg ;; 684349dc963fSmrg relink) 684449dc963fSmrg if test "$hardcode_direct" = yes && 684549dc963fSmrg test "$hardcode_direct_absolute" = no; then 684649dc963fSmrg add="$dir/$linklib" 684749dc963fSmrg elif test "$hardcode_minus_L" = yes; then 68484e7590efSmrg add_dir="-L$absdir" 684949dc963fSmrg # Try looking first in the location we're being installed to. 685049dc963fSmrg if test -n "$inst_prefix_dir"; then 685149dc963fSmrg case $libdir in 685249dc963fSmrg [\\/]*) 68534e7590efSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 685449dc963fSmrg ;; 685549dc963fSmrg esac 685649dc963fSmrg fi 685749dc963fSmrg add="-l$name" 685849dc963fSmrg elif test "$hardcode_shlibpath_var" = yes; then 685949dc963fSmrg add_shlibpath="$dir" 686049dc963fSmrg add="-l$name" 686149dc963fSmrg else 686249dc963fSmrg lib_linked=no 686349dc963fSmrg fi 686449dc963fSmrg ;; 686549dc963fSmrg *) lib_linked=no ;; 686649dc963fSmrg esac 686749dc963fSmrg 686849dc963fSmrg if test "$lib_linked" != yes; then 686949dc963fSmrg func_fatal_configuration "unsupported hardcode properties" 687049dc963fSmrg fi 687149dc963fSmrg 687249dc963fSmrg if test -n "$add_shlibpath"; then 687349dc963fSmrg case :$compile_shlibpath: in 687449dc963fSmrg *":$add_shlibpath:"*) ;; 68754e7590efSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 687649dc963fSmrg esac 687749dc963fSmrg fi 687849dc963fSmrg if test "$linkmode" = prog; then 687949dc963fSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 688049dc963fSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 688149dc963fSmrg else 688249dc963fSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 688349dc963fSmrg test -n "$add" && deplibs="$add $deplibs" 688449dc963fSmrg if test "$hardcode_direct" != yes && 688549dc963fSmrg test "$hardcode_minus_L" != yes && 688649dc963fSmrg test "$hardcode_shlibpath_var" = yes; then 688749dc963fSmrg case :$finalize_shlibpath: in 688849dc963fSmrg *":$libdir:"*) ;; 68894e7590efSmrg *) func_append finalize_shlibpath "$libdir:" ;; 689049dc963fSmrg esac 689149dc963fSmrg fi 689249dc963fSmrg fi 689349dc963fSmrg fi 689449dc963fSmrg 68954e7590efSmrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 689649dc963fSmrg add_shlibpath= 689749dc963fSmrg add_dir= 689849dc963fSmrg add= 689949dc963fSmrg # Finalize command for both is simple: just hardcode it. 690049dc963fSmrg if test "$hardcode_direct" = yes && 690149dc963fSmrg test "$hardcode_direct_absolute" = no; then 690249dc963fSmrg add="$libdir/$linklib" 690349dc963fSmrg elif test "$hardcode_minus_L" = yes; then 690449dc963fSmrg add_dir="-L$libdir" 690549dc963fSmrg add="-l$name" 690649dc963fSmrg elif test "$hardcode_shlibpath_var" = yes; then 690749dc963fSmrg case :$finalize_shlibpath: in 690849dc963fSmrg *":$libdir:"*) ;; 69094e7590efSmrg *) func_append finalize_shlibpath "$libdir:" ;; 691049dc963fSmrg esac 691149dc963fSmrg add="-l$name" 691249dc963fSmrg elif test "$hardcode_automatic" = yes; then 691349dc963fSmrg if test -n "$inst_prefix_dir" && 691449dc963fSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 691549dc963fSmrg add="$inst_prefix_dir$libdir/$linklib" 691649dc963fSmrg else 691749dc963fSmrg add="$libdir/$linklib" 691849dc963fSmrg fi 691949dc963fSmrg else 692049dc963fSmrg # We cannot seem to hardcode it, guess we'll fake it. 692149dc963fSmrg add_dir="-L$libdir" 692249dc963fSmrg # Try looking first in the location we're being installed to. 692349dc963fSmrg if test -n "$inst_prefix_dir"; then 692449dc963fSmrg case $libdir in 692549dc963fSmrg [\\/]*) 69264e7590efSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 692749dc963fSmrg ;; 692849dc963fSmrg esac 692949dc963fSmrg fi 693049dc963fSmrg add="-l$name" 693149dc963fSmrg fi 693249dc963fSmrg 693349dc963fSmrg if test "$linkmode" = prog; then 693449dc963fSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 693549dc963fSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 693649dc963fSmrg else 693749dc963fSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 693849dc963fSmrg test -n "$add" && deplibs="$add $deplibs" 693949dc963fSmrg fi 694049dc963fSmrg fi 694149dc963fSmrg elif test "$linkmode" = prog; then 694249dc963fSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 694349dc963fSmrg # is not unsupported. This is valid on all known static and 694449dc963fSmrg # shared platforms. 694549dc963fSmrg if test "$hardcode_direct" != unsupported; then 694649dc963fSmrg test -n "$old_library" && linklib="$old_library" 694749dc963fSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 694849dc963fSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 694949dc963fSmrg else 695049dc963fSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 695149dc963fSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 695249dc963fSmrg fi 695349dc963fSmrg elif test "$build_libtool_libs" = yes; then 695449dc963fSmrg # Not a shared library 695549dc963fSmrg if test "$deplibs_check_method" != pass_all; then 695649dc963fSmrg # We're trying link a shared library against a static one 695749dc963fSmrg # but the system doesn't support it. 695849dc963fSmrg 695949dc963fSmrg # Just print a warning and add the library to dependency_libs so 696049dc963fSmrg # that the program can be linked against the static library. 69617aa89044Smrg echo 696249dc963fSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 69637aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 69647aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 69657aa89044Smrg echo "*** shared version of the library, which you do not appear to have." 696649dc963fSmrg if test "$module" = yes; then 69677aa89044Smrg echo "*** But as you try to build a module library, libtool will still create " 69687aa89044Smrg echo "*** a static module, that should work as long as the dlopening application" 69697aa89044Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 697049dc963fSmrg if test -z "$global_symbol_pipe"; then 69717aa89044Smrg echo 69727aa89044Smrg echo "*** However, this would only work if libtool was able to extract symbol" 69737aa89044Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 69747aa89044Smrg echo "*** not find such a program. So, this module is probably useless." 69757aa89044Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 697649dc963fSmrg fi 697749dc963fSmrg if test "$build_old_libs" = no; then 697849dc963fSmrg build_libtool_libs=module 697949dc963fSmrg build_old_libs=yes 698049dc963fSmrg else 698149dc963fSmrg build_libtool_libs=no 698249dc963fSmrg fi 698349dc963fSmrg fi 698449dc963fSmrg else 698549dc963fSmrg deplibs="$dir/$old_library $deplibs" 698649dc963fSmrg link_static=yes 698749dc963fSmrg fi 698849dc963fSmrg fi # link shared/static library? 698949dc963fSmrg 699049dc963fSmrg if test "$linkmode" = lib; then 699149dc963fSmrg if test -n "$dependency_libs" && 699249dc963fSmrg { test "$hardcode_into_libs" != yes || 699349dc963fSmrg test "$build_old_libs" = yes || 699449dc963fSmrg test "$link_static" = yes; }; then 699549dc963fSmrg # Extract -R from dependency_libs 699649dc963fSmrg temp_deplibs= 699749dc963fSmrg for libdir in $dependency_libs; do 699849dc963fSmrg case $libdir in 699949dc963fSmrg -R*) func_stripname '-R' '' "$libdir" 700049dc963fSmrg temp_xrpath=$func_stripname_result 700149dc963fSmrg case " $xrpath " in 700249dc963fSmrg *" $temp_xrpath "*) ;; 70034e7590efSmrg *) func_append xrpath " $temp_xrpath";; 700449dc963fSmrg esac;; 70054e7590efSmrg *) func_append temp_deplibs " $libdir";; 700649dc963fSmrg esac 700749dc963fSmrg done 700849dc963fSmrg dependency_libs="$temp_deplibs" 700949dc963fSmrg fi 701049dc963fSmrg 70114e7590efSmrg func_append newlib_search_path " $absdir" 701249dc963fSmrg # Link against this library 701349dc963fSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 701449dc963fSmrg # ... and its dependency_libs 701549dc963fSmrg tmp_libs= 701649dc963fSmrg for deplib in $dependency_libs; do 701749dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 70184e7590efSmrg case $deplib in 70194e7590efSmrg -L*) func_stripname '-L' '' "$deplib" 70204e7590efSmrg func_resolve_sysroot "$func_stripname_result";; 70214e7590efSmrg *) func_resolve_sysroot "$deplib" ;; 70224e7590efSmrg esac 70234e7590efSmrg if $opt_preserve_dup_deps ; then 702449dc963fSmrg case "$tmp_libs " in 70254e7590efSmrg *" $func_resolve_sysroot_result "*) 70264e7590efSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 702749dc963fSmrg esac 702849dc963fSmrg fi 70294e7590efSmrg func_append tmp_libs " $func_resolve_sysroot_result" 703049dc963fSmrg done 703149dc963fSmrg 703249dc963fSmrg if test "$link_all_deplibs" != no; then 703349dc963fSmrg # Add the search paths of all dependency libraries 703449dc963fSmrg for deplib in $dependency_libs; do 70357aa89044Smrg path= 703649dc963fSmrg case $deplib in 703749dc963fSmrg -L*) path="$deplib" ;; 703849dc963fSmrg *.la) 70394e7590efSmrg func_resolve_sysroot "$deplib" 70404e7590efSmrg deplib=$func_resolve_sysroot_result 704149dc963fSmrg func_dirname "$deplib" "" "." 70424e7590efSmrg dir=$func_dirname_result 704349dc963fSmrg # We need an absolute path. 704449dc963fSmrg case $dir in 704549dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 704649dc963fSmrg *) 704749dc963fSmrg absdir=`cd "$dir" && pwd` 704849dc963fSmrg if test -z "$absdir"; then 704949dc963fSmrg func_warning "cannot determine absolute directory name of \`$dir'" 705049dc963fSmrg absdir="$dir" 705149dc963fSmrg fi 705249dc963fSmrg ;; 705349dc963fSmrg esac 705449dc963fSmrg if $GREP "^installed=no" $deplib > /dev/null; then 705549dc963fSmrg case $host in 705649dc963fSmrg *-*-darwin*) 705749dc963fSmrg depdepl= 705849dc963fSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 705949dc963fSmrg if test -n "$deplibrary_names" ; then 706049dc963fSmrg for tmp in $deplibrary_names ; do 706149dc963fSmrg depdepl=$tmp 706249dc963fSmrg done 706349dc963fSmrg if test -f "$absdir/$objdir/$depdepl" ; then 706449dc963fSmrg depdepl="$absdir/$objdir/$depdepl" 706549dc963fSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 706649dc963fSmrg if test -z "$darwin_install_name"; then 706749dc963fSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 706849dc963fSmrg fi 70694e7590efSmrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 70704e7590efSmrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 707149dc963fSmrg path= 707249dc963fSmrg fi 707349dc963fSmrg fi 707449dc963fSmrg ;; 707549dc963fSmrg *) 707649dc963fSmrg path="-L$absdir/$objdir" 707749dc963fSmrg ;; 707849dc963fSmrg esac 707949dc963fSmrg else 708049dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 708149dc963fSmrg test -z "$libdir" && \ 708249dc963fSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 708349dc963fSmrg test "$absdir" != "$libdir" && \ 708449dc963fSmrg func_warning "\`$deplib' seems to be moved" 708549dc963fSmrg 708649dc963fSmrg path="-L$absdir" 708749dc963fSmrg fi 708849dc963fSmrg ;; 708949dc963fSmrg esac 709049dc963fSmrg case " $deplibs " in 709149dc963fSmrg *" $path "*) ;; 709249dc963fSmrg *) deplibs="$path $deplibs" ;; 709349dc963fSmrg esac 709449dc963fSmrg done 709549dc963fSmrg fi # link_all_deplibs != no 709649dc963fSmrg fi # linkmode = lib 709749dc963fSmrg done # for deplib in $libs 709849dc963fSmrg if test "$pass" = link; then 709949dc963fSmrg if test "$linkmode" = "prog"; then 710049dc963fSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 710149dc963fSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 710249dc963fSmrg else 71037aa89044Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 710449dc963fSmrg fi 710549dc963fSmrg fi 710649dc963fSmrg dependency_libs="$newdependency_libs" 710749dc963fSmrg if test "$pass" = dlpreopen; then 710849dc963fSmrg # Link the dlpreopened libraries before other libraries 710949dc963fSmrg for deplib in $save_deplibs; do 711049dc963fSmrg deplibs="$deplib $deplibs" 711149dc963fSmrg done 711249dc963fSmrg fi 711349dc963fSmrg if test "$pass" != dlopen; then 711449dc963fSmrg if test "$pass" != conv; then 711549dc963fSmrg # Make sure lib_search_path contains only unique directories. 711649dc963fSmrg lib_search_path= 711749dc963fSmrg for dir in $newlib_search_path; do 711849dc963fSmrg case "$lib_search_path " in 711949dc963fSmrg *" $dir "*) ;; 71204e7590efSmrg *) func_append lib_search_path " $dir" ;; 712149dc963fSmrg esac 712249dc963fSmrg done 712349dc963fSmrg newlib_search_path= 712449dc963fSmrg fi 712549dc963fSmrg 712649dc963fSmrg if test "$linkmode,$pass" != "prog,link"; then 712749dc963fSmrg vars="deplibs" 712849dc963fSmrg else 712949dc963fSmrg vars="compile_deplibs finalize_deplibs" 713049dc963fSmrg fi 713149dc963fSmrg for var in $vars dependency_libs; do 713249dc963fSmrg # Add libraries to $var in reverse order 713349dc963fSmrg eval tmp_libs=\"\$$var\" 713449dc963fSmrg new_libs= 713549dc963fSmrg for deplib in $tmp_libs; do 713649dc963fSmrg # FIXME: Pedantically, this is the right thing to do, so 713749dc963fSmrg # that some nasty dependency loop isn't accidentally 713849dc963fSmrg # broken: 713949dc963fSmrg #new_libs="$deplib $new_libs" 714049dc963fSmrg # Pragmatically, this seems to cause very few problems in 714149dc963fSmrg # practice: 714249dc963fSmrg case $deplib in 714349dc963fSmrg -L*) new_libs="$deplib $new_libs" ;; 714449dc963fSmrg -R*) ;; 714549dc963fSmrg *) 714649dc963fSmrg # And here is the reason: when a library appears more 714749dc963fSmrg # than once as an explicit dependence of a library, or 714849dc963fSmrg # is implicitly linked in more than once by the 714949dc963fSmrg # compiler, it is considered special, and multiple 715049dc963fSmrg # occurrences thereof are not removed. Compare this 715149dc963fSmrg # with having the same library being listed as a 715249dc963fSmrg # dependency of multiple other libraries: in this case, 715349dc963fSmrg # we know (pedantically, we assume) the library does not 715449dc963fSmrg # need to be listed more than once, so we keep only the 715549dc963fSmrg # last copy. This is not always right, but it is rare 715649dc963fSmrg # enough that we require users that really mean to play 715749dc963fSmrg # such unportable linking tricks to link the library 715849dc963fSmrg # using -Wl,-lname, so that libtool does not consider it 715949dc963fSmrg # for duplicate removal. 716049dc963fSmrg case " $specialdeplibs " in 716149dc963fSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 716249dc963fSmrg *) 716349dc963fSmrg case " $new_libs " in 716449dc963fSmrg *" $deplib "*) ;; 716549dc963fSmrg *) new_libs="$deplib $new_libs" ;; 716649dc963fSmrg esac 716749dc963fSmrg ;; 716849dc963fSmrg esac 716949dc963fSmrg ;; 717049dc963fSmrg esac 717149dc963fSmrg done 717249dc963fSmrg tmp_libs= 717349dc963fSmrg for deplib in $new_libs; do 717449dc963fSmrg case $deplib in 717549dc963fSmrg -L*) 717649dc963fSmrg case " $tmp_libs " in 717749dc963fSmrg *" $deplib "*) ;; 71784e7590efSmrg *) func_append tmp_libs " $deplib" ;; 717949dc963fSmrg esac 718049dc963fSmrg ;; 71814e7590efSmrg *) func_append tmp_libs " $deplib" ;; 718249dc963fSmrg esac 718349dc963fSmrg done 718449dc963fSmrg eval $var=\"$tmp_libs\" 718549dc963fSmrg done # for var 718649dc963fSmrg fi 718749dc963fSmrg # Last step: remove runtime libs from dependency_libs 718849dc963fSmrg # (they stay in deplibs) 718949dc963fSmrg tmp_libs= 719049dc963fSmrg for i in $dependency_libs ; do 719149dc963fSmrg case " $predeps $postdeps $compiler_lib_search_path " in 719249dc963fSmrg *" $i "*) 719349dc963fSmrg i="" 719449dc963fSmrg ;; 719549dc963fSmrg esac 719649dc963fSmrg if test -n "$i" ; then 71974e7590efSmrg func_append tmp_libs " $i" 719849dc963fSmrg fi 719949dc963fSmrg done 720049dc963fSmrg dependency_libs=$tmp_libs 720149dc963fSmrg done # for pass 720249dc963fSmrg if test "$linkmode" = prog; then 720349dc963fSmrg dlfiles="$newdlfiles" 720449dc963fSmrg fi 720549dc963fSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 720649dc963fSmrg dlprefiles="$newdlprefiles" 720749dc963fSmrg fi 720849dc963fSmrg 720949dc963fSmrg case $linkmode in 721049dc963fSmrg oldlib) 721149dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 721249dc963fSmrg func_warning "\`-dlopen' is ignored for archives" 721349dc963fSmrg fi 721449dc963fSmrg 721549dc963fSmrg case " $deplibs" in 721649dc963fSmrg *\ -l* | *\ -L*) 721749dc963fSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 721849dc963fSmrg esac 721949dc963fSmrg 722049dc963fSmrg test -n "$rpath" && \ 722149dc963fSmrg func_warning "\`-rpath' is ignored for archives" 722249dc963fSmrg 722349dc963fSmrg test -n "$xrpath" && \ 722449dc963fSmrg func_warning "\`-R' is ignored for archives" 722549dc963fSmrg 722649dc963fSmrg test -n "$vinfo" && \ 722749dc963fSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 722849dc963fSmrg 722949dc963fSmrg test -n "$release" && \ 723049dc963fSmrg func_warning "\`-release' is ignored for archives" 723149dc963fSmrg 723249dc963fSmrg test -n "$export_symbols$export_symbols_regex" && \ 723349dc963fSmrg func_warning "\`-export-symbols' is ignored for archives" 723449dc963fSmrg 723549dc963fSmrg # Now set the variables for building old libraries. 723649dc963fSmrg build_libtool_libs=no 723749dc963fSmrg oldlibs="$output" 72384e7590efSmrg func_append objs "$old_deplibs" 723949dc963fSmrg ;; 724049dc963fSmrg 724149dc963fSmrg lib) 724249dc963fSmrg # Make sure we only generate libraries of the form `libNAME.la'. 724349dc963fSmrg case $outputname in 724449dc963fSmrg lib*) 724549dc963fSmrg func_stripname 'lib' '.la' "$outputname" 724649dc963fSmrg name=$func_stripname_result 724749dc963fSmrg eval shared_ext=\"$shrext_cmds\" 724849dc963fSmrg eval libname=\"$libname_spec\" 724949dc963fSmrg ;; 725049dc963fSmrg *) 725149dc963fSmrg test "$module" = no && \ 725249dc963fSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 725349dc963fSmrg 725449dc963fSmrg if test "$need_lib_prefix" != no; then 725549dc963fSmrg # Add the "lib" prefix for modules if required 725649dc963fSmrg func_stripname '' '.la' "$outputname" 725749dc963fSmrg name=$func_stripname_result 725849dc963fSmrg eval shared_ext=\"$shrext_cmds\" 725949dc963fSmrg eval libname=\"$libname_spec\" 726049dc963fSmrg else 726149dc963fSmrg func_stripname '' '.la' "$outputname" 726249dc963fSmrg libname=$func_stripname_result 726349dc963fSmrg fi 726449dc963fSmrg ;; 726549dc963fSmrg esac 726649dc963fSmrg 726749dc963fSmrg if test -n "$objs"; then 726849dc963fSmrg if test "$deplibs_check_method" != pass_all; then 726949dc963fSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 727049dc963fSmrg else 72717aa89044Smrg echo 727249dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 727349dc963fSmrg $ECHO "*** objects $objs is not portable!" 72744e7590efSmrg func_append libobjs " $objs" 727549dc963fSmrg fi 727649dc963fSmrg fi 727749dc963fSmrg 727849dc963fSmrg test "$dlself" != no && \ 727949dc963fSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 728049dc963fSmrg 728149dc963fSmrg set dummy $rpath 728249dc963fSmrg shift 728349dc963fSmrg test "$#" -gt 1 && \ 728449dc963fSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 728549dc963fSmrg 728649dc963fSmrg install_libdir="$1" 728749dc963fSmrg 728849dc963fSmrg oldlibs= 728949dc963fSmrg if test -z "$rpath"; then 729049dc963fSmrg if test "$build_libtool_libs" = yes; then 729149dc963fSmrg # Building a libtool convenience library. 729249dc963fSmrg # Some compilers have problems with a `.al' extension so 729349dc963fSmrg # convenience libraries should have the same extension an 729449dc963fSmrg # archive normally would. 729549dc963fSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 729649dc963fSmrg build_libtool_libs=convenience 729749dc963fSmrg build_old_libs=yes 729849dc963fSmrg fi 729949dc963fSmrg 730049dc963fSmrg test -n "$vinfo" && \ 730149dc963fSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 730249dc963fSmrg 730349dc963fSmrg test -n "$release" && \ 730449dc963fSmrg func_warning "\`-release' is ignored for convenience libraries" 730549dc963fSmrg else 730649dc963fSmrg 730749dc963fSmrg # Parse the version information argument. 730849dc963fSmrg save_ifs="$IFS"; IFS=':' 730949dc963fSmrg set dummy $vinfo 0 0 0 731049dc963fSmrg shift 731149dc963fSmrg IFS="$save_ifs" 731249dc963fSmrg 731349dc963fSmrg test -n "$7" && \ 731449dc963fSmrg func_fatal_help "too many parameters to \`-version-info'" 731549dc963fSmrg 731649dc963fSmrg # convert absolute version numbers to libtool ages 731749dc963fSmrg # this retains compatibility with .la files and attempts 731849dc963fSmrg # to make the code below a bit more comprehensible 731949dc963fSmrg 732049dc963fSmrg case $vinfo_number in 732149dc963fSmrg yes) 732249dc963fSmrg number_major="$1" 732349dc963fSmrg number_minor="$2" 732449dc963fSmrg number_revision="$3" 732549dc963fSmrg # 732649dc963fSmrg # There are really only two kinds -- those that 732749dc963fSmrg # use the current revision as the major version 732849dc963fSmrg # and those that subtract age and use age as 732949dc963fSmrg # a minor version. But, then there is irix 733049dc963fSmrg # which has an extra 1 added just for fun 733149dc963fSmrg # 733249dc963fSmrg case $version_type in 73334e7590efSmrg # correct linux to gnu/linux during the next big refactor 733449dc963fSmrg darwin|linux|osf|windows|none) 733549dc963fSmrg func_arith $number_major + $number_minor 733649dc963fSmrg current=$func_arith_result 733749dc963fSmrg age="$number_minor" 733849dc963fSmrg revision="$number_revision" 733949dc963fSmrg ;; 73407aa89044Smrg freebsd-aout|freebsd-elf|qnx|sunos) 734149dc963fSmrg current="$number_major" 734249dc963fSmrg revision="$number_minor" 734349dc963fSmrg age="0" 734449dc963fSmrg ;; 734549dc963fSmrg irix|nonstopux) 734649dc963fSmrg func_arith $number_major + $number_minor 734749dc963fSmrg current=$func_arith_result 734849dc963fSmrg age="$number_minor" 734949dc963fSmrg revision="$number_minor" 735049dc963fSmrg lt_irix_increment=no 735149dc963fSmrg ;; 735249dc963fSmrg esac 735349dc963fSmrg ;; 735449dc963fSmrg no) 735549dc963fSmrg current="$1" 735649dc963fSmrg revision="$2" 735749dc963fSmrg age="$3" 735849dc963fSmrg ;; 735949dc963fSmrg esac 736049dc963fSmrg 736149dc963fSmrg # Check that each of the things are valid numbers. 736249dc963fSmrg case $current in 736349dc963fSmrg 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]) ;; 736449dc963fSmrg *) 736549dc963fSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 736649dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 736749dc963fSmrg ;; 736849dc963fSmrg esac 736949dc963fSmrg 737049dc963fSmrg case $revision in 737149dc963fSmrg 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]) ;; 737249dc963fSmrg *) 737349dc963fSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 737449dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 737549dc963fSmrg ;; 737649dc963fSmrg esac 737749dc963fSmrg 737849dc963fSmrg case $age in 737949dc963fSmrg 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]) ;; 738049dc963fSmrg *) 738149dc963fSmrg func_error "AGE \`$age' must be a nonnegative integer" 738249dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 738349dc963fSmrg ;; 738449dc963fSmrg esac 738549dc963fSmrg 738649dc963fSmrg if test "$age" -gt "$current"; then 738749dc963fSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 738849dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 738949dc963fSmrg fi 739049dc963fSmrg 739149dc963fSmrg # Calculate the version variables. 739249dc963fSmrg major= 739349dc963fSmrg versuffix= 739449dc963fSmrg verstring= 739549dc963fSmrg case $version_type in 739649dc963fSmrg none) ;; 739749dc963fSmrg 739849dc963fSmrg darwin) 739949dc963fSmrg # Like Linux, but with the current version available in 740049dc963fSmrg # verstring for coding it into the library header 740149dc963fSmrg func_arith $current - $age 740249dc963fSmrg major=.$func_arith_result 740349dc963fSmrg versuffix="$major.$age.$revision" 740449dc963fSmrg # Darwin ld doesn't like 0 for these options... 740549dc963fSmrg func_arith $current + 1 740649dc963fSmrg minor_current=$func_arith_result 740749dc963fSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 740849dc963fSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 740949dc963fSmrg ;; 741049dc963fSmrg 741149dc963fSmrg freebsd-aout) 741249dc963fSmrg major=".$current" 741349dc963fSmrg versuffix=".$current.$revision"; 741449dc963fSmrg ;; 741549dc963fSmrg 741649dc963fSmrg freebsd-elf) 741749dc963fSmrg major=".$current" 741849dc963fSmrg versuffix=".$current" 741949dc963fSmrg ;; 742049dc963fSmrg 742149dc963fSmrg irix | nonstopux) 742249dc963fSmrg if test "X$lt_irix_increment" = "Xno"; then 742349dc963fSmrg func_arith $current - $age 742449dc963fSmrg else 742549dc963fSmrg func_arith $current - $age + 1 742649dc963fSmrg fi 742749dc963fSmrg major=$func_arith_result 742849dc963fSmrg 742949dc963fSmrg case $version_type in 743049dc963fSmrg nonstopux) verstring_prefix=nonstopux ;; 743149dc963fSmrg *) verstring_prefix=sgi ;; 743249dc963fSmrg esac 743349dc963fSmrg verstring="$verstring_prefix$major.$revision" 743449dc963fSmrg 743549dc963fSmrg # Add in all the interfaces that we are compatible with. 743649dc963fSmrg loop=$revision 743749dc963fSmrg while test "$loop" -ne 0; do 743849dc963fSmrg func_arith $revision - $loop 743949dc963fSmrg iface=$func_arith_result 744049dc963fSmrg func_arith $loop - 1 744149dc963fSmrg loop=$func_arith_result 744249dc963fSmrg verstring="$verstring_prefix$major.$iface:$verstring" 744349dc963fSmrg done 744449dc963fSmrg 744549dc963fSmrg # Before this point, $major must not contain `.'. 744649dc963fSmrg major=.$major 744749dc963fSmrg versuffix="$major.$revision" 744849dc963fSmrg ;; 744949dc963fSmrg 74504e7590efSmrg linux) # correct to gnu/linux during the next big refactor 745149dc963fSmrg func_arith $current - $age 745249dc963fSmrg major=.$func_arith_result 745349dc963fSmrg versuffix="$major.$age.$revision" 745449dc963fSmrg ;; 745549dc963fSmrg 745649dc963fSmrg osf) 745749dc963fSmrg func_arith $current - $age 745849dc963fSmrg major=.$func_arith_result 745949dc963fSmrg versuffix=".$current.$age.$revision" 746049dc963fSmrg verstring="$current.$age.$revision" 746149dc963fSmrg 746249dc963fSmrg # Add in all the interfaces that we are compatible with. 746349dc963fSmrg loop=$age 746449dc963fSmrg while test "$loop" -ne 0; do 746549dc963fSmrg func_arith $current - $loop 746649dc963fSmrg iface=$func_arith_result 746749dc963fSmrg func_arith $loop - 1 746849dc963fSmrg loop=$func_arith_result 746949dc963fSmrg verstring="$verstring:${iface}.0" 747049dc963fSmrg done 747149dc963fSmrg 747249dc963fSmrg # Make executables depend on our current version. 74734e7590efSmrg func_append verstring ":${current}.0" 747449dc963fSmrg ;; 747549dc963fSmrg 747649dc963fSmrg qnx) 747749dc963fSmrg major=".$current" 747849dc963fSmrg versuffix=".$current" 747949dc963fSmrg ;; 748049dc963fSmrg 748149dc963fSmrg sunos) 748249dc963fSmrg major=".$current" 748349dc963fSmrg versuffix=".$current.$revision" 748449dc963fSmrg ;; 748549dc963fSmrg 748649dc963fSmrg windows) 748749dc963fSmrg # Use '-' rather than '.', since we only want one 748849dc963fSmrg # extension on DOS 8.3 filesystems. 748949dc963fSmrg func_arith $current - $age 749049dc963fSmrg major=$func_arith_result 749149dc963fSmrg versuffix="-$major" 749249dc963fSmrg ;; 749349dc963fSmrg 749449dc963fSmrg *) 749549dc963fSmrg func_fatal_configuration "unknown library version type \`$version_type'" 749649dc963fSmrg ;; 749749dc963fSmrg esac 749849dc963fSmrg 749949dc963fSmrg # Clear the version info if we defaulted, and they specified a release. 750049dc963fSmrg if test -z "$vinfo" && test -n "$release"; then 750149dc963fSmrg major= 750249dc963fSmrg case $version_type in 750349dc963fSmrg darwin) 750449dc963fSmrg # we can't check for "0.0" in archive_cmds due to quoting 750549dc963fSmrg # problems, so we reset it completely 750649dc963fSmrg verstring= 750749dc963fSmrg ;; 750849dc963fSmrg *) 750949dc963fSmrg verstring="0.0" 751049dc963fSmrg ;; 751149dc963fSmrg esac 751249dc963fSmrg if test "$need_version" = no; then 751349dc963fSmrg versuffix= 751449dc963fSmrg else 751549dc963fSmrg versuffix=".0.0" 751649dc963fSmrg fi 751749dc963fSmrg fi 751849dc963fSmrg 751949dc963fSmrg # Remove version info from name if versioning should be avoided 752049dc963fSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 752149dc963fSmrg major= 752249dc963fSmrg versuffix= 752349dc963fSmrg verstring="" 752449dc963fSmrg fi 752549dc963fSmrg 752649dc963fSmrg # Check to see if the archive will have undefined symbols. 752749dc963fSmrg if test "$allow_undefined" = yes; then 752849dc963fSmrg if test "$allow_undefined_flag" = unsupported; then 752949dc963fSmrg func_warning "undefined symbols not allowed in $host shared libraries" 753049dc963fSmrg build_libtool_libs=no 753149dc963fSmrg build_old_libs=yes 753249dc963fSmrg fi 753349dc963fSmrg else 753449dc963fSmrg # Don't allow undefined symbols. 753549dc963fSmrg allow_undefined_flag="$no_undefined_flag" 753649dc963fSmrg fi 753749dc963fSmrg 753849dc963fSmrg fi 753949dc963fSmrg 754049dc963fSmrg func_generate_dlsyms "$libname" "$libname" "yes" 75414e7590efSmrg func_append libobjs " $symfileobj" 754249dc963fSmrg test "X$libobjs" = "X " && libobjs= 754349dc963fSmrg 75444e7590efSmrg if test "$opt_mode" != relink; then 754549dc963fSmrg # Remove our outputs, but don't remove object files since they 754649dc963fSmrg # may have been created when compiling PIC objects. 754749dc963fSmrg removelist= 754849dc963fSmrg tempremovelist=`$ECHO "$output_objdir/*"` 754949dc963fSmrg for p in $tempremovelist; do 755049dc963fSmrg case $p in 755149dc963fSmrg *.$objext | *.gcno) 755249dc963fSmrg ;; 755349dc963fSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 755449dc963fSmrg if test "X$precious_files_regex" != "X"; then 755549dc963fSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 755649dc963fSmrg then 755749dc963fSmrg continue 755849dc963fSmrg fi 755949dc963fSmrg fi 75604e7590efSmrg func_append removelist " $p" 756149dc963fSmrg ;; 756249dc963fSmrg *) ;; 756349dc963fSmrg esac 756449dc963fSmrg done 756549dc963fSmrg test -n "$removelist" && \ 756649dc963fSmrg func_show_eval "${RM}r \$removelist" 756749dc963fSmrg fi 756849dc963fSmrg 756949dc963fSmrg # Now set the variables for building old libraries. 757049dc963fSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 75714e7590efSmrg func_append oldlibs " $output_objdir/$libname.$libext" 757249dc963fSmrg 757349dc963fSmrg # Transform .lo files to .o files. 75747aa89044Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 757549dc963fSmrg fi 757649dc963fSmrg 757749dc963fSmrg # Eliminate all temporary directories. 757849dc963fSmrg #for path in $notinst_path; do 75797aa89044Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 75807aa89044Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 75817aa89044Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 758249dc963fSmrg #done 758349dc963fSmrg 758449dc963fSmrg if test -n "$xrpath"; then 758549dc963fSmrg # If the user specified any rpath flags, then add them. 758649dc963fSmrg temp_xrpath= 758749dc963fSmrg for libdir in $xrpath; do 75884e7590efSmrg func_replace_sysroot "$libdir" 75894e7590efSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 759049dc963fSmrg case "$finalize_rpath " in 759149dc963fSmrg *" $libdir "*) ;; 75924e7590efSmrg *) func_append finalize_rpath " $libdir" ;; 759349dc963fSmrg esac 759449dc963fSmrg done 759549dc963fSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 759649dc963fSmrg dependency_libs="$temp_xrpath $dependency_libs" 759749dc963fSmrg fi 759849dc963fSmrg fi 759949dc963fSmrg 760049dc963fSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 760149dc963fSmrg old_dlfiles="$dlfiles" 760249dc963fSmrg dlfiles= 760349dc963fSmrg for lib in $old_dlfiles; do 760449dc963fSmrg case " $dlprefiles $dlfiles " in 760549dc963fSmrg *" $lib "*) ;; 76064e7590efSmrg *) func_append dlfiles " $lib" ;; 760749dc963fSmrg esac 760849dc963fSmrg done 760949dc963fSmrg 761049dc963fSmrg # Make sure dlprefiles contains only unique files 761149dc963fSmrg old_dlprefiles="$dlprefiles" 761249dc963fSmrg dlprefiles= 761349dc963fSmrg for lib in $old_dlprefiles; do 761449dc963fSmrg case "$dlprefiles " in 761549dc963fSmrg *" $lib "*) ;; 76164e7590efSmrg *) func_append dlprefiles " $lib" ;; 761749dc963fSmrg esac 761849dc963fSmrg done 761949dc963fSmrg 762049dc963fSmrg if test "$build_libtool_libs" = yes; then 762149dc963fSmrg if test -n "$rpath"; then 762249dc963fSmrg case $host in 76237aa89044Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 762449dc963fSmrg # these systems don't actually have a c library (as such)! 762549dc963fSmrg ;; 762649dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 762749dc963fSmrg # Rhapsody C library is in the System framework 76284e7590efSmrg func_append deplibs " System.ltframework" 762949dc963fSmrg ;; 763049dc963fSmrg *-*-netbsd*) 763149dc963fSmrg # Don't link with libc until the a.out ld.so is fixed. 763249dc963fSmrg ;; 763349dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 763449dc963fSmrg # Do not include libc due to us having libc/libc_r. 763549dc963fSmrg ;; 763649dc963fSmrg *-*-sco3.2v5* | *-*-sco5v6*) 763749dc963fSmrg # Causes problems with __ctype 763849dc963fSmrg ;; 763949dc963fSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 764049dc963fSmrg # Compiler inserts libc in the correct place for threads to work 764149dc963fSmrg ;; 764249dc963fSmrg *) 764349dc963fSmrg # Add libc to deplibs on all other systems if necessary. 764449dc963fSmrg if test "$build_libtool_need_lc" = "yes"; then 76454e7590efSmrg func_append deplibs " -lc" 764649dc963fSmrg fi 764749dc963fSmrg ;; 764849dc963fSmrg esac 764949dc963fSmrg fi 765049dc963fSmrg 765149dc963fSmrg # Transform deplibs into only deplibs that can be linked in shared. 765249dc963fSmrg name_save=$name 765349dc963fSmrg libname_save=$libname 765449dc963fSmrg release_save=$release 765549dc963fSmrg versuffix_save=$versuffix 765649dc963fSmrg major_save=$major 765749dc963fSmrg # I'm not sure if I'm treating the release correctly. I think 765849dc963fSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 765949dc963fSmrg # add it in twice. Is that correct? 766049dc963fSmrg release="" 766149dc963fSmrg versuffix="" 766249dc963fSmrg major="" 766349dc963fSmrg newdeplibs= 766449dc963fSmrg droppeddeps=no 766549dc963fSmrg case $deplibs_check_method in 766649dc963fSmrg pass_all) 766749dc963fSmrg # Don't check for shared/static. Everything works. 766849dc963fSmrg # This might be a little naive. We might want to check 766949dc963fSmrg # whether the library exists or not. But this is on 767049dc963fSmrg # osf3 & osf4 and I'm not really sure... Just 767149dc963fSmrg # implementing what was already the behavior. 767249dc963fSmrg newdeplibs=$deplibs 767349dc963fSmrg ;; 767449dc963fSmrg test_compile) 767549dc963fSmrg # This code stresses the "libraries are programs" paradigm to its 767649dc963fSmrg # limits. Maybe even breaks it. We compile a program, linking it 767749dc963fSmrg # against the deplibs as a proxy for the library. Then we can check 767849dc963fSmrg # whether they linked in statically or dynamically with ldd. 767949dc963fSmrg $opt_dry_run || $RM conftest.c 768049dc963fSmrg cat > conftest.c <<EOF 768149dc963fSmrg int main() { return 0; } 768249dc963fSmrgEOF 768349dc963fSmrg $opt_dry_run || $RM conftest 768449dc963fSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 768549dc963fSmrg ldd_output=`ldd conftest` 768649dc963fSmrg for i in $deplibs; do 768749dc963fSmrg case $i in 768849dc963fSmrg -l*) 768949dc963fSmrg func_stripname -l '' "$i" 769049dc963fSmrg name=$func_stripname_result 769149dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 769249dc963fSmrg case " $predeps $postdeps " in 769349dc963fSmrg *" $i "*) 76944e7590efSmrg func_append newdeplibs " $i" 769549dc963fSmrg i="" 769649dc963fSmrg ;; 769749dc963fSmrg esac 769849dc963fSmrg fi 769949dc963fSmrg if test -n "$i" ; then 770049dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 770149dc963fSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 770249dc963fSmrg set dummy $deplib_matches; shift 770349dc963fSmrg deplib_match=$1 770449dc963fSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77054e7590efSmrg func_append newdeplibs " $i" 770649dc963fSmrg else 770749dc963fSmrg droppeddeps=yes 77087aa89044Smrg echo 770949dc963fSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77107aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 77117aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 77127aa89044Smrg echo "*** shared version of the library, which I believe you do not have" 77137aa89044Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 77147aa89044Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 771549dc963fSmrg fi 771649dc963fSmrg fi 771749dc963fSmrg ;; 771849dc963fSmrg *) 77194e7590efSmrg func_append newdeplibs " $i" 772049dc963fSmrg ;; 772149dc963fSmrg esac 772249dc963fSmrg done 772349dc963fSmrg else 772449dc963fSmrg # Error occurred in the first compile. Let's try to salvage 772549dc963fSmrg # the situation: Compile a separate program for each library. 772649dc963fSmrg for i in $deplibs; do 772749dc963fSmrg case $i in 772849dc963fSmrg -l*) 772949dc963fSmrg func_stripname -l '' "$i" 773049dc963fSmrg name=$func_stripname_result 773149dc963fSmrg $opt_dry_run || $RM conftest 773249dc963fSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 773349dc963fSmrg ldd_output=`ldd conftest` 773449dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 773549dc963fSmrg case " $predeps $postdeps " in 773649dc963fSmrg *" $i "*) 77374e7590efSmrg func_append newdeplibs " $i" 773849dc963fSmrg i="" 773949dc963fSmrg ;; 774049dc963fSmrg esac 774149dc963fSmrg fi 774249dc963fSmrg if test -n "$i" ; then 774349dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 774449dc963fSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 774549dc963fSmrg set dummy $deplib_matches; shift 774649dc963fSmrg deplib_match=$1 774749dc963fSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77484e7590efSmrg func_append newdeplibs " $i" 774949dc963fSmrg else 775049dc963fSmrg droppeddeps=yes 77517aa89044Smrg echo 775249dc963fSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77537aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 77547aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 77557aa89044Smrg echo "*** shared version of the library, which you do not appear to have" 77567aa89044Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 77577aa89044Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 775849dc963fSmrg fi 775949dc963fSmrg fi 776049dc963fSmrg else 776149dc963fSmrg droppeddeps=yes 77627aa89044Smrg echo 776349dc963fSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 77647aa89044Smrg echo "*** make it link in! You will probably need to install it or some" 77657aa89044Smrg echo "*** library that it depends on before this library will be fully" 77667aa89044Smrg echo "*** functional. Installing it before continuing would be even better." 776749dc963fSmrg fi 776849dc963fSmrg ;; 776949dc963fSmrg *) 77704e7590efSmrg func_append newdeplibs " $i" 777149dc963fSmrg ;; 777249dc963fSmrg esac 777349dc963fSmrg done 777449dc963fSmrg fi 777549dc963fSmrg ;; 777649dc963fSmrg file_magic*) 777749dc963fSmrg set dummy $deplibs_check_method; shift 777849dc963fSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 777949dc963fSmrg for a_deplib in $deplibs; do 778049dc963fSmrg case $a_deplib in 778149dc963fSmrg -l*) 778249dc963fSmrg func_stripname -l '' "$a_deplib" 778349dc963fSmrg name=$func_stripname_result 778449dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 778549dc963fSmrg case " $predeps $postdeps " in 778649dc963fSmrg *" $a_deplib "*) 77874e7590efSmrg func_append newdeplibs " $a_deplib" 778849dc963fSmrg a_deplib="" 778949dc963fSmrg ;; 779049dc963fSmrg esac 779149dc963fSmrg fi 779249dc963fSmrg if test -n "$a_deplib" ; then 779349dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 77944e7590efSmrg if test -n "$file_magic_glob"; then 77954e7590efSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 77964e7590efSmrg else 77974e7590efSmrg libnameglob=$libname 77984e7590efSmrg fi 77994e7590efSmrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 780049dc963fSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78014e7590efSmrg if test "$want_nocaseglob" = yes; then 78024e7590efSmrg shopt -s nocaseglob 78034e7590efSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78044e7590efSmrg $nocaseglob 78054e7590efSmrg else 78064e7590efSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78074e7590efSmrg fi 780849dc963fSmrg for potent_lib in $potential_libs; do 780949dc963fSmrg # Follow soft links. 781049dc963fSmrg if ls -lLd "$potent_lib" 2>/dev/null | 781149dc963fSmrg $GREP " -> " >/dev/null; then 781249dc963fSmrg continue 781349dc963fSmrg fi 781449dc963fSmrg # The statement above tries to avoid entering an 781549dc963fSmrg # endless loop below, in case of cyclic links. 781649dc963fSmrg # We might still enter an endless loop, since a link 781749dc963fSmrg # loop can be closed while we follow links, 781849dc963fSmrg # but so what? 781949dc963fSmrg potlib="$potent_lib" 782049dc963fSmrg while test -h "$potlib" 2>/dev/null; do 782149dc963fSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 782249dc963fSmrg case $potliblink in 782349dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 78247aa89044Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 782549dc963fSmrg esac 782649dc963fSmrg done 782749dc963fSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 782849dc963fSmrg $SED -e 10q | 782949dc963fSmrg $EGREP "$file_magic_regex" > /dev/null; then 78304e7590efSmrg func_append newdeplibs " $a_deplib" 783149dc963fSmrg a_deplib="" 783249dc963fSmrg break 2 783349dc963fSmrg fi 783449dc963fSmrg done 783549dc963fSmrg done 783649dc963fSmrg fi 783749dc963fSmrg if test -n "$a_deplib" ; then 783849dc963fSmrg droppeddeps=yes 78397aa89044Smrg echo 784049dc963fSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78417aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 78427aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 78437aa89044Smrg echo "*** shared version of the library, which you do not appear to have" 78447aa89044Smrg echo "*** because I did check the linker path looking for a file starting" 784549dc963fSmrg if test -z "$potlib" ; then 784649dc963fSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 784749dc963fSmrg else 784849dc963fSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 784949dc963fSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 785049dc963fSmrg fi 785149dc963fSmrg fi 785249dc963fSmrg ;; 785349dc963fSmrg *) 785449dc963fSmrg # Add a -L argument. 78554e7590efSmrg func_append newdeplibs " $a_deplib" 785649dc963fSmrg ;; 785749dc963fSmrg esac 785849dc963fSmrg done # Gone through all deplibs. 785949dc963fSmrg ;; 786049dc963fSmrg match_pattern*) 786149dc963fSmrg set dummy $deplibs_check_method; shift 786249dc963fSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 786349dc963fSmrg for a_deplib in $deplibs; do 786449dc963fSmrg case $a_deplib in 786549dc963fSmrg -l*) 786649dc963fSmrg func_stripname -l '' "$a_deplib" 786749dc963fSmrg name=$func_stripname_result 786849dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 786949dc963fSmrg case " $predeps $postdeps " in 787049dc963fSmrg *" $a_deplib "*) 78714e7590efSmrg func_append newdeplibs " $a_deplib" 787249dc963fSmrg a_deplib="" 787349dc963fSmrg ;; 787449dc963fSmrg esac 787549dc963fSmrg fi 787649dc963fSmrg if test -n "$a_deplib" ; then 787749dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 787849dc963fSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 787949dc963fSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 788049dc963fSmrg for potent_lib in $potential_libs; do 788149dc963fSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 78827aa89044Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 788349dc963fSmrg $EGREP "$match_pattern_regex" > /dev/null; then 78844e7590efSmrg func_append newdeplibs " $a_deplib" 788549dc963fSmrg a_deplib="" 788649dc963fSmrg break 2 788749dc963fSmrg fi 788849dc963fSmrg done 788949dc963fSmrg done 789049dc963fSmrg fi 789149dc963fSmrg if test -n "$a_deplib" ; then 789249dc963fSmrg droppeddeps=yes 78937aa89044Smrg echo 789449dc963fSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78957aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 78967aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 78977aa89044Smrg echo "*** shared version of the library, which you do not appear to have" 78987aa89044Smrg echo "*** because I did check the linker path looking for a file starting" 789949dc963fSmrg if test -z "$potlib" ; then 790049dc963fSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 790149dc963fSmrg else 790249dc963fSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 790349dc963fSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 790449dc963fSmrg fi 790549dc963fSmrg fi 790649dc963fSmrg ;; 790749dc963fSmrg *) 790849dc963fSmrg # Add a -L argument. 79094e7590efSmrg func_append newdeplibs " $a_deplib" 791049dc963fSmrg ;; 791149dc963fSmrg esac 791249dc963fSmrg done # Gone through all deplibs. 791349dc963fSmrg ;; 791449dc963fSmrg none | unknown | *) 791549dc963fSmrg newdeplibs="" 79167aa89044Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 791749dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 791849dc963fSmrg for i in $predeps $postdeps ; do 791949dc963fSmrg # can't use Xsed below, because $i might contain '/' 79207aa89044Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 792149dc963fSmrg done 792249dc963fSmrg fi 79237aa89044Smrg case $tmp_deplibs in 79247aa89044Smrg *[!\ \ ]*) 79257aa89044Smrg echo 792649dc963fSmrg if test "X$deplibs_check_method" = "Xnone"; then 79277aa89044Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 792849dc963fSmrg else 79297aa89044Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 793049dc963fSmrg fi 79317aa89044Smrg echo "*** All declared inter-library dependencies are being dropped." 793249dc963fSmrg droppeddeps=yes 79337aa89044Smrg ;; 79347aa89044Smrg esac 793549dc963fSmrg ;; 793649dc963fSmrg esac 793749dc963fSmrg versuffix=$versuffix_save 793849dc963fSmrg major=$major_save 793949dc963fSmrg release=$release_save 794049dc963fSmrg libname=$libname_save 794149dc963fSmrg name=$name_save 794249dc963fSmrg 794349dc963fSmrg case $host in 794449dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 794549dc963fSmrg # On Rhapsody replace the C library with the System framework 79467aa89044Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 794749dc963fSmrg ;; 794849dc963fSmrg esac 794949dc963fSmrg 795049dc963fSmrg if test "$droppeddeps" = yes; then 795149dc963fSmrg if test "$module" = yes; then 79527aa89044Smrg echo 79537aa89044Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 795449dc963fSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 79557aa89044Smrg echo "*** a static module, that should work as long as the dlopening" 79567aa89044Smrg echo "*** application is linked with the -dlopen flag." 795749dc963fSmrg if test -z "$global_symbol_pipe"; then 79587aa89044Smrg echo 79597aa89044Smrg echo "*** However, this would only work if libtool was able to extract symbol" 79607aa89044Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 79617aa89044Smrg echo "*** not find such a program. So, this module is probably useless." 79627aa89044Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 796349dc963fSmrg fi 796449dc963fSmrg if test "$build_old_libs" = no; then 796549dc963fSmrg oldlibs="$output_objdir/$libname.$libext" 796649dc963fSmrg build_libtool_libs=module 796749dc963fSmrg build_old_libs=yes 796849dc963fSmrg else 796949dc963fSmrg build_libtool_libs=no 797049dc963fSmrg fi 797149dc963fSmrg else 79727aa89044Smrg echo "*** The inter-library dependencies that have been dropped here will be" 79737aa89044Smrg echo "*** automatically added whenever a program is linked with this library" 79747aa89044Smrg echo "*** or is declared to -dlopen it." 797549dc963fSmrg 797649dc963fSmrg if test "$allow_undefined" = no; then 79777aa89044Smrg echo 79787aa89044Smrg echo "*** Since this library must not contain undefined symbols," 79797aa89044Smrg echo "*** because either the platform does not support them or" 79807aa89044Smrg echo "*** it was explicitly requested with -no-undefined," 79817aa89044Smrg echo "*** libtool will only create a static version of it." 798249dc963fSmrg if test "$build_old_libs" = no; then 798349dc963fSmrg oldlibs="$output_objdir/$libname.$libext" 798449dc963fSmrg build_libtool_libs=module 798549dc963fSmrg build_old_libs=yes 798649dc963fSmrg else 798749dc963fSmrg build_libtool_libs=no 798849dc963fSmrg fi 798949dc963fSmrg fi 799049dc963fSmrg fi 799149dc963fSmrg fi 799249dc963fSmrg # Done checking deplibs! 799349dc963fSmrg deplibs=$newdeplibs 799449dc963fSmrg fi 799549dc963fSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 799649dc963fSmrg case $host in 799749dc963fSmrg *-*-darwin*) 79987aa89044Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 79997aa89044Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 80007aa89044Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 800149dc963fSmrg ;; 800249dc963fSmrg esac 800349dc963fSmrg 800449dc963fSmrg # move library search paths that coincide with paths to not yet 800549dc963fSmrg # installed libraries to the beginning of the library search list 800649dc963fSmrg new_libs= 800749dc963fSmrg for path in $notinst_path; do 800849dc963fSmrg case " $new_libs " in 800949dc963fSmrg *" -L$path/$objdir "*) ;; 801049dc963fSmrg *) 801149dc963fSmrg case " $deplibs " in 801249dc963fSmrg *" -L$path/$objdir "*) 80134e7590efSmrg func_append new_libs " -L$path/$objdir" ;; 801449dc963fSmrg esac 801549dc963fSmrg ;; 801649dc963fSmrg esac 801749dc963fSmrg done 801849dc963fSmrg for deplib in $deplibs; do 801949dc963fSmrg case $deplib in 802049dc963fSmrg -L*) 802149dc963fSmrg case " $new_libs " in 802249dc963fSmrg *" $deplib "*) ;; 80234e7590efSmrg *) func_append new_libs " $deplib" ;; 802449dc963fSmrg esac 802549dc963fSmrg ;; 80264e7590efSmrg *) func_append new_libs " $deplib" ;; 802749dc963fSmrg esac 802849dc963fSmrg done 802949dc963fSmrg deplibs="$new_libs" 803049dc963fSmrg 803149dc963fSmrg # All the library-specific variables (install_libdir is set above). 803249dc963fSmrg library_names= 803349dc963fSmrg old_library= 803449dc963fSmrg dlname= 803549dc963fSmrg 803649dc963fSmrg # Test again, we may have decided not to build it any more 803749dc963fSmrg if test "$build_libtool_libs" = yes; then 80384e7590efSmrg # Remove ${wl} instances when linking with ld. 80394e7590efSmrg # FIXME: should test the right _cmds variable. 80404e7590efSmrg case $archive_cmds in 80414e7590efSmrg *\$LD\ *) wl= ;; 80424e7590efSmrg esac 804349dc963fSmrg if test "$hardcode_into_libs" = yes; then 804449dc963fSmrg # Hardcode the library paths 804549dc963fSmrg hardcode_libdirs= 804649dc963fSmrg dep_rpath= 804749dc963fSmrg rpath="$finalize_rpath" 80484e7590efSmrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 804949dc963fSmrg for libdir in $rpath; do 805049dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 805149dc963fSmrg if test -n "$hardcode_libdir_separator"; then 80524e7590efSmrg func_replace_sysroot "$libdir" 80534e7590efSmrg libdir=$func_replace_sysroot_result 805449dc963fSmrg if test -z "$hardcode_libdirs"; then 805549dc963fSmrg hardcode_libdirs="$libdir" 805649dc963fSmrg else 805749dc963fSmrg # Just accumulate the unique libdirs. 805849dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 805949dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 806049dc963fSmrg ;; 806149dc963fSmrg *) 80624e7590efSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 806349dc963fSmrg ;; 806449dc963fSmrg esac 806549dc963fSmrg fi 806649dc963fSmrg else 806749dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 80684e7590efSmrg func_append dep_rpath " $flag" 806949dc963fSmrg fi 807049dc963fSmrg elif test -n "$runpath_var"; then 807149dc963fSmrg case "$perm_rpath " in 807249dc963fSmrg *" $libdir "*) ;; 80734e7590efSmrg *) func_append perm_rpath " $libdir" ;; 807449dc963fSmrg esac 807549dc963fSmrg fi 807649dc963fSmrg done 807749dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 807849dc963fSmrg if test -n "$hardcode_libdir_separator" && 807949dc963fSmrg test -n "$hardcode_libdirs"; then 808049dc963fSmrg libdir="$hardcode_libdirs" 80814e7590efSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 808249dc963fSmrg fi 808349dc963fSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 808449dc963fSmrg # We should set the runpath_var. 808549dc963fSmrg rpath= 808649dc963fSmrg for dir in $perm_rpath; do 80874e7590efSmrg func_append rpath "$dir:" 808849dc963fSmrg done 808949dc963fSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 809049dc963fSmrg fi 809149dc963fSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 809249dc963fSmrg fi 80934b0ead49Smrg 809449dc963fSmrg shlibpath="$finalize_shlibpath" 80954e7590efSmrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 809649dc963fSmrg if test -n "$shlibpath"; then 809749dc963fSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 809849dc963fSmrg fi 80994b0ead49Smrg 810049dc963fSmrg # Get the real and link names of the library. 810149dc963fSmrg eval shared_ext=\"$shrext_cmds\" 810249dc963fSmrg eval library_names=\"$library_names_spec\" 810349dc963fSmrg set dummy $library_names 810449dc963fSmrg shift 810549dc963fSmrg realname="$1" 810649dc963fSmrg shift 81074b0ead49Smrg 810849dc963fSmrg if test -n "$soname_spec"; then 810949dc963fSmrg eval soname=\"$soname_spec\" 811049dc963fSmrg else 811149dc963fSmrg soname="$realname" 811249dc963fSmrg fi 811349dc963fSmrg if test -z "$dlname"; then 811449dc963fSmrg dlname=$soname 811549dc963fSmrg fi 81164b0ead49Smrg 811749dc963fSmrg lib="$output_objdir/$realname" 811849dc963fSmrg linknames= 811949dc963fSmrg for link 812049dc963fSmrg do 81214e7590efSmrg func_append linknames " $link" 812249dc963fSmrg done 81234b0ead49Smrg 812449dc963fSmrg # Use standard objects if they are pic 81257aa89044Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 812649dc963fSmrg test "X$libobjs" = "X " && libobjs= 81274b0ead49Smrg 812849dc963fSmrg delfiles= 812949dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 813049dc963fSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 813149dc963fSmrg export_symbols="$output_objdir/$libname.uexp" 81324e7590efSmrg func_append delfiles " $export_symbols" 813349dc963fSmrg fi 81344b0ead49Smrg 813549dc963fSmrg orig_export_symbols= 813649dc963fSmrg case $host_os in 813749dc963fSmrg cygwin* | mingw* | cegcc*) 813849dc963fSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 813949dc963fSmrg # exporting using user supplied symfile 814049dc963fSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 814149dc963fSmrg # and it's NOT already a .def file. Must figure out 814249dc963fSmrg # which of the given symbols are data symbols and tag 814349dc963fSmrg # them as such. So, trigger use of export_symbols_cmds. 814449dc963fSmrg # export_symbols gets reassigned inside the "prepare 814549dc963fSmrg # the list of exported symbols" if statement, so the 814649dc963fSmrg # include_expsyms logic still works. 814749dc963fSmrg orig_export_symbols="$export_symbols" 814849dc963fSmrg export_symbols= 814949dc963fSmrg always_export_symbols=yes 815049dc963fSmrg fi 815149dc963fSmrg fi 815249dc963fSmrg ;; 815349dc963fSmrg esac 81544b0ead49Smrg 815549dc963fSmrg # Prepare the list of exported symbols 815649dc963fSmrg if test -z "$export_symbols"; then 815749dc963fSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 815849dc963fSmrg func_verbose "generating symbol list for \`$libname.la'" 815949dc963fSmrg export_symbols="$output_objdir/$libname.exp" 816049dc963fSmrg $opt_dry_run || $RM $export_symbols 816149dc963fSmrg cmds=$export_symbols_cmds 816249dc963fSmrg save_ifs="$IFS"; IFS='~' 81634e7590efSmrg for cmd1 in $cmds; do 816449dc963fSmrg IFS="$save_ifs" 81654e7590efSmrg # Take the normal branch if the nm_file_list_spec branch 81664e7590efSmrg # doesn't work or if tool conversion is not needed. 81674e7590efSmrg case $nm_file_list_spec~$to_tool_file_cmd in 81684e7590efSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 81694e7590efSmrg try_normal_branch=yes 81704e7590efSmrg eval cmd=\"$cmd1\" 81714e7590efSmrg func_len " $cmd" 81724e7590efSmrg len=$func_len_result 81734e7590efSmrg ;; 81744e7590efSmrg *) 81754e7590efSmrg try_normal_branch=no 81764e7590efSmrg ;; 81774e7590efSmrg esac 81784e7590efSmrg if test "$try_normal_branch" = yes \ 81794e7590efSmrg && { test "$len" -lt "$max_cmd_len" \ 81804e7590efSmrg || test "$max_cmd_len" -le -1; } 81814e7590efSmrg then 81824e7590efSmrg func_show_eval "$cmd" 'exit $?' 81834e7590efSmrg skipped_export=false 81844e7590efSmrg elif test -n "$nm_file_list_spec"; then 81854e7590efSmrg func_basename "$output" 81864e7590efSmrg output_la=$func_basename_result 81874e7590efSmrg save_libobjs=$libobjs 81884e7590efSmrg save_output=$output 81894e7590efSmrg output=${output_objdir}/${output_la}.nm 81904e7590efSmrg func_to_tool_file "$output" 81914e7590efSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 81924e7590efSmrg func_append delfiles " $output" 81934e7590efSmrg func_verbose "creating $NM input file list: $output" 81944e7590efSmrg for obj in $save_libobjs; do 81954e7590efSmrg func_to_tool_file "$obj" 81964e7590efSmrg $ECHO "$func_to_tool_file_result" 81974e7590efSmrg done > "$output" 81984e7590efSmrg eval cmd=\"$cmd1\" 819949dc963fSmrg func_show_eval "$cmd" 'exit $?' 82004e7590efSmrg output=$save_output 82014e7590efSmrg libobjs=$save_libobjs 820249dc963fSmrg skipped_export=false 820349dc963fSmrg else 820449dc963fSmrg # The command line is too long to execute in one step. 820549dc963fSmrg func_verbose "using reloadable object file for export list..." 820649dc963fSmrg skipped_export=: 820749dc963fSmrg # Break out early, otherwise skipped_export may be 820849dc963fSmrg # set to false by a later but shorter cmd. 820949dc963fSmrg break 821049dc963fSmrg fi 821149dc963fSmrg done 821249dc963fSmrg IFS="$save_ifs" 821349dc963fSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 821449dc963fSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 821549dc963fSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 821649dc963fSmrg fi 821749dc963fSmrg fi 82184b0ead49Smrg fi 82194b0ead49Smrg 822049dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 822149dc963fSmrg tmp_export_symbols="$export_symbols" 822249dc963fSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 82237aa89044Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 822449dc963fSmrg fi 82254b0ead49Smrg 822649dc963fSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 822749dc963fSmrg # The given exports_symbols file has to be filtered, so filter it. 822849dc963fSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 822949dc963fSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 823049dc963fSmrg # 's' commands which not all seds can handle. GNU sed should be fine 823149dc963fSmrg # though. Also, the filter scales superlinearly with the number of 823249dc963fSmrg # global variables. join(1) would be nice here, but unfortunately 823349dc963fSmrg # isn't a blessed tool. 823449dc963fSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 82354e7590efSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 823649dc963fSmrg export_symbols=$output_objdir/$libname.def 823749dc963fSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 823849dc963fSmrg fi 82394b0ead49Smrg 824049dc963fSmrg tmp_deplibs= 824149dc963fSmrg for test_deplib in $deplibs; do 824249dc963fSmrg case " $convenience " in 824349dc963fSmrg *" $test_deplib "*) ;; 824449dc963fSmrg *) 82454e7590efSmrg func_append tmp_deplibs " $test_deplib" 824649dc963fSmrg ;; 824749dc963fSmrg esac 824849dc963fSmrg done 824949dc963fSmrg deplibs="$tmp_deplibs" 82504b0ead49Smrg 825149dc963fSmrg if test -n "$convenience"; then 825249dc963fSmrg if test -n "$whole_archive_flag_spec" && 825349dc963fSmrg test "$compiler_needs_object" = yes && 825449dc963fSmrg test -z "$libobjs"; then 825549dc963fSmrg # extract the archives, so we have objects to list. 825649dc963fSmrg # TODO: could optimize this to just extract one archive. 825749dc963fSmrg whole_archive_flag_spec= 825849dc963fSmrg fi 825949dc963fSmrg if test -n "$whole_archive_flag_spec"; then 826049dc963fSmrg save_libobjs=$libobjs 826149dc963fSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 826249dc963fSmrg test "X$libobjs" = "X " && libobjs= 826349dc963fSmrg else 826449dc963fSmrg gentop="$output_objdir/${outputname}x" 82654e7590efSmrg func_append generated " $gentop" 82664b0ead49Smrg 826749dc963fSmrg func_extract_archives $gentop $convenience 82684e7590efSmrg func_append libobjs " $func_extract_archives_result" 826949dc963fSmrg test "X$libobjs" = "X " && libobjs= 827049dc963fSmrg fi 82714b0ead49Smrg fi 82724b0ead49Smrg 827349dc963fSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 827449dc963fSmrg eval flag=\"$thread_safe_flag_spec\" 82754e7590efSmrg func_append linker_flags " $flag" 82764b0ead49Smrg fi 82774b0ead49Smrg 827849dc963fSmrg # Make a backup of the uninstalled library when relinking 82794e7590efSmrg if test "$opt_mode" = relink; then 828049dc963fSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 828149dc963fSmrg fi 82824b0ead49Smrg 828349dc963fSmrg # Do each of the archive commands. 828449dc963fSmrg if test "$module" = yes && test -n "$module_cmds" ; then 828549dc963fSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 828649dc963fSmrg eval test_cmds=\"$module_expsym_cmds\" 828749dc963fSmrg cmds=$module_expsym_cmds 828849dc963fSmrg else 828949dc963fSmrg eval test_cmds=\"$module_cmds\" 829049dc963fSmrg cmds=$module_cmds 829149dc963fSmrg fi 82924b0ead49Smrg else 829349dc963fSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 829449dc963fSmrg eval test_cmds=\"$archive_expsym_cmds\" 829549dc963fSmrg cmds=$archive_expsym_cmds 829649dc963fSmrg else 829749dc963fSmrg eval test_cmds=\"$archive_cmds\" 829849dc963fSmrg cmds=$archive_cmds 829949dc963fSmrg fi 83004b0ead49Smrg fi 83014b0ead49Smrg 830249dc963fSmrg if test "X$skipped_export" != "X:" && 830349dc963fSmrg func_len " $test_cmds" && 830449dc963fSmrg len=$func_len_result && 830549dc963fSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 830649dc963fSmrg : 830749dc963fSmrg else 830849dc963fSmrg # The command line is too long to link in one step, link piecewise 830949dc963fSmrg # or, if using GNU ld and skipped_export is not :, use a linker 831049dc963fSmrg # script. 83114b0ead49Smrg 831249dc963fSmrg # Save the value of $output and $libobjs because we want to 831349dc963fSmrg # use them later. If we have whole_archive_flag_spec, we 831449dc963fSmrg # want to use save_libobjs as it was before 831549dc963fSmrg # whole_archive_flag_spec was expanded, because we can't 831649dc963fSmrg # assume the linker understands whole_archive_flag_spec. 831749dc963fSmrg # This may have to be revisited, in case too many 831849dc963fSmrg # convenience libraries get linked in and end up exceeding 831949dc963fSmrg # the spec. 832049dc963fSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 832149dc963fSmrg save_libobjs=$libobjs 832249dc963fSmrg fi 832349dc963fSmrg save_output=$output 83247aa89044Smrg func_basename "$output" 83257aa89044Smrg output_la=$func_basename_result 83264b0ead49Smrg 832749dc963fSmrg # Clear the reloadable object creation command queue and 832849dc963fSmrg # initialize k to one. 832949dc963fSmrg test_cmds= 833049dc963fSmrg concat_cmds= 833149dc963fSmrg objlist= 833249dc963fSmrg last_robj= 833349dc963fSmrg k=1 833449dc963fSmrg 833549dc963fSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 833649dc963fSmrg output=${output_objdir}/${output_la}.lnkscript 833749dc963fSmrg func_verbose "creating GNU ld script: $output" 83387aa89044Smrg echo 'INPUT (' > $output 833949dc963fSmrg for obj in $save_libobjs 83404b0ead49Smrg do 83414e7590efSmrg func_to_tool_file "$obj" 83424e7590efSmrg $ECHO "$func_to_tool_file_result" >> $output 834349dc963fSmrg done 83447aa89044Smrg echo ')' >> $output 83454e7590efSmrg func_append delfiles " $output" 83464e7590efSmrg func_to_tool_file "$output" 83474e7590efSmrg output=$func_to_tool_file_result 834849dc963fSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 834949dc963fSmrg output=${output_objdir}/${output_la}.lnk 835049dc963fSmrg func_verbose "creating linker input file list: $output" 835149dc963fSmrg : > $output 835249dc963fSmrg set x $save_libobjs 835349dc963fSmrg shift 835449dc963fSmrg firstobj= 835549dc963fSmrg if test "$compiler_needs_object" = yes; then 835649dc963fSmrg firstobj="$1 " 835749dc963fSmrg shift 835849dc963fSmrg fi 835949dc963fSmrg for obj 836049dc963fSmrg do 83614e7590efSmrg func_to_tool_file "$obj" 83624e7590efSmrg $ECHO "$func_to_tool_file_result" >> $output 836349dc963fSmrg done 83644e7590efSmrg func_append delfiles " $output" 83654e7590efSmrg func_to_tool_file "$output" 83664e7590efSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 836749dc963fSmrg else 836849dc963fSmrg if test -n "$save_libobjs"; then 836949dc963fSmrg func_verbose "creating reloadable object files..." 837049dc963fSmrg output=$output_objdir/$output_la-${k}.$objext 837149dc963fSmrg eval test_cmds=\"$reload_cmds\" 837249dc963fSmrg func_len " $test_cmds" 837349dc963fSmrg len0=$func_len_result 837449dc963fSmrg len=$len0 837549dc963fSmrg 837649dc963fSmrg # Loop over the list of objects to be linked. 837749dc963fSmrg for obj in $save_libobjs 837849dc963fSmrg do 837949dc963fSmrg func_len " $obj" 838049dc963fSmrg func_arith $len + $func_len_result 838149dc963fSmrg len=$func_arith_result 838249dc963fSmrg if test "X$objlist" = X || 838349dc963fSmrg test "$len" -lt "$max_cmd_len"; then 838449dc963fSmrg func_append objlist " $obj" 838549dc963fSmrg else 838649dc963fSmrg # The command $test_cmds is almost too long, add a 838749dc963fSmrg # command to the queue. 838849dc963fSmrg if test "$k" -eq 1 ; then 838949dc963fSmrg # The first file doesn't have a previous command to add. 83907aa89044Smrg reload_objs=$objlist 83917aa89044Smrg eval concat_cmds=\"$reload_cmds\" 839249dc963fSmrg else 839349dc963fSmrg # All subsequent reloadable object files will link in 839449dc963fSmrg # the last one created. 83957aa89044Smrg reload_objs="$objlist $last_robj" 83967aa89044Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 839749dc963fSmrg fi 839849dc963fSmrg last_robj=$output_objdir/$output_la-${k}.$objext 839949dc963fSmrg func_arith $k + 1 840049dc963fSmrg k=$func_arith_result 840149dc963fSmrg output=$output_objdir/$output_la-${k}.$objext 84027aa89044Smrg objlist=" $obj" 840349dc963fSmrg func_len " $last_robj" 840449dc963fSmrg func_arith $len0 + $func_len_result 840549dc963fSmrg len=$func_arith_result 840649dc963fSmrg fi 840749dc963fSmrg done 840849dc963fSmrg # Handle the remaining objects by creating one last 840949dc963fSmrg # reloadable object file. All subsequent reloadable object 841049dc963fSmrg # files will link in the last one created. 841149dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 84127aa89044Smrg reload_objs="$objlist $last_robj" 84137aa89044Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 841449dc963fSmrg if test -n "$last_robj"; then 841549dc963fSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 841649dc963fSmrg fi 84174e7590efSmrg func_append delfiles " $output" 84184b0ead49Smrg 841949dc963fSmrg else 842049dc963fSmrg output= 842149dc963fSmrg fi 84224b0ead49Smrg 842349dc963fSmrg if ${skipped_export-false}; then 842449dc963fSmrg func_verbose "generating symbol list for \`$libname.la'" 842549dc963fSmrg export_symbols="$output_objdir/$libname.exp" 842649dc963fSmrg $opt_dry_run || $RM $export_symbols 842749dc963fSmrg libobjs=$output 842849dc963fSmrg # Append the command to create the export file. 842949dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 843049dc963fSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 843149dc963fSmrg if test -n "$last_robj"; then 843249dc963fSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 843349dc963fSmrg fi 84344b0ead49Smrg fi 84354b0ead49Smrg 843649dc963fSmrg test -n "$save_libobjs" && 843749dc963fSmrg func_verbose "creating a temporary reloadable object file: $output" 84384b0ead49Smrg 843949dc963fSmrg # Loop through the commands generated above and execute them. 844049dc963fSmrg save_ifs="$IFS"; IFS='~' 844149dc963fSmrg for cmd in $concat_cmds; do 844249dc963fSmrg IFS="$save_ifs" 844349dc963fSmrg $opt_silent || { 844449dc963fSmrg func_quote_for_expand "$cmd" 844549dc963fSmrg eval "func_echo $func_quote_for_expand_result" 844649dc963fSmrg } 844749dc963fSmrg $opt_dry_run || eval "$cmd" || { 844849dc963fSmrg lt_exit=$? 844949dc963fSmrg 845049dc963fSmrg # Restore the uninstalled library and exit 84514e7590efSmrg if test "$opt_mode" = relink; then 845249dc963fSmrg ( cd "$output_objdir" && \ 845349dc963fSmrg $RM "${realname}T" && \ 845449dc963fSmrg $MV "${realname}U" "$realname" ) 845549dc963fSmrg fi 84564b0ead49Smrg 845749dc963fSmrg exit $lt_exit 845849dc963fSmrg } 845949dc963fSmrg done 846049dc963fSmrg IFS="$save_ifs" 84614b0ead49Smrg 846249dc963fSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 846349dc963fSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 846449dc963fSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 84654b0ead49Smrg fi 84664b0ead49Smrg fi 84674b0ead49Smrg 846849dc963fSmrg if ${skipped_export-false}; then 846949dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 847049dc963fSmrg tmp_export_symbols="$export_symbols" 847149dc963fSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 84727aa89044Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 847349dc963fSmrg fi 84744b0ead49Smrg 847549dc963fSmrg if test -n "$orig_export_symbols"; then 847649dc963fSmrg # The given exports_symbols file has to be filtered, so filter it. 847749dc963fSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 847849dc963fSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 847949dc963fSmrg # 's' commands which not all seds can handle. GNU sed should be fine 848049dc963fSmrg # though. Also, the filter scales superlinearly with the number of 848149dc963fSmrg # global variables. join(1) would be nice here, but unfortunately 848249dc963fSmrg # isn't a blessed tool. 848349dc963fSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 84844e7590efSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 848549dc963fSmrg export_symbols=$output_objdir/$libname.def 848649dc963fSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 848749dc963fSmrg fi 848849dc963fSmrg fi 84894b0ead49Smrg 849049dc963fSmrg libobjs=$output 849149dc963fSmrg # Restore the value of output. 849249dc963fSmrg output=$save_output 84934b0ead49Smrg 849449dc963fSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 849549dc963fSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 849649dc963fSmrg test "X$libobjs" = "X " && libobjs= 849749dc963fSmrg fi 849849dc963fSmrg # Expand the library linking commands again to reset the 849949dc963fSmrg # value of $libobjs for piecewise linking. 85004b0ead49Smrg 850149dc963fSmrg # Do each of the archive commands. 850249dc963fSmrg if test "$module" = yes && test -n "$module_cmds" ; then 850349dc963fSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 850449dc963fSmrg cmds=$module_expsym_cmds 850549dc963fSmrg else 850649dc963fSmrg cmds=$module_cmds 85074b0ead49Smrg fi 85084b0ead49Smrg else 850949dc963fSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 851049dc963fSmrg cmds=$archive_expsym_cmds 851149dc963fSmrg else 851249dc963fSmrg cmds=$archive_cmds 851349dc963fSmrg fi 85144b0ead49Smrg fi 851549dc963fSmrg fi 85164b0ead49Smrg 851749dc963fSmrg if test -n "$delfiles"; then 851849dc963fSmrg # Append the command to remove temporary files to $cmds. 851949dc963fSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 852049dc963fSmrg fi 85214b0ead49Smrg 852249dc963fSmrg # Add any objects from preloaded convenience libraries 852349dc963fSmrg if test -n "$dlprefiles"; then 852449dc963fSmrg gentop="$output_objdir/${outputname}x" 85254e7590efSmrg func_append generated " $gentop" 85264b0ead49Smrg 852749dc963fSmrg func_extract_archives $gentop $dlprefiles 85284e7590efSmrg func_append libobjs " $func_extract_archives_result" 852949dc963fSmrg test "X$libobjs" = "X " && libobjs= 853049dc963fSmrg fi 85314b0ead49Smrg 853249dc963fSmrg save_ifs="$IFS"; IFS='~' 853349dc963fSmrg for cmd in $cmds; do 853449dc963fSmrg IFS="$save_ifs" 853549dc963fSmrg eval cmd=\"$cmd\" 853649dc963fSmrg $opt_silent || { 853749dc963fSmrg func_quote_for_expand "$cmd" 853849dc963fSmrg eval "func_echo $func_quote_for_expand_result" 853949dc963fSmrg } 854049dc963fSmrg $opt_dry_run || eval "$cmd" || { 854149dc963fSmrg lt_exit=$? 85424b0ead49Smrg 854349dc963fSmrg # Restore the uninstalled library and exit 85444e7590efSmrg if test "$opt_mode" = relink; then 854549dc963fSmrg ( cd "$output_objdir" && \ 854649dc963fSmrg $RM "${realname}T" && \ 854749dc963fSmrg $MV "${realname}U" "$realname" ) 854849dc963fSmrg fi 85494b0ead49Smrg 855049dc963fSmrg exit $lt_exit 855149dc963fSmrg } 855249dc963fSmrg done 855349dc963fSmrg IFS="$save_ifs" 85544b0ead49Smrg 855549dc963fSmrg # Restore the uninstalled library and exit 85564e7590efSmrg if test "$opt_mode" = relink; then 855749dc963fSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 85584b0ead49Smrg 855949dc963fSmrg if test -n "$convenience"; then 856049dc963fSmrg if test -z "$whole_archive_flag_spec"; then 856149dc963fSmrg func_show_eval '${RM}r "$gentop"' 856249dc963fSmrg fi 856349dc963fSmrg fi 85644b0ead49Smrg 856549dc963fSmrg exit $EXIT_SUCCESS 856649dc963fSmrg fi 856749dc963fSmrg 856849dc963fSmrg # Create links to the real library. 856949dc963fSmrg for linkname in $linknames; do 857049dc963fSmrg if test "$realname" != "$linkname"; then 857149dc963fSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 85724b0ead49Smrg fi 85734b0ead49Smrg done 85744b0ead49Smrg 857549dc963fSmrg # If -module or -export-dynamic was specified, set the dlname. 857649dc963fSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 857749dc963fSmrg # On all known operating systems, these are identical. 857849dc963fSmrg dlname="$soname" 857949dc963fSmrg fi 858049dc963fSmrg fi 85814b0ead49Smrg ;; 85824b0ead49Smrg 858349dc963fSmrg obj) 858449dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 858549dc963fSmrg func_warning "\`-dlopen' is ignored for objects" 858649dc963fSmrg fi 85874b0ead49Smrg 858849dc963fSmrg case " $deplibs" in 858949dc963fSmrg *\ -l* | *\ -L*) 859049dc963fSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 85914b0ead49Smrg esac 85924b0ead49Smrg 859349dc963fSmrg test -n "$rpath" && \ 859449dc963fSmrg func_warning "\`-rpath' is ignored for objects" 859549dc963fSmrg 859649dc963fSmrg test -n "$xrpath" && \ 859749dc963fSmrg func_warning "\`-R' is ignored for objects" 85984b0ead49Smrg 859949dc963fSmrg test -n "$vinfo" && \ 860049dc963fSmrg func_warning "\`-version-info' is ignored for objects" 86014b0ead49Smrg 860249dc963fSmrg test -n "$release" && \ 860349dc963fSmrg func_warning "\`-release' is ignored for objects" 860449dc963fSmrg 860549dc963fSmrg case $output in 860649dc963fSmrg *.lo) 860749dc963fSmrg test -n "$objs$old_deplibs" && \ 860849dc963fSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 860949dc963fSmrg 861049dc963fSmrg libobj=$output 861149dc963fSmrg func_lo2o "$libobj" 861249dc963fSmrg obj=$func_lo2o_result 86134b0ead49Smrg ;; 86144b0ead49Smrg *) 861549dc963fSmrg libobj= 861649dc963fSmrg obj="$output" 86174b0ead49Smrg ;; 86184b0ead49Smrg esac 86194b0ead49Smrg 862049dc963fSmrg # Delete the old objects. 862149dc963fSmrg $opt_dry_run || $RM $obj $libobj 86224b0ead49Smrg 862349dc963fSmrg # Objects from convenience libraries. This assumes 862449dc963fSmrg # single-version convenience libraries. Whenever we create 862549dc963fSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 862649dc963fSmrg # the extraction. 862749dc963fSmrg reload_conv_objs= 862849dc963fSmrg gentop= 862949dc963fSmrg # reload_cmds runs $LD directly, so let us get rid of 863049dc963fSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 863149dc963fSmrg # turning comma into space.. 863249dc963fSmrg wl= 86334b0ead49Smrg 863449dc963fSmrg if test -n "$convenience"; then 863549dc963fSmrg if test -n "$whole_archive_flag_spec"; then 863649dc963fSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 86377aa89044Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 863849dc963fSmrg else 863949dc963fSmrg gentop="$output_objdir/${obj}x" 86404e7590efSmrg func_append generated " $gentop" 86414b0ead49Smrg 864249dc963fSmrg func_extract_archives $gentop $convenience 864349dc963fSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 864449dc963fSmrg fi 86454b0ead49Smrg fi 86464b0ead49Smrg 86474e7590efSmrg # If we're not building shared, we need to use non_pic_objs 86484e7590efSmrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 86494e7590efSmrg 865049dc963fSmrg # Create the old-style object. 86517aa89044Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 86524b0ead49Smrg 865349dc963fSmrg output="$obj" 865449dc963fSmrg func_execute_cmds "$reload_cmds" 'exit $?' 86554b0ead49Smrg 865649dc963fSmrg # Exit if we aren't doing a library object file. 865749dc963fSmrg if test -z "$libobj"; then 865849dc963fSmrg if test -n "$gentop"; then 865949dc963fSmrg func_show_eval '${RM}r "$gentop"' 866049dc963fSmrg fi 866149dc963fSmrg 866249dc963fSmrg exit $EXIT_SUCCESS 86634b0ead49Smrg fi 866449dc963fSmrg 866549dc963fSmrg if test "$build_libtool_libs" != yes; then 866649dc963fSmrg if test -n "$gentop"; then 866749dc963fSmrg func_show_eval '${RM}r "$gentop"' 866849dc963fSmrg fi 866949dc963fSmrg 867049dc963fSmrg # Create an invalid libtool object if no PIC, so that we don't 867149dc963fSmrg # accidentally link it into a program. 867249dc963fSmrg # $show "echo timestamp > $libobj" 867349dc963fSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 867449dc963fSmrg exit $EXIT_SUCCESS 867549dc963fSmrg fi 867649dc963fSmrg 867749dc963fSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 867849dc963fSmrg # Only do commands if we really have different PIC objects. 867949dc963fSmrg reload_objs="$libobjs $reload_conv_objs" 868049dc963fSmrg output="$libobj" 868149dc963fSmrg func_execute_cmds "$reload_cmds" 'exit $?' 868249dc963fSmrg fi 868349dc963fSmrg 868449dc963fSmrg if test -n "$gentop"; then 868549dc963fSmrg func_show_eval '${RM}r "$gentop"' 868649dc963fSmrg fi 868749dc963fSmrg 868849dc963fSmrg exit $EXIT_SUCCESS 86894b0ead49Smrg ;; 86904b0ead49Smrg 869149dc963fSmrg prog) 869249dc963fSmrg case $host in 869349dc963fSmrg *cygwin*) func_stripname '' '.exe' "$output" 869449dc963fSmrg output=$func_stripname_result.exe;; 869549dc963fSmrg esac 869649dc963fSmrg test -n "$vinfo" && \ 869749dc963fSmrg func_warning "\`-version-info' is ignored for programs" 86984b0ead49Smrg 869949dc963fSmrg test -n "$release" && \ 870049dc963fSmrg func_warning "\`-release' is ignored for programs" 87014b0ead49Smrg 870249dc963fSmrg test "$preload" = yes \ 870349dc963fSmrg && test "$dlopen_support" = unknown \ 870449dc963fSmrg && test "$dlopen_self" = unknown \ 870549dc963fSmrg && test "$dlopen_self_static" = unknown && \ 870649dc963fSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 870749dc963fSmrg 870849dc963fSmrg case $host in 870949dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 871049dc963fSmrg # On Rhapsody replace the C library is the System framework 87117aa89044Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 87127aa89044Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 87134b0ead49Smrg ;; 871449dc963fSmrg esac 87154b0ead49Smrg 871649dc963fSmrg case $host in 871749dc963fSmrg *-*-darwin*) 871849dc963fSmrg # Don't allow lazy linking, it breaks C++ global constructors 871949dc963fSmrg # But is supposedly fixed on 10.4 or later (yay!). 872049dc963fSmrg if test "$tagname" = CXX ; then 872149dc963fSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 872249dc963fSmrg 10.[0123]) 87234e7590efSmrg func_append compile_command " ${wl}-bind_at_load" 87244e7590efSmrg func_append finalize_command " ${wl}-bind_at_load" 872549dc963fSmrg ;; 872649dc963fSmrg esac 87274b0ead49Smrg fi 872849dc963fSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 87297aa89044Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87307aa89044Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 873149dc963fSmrg ;; 873249dc963fSmrg esac 87334b0ead49Smrg 87344b0ead49Smrg 873549dc963fSmrg # move library search paths that coincide with paths to not yet 873649dc963fSmrg # installed libraries to the beginning of the library search list 873749dc963fSmrg new_libs= 873849dc963fSmrg for path in $notinst_path; do 873949dc963fSmrg case " $new_libs " in 874049dc963fSmrg *" -L$path/$objdir "*) ;; 874149dc963fSmrg *) 874249dc963fSmrg case " $compile_deplibs " in 874349dc963fSmrg *" -L$path/$objdir "*) 87444e7590efSmrg func_append new_libs " -L$path/$objdir" ;; 87454b0ead49Smrg esac 874649dc963fSmrg ;; 874749dc963fSmrg esac 874849dc963fSmrg done 874949dc963fSmrg for deplib in $compile_deplibs; do 875049dc963fSmrg case $deplib in 875149dc963fSmrg -L*) 875249dc963fSmrg case " $new_libs " in 875349dc963fSmrg *" $deplib "*) ;; 87544e7590efSmrg *) func_append new_libs " $deplib" ;; 87554b0ead49Smrg esac 875649dc963fSmrg ;; 87574e7590efSmrg *) func_append new_libs " $deplib" ;; 875849dc963fSmrg esac 875949dc963fSmrg done 876049dc963fSmrg compile_deplibs="$new_libs" 87614b0ead49Smrg 87624b0ead49Smrg 87634e7590efSmrg func_append compile_command " $compile_deplibs" 87644e7590efSmrg func_append finalize_command " $finalize_deplibs" 87654b0ead49Smrg 876649dc963fSmrg if test -n "$rpath$xrpath"; then 876749dc963fSmrg # If the user specified any rpath flags, then add them. 876849dc963fSmrg for libdir in $rpath $xrpath; do 876949dc963fSmrg # This is the magic to use -rpath. 877049dc963fSmrg case "$finalize_rpath " in 877149dc963fSmrg *" $libdir "*) ;; 87724e7590efSmrg *) func_append finalize_rpath " $libdir" ;; 877349dc963fSmrg esac 877449dc963fSmrg done 877549dc963fSmrg fi 87764b0ead49Smrg 877749dc963fSmrg # Now hardcode the library paths 877849dc963fSmrg rpath= 877949dc963fSmrg hardcode_libdirs= 878049dc963fSmrg for libdir in $compile_rpath $finalize_rpath; do 878149dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 878249dc963fSmrg if test -n "$hardcode_libdir_separator"; then 878349dc963fSmrg if test -z "$hardcode_libdirs"; then 878449dc963fSmrg hardcode_libdirs="$libdir" 878549dc963fSmrg else 878649dc963fSmrg # Just accumulate the unique libdirs. 878749dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 878849dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 878949dc963fSmrg ;; 879049dc963fSmrg *) 87914e7590efSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 879249dc963fSmrg ;; 879349dc963fSmrg esac 879449dc963fSmrg fi 87954b0ead49Smrg else 879649dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 87974e7590efSmrg func_append rpath " $flag" 87984b0ead49Smrg fi 879949dc963fSmrg elif test -n "$runpath_var"; then 880049dc963fSmrg case "$perm_rpath " in 880149dc963fSmrg *" $libdir "*) ;; 88024e7590efSmrg *) func_append perm_rpath " $libdir" ;; 880349dc963fSmrg esac 880449dc963fSmrg fi 880549dc963fSmrg case $host in 880649dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 880749dc963fSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 880849dc963fSmrg case :$dllsearchpath: in 880949dc963fSmrg *":$libdir:"*) ;; 881049dc963fSmrg ::) dllsearchpath=$libdir;; 88114e7590efSmrg *) func_append dllsearchpath ":$libdir";; 881249dc963fSmrg esac 881349dc963fSmrg case :$dllsearchpath: in 881449dc963fSmrg *":$testbindir:"*) ;; 881549dc963fSmrg ::) dllsearchpath=$testbindir;; 88164e7590efSmrg *) func_append dllsearchpath ":$testbindir";; 881749dc963fSmrg esac 881849dc963fSmrg ;; 881949dc963fSmrg esac 882049dc963fSmrg done 882149dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 882249dc963fSmrg if test -n "$hardcode_libdir_separator" && 882349dc963fSmrg test -n "$hardcode_libdirs"; then 882449dc963fSmrg libdir="$hardcode_libdirs" 882549dc963fSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 882649dc963fSmrg fi 882749dc963fSmrg compile_rpath="$rpath" 88284b0ead49Smrg 882949dc963fSmrg rpath= 883049dc963fSmrg hardcode_libdirs= 883149dc963fSmrg for libdir in $finalize_rpath; do 883249dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 883349dc963fSmrg if test -n "$hardcode_libdir_separator"; then 883449dc963fSmrg if test -z "$hardcode_libdirs"; then 883549dc963fSmrg hardcode_libdirs="$libdir" 883649dc963fSmrg else 883749dc963fSmrg # Just accumulate the unique libdirs. 883849dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 883949dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 884049dc963fSmrg ;; 884149dc963fSmrg *) 88424e7590efSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 884349dc963fSmrg ;; 884449dc963fSmrg esac 884549dc963fSmrg fi 88464b0ead49Smrg else 884749dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 88484e7590efSmrg func_append rpath " $flag" 88494b0ead49Smrg fi 885049dc963fSmrg elif test -n "$runpath_var"; then 885149dc963fSmrg case "$finalize_perm_rpath " in 885249dc963fSmrg *" $libdir "*) ;; 88534e7590efSmrg *) func_append finalize_perm_rpath " $libdir" ;; 885449dc963fSmrg esac 88554b0ead49Smrg fi 885649dc963fSmrg done 885749dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 885849dc963fSmrg if test -n "$hardcode_libdir_separator" && 885949dc963fSmrg test -n "$hardcode_libdirs"; then 886049dc963fSmrg libdir="$hardcode_libdirs" 886149dc963fSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 886249dc963fSmrg fi 886349dc963fSmrg finalize_rpath="$rpath" 88644b0ead49Smrg 886549dc963fSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 886649dc963fSmrg # Transform all the library objects into standard objects. 88677aa89044Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 88687aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 886949dc963fSmrg fi 88704b0ead49Smrg 887149dc963fSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 88724b0ead49Smrg 887349dc963fSmrg # template prelinking step 887449dc963fSmrg if test -n "$prelink_cmds"; then 887549dc963fSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 887649dc963fSmrg fi 88774b0ead49Smrg 887849dc963fSmrg wrappers_required=yes 887949dc963fSmrg case $host in 88807aa89044Smrg *cegcc* | *mingw32ce*) 88817aa89044Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 88827aa89044Smrg wrappers_required=no 88837aa89044Smrg ;; 888449dc963fSmrg *cygwin* | *mingw* ) 888549dc963fSmrg if test "$build_libtool_libs" != yes; then 888649dc963fSmrg wrappers_required=no 888749dc963fSmrg fi 888849dc963fSmrg ;; 888949dc963fSmrg *) 889049dc963fSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 889149dc963fSmrg wrappers_required=no 889249dc963fSmrg fi 889349dc963fSmrg ;; 889449dc963fSmrg esac 889549dc963fSmrg if test "$wrappers_required" = no; then 889649dc963fSmrg # Replace the output file specification. 88977aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 889849dc963fSmrg link_command="$compile_command$compile_rpath" 88994b0ead49Smrg 890049dc963fSmrg # We have no uninstalled library dependencies, so finalize right now. 890149dc963fSmrg exit_status=0 890249dc963fSmrg func_show_eval "$link_command" 'exit_status=$?' 89034b0ead49Smrg 89044e7590efSmrg if test -n "$postlink_cmds"; then 89054e7590efSmrg func_to_tool_file "$output" 89064e7590efSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89074e7590efSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89084e7590efSmrg fi 89094e7590efSmrg 891049dc963fSmrg # Delete the generated files. 891149dc963fSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 891249dc963fSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 89134b0ead49Smrg fi 89144b0ead49Smrg 891549dc963fSmrg exit $exit_status 891649dc963fSmrg fi 89174b0ead49Smrg 891849dc963fSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 891949dc963fSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 892049dc963fSmrg fi 892149dc963fSmrg if test -n "$finalize_shlibpath"; then 892249dc963fSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 892349dc963fSmrg fi 89244b0ead49Smrg 892549dc963fSmrg compile_var= 892649dc963fSmrg finalize_var= 892749dc963fSmrg if test -n "$runpath_var"; then 892849dc963fSmrg if test -n "$perm_rpath"; then 892949dc963fSmrg # We should set the runpath_var. 893049dc963fSmrg rpath= 893149dc963fSmrg for dir in $perm_rpath; do 89324e7590efSmrg func_append rpath "$dir:" 893349dc963fSmrg done 893449dc963fSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 89354b0ead49Smrg fi 893649dc963fSmrg if test -n "$finalize_perm_rpath"; then 893749dc963fSmrg # We should set the runpath_var. 893849dc963fSmrg rpath= 893949dc963fSmrg for dir in $finalize_perm_rpath; do 89404e7590efSmrg func_append rpath "$dir:" 894149dc963fSmrg done 894249dc963fSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 89434b0ead49Smrg fi 894449dc963fSmrg fi 89454b0ead49Smrg 894649dc963fSmrg if test "$no_install" = yes; then 894749dc963fSmrg # We don't need to create a wrapper script. 894849dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 894949dc963fSmrg # Replace the output file specification. 89507aa89044Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 895149dc963fSmrg # Delete the old output file. 895249dc963fSmrg $opt_dry_run || $RM $output 895349dc963fSmrg # Link the executable and exit 895449dc963fSmrg func_show_eval "$link_command" 'exit $?' 89554e7590efSmrg 89564e7590efSmrg if test -n "$postlink_cmds"; then 89574e7590efSmrg func_to_tool_file "$output" 89584e7590efSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89594e7590efSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89604e7590efSmrg fi 89614e7590efSmrg 89624b0ead49Smrg exit $EXIT_SUCCESS 896349dc963fSmrg fi 89644b0ead49Smrg 896549dc963fSmrg if test "$hardcode_action" = relink; then 896649dc963fSmrg # Fast installation is not supported 896749dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 896849dc963fSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 896949dc963fSmrg 897049dc963fSmrg func_warning "this platform does not like uninstalled shared libraries" 897149dc963fSmrg func_warning "\`$output' will be relinked during installation" 897249dc963fSmrg else 897349dc963fSmrg if test "$fast_install" != no; then 897449dc963fSmrg link_command="$finalize_var$compile_command$finalize_rpath" 897549dc963fSmrg if test "$fast_install" = yes; then 89767aa89044Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 897749dc963fSmrg else 897849dc963fSmrg # fast_install is set to needless 897949dc963fSmrg relink_command= 898049dc963fSmrg fi 89814b0ead49Smrg else 898249dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 898349dc963fSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 89844b0ead49Smrg fi 898549dc963fSmrg fi 89864b0ead49Smrg 898749dc963fSmrg # Replace the output file specification. 89887aa89044Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 89894b0ead49Smrg 899049dc963fSmrg # Delete the old output files. 899149dc963fSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 89924b0ead49Smrg 899349dc963fSmrg func_show_eval "$link_command" 'exit $?' 89944b0ead49Smrg 89954e7590efSmrg if test -n "$postlink_cmds"; then 89964e7590efSmrg func_to_tool_file "$output_objdir/$outputname" 89974e7590efSmrg 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'` 89984e7590efSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89994e7590efSmrg fi 90004e7590efSmrg 900149dc963fSmrg # Now create the wrapper script. 900249dc963fSmrg func_verbose "creating $output" 90034b0ead49Smrg 900449dc963fSmrg # Quote the relink command for shipping. 900549dc963fSmrg if test -n "$relink_command"; then 900649dc963fSmrg # Preserve any variables that may affect compiler behavior 900749dc963fSmrg for var in $variables_saved_for_relink; do 900849dc963fSmrg if eval test -z \"\${$var+set}\"; then 900949dc963fSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 901049dc963fSmrg elif eval var_value=\$$var; test -z "$var_value"; then 901149dc963fSmrg relink_command="$var=; export $var; $relink_command" 90124b0ead49Smrg else 901349dc963fSmrg func_quote_for_eval "$var_value" 901449dc963fSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 90154b0ead49Smrg fi 901649dc963fSmrg done 901749dc963fSmrg relink_command="(cd `pwd`; $relink_command)" 90187aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 901949dc963fSmrg fi 902049dc963fSmrg 902149dc963fSmrg # Only actually do things if not in dry run mode. 902249dc963fSmrg $opt_dry_run || { 902349dc963fSmrg # win32 will think the script is a binary if it has 902449dc963fSmrg # a .exe suffix, so we strip it off here. 902549dc963fSmrg case $output in 902649dc963fSmrg *.exe) func_stripname '' '.exe' "$output" 902749dc963fSmrg output=$func_stripname_result ;; 902849dc963fSmrg esac 902949dc963fSmrg # test for cygwin because mv fails w/o .exe extensions 903049dc963fSmrg case $host in 903149dc963fSmrg *cygwin*) 903249dc963fSmrg exeext=.exe 903349dc963fSmrg func_stripname '' '.exe' "$outputname" 903449dc963fSmrg outputname=$func_stripname_result ;; 903549dc963fSmrg *) exeext= ;; 90364b0ead49Smrg esac 903749dc963fSmrg case $host in 903849dc963fSmrg *cygwin* | *mingw* ) 903949dc963fSmrg func_dirname_and_basename "$output" "" "." 904049dc963fSmrg output_name=$func_basename_result 904149dc963fSmrg output_path=$func_dirname_result 904249dc963fSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 904349dc963fSmrg cwrapper="$output_path/$output_name.exe" 904449dc963fSmrg $RM $cwrappersource $cwrapper 904549dc963fSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 904649dc963fSmrg 904749dc963fSmrg func_emit_cwrapperexe_src > $cwrappersource 904849dc963fSmrg 904949dc963fSmrg # The wrapper executable is built using the $host compiler, 905049dc963fSmrg # because it contains $host paths and files. If cross- 905149dc963fSmrg # compiling, it, like the target executable, must be 905249dc963fSmrg # executed on the $host or under an emulation environment. 905349dc963fSmrg $opt_dry_run || { 905449dc963fSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 905549dc963fSmrg $STRIP $cwrapper 905649dc963fSmrg } 90574b0ead49Smrg 905849dc963fSmrg # Now, create the wrapper script for func_source use: 905949dc963fSmrg func_ltwrapper_scriptname $cwrapper 906049dc963fSmrg $RM $func_ltwrapper_scriptname_result 906149dc963fSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 906249dc963fSmrg $opt_dry_run || { 906349dc963fSmrg # note: this script will not be executed, so do not chmod. 906449dc963fSmrg if test "x$build" = "x$host" ; then 906549dc963fSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 906649dc963fSmrg else 906749dc963fSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 906849dc963fSmrg fi 906949dc963fSmrg } 907049dc963fSmrg ;; 907149dc963fSmrg * ) 907249dc963fSmrg $RM $output 907349dc963fSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 90744b0ead49Smrg 907549dc963fSmrg func_emit_wrapper no > $output 907649dc963fSmrg chmod +x $output 907749dc963fSmrg ;; 907849dc963fSmrg esac 907949dc963fSmrg } 908049dc963fSmrg exit $EXIT_SUCCESS 908149dc963fSmrg ;; 908249dc963fSmrg esac 90834b0ead49Smrg 908449dc963fSmrg # See if we need to build an old-fashioned archive. 908549dc963fSmrg for oldlib in $oldlibs; do 90864b0ead49Smrg 908749dc963fSmrg if test "$build_libtool_libs" = convenience; then 908849dc963fSmrg oldobjs="$libobjs_save $symfileobj" 908949dc963fSmrg addlibs="$convenience" 909049dc963fSmrg build_libtool_libs=no 909149dc963fSmrg else 909249dc963fSmrg if test "$build_libtool_libs" = module; then 909349dc963fSmrg oldobjs="$libobjs_save" 909449dc963fSmrg build_libtool_libs=no 909549dc963fSmrg else 909649dc963fSmrg oldobjs="$old_deplibs $non_pic_objects" 909749dc963fSmrg if test "$preload" = yes && test -f "$symfileobj"; then 90984e7590efSmrg func_append oldobjs " $symfileobj" 909949dc963fSmrg fi 910049dc963fSmrg fi 910149dc963fSmrg addlibs="$old_convenience" 91024b0ead49Smrg fi 91034b0ead49Smrg 910449dc963fSmrg if test -n "$addlibs"; then 910549dc963fSmrg gentop="$output_objdir/${outputname}x" 91064e7590efSmrg func_append generated " $gentop" 91074b0ead49Smrg 910849dc963fSmrg func_extract_archives $gentop $addlibs 91094e7590efSmrg func_append oldobjs " $func_extract_archives_result" 911049dc963fSmrg fi 91114b0ead49Smrg 911249dc963fSmrg # Do each command in the archive commands. 911349dc963fSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 911449dc963fSmrg cmds=$old_archive_from_new_cmds 911549dc963fSmrg else 91164b0ead49Smrg 911749dc963fSmrg # Add any objects from preloaded convenience libraries 911849dc963fSmrg if test -n "$dlprefiles"; then 911949dc963fSmrg gentop="$output_objdir/${outputname}x" 91204e7590efSmrg func_append generated " $gentop" 91214b0ead49Smrg 912249dc963fSmrg func_extract_archives $gentop $dlprefiles 91234e7590efSmrg func_append oldobjs " $func_extract_archives_result" 912449dc963fSmrg fi 91254b0ead49Smrg 912649dc963fSmrg # POSIX demands no paths to be encoded in archives. We have 912749dc963fSmrg # to avoid creating archives with duplicate basenames if we 912849dc963fSmrg # might have to extract them afterwards, e.g., when creating a 912949dc963fSmrg # static archive out of a convenience library, or when linking 913049dc963fSmrg # the entirety of a libtool archive into another (currently 913149dc963fSmrg # not supported by libtool). 913249dc963fSmrg if (for obj in $oldobjs 913349dc963fSmrg do 913449dc963fSmrg func_basename "$obj" 913549dc963fSmrg $ECHO "$func_basename_result" 913649dc963fSmrg done | sort | sort -uc >/dev/null 2>&1); then 913749dc963fSmrg : 913849dc963fSmrg else 91397aa89044Smrg echo "copying selected object files to avoid basename conflicts..." 914049dc963fSmrg gentop="$output_objdir/${outputname}x" 91414e7590efSmrg func_append generated " $gentop" 914249dc963fSmrg func_mkdir_p "$gentop" 914349dc963fSmrg save_oldobjs=$oldobjs 914449dc963fSmrg oldobjs= 914549dc963fSmrg counter=1 914649dc963fSmrg for obj in $save_oldobjs 914749dc963fSmrg do 914849dc963fSmrg func_basename "$obj" 914949dc963fSmrg objbase="$func_basename_result" 915049dc963fSmrg case " $oldobjs " in 915149dc963fSmrg " ") oldobjs=$obj ;; 915249dc963fSmrg *[\ /]"$objbase "*) 915349dc963fSmrg while :; do 915449dc963fSmrg # Make sure we don't pick an alternate name that also 915549dc963fSmrg # overlaps. 915649dc963fSmrg newobj=lt$counter-$objbase 915749dc963fSmrg func_arith $counter + 1 915849dc963fSmrg counter=$func_arith_result 915949dc963fSmrg case " $oldobjs " in 916049dc963fSmrg *[\ /]"$newobj "*) ;; 916149dc963fSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 916249dc963fSmrg esac 916349dc963fSmrg done 916449dc963fSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 91654e7590efSmrg func_append oldobjs " $gentop/$newobj" 916649dc963fSmrg ;; 91674e7590efSmrg *) func_append oldobjs " $obj" ;; 916849dc963fSmrg esac 91694b0ead49Smrg done 91704b0ead49Smrg fi 91714e7590efSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 91724e7590efSmrg tool_oldlib=$func_to_tool_file_result 917349dc963fSmrg eval cmds=\"$old_archive_cmds\" 91744b0ead49Smrg 917549dc963fSmrg func_len " $cmds" 917649dc963fSmrg len=$func_len_result 917749dc963fSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 917849dc963fSmrg cmds=$old_archive_cmds 91794e7590efSmrg elif test -n "$archiver_list_spec"; then 91804e7590efSmrg func_verbose "using command file archive linking..." 91814e7590efSmrg for obj in $oldobjs 91824e7590efSmrg do 91834e7590efSmrg func_to_tool_file "$obj" 91844e7590efSmrg $ECHO "$func_to_tool_file_result" 91854e7590efSmrg done > $output_objdir/$libname.libcmd 91864e7590efSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 91874e7590efSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 91884e7590efSmrg cmds=$old_archive_cmds 918949dc963fSmrg else 919049dc963fSmrg # the command line is too long to link in one step, link in parts 919149dc963fSmrg func_verbose "using piecewise archive linking..." 919249dc963fSmrg save_RANLIB=$RANLIB 919349dc963fSmrg RANLIB=: 919449dc963fSmrg objlist= 919549dc963fSmrg concat_cmds= 919649dc963fSmrg save_oldobjs=$oldobjs 919749dc963fSmrg oldobjs= 919849dc963fSmrg # Is there a better way of finding the last object in the list? 919949dc963fSmrg for obj in $save_oldobjs 920049dc963fSmrg do 920149dc963fSmrg last_oldobj=$obj 920249dc963fSmrg done 920349dc963fSmrg eval test_cmds=\"$old_archive_cmds\" 920449dc963fSmrg func_len " $test_cmds" 920549dc963fSmrg len0=$func_len_result 920649dc963fSmrg len=$len0 920749dc963fSmrg for obj in $save_oldobjs 920849dc963fSmrg do 920949dc963fSmrg func_len " $obj" 921049dc963fSmrg func_arith $len + $func_len_result 921149dc963fSmrg len=$func_arith_result 921249dc963fSmrg func_append objlist " $obj" 921349dc963fSmrg if test "$len" -lt "$max_cmd_len"; then 921449dc963fSmrg : 921549dc963fSmrg else 921649dc963fSmrg # the above command should be used before it gets too long 921749dc963fSmrg oldobjs=$objlist 921849dc963fSmrg if test "$obj" = "$last_oldobj" ; then 921949dc963fSmrg RANLIB=$save_RANLIB 922049dc963fSmrg fi 922149dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 922249dc963fSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 922349dc963fSmrg objlist= 922449dc963fSmrg len=$len0 922549dc963fSmrg fi 922649dc963fSmrg done 922749dc963fSmrg RANLIB=$save_RANLIB 922849dc963fSmrg oldobjs=$objlist 922949dc963fSmrg if test "X$oldobjs" = "X" ; then 923049dc963fSmrg eval cmds=\"\$concat_cmds\" 923149dc963fSmrg else 923249dc963fSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 923349dc963fSmrg fi 923449dc963fSmrg fi 923549dc963fSmrg fi 923649dc963fSmrg func_execute_cmds "$cmds" 'exit $?' 92374b0ead49Smrg done 92384b0ead49Smrg 923949dc963fSmrg test -n "$generated" && \ 924049dc963fSmrg func_show_eval "${RM}r$generated" 92414b0ead49Smrg 924249dc963fSmrg # Now create the libtool archive. 924349dc963fSmrg case $output in 924449dc963fSmrg *.la) 924549dc963fSmrg old_library= 924649dc963fSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 924749dc963fSmrg func_verbose "creating $output" 92484b0ead49Smrg 924949dc963fSmrg # Preserve any variables that may affect compiler behavior 925049dc963fSmrg for var in $variables_saved_for_relink; do 925149dc963fSmrg if eval test -z \"\${$var+set}\"; then 925249dc963fSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 925349dc963fSmrg elif eval var_value=\$$var; test -z "$var_value"; then 925449dc963fSmrg relink_command="$var=; export $var; $relink_command" 92554b0ead49Smrg else 925649dc963fSmrg func_quote_for_eval "$var_value" 925749dc963fSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 92584b0ead49Smrg fi 925949dc963fSmrg done 926049dc963fSmrg # Quote the link command for shipping. 926149dc963fSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 92627aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 926349dc963fSmrg if test "$hardcode_automatic" = yes ; then 926449dc963fSmrg relink_command= 926549dc963fSmrg fi 92664b0ead49Smrg 926749dc963fSmrg # Only create the output if not a dry run. 926849dc963fSmrg $opt_dry_run || { 926949dc963fSmrg for installed in no yes; do 927049dc963fSmrg if test "$installed" = yes; then 927149dc963fSmrg if test -z "$install_libdir"; then 927249dc963fSmrg break 927349dc963fSmrg fi 927449dc963fSmrg output="$output_objdir/$outputname"i 927549dc963fSmrg # Replace all uninstalled libtool libraries with the installed ones 927649dc963fSmrg newdependency_libs= 927749dc963fSmrg for deplib in $dependency_libs; do 927849dc963fSmrg case $deplib in 927949dc963fSmrg *.la) 928049dc963fSmrg func_basename "$deplib" 928149dc963fSmrg name="$func_basename_result" 92824e7590efSmrg func_resolve_sysroot "$deplib" 92834e7590efSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 928449dc963fSmrg test -z "$libdir" && \ 928549dc963fSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 92864e7590efSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 92874e7590efSmrg ;; 92884e7590efSmrg -L*) 92894e7590efSmrg func_stripname -L '' "$deplib" 92904e7590efSmrg func_replace_sysroot "$func_stripname_result" 92914e7590efSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 92924e7590efSmrg ;; 92934e7590efSmrg -R*) 92944e7590efSmrg func_stripname -R '' "$deplib" 92954e7590efSmrg func_replace_sysroot "$func_stripname_result" 92964e7590efSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 929749dc963fSmrg ;; 92984e7590efSmrg *) func_append newdependency_libs " $deplib" ;; 929949dc963fSmrg esac 930049dc963fSmrg done 930149dc963fSmrg dependency_libs="$newdependency_libs" 930249dc963fSmrg newdlfiles= 930349dc963fSmrg 930449dc963fSmrg for lib in $dlfiles; do 930549dc963fSmrg case $lib in 930649dc963fSmrg *.la) 930749dc963fSmrg func_basename "$lib" 930849dc963fSmrg name="$func_basename_result" 930949dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 931049dc963fSmrg test -z "$libdir" && \ 931149dc963fSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 93124e7590efSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 931349dc963fSmrg ;; 93144e7590efSmrg *) func_append newdlfiles " $lib" ;; 931549dc963fSmrg esac 931649dc963fSmrg done 931749dc963fSmrg dlfiles="$newdlfiles" 931849dc963fSmrg newdlprefiles= 931949dc963fSmrg for lib in $dlprefiles; do 932049dc963fSmrg case $lib in 932149dc963fSmrg *.la) 932249dc963fSmrg # Only pass preopened files to the pseudo-archive (for 932349dc963fSmrg # eventual linking with the app. that links it) if we 932449dc963fSmrg # didn't already link the preopened objects directly into 932549dc963fSmrg # the library: 932649dc963fSmrg func_basename "$lib" 932749dc963fSmrg name="$func_basename_result" 932849dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 932949dc963fSmrg test -z "$libdir" && \ 933049dc963fSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 93314e7590efSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 933249dc963fSmrg ;; 933349dc963fSmrg esac 933449dc963fSmrg done 933549dc963fSmrg dlprefiles="$newdlprefiles" 933649dc963fSmrg else 933749dc963fSmrg newdlfiles= 933849dc963fSmrg for lib in $dlfiles; do 933949dc963fSmrg case $lib in 934049dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 934149dc963fSmrg *) abs=`pwd`"/$lib" ;; 934249dc963fSmrg esac 93434e7590efSmrg func_append newdlfiles " $abs" 934449dc963fSmrg done 934549dc963fSmrg dlfiles="$newdlfiles" 934649dc963fSmrg newdlprefiles= 934749dc963fSmrg for lib in $dlprefiles; do 934849dc963fSmrg case $lib in 934949dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 935049dc963fSmrg *) abs=`pwd`"/$lib" ;; 935149dc963fSmrg esac 93524e7590efSmrg func_append newdlprefiles " $abs" 935349dc963fSmrg done 935449dc963fSmrg dlprefiles="$newdlprefiles" 935549dc963fSmrg fi 935649dc963fSmrg $RM $output 935749dc963fSmrg # place dlname in correct position for cygwin 93587aa89044Smrg # In fact, it would be nice if we could use this code for all target 93597aa89044Smrg # systems that can't hard-code library paths into their executables 93607aa89044Smrg # and that have no shared library path variable independent of PATH, 93617aa89044Smrg # but it turns out we can't easily determine that from inspecting 93627aa89044Smrg # libtool variables, so we have to hard-code the OSs to which it 93637aa89044Smrg # applies here; at the moment, that means platforms that use the PE 93647aa89044Smrg # object format with DLL files. See the long comment at the top of 93657aa89044Smrg # tests/bindir.at for full details. 936649dc963fSmrg tdlname=$dlname 936749dc963fSmrg case $host,$output,$installed,$module,$dlname in 93687aa89044Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 93697aa89044Smrg # If a -bindir argument was supplied, place the dll there. 93707aa89044Smrg if test "x$bindir" != x ; 93717aa89044Smrg then 93727aa89044Smrg func_relative_path "$install_libdir" "$bindir" 93737aa89044Smrg tdlname=$func_relative_path_result$dlname 93747aa89044Smrg else 93757aa89044Smrg # Otherwise fall back on heuristic. 93767aa89044Smrg tdlname=../bin/$dlname 93777aa89044Smrg fi 93787aa89044Smrg ;; 937949dc963fSmrg esac 938049dc963fSmrg $ECHO > $output "\ 938149dc963fSmrg# $outputname - a libtool library file 938249dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 938349dc963fSmrg# 938449dc963fSmrg# Please DO NOT delete this file! 938549dc963fSmrg# It is necessary for linking the library. 93864b0ead49Smrg 938749dc963fSmrg# The name that we can dlopen(3). 938849dc963fSmrgdlname='$tdlname' 93894b0ead49Smrg 939049dc963fSmrg# Names of this library. 939149dc963fSmrglibrary_names='$library_names' 93924b0ead49Smrg 939349dc963fSmrg# The name of the static archive. 939449dc963fSmrgold_library='$old_library' 93954b0ead49Smrg 939649dc963fSmrg# Linker flags that can not go in dependency_libs. 939749dc963fSmrginherited_linker_flags='$new_inherited_linker_flags' 93984b0ead49Smrg 939949dc963fSmrg# Libraries that this one depends upon. 940049dc963fSmrgdependency_libs='$dependency_libs' 94014b0ead49Smrg 940249dc963fSmrg# Names of additional weak libraries provided by this library 940349dc963fSmrgweak_library_names='$weak_libs' 94044b0ead49Smrg 940549dc963fSmrg# Version information for $libname. 940649dc963fSmrgcurrent=$current 940749dc963fSmrgage=$age 940849dc963fSmrgrevision=$revision 94094b0ead49Smrg 941049dc963fSmrg# Is this an already installed library? 941149dc963fSmrginstalled=$installed 94124b0ead49Smrg 941349dc963fSmrg# Should we warn about portability when linking against -modules? 941449dc963fSmrgshouldnotlink=$module 94154b0ead49Smrg 941649dc963fSmrg# Files to dlopen/dlpreopen 941749dc963fSmrgdlopen='$dlfiles' 941849dc963fSmrgdlpreopen='$dlprefiles' 94194b0ead49Smrg 942049dc963fSmrg# Directory that this library needs to be installed in: 942149dc963fSmrglibdir='$install_libdir'" 942249dc963fSmrg if test "$installed" = no && test "$need_relink" = yes; then 942349dc963fSmrg $ECHO >> $output "\ 942449dc963fSmrgrelink_command=\"$relink_command\"" 942549dc963fSmrg fi 942649dc963fSmrg done 942749dc963fSmrg } 94284b0ead49Smrg 942949dc963fSmrg # Do a symbolic link so that the libtool archive can be found in 943049dc963fSmrg # LD_LIBRARY_PATH before the program is installed. 943149dc963fSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 943249dc963fSmrg ;; 943349dc963fSmrg esac 943449dc963fSmrg exit $EXIT_SUCCESS 943549dc963fSmrg} 94364b0ead49Smrg 94374e7590efSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 943849dc963fSmrg func_mode_link ${1+"$@"} 94394b0ead49Smrg 94404b0ead49Smrg 944149dc963fSmrg# func_mode_uninstall arg... 944249dc963fSmrgfunc_mode_uninstall () 944349dc963fSmrg{ 944449dc963fSmrg $opt_debug 944549dc963fSmrg RM="$nonopt" 94464b0ead49Smrg files= 94474b0ead49Smrg rmforce= 94484b0ead49Smrg exit_status=0 94494b0ead49Smrg 94504b0ead49Smrg # This variable tells wrapper scripts just to set variables rather 94514b0ead49Smrg # than running their programs. 94524b0ead49Smrg libtool_install_magic="$magic" 94534b0ead49Smrg 94544b0ead49Smrg for arg 94554b0ead49Smrg do 94564b0ead49Smrg case $arg in 94574e7590efSmrg -f) func_append RM " $arg"; rmforce=yes ;; 94584e7590efSmrg -*) func_append RM " $arg" ;; 94594e7590efSmrg *) func_append files " $arg" ;; 94604b0ead49Smrg esac 94614b0ead49Smrg done 94624b0ead49Smrg 946349dc963fSmrg test -z "$RM" && \ 946449dc963fSmrg func_fatal_help "you must specify an RM program" 94654b0ead49Smrg 94664b0ead49Smrg rmdirs= 94674b0ead49Smrg 94684b0ead49Smrg for file in $files; do 946949dc963fSmrg func_dirname "$file" "" "." 947049dc963fSmrg dir="$func_dirname_result" 947149dc963fSmrg if test "X$dir" = X.; then 94724e7590efSmrg odir="$objdir" 94734b0ead49Smrg else 94744e7590efSmrg odir="$dir/$objdir" 94754b0ead49Smrg fi 947649dc963fSmrg func_basename "$file" 947749dc963fSmrg name="$func_basename_result" 94784e7590efSmrg test "$opt_mode" = uninstall && odir="$dir" 94794b0ead49Smrg 94804e7590efSmrg # Remember odir for removal later, being careful to avoid duplicates 94814e7590efSmrg if test "$opt_mode" = clean; then 94824b0ead49Smrg case " $rmdirs " in 94834e7590efSmrg *" $odir "*) ;; 94844e7590efSmrg *) func_append rmdirs " $odir" ;; 94854b0ead49Smrg esac 94864b0ead49Smrg fi 94874b0ead49Smrg 94884b0ead49Smrg # Don't error if the file doesn't exist and rm -f was used. 948949dc963fSmrg if { test -L "$file"; } >/dev/null 2>&1 || 949049dc963fSmrg { test -h "$file"; } >/dev/null 2>&1 || 949149dc963fSmrg test -f "$file"; then 94924b0ead49Smrg : 94934b0ead49Smrg elif test -d "$file"; then 94944b0ead49Smrg exit_status=1 94954b0ead49Smrg continue 94964b0ead49Smrg elif test "$rmforce" = yes; then 94974b0ead49Smrg continue 94984b0ead49Smrg fi 94994b0ead49Smrg 95004b0ead49Smrg rmfiles="$file" 95014b0ead49Smrg 95024b0ead49Smrg case $name in 95034b0ead49Smrg *.la) 95044b0ead49Smrg # Possibly a libtool archive, so verify it. 950549dc963fSmrg if func_lalib_p "$file"; then 950649dc963fSmrg func_source $dir/$name 95074b0ead49Smrg 95084b0ead49Smrg # Delete the libtool libraries and symlinks. 95094b0ead49Smrg for n in $library_names; do 95104e7590efSmrg func_append rmfiles " $odir/$n" 95114b0ead49Smrg done 95124e7590efSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 95134b0ead49Smrg 95144e7590efSmrg case "$opt_mode" in 95154b0ead49Smrg clean) 95164e7590efSmrg case " $library_names " in 95174b0ead49Smrg *" $dlname "*) ;; 95184e7590efSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 95194b0ead49Smrg esac 95204e7590efSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 95214b0ead49Smrg ;; 95224b0ead49Smrg uninstall) 95234b0ead49Smrg if test -n "$library_names"; then 95244b0ead49Smrg # Do each command in the postuninstall commands. 952549dc963fSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 95264b0ead49Smrg fi 95274b0ead49Smrg 95284b0ead49Smrg if test -n "$old_library"; then 95294b0ead49Smrg # Do each command in the old_postuninstall commands. 953049dc963fSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 95314b0ead49Smrg fi 95324b0ead49Smrg # FIXME: should reinstall the best remaining shared library. 95334b0ead49Smrg ;; 95344b0ead49Smrg esac 95354b0ead49Smrg fi 95364b0ead49Smrg ;; 95374b0ead49Smrg 95384b0ead49Smrg *.lo) 95394b0ead49Smrg # Possibly a libtool object, so verify it. 954049dc963fSmrg if func_lalib_p "$file"; then 95414b0ead49Smrg 95424b0ead49Smrg # Read the .lo file 954349dc963fSmrg func_source $dir/$name 95444b0ead49Smrg 95454b0ead49Smrg # Add PIC object to the list of files to remove. 954649dc963fSmrg if test -n "$pic_object" && 954749dc963fSmrg test "$pic_object" != none; then 95484e7590efSmrg func_append rmfiles " $dir/$pic_object" 95494b0ead49Smrg fi 95504b0ead49Smrg 95514b0ead49Smrg # Add non-PIC object to the list of files to remove. 955249dc963fSmrg if test -n "$non_pic_object" && 955349dc963fSmrg test "$non_pic_object" != none; then 95544e7590efSmrg func_append rmfiles " $dir/$non_pic_object" 95554b0ead49Smrg fi 95564b0ead49Smrg fi 95574b0ead49Smrg ;; 95584b0ead49Smrg 95594b0ead49Smrg *) 95604e7590efSmrg if test "$opt_mode" = clean ; then 95614b0ead49Smrg noexename=$name 95624b0ead49Smrg case $file in 95634b0ead49Smrg *.exe) 956449dc963fSmrg func_stripname '' '.exe' "$file" 956549dc963fSmrg file=$func_stripname_result 956649dc963fSmrg func_stripname '' '.exe' "$name" 956749dc963fSmrg noexename=$func_stripname_result 95684b0ead49Smrg # $file with .exe has already been added to rmfiles, 95694b0ead49Smrg # add $file without .exe 95704e7590efSmrg func_append rmfiles " $file" 95714b0ead49Smrg ;; 95724b0ead49Smrg esac 95734b0ead49Smrg # Do a test to see if this is a libtool program. 957449dc963fSmrg if func_ltwrapper_p "$file"; then 957549dc963fSmrg if func_ltwrapper_executable_p "$file"; then 957649dc963fSmrg func_ltwrapper_scriptname "$file" 957749dc963fSmrg relink_command= 957849dc963fSmrg func_source $func_ltwrapper_scriptname_result 95794e7590efSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 958049dc963fSmrg else 958149dc963fSmrg relink_command= 958249dc963fSmrg func_source $dir/$noexename 958349dc963fSmrg fi 95844b0ead49Smrg 95854b0ead49Smrg # note $name still contains .exe if it was in $file originally 95864b0ead49Smrg # as does the version of $file that was added into $rmfiles 95874e7590efSmrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 95884b0ead49Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 95894e7590efSmrg func_append rmfiles " $odir/lt-$name" 95904b0ead49Smrg fi 95914b0ead49Smrg if test "X$noexename" != "X$name" ; then 95924e7590efSmrg func_append rmfiles " $odir/lt-${noexename}.c" 95934b0ead49Smrg fi 95944b0ead49Smrg fi 95954b0ead49Smrg fi 95964b0ead49Smrg ;; 95974b0ead49Smrg esac 959849dc963fSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 95994b0ead49Smrg done 96004b0ead49Smrg 96014b0ead49Smrg # Try to remove the ${objdir}s in the directories where we deleted files 96024b0ead49Smrg for dir in $rmdirs; do 96034b0ead49Smrg if test -d "$dir"; then 960449dc963fSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 96054b0ead49Smrg fi 96064b0ead49Smrg done 96074b0ead49Smrg 96084b0ead49Smrg exit $exit_status 960949dc963fSmrg} 96104b0ead49Smrg 96114e7590efSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 961249dc963fSmrg func_mode_uninstall ${1+"$@"} 96134b0ead49Smrg 96144e7590efSmrgtest -z "$opt_mode" && { 961549dc963fSmrg help="$generic_help" 961649dc963fSmrg func_fatal_help "you must specify a MODE" 961749dc963fSmrg} 961849dc963fSmrg 961949dc963fSmrgtest -z "$exec_cmd" && \ 96204e7590efSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 96214b0ead49Smrg 96224b0ead49Smrgif test -n "$exec_cmd"; then 962349dc963fSmrg eval exec "$exec_cmd" 96244b0ead49Smrg exit $EXIT_FAILURE 96254b0ead49Smrgfi 96264b0ead49Smrg 962749dc963fSmrgexit $exit_status 96284b0ead49Smrg 96294b0ead49Smrg 96304b0ead49Smrg# The TAGs below are defined such that we never get into a situation 96314b0ead49Smrg# in which we disable both kinds of libraries. Given conflicting 96324b0ead49Smrg# choices, we go for a static library, that is the most portable, 96334b0ead49Smrg# since we can't tell whether shared libraries were disabled because 96344b0ead49Smrg# the user asked for that or because the platform doesn't support 96354b0ead49Smrg# them. This is particularly important on AIX, because we don't 96364b0ead49Smrg# support having both static and shared libraries enabled at the same 96374b0ead49Smrg# time on that platform, so we default to a shared-only configuration. 96384b0ead49Smrg# If a disable-shared tag is given, we'll fallback to a static-only 96394b0ead49Smrg# configuration. But we'll never go from static-only to shared-only. 96404b0ead49Smrg 96414b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 964249dc963fSmrgbuild_libtool_libs=no 964349dc963fSmrgbuild_old_libs=yes 96444b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 96454b0ead49Smrg 96464b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 964749dc963fSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 96484b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-static 96494b0ead49Smrg 96504b0ead49Smrg# Local Variables: 96514b0ead49Smrg# mode:shell-script 96524b0ead49Smrg# sh-indentation:2 96534b0ead49Smrg# End: 965449dc963fSmrg# vi:sw=2 965549dc963fSmrg 9656