ltmain.sh revision 7aa89044
149dc963fSmrg# Generated from ltmain.m4sh. 249dc963fSmrg 37aa89044Smrg# libtool (GNU libtool) 2.2.10 449dc963fSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 549dc963fSmrg 67aa89044Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 77aa89044Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 849dc963fSmrg# This is free software; see the source for copying conditions. There is NO 949dc963fSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1049dc963fSmrg 1149dc963fSmrg# GNU Libtool is free software; you can redistribute it and/or modify 124b0ead49Smrg# it under the terms of the GNU General Public License as published by 134b0ead49Smrg# the Free Software Foundation; either version 2 of the License, or 144b0ead49Smrg# (at your option) any later version. 154b0ead49Smrg# 1649dc963fSmrg# As a special exception to the GNU General Public License, 1749dc963fSmrg# if you distribute this file as part of a program or library that 1849dc963fSmrg# is built using GNU Libtool, you may include this file under the 1949dc963fSmrg# same distribution terms that you use for the rest of that program. 2049dc963fSmrg# 2149dc963fSmrg# GNU Libtool is distributed in the hope that it will be useful, but 224b0ead49Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 234b0ead49Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 244b0ead49Smrg# General Public License for more details. 254b0ead49Smrg# 264b0ead49Smrg# You should have received a copy of the GNU General Public License 2749dc963fSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 2849dc963fSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 2949dc963fSmrg# or obtained by writing to the Free Software Foundation, Inc., 3049dc963fSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 314b0ead49Smrg 3249dc963fSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 3349dc963fSmrg# 3449dc963fSmrg# Provide generalized library-building support services. 3549dc963fSmrg# 367aa89044Smrg# --config show all configuration variables 377aa89044Smrg# --debug enable verbose shell tracing 387aa89044Smrg# -n, --dry-run display commands without modifying any files 397aa89044Smrg# --features display basic configuration information and exit 407aa89044Smrg# --mode=MODE use operation mode MODE 417aa89044Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 427aa89044Smrg# --quiet, --silent don't print informational messages 437aa89044Smrg# --no-quiet, --no-silent 447aa89044Smrg# print informational messages (default) 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) 737aa89044Smrg# $progname: (GNU libtool) 2.2.10 747aa89044Smrg# automake: $automake_version 757aa89044Smrg# autoconf: $autoconf_version 7649dc963fSmrg# 7749dc963fSmrg# Report bugs to <bug-libtool@gnu.org>. 784b0ead49Smrg 797aa89044SmrgPROGRAM=libtool 804b0ead49SmrgPACKAGE=libtool 817aa89044SmrgVERSION=2.2.10 8249dc963fSmrgTIMESTAMP="" 837aa89044Smrgpackage_revision=1.3175 8452b01e16Smrg 8549dc963fSmrg# Be Bourne compatible 8652b01e16Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8752b01e16Smrg emulate sh 8852b01e16Smrg NULLCMD=: 8952b01e16Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 9052b01e16Smrg # is contrary to our usage. Disable this feature. 9152b01e16Smrg alias -g '${1+"$@"}'='"$@"' 924b0ead49Smrg setopt NO_GLOB_SUBST 9352b01e16Smrgelse 9452b01e16Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 954b0ead49Smrgfi 9652b01e16SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9752b01e16SmrgDUALCASE=1; export DUALCASE # for MKS sh 984b0ead49Smrg 997aa89044Smrg# A function that is used when there is no print builtin or printf. 1007aa89044Smrgfunc_fallback_echo () 1017aa89044Smrg{ 1027aa89044Smrg eval 'cat <<_LTECHO_EOF 1037aa89044Smrg$1 1047aa89044Smrg_LTECHO_EOF' 1057aa89044Smrg} 1067aa89044Smrg 10749dc963fSmrg# NLS nuisances: We save the old values to restore during execute mode. 10849dc963fSmrglt_user_locale= 10949dc963fSmrglt_safe_locale= 11052b01e16Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 11152b01e16Smrgdo 11252b01e16Smrg eval "if test \"\${$lt_var+set}\" = set; then 11349dc963fSmrg save_$lt_var=\$$lt_var 11449dc963fSmrg $lt_var=C 11552b01e16Smrg export $lt_var 11649dc963fSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 11749dc963fSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 11852b01e16Smrg fi" 11952b01e16Smrgdone 1207aa89044SmrgLC_ALL=C 1217aa89044SmrgLANGUAGE=C 1227aa89044Smrgexport LANGUAGE LC_ALL 12352b01e16Smrg 12449dc963fSmrg$lt_unset CDPATH 12549dc963fSmrg 12649dc963fSmrg 1277aa89044Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1287aa89044Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1297aa89044Smrg# the _XPG environment variable is not equal to 1 (one), the special 1307aa89044Smrg# positional parameter $0, within a function call, is the name of the 1317aa89044Smrg# function. 1327aa89044Smrgprogpath="$0" 13349dc963fSmrg 13449dc963fSmrg 13549dc963fSmrg 13649dc963fSmrg: ${CP="cp -f"} 1377aa89044Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 1387aa89044Smrg: ${EGREP="grep -E"} 1397aa89044Smrg: ${FGREP="grep -F"} 1407aa89044Smrg: ${GREP="grep"} 14149dc963fSmrg: ${LN_S="ln -s"} 14249dc963fSmrg: ${MAKE="make"} 14349dc963fSmrg: ${MKDIR="mkdir"} 14449dc963fSmrg: ${MV="mv -f"} 14549dc963fSmrg: ${RM="rm -f"} 1467aa89044Smrg: ${SED="sed"} 14749dc963fSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 14849dc963fSmrg: ${Xsed="$SED -e 1s/^X//"} 14949dc963fSmrg 15049dc963fSmrg# Global variables: 15149dc963fSmrgEXIT_SUCCESS=0 15249dc963fSmrgEXIT_FAILURE=1 15349dc963fSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 15449dc963fSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 15549dc963fSmrg 15649dc963fSmrgexit_status=$EXIT_SUCCESS 1574b0ead49Smrg 1584b0ead49Smrg# Make sure IFS has a sensible default 1594b0ead49Smrglt_nl=' 1604b0ead49Smrg' 1614b0ead49SmrgIFS=" $lt_nl" 1624b0ead49Smrg 16349dc963fSmrgdirname="s,/[^/]*$,," 16449dc963fSmrgbasename="s,^.*/,," 16549dc963fSmrg 16649dc963fSmrg# func_dirname_and_basename file append nondir_replacement 16749dc963fSmrg# perform func_basename and func_dirname in a single function 16849dc963fSmrg# call: 16949dc963fSmrg# dirname: Compute the dirname of FILE. If nonempty, 17049dc963fSmrg# add APPEND to the result, otherwise set result 17149dc963fSmrg# to NONDIR_REPLACEMENT. 17249dc963fSmrg# value returned in "$func_dirname_result" 17349dc963fSmrg# basename: Compute filename of FILE. 17449dc963fSmrg# value retuned in "$func_basename_result" 17549dc963fSmrg# Implementation must be kept synchronized with func_dirname 17649dc963fSmrg# and func_basename. For efficiency, we do not delegate to 17749dc963fSmrg# those functions but instead duplicate the functionality here. 17849dc963fSmrgfunc_dirname_and_basename () 17949dc963fSmrg{ 18049dc963fSmrg # Extract subdirectory from the argument. 1817aa89044Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 18249dc963fSmrg if test "X$func_dirname_result" = "X${1}"; then 18349dc963fSmrg func_dirname_result="${3}" 18449dc963fSmrg else 18549dc963fSmrg func_dirname_result="$func_dirname_result${2}" 18649dc963fSmrg fi 1877aa89044Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 18849dc963fSmrg} 1894b0ead49Smrg 19049dc963fSmrg# Generated shell functions inserted here. 19149dc963fSmrg 1927aa89044Smrg# These SED scripts presuppose an absolute path with a trailing slash. 1937aa89044Smrgpathcar='s,^/\([^/]*\).*$,\1,' 1947aa89044Smrgpathcdr='s,^/[^/]*,,' 1957aa89044Smrgremovedotparts=':dotsl 1967aa89044Smrg s@/\./@/@g 1977aa89044Smrg t dotsl 1987aa89044Smrg s,/\.$,/,' 1997aa89044Smrgcollapseslashes='s@/\{1,\}@/@g' 2007aa89044Smrgfinalslash='s,/*$,/,' 2017aa89044Smrg 2027aa89044Smrg# func_normal_abspath PATH 2037aa89044Smrg# Remove doubled-up and trailing slashes, "." path components, 2047aa89044Smrg# and cancel out any ".." path components in PATH after making 2057aa89044Smrg# it an absolute path. 2067aa89044Smrg# value returned in "$func_normal_abspath_result" 2077aa89044Smrgfunc_normal_abspath () 2087aa89044Smrg{ 2097aa89044Smrg # Start from root dir and reassemble the path. 2107aa89044Smrg func_normal_abspath_result= 2117aa89044Smrg func_normal_abspath_tpath=$1 2127aa89044Smrg func_normal_abspath_altnamespace= 2137aa89044Smrg case $func_normal_abspath_tpath in 2147aa89044Smrg "") 2157aa89044Smrg # Empty path, that just means $cwd. 2167aa89044Smrg func_stripname '' '/' "`pwd`" 2177aa89044Smrg func_normal_abspath_result=$func_stripname_result 2187aa89044Smrg return 2197aa89044Smrg ;; 2207aa89044Smrg # The next three entries are used to spot a run of precisely 2217aa89044Smrg # two leading slashes without using negated character classes; 2227aa89044Smrg # we take advantage of case's first-match behaviour. 2237aa89044Smrg ///*) 2247aa89044Smrg # Unusual form of absolute path, do nothing. 2257aa89044Smrg ;; 2267aa89044Smrg //*) 2277aa89044Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2287aa89044Smrg # and for example Cygwin uses it to access remote file shares 2297aa89044Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 2307aa89044Smrg func_normal_abspath_altnamespace=/ 2317aa89044Smrg ;; 2327aa89044Smrg /*) 2337aa89044Smrg # Absolute path, do nothing. 2347aa89044Smrg ;; 2357aa89044Smrg *) 2367aa89044Smrg # Relative path, prepend $cwd. 2377aa89044Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2387aa89044Smrg ;; 2397aa89044Smrg esac 2407aa89044Smrg # Cancel out all the simple stuff to save iterations. We also want 2417aa89044Smrg # the path to end with a slash for ease of parsing, so make sure 2427aa89044Smrg # there is one (and only one) here. 2437aa89044Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2447aa89044Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2457aa89044Smrg while :; do 2467aa89044Smrg # Processed it all yet? 2477aa89044Smrg if test "$func_normal_abspath_tpath" = / ; then 2487aa89044Smrg # If we ascended to the root using ".." the result may be empty now. 2497aa89044Smrg if test -z "$func_normal_abspath_result" ; then 2507aa89044Smrg func_normal_abspath_result=/ 2517aa89044Smrg fi 2527aa89044Smrg break 2537aa89044Smrg fi 2547aa89044Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2557aa89044Smrg -e "$pathcar"` 2567aa89044Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2577aa89044Smrg -e "$pathcdr"` 2587aa89044Smrg # Figure out what to do with it 2597aa89044Smrg case $func_normal_abspath_tcomponent in 2607aa89044Smrg "") 2617aa89044Smrg # Trailing empty path component, ignore it. 2627aa89044Smrg ;; 2637aa89044Smrg ..) 2647aa89044Smrg # Parent dir; strip last assembled component from result. 2657aa89044Smrg func_dirname "$func_normal_abspath_result" 2667aa89044Smrg func_normal_abspath_result=$func_dirname_result 2677aa89044Smrg ;; 2687aa89044Smrg *) 2697aa89044Smrg # Actual path component, append it. 2707aa89044Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 2717aa89044Smrg ;; 2727aa89044Smrg esac 2737aa89044Smrg done 2747aa89044Smrg # Restore leading double-slash if one was found on entry. 2757aa89044Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 2767aa89044Smrg} 2777aa89044Smrg 2787aa89044Smrg# func_relative_path SRCDIR DSTDIR 2797aa89044Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 2807aa89044Smrg# slash if non-empty, suitable for immediately appending a filename 2817aa89044Smrg# without needing to append a separator. 2827aa89044Smrg# value returned in "$func_relative_path_result" 2837aa89044Smrgfunc_relative_path () 2847aa89044Smrg{ 2857aa89044Smrg func_relative_path_result= 2867aa89044Smrg func_normal_abspath "$1" 2877aa89044Smrg func_relative_path_tlibdir=$func_normal_abspath_result 2887aa89044Smrg func_normal_abspath "$2" 2897aa89044Smrg func_relative_path_tbindir=$func_normal_abspath_result 2907aa89044Smrg 2917aa89044Smrg # Ascend the tree starting from libdir 2927aa89044Smrg while :; do 2937aa89044Smrg # check if we have found a prefix of bindir 2947aa89044Smrg case $func_relative_path_tbindir in 2957aa89044Smrg $func_relative_path_tlibdir) 2967aa89044Smrg # found an exact match 2977aa89044Smrg func_relative_path_tcancelled= 2987aa89044Smrg break 2997aa89044Smrg ;; 3007aa89044Smrg $func_relative_path_tlibdir*) 3017aa89044Smrg # found a matching prefix 3027aa89044Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3037aa89044Smrg func_relative_path_tcancelled=$func_stripname_result 3047aa89044Smrg if test -z "$func_relative_path_result"; then 3057aa89044Smrg func_relative_path_result=. 3067aa89044Smrg fi 3077aa89044Smrg break 3087aa89044Smrg ;; 3097aa89044Smrg *) 3107aa89044Smrg func_dirname $func_relative_path_tlibdir 3117aa89044Smrg func_relative_path_tlibdir=${func_dirname_result} 3127aa89044Smrg if test "x$func_relative_path_tlibdir" = x ; then 3137aa89044Smrg # Have to descend all the way to the root! 3147aa89044Smrg func_relative_path_result=../$func_relative_path_result 3157aa89044Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 3167aa89044Smrg break 3177aa89044Smrg fi 3187aa89044Smrg func_relative_path_result=../$func_relative_path_result 3197aa89044Smrg ;; 3207aa89044Smrg esac 3217aa89044Smrg done 3227aa89044Smrg 3237aa89044Smrg # Now calculate path; take care to avoid doubling-up slashes. 3247aa89044Smrg func_stripname '' '/' "$func_relative_path_result" 3257aa89044Smrg func_relative_path_result=$func_stripname_result 3267aa89044Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3277aa89044Smrg if test "x$func_stripname_result" != x ; then 3287aa89044Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3297aa89044Smrg fi 3307aa89044Smrg 3317aa89044Smrg # Normalisation. If bindir is libdir, return empty string, 3327aa89044Smrg # else relative path ending with a slash; either way, target 3337aa89044Smrg # file name can be directly appended. 3347aa89044Smrg if test ! -z "$func_relative_path_result"; then 3357aa89044Smrg func_stripname './' '' "$func_relative_path_result/" 3367aa89044Smrg func_relative_path_result=$func_stripname_result 3377aa89044Smrg fi 3387aa89044Smrg} 33949dc963fSmrg 34049dc963fSmrg# The name of this program: 34149dc963fSmrgfunc_dirname_and_basename "$progpath" 34249dc963fSmrgprogname=$func_basename_result 34349dc963fSmrg 34449dc963fSmrg# Make sure we have an absolute path for reexecution: 34549dc963fSmrgcase $progpath in 34649dc963fSmrg [\\/]*|[A-Za-z]:\\*) ;; 34749dc963fSmrg *[\\/]*) 34849dc963fSmrg progdir=$func_dirname_result 34949dc963fSmrg progdir=`cd "$progdir" && pwd` 35049dc963fSmrg progpath="$progdir/$progname" 35149dc963fSmrg ;; 35249dc963fSmrg *) 35349dc963fSmrg save_IFS="$IFS" 35449dc963fSmrg IFS=: 35549dc963fSmrg for progdir in $PATH; do 35649dc963fSmrg IFS="$save_IFS" 35749dc963fSmrg test -x "$progdir/$progname" && break 35849dc963fSmrg done 35949dc963fSmrg IFS="$save_IFS" 36049dc963fSmrg test -n "$progdir" || progdir=`pwd` 36149dc963fSmrg progpath="$progdir/$progname" 36249dc963fSmrg ;; 36349dc963fSmrgesac 36449dc963fSmrg 36549dc963fSmrg# Sed substitution that helps us do robust quoting. It backslashifies 36649dc963fSmrg# metacharacters that are still active within double-quoted strings. 36749dc963fSmrgXsed="${SED}"' -e 1s/^X//' 36849dc963fSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 36949dc963fSmrg 37049dc963fSmrg# Same as above, but do not quote variable references. 37149dc963fSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 37249dc963fSmrg 37349dc963fSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 37449dc963fSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 37549dc963fSmrg# in input to double_quote_subst, that '$' was protected from expansion. 37649dc963fSmrg# Since each input `\' is now two `\'s, look for any number of runs of 37749dc963fSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 37849dc963fSmrgbs='\\' 37949dc963fSmrgbs2='\\\\' 38049dc963fSmrgbs4='\\\\\\\\' 38149dc963fSmrgdollar='\$' 38249dc963fSmrgsed_double_backslash="\ 38349dc963fSmrg s/$bs4/&\\ 38449dc963fSmrg/g 38549dc963fSmrg s/^$bs2$dollar/$bs&/ 38649dc963fSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 38749dc963fSmrg s/\n//g" 38849dc963fSmrg 38949dc963fSmrg# Standard options: 39049dc963fSmrgopt_dry_run=false 39149dc963fSmrgopt_help=false 39249dc963fSmrgopt_quiet=false 39349dc963fSmrgopt_verbose=false 39449dc963fSmrgopt_warning=: 39549dc963fSmrg 39649dc963fSmrg# func_echo arg... 39749dc963fSmrg# Echo program name prefixed message, along with the current mode 39849dc963fSmrg# name if it has been set yet. 39949dc963fSmrgfunc_echo () 40049dc963fSmrg{ 40149dc963fSmrg $ECHO "$progname${mode+: }$mode: $*" 40249dc963fSmrg} 40349dc963fSmrg 40449dc963fSmrg# func_verbose arg... 40549dc963fSmrg# Echo program name prefixed message in verbose mode only. 40649dc963fSmrgfunc_verbose () 40749dc963fSmrg{ 40849dc963fSmrg $opt_verbose && func_echo ${1+"$@"} 40949dc963fSmrg 41049dc963fSmrg # A bug in bash halts the script if the last line of a function 41149dc963fSmrg # fails when set -e is in force, so we need another command to 41249dc963fSmrg # work around that: 41349dc963fSmrg : 41449dc963fSmrg} 41549dc963fSmrg 4167aa89044Smrg# func_echo_all arg... 4177aa89044Smrg# Invoke $ECHO with all args, space-separated. 4187aa89044Smrgfunc_echo_all () 4197aa89044Smrg{ 4207aa89044Smrg $ECHO "$*" 4217aa89044Smrg} 4227aa89044Smrg 42349dc963fSmrg# func_error arg... 42449dc963fSmrg# Echo program name prefixed message to standard error. 42549dc963fSmrgfunc_error () 42649dc963fSmrg{ 42749dc963fSmrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 42849dc963fSmrg} 42949dc963fSmrg 43049dc963fSmrg# func_warning arg... 43149dc963fSmrg# Echo program name prefixed warning message to standard error. 43249dc963fSmrgfunc_warning () 43349dc963fSmrg{ 43449dc963fSmrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 43549dc963fSmrg 43649dc963fSmrg # bash bug again: 43749dc963fSmrg : 43849dc963fSmrg} 43949dc963fSmrg 44049dc963fSmrg# func_fatal_error arg... 44149dc963fSmrg# Echo program name prefixed message to standard error, and exit. 44249dc963fSmrgfunc_fatal_error () 44349dc963fSmrg{ 44449dc963fSmrg func_error ${1+"$@"} 44549dc963fSmrg exit $EXIT_FAILURE 44649dc963fSmrg} 44749dc963fSmrg 44849dc963fSmrg# func_fatal_help arg... 44949dc963fSmrg# Echo program name prefixed message to standard error, followed by 45049dc963fSmrg# a help hint, and exit. 45149dc963fSmrgfunc_fatal_help () 45249dc963fSmrg{ 45349dc963fSmrg func_error ${1+"$@"} 45449dc963fSmrg func_fatal_error "$help" 45549dc963fSmrg} 45649dc963fSmrghelp="Try \`$progname --help' for more information." ## default 45749dc963fSmrg 45849dc963fSmrg 45949dc963fSmrg# func_grep expression filename 46049dc963fSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 46149dc963fSmrgfunc_grep () 46249dc963fSmrg{ 46349dc963fSmrg $GREP "$1" "$2" >/dev/null 2>&1 46449dc963fSmrg} 46549dc963fSmrg 46649dc963fSmrg 46749dc963fSmrg# func_mkdir_p directory-path 46849dc963fSmrg# Make sure the entire path to DIRECTORY-PATH is available. 46949dc963fSmrgfunc_mkdir_p () 47049dc963fSmrg{ 47149dc963fSmrg my_directory_path="$1" 47249dc963fSmrg my_dir_list= 47349dc963fSmrg 47449dc963fSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 47549dc963fSmrg 47649dc963fSmrg # Protect directory names starting with `-' 47749dc963fSmrg case $my_directory_path in 47849dc963fSmrg -*) my_directory_path="./$my_directory_path" ;; 47949dc963fSmrg esac 48049dc963fSmrg 48149dc963fSmrg # While some portion of DIR does not yet exist... 48249dc963fSmrg while test ! -d "$my_directory_path"; do 48349dc963fSmrg # ...make a list in topmost first order. Use a colon delimited 48449dc963fSmrg # list incase some portion of path contains whitespace. 48549dc963fSmrg my_dir_list="$my_directory_path:$my_dir_list" 48649dc963fSmrg 48749dc963fSmrg # If the last portion added has no slash in it, the list is done 48849dc963fSmrg case $my_directory_path in */*) ;; *) break ;; esac 48949dc963fSmrg 49049dc963fSmrg # ...otherwise throw away the child directory and loop 4917aa89044Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 49249dc963fSmrg done 4937aa89044Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 49449dc963fSmrg 49549dc963fSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 49649dc963fSmrg for my_dir in $my_dir_list; do 49749dc963fSmrg IFS="$save_mkdir_p_IFS" 49849dc963fSmrg # mkdir can fail with a `File exist' error if two processes 49949dc963fSmrg # try to create one of the directories concurrently. Don't 50049dc963fSmrg # stop in that case! 50149dc963fSmrg $MKDIR "$my_dir" 2>/dev/null || : 50249dc963fSmrg done 50349dc963fSmrg IFS="$save_mkdir_p_IFS" 50449dc963fSmrg 50549dc963fSmrg # Bail out if we (or some other process) failed to create a directory. 50649dc963fSmrg test -d "$my_directory_path" || \ 50749dc963fSmrg func_fatal_error "Failed to create \`$1'" 50849dc963fSmrg fi 50949dc963fSmrg} 5104b0ead49Smrg 5114b0ead49Smrg 5124b0ead49Smrg# func_mktempdir [string] 5134b0ead49Smrg# Make a temporary directory that won't clash with other running 5144b0ead49Smrg# libtool processes, and avoids race conditions if possible. If 5154b0ead49Smrg# given, STRING is the basename for that directory. 5164b0ead49Smrgfunc_mktempdir () 5174b0ead49Smrg{ 5184b0ead49Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 5194b0ead49Smrg 52049dc963fSmrg if test "$opt_dry_run" = ":"; then 5214b0ead49Smrg # Return a directory name, but don't create it in dry-run mode 5224b0ead49Smrg my_tmpdir="${my_template}-$$" 5234b0ead49Smrg else 5244b0ead49Smrg 5254b0ead49Smrg # If mktemp works, use that first and foremost 5264b0ead49Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 5274b0ead49Smrg 5284b0ead49Smrg if test ! -d "$my_tmpdir"; then 52949dc963fSmrg # Failing that, at least try and use $RANDOM to avoid a race 53049dc963fSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 5314b0ead49Smrg 53249dc963fSmrg save_mktempdir_umask=`umask` 53349dc963fSmrg umask 0077 53449dc963fSmrg $MKDIR "$my_tmpdir" 53549dc963fSmrg umask $save_mktempdir_umask 5364b0ead49Smrg fi 5374b0ead49Smrg 5384b0ead49Smrg # If we're not in dry-run mode, bomb out on failure 53949dc963fSmrg test -d "$my_tmpdir" || \ 54049dc963fSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 5414b0ead49Smrg fi 5424b0ead49Smrg 5437aa89044Smrg $ECHO "$my_tmpdir" 5444b0ead49Smrg} 5454b0ead49Smrg 5464b0ead49Smrg 54749dc963fSmrg# func_quote_for_eval arg 54849dc963fSmrg# Aesthetically quote ARG to be evaled later. 54949dc963fSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 55049dc963fSmrg# is double-quoted, suitable for a subsequent eval, whereas 55149dc963fSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 55249dc963fSmrg# which are still active within double quotes backslashified. 55349dc963fSmrgfunc_quote_for_eval () 5544b0ead49Smrg{ 55549dc963fSmrg case $1 in 55649dc963fSmrg *[\\\`\"\$]*) 5577aa89044Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 55849dc963fSmrg *) 55949dc963fSmrg func_quote_for_eval_unquoted_result="$1" ;; 56049dc963fSmrg esac 56149dc963fSmrg 56249dc963fSmrg case $func_quote_for_eval_unquoted_result in 56349dc963fSmrg # Double-quote args containing shell metacharacters to delay 56449dc963fSmrg # word splitting, command substitution and and variable 56549dc963fSmrg # expansion for a subsequent eval. 56649dc963fSmrg # Many Bourne shells cannot handle close brackets correctly 56749dc963fSmrg # in scan sets, so we specify it separately. 56849dc963fSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 56949dc963fSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 57049dc963fSmrg ;; 57149dc963fSmrg *) 57249dc963fSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 5734b0ead49Smrg esac 5744b0ead49Smrg} 5754b0ead49Smrg 5764b0ead49Smrg 57749dc963fSmrg# func_quote_for_expand arg 57849dc963fSmrg# Aesthetically quote ARG to be evaled later; same as above, 57949dc963fSmrg# but do not quote variable references. 58049dc963fSmrgfunc_quote_for_expand () 5814b0ead49Smrg{ 58249dc963fSmrg case $1 in 58349dc963fSmrg *[\\\`\"]*) 5847aa89044Smrg my_arg=`$ECHO "$1" | $SED \ 58549dc963fSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 5864b0ead49Smrg *) 58749dc963fSmrg my_arg="$1" ;; 58849dc963fSmrg esac 58949dc963fSmrg 59049dc963fSmrg case $my_arg in 59149dc963fSmrg # Double-quote args containing shell metacharacters to delay 59249dc963fSmrg # word splitting and command substitution for a subsequent eval. 59349dc963fSmrg # Many Bourne shells cannot handle close brackets correctly 59449dc963fSmrg # in scan sets, so we specify it separately. 59549dc963fSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 59649dc963fSmrg my_arg="\"$my_arg\"" 59749dc963fSmrg ;; 59849dc963fSmrg esac 59949dc963fSmrg 60049dc963fSmrg func_quote_for_expand_result="$my_arg" 6014b0ead49Smrg} 6024b0ead49Smrg 6034b0ead49Smrg 60449dc963fSmrg# func_show_eval cmd [fail_exp] 60549dc963fSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 60649dc963fSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 60749dc963fSmrg# is given, then evaluate it. 60849dc963fSmrgfunc_show_eval () 6094b0ead49Smrg{ 61049dc963fSmrg my_cmd="$1" 61149dc963fSmrg my_fail_exp="${2-:}" 6124b0ead49Smrg 61349dc963fSmrg ${opt_silent-false} || { 61449dc963fSmrg func_quote_for_expand "$my_cmd" 61549dc963fSmrg eval "func_echo $func_quote_for_expand_result" 61649dc963fSmrg } 61749dc963fSmrg 61849dc963fSmrg if ${opt_dry_run-false}; then :; else 61949dc963fSmrg eval "$my_cmd" 62049dc963fSmrg my_status=$? 62149dc963fSmrg if test "$my_status" -eq 0; then :; else 62249dc963fSmrg eval "(exit $my_status); $my_fail_exp" 62349dc963fSmrg fi 6244b0ead49Smrg fi 6254b0ead49Smrg} 6264b0ead49Smrg 62749dc963fSmrg 62849dc963fSmrg# func_show_eval_locale cmd [fail_exp] 62949dc963fSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 63049dc963fSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 63149dc963fSmrg# is given, then evaluate it. Use the saved locale for evaluation. 63249dc963fSmrgfunc_show_eval_locale () 6334b0ead49Smrg{ 63449dc963fSmrg my_cmd="$1" 63549dc963fSmrg my_fail_exp="${2-:}" 63649dc963fSmrg 63749dc963fSmrg ${opt_silent-false} || { 63849dc963fSmrg func_quote_for_expand "$my_cmd" 63949dc963fSmrg eval "func_echo $func_quote_for_expand_result" 64049dc963fSmrg } 64149dc963fSmrg 64249dc963fSmrg if ${opt_dry_run-false}; then :; else 64349dc963fSmrg eval "$lt_user_locale 64449dc963fSmrg $my_cmd" 64549dc963fSmrg my_status=$? 64649dc963fSmrg eval "$lt_safe_locale" 64749dc963fSmrg if test "$my_status" -eq 0; then :; else 64849dc963fSmrg eval "(exit $my_status); $my_fail_exp" 64949dc963fSmrg fi 6504b0ead49Smrg fi 65149dc963fSmrg} 6524b0ead49Smrg 6534b0ead49Smrg 65449dc963fSmrg# func_version 65549dc963fSmrg# Echo version message to standard output and exit. 65649dc963fSmrgfunc_version () 65749dc963fSmrg{ 6587aa89044Smrg $SED -n '/(C)/!b go 6597aa89044Smrg :more 6607aa89044Smrg /\./!{ 6617aa89044Smrg N 6627aa89044Smrg s/\n# / / 6637aa89044Smrg b more 6647aa89044Smrg } 6657aa89044Smrg :go 6667aa89044Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 66749dc963fSmrg s/^# // 66849dc963fSmrg s/^# *$// 66949dc963fSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 67049dc963fSmrg p 67149dc963fSmrg }' < "$progpath" 67249dc963fSmrg exit $? 67349dc963fSmrg} 67449dc963fSmrg 67549dc963fSmrg# func_usage 67649dc963fSmrg# Echo short help message to standard output and exit. 67749dc963fSmrgfunc_usage () 67849dc963fSmrg{ 6797aa89044Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 68049dc963fSmrg s/^# // 68149dc963fSmrg s/^# *$// 68249dc963fSmrg s/\$progname/'$progname'/ 68349dc963fSmrg p 68449dc963fSmrg }' < "$progpath" 6857aa89044Smrg echo 68649dc963fSmrg $ECHO "run \`$progname --help | more' for full usage" 68749dc963fSmrg exit $? 68849dc963fSmrg} 68949dc963fSmrg 6907aa89044Smrg# func_help [NOEXIT] 6917aa89044Smrg# Echo long help message to standard output and exit, 6927aa89044Smrg# unless 'noexit' is passed as argument. 69349dc963fSmrgfunc_help () 69449dc963fSmrg{ 69549dc963fSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 69649dc963fSmrg s/^# // 69749dc963fSmrg s/^# *$// 69849dc963fSmrg s*\$progname*'$progname'* 69949dc963fSmrg s*\$host*'"$host"'* 70049dc963fSmrg s*\$SHELL*'"$SHELL"'* 70149dc963fSmrg s*\$LTCC*'"$LTCC"'* 70249dc963fSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 70349dc963fSmrg s*\$LD*'"$LD"'* 70449dc963fSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 70549dc963fSmrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 70649dc963fSmrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 70749dc963fSmrg p 70849dc963fSmrg }' < "$progpath" 7097aa89044Smrg ret=$? 7107aa89044Smrg if test -z "$1"; then 7117aa89044Smrg exit $ret 7127aa89044Smrg fi 71349dc963fSmrg} 71449dc963fSmrg 71549dc963fSmrg# func_missing_arg argname 71649dc963fSmrg# Echo program name prefixed message to standard error and set global 71749dc963fSmrg# exit_cmd. 71849dc963fSmrgfunc_missing_arg () 71949dc963fSmrg{ 7207aa89044Smrg func_error "missing argument for $1." 72149dc963fSmrg exit_cmd=exit 7224b0ead49Smrg} 7234b0ead49Smrg 72449dc963fSmrgexit_cmd=: 7254b0ead49Smrg 7264b0ead49Smrg 72749dc963fSmrg 72849dc963fSmrg 72949dc963fSmrg 7304b0ead49Smrg 73149dc963fSmrgmagic="%%%MAGIC variable%%%" 73249dc963fSmrgmagic_exe="%%%MAGIC EXE variable%%%" 7334b0ead49Smrg 73449dc963fSmrg# Global variables. 73549dc963fSmrg# $mode is unset 73649dc963fSmrgnonopt= 73749dc963fSmrgexecute_dlfiles= 73849dc963fSmrgpreserve_args= 73949dc963fSmrglo2o="s/\\.lo\$/.${objext}/" 74049dc963fSmrgo2lo="s/\\.${objext}\$/.lo/" 74149dc963fSmrgextracted_archives= 74249dc963fSmrgextracted_serial=0 7434b0ead49Smrg 74449dc963fSmrgopt_dry_run=false 74549dc963fSmrgopt_duplicate_deps=false 74649dc963fSmrgopt_silent=false 74749dc963fSmrgopt_debug=: 7484b0ead49Smrg 74949dc963fSmrg# If this variable is set in any of the actions, the command in it 75049dc963fSmrg# will be execed at the end. This prevents here-documents from being 75149dc963fSmrg# left over by shells. 75249dc963fSmrgexec_cmd= 75349dc963fSmrg 75449dc963fSmrg# func_fatal_configuration arg... 75549dc963fSmrg# Echo program name prefixed message to standard error, followed by 75649dc963fSmrg# a configuration failure hint, and exit. 75749dc963fSmrgfunc_fatal_configuration () 75849dc963fSmrg{ 75949dc963fSmrg func_error ${1+"$@"} 76049dc963fSmrg func_error "See the $PACKAGE documentation for more information." 76149dc963fSmrg func_fatal_error "Fatal configuration error." 76249dc963fSmrg} 7634b0ead49Smrg 76452b01e16Smrg 76549dc963fSmrg# func_config 76649dc963fSmrg# Display the configuration for all the tags in this script. 76749dc963fSmrgfunc_config () 76849dc963fSmrg{ 76949dc963fSmrg re_begincf='^# ### BEGIN LIBTOOL' 77049dc963fSmrg re_endcf='^# ### END LIBTOOL' 77149dc963fSmrg 77249dc963fSmrg # Default configuration. 77349dc963fSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 7744b0ead49Smrg 7754b0ead49Smrg # Now print the configurations for the tags. 7764b0ead49Smrg for tagname in $taglist; do 77749dc963fSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 7784b0ead49Smrg done 7794b0ead49Smrg 78049dc963fSmrg exit $? 78149dc963fSmrg} 7824b0ead49Smrg 78349dc963fSmrg# func_features 78449dc963fSmrg# Display the features supported by this script. 78549dc963fSmrgfunc_features () 78649dc963fSmrg{ 7877aa89044Smrg echo "host: $host" 7884b0ead49Smrg if test "$build_libtool_libs" = yes; then 7897aa89044Smrg echo "enable shared libraries" 7904b0ead49Smrg else 7917aa89044Smrg echo "disable shared libraries" 7924b0ead49Smrg fi 7934b0ead49Smrg if test "$build_old_libs" = yes; then 7947aa89044Smrg echo "enable static libraries" 7954b0ead49Smrg else 7967aa89044Smrg echo "disable static libraries" 7974b0ead49Smrg fi 79849dc963fSmrg 7994b0ead49Smrg exit $? 80049dc963fSmrg} 8014b0ead49Smrg 80249dc963fSmrg# func_enable_tag tagname 80349dc963fSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 80449dc963fSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 80549dc963fSmrg# variable here. 80649dc963fSmrgfunc_enable_tag () 80749dc963fSmrg{ 80849dc963fSmrg # Global variable: 80949dc963fSmrg tagname="$1" 8104b0ead49Smrg 81149dc963fSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 81249dc963fSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 81349dc963fSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 8144b0ead49Smrg 81549dc963fSmrg # Validate tagname. 81649dc963fSmrg case $tagname in 81749dc963fSmrg *[!-_A-Za-z0-9,/]*) 81849dc963fSmrg func_fatal_error "invalid tag name: $tagname" 81949dc963fSmrg ;; 82049dc963fSmrg esac 8214b0ead49Smrg 82249dc963fSmrg # Don't test for the "default" C tag, as we know it's 82349dc963fSmrg # there but not specially marked. 82449dc963fSmrg case $tagname in 82549dc963fSmrg CC) ;; 82649dc963fSmrg *) 82749dc963fSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 82849dc963fSmrg taglist="$taglist $tagname" 82949dc963fSmrg 83049dc963fSmrg # Evaluate the configuration. Be careful to quote the path 83149dc963fSmrg # and the sed script, to avoid splitting on whitespace, but 83249dc963fSmrg # also don't use non-portable quotes within backquotes within 83349dc963fSmrg # quotes we have to do it in 2 steps: 83449dc963fSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 83549dc963fSmrg eval "$extractedcf" 83649dc963fSmrg else 83749dc963fSmrg func_error "ignoring unknown tag $tagname" 83849dc963fSmrg fi 83949dc963fSmrg ;; 84049dc963fSmrg esac 84149dc963fSmrg} 84249dc963fSmrg 84349dc963fSmrg# Parse options once, thoroughly. This comes as soon as possible in 84449dc963fSmrg# the script to make things like `libtool --version' happen quickly. 84549dc963fSmrg{ 8464b0ead49Smrg 84749dc963fSmrg # Shorthand for --mode=foo, only valid as the first argument 84849dc963fSmrg case $1 in 84949dc963fSmrg clean|clea|cle|cl) 85049dc963fSmrg shift; set dummy --mode clean ${1+"$@"}; shift 8514b0ead49Smrg ;; 85249dc963fSmrg compile|compil|compi|comp|com|co|c) 85349dc963fSmrg shift; set dummy --mode compile ${1+"$@"}; shift 8544b0ead49Smrg ;; 85549dc963fSmrg execute|execut|execu|exec|exe|ex|e) 85649dc963fSmrg shift; set dummy --mode execute ${1+"$@"}; shift 8574b0ead49Smrg ;; 85849dc963fSmrg finish|finis|fini|fin|fi|f) 85949dc963fSmrg shift; set dummy --mode finish ${1+"$@"}; shift 8604b0ead49Smrg ;; 86149dc963fSmrg install|instal|insta|inst|ins|in|i) 86249dc963fSmrg shift; set dummy --mode install ${1+"$@"}; shift 86349dc963fSmrg ;; 86449dc963fSmrg link|lin|li|l) 86549dc963fSmrg shift; set dummy --mode link ${1+"$@"}; shift 86649dc963fSmrg ;; 86749dc963fSmrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 86849dc963fSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 8694b0ead49Smrg ;; 8704b0ead49Smrg esac 8714b0ead49Smrg 87249dc963fSmrg # Parse non-mode specific arguments: 87349dc963fSmrg while test "$#" -gt 0; do 87449dc963fSmrg opt="$1" 87549dc963fSmrg shift 8764b0ead49Smrg 87749dc963fSmrg case $opt in 87849dc963fSmrg --config) func_config ;; 8794b0ead49Smrg 88049dc963fSmrg --debug) preserve_args="$preserve_args $opt" 88149dc963fSmrg func_echo "enabling shell trace mode" 88249dc963fSmrg opt_debug='set -x' 88349dc963fSmrg $opt_debug 88449dc963fSmrg ;; 8854b0ead49Smrg 88649dc963fSmrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 88749dc963fSmrg execute_dlfiles="$execute_dlfiles $1" 88849dc963fSmrg shift 88949dc963fSmrg ;; 8904b0ead49Smrg 89149dc963fSmrg --dry-run | -n) opt_dry_run=: ;; 89249dc963fSmrg --features) func_features ;; 89349dc963fSmrg --finish) mode="finish" ;; 89449dc963fSmrg 89549dc963fSmrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 89649dc963fSmrg case $1 in 89749dc963fSmrg # Valid mode arguments: 89849dc963fSmrg clean) ;; 89949dc963fSmrg compile) ;; 90049dc963fSmrg execute) ;; 90149dc963fSmrg finish) ;; 90249dc963fSmrg install) ;; 90349dc963fSmrg link) ;; 90449dc963fSmrg relink) ;; 90549dc963fSmrg uninstall) ;; 90649dc963fSmrg 90749dc963fSmrg # Catch anything else as an error 90849dc963fSmrg *) func_error "invalid argument for $opt" 90949dc963fSmrg exit_cmd=exit 91049dc963fSmrg break 91149dc963fSmrg ;; 91249dc963fSmrg esac 91349dc963fSmrg 91449dc963fSmrg mode="$1" 91549dc963fSmrg shift 91649dc963fSmrg ;; 91749dc963fSmrg 91849dc963fSmrg --preserve-dup-deps) 91949dc963fSmrg opt_duplicate_deps=: ;; 92049dc963fSmrg 92149dc963fSmrg --quiet|--silent) preserve_args="$preserve_args $opt" 92249dc963fSmrg opt_silent=: 9237aa89044Smrg opt_verbose=false 9247aa89044Smrg ;; 9257aa89044Smrg 9267aa89044Smrg --no-quiet|--no-silent) 9277aa89044Smrg preserve_args="$preserve_args $opt" 9287aa89044Smrg opt_silent=false 92949dc963fSmrg ;; 93049dc963fSmrg 93149dc963fSmrg --verbose| -v) preserve_args="$preserve_args $opt" 93249dc963fSmrg opt_silent=false 9337aa89044Smrg opt_verbose=: 9347aa89044Smrg ;; 9357aa89044Smrg 9367aa89044Smrg --no-verbose) preserve_args="$preserve_args $opt" 9377aa89044Smrg opt_verbose=false 93849dc963fSmrg ;; 93949dc963fSmrg 94049dc963fSmrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 94149dc963fSmrg preserve_args="$preserve_args $opt $1" 94249dc963fSmrg func_enable_tag "$1" # tagname is set here 94349dc963fSmrg shift 94449dc963fSmrg ;; 94549dc963fSmrg 94649dc963fSmrg # Separate optargs to long options: 94749dc963fSmrg -dlopen=*|--mode=*|--tag=*) 94849dc963fSmrg func_opt_split "$opt" 94949dc963fSmrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 95049dc963fSmrg shift 95149dc963fSmrg ;; 95249dc963fSmrg 95349dc963fSmrg -\?|-h) func_usage ;; 95449dc963fSmrg --help) opt_help=: ;; 9557aa89044Smrg --help-all) opt_help=': help-all' ;; 95649dc963fSmrg --version) func_version ;; 95749dc963fSmrg 95849dc963fSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 95949dc963fSmrg 96049dc963fSmrg *) nonopt="$opt" 96149dc963fSmrg break 96249dc963fSmrg ;; 96349dc963fSmrg esac 96449dc963fSmrg done 96549dc963fSmrg 96649dc963fSmrg 96749dc963fSmrg case $host in 96849dc963fSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 96949dc963fSmrg # don't eliminate duplications in $postdeps and $predeps 97049dc963fSmrg opt_duplicate_compiler_generated_deps=: 9714b0ead49Smrg ;; 9724b0ead49Smrg *) 97349dc963fSmrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 97449dc963fSmrg ;; 97549dc963fSmrg esac 9764b0ead49Smrg 97749dc963fSmrg # Having warned about all mis-specified options, bail out if 97849dc963fSmrg # anything was wrong. 97949dc963fSmrg $exit_cmd $EXIT_FAILURE 98049dc963fSmrg} 98149dc963fSmrg 98249dc963fSmrg# func_check_version_match 98349dc963fSmrg# Ensure that we are using m4 macros, and libtool script from the same 98449dc963fSmrg# release of libtool. 98549dc963fSmrgfunc_check_version_match () 98649dc963fSmrg{ 98749dc963fSmrg if test "$package_revision" != "$macro_revision"; then 98849dc963fSmrg if test "$VERSION" != "$macro_version"; then 98949dc963fSmrg if test -z "$macro_version"; then 99049dc963fSmrg cat >&2 <<_LT_EOF 99149dc963fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 99249dc963fSmrg$progname: definition of this LT_INIT comes from an older release. 99349dc963fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 99449dc963fSmrg$progname: and run autoconf again. 99549dc963fSmrg_LT_EOF 99649dc963fSmrg else 99749dc963fSmrg cat >&2 <<_LT_EOF 99849dc963fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 99949dc963fSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 100049dc963fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 100149dc963fSmrg$progname: and run autoconf again. 100249dc963fSmrg_LT_EOF 10034b0ead49Smrg fi 100449dc963fSmrg else 100549dc963fSmrg cat >&2 <<_LT_EOF 100649dc963fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 100749dc963fSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 100849dc963fSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 100949dc963fSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 101049dc963fSmrg_LT_EOF 101149dc963fSmrg fi 101249dc963fSmrg 101349dc963fSmrg exit $EXIT_MISMATCH 101449dc963fSmrg fi 101549dc963fSmrg} 101649dc963fSmrg 101749dc963fSmrg 101849dc963fSmrg## ----------- ## 101949dc963fSmrg## Main. ## 102049dc963fSmrg## ----------- ## 102149dc963fSmrg 102249dc963fSmrg$opt_help || { 102349dc963fSmrg # Sanity checks first: 102449dc963fSmrg func_check_version_match 102549dc963fSmrg 102649dc963fSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 102749dc963fSmrg func_fatal_configuration "not configured to build any kind of library" 10284b0ead49Smrg fi 10294b0ead49Smrg 103049dc963fSmrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 103149dc963fSmrg 103249dc963fSmrg 103349dc963fSmrg # Darwin sucks 103449dc963fSmrg eval std_shrext=\"$shrext_cmds\" 103549dc963fSmrg 103649dc963fSmrg 10374b0ead49Smrg # Only execute mode is allowed to have -dlopen flags. 10384b0ead49Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 103949dc963fSmrg func_error "unrecognized option \`-dlopen'" 104049dc963fSmrg $ECHO "$help" 1>&2 10414b0ead49Smrg exit $EXIT_FAILURE 10424b0ead49Smrg fi 10434b0ead49Smrg 10444b0ead49Smrg # Change the help message to a mode-specific one. 10454b0ead49Smrg generic_help="$help" 104649dc963fSmrg help="Try \`$progname --help --mode=$mode' for more information." 104749dc963fSmrg} 10484b0ead49Smrg 10494b0ead49Smrg 105049dc963fSmrg# func_lalib_p file 105149dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 105249dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 105349dc963fSmrg# determined imposters. 105449dc963fSmrgfunc_lalib_p () 105549dc963fSmrg{ 105649dc963fSmrg test -f "$1" && 105749dc963fSmrg $SED -e 4q "$1" 2>/dev/null \ 105849dc963fSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 105949dc963fSmrg} 10604b0ead49Smrg 106149dc963fSmrg# func_lalib_unsafe_p file 106249dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 106349dc963fSmrg# This function implements the same check as func_lalib_p without 106449dc963fSmrg# resorting to external programs. To this end, it redirects stdin and 106549dc963fSmrg# closes it afterwards, without saving the original file descriptor. 106649dc963fSmrg# As a safety measure, use it only where a negative result would be 106749dc963fSmrg# fatal anyway. Works if `file' does not exist. 106849dc963fSmrgfunc_lalib_unsafe_p () 106949dc963fSmrg{ 107049dc963fSmrg lalib_p=no 107149dc963fSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 107249dc963fSmrg for lalib_p_l in 1 2 3 4 107349dc963fSmrg do 107449dc963fSmrg read lalib_p_line 107549dc963fSmrg case "$lalib_p_line" in 107649dc963fSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 107749dc963fSmrg esac 107849dc963fSmrg done 107949dc963fSmrg exec 0<&5 5<&- 108049dc963fSmrg fi 108149dc963fSmrg test "$lalib_p" = yes 108249dc963fSmrg} 10834b0ead49Smrg 108449dc963fSmrg# func_ltwrapper_script_p file 108549dc963fSmrg# True iff FILE is a libtool wrapper script 108649dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 108749dc963fSmrg# determined imposters. 108849dc963fSmrgfunc_ltwrapper_script_p () 108949dc963fSmrg{ 109049dc963fSmrg func_lalib_p "$1" 109149dc963fSmrg} 10924b0ead49Smrg 109349dc963fSmrg# func_ltwrapper_executable_p file 109449dc963fSmrg# True iff FILE is a libtool wrapper executable 109549dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 109649dc963fSmrg# determined imposters. 109749dc963fSmrgfunc_ltwrapper_executable_p () 109849dc963fSmrg{ 109949dc963fSmrg func_ltwrapper_exec_suffix= 110049dc963fSmrg case $1 in 110149dc963fSmrg *.exe) ;; 110249dc963fSmrg *) func_ltwrapper_exec_suffix=.exe ;; 110349dc963fSmrg esac 110449dc963fSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 110549dc963fSmrg} 11064b0ead49Smrg 110749dc963fSmrg# func_ltwrapper_scriptname file 110849dc963fSmrg# Assumes file is an ltwrapper_executable 110949dc963fSmrg# uses $file to determine the appropriate filename for a 111049dc963fSmrg# temporary ltwrapper_script. 111149dc963fSmrgfunc_ltwrapper_scriptname () 111249dc963fSmrg{ 111349dc963fSmrg func_ltwrapper_scriptname_result="" 111449dc963fSmrg if func_ltwrapper_executable_p "$1"; then 111549dc963fSmrg func_dirname_and_basename "$1" "" "." 111649dc963fSmrg func_stripname '' '.exe' "$func_basename_result" 111749dc963fSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 111849dc963fSmrg fi 111949dc963fSmrg} 112049dc963fSmrg 112149dc963fSmrg# func_ltwrapper_p file 112249dc963fSmrg# True iff FILE is a libtool wrapper script or wrapper executable 112349dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 112449dc963fSmrg# determined imposters. 112549dc963fSmrgfunc_ltwrapper_p () 112649dc963fSmrg{ 112749dc963fSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 112849dc963fSmrg} 112949dc963fSmrg 113049dc963fSmrg 113149dc963fSmrg# func_execute_cmds commands fail_cmd 113249dc963fSmrg# Execute tilde-delimited COMMANDS. 113349dc963fSmrg# If FAIL_CMD is given, eval that upon failure. 113449dc963fSmrg# FAIL_CMD may read-access the current command in variable CMD! 113549dc963fSmrgfunc_execute_cmds () 113649dc963fSmrg{ 113749dc963fSmrg $opt_debug 113849dc963fSmrg save_ifs=$IFS; IFS='~' 113949dc963fSmrg for cmd in $1; do 114049dc963fSmrg IFS=$save_ifs 114149dc963fSmrg eval cmd=\"$cmd\" 114249dc963fSmrg func_show_eval "$cmd" "${2-:}" 114349dc963fSmrg done 114449dc963fSmrg IFS=$save_ifs 114549dc963fSmrg} 114649dc963fSmrg 114749dc963fSmrg 114849dc963fSmrg# func_source file 114949dc963fSmrg# Source FILE, adding directory component if necessary. 115049dc963fSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 115149dc963fSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 115249dc963fSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 115349dc963fSmrg# `FILE.' does not work on cygwin managed mounts. 115449dc963fSmrgfunc_source () 115549dc963fSmrg{ 115649dc963fSmrg $opt_debug 115749dc963fSmrg case $1 in 115849dc963fSmrg */* | *\\*) . "$1" ;; 115949dc963fSmrg *) . "./$1" ;; 116049dc963fSmrg esac 116149dc963fSmrg} 116249dc963fSmrg 116349dc963fSmrg 116449dc963fSmrg# func_infer_tag arg 116549dc963fSmrg# Infer tagged configuration to use if any are available and 116649dc963fSmrg# if one wasn't chosen via the "--tag" command line option. 116749dc963fSmrg# Only attempt this if the compiler in the base compile 116849dc963fSmrg# command doesn't match the default compiler. 116949dc963fSmrg# arg is usually of the form 'gcc ...' 117049dc963fSmrgfunc_infer_tag () 117149dc963fSmrg{ 117249dc963fSmrg $opt_debug 117349dc963fSmrg if test -n "$available_tags" && test -z "$tagname"; then 117449dc963fSmrg CC_quoted= 117549dc963fSmrg for arg in $CC; do 117649dc963fSmrg func_quote_for_eval "$arg" 117749dc963fSmrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 117849dc963fSmrg done 11797aa89044Smrg CC_expanded=`func_echo_all $CC` 11807aa89044Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 118149dc963fSmrg case $@ in 118249dc963fSmrg # Blanks in the command may have been stripped by the calling shell, 118349dc963fSmrg # but not from the CC environment variable when configure was run. 11847aa89044Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 11857aa89044Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 118649dc963fSmrg # Blanks at the start of $base_compile will cause this to fail 118749dc963fSmrg # if we don't check for them as well. 118849dc963fSmrg *) 118949dc963fSmrg for z in $available_tags; do 119049dc963fSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 119149dc963fSmrg # Evaluate the configuration. 119249dc963fSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 119349dc963fSmrg CC_quoted= 119449dc963fSmrg for arg in $CC; do 119549dc963fSmrg # Double-quote args containing other shell metacharacters. 119649dc963fSmrg func_quote_for_eval "$arg" 119749dc963fSmrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 119849dc963fSmrg done 11997aa89044Smrg CC_expanded=`func_echo_all $CC` 12007aa89044Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 120149dc963fSmrg case "$@ " in 12027aa89044Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 12037aa89044Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 120449dc963fSmrg # The compiler in the base compile command matches 120549dc963fSmrg # the one in the tagged configuration. 120649dc963fSmrg # Assume this is the tagged configuration we want. 120749dc963fSmrg tagname=$z 120849dc963fSmrg break 120949dc963fSmrg ;; 121049dc963fSmrg esac 121149dc963fSmrg fi 121249dc963fSmrg done 121349dc963fSmrg # If $tagname still isn't set, then no tagged configuration 121449dc963fSmrg # was found and let the user know that the "--tag" command 121549dc963fSmrg # line option must be used. 121649dc963fSmrg if test -z "$tagname"; then 121749dc963fSmrg func_echo "unable to infer tagged configuration" 121849dc963fSmrg func_fatal_error "specify a tag with \`--tag'" 121949dc963fSmrg# else 122049dc963fSmrg# func_verbose "using $tagname tagged configuration" 122149dc963fSmrg fi 122249dc963fSmrg ;; 122349dc963fSmrg esac 122449dc963fSmrg fi 122549dc963fSmrg} 122649dc963fSmrg 122749dc963fSmrg 122849dc963fSmrg 122949dc963fSmrg# func_write_libtool_object output_name pic_name nonpic_name 123049dc963fSmrg# Create a libtool object file (analogous to a ".la" file), 123149dc963fSmrg# but don't create it if we're doing a dry run. 123249dc963fSmrgfunc_write_libtool_object () 123349dc963fSmrg{ 123449dc963fSmrg write_libobj=${1} 123549dc963fSmrg if test "$build_libtool_libs" = yes; then 123649dc963fSmrg write_lobj=\'${2}\' 123749dc963fSmrg else 123849dc963fSmrg write_lobj=none 123949dc963fSmrg fi 124049dc963fSmrg 124149dc963fSmrg if test "$build_old_libs" = yes; then 124249dc963fSmrg write_oldobj=\'${3}\' 124349dc963fSmrg else 124449dc963fSmrg write_oldobj=none 124549dc963fSmrg fi 124649dc963fSmrg 124749dc963fSmrg $opt_dry_run || { 124849dc963fSmrg cat >${write_libobj}T <<EOF 124949dc963fSmrg# $write_libobj - a libtool object file 125049dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 125149dc963fSmrg# 125249dc963fSmrg# Please DO NOT delete this file! 125349dc963fSmrg# It is necessary for linking the library. 125449dc963fSmrg 125549dc963fSmrg# Name of the PIC object. 125649dc963fSmrgpic_object=$write_lobj 125749dc963fSmrg 125849dc963fSmrg# Name of the non-PIC object 125949dc963fSmrgnon_pic_object=$write_oldobj 126049dc963fSmrg 126149dc963fSmrgEOF 126249dc963fSmrg $MV "${write_libobj}T" "${write_libobj}" 126349dc963fSmrg } 126449dc963fSmrg} 126549dc963fSmrg 126649dc963fSmrg# func_mode_compile arg... 126749dc963fSmrgfunc_mode_compile () 126849dc963fSmrg{ 126949dc963fSmrg $opt_debug 127049dc963fSmrg # Get the compilation command and the source file. 127149dc963fSmrg base_compile= 127249dc963fSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 127349dc963fSmrg suppress_opt=yes 127449dc963fSmrg suppress_output= 127549dc963fSmrg arg_mode=normal 127649dc963fSmrg libobj= 127749dc963fSmrg later= 127849dc963fSmrg pie_flag= 127949dc963fSmrg 128049dc963fSmrg for arg 128149dc963fSmrg do 128249dc963fSmrg case $arg_mode in 128349dc963fSmrg arg ) 128449dc963fSmrg # do not "continue". Instead, add this to base_compile 128549dc963fSmrg lastarg="$arg" 128649dc963fSmrg arg_mode=normal 128749dc963fSmrg ;; 128849dc963fSmrg 128949dc963fSmrg target ) 129049dc963fSmrg libobj="$arg" 129149dc963fSmrg arg_mode=normal 129249dc963fSmrg continue 129349dc963fSmrg ;; 129449dc963fSmrg 129549dc963fSmrg normal ) 129649dc963fSmrg # Accept any command-line options. 129749dc963fSmrg case $arg in 129849dc963fSmrg -o) 129949dc963fSmrg test -n "$libobj" && \ 130049dc963fSmrg func_fatal_error "you cannot specify \`-o' more than once" 130149dc963fSmrg arg_mode=target 130249dc963fSmrg continue 130349dc963fSmrg ;; 130449dc963fSmrg 130549dc963fSmrg -pie | -fpie | -fPIE) 130649dc963fSmrg pie_flag="$pie_flag $arg" 130749dc963fSmrg continue 130849dc963fSmrg ;; 130949dc963fSmrg 131049dc963fSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 131149dc963fSmrg later="$later $arg" 131249dc963fSmrg continue 131349dc963fSmrg ;; 131449dc963fSmrg 131549dc963fSmrg -no-suppress) 13164b0ead49Smrg suppress_opt=no 13174b0ead49Smrg continue 13184b0ead49Smrg ;; 13194b0ead49Smrg 13204b0ead49Smrg -Xcompiler) 13214b0ead49Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 13224b0ead49Smrg continue # The current "srcfile" will either be retained or 13234b0ead49Smrg ;; # replaced later. I would guess that would be a bug. 13244b0ead49Smrg 13254b0ead49Smrg -Wc,*) 132649dc963fSmrg func_stripname '-Wc,' '' "$arg" 132749dc963fSmrg args=$func_stripname_result 13284b0ead49Smrg lastarg= 13294b0ead49Smrg save_ifs="$IFS"; IFS=',' 133049dc963fSmrg for arg in $args; do 13314b0ead49Smrg IFS="$save_ifs" 133249dc963fSmrg func_quote_for_eval "$arg" 133349dc963fSmrg lastarg="$lastarg $func_quote_for_eval_result" 13344b0ead49Smrg done 13354b0ead49Smrg IFS="$save_ifs" 133649dc963fSmrg func_stripname ' ' '' "$lastarg" 133749dc963fSmrg lastarg=$func_stripname_result 13384b0ead49Smrg 13394b0ead49Smrg # Add the arguments to base_compile. 13404b0ead49Smrg base_compile="$base_compile $lastarg" 13414b0ead49Smrg continue 13424b0ead49Smrg ;; 13434b0ead49Smrg 134449dc963fSmrg *) 13454b0ead49Smrg # Accept the current argument as the source file. 13464b0ead49Smrg # The previous "srcfile" becomes the current argument. 13474b0ead49Smrg # 13484b0ead49Smrg lastarg="$srcfile" 13494b0ead49Smrg srcfile="$arg" 13504b0ead49Smrg ;; 13514b0ead49Smrg esac # case $arg 13524b0ead49Smrg ;; 13534b0ead49Smrg esac # case $arg_mode 13544b0ead49Smrg 13554b0ead49Smrg # Aesthetically quote the previous argument. 135649dc963fSmrg func_quote_for_eval "$lastarg" 135749dc963fSmrg base_compile="$base_compile $func_quote_for_eval_result" 13584b0ead49Smrg done # for arg 13594b0ead49Smrg 13604b0ead49Smrg case $arg_mode in 13614b0ead49Smrg arg) 136249dc963fSmrg func_fatal_error "you must specify an argument for -Xcompile" 13634b0ead49Smrg ;; 13644b0ead49Smrg target) 136549dc963fSmrg func_fatal_error "you must specify a target with \`-o'" 13664b0ead49Smrg ;; 13674b0ead49Smrg *) 13684b0ead49Smrg # Get the name of the library object. 136949dc963fSmrg test -z "$libobj" && { 137049dc963fSmrg func_basename "$srcfile" 137149dc963fSmrg libobj="$func_basename_result" 137249dc963fSmrg } 13734b0ead49Smrg ;; 13744b0ead49Smrg esac 13754b0ead49Smrg 13764b0ead49Smrg # Recognize several different file suffixes. 13774b0ead49Smrg # If the user specifies -o file.o, it is replaced with file.lo 13784b0ead49Smrg case $libobj in 137949dc963fSmrg *.[cCFSifmso] | \ 138049dc963fSmrg *.ada | *.adb | *.ads | *.asm | \ 138149dc963fSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 13827aa89044Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 138349dc963fSmrg func_xform "$libobj" 138449dc963fSmrg libobj=$func_xform_result 138549dc963fSmrg ;; 13864b0ead49Smrg esac 13874b0ead49Smrg 13884b0ead49Smrg case $libobj in 138949dc963fSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 13904b0ead49Smrg *) 139149dc963fSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 13924b0ead49Smrg ;; 13934b0ead49Smrg esac 13944b0ead49Smrg 13954b0ead49Smrg func_infer_tag $base_compile 13964b0ead49Smrg 13974b0ead49Smrg for arg in $later; do 13984b0ead49Smrg case $arg in 139949dc963fSmrg -shared) 140049dc963fSmrg test "$build_libtool_libs" != yes && \ 140149dc963fSmrg func_fatal_configuration "can not build a shared library" 140249dc963fSmrg build_old_libs=no 140349dc963fSmrg continue 140449dc963fSmrg ;; 140549dc963fSmrg 14064b0ead49Smrg -static) 140749dc963fSmrg build_libtool_libs=no 14084b0ead49Smrg build_old_libs=yes 14094b0ead49Smrg continue 14104b0ead49Smrg ;; 14114b0ead49Smrg 14124b0ead49Smrg -prefer-pic) 14134b0ead49Smrg pic_mode=yes 14144b0ead49Smrg continue 14154b0ead49Smrg ;; 14164b0ead49Smrg 14174b0ead49Smrg -prefer-non-pic) 14184b0ead49Smrg pic_mode=no 14194b0ead49Smrg continue 14204b0ead49Smrg ;; 14214b0ead49Smrg esac 14224b0ead49Smrg done 14234b0ead49Smrg 142449dc963fSmrg func_quote_for_eval "$libobj" 142549dc963fSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 142649dc963fSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 142749dc963fSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 142849dc963fSmrg func_dirname_and_basename "$obj" "/" "" 142949dc963fSmrg objname="$func_basename_result" 143049dc963fSmrg xdir="$func_dirname_result" 14314b0ead49Smrg lobj=${xdir}$objdir/$objname 14324b0ead49Smrg 143349dc963fSmrg test -z "$base_compile" && \ 143449dc963fSmrg func_fatal_help "you must specify a compilation command" 14354b0ead49Smrg 14364b0ead49Smrg # Delete any leftover library objects. 14374b0ead49Smrg if test "$build_old_libs" = yes; then 14384b0ead49Smrg removelist="$obj $lobj $libobj ${libobj}T" 14394b0ead49Smrg else 14404b0ead49Smrg removelist="$lobj $libobj ${libobj}T" 14414b0ead49Smrg fi 14424b0ead49Smrg 14434b0ead49Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 14444b0ead49Smrg case $host_os in 144549dc963fSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 14464b0ead49Smrg pic_mode=default 14474b0ead49Smrg ;; 14484b0ead49Smrg esac 14494b0ead49Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 14504b0ead49Smrg # non-PIC code in shared libraries is not supported 14514b0ead49Smrg pic_mode=default 14524b0ead49Smrg fi 14534b0ead49Smrg 14544b0ead49Smrg # Calculate the filename of the output object if compiler does 14554b0ead49Smrg # not support -o with -c 14564b0ead49Smrg if test "$compiler_c_o" = no; then 14577aa89044Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 14584b0ead49Smrg lockfile="$output_obj.lock" 14594b0ead49Smrg else 14604b0ead49Smrg output_obj= 14614b0ead49Smrg need_locks=no 14624b0ead49Smrg lockfile= 14634b0ead49Smrg fi 14644b0ead49Smrg 14654b0ead49Smrg # Lock this critical section if it is needed 14664b0ead49Smrg # We use this script file to make the link, it avoids creating a new file 14674b0ead49Smrg if test "$need_locks" = yes; then 146849dc963fSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 146949dc963fSmrg func_echo "Waiting for $lockfile to be removed" 14704b0ead49Smrg sleep 2 14714b0ead49Smrg done 14724b0ead49Smrg elif test "$need_locks" = warn; then 14734b0ead49Smrg if test -f "$lockfile"; then 147449dc963fSmrg $ECHO "\ 14754b0ead49Smrg*** ERROR, $lockfile exists and contains: 14764b0ead49Smrg`cat $lockfile 2>/dev/null` 14774b0ead49Smrg 14784b0ead49SmrgThis indicates that another process is trying to use the same 14794b0ead49Smrgtemporary object file, and libtool could not work around it because 14804b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 14814b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 14824b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 14834b0ead49Smrgcompiler." 14844b0ead49Smrg 148549dc963fSmrg $opt_dry_run || $RM $removelist 14864b0ead49Smrg exit $EXIT_FAILURE 14874b0ead49Smrg fi 148849dc963fSmrg removelist="$removelist $output_obj" 148949dc963fSmrg $ECHO "$srcfile" > "$lockfile" 14904b0ead49Smrg fi 14914b0ead49Smrg 149249dc963fSmrg $opt_dry_run || $RM $removelist 149349dc963fSmrg removelist="$removelist $lockfile" 149449dc963fSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 149549dc963fSmrg 14964b0ead49Smrg if test -n "$fix_srcfile_path"; then 14974b0ead49Smrg eval srcfile=\"$fix_srcfile_path\" 14984b0ead49Smrg fi 149949dc963fSmrg func_quote_for_eval "$srcfile" 150049dc963fSmrg qsrcfile=$func_quote_for_eval_result 15014b0ead49Smrg 15024b0ead49Smrg # Only build a PIC object if we are building libtool libraries. 15034b0ead49Smrg if test "$build_libtool_libs" = yes; then 15044b0ead49Smrg # Without this assignment, base_compile gets emptied. 15054b0ead49Smrg fbsd_hideous_sh_bug=$base_compile 15064b0ead49Smrg 15074b0ead49Smrg if test "$pic_mode" != no; then 15084b0ead49Smrg command="$base_compile $qsrcfile $pic_flag" 15094b0ead49Smrg else 15104b0ead49Smrg # Don't build PIC code 15114b0ead49Smrg command="$base_compile $qsrcfile" 15124b0ead49Smrg fi 15134b0ead49Smrg 151449dc963fSmrg func_mkdir_p "$xdir$objdir" 15154b0ead49Smrg 15164b0ead49Smrg if test -z "$output_obj"; then 15174b0ead49Smrg # Place PIC objects in $objdir 15184b0ead49Smrg command="$command -o $lobj" 15194b0ead49Smrg fi 15204b0ead49Smrg 152149dc963fSmrg func_show_eval_locale "$command" \ 152249dc963fSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 15234b0ead49Smrg 15244b0ead49Smrg if test "$need_locks" = warn && 15254b0ead49Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 152649dc963fSmrg $ECHO "\ 15274b0ead49Smrg*** ERROR, $lockfile contains: 15284b0ead49Smrg`cat $lockfile 2>/dev/null` 15294b0ead49Smrg 15304b0ead49Smrgbut it should contain: 15314b0ead49Smrg$srcfile 15324b0ead49Smrg 15334b0ead49SmrgThis indicates that another process is trying to use the same 15344b0ead49Smrgtemporary object file, and libtool could not work around it because 15354b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 15364b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 15374b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 15384b0ead49Smrgcompiler." 15394b0ead49Smrg 154049dc963fSmrg $opt_dry_run || $RM $removelist 15414b0ead49Smrg exit $EXIT_FAILURE 15424b0ead49Smrg fi 15434b0ead49Smrg 15444b0ead49Smrg # Just move the object if needed, then go on to compile the next one 15454b0ead49Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 154649dc963fSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 154749dc963fSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 15484b0ead49Smrg fi 15494b0ead49Smrg 15504b0ead49Smrg # Allow error messages only from the first compilation. 15514b0ead49Smrg if test "$suppress_opt" = yes; then 155249dc963fSmrg suppress_output=' >/dev/null 2>&1' 15534b0ead49Smrg fi 15544b0ead49Smrg fi 15554b0ead49Smrg 15564b0ead49Smrg # Only build a position-dependent object if we build old libraries. 15574b0ead49Smrg if test "$build_old_libs" = yes; then 15584b0ead49Smrg if test "$pic_mode" != yes; then 15594b0ead49Smrg # Don't build PIC code 156049dc963fSmrg command="$base_compile $qsrcfile$pie_flag" 15614b0ead49Smrg else 15624b0ead49Smrg command="$base_compile $qsrcfile $pic_flag" 15634b0ead49Smrg fi 15644b0ead49Smrg if test "$compiler_c_o" = yes; then 15654b0ead49Smrg command="$command -o $obj" 15664b0ead49Smrg fi 15674b0ead49Smrg 15684b0ead49Smrg # Suppress compiler output if we already did a PIC compilation. 15694b0ead49Smrg command="$command$suppress_output" 157049dc963fSmrg func_show_eval_locale "$command" \ 157149dc963fSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 15724b0ead49Smrg 15734b0ead49Smrg if test "$need_locks" = warn && 15744b0ead49Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 157549dc963fSmrg $ECHO "\ 15764b0ead49Smrg*** ERROR, $lockfile contains: 15774b0ead49Smrg`cat $lockfile 2>/dev/null` 15784b0ead49Smrg 15794b0ead49Smrgbut it should contain: 15804b0ead49Smrg$srcfile 15814b0ead49Smrg 15824b0ead49SmrgThis indicates that another process is trying to use the same 15834b0ead49Smrgtemporary object file, and libtool could not work around it because 15844b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 15854b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 15864b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 15874b0ead49Smrgcompiler." 15884b0ead49Smrg 158949dc963fSmrg $opt_dry_run || $RM $removelist 15904b0ead49Smrg exit $EXIT_FAILURE 15914b0ead49Smrg fi 15924b0ead49Smrg 15934b0ead49Smrg # Just move the object if needed 15944b0ead49Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 159549dc963fSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 159649dc963fSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 15974b0ead49Smrg fi 15984b0ead49Smrg fi 15994b0ead49Smrg 160049dc963fSmrg $opt_dry_run || { 160149dc963fSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 16024b0ead49Smrg 160349dc963fSmrg # Unlock the critical section if it was locked 160449dc963fSmrg if test "$need_locks" != no; then 160549dc963fSmrg removelist=$lockfile 160649dc963fSmrg $RM "$lockfile" 160749dc963fSmrg fi 160849dc963fSmrg } 16094b0ead49Smrg 16104b0ead49Smrg exit $EXIT_SUCCESS 161149dc963fSmrg} 16124b0ead49Smrg 161349dc963fSmrg$opt_help || { 16147aa89044Smrg test "$mode" = compile && func_mode_compile ${1+"$@"} 161549dc963fSmrg} 16164b0ead49Smrg 161749dc963fSmrgfunc_mode_help () 161849dc963fSmrg{ 161949dc963fSmrg # We need to display help for each of the modes. 162049dc963fSmrg case $mode in 162149dc963fSmrg "") 162249dc963fSmrg # Generic help is extracted from the usage comments 162349dc963fSmrg # at the start of this file. 162449dc963fSmrg func_help 162549dc963fSmrg ;; 16264b0ead49Smrg 162749dc963fSmrg clean) 162849dc963fSmrg $ECHO \ 162949dc963fSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 16304b0ead49Smrg 163149dc963fSmrgRemove files from the build directory. 16324b0ead49Smrg 163349dc963fSmrgRM is the name of the program to use to delete files associated with each FILE 163449dc963fSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 163549dc963fSmrgto RM. 16364b0ead49Smrg 163749dc963fSmrgIf FILE is a libtool library, object or program, all the files associated 163849dc963fSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 163949dc963fSmrg ;; 16404b0ead49Smrg 164149dc963fSmrg compile) 164249dc963fSmrg $ECHO \ 164349dc963fSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 16444b0ead49Smrg 164549dc963fSmrgCompile a source file into a libtool library object. 16464b0ead49Smrg 164749dc963fSmrgThis mode accepts the following additional options: 16484b0ead49Smrg 164949dc963fSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 165049dc963fSmrg -no-suppress do not suppress compiler output for multiple passes 16517aa89044Smrg -prefer-pic try to build PIC objects only 16527aa89044Smrg -prefer-non-pic try to build non-PIC objects only 165349dc963fSmrg -shared do not build a \`.o' file suitable for static linking 165449dc963fSmrg -static only build a \`.o' file suitable for static linking 16557aa89044Smrg -Wc,FLAG pass FLAG directly to the compiler 16564b0ead49Smrg 165749dc963fSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 165849dc963fSmrgfrom the given SOURCEFILE. 16594b0ead49Smrg 166049dc963fSmrgThe output file name is determined by removing the directory component from 166149dc963fSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 166249dc963fSmrglibrary object suffix, \`.lo'." 166349dc963fSmrg ;; 16644b0ead49Smrg 166549dc963fSmrg execute) 166649dc963fSmrg $ECHO \ 166749dc963fSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 16684b0ead49Smrg 166949dc963fSmrgAutomatically set library path, then run a program. 16704b0ead49Smrg 167149dc963fSmrgThis mode accepts the following additional options: 16724b0ead49Smrg 167349dc963fSmrg -dlopen FILE add the directory containing FILE to the library path 16744b0ead49Smrg 167549dc963fSmrgThis mode sets the library path environment variable according to \`-dlopen' 167649dc963fSmrgflags. 16774b0ead49Smrg 167849dc963fSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 167949dc963fSmrginto their corresponding uninstalled binary, and any of their required library 168049dc963fSmrgdirectories are added to the library path. 16814b0ead49Smrg 168249dc963fSmrgThen, COMMAND is executed, with ARGS as arguments." 168349dc963fSmrg ;; 16844b0ead49Smrg 168549dc963fSmrg finish) 168649dc963fSmrg $ECHO \ 168749dc963fSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 16884b0ead49Smrg 168949dc963fSmrgComplete the installation of libtool libraries. 16904b0ead49Smrg 169149dc963fSmrgEach LIBDIR is a directory that contains libtool libraries. 16924b0ead49Smrg 169349dc963fSmrgThe commands that this mode executes may require superuser privileges. Use 169449dc963fSmrgthe \`--dry-run' option if you just want to see what would be executed." 169549dc963fSmrg ;; 16964b0ead49Smrg 169749dc963fSmrg install) 169849dc963fSmrg $ECHO \ 169949dc963fSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 17004b0ead49Smrg 170149dc963fSmrgInstall executables or libraries. 17024b0ead49Smrg 170349dc963fSmrgINSTALL-COMMAND is the installation command. The first component should be 170449dc963fSmrgeither the \`install' or \`cp' program. 17054b0ead49Smrg 170649dc963fSmrgThe following components of INSTALL-COMMAND are treated specially: 17074b0ead49Smrg 17087aa89044Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 17094b0ead49Smrg 171049dc963fSmrgThe rest of the components are interpreted as arguments to that command (only 171149dc963fSmrgBSD-compatible install options are recognized)." 171249dc963fSmrg ;; 17134b0ead49Smrg 171449dc963fSmrg link) 171549dc963fSmrg $ECHO \ 171649dc963fSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 17174b0ead49Smrg 171849dc963fSmrgLink object files or libraries together to form another library, or to 171949dc963fSmrgcreate an executable program. 17204b0ead49Smrg 172149dc963fSmrgLINK-COMMAND is a command using the C compiler that you would use to create 172249dc963fSmrga program from several object files. 17234b0ead49Smrg 172449dc963fSmrgThe following components of LINK-COMMAND are treated specially: 17254b0ead49Smrg 172649dc963fSmrg -all-static do not do any dynamic linking at all 172749dc963fSmrg -avoid-version do not add a version suffix if possible 17287aa89044Smrg -bindir BINDIR specify path to binaries directory (for systems where 17297aa89044Smrg libraries must be found in the PATH setting at runtime) 173049dc963fSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 173149dc963fSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 173249dc963fSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 173349dc963fSmrg -export-symbols SYMFILE 173449dc963fSmrg try to export only the symbols listed in SYMFILE 173549dc963fSmrg -export-symbols-regex REGEX 173649dc963fSmrg try to export only the symbols matching REGEX 173749dc963fSmrg -LLIBDIR search LIBDIR for required installed libraries 173849dc963fSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 173949dc963fSmrg -module build a library that can dlopened 174049dc963fSmrg -no-fast-install disable the fast-install mode 174149dc963fSmrg -no-install link a not-installable executable 174249dc963fSmrg -no-undefined declare that a library does not refer to external symbols 174349dc963fSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 174449dc963fSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 174549dc963fSmrg -precious-files-regex REGEX 174649dc963fSmrg don't remove output files matching REGEX 174749dc963fSmrg -release RELEASE specify package release information 174849dc963fSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 174949dc963fSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 175049dc963fSmrg -shared only do dynamic linking of libtool libraries 175149dc963fSmrg -shrext SUFFIX override the standard shared library file extension 175249dc963fSmrg -static do not do any dynamic linking of uninstalled libtool libraries 175349dc963fSmrg -static-libtool-libs 175449dc963fSmrg do not do any dynamic linking of libtool libraries 175549dc963fSmrg -version-info CURRENT[:REVISION[:AGE]] 175649dc963fSmrg specify library version info [each variable defaults to 0] 175749dc963fSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 17587aa89044Smrg -Wc,FLAG 17597aa89044Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 17607aa89044Smrg -Wl,FLAG 17617aa89044Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 17627aa89044Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 17634b0ead49Smrg 176449dc963fSmrgAll other options (arguments beginning with \`-') are ignored. 17654b0ead49Smrg 176649dc963fSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 176749dc963fSmrgtreated as uninstalled libtool libraries, other files are standard or library 176849dc963fSmrgobject files. 176952b01e16Smrg 177049dc963fSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 177149dc963fSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 177249dc963fSmrgrequired, except when creating a convenience library. 17734b0ead49Smrg 177449dc963fSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 177549dc963fSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 17764b0ead49Smrg 177749dc963fSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 177849dc963fSmrgis created, otherwise an executable program is created." 17794b0ead49Smrg ;; 17804b0ead49Smrg 178149dc963fSmrg uninstall) 178249dc963fSmrg $ECHO \ 178349dc963fSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 17844b0ead49Smrg 178549dc963fSmrgRemove libraries from an installation directory. 17864b0ead49Smrg 178749dc963fSmrgRM is the name of the program to use to delete files associated with each FILE 178849dc963fSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 178949dc963fSmrgto RM. 17904b0ead49Smrg 179149dc963fSmrgIf FILE is a libtool library, all the files associated with it are deleted. 179249dc963fSmrgOtherwise, only FILE itself is deleted using RM." 179349dc963fSmrg ;; 17944b0ead49Smrg 179549dc963fSmrg *) 179649dc963fSmrg func_fatal_help "invalid operation mode \`$mode'" 179749dc963fSmrg ;; 179849dc963fSmrg esac 17994b0ead49Smrg 18007aa89044Smrg echo 180149dc963fSmrg $ECHO "Try \`$progname --help' for more information about other modes." 180249dc963fSmrg} 18034b0ead49Smrg 18047aa89044Smrg# Now that we've collected a possible --mode arg, show help if necessary 18057aa89044Smrgif $opt_help; then 18067aa89044Smrg if test "$opt_help" = :; then 18077aa89044Smrg func_mode_help 18087aa89044Smrg else 18097aa89044Smrg { 18107aa89044Smrg func_help noexit 18117aa89044Smrg for mode in compile link execute install finish uninstall clean; do 18127aa89044Smrg func_mode_help 18137aa89044Smrg done 18147aa89044Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 18157aa89044Smrg { 18167aa89044Smrg func_help noexit 18177aa89044Smrg for mode in compile link execute install finish uninstall clean; do 18187aa89044Smrg echo 18197aa89044Smrg func_mode_help 18207aa89044Smrg done 18217aa89044Smrg } | 18227aa89044Smrg sed '1d 18237aa89044Smrg /^When reporting/,/^Report/{ 18247aa89044Smrg H 18257aa89044Smrg d 18267aa89044Smrg } 18277aa89044Smrg $x 18287aa89044Smrg /information about other modes/d 18297aa89044Smrg /more detailed .*MODE/d 18307aa89044Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 18317aa89044Smrg fi 18327aa89044Smrg exit $? 18337aa89044Smrgfi 18344b0ead49Smrg 18354b0ead49Smrg 183649dc963fSmrg# func_mode_execute arg... 183749dc963fSmrgfunc_mode_execute () 183849dc963fSmrg{ 183949dc963fSmrg $opt_debug 184049dc963fSmrg # The first argument is the command name. 184149dc963fSmrg cmd="$nonopt" 184249dc963fSmrg test -z "$cmd" && \ 184349dc963fSmrg func_fatal_help "you must specify a COMMAND" 18444b0ead49Smrg 184549dc963fSmrg # Handle -dlopen flags immediately. 184649dc963fSmrg for file in $execute_dlfiles; do 184749dc963fSmrg test -f "$file" \ 184849dc963fSmrg || func_fatal_help "\`$file' is not a file" 18494b0ead49Smrg 185049dc963fSmrg dir= 185149dc963fSmrg case $file in 185249dc963fSmrg *.la) 185349dc963fSmrg # Check to see that this really is a libtool archive. 185449dc963fSmrg func_lalib_unsafe_p "$file" \ 185549dc963fSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 18564b0ead49Smrg 185749dc963fSmrg # Read the libtool library. 185849dc963fSmrg dlname= 185949dc963fSmrg library_names= 186049dc963fSmrg func_source "$file" 18614b0ead49Smrg 186249dc963fSmrg # Skip this library if it cannot be dlopened. 186349dc963fSmrg if test -z "$dlname"; then 186449dc963fSmrg # Warn if it was a shared library. 186549dc963fSmrg test -n "$library_names" && \ 186649dc963fSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 186749dc963fSmrg continue 186849dc963fSmrg fi 18694b0ead49Smrg 187049dc963fSmrg func_dirname "$file" "" "." 187149dc963fSmrg dir="$func_dirname_result" 18724b0ead49Smrg 187349dc963fSmrg if test -f "$dir/$objdir/$dlname"; then 187449dc963fSmrg dir="$dir/$objdir" 187549dc963fSmrg else 187649dc963fSmrg if test ! -f "$dir/$dlname"; then 187749dc963fSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 187849dc963fSmrg fi 187949dc963fSmrg fi 18804b0ead49Smrg ;; 18814b0ead49Smrg 188249dc963fSmrg *.lo) 188349dc963fSmrg # Just add the directory containing the .lo file. 188449dc963fSmrg func_dirname "$file" "" "." 188549dc963fSmrg dir="$func_dirname_result" 18864b0ead49Smrg ;; 18874b0ead49Smrg 188849dc963fSmrg *) 188949dc963fSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 18904b0ead49Smrg continue 18914b0ead49Smrg ;; 189249dc963fSmrg esac 18934b0ead49Smrg 189449dc963fSmrg # Get the absolute pathname. 189549dc963fSmrg absdir=`cd "$dir" && pwd` 189649dc963fSmrg test -n "$absdir" && dir="$absdir" 18974b0ead49Smrg 189849dc963fSmrg # Now add the directory to shlibpath_var. 189949dc963fSmrg if eval "test -z \"\$$shlibpath_var\""; then 190049dc963fSmrg eval "$shlibpath_var=\"\$dir\"" 190149dc963fSmrg else 190249dc963fSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 190349dc963fSmrg fi 190449dc963fSmrg done 19054b0ead49Smrg 190649dc963fSmrg # This variable tells wrapper scripts just to set shlibpath_var 190749dc963fSmrg # rather than running their programs. 190849dc963fSmrg libtool_execute_magic="$magic" 19094b0ead49Smrg 191049dc963fSmrg # Check if any of the arguments is a wrapper script. 191149dc963fSmrg args= 191249dc963fSmrg for file 191349dc963fSmrg do 191449dc963fSmrg case $file in 19157aa89044Smrg -* | *.la | *.lo ) ;; 191649dc963fSmrg *) 191749dc963fSmrg # Do a test to see if this is really a libtool program. 191849dc963fSmrg if func_ltwrapper_script_p "$file"; then 191949dc963fSmrg func_source "$file" 192049dc963fSmrg # Transform arg to wrapped name. 192149dc963fSmrg file="$progdir/$program" 192249dc963fSmrg elif func_ltwrapper_executable_p "$file"; then 192349dc963fSmrg func_ltwrapper_scriptname "$file" 192449dc963fSmrg func_source "$func_ltwrapper_scriptname_result" 192549dc963fSmrg # Transform arg to wrapped name. 192649dc963fSmrg file="$progdir/$program" 192749dc963fSmrg fi 192849dc963fSmrg ;; 192949dc963fSmrg esac 193049dc963fSmrg # Quote arguments (to preserve shell metacharacters). 193149dc963fSmrg func_quote_for_eval "$file" 193249dc963fSmrg args="$args $func_quote_for_eval_result" 193349dc963fSmrg done 19344b0ead49Smrg 193549dc963fSmrg if test "X$opt_dry_run" = Xfalse; then 193649dc963fSmrg if test -n "$shlibpath_var"; then 193749dc963fSmrg # Export the shlibpath_var. 193849dc963fSmrg eval "export $shlibpath_var" 193949dc963fSmrg fi 19404b0ead49Smrg 194149dc963fSmrg # Restore saved environment variables 194249dc963fSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 194349dc963fSmrg do 194449dc963fSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 194549dc963fSmrg $lt_var=\$save_$lt_var; export $lt_var 19464b0ead49Smrg else 194749dc963fSmrg $lt_unset $lt_var 194849dc963fSmrg fi" 194949dc963fSmrg done 19504b0ead49Smrg 195149dc963fSmrg # Now prepare to actually exec the command. 195249dc963fSmrg exec_cmd="\$cmd$args" 195349dc963fSmrg else 195449dc963fSmrg # Display what would be done. 195549dc963fSmrg if test -n "$shlibpath_var"; then 195649dc963fSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 19577aa89044Smrg echo "export $shlibpath_var" 195849dc963fSmrg fi 195949dc963fSmrg $ECHO "$cmd$args" 196049dc963fSmrg exit $EXIT_SUCCESS 196149dc963fSmrg fi 196249dc963fSmrg} 19634b0ead49Smrg 196449dc963fSmrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 19654b0ead49Smrg 19664b0ead49Smrg 196749dc963fSmrg# func_mode_finish arg... 196849dc963fSmrgfunc_mode_finish () 196949dc963fSmrg{ 197049dc963fSmrg $opt_debug 197149dc963fSmrg libdirs="$nonopt" 197249dc963fSmrg admincmds= 19734b0ead49Smrg 197449dc963fSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 197549dc963fSmrg for dir 197649dc963fSmrg do 197749dc963fSmrg libdirs="$libdirs $dir" 197849dc963fSmrg done 19794b0ead49Smrg 198049dc963fSmrg for libdir in $libdirs; do 198149dc963fSmrg if test -n "$finish_cmds"; then 198249dc963fSmrg # Do each command in the finish commands. 198349dc963fSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 198449dc963fSmrg'"$cmd"'"' 19854b0ead49Smrg fi 198649dc963fSmrg if test -n "$finish_eval"; then 198749dc963fSmrg # Do the single finish_eval. 198849dc963fSmrg eval cmds=\"$finish_eval\" 198949dc963fSmrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 199049dc963fSmrg $cmds" 199149dc963fSmrg fi 199249dc963fSmrg done 199349dc963fSmrg fi 19944b0ead49Smrg 199549dc963fSmrg # Exit here if they wanted silent mode. 199649dc963fSmrg $opt_silent && exit $EXIT_SUCCESS 19974b0ead49Smrg 19987aa89044Smrg echo "----------------------------------------------------------------------" 19997aa89044Smrg echo "Libraries have been installed in:" 200049dc963fSmrg for libdir in $libdirs; do 200149dc963fSmrg $ECHO " $libdir" 200249dc963fSmrg done 20037aa89044Smrg echo 20047aa89044Smrg echo "If you ever happen to want to link against installed libraries" 20057aa89044Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 20067aa89044Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 20077aa89044Smrg echo "flag during linking and do at least one of the following:" 200849dc963fSmrg if test -n "$shlibpath_var"; then 20097aa89044Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 20107aa89044Smrg echo " during execution" 201149dc963fSmrg fi 201249dc963fSmrg if test -n "$runpath_var"; then 20137aa89044Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 20147aa89044Smrg echo " during linking" 201549dc963fSmrg fi 201649dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 201749dc963fSmrg libdir=LIBDIR 201849dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 201949dc963fSmrg 202049dc963fSmrg $ECHO " - use the \`$flag' linker flag" 202149dc963fSmrg fi 202249dc963fSmrg if test -n "$admincmds"; then 202349dc963fSmrg $ECHO " - have your system administrator run these commands:$admincmds" 202449dc963fSmrg fi 202549dc963fSmrg if test -f /etc/ld.so.conf; then 20267aa89044Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 202749dc963fSmrg fi 20287aa89044Smrg echo 202949dc963fSmrg 20307aa89044Smrg echo "See any operating system documentation about shared libraries for" 203149dc963fSmrg case $host in 203249dc963fSmrg solaris2.[6789]|solaris2.1[0-9]) 20337aa89044Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 20347aa89044Smrg echo "pages." 203549dc963fSmrg ;; 203649dc963fSmrg *) 20377aa89044Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 203849dc963fSmrg ;; 203949dc963fSmrg esac 20407aa89044Smrg echo "----------------------------------------------------------------------" 204149dc963fSmrg exit $EXIT_SUCCESS 204249dc963fSmrg} 204349dc963fSmrg 204449dc963fSmrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 204549dc963fSmrg 204649dc963fSmrg 204749dc963fSmrg# func_mode_install arg... 204849dc963fSmrgfunc_mode_install () 204949dc963fSmrg{ 205049dc963fSmrg $opt_debug 205149dc963fSmrg # There may be an optional sh(1) argument at the beginning of 205249dc963fSmrg # install_prog (especially on Windows NT). 205349dc963fSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 205449dc963fSmrg # Allow the use of GNU shtool's install command. 20557aa89044Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 205649dc963fSmrg # Aesthetically quote it. 205749dc963fSmrg func_quote_for_eval "$nonopt" 205849dc963fSmrg install_prog="$func_quote_for_eval_result " 205949dc963fSmrg arg=$1 206049dc963fSmrg shift 206149dc963fSmrg else 206249dc963fSmrg install_prog= 206349dc963fSmrg arg=$nonopt 206449dc963fSmrg fi 206549dc963fSmrg 206649dc963fSmrg # The real first argument should be the name of the installation program. 206749dc963fSmrg # Aesthetically quote it. 206849dc963fSmrg func_quote_for_eval "$arg" 206949dc963fSmrg install_prog="$install_prog$func_quote_for_eval_result" 20707aa89044Smrg install_shared_prog=$install_prog 20717aa89044Smrg case " $install_prog " in 20727aa89044Smrg *[\\\ /]cp\ *) install_cp=: ;; 20737aa89044Smrg *) install_cp=false ;; 20747aa89044Smrg esac 207549dc963fSmrg 207649dc963fSmrg # We need to accept at least all the BSD install flags. 207749dc963fSmrg dest= 207849dc963fSmrg files= 207949dc963fSmrg opts= 208049dc963fSmrg prev= 208149dc963fSmrg install_type= 208249dc963fSmrg isdir=no 208349dc963fSmrg stripme= 20847aa89044Smrg no_mode=: 208549dc963fSmrg for arg 208649dc963fSmrg do 20877aa89044Smrg arg2= 208849dc963fSmrg if test -n "$dest"; then 208949dc963fSmrg files="$files $dest" 209049dc963fSmrg dest=$arg 209149dc963fSmrg continue 209249dc963fSmrg fi 209349dc963fSmrg 209449dc963fSmrg case $arg in 209549dc963fSmrg -d) isdir=yes ;; 209649dc963fSmrg -f) 20977aa89044Smrg if $install_cp; then :; else 20987aa89044Smrg prev=$arg 20997aa89044Smrg fi 210049dc963fSmrg ;; 210149dc963fSmrg -g | -m | -o) 210249dc963fSmrg prev=$arg 210349dc963fSmrg ;; 210449dc963fSmrg -s) 210549dc963fSmrg stripme=" -s" 210649dc963fSmrg continue 210749dc963fSmrg ;; 210849dc963fSmrg -*) 210949dc963fSmrg ;; 211049dc963fSmrg *) 211149dc963fSmrg # If the previous option needed an argument, then skip it. 211249dc963fSmrg if test -n "$prev"; then 21137aa89044Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 21147aa89044Smrg arg2=$install_override_mode 21157aa89044Smrg no_mode=false 21167aa89044Smrg fi 21174b0ead49Smrg prev= 21184b0ead49Smrg else 211949dc963fSmrg dest=$arg 212049dc963fSmrg continue 21214b0ead49Smrg fi 21224b0ead49Smrg ;; 212349dc963fSmrg esac 21244b0ead49Smrg 212549dc963fSmrg # Aesthetically quote the argument. 212649dc963fSmrg func_quote_for_eval "$arg" 212749dc963fSmrg install_prog="$install_prog $func_quote_for_eval_result" 21287aa89044Smrg if test -n "$arg2"; then 21297aa89044Smrg func_quote_for_eval "$arg2" 21307aa89044Smrg fi 21317aa89044Smrg install_shared_prog="$install_shared_prog $func_quote_for_eval_result" 213249dc963fSmrg done 21334b0ead49Smrg 213449dc963fSmrg test -z "$install_prog" && \ 213549dc963fSmrg func_fatal_help "you must specify an install program" 21364b0ead49Smrg 213749dc963fSmrg test -n "$prev" && \ 213849dc963fSmrg func_fatal_help "the \`$prev' option requires an argument" 21394b0ead49Smrg 21407aa89044Smrg if test -n "$install_override_mode" && $no_mode; then 21417aa89044Smrg if $install_cp; then :; else 21427aa89044Smrg func_quote_for_eval "$install_override_mode" 21437aa89044Smrg install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" 21447aa89044Smrg fi 21457aa89044Smrg fi 21467aa89044Smrg 214749dc963fSmrg if test -z "$files"; then 214849dc963fSmrg if test -z "$dest"; then 214949dc963fSmrg func_fatal_help "no file or destination specified" 215049dc963fSmrg else 215149dc963fSmrg func_fatal_help "you must specify a destination" 215249dc963fSmrg fi 21534b0ead49Smrg fi 21544b0ead49Smrg 215549dc963fSmrg # Strip any trailing slash from the destination. 215649dc963fSmrg func_stripname '' '/' "$dest" 215749dc963fSmrg dest=$func_stripname_result 21584b0ead49Smrg 215949dc963fSmrg # Check to see that the destination is a directory. 216049dc963fSmrg test -d "$dest" && isdir=yes 216149dc963fSmrg if test "$isdir" = yes; then 216249dc963fSmrg destdir="$dest" 216349dc963fSmrg destname= 21644b0ead49Smrg else 216549dc963fSmrg func_dirname_and_basename "$dest" "" "." 216649dc963fSmrg destdir="$func_dirname_result" 216749dc963fSmrg destname="$func_basename_result" 21684b0ead49Smrg 216949dc963fSmrg # Not a directory, so check to see that there is only one file specified. 217049dc963fSmrg set dummy $files; shift 217149dc963fSmrg test "$#" -gt 1 && \ 217249dc963fSmrg func_fatal_help "\`$dest' is not a directory" 21734b0ead49Smrg fi 217449dc963fSmrg case $destdir in 217549dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 21764b0ead49Smrg *) 217749dc963fSmrg for file in $files; do 217849dc963fSmrg case $file in 217949dc963fSmrg *.lo) ;; 218049dc963fSmrg *) 218149dc963fSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 218249dc963fSmrg ;; 218349dc963fSmrg esac 218449dc963fSmrg done 21854b0ead49Smrg ;; 21864b0ead49Smrg esac 21874b0ead49Smrg 218849dc963fSmrg # This variable tells wrapper scripts just to set variables rather 218949dc963fSmrg # than running their programs. 219049dc963fSmrg libtool_install_magic="$magic" 21914b0ead49Smrg 219249dc963fSmrg staticlibs= 219349dc963fSmrg future_libdirs= 219449dc963fSmrg current_libdirs= 219549dc963fSmrg for file in $files; do 21964b0ead49Smrg 219749dc963fSmrg # Do each installation. 219849dc963fSmrg case $file in 219949dc963fSmrg *.$libext) 220049dc963fSmrg # Do the static libraries later. 220149dc963fSmrg staticlibs="$staticlibs $file" 220249dc963fSmrg ;; 220349dc963fSmrg 220449dc963fSmrg *.la) 220549dc963fSmrg # Check to see that this really is a libtool archive. 220649dc963fSmrg func_lalib_unsafe_p "$file" \ 220749dc963fSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 220849dc963fSmrg 220949dc963fSmrg library_names= 221049dc963fSmrg old_library= 221149dc963fSmrg relink_command= 221249dc963fSmrg func_source "$file" 221349dc963fSmrg 221449dc963fSmrg # Add the libdir to current_libdirs if it is the destination. 221549dc963fSmrg if test "X$destdir" = "X$libdir"; then 221649dc963fSmrg case "$current_libdirs " in 221749dc963fSmrg *" $libdir "*) ;; 221849dc963fSmrg *) current_libdirs="$current_libdirs $libdir" ;; 22194b0ead49Smrg esac 222049dc963fSmrg else 222149dc963fSmrg # Note the libdir as a future libdir. 222249dc963fSmrg case "$future_libdirs " in 222349dc963fSmrg *" $libdir "*) ;; 222449dc963fSmrg *) future_libdirs="$future_libdirs $libdir" ;; 222549dc963fSmrg esac 222649dc963fSmrg fi 22274b0ead49Smrg 222849dc963fSmrg func_dirname "$file" "/" "" 222949dc963fSmrg dir="$func_dirname_result" 223049dc963fSmrg dir="$dir$objdir" 223149dc963fSmrg 223249dc963fSmrg if test -n "$relink_command"; then 223349dc963fSmrg # Determine the prefix the user has applied to our future dir. 22347aa89044Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 223549dc963fSmrg 223649dc963fSmrg # Don't allow the user to place us outside of our expected 223749dc963fSmrg # location b/c this prevents finding dependent libraries that 223849dc963fSmrg # are installed to the same prefix. 223949dc963fSmrg # At present, this check doesn't affect windows .dll's that 224049dc963fSmrg # are installed into $libdir/../bin (currently, that works fine) 224149dc963fSmrg # but it's something to keep an eye on. 224249dc963fSmrg test "$inst_prefix_dir" = "$destdir" && \ 224349dc963fSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 224449dc963fSmrg 224549dc963fSmrg if test -n "$inst_prefix_dir"; then 224649dc963fSmrg # Stick the inst_prefix_dir data into the link command. 22477aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 224849dc963fSmrg else 22497aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 225049dc963fSmrg fi 225149dc963fSmrg 225249dc963fSmrg func_warning "relinking \`$file'" 225349dc963fSmrg func_show_eval "$relink_command" \ 225449dc963fSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 225549dc963fSmrg fi 225649dc963fSmrg 225749dc963fSmrg # See the names of the shared library. 225849dc963fSmrg set dummy $library_names; shift 225949dc963fSmrg if test -n "$1"; then 226049dc963fSmrg realname="$1" 226149dc963fSmrg shift 226249dc963fSmrg 226349dc963fSmrg srcname="$realname" 226449dc963fSmrg test -n "$relink_command" && srcname="$realname"T 226549dc963fSmrg 226649dc963fSmrg # Install the shared library and build the symlinks. 22677aa89044Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 226849dc963fSmrg 'exit $?' 226949dc963fSmrg tstripme="$stripme" 227049dc963fSmrg case $host_os in 227149dc963fSmrg cygwin* | mingw* | pw32* | cegcc*) 227249dc963fSmrg case $realname in 227349dc963fSmrg *.dll.a) 227449dc963fSmrg tstripme="" 227549dc963fSmrg ;; 227649dc963fSmrg esac 22774b0ead49Smrg ;; 22784b0ead49Smrg esac 227949dc963fSmrg if test -n "$tstripme" && test -n "$striplib"; then 228049dc963fSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 22814b0ead49Smrg fi 228249dc963fSmrg 228349dc963fSmrg if test "$#" -gt 0; then 228449dc963fSmrg # Delete the old symlinks, and create new ones. 228549dc963fSmrg # Try `ln -sf' first, because the `ln' binary might depend on 228649dc963fSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 228749dc963fSmrg # so we also need to try rm && ln -s. 228849dc963fSmrg for linkname 228949dc963fSmrg do 229049dc963fSmrg test "$linkname" != "$realname" \ 229149dc963fSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 22924b0ead49Smrg done 22934b0ead49Smrg fi 22944b0ead49Smrg 229549dc963fSmrg # Do each command in the postinstall commands. 229649dc963fSmrg lib="$destdir/$realname" 229749dc963fSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 22984b0ead49Smrg fi 22994b0ead49Smrg 230049dc963fSmrg # Install the pseudo-library for information purposes. 230149dc963fSmrg func_basename "$file" 230249dc963fSmrg name="$func_basename_result" 230349dc963fSmrg instname="$dir/$name"i 230449dc963fSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 23054b0ead49Smrg 230649dc963fSmrg # Maybe install the static library, too. 230749dc963fSmrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 230849dc963fSmrg ;; 23094b0ead49Smrg 231049dc963fSmrg *.lo) 231149dc963fSmrg # Install (i.e. copy) a libtool object. 23124b0ead49Smrg 231349dc963fSmrg # Figure out destination file name, if it wasn't already specified. 231449dc963fSmrg if test -n "$destname"; then 231549dc963fSmrg destfile="$destdir/$destname" 231649dc963fSmrg else 231749dc963fSmrg func_basename "$file" 231849dc963fSmrg destfile="$func_basename_result" 231949dc963fSmrg destfile="$destdir/$destfile" 23204b0ead49Smrg fi 23214b0ead49Smrg 232249dc963fSmrg # Deduce the name of the destination old-style object file. 232349dc963fSmrg case $destfile in 232449dc963fSmrg *.lo) 232549dc963fSmrg func_lo2o "$destfile" 232649dc963fSmrg staticdest=$func_lo2o_result 232749dc963fSmrg ;; 232849dc963fSmrg *.$objext) 232949dc963fSmrg staticdest="$destfile" 233049dc963fSmrg destfile= 233149dc963fSmrg ;; 233249dc963fSmrg *) 233349dc963fSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 233449dc963fSmrg ;; 233549dc963fSmrg esac 23364b0ead49Smrg 233749dc963fSmrg # Install the libtool object if requested. 233849dc963fSmrg test -n "$destfile" && \ 233949dc963fSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 23404b0ead49Smrg 234149dc963fSmrg # Install the old object if enabled. 234249dc963fSmrg if test "$build_old_libs" = yes; then 234349dc963fSmrg # Deduce the name of the old-style object file. 234449dc963fSmrg func_lo2o "$file" 234549dc963fSmrg staticobj=$func_lo2o_result 234649dc963fSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 23474b0ead49Smrg fi 234849dc963fSmrg exit $EXIT_SUCCESS 234949dc963fSmrg ;; 23504b0ead49Smrg 235149dc963fSmrg *) 235249dc963fSmrg # Figure out destination file name, if it wasn't already specified. 235349dc963fSmrg if test -n "$destname"; then 235449dc963fSmrg destfile="$destdir/$destname" 235549dc963fSmrg else 235649dc963fSmrg func_basename "$file" 235749dc963fSmrg destfile="$func_basename_result" 235849dc963fSmrg destfile="$destdir/$destfile" 235949dc963fSmrg fi 23604b0ead49Smrg 236149dc963fSmrg # If the file is missing, and there is a .exe on the end, strip it 236249dc963fSmrg # because it is most likely a libtool script we actually want to 236349dc963fSmrg # install 236449dc963fSmrg stripped_ext="" 236549dc963fSmrg case $file in 236649dc963fSmrg *.exe) 236749dc963fSmrg if test ! -f "$file"; then 236849dc963fSmrg func_stripname '' '.exe' "$file" 236949dc963fSmrg file=$func_stripname_result 237049dc963fSmrg stripped_ext=".exe" 237149dc963fSmrg fi 237249dc963fSmrg ;; 237349dc963fSmrg esac 237449dc963fSmrg 237549dc963fSmrg # Do a test to see if this is really a libtool program. 237649dc963fSmrg case $host in 237749dc963fSmrg *cygwin* | *mingw*) 237849dc963fSmrg if func_ltwrapper_executable_p "$file"; then 237949dc963fSmrg func_ltwrapper_scriptname "$file" 238049dc963fSmrg wrapper=$func_ltwrapper_scriptname_result 238149dc963fSmrg else 238249dc963fSmrg func_stripname '' '.exe' "$file" 238349dc963fSmrg wrapper=$func_stripname_result 238449dc963fSmrg fi 238549dc963fSmrg ;; 23864b0ead49Smrg *) 238749dc963fSmrg wrapper=$file 238849dc963fSmrg ;; 238949dc963fSmrg esac 239049dc963fSmrg if func_ltwrapper_script_p "$wrapper"; then 239149dc963fSmrg notinst_deplibs= 239249dc963fSmrg relink_command= 239349dc963fSmrg 239449dc963fSmrg func_source "$wrapper" 239549dc963fSmrg 239649dc963fSmrg # Check the variables that should have been set. 239749dc963fSmrg test -z "$generated_by_libtool_version" && \ 239849dc963fSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 239949dc963fSmrg 240049dc963fSmrg finalize=yes 240149dc963fSmrg for lib in $notinst_deplibs; do 240249dc963fSmrg # Check to see that each library is installed. 240349dc963fSmrg libdir= 240449dc963fSmrg if test -f "$lib"; then 240549dc963fSmrg func_source "$lib" 240649dc963fSmrg fi 24077aa89044Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 240849dc963fSmrg if test -n "$libdir" && test ! -f "$libfile"; then 240949dc963fSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 241049dc963fSmrg finalize=no 241149dc963fSmrg fi 241249dc963fSmrg done 241349dc963fSmrg 241449dc963fSmrg relink_command= 241549dc963fSmrg func_source "$wrapper" 241649dc963fSmrg 241749dc963fSmrg outputname= 241849dc963fSmrg if test "$fast_install" = no && test -n "$relink_command"; then 241949dc963fSmrg $opt_dry_run || { 242049dc963fSmrg if test "$finalize" = yes; then 242149dc963fSmrg tmpdir=`func_mktempdir` 242249dc963fSmrg func_basename "$file$stripped_ext" 242349dc963fSmrg file="$func_basename_result" 242449dc963fSmrg outputname="$tmpdir/$file" 242549dc963fSmrg # Replace the output file specification. 24267aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 242749dc963fSmrg 242849dc963fSmrg $opt_silent || { 242949dc963fSmrg func_quote_for_expand "$relink_command" 243049dc963fSmrg eval "func_echo $func_quote_for_expand_result" 243149dc963fSmrg } 243249dc963fSmrg if eval "$relink_command"; then : 243349dc963fSmrg else 243449dc963fSmrg func_error "error: relink \`$file' with the above command before installing it" 243549dc963fSmrg $opt_dry_run || ${RM}r "$tmpdir" 243649dc963fSmrg continue 243749dc963fSmrg fi 243849dc963fSmrg file="$outputname" 243949dc963fSmrg else 244049dc963fSmrg func_warning "cannot relink \`$file'" 244149dc963fSmrg fi 244249dc963fSmrg } 244349dc963fSmrg else 244449dc963fSmrg # Install the binary that we compiled earlier. 24457aa89044Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 24464b0ead49Smrg fi 244749dc963fSmrg fi 244849dc963fSmrg 244949dc963fSmrg # remove .exe since cygwin /usr/bin/install will append another 245049dc963fSmrg # one anyway 245149dc963fSmrg case $install_prog,$host in 245249dc963fSmrg */usr/bin/install*,*cygwin*) 245349dc963fSmrg case $file:$destfile in 245449dc963fSmrg *.exe:*.exe) 245549dc963fSmrg # this is ok 245649dc963fSmrg ;; 245749dc963fSmrg *.exe:*) 245849dc963fSmrg destfile=$destfile.exe 245949dc963fSmrg ;; 246049dc963fSmrg *:*.exe) 246149dc963fSmrg func_stripname '' '.exe' "$destfile" 246249dc963fSmrg destfile=$func_stripname_result 246349dc963fSmrg ;; 246449dc963fSmrg esac 24654b0ead49Smrg ;; 24664b0ead49Smrg esac 246749dc963fSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 246849dc963fSmrg $opt_dry_run || if test -n "$outputname"; then 246949dc963fSmrg ${RM}r "$tmpdir" 247049dc963fSmrg fi 247149dc963fSmrg ;; 247249dc963fSmrg esac 247349dc963fSmrg done 24744b0ead49Smrg 247549dc963fSmrg for file in $staticlibs; do 247649dc963fSmrg func_basename "$file" 247749dc963fSmrg name="$func_basename_result" 247849dc963fSmrg 247949dc963fSmrg # Set up the ranlib parameters. 248049dc963fSmrg oldlib="$destdir/$name" 248149dc963fSmrg 248249dc963fSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 248349dc963fSmrg 248449dc963fSmrg if test -n "$stripme" && test -n "$old_striplib"; then 248549dc963fSmrg func_show_eval "$old_striplib $oldlib" 'exit $?' 248649dc963fSmrg fi 248749dc963fSmrg 248849dc963fSmrg # Do each command in the postinstall commands. 248949dc963fSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 249049dc963fSmrg done 249149dc963fSmrg 249249dc963fSmrg test -n "$future_libdirs" && \ 249349dc963fSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 249449dc963fSmrg 249549dc963fSmrg if test -n "$current_libdirs"; then 249649dc963fSmrg # Maybe just do a dry run. 249749dc963fSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 249849dc963fSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 249949dc963fSmrg else 250049dc963fSmrg exit $EXIT_SUCCESS 250149dc963fSmrg fi 250249dc963fSmrg} 250349dc963fSmrg 250449dc963fSmrgtest "$mode" = install && func_mode_install ${1+"$@"} 250549dc963fSmrg 250649dc963fSmrg 250749dc963fSmrg# func_generate_dlsyms outputname originator pic_p 250849dc963fSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 250949dc963fSmrg# a dlpreopen symbol table. 251049dc963fSmrgfunc_generate_dlsyms () 251149dc963fSmrg{ 251249dc963fSmrg $opt_debug 251349dc963fSmrg my_outputname="$1" 251449dc963fSmrg my_originator="$2" 251549dc963fSmrg my_pic_p="${3-no}" 251649dc963fSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 251749dc963fSmrg my_dlsyms= 251849dc963fSmrg 251949dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 252049dc963fSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 252149dc963fSmrg my_dlsyms="${my_outputname}S.c" 252249dc963fSmrg else 252349dc963fSmrg func_error "not configured to extract global symbols from dlpreopened files" 252449dc963fSmrg fi 252549dc963fSmrg fi 252649dc963fSmrg 252749dc963fSmrg if test -n "$my_dlsyms"; then 252849dc963fSmrg case $my_dlsyms in 252949dc963fSmrg "") ;; 253049dc963fSmrg *.c) 253149dc963fSmrg # Discover the nlist of each of the dlfiles. 253249dc963fSmrg nlist="$output_objdir/${my_outputname}.nm" 253349dc963fSmrg 253449dc963fSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 253549dc963fSmrg 253649dc963fSmrg # Parse the name list into a source file. 253749dc963fSmrg func_verbose "creating $output_objdir/$my_dlsyms" 253849dc963fSmrg 253949dc963fSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 254049dc963fSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 254149dc963fSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 254249dc963fSmrg 254349dc963fSmrg#ifdef __cplusplus 254449dc963fSmrgextern \"C\" { 254549dc963fSmrg#endif 254649dc963fSmrg 25477aa89044Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 25487aa89044Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 25497aa89044Smrg#endif 25507aa89044Smrg 255149dc963fSmrg/* External symbol declarations for the compiler. */\ 255249dc963fSmrg" 255349dc963fSmrg 255449dc963fSmrg if test "$dlself" = yes; then 255549dc963fSmrg func_verbose "generating symbol list for \`$output'" 255649dc963fSmrg 255749dc963fSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 255849dc963fSmrg 255949dc963fSmrg # Add our own program objects to the symbol list. 25607aa89044Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 256149dc963fSmrg for progfile in $progfiles; do 256249dc963fSmrg func_verbose "extracting global C symbols from \`$progfile'" 256349dc963fSmrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 256449dc963fSmrg done 256549dc963fSmrg 256649dc963fSmrg if test -n "$exclude_expsyms"; then 256749dc963fSmrg $opt_dry_run || { 256849dc963fSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 256949dc963fSmrg eval '$MV "$nlist"T "$nlist"' 257049dc963fSmrg } 25714b0ead49Smrg fi 257249dc963fSmrg 257349dc963fSmrg if test -n "$export_symbols_regex"; then 257449dc963fSmrg $opt_dry_run || { 257549dc963fSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 257649dc963fSmrg eval '$MV "$nlist"T "$nlist"' 257749dc963fSmrg } 257849dc963fSmrg fi 257949dc963fSmrg 258049dc963fSmrg # Prepare the list of exported symbols 258149dc963fSmrg if test -z "$export_symbols"; then 258249dc963fSmrg export_symbols="$output_objdir/$outputname.exp" 258349dc963fSmrg $opt_dry_run || { 258449dc963fSmrg $RM $export_symbols 258549dc963fSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 258649dc963fSmrg case $host in 258749dc963fSmrg *cygwin* | *mingw* | *cegcc* ) 258849dc963fSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 258949dc963fSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 259049dc963fSmrg ;; 259149dc963fSmrg esac 259249dc963fSmrg } 25934b0ead49Smrg else 259449dc963fSmrg $opt_dry_run || { 259549dc963fSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 259649dc963fSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 259749dc963fSmrg eval '$MV "$nlist"T "$nlist"' 259849dc963fSmrg case $host in 25997aa89044Smrg *cygwin* | *mingw* | *cegcc* ) 260049dc963fSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 260149dc963fSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 260249dc963fSmrg ;; 260349dc963fSmrg esac 260449dc963fSmrg } 26054b0ead49Smrg fi 260649dc963fSmrg fi 26074b0ead49Smrg 260849dc963fSmrg for dlprefile in $dlprefiles; do 260949dc963fSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 261049dc963fSmrg func_basename "$dlprefile" 261149dc963fSmrg name="$func_basename_result" 261249dc963fSmrg $opt_dry_run || { 261349dc963fSmrg eval '$ECHO ": $name " >> "$nlist"' 261449dc963fSmrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 261549dc963fSmrg } 261649dc963fSmrg done 261749dc963fSmrg 261849dc963fSmrg $opt_dry_run || { 261949dc963fSmrg # Make sure we have at least an empty file. 262049dc963fSmrg test -f "$nlist" || : > "$nlist" 262149dc963fSmrg 262249dc963fSmrg if test -n "$exclude_expsyms"; then 262349dc963fSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 262449dc963fSmrg $MV "$nlist"T "$nlist" 26254b0ead49Smrg fi 262649dc963fSmrg 262749dc963fSmrg # Try sorting and uniquifying the output. 262849dc963fSmrg if $GREP -v "^: " < "$nlist" | 262949dc963fSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 263049dc963fSmrg sort -k 3 263149dc963fSmrg else 263249dc963fSmrg sort +2 263349dc963fSmrg fi | 263449dc963fSmrg uniq > "$nlist"S; then 263549dc963fSmrg : 26364b0ead49Smrg else 263749dc963fSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 26384b0ead49Smrg fi 26394b0ead49Smrg 264049dc963fSmrg if test -f "$nlist"S; then 264149dc963fSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 26424b0ead49Smrg else 26437aa89044Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 26444b0ead49Smrg fi 26454b0ead49Smrg 26467aa89044Smrg echo >> "$output_objdir/$my_dlsyms" "\ 26474b0ead49Smrg 264849dc963fSmrg/* The mapping between symbol names and symbols. */ 264949dc963fSmrgtypedef struct { 265049dc963fSmrg const char *name; 265149dc963fSmrg void *address; 265249dc963fSmrg} lt_dlsymlist; 265349dc963fSmrg" 265449dc963fSmrg case $host in 265549dc963fSmrg *cygwin* | *mingw* | *cegcc* ) 26567aa89044Smrg echo >> "$output_objdir/$my_dlsyms" "\ 265749dc963fSmrg/* DATA imports from DLLs on WIN32 con't be const, because 265849dc963fSmrg runtime relocations are performed -- see ld's documentation 265949dc963fSmrg on pseudo-relocs. */" 266049dc963fSmrg lt_dlsym_const= ;; 266149dc963fSmrg *osf5*) 266249dc963fSmrg echo >> "$output_objdir/$my_dlsyms" "\ 266349dc963fSmrg/* This system does not cope well with relocations in const data */" 266449dc963fSmrg lt_dlsym_const= ;; 266549dc963fSmrg *) 266649dc963fSmrg lt_dlsym_const=const ;; 266749dc963fSmrg esac 26684b0ead49Smrg 26697aa89044Smrg echo >> "$output_objdir/$my_dlsyms" "\ 267049dc963fSmrgextern $lt_dlsym_const lt_dlsymlist 267149dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 267249dc963fSmrg$lt_dlsym_const lt_dlsymlist 267349dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 267449dc963fSmrg{\ 267549dc963fSmrg { \"$my_originator\", (void *) 0 }," 26764b0ead49Smrg 267749dc963fSmrg case $need_lib_prefix in 267849dc963fSmrg no) 267949dc963fSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 268049dc963fSmrg ;; 268149dc963fSmrg *) 268249dc963fSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 268349dc963fSmrg ;; 268449dc963fSmrg esac 26857aa89044Smrg echo >> "$output_objdir/$my_dlsyms" "\ 268649dc963fSmrg {0, (void *) 0} 268749dc963fSmrg}; 26884b0ead49Smrg 268949dc963fSmrg/* This works around a problem in FreeBSD linker */ 269049dc963fSmrg#ifdef FREEBSD_WORKAROUND 269149dc963fSmrgstatic const void *lt_preloaded_setup() { 269249dc963fSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 269349dc963fSmrg} 269449dc963fSmrg#endif 269549dc963fSmrg 269649dc963fSmrg#ifdef __cplusplus 269749dc963fSmrg} 269849dc963fSmrg#endif\ 269949dc963fSmrg" 270049dc963fSmrg } # !$opt_dry_run 270149dc963fSmrg 270249dc963fSmrg pic_flag_for_symtable= 270349dc963fSmrg case "$compile_command " in 270449dc963fSmrg *" -static "*) ;; 270549dc963fSmrg *) 270649dc963fSmrg case $host in 270749dc963fSmrg # compiling the symbol table file with pic_flag works around 270849dc963fSmrg # a FreeBSD bug that causes programs to crash when -lm is 270949dc963fSmrg # linked before any other PIC object. But we must not use 271049dc963fSmrg # pic_flag when linking with -static. The problem exists in 271149dc963fSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 271249dc963fSmrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 271349dc963fSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 271449dc963fSmrg *-*-hpux*) 271549dc963fSmrg pic_flag_for_symtable=" $pic_flag" ;; 271649dc963fSmrg *) 271749dc963fSmrg if test "X$my_pic_p" != Xno; then 271849dc963fSmrg pic_flag_for_symtable=" $pic_flag" 27194b0ead49Smrg fi 272049dc963fSmrg ;; 272149dc963fSmrg esac 272249dc963fSmrg ;; 272349dc963fSmrg esac 272449dc963fSmrg symtab_cflags= 272549dc963fSmrg for arg in $LTCFLAGS; do 272649dc963fSmrg case $arg in 272749dc963fSmrg -pie | -fpie | -fPIE) ;; 272849dc963fSmrg *) symtab_cflags="$symtab_cflags $arg" ;; 272949dc963fSmrg esac 273049dc963fSmrg done 27314b0ead49Smrg 273249dc963fSmrg # Now compile the dynamic symbol file. 273349dc963fSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 27344b0ead49Smrg 273549dc963fSmrg # Clean up the generated files. 273649dc963fSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 27374b0ead49Smrg 273849dc963fSmrg # Transform the symbol file into the correct name. 273949dc963fSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 274049dc963fSmrg case $host in 274149dc963fSmrg *cygwin* | *mingw* | *cegcc* ) 274249dc963fSmrg if test -f "$output_objdir/$my_outputname.def"; then 27437aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 27447aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 274549dc963fSmrg else 27467aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 27477aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 27484b0ead49Smrg fi 274949dc963fSmrg ;; 275049dc963fSmrg *) 27517aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 27527aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 275349dc963fSmrg ;; 275449dc963fSmrg esac 275549dc963fSmrg ;; 275649dc963fSmrg *) 275749dc963fSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 275849dc963fSmrg ;; 275949dc963fSmrg esac 276049dc963fSmrg else 276149dc963fSmrg # We keep going just in case the user didn't refer to 276249dc963fSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 276349dc963fSmrg # really was required. 27644b0ead49Smrg 276549dc963fSmrg # Nullify the symbol file. 27667aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 27677aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 276849dc963fSmrg fi 276949dc963fSmrg} 27704b0ead49Smrg 277149dc963fSmrg# func_win32_libid arg 277249dc963fSmrg# return the library type of file 'arg' 277349dc963fSmrg# 277449dc963fSmrg# Need a lot of goo to handle *both* DLLs and import libs 277549dc963fSmrg# Has to be a shell function in order to 'eat' the argument 277649dc963fSmrg# that is supplied when $file_magic_command is called. 27777aa89044Smrg# Despite the name, also deal with 64 bit binaries. 277849dc963fSmrgfunc_win32_libid () 277949dc963fSmrg{ 278049dc963fSmrg $opt_debug 278149dc963fSmrg win32_libid_type="unknown" 278249dc963fSmrg win32_fileres=`file -L $1 2>/dev/null` 278349dc963fSmrg case $win32_fileres in 278449dc963fSmrg *ar\ archive\ import\ library*) # definitely import 278549dc963fSmrg win32_libid_type="x86 archive import" 278649dc963fSmrg ;; 278749dc963fSmrg *ar\ archive*) # could be an import, or static 27887aa89044Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 278949dc963fSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 27907aa89044Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 279149dc963fSmrg win32_nmres=`eval $NM -f posix -A $1 | 279249dc963fSmrg $SED -n -e ' 279349dc963fSmrg 1,100{ 279449dc963fSmrg / I /{ 279549dc963fSmrg s,.*,import, 279649dc963fSmrg p 279749dc963fSmrg q 279849dc963fSmrg } 279949dc963fSmrg }'` 280049dc963fSmrg case $win32_nmres in 280149dc963fSmrg import*) win32_libid_type="x86 archive import";; 280249dc963fSmrg *) win32_libid_type="x86 archive static";; 280349dc963fSmrg esac 280449dc963fSmrg fi 280549dc963fSmrg ;; 280649dc963fSmrg *DLL*) 280749dc963fSmrg win32_libid_type="x86 DLL" 280849dc963fSmrg ;; 280949dc963fSmrg *executable*) # but shell scripts are "executable" too... 281049dc963fSmrg case $win32_fileres in 281149dc963fSmrg *MS\ Windows\ PE\ Intel*) 281249dc963fSmrg win32_libid_type="x86 DLL" 281349dc963fSmrg ;; 281449dc963fSmrg esac 281549dc963fSmrg ;; 281649dc963fSmrg esac 281749dc963fSmrg $ECHO "$win32_libid_type" 281849dc963fSmrg} 28194b0ead49Smrg 28204b0ead49Smrg 28214b0ead49Smrg 282249dc963fSmrg# func_extract_an_archive dir oldlib 282349dc963fSmrgfunc_extract_an_archive () 282449dc963fSmrg{ 282549dc963fSmrg $opt_debug 282649dc963fSmrg f_ex_an_ar_dir="$1"; shift 282749dc963fSmrg f_ex_an_ar_oldlib="$1" 28287aa89044Smrg if test "$lock_old_archive_extraction" = yes; then 28297aa89044Smrg lockfile=$f_ex_an_ar_oldlib.lock 28307aa89044Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 28317aa89044Smrg func_echo "Waiting for $lockfile to be removed" 28327aa89044Smrg sleep 2 28337aa89044Smrg done 28347aa89044Smrg fi 28357aa89044Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 28367aa89044Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 28377aa89044Smrg if test "$lock_old_archive_extraction" = yes; then 28387aa89044Smrg $opt_dry_run || rm -f "$lockfile" 28397aa89044Smrg fi 284049dc963fSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 284149dc963fSmrg : 284249dc963fSmrg else 284349dc963fSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 284449dc963fSmrg fi 284549dc963fSmrg} 28464b0ead49Smrg 28474b0ead49Smrg 284849dc963fSmrg# func_extract_archives gentop oldlib ... 284949dc963fSmrgfunc_extract_archives () 285049dc963fSmrg{ 285149dc963fSmrg $opt_debug 285249dc963fSmrg my_gentop="$1"; shift 285349dc963fSmrg my_oldlibs=${1+"$@"} 285449dc963fSmrg my_oldobjs="" 285549dc963fSmrg my_xlib="" 285649dc963fSmrg my_xabs="" 285749dc963fSmrg my_xdir="" 28584b0ead49Smrg 285949dc963fSmrg for my_xlib in $my_oldlibs; do 286049dc963fSmrg # Extract the objects. 286149dc963fSmrg case $my_xlib in 286249dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 286349dc963fSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 286449dc963fSmrg esac 286549dc963fSmrg func_basename "$my_xlib" 286649dc963fSmrg my_xlib="$func_basename_result" 286749dc963fSmrg my_xlib_u=$my_xlib 286849dc963fSmrg while :; do 286949dc963fSmrg case " $extracted_archives " in 287049dc963fSmrg *" $my_xlib_u "*) 287149dc963fSmrg func_arith $extracted_serial + 1 287249dc963fSmrg extracted_serial=$func_arith_result 287349dc963fSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 287449dc963fSmrg *) break ;; 287549dc963fSmrg esac 287649dc963fSmrg done 287749dc963fSmrg extracted_archives="$extracted_archives $my_xlib_u" 287849dc963fSmrg my_xdir="$my_gentop/$my_xlib_u" 28794b0ead49Smrg 288049dc963fSmrg func_mkdir_p "$my_xdir" 28814b0ead49Smrg 288249dc963fSmrg case $host in 288349dc963fSmrg *-darwin*) 288449dc963fSmrg func_verbose "Extracting $my_xabs" 288549dc963fSmrg # Do not bother doing anything if just a dry run 288649dc963fSmrg $opt_dry_run || { 288749dc963fSmrg darwin_orig_dir=`pwd` 288849dc963fSmrg cd $my_xdir || exit $? 288949dc963fSmrg darwin_archive=$my_xabs 289049dc963fSmrg darwin_curdir=`pwd` 289149dc963fSmrg darwin_base_archive=`basename "$darwin_archive"` 289249dc963fSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 289349dc963fSmrg if test -n "$darwin_arches"; then 289449dc963fSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 289549dc963fSmrg darwin_arch= 289649dc963fSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 289749dc963fSmrg for darwin_arch in $darwin_arches ; do 289849dc963fSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 289949dc963fSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 290049dc963fSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 290149dc963fSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 290249dc963fSmrg cd "$darwin_curdir" 290349dc963fSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 290449dc963fSmrg done # $darwin_arches 290549dc963fSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 290649dc963fSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 290749dc963fSmrg darwin_file= 290849dc963fSmrg darwin_files= 290949dc963fSmrg for darwin_file in $darwin_filelist; do 29107aa89044Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 291149dc963fSmrg $LIPO -create -output "$darwin_file" $darwin_files 291249dc963fSmrg done # $darwin_filelist 291349dc963fSmrg $RM -rf unfat-$$ 291449dc963fSmrg cd "$darwin_orig_dir" 29154b0ead49Smrg else 291649dc963fSmrg cd $darwin_orig_dir 291749dc963fSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 291849dc963fSmrg fi # $darwin_arches 291949dc963fSmrg } # !$opt_dry_run 292049dc963fSmrg ;; 292149dc963fSmrg *) 292249dc963fSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 292349dc963fSmrg ;; 292449dc963fSmrg esac 29257aa89044Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 292649dc963fSmrg done 29274b0ead49Smrg 292849dc963fSmrg func_extract_archives_result="$my_oldobjs" 292949dc963fSmrg} 29304b0ead49Smrg 29314b0ead49Smrg 29327aa89044Smrg# func_emit_wrapper [arg=no] 29337aa89044Smrg# 29347aa89044Smrg# Emit a libtool wrapper script on stdout. 29357aa89044Smrg# Don't directly open a file because we may want to 29367aa89044Smrg# incorporate the script contents within a cygwin/mingw 29377aa89044Smrg# wrapper executable. Must ONLY be called from within 29387aa89044Smrg# func_mode_link because it depends on a number of variables 29397aa89044Smrg# set therein. 294049dc963fSmrg# 29417aa89044Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 29427aa89044Smrg# variable will take. If 'yes', then the emitted script 29437aa89044Smrg# will assume that the directory in which it is stored is 29447aa89044Smrg# the $objdir directory. This is a cygwin/mingw-specific 29457aa89044Smrg# behavior. 29467aa89044Smrgfunc_emit_wrapper () 294749dc963fSmrg{ 29487aa89044Smrg func_emit_wrapper_arg1=${1-no} 29494b0ead49Smrg 295049dc963fSmrg $ECHO "\ 295149dc963fSmrg#! $SHELL 29524b0ead49Smrg 295349dc963fSmrg# $output - temporary wrapper script for $objdir/$outputname 295449dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 295549dc963fSmrg# 295649dc963fSmrg# The $output program cannot be directly executed until all the libtool 295749dc963fSmrg# libraries that it depends on are installed. 295849dc963fSmrg# 295949dc963fSmrg# This wrapper script should never be moved out of the build directory. 296049dc963fSmrg# If it is, it will not operate correctly. 29614b0ead49Smrg 296249dc963fSmrg# Sed substitution that helps us do robust quoting. It backslashifies 296349dc963fSmrg# metacharacters that are still active within double-quoted strings. 296449dc963fSmrgsed_quote_subst='$sed_quote_subst' 29654b0ead49Smrg 296649dc963fSmrg# Be Bourne compatible 296749dc963fSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 296849dc963fSmrg emulate sh 296949dc963fSmrg NULLCMD=: 297049dc963fSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 297149dc963fSmrg # is contrary to our usage. Disable this feature. 297249dc963fSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 297349dc963fSmrg setopt NO_GLOB_SUBST 297449dc963fSmrgelse 297549dc963fSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 297649dc963fSmrgfi 297749dc963fSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 297849dc963fSmrgDUALCASE=1; export DUALCASE # for MKS sh 29794b0ead49Smrg 298049dc963fSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 298149dc963fSmrg# if CDPATH is set. 298249dc963fSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 29834b0ead49Smrg 298449dc963fSmrgrelink_command=\"$relink_command\" 29854b0ead49Smrg 298649dc963fSmrg# This environment variable determines our operation mode. 298749dc963fSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 298849dc963fSmrg # install mode needs the following variables: 298949dc963fSmrg generated_by_libtool_version='$macro_version' 299049dc963fSmrg notinst_deplibs='$notinst_deplibs' 299149dc963fSmrgelse 299249dc963fSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 299349dc963fSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 29947aa89044Smrg file=\"\$0\"" 29957aa89044Smrg 29967aa89044Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 29977aa89044Smrg $ECHO "\ 29987aa89044Smrg 29997aa89044Smrg# A function that is used when there is no print builtin or printf. 30007aa89044Smrgfunc_fallback_echo () 30017aa89044Smrg{ 30027aa89044Smrg eval 'cat <<_LTECHO_EOF 30037aa89044Smrg\$1 30047aa89044Smrg_LTECHO_EOF' 30057aa89044Smrg} 30067aa89044Smrg ECHO=\"$qECHO\" 30077aa89044Smrg fi 30087aa89044Smrg 30097aa89044Smrg# Very basic option parsing. These options are (a) specific to 30107aa89044Smrg# the libtool wrapper, (b) are identical between the wrapper 30117aa89044Smrg# /script/ and the wrapper /executable/ which is used only on 30127aa89044Smrg# windows platforms, and (c) all begin with the string "--lt-" 30137aa89044Smrg# (application programs are unlikely to have options which match 30147aa89044Smrg# this pattern). 30157aa89044Smrg# 30167aa89044Smrg# There are only two supported options: --lt-debug and 30177aa89044Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 30187aa89044Smrg# 30197aa89044Smrg# The first argument to this parsing function should be the 30207aa89044Smrg# script's $0 value, followed by "$@". 30217aa89044Smrglt_option_debug= 30227aa89044Smrgfunc_parse_lt_options () 30237aa89044Smrg{ 30247aa89044Smrg lt_script_arg0=\$0 30257aa89044Smrg shift 30267aa89044Smrg for lt_opt 30277aa89044Smrg do 30287aa89044Smrg case \"\$lt_opt\" in 30297aa89044Smrg --lt-debug) lt_option_debug=1 ;; 30307aa89044Smrg --lt-dump-script) 30317aa89044Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 30327aa89044Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 30337aa89044Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 30347aa89044Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 30357aa89044Smrg exit 0 30367aa89044Smrg ;; 30377aa89044Smrg --lt-*) 30387aa89044Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 30397aa89044Smrg exit 1 30407aa89044Smrg ;; 30417aa89044Smrg esac 30427aa89044Smrg done 30437aa89044Smrg 30447aa89044Smrg # Print the debug banner immediately: 30457aa89044Smrg if test -n \"\$lt_option_debug\"; then 30467aa89044Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 30477aa89044Smrg fi 30487aa89044Smrg} 30497aa89044Smrg 30507aa89044Smrg# Used when --lt-debug. Prints its arguments to stdout 30517aa89044Smrg# (redirection is the responsibility of the caller) 30527aa89044Smrgfunc_lt_dump_args () 30537aa89044Smrg{ 30547aa89044Smrg lt_dump_args_N=1; 30557aa89044Smrg for lt_arg 30567aa89044Smrg do 30577aa89044Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 30587aa89044Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 30597aa89044Smrg done 30607aa89044Smrg} 30617aa89044Smrg 30627aa89044Smrg# Core function for launching the target application 30637aa89044Smrgfunc_exec_program_core () 30647aa89044Smrg{ 306549dc963fSmrg" 30667aa89044Smrg case $host in 30677aa89044Smrg # Backslashes separate directories on plain windows 30687aa89044Smrg *-*-mingw | *-*-os2* | *-cegcc*) 30697aa89044Smrg $ECHO "\ 30707aa89044Smrg if test -n \"\$lt_option_debug\"; then 30717aa89044Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 30727aa89044Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 30737aa89044Smrg fi 30747aa89044Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 30757aa89044Smrg" 30767aa89044Smrg ;; 30777aa89044Smrg 30787aa89044Smrg *) 30797aa89044Smrg $ECHO "\ 30807aa89044Smrg if test -n \"\$lt_option_debug\"; then 30817aa89044Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 30827aa89044Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 30837aa89044Smrg fi 30847aa89044Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 30857aa89044Smrg" 30867aa89044Smrg ;; 30877aa89044Smrg esac 30887aa89044Smrg $ECHO "\ 30897aa89044Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 30907aa89044Smrg exit 1 30917aa89044Smrg} 30927aa89044Smrg 30937aa89044Smrg# A function to encapsulate launching the target application 30947aa89044Smrg# Strips options in the --lt-* namespace from \$@ and 30957aa89044Smrg# launches target application with the remaining arguments. 30967aa89044Smrgfunc_exec_program () 30977aa89044Smrg{ 30987aa89044Smrg for lt_wr_arg 30997aa89044Smrg do 31007aa89044Smrg case \$lt_wr_arg in 31017aa89044Smrg --lt-*) ;; 31027aa89044Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 31037aa89044Smrg esac 31047aa89044Smrg shift 31057aa89044Smrg done 31067aa89044Smrg func_exec_program_core \${1+\"\$@\"} 31077aa89044Smrg} 31087aa89044Smrg 31097aa89044Smrg # Parse options 31107aa89044Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 31114b0ead49Smrg 311249dc963fSmrg # Find the directory that this script lives in. 31137aa89044Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 311449dc963fSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 31154b0ead49Smrg 311649dc963fSmrg # Follow symbolic links until we get to the real thisdir. 31177aa89044Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 311849dc963fSmrg while test -n \"\$file\"; do 31197aa89044Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 31204b0ead49Smrg 312149dc963fSmrg # If there was a directory component, then change thisdir. 312249dc963fSmrg if test \"x\$destdir\" != \"x\$file\"; then 312349dc963fSmrg case \"\$destdir\" in 312449dc963fSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 312549dc963fSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 31264b0ead49Smrg esac 312749dc963fSmrg fi 31284b0ead49Smrg 31297aa89044Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 31307aa89044Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 313149dc963fSmrg done 31324b0ead49Smrg 313349dc963fSmrg # Usually 'no', except on cygwin/mingw when embedded into 313449dc963fSmrg # the cwrapper. 31357aa89044Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 313649dc963fSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 313749dc963fSmrg # special case for '.' 313849dc963fSmrg if test \"\$thisdir\" = \".\"; then 313949dc963fSmrg thisdir=\`pwd\` 314049dc963fSmrg fi 314149dc963fSmrg # remove .libs from thisdir 314249dc963fSmrg case \"\$thisdir\" in 31437aa89044Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 314449dc963fSmrg $objdir ) thisdir=. ;; 314549dc963fSmrg esac 314649dc963fSmrg fi 314749dc963fSmrg 314849dc963fSmrg # Try to get the absolute directory name. 314949dc963fSmrg absdir=\`cd \"\$thisdir\" && pwd\` 315049dc963fSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 315149dc963fSmrg" 315249dc963fSmrg 315349dc963fSmrg if test "$fast_install" = yes; then 315449dc963fSmrg $ECHO "\ 315549dc963fSmrg program=lt-'$outputname'$exeext 315649dc963fSmrg progdir=\"\$thisdir/$objdir\" 315749dc963fSmrg 315849dc963fSmrg if test ! -f \"\$progdir/\$program\" || 315949dc963fSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 316049dc963fSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 316149dc963fSmrg 316249dc963fSmrg file=\"\$\$-\$program\" 316349dc963fSmrg 316449dc963fSmrg if test ! -d \"\$progdir\"; then 316549dc963fSmrg $MKDIR \"\$progdir\" 316649dc963fSmrg else 316749dc963fSmrg $RM \"\$progdir/\$file\" 316849dc963fSmrg fi" 316949dc963fSmrg 317049dc963fSmrg $ECHO "\ 317149dc963fSmrg 317249dc963fSmrg # relink executable if necessary 317349dc963fSmrg if test -n \"\$relink_command\"; then 317449dc963fSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 317549dc963fSmrg else 317649dc963fSmrg $ECHO \"\$relink_command_output\" >&2 317749dc963fSmrg $RM \"\$progdir/\$file\" 317849dc963fSmrg exit 1 31794b0ead49Smrg fi 318049dc963fSmrg fi 31814b0ead49Smrg 318249dc963fSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 318349dc963fSmrg { $RM \"\$progdir/\$program\"; 318449dc963fSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 318549dc963fSmrg $RM \"\$progdir/\$file\" 318649dc963fSmrg fi" 318749dc963fSmrg else 318849dc963fSmrg $ECHO "\ 318949dc963fSmrg program='$outputname' 319049dc963fSmrg progdir=\"\$thisdir/$objdir\" 319149dc963fSmrg" 31924b0ead49Smrg fi 31934b0ead49Smrg 319449dc963fSmrg $ECHO "\ 31954b0ead49Smrg 319649dc963fSmrg if test -f \"\$progdir/\$program\"; then" 31974b0ead49Smrg 319849dc963fSmrg # Export our shlibpath_var if we have one. 319949dc963fSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 320049dc963fSmrg $ECHO "\ 320149dc963fSmrg # Add our own library path to $shlibpath_var 320249dc963fSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 320349dc963fSmrg 320449dc963fSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 320549dc963fSmrg # The second colon is a workaround for a bug in BeOS R4 sed 32067aa89044Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 32074b0ead49Smrg 320849dc963fSmrg export $shlibpath_var 320949dc963fSmrg" 32104b0ead49Smrg fi 32114b0ead49Smrg 321249dc963fSmrg # fixup the dll searchpath if we need to. 321349dc963fSmrg if test -n "$dllsearchpath"; then 321449dc963fSmrg $ECHO "\ 321549dc963fSmrg # Add the dll search path components to the executable PATH 321649dc963fSmrg PATH=$dllsearchpath:\$PATH 321749dc963fSmrg" 321849dc963fSmrg fi 32194b0ead49Smrg 322049dc963fSmrg $ECHO "\ 322149dc963fSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 322249dc963fSmrg # Run the actual program with our arguments. 32237aa89044Smrg func_exec_program \${1+\"\$@\"} 322449dc963fSmrg fi 322549dc963fSmrg else 322649dc963fSmrg # The program doesn't exist. 322749dc963fSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 322849dc963fSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 32297aa89044Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 323049dc963fSmrg exit 1 323149dc963fSmrg fi 323249dc963fSmrgfi\ 323349dc963fSmrg" 323449dc963fSmrg} 32354b0ead49Smrg 32364b0ead49Smrg 323749dc963fSmrg# func_to_host_path arg 323849dc963fSmrg# 323949dc963fSmrg# Convert paths to host format when used with build tools. 324049dc963fSmrg# Intended for use with "native" mingw (where libtool itself 324149dc963fSmrg# is running under the msys shell), or in the following cross- 324249dc963fSmrg# build environments: 324349dc963fSmrg# $build $host 324449dc963fSmrg# mingw (msys) mingw [e.g. native] 324549dc963fSmrg# cygwin mingw 324649dc963fSmrg# *nix + wine mingw 324749dc963fSmrg# where wine is equipped with the `winepath' executable. 324849dc963fSmrg# In the native mingw case, the (msys) shell automatically 324949dc963fSmrg# converts paths for any non-msys applications it launches, 325049dc963fSmrg# but that facility isn't available from inside the cwrapper. 325149dc963fSmrg# Similar accommodations are necessary for $host mingw and 325249dc963fSmrg# $build cygwin. Calling this function does no harm for other 325349dc963fSmrg# $host/$build combinations not listed above. 325449dc963fSmrg# 325549dc963fSmrg# ARG is the path (on $build) that should be converted to 325649dc963fSmrg# the proper representation for $host. The result is stored 325749dc963fSmrg# in $func_to_host_path_result. 325849dc963fSmrgfunc_to_host_path () 325949dc963fSmrg{ 326049dc963fSmrg func_to_host_path_result="$1" 32617aa89044Smrg if test -n "$1"; then 326249dc963fSmrg case $host in 326349dc963fSmrg *mingw* ) 326449dc963fSmrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 326549dc963fSmrg case $build in 326649dc963fSmrg *mingw* ) # actually, msys 326749dc963fSmrg # awkward: cmd appends spaces to result 32687aa89044Smrg func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | 32697aa89044Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 327049dc963fSmrg ;; 327149dc963fSmrg *cygwin* ) 32727aa89044Smrg func_to_host_path_result=`cygpath -w "$1" | 32737aa89044Smrg $SED -e "$lt_sed_naive_backslashify"` 327449dc963fSmrg ;; 327549dc963fSmrg * ) 327649dc963fSmrg # Unfortunately, winepath does not exit with a non-zero 327749dc963fSmrg # error code, so we are forced to check the contents of 327849dc963fSmrg # stdout. On the other hand, if the command is not 327949dc963fSmrg # found, the shell will set an exit code of 127 and print 328049dc963fSmrg # *an error message* to stdout. So we must check for both 328149dc963fSmrg # error code of zero AND non-empty stdout, which explains 328249dc963fSmrg # the odd construction: 328349dc963fSmrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 328449dc963fSmrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 32857aa89044Smrg func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | 328649dc963fSmrg $SED -e "$lt_sed_naive_backslashify"` 328749dc963fSmrg else 328849dc963fSmrg # Allow warning below. 32897aa89044Smrg func_to_host_path_result= 329049dc963fSmrg fi 329149dc963fSmrg ;; 329249dc963fSmrg esac 329349dc963fSmrg if test -z "$func_to_host_path_result" ; then 329449dc963fSmrg func_error "Could not determine host path corresponding to" 32957aa89044Smrg func_error " \`$1'" 329649dc963fSmrg func_error "Continuing, but uninstalled executables may not work." 329749dc963fSmrg # Fallback: 329849dc963fSmrg func_to_host_path_result="$1" 329949dc963fSmrg fi 330049dc963fSmrg ;; 330149dc963fSmrg esac 330249dc963fSmrg fi 330349dc963fSmrg} 330449dc963fSmrg# end: func_to_host_path 33054b0ead49Smrg 330649dc963fSmrg# func_to_host_pathlist arg 330749dc963fSmrg# 330849dc963fSmrg# Convert pathlists to host format when used with build tools. 330949dc963fSmrg# See func_to_host_path(), above. This function supports the 331049dc963fSmrg# following $build/$host combinations (but does no harm for 331149dc963fSmrg# combinations not listed here): 331249dc963fSmrg# $build $host 331349dc963fSmrg# mingw (msys) mingw [e.g. native] 331449dc963fSmrg# cygwin mingw 331549dc963fSmrg# *nix + wine mingw 331649dc963fSmrg# 331749dc963fSmrg# Path separators are also converted from $build format to 331849dc963fSmrg# $host format. If ARG begins or ends with a path separator 331949dc963fSmrg# character, it is preserved (but converted to $host format) 332049dc963fSmrg# on output. 332149dc963fSmrg# 332249dc963fSmrg# ARG is a pathlist (on $build) that should be converted to 332349dc963fSmrg# the proper representation on $host. The result is stored 332449dc963fSmrg# in $func_to_host_pathlist_result. 332549dc963fSmrgfunc_to_host_pathlist () 332649dc963fSmrg{ 332749dc963fSmrg func_to_host_pathlist_result="$1" 33287aa89044Smrg if test -n "$1"; then 332949dc963fSmrg case $host in 333049dc963fSmrg *mingw* ) 333149dc963fSmrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 333249dc963fSmrg # Remove leading and trailing path separator characters from 333349dc963fSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 333449dc963fSmrg # into '.;' and ';.', and winepath ignores them completely. 33357aa89044Smrg func_stripname : : "$1" 33367aa89044Smrg func_to_host_pathlist_tmp1=$func_stripname_result 333749dc963fSmrg case $build in 333849dc963fSmrg *mingw* ) # Actually, msys. 333949dc963fSmrg # Awkward: cmd appends spaces to result. 33407aa89044Smrg func_to_host_pathlist_result=` 33417aa89044Smrg ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | 33427aa89044Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 334349dc963fSmrg ;; 334449dc963fSmrg *cygwin* ) 33457aa89044Smrg func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | 334649dc963fSmrg $SED -e "$lt_sed_naive_backslashify"` 334749dc963fSmrg ;; 334849dc963fSmrg * ) 334949dc963fSmrg # unfortunately, winepath doesn't convert pathlists 335049dc963fSmrg func_to_host_pathlist_result="" 335149dc963fSmrg func_to_host_pathlist_oldIFS=$IFS 335249dc963fSmrg IFS=: 335349dc963fSmrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 335449dc963fSmrg IFS=$func_to_host_pathlist_oldIFS 335549dc963fSmrg if test -n "$func_to_host_pathlist_f" ; then 335649dc963fSmrg func_to_host_path "$func_to_host_pathlist_f" 335749dc963fSmrg if test -n "$func_to_host_path_result" ; then 335849dc963fSmrg if test -z "$func_to_host_pathlist_result" ; then 335949dc963fSmrg func_to_host_pathlist_result="$func_to_host_path_result" 336049dc963fSmrg else 33617aa89044Smrg func_append func_to_host_pathlist_result ";$func_to_host_path_result" 336249dc963fSmrg fi 336349dc963fSmrg fi 336449dc963fSmrg fi 336549dc963fSmrg done 336649dc963fSmrg IFS=$func_to_host_pathlist_oldIFS 336749dc963fSmrg ;; 336849dc963fSmrg esac 33697aa89044Smrg if test -z "$func_to_host_pathlist_result"; then 337049dc963fSmrg func_error "Could not determine the host path(s) corresponding to" 33717aa89044Smrg func_error " \`$1'" 337249dc963fSmrg func_error "Continuing, but uninstalled executables may not work." 337349dc963fSmrg # Fallback. This may break if $1 contains DOS-style drive 337449dc963fSmrg # specifications. The fix is not to complicate the expression 337549dc963fSmrg # below, but for the user to provide a working wine installation 337649dc963fSmrg # with winepath so that path translation in the cross-to-mingw 337749dc963fSmrg # case works properly. 337849dc963fSmrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 337949dc963fSmrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 338049dc963fSmrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 338149dc963fSmrg fi 338249dc963fSmrg # Now, add the leading and trailing path separators back 338349dc963fSmrg case "$1" in 338449dc963fSmrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 338549dc963fSmrg ;; 338649dc963fSmrg esac 338749dc963fSmrg case "$1" in 33887aa89044Smrg *: ) func_append func_to_host_pathlist_result ";" 338949dc963fSmrg ;; 339049dc963fSmrg esac 339149dc963fSmrg ;; 339249dc963fSmrg esac 339349dc963fSmrg fi 339449dc963fSmrg} 339549dc963fSmrg# end: func_to_host_pathlist 33964b0ead49Smrg 339749dc963fSmrg# func_emit_cwrapperexe_src 339849dc963fSmrg# emit the source code for a wrapper executable on stdout 339949dc963fSmrg# Must ONLY be called from within func_mode_link because 340049dc963fSmrg# it depends on a number of variable set therein. 340149dc963fSmrgfunc_emit_cwrapperexe_src () 340249dc963fSmrg{ 340349dc963fSmrg cat <<EOF 34044b0ead49Smrg 340549dc963fSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 340649dc963fSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 34074b0ead49Smrg 340849dc963fSmrg The $output program cannot be directly executed until all the libtool 340949dc963fSmrg libraries that it depends on are installed. 34104b0ead49Smrg 341149dc963fSmrg This wrapper executable should never be moved out of the build directory. 341249dc963fSmrg If it is, it will not operate correctly. 341349dc963fSmrg*/ 341449dc963fSmrgEOF 341549dc963fSmrg cat <<"EOF" 34167aa89044Smrg#ifdef _MSC_VER 34177aa89044Smrg# define _CRT_SECURE_NO_DEPRECATE 1 34187aa89044Smrg#endif 341949dc963fSmrg#include <stdio.h> 342049dc963fSmrg#include <stdlib.h> 342149dc963fSmrg#ifdef _MSC_VER 342249dc963fSmrg# include <direct.h> 342349dc963fSmrg# include <process.h> 342449dc963fSmrg# include <io.h> 342549dc963fSmrg#else 342649dc963fSmrg# include <unistd.h> 342749dc963fSmrg# include <stdint.h> 342849dc963fSmrg# ifdef __CYGWIN__ 342949dc963fSmrg# include <io.h> 343049dc963fSmrg# endif 343149dc963fSmrg#endif 343249dc963fSmrg#include <malloc.h> 343349dc963fSmrg#include <stdarg.h> 343449dc963fSmrg#include <assert.h> 343549dc963fSmrg#include <string.h> 343649dc963fSmrg#include <ctype.h> 343749dc963fSmrg#include <errno.h> 343849dc963fSmrg#include <fcntl.h> 343949dc963fSmrg#include <sys/stat.h> 34404b0ead49Smrg 34417aa89044Smrg/* declarations of non-ANSI functions */ 34427aa89044Smrg#if defined(__MINGW32__) 34437aa89044Smrg# ifdef __STRICT_ANSI__ 34447aa89044Smrgint _putenv (const char *); 34457aa89044Smrg# endif 34467aa89044Smrg#elif defined(__CYGWIN__) 34477aa89044Smrg# ifdef __STRICT_ANSI__ 34487aa89044Smrgchar *realpath (const char *, char *); 34497aa89044Smrgint putenv (char *); 34507aa89044Smrgint setenv (const char *, const char *, int); 34517aa89044Smrg# endif 34527aa89044Smrg/* #elif defined (other platforms) ... */ 34537aa89044Smrg#endif 34547aa89044Smrg 34557aa89044Smrg/* portability defines, excluding path handling macros */ 34567aa89044Smrg#if defined(_MSC_VER) 34577aa89044Smrg# define setmode _setmode 34587aa89044Smrg# define stat _stat 34597aa89044Smrg# define chmod _chmod 34607aa89044Smrg# define getcwd _getcwd 34617aa89044Smrg# define putenv _putenv 34627aa89044Smrg# define S_IXUSR _S_IEXEC 34637aa89044Smrg# ifndef _INTPTR_T_DEFINED 34647aa89044Smrg# define _INTPTR_T_DEFINED 34657aa89044Smrg# define intptr_t int 34667aa89044Smrg# endif 34677aa89044Smrg#elif defined(__MINGW32__) 34687aa89044Smrg# define setmode _setmode 34697aa89044Smrg# define stat _stat 34707aa89044Smrg# define chmod _chmod 34717aa89044Smrg# define getcwd _getcwd 34727aa89044Smrg# define putenv _putenv 34737aa89044Smrg#elif defined(__CYGWIN__) 34747aa89044Smrg# define HAVE_SETENV 34757aa89044Smrg# define FOPEN_WB "wb" 34767aa89044Smrg/* #elif defined (other platforms) ... */ 34777aa89044Smrg#endif 34787aa89044Smrg 347949dc963fSmrg#if defined(PATH_MAX) 348049dc963fSmrg# define LT_PATHMAX PATH_MAX 348149dc963fSmrg#elif defined(MAXPATHLEN) 348249dc963fSmrg# define LT_PATHMAX MAXPATHLEN 348349dc963fSmrg#else 348449dc963fSmrg# define LT_PATHMAX 1024 348549dc963fSmrg#endif 34864b0ead49Smrg 348749dc963fSmrg#ifndef S_IXOTH 348849dc963fSmrg# define S_IXOTH 0 348949dc963fSmrg#endif 349049dc963fSmrg#ifndef S_IXGRP 349149dc963fSmrg# define S_IXGRP 0 349249dc963fSmrg#endif 34934b0ead49Smrg 34947aa89044Smrg/* path handling portability macros */ 349549dc963fSmrg#ifndef DIR_SEPARATOR 349649dc963fSmrg# define DIR_SEPARATOR '/' 349749dc963fSmrg# define PATH_SEPARATOR ':' 349849dc963fSmrg#endif 34994b0ead49Smrg 350049dc963fSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 350149dc963fSmrg defined (__OS2__) 350249dc963fSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 350349dc963fSmrg# define FOPEN_WB "wb" 350449dc963fSmrg# ifndef DIR_SEPARATOR_2 350549dc963fSmrg# define DIR_SEPARATOR_2 '\\' 350649dc963fSmrg# endif 350749dc963fSmrg# ifndef PATH_SEPARATOR_2 350849dc963fSmrg# define PATH_SEPARATOR_2 ';' 350949dc963fSmrg# endif 351049dc963fSmrg#endif 35114b0ead49Smrg 351249dc963fSmrg#ifndef DIR_SEPARATOR_2 351349dc963fSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 351449dc963fSmrg#else /* DIR_SEPARATOR_2 */ 351549dc963fSmrg# define IS_DIR_SEPARATOR(ch) \ 351649dc963fSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 351749dc963fSmrg#endif /* DIR_SEPARATOR_2 */ 35184b0ead49Smrg 351949dc963fSmrg#ifndef PATH_SEPARATOR_2 352049dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 352149dc963fSmrg#else /* PATH_SEPARATOR_2 */ 352249dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 352349dc963fSmrg#endif /* PATH_SEPARATOR_2 */ 35244b0ead49Smrg 352549dc963fSmrg#ifndef FOPEN_WB 352649dc963fSmrg# define FOPEN_WB "w" 352749dc963fSmrg#endif 352849dc963fSmrg#ifndef _O_BINARY 352949dc963fSmrg# define _O_BINARY 0 353049dc963fSmrg#endif 35314b0ead49Smrg 353249dc963fSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 353349dc963fSmrg#define XFREE(stale) do { \ 353449dc963fSmrg if (stale) { free ((void *) stale); stale = 0; } \ 353549dc963fSmrg} while (0) 35364b0ead49Smrg 35377aa89044Smrg#if defined(LT_DEBUGWRAPPER) 35387aa89044Smrgstatic int lt_debug = 1; 353949dc963fSmrg#else 35407aa89044Smrgstatic int lt_debug = 0; 354149dc963fSmrg#endif 35424b0ead49Smrg 35437aa89044Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 35444b0ead49Smrg 354549dc963fSmrgvoid *xmalloc (size_t num); 354649dc963fSmrgchar *xstrdup (const char *string); 354749dc963fSmrgconst char *base_name (const char *name); 354849dc963fSmrgchar *find_executable (const char *wrapper); 354949dc963fSmrgchar *chase_symlinks (const char *pathspec); 355049dc963fSmrgint make_executable (const char *path); 355149dc963fSmrgint check_executable (const char *path); 355249dc963fSmrgchar *strendzap (char *str, const char *pat); 35537aa89044Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 35547aa89044Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 35557aa89044Smrgstatic const char *nonnull (const char *s); 35567aa89044Smrgstatic const char *nonempty (const char *s); 355749dc963fSmrgvoid lt_setenv (const char *name, const char *value); 355849dc963fSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 355949dc963fSmrgvoid lt_update_exe_path (const char *name, const char *value); 356049dc963fSmrgvoid lt_update_lib_path (const char *name, const char *value); 35617aa89044Smrgchar **prepare_spawn (char **argv); 35627aa89044Smrgvoid lt_dump_script (FILE *f); 356349dc963fSmrgEOF 356449dc963fSmrg 356549dc963fSmrg cat <<EOF 356649dc963fSmrgconst char * MAGIC_EXE = "$magic_exe"; 356749dc963fSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 356849dc963fSmrgEOF 35694b0ead49Smrg 357049dc963fSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 357149dc963fSmrg func_to_host_pathlist "$temp_rpath" 357249dc963fSmrg cat <<EOF 357349dc963fSmrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 357449dc963fSmrgEOF 357549dc963fSmrg else 357649dc963fSmrg cat <<"EOF" 357749dc963fSmrgconst char * LIB_PATH_VALUE = ""; 357849dc963fSmrgEOF 35794b0ead49Smrg fi 35804b0ead49Smrg 358149dc963fSmrg if test -n "$dllsearchpath"; then 358249dc963fSmrg func_to_host_pathlist "$dllsearchpath:" 358349dc963fSmrg cat <<EOF 358449dc963fSmrgconst char * EXE_PATH_VARNAME = "PATH"; 358549dc963fSmrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 35864b0ead49SmrgEOF 35874b0ead49Smrg else 358849dc963fSmrg cat <<"EOF" 358949dc963fSmrgconst char * EXE_PATH_VARNAME = ""; 359049dc963fSmrgconst char * EXE_PATH_VALUE = ""; 359149dc963fSmrgEOF 35924b0ead49Smrg fi 359349dc963fSmrg 359449dc963fSmrg if test "$fast_install" = yes; then 359549dc963fSmrg cat <<EOF 359649dc963fSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 359749dc963fSmrgEOF 35984b0ead49Smrg else 359949dc963fSmrg cat <<EOF 360049dc963fSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 360149dc963fSmrgEOF 36024b0ead49Smrg fi 36034b0ead49Smrg 36044b0ead49Smrg 360549dc963fSmrg cat <<"EOF" 36064b0ead49Smrg 360749dc963fSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 36084b0ead49Smrg 360949dc963fSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 361049dc963fSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 36117aa89044Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 36124b0ead49Smrg 361349dc963fSmrgint 361449dc963fSmrgmain (int argc, char *argv[]) 361549dc963fSmrg{ 361649dc963fSmrg char **newargz; 361749dc963fSmrg int newargc; 361849dc963fSmrg char *tmp_pathspec; 361949dc963fSmrg char *actual_cwrapper_path; 362049dc963fSmrg char *actual_cwrapper_name; 362149dc963fSmrg char *target_name; 362249dc963fSmrg char *lt_argv_zero; 362349dc963fSmrg intptr_t rval = 127; 36244b0ead49Smrg 362549dc963fSmrg int i; 36264b0ead49Smrg 362749dc963fSmrg program_name = (char *) xstrdup (base_name (argv[0])); 36287aa89044Smrg newargz = XMALLOC (char *, argc + 1); 36294b0ead49Smrg 36307aa89044Smrg /* very simple arg parsing; don't want to rely on getopt 36317aa89044Smrg * also, copy all non cwrapper options to newargz, except 36327aa89044Smrg * argz[0], which is handled differently 36337aa89044Smrg */ 36347aa89044Smrg newargc=0; 363549dc963fSmrg for (i = 1; i < argc; i++) 363649dc963fSmrg { 363749dc963fSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 363849dc963fSmrg { 363949dc963fSmrgEOF 364049dc963fSmrg case "$host" in 364149dc963fSmrg *mingw* | *cygwin* ) 364249dc963fSmrg # make stdout use "unix" line endings 364349dc963fSmrg echo " setmode(1,_O_BINARY);" 364449dc963fSmrg ;; 364549dc963fSmrg esac 36464b0ead49Smrg 364749dc963fSmrg cat <<"EOF" 36487aa89044Smrg lt_dump_script (stdout); 364949dc963fSmrg return 0; 365049dc963fSmrg } 36517aa89044Smrg if (strcmp (argv[i], debug_opt) == 0) 36527aa89044Smrg { 36537aa89044Smrg lt_debug = 1; 36547aa89044Smrg continue; 36557aa89044Smrg } 36567aa89044Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 36577aa89044Smrg { 36587aa89044Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 36597aa89044Smrg namespace, but it is not one of the ones we know about and 36607aa89044Smrg have already dealt with, above (inluding dump-script), then 36617aa89044Smrg report an error. Otherwise, targets might begin to believe 36627aa89044Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 36637aa89044Smrg namespace. The first time any user complains about this, we'll 36647aa89044Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 36657aa89044Smrg or a configure.ac-settable value. 36667aa89044Smrg */ 36677aa89044Smrg lt_fatal (__FILE__, __LINE__, 36687aa89044Smrg "unrecognized %s option: '%s'", 36697aa89044Smrg ltwrapper_option_prefix, argv[i]); 36707aa89044Smrg } 36717aa89044Smrg /* otherwise ... */ 36727aa89044Smrg newargz[++newargc] = xstrdup (argv[i]); 367349dc963fSmrg } 36747aa89044Smrg newargz[++newargc] = NULL; 36757aa89044Smrg 36767aa89044SmrgEOF 36777aa89044Smrg cat <<EOF 36787aa89044Smrg /* The GNU banner must be the first non-error debug message */ 36797aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 36807aa89044SmrgEOF 36817aa89044Smrg cat <<"EOF" 36827aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 36837aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 36844b0ead49Smrg 368549dc963fSmrg tmp_pathspec = find_executable (argv[0]); 368649dc963fSmrg if (tmp_pathspec == NULL) 36877aa89044Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 36887aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 36897aa89044Smrg "(main) found exe (before symlink chase) at: %s\n", 36907aa89044Smrg tmp_pathspec); 369149dc963fSmrg 369249dc963fSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 36937aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 36947aa89044Smrg "(main) found exe (after symlink chase) at: %s\n", 36957aa89044Smrg actual_cwrapper_path); 369649dc963fSmrg XFREE (tmp_pathspec); 369749dc963fSmrg 36987aa89044Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 369949dc963fSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 370049dc963fSmrg 370149dc963fSmrg /* wrapper name transforms */ 370249dc963fSmrg strendzap (actual_cwrapper_name, ".exe"); 370349dc963fSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 370449dc963fSmrg XFREE (actual_cwrapper_name); 370549dc963fSmrg actual_cwrapper_name = tmp_pathspec; 370649dc963fSmrg tmp_pathspec = 0; 370749dc963fSmrg 370849dc963fSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 370949dc963fSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 371049dc963fSmrg strendzap (target_name, ".exe"); 371149dc963fSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 371249dc963fSmrg XFREE (target_name); 371349dc963fSmrg target_name = tmp_pathspec; 371449dc963fSmrg tmp_pathspec = 0; 371549dc963fSmrg 37167aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 37177aa89044Smrg "(main) libtool target name: %s\n", 37187aa89044Smrg target_name); 371949dc963fSmrgEOF 37204b0ead49Smrg 372149dc963fSmrg cat <<EOF 372249dc963fSmrg newargz[0] = 372349dc963fSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 372449dc963fSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 372549dc963fSmrg strcpy (newargz[0], actual_cwrapper_path); 372649dc963fSmrg strcat (newargz[0], "$objdir"); 372749dc963fSmrg strcat (newargz[0], "/"); 372849dc963fSmrgEOF 37294b0ead49Smrg 373049dc963fSmrg cat <<"EOF" 373149dc963fSmrg /* stop here, and copy so we don't have to do this twice */ 373249dc963fSmrg tmp_pathspec = xstrdup (newargz[0]); 37334b0ead49Smrg 373449dc963fSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 373549dc963fSmrg strcat (newargz[0], actual_cwrapper_name); 37364b0ead49Smrg 373749dc963fSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 373849dc963fSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 373949dc963fSmrg XFREE (tmp_pathspec); 374049dc963fSmrg tmp_pathspec = NULL; 374149dc963fSmrgEOF 37424b0ead49Smrg 374349dc963fSmrg case $host_os in 374449dc963fSmrg mingw*) 374549dc963fSmrg cat <<"EOF" 374649dc963fSmrg { 374749dc963fSmrg char* p; 374849dc963fSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 374949dc963fSmrg { 375049dc963fSmrg *p = '/'; 375149dc963fSmrg } 375249dc963fSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 375349dc963fSmrg { 375449dc963fSmrg *p = '/'; 375549dc963fSmrg } 375649dc963fSmrg } 375749dc963fSmrgEOF 375849dc963fSmrg ;; 375949dc963fSmrg esac 37604b0ead49Smrg 376149dc963fSmrg cat <<"EOF" 376249dc963fSmrg XFREE (target_name); 376349dc963fSmrg XFREE (actual_cwrapper_path); 376449dc963fSmrg XFREE (actual_cwrapper_name); 37654b0ead49Smrg 376649dc963fSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 376749dc963fSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 376849dc963fSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 376949dc963fSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 37704b0ead49Smrg 37717aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 37727aa89044Smrg nonnull (lt_argv_zero)); 377349dc963fSmrg for (i = 0; i < newargc; i++) 377449dc963fSmrg { 37757aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 37767aa89044Smrg i, nonnull (newargz[i])); 377749dc963fSmrg } 37784b0ead49Smrg 377949dc963fSmrgEOF 37804b0ead49Smrg 378149dc963fSmrg case $host_os in 378249dc963fSmrg mingw*) 378349dc963fSmrg cat <<"EOF" 378449dc963fSmrg /* execv doesn't actually work on mingw as expected on unix */ 37857aa89044Smrg newargz = prepare_spawn (newargz); 378649dc963fSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 378749dc963fSmrg if (rval == -1) 378849dc963fSmrg { 378949dc963fSmrg /* failed to start process */ 37907aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 37917aa89044Smrg "(main) failed to launch target \"%s\": %s\n", 37927aa89044Smrg lt_argv_zero, nonnull (strerror (errno))); 379349dc963fSmrg return 127; 379449dc963fSmrg } 379549dc963fSmrg return rval; 379649dc963fSmrgEOF 379749dc963fSmrg ;; 379849dc963fSmrg *) 379949dc963fSmrg cat <<"EOF" 380049dc963fSmrg execv (lt_argv_zero, newargz); 380149dc963fSmrg return rval; /* =127, but avoids unused variable warning */ 380249dc963fSmrgEOF 380349dc963fSmrg ;; 380449dc963fSmrg esac 38054b0ead49Smrg 380649dc963fSmrg cat <<"EOF" 380749dc963fSmrg} 38084b0ead49Smrg 380949dc963fSmrgvoid * 381049dc963fSmrgxmalloc (size_t num) 381149dc963fSmrg{ 381249dc963fSmrg void *p = (void *) malloc (num); 381349dc963fSmrg if (!p) 38147aa89044Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 38154b0ead49Smrg 381649dc963fSmrg return p; 381749dc963fSmrg} 38184b0ead49Smrg 381949dc963fSmrgchar * 382049dc963fSmrgxstrdup (const char *string) 382149dc963fSmrg{ 382249dc963fSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 382349dc963fSmrg string) : NULL; 382449dc963fSmrg} 38254b0ead49Smrg 382649dc963fSmrgconst char * 382749dc963fSmrgbase_name (const char *name) 382849dc963fSmrg{ 382949dc963fSmrg const char *base; 38304b0ead49Smrg 383149dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 383249dc963fSmrg /* Skip over the disk name in MSDOS pathnames. */ 383349dc963fSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 383449dc963fSmrg name += 2; 383549dc963fSmrg#endif 38364b0ead49Smrg 383749dc963fSmrg for (base = name; *name; name++) 383849dc963fSmrg if (IS_DIR_SEPARATOR (*name)) 383949dc963fSmrg base = name + 1; 384049dc963fSmrg return base; 384149dc963fSmrg} 38424b0ead49Smrg 384349dc963fSmrgint 384449dc963fSmrgcheck_executable (const char *path) 384549dc963fSmrg{ 384649dc963fSmrg struct stat st; 38474b0ead49Smrg 38487aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 38497aa89044Smrg nonempty (path)); 385049dc963fSmrg if ((!path) || (!*path)) 385149dc963fSmrg return 0; 38524b0ead49Smrg 385349dc963fSmrg if ((stat (path, &st) >= 0) 385449dc963fSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 385549dc963fSmrg return 1; 385649dc963fSmrg else 385749dc963fSmrg return 0; 385849dc963fSmrg} 38594b0ead49Smrg 386049dc963fSmrgint 386149dc963fSmrgmake_executable (const char *path) 386249dc963fSmrg{ 386349dc963fSmrg int rval = 0; 386449dc963fSmrg struct stat st; 38654b0ead49Smrg 38667aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 38677aa89044Smrg nonempty (path)); 386849dc963fSmrg if ((!path) || (!*path)) 386949dc963fSmrg return 0; 38704b0ead49Smrg 387149dc963fSmrg if (stat (path, &st) >= 0) 387249dc963fSmrg { 387349dc963fSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 387449dc963fSmrg } 387549dc963fSmrg return rval; 387649dc963fSmrg} 38774b0ead49Smrg 387849dc963fSmrg/* Searches for the full path of the wrapper. Returns 387949dc963fSmrg newly allocated full path name if found, NULL otherwise 388049dc963fSmrg Does not chase symlinks, even on platforms that support them. 388149dc963fSmrg*/ 388249dc963fSmrgchar * 388349dc963fSmrgfind_executable (const char *wrapper) 388449dc963fSmrg{ 388549dc963fSmrg int has_slash = 0; 388649dc963fSmrg const char *p; 388749dc963fSmrg const char *p_next; 388849dc963fSmrg /* static buffer for getcwd */ 388949dc963fSmrg char tmp[LT_PATHMAX + 1]; 389049dc963fSmrg int tmp_len; 389149dc963fSmrg char *concat_name; 38924b0ead49Smrg 38937aa89044Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 38947aa89044Smrg nonempty (wrapper)); 38954b0ead49Smrg 389649dc963fSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 389749dc963fSmrg return NULL; 38984b0ead49Smrg 389949dc963fSmrg /* Absolute path? */ 390049dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 390149dc963fSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 390249dc963fSmrg { 390349dc963fSmrg concat_name = xstrdup (wrapper); 390449dc963fSmrg if (check_executable (concat_name)) 390549dc963fSmrg return concat_name; 390649dc963fSmrg XFREE (concat_name); 390749dc963fSmrg } 390849dc963fSmrg else 390949dc963fSmrg { 391049dc963fSmrg#endif 391149dc963fSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 391249dc963fSmrg { 391349dc963fSmrg concat_name = xstrdup (wrapper); 391449dc963fSmrg if (check_executable (concat_name)) 391549dc963fSmrg return concat_name; 391649dc963fSmrg XFREE (concat_name); 391749dc963fSmrg } 391849dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 391949dc963fSmrg } 392049dc963fSmrg#endif 39214b0ead49Smrg 392249dc963fSmrg for (p = wrapper; *p; p++) 392349dc963fSmrg if (*p == '/') 392449dc963fSmrg { 392549dc963fSmrg has_slash = 1; 392649dc963fSmrg break; 392749dc963fSmrg } 392849dc963fSmrg if (!has_slash) 392949dc963fSmrg { 393049dc963fSmrg /* no slashes; search PATH */ 393149dc963fSmrg const char *path = getenv ("PATH"); 393249dc963fSmrg if (path != NULL) 393349dc963fSmrg { 393449dc963fSmrg for (p = path; *p; p = p_next) 393549dc963fSmrg { 393649dc963fSmrg const char *q; 393749dc963fSmrg size_t p_len; 393849dc963fSmrg for (q = p; *q; q++) 393949dc963fSmrg if (IS_PATH_SEPARATOR (*q)) 394049dc963fSmrg break; 394149dc963fSmrg p_len = q - p; 394249dc963fSmrg p_next = (*q == '\0' ? q : q + 1); 394349dc963fSmrg if (p_len == 0) 394449dc963fSmrg { 394549dc963fSmrg /* empty path: current directory */ 394649dc963fSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 39477aa89044Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 39487aa89044Smrg nonnull (strerror (errno))); 394949dc963fSmrg tmp_len = strlen (tmp); 395049dc963fSmrg concat_name = 395149dc963fSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 395249dc963fSmrg memcpy (concat_name, tmp, tmp_len); 395349dc963fSmrg concat_name[tmp_len] = '/'; 395449dc963fSmrg strcpy (concat_name + tmp_len + 1, wrapper); 395549dc963fSmrg } 395649dc963fSmrg else 395749dc963fSmrg { 395849dc963fSmrg concat_name = 395949dc963fSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 396049dc963fSmrg memcpy (concat_name, p, p_len); 396149dc963fSmrg concat_name[p_len] = '/'; 396249dc963fSmrg strcpy (concat_name + p_len + 1, wrapper); 396349dc963fSmrg } 396449dc963fSmrg if (check_executable (concat_name)) 396549dc963fSmrg return concat_name; 396649dc963fSmrg XFREE (concat_name); 396749dc963fSmrg } 396849dc963fSmrg } 396949dc963fSmrg /* not found in PATH; assume curdir */ 397049dc963fSmrg } 397149dc963fSmrg /* Relative path | not found in path: prepend cwd */ 397249dc963fSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 39737aa89044Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 39747aa89044Smrg nonnull (strerror (errno))); 397549dc963fSmrg tmp_len = strlen (tmp); 397649dc963fSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 397749dc963fSmrg memcpy (concat_name, tmp, tmp_len); 397849dc963fSmrg concat_name[tmp_len] = '/'; 397949dc963fSmrg strcpy (concat_name + tmp_len + 1, wrapper); 39804b0ead49Smrg 398149dc963fSmrg if (check_executable (concat_name)) 398249dc963fSmrg return concat_name; 398349dc963fSmrg XFREE (concat_name); 398449dc963fSmrg return NULL; 398549dc963fSmrg} 39864b0ead49Smrg 398749dc963fSmrgchar * 398849dc963fSmrgchase_symlinks (const char *pathspec) 398949dc963fSmrg{ 399049dc963fSmrg#ifndef S_ISLNK 399149dc963fSmrg return xstrdup (pathspec); 399249dc963fSmrg#else 399349dc963fSmrg char buf[LT_PATHMAX]; 399449dc963fSmrg struct stat s; 399549dc963fSmrg char *tmp_pathspec = xstrdup (pathspec); 399649dc963fSmrg char *p; 399749dc963fSmrg int has_symlinks = 0; 399849dc963fSmrg while (strlen (tmp_pathspec) && !has_symlinks) 399949dc963fSmrg { 40007aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 40017aa89044Smrg "checking path component for symlinks: %s\n", 40027aa89044Smrg tmp_pathspec); 400349dc963fSmrg if (lstat (tmp_pathspec, &s) == 0) 400449dc963fSmrg { 400549dc963fSmrg if (S_ISLNK (s.st_mode) != 0) 400649dc963fSmrg { 400749dc963fSmrg has_symlinks = 1; 400849dc963fSmrg break; 400949dc963fSmrg } 40104b0ead49Smrg 401149dc963fSmrg /* search backwards for last DIR_SEPARATOR */ 401249dc963fSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 401349dc963fSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 401449dc963fSmrg p--; 401549dc963fSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 401649dc963fSmrg { 401749dc963fSmrg /* no more DIR_SEPARATORS left */ 401849dc963fSmrg break; 401949dc963fSmrg } 402049dc963fSmrg *p = '\0'; 402149dc963fSmrg } 402249dc963fSmrg else 402349dc963fSmrg { 40247aa89044Smrg lt_fatal (__FILE__, __LINE__, 40257aa89044Smrg "error accessing file \"%s\": %s", 40267aa89044Smrg tmp_pathspec, nonnull (strerror (errno))); 402749dc963fSmrg } 402849dc963fSmrg } 402949dc963fSmrg XFREE (tmp_pathspec); 40304b0ead49Smrg 403149dc963fSmrg if (!has_symlinks) 403249dc963fSmrg { 403349dc963fSmrg return xstrdup (pathspec); 403449dc963fSmrg } 40354b0ead49Smrg 403649dc963fSmrg tmp_pathspec = realpath (pathspec, buf); 403749dc963fSmrg if (tmp_pathspec == 0) 403849dc963fSmrg { 40397aa89044Smrg lt_fatal (__FILE__, __LINE__, 40407aa89044Smrg "could not follow symlinks for %s", pathspec); 404149dc963fSmrg } 404249dc963fSmrg return xstrdup (tmp_pathspec); 404349dc963fSmrg#endif 404449dc963fSmrg} 40454b0ead49Smrg 404649dc963fSmrgchar * 404749dc963fSmrgstrendzap (char *str, const char *pat) 404849dc963fSmrg{ 404949dc963fSmrg size_t len, patlen; 40504b0ead49Smrg 405149dc963fSmrg assert (str != NULL); 405249dc963fSmrg assert (pat != NULL); 40534b0ead49Smrg 405449dc963fSmrg len = strlen (str); 405549dc963fSmrg patlen = strlen (pat); 40564b0ead49Smrg 405749dc963fSmrg if (patlen <= len) 405849dc963fSmrg { 405949dc963fSmrg str += len - patlen; 406049dc963fSmrg if (strcmp (str, pat) == 0) 406149dc963fSmrg *str = '\0'; 406249dc963fSmrg } 406349dc963fSmrg return str; 406449dc963fSmrg} 40654b0ead49Smrg 40667aa89044Smrgvoid 40677aa89044Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 40687aa89044Smrg{ 40697aa89044Smrg va_list args; 40707aa89044Smrg if (lt_debug) 40717aa89044Smrg { 40727aa89044Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 40737aa89044Smrg va_start (args, fmt); 40747aa89044Smrg (void) vfprintf (stderr, fmt, args); 40757aa89044Smrg va_end (args); 40767aa89044Smrg } 40777aa89044Smrg} 40787aa89044Smrg 407949dc963fSmrgstatic void 40807aa89044Smrglt_error_core (int exit_status, const char *file, 40817aa89044Smrg int line, const char *mode, 408249dc963fSmrg const char *message, va_list ap) 408349dc963fSmrg{ 40847aa89044Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 408549dc963fSmrg vfprintf (stderr, message, ap); 408649dc963fSmrg fprintf (stderr, ".\n"); 40874b0ead49Smrg 408849dc963fSmrg if (exit_status >= 0) 408949dc963fSmrg exit (exit_status); 409049dc963fSmrg} 40914b0ead49Smrg 409249dc963fSmrgvoid 40937aa89044Smrglt_fatal (const char *file, int line, const char *message, ...) 409449dc963fSmrg{ 409549dc963fSmrg va_list ap; 409649dc963fSmrg va_start (ap, message); 40977aa89044Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 409849dc963fSmrg va_end (ap); 409949dc963fSmrg} 41004b0ead49Smrg 41017aa89044Smrgstatic const char * 41027aa89044Smrgnonnull (const char *s) 41037aa89044Smrg{ 41047aa89044Smrg return s ? s : "(null)"; 41057aa89044Smrg} 41067aa89044Smrg 41077aa89044Smrgstatic const char * 41087aa89044Smrgnonempty (const char *s) 41097aa89044Smrg{ 41107aa89044Smrg return (s && !*s) ? "(empty)" : nonnull (s); 41117aa89044Smrg} 41127aa89044Smrg 411349dc963fSmrgvoid 411449dc963fSmrglt_setenv (const char *name, const char *value) 411549dc963fSmrg{ 41167aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 41177aa89044Smrg "(lt_setenv) setting '%s' to '%s'\n", 41187aa89044Smrg nonnull (name), nonnull (value)); 411949dc963fSmrg { 412049dc963fSmrg#ifdef HAVE_SETENV 412149dc963fSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 412249dc963fSmrg char *str = xstrdup (value); 412349dc963fSmrg setenv (name, str, 1); 412449dc963fSmrg#else 412549dc963fSmrg int len = strlen (name) + 1 + strlen (value) + 1; 412649dc963fSmrg char *str = XMALLOC (char, len); 412749dc963fSmrg sprintf (str, "%s=%s", name, value); 412849dc963fSmrg if (putenv (str) != EXIT_SUCCESS) 412949dc963fSmrg { 413049dc963fSmrg XFREE (str); 413149dc963fSmrg } 413249dc963fSmrg#endif 413349dc963fSmrg } 413449dc963fSmrg} 41354b0ead49Smrg 413649dc963fSmrgchar * 413749dc963fSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 413849dc963fSmrg{ 413949dc963fSmrg char *new_value; 414049dc963fSmrg if (orig_value && *orig_value) 414149dc963fSmrg { 414249dc963fSmrg int orig_value_len = strlen (orig_value); 414349dc963fSmrg int add_len = strlen (add); 414449dc963fSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 414549dc963fSmrg if (to_end) 414649dc963fSmrg { 414749dc963fSmrg strcpy (new_value, orig_value); 414849dc963fSmrg strcpy (new_value + orig_value_len, add); 414949dc963fSmrg } 415049dc963fSmrg else 415149dc963fSmrg { 415249dc963fSmrg strcpy (new_value, add); 415349dc963fSmrg strcpy (new_value + add_len, orig_value); 415449dc963fSmrg } 415549dc963fSmrg } 415649dc963fSmrg else 415749dc963fSmrg { 415849dc963fSmrg new_value = xstrdup (add); 415949dc963fSmrg } 416049dc963fSmrg return new_value; 416149dc963fSmrg} 41624b0ead49Smrg 416349dc963fSmrgvoid 416449dc963fSmrglt_update_exe_path (const char *name, const char *value) 416549dc963fSmrg{ 41667aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 41677aa89044Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 41687aa89044Smrg nonnull (name), nonnull (value)); 41694b0ead49Smrg 417049dc963fSmrg if (name && *name && value && *value) 417149dc963fSmrg { 417249dc963fSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 417349dc963fSmrg /* some systems can't cope with a ':'-terminated path #' */ 417449dc963fSmrg int len = strlen (new_value); 417549dc963fSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 417649dc963fSmrg { 417749dc963fSmrg new_value[len-1] = '\0'; 417849dc963fSmrg } 417949dc963fSmrg lt_setenv (name, new_value); 418049dc963fSmrg XFREE (new_value); 418149dc963fSmrg } 418249dc963fSmrg} 41834b0ead49Smrg 418449dc963fSmrgvoid 418549dc963fSmrglt_update_lib_path (const char *name, const char *value) 418649dc963fSmrg{ 41877aa89044Smrg lt_debugprintf (__FILE__, __LINE__, 41887aa89044Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 41897aa89044Smrg nonnull (name), nonnull (value)); 41904b0ead49Smrg 419149dc963fSmrg if (name && *name && value && *value) 419249dc963fSmrg { 419349dc963fSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 419449dc963fSmrg lt_setenv (name, new_value); 419549dc963fSmrg XFREE (new_value); 419649dc963fSmrg } 419749dc963fSmrg} 41984b0ead49Smrg 41997aa89044SmrgEOF 42007aa89044Smrg case $host_os in 42017aa89044Smrg mingw*) 42027aa89044Smrg cat <<"EOF" 42037aa89044Smrg 42047aa89044Smrg/* Prepares an argument vector before calling spawn(). 42057aa89044Smrg Note that spawn() does not by itself call the command interpreter 42067aa89044Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 42077aa89044Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 42087aa89044Smrg GetVersionEx(&v); 42097aa89044Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 42107aa89044Smrg }) ? "cmd.exe" : "command.com"). 42117aa89044Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 42127aa89044Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 42137aa89044Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 42147aa89044Smrg special way: 42157aa89044Smrg - Space and tab are interpreted as delimiters. They are not treated as 42167aa89044Smrg delimiters if they are surrounded by double quotes: "...". 42177aa89044Smrg - Unescaped double quotes are removed from the input. Their only effect is 42187aa89044Smrg that within double quotes, space and tab are treated like normal 42197aa89044Smrg characters. 42207aa89044Smrg - Backslashes not followed by double quotes are not special. 42217aa89044Smrg - But 2*n+1 backslashes followed by a double quote become 42227aa89044Smrg n backslashes followed by a double quote (n >= 0): 42237aa89044Smrg \" -> " 42247aa89044Smrg \\\" -> \" 42257aa89044Smrg \\\\\" -> \\" 42267aa89044Smrg */ 42277aa89044Smrg#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" 42287aa89044Smrg#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" 42297aa89044Smrgchar ** 42307aa89044Smrgprepare_spawn (char **argv) 42317aa89044Smrg{ 42327aa89044Smrg size_t argc; 42337aa89044Smrg char **new_argv; 42347aa89044Smrg size_t i; 42357aa89044Smrg 42367aa89044Smrg /* Count number of arguments. */ 42377aa89044Smrg for (argc = 0; argv[argc] != NULL; argc++) 42387aa89044Smrg ; 42397aa89044Smrg 42407aa89044Smrg /* Allocate new argument vector. */ 42417aa89044Smrg new_argv = XMALLOC (char *, argc + 1); 42427aa89044Smrg 42437aa89044Smrg /* Put quoted arguments into the new argument vector. */ 42447aa89044Smrg for (i = 0; i < argc; i++) 42457aa89044Smrg { 42467aa89044Smrg const char *string = argv[i]; 42477aa89044Smrg 42487aa89044Smrg if (string[0] == '\0') 42497aa89044Smrg new_argv[i] = xstrdup ("\"\""); 42507aa89044Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 42517aa89044Smrg { 42527aa89044Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 42537aa89044Smrg size_t length; 42547aa89044Smrg unsigned int backslashes; 42557aa89044Smrg const char *s; 42567aa89044Smrg char *quoted_string; 42577aa89044Smrg char *p; 42587aa89044Smrg 42597aa89044Smrg length = 0; 42607aa89044Smrg backslashes = 0; 42617aa89044Smrg if (quote_around) 42627aa89044Smrg length++; 42637aa89044Smrg for (s = string; *s != '\0'; s++) 42647aa89044Smrg { 42657aa89044Smrg char c = *s; 42667aa89044Smrg if (c == '"') 42677aa89044Smrg length += backslashes + 1; 42687aa89044Smrg length++; 42697aa89044Smrg if (c == '\\') 42707aa89044Smrg backslashes++; 42717aa89044Smrg else 42727aa89044Smrg backslashes = 0; 42737aa89044Smrg } 42747aa89044Smrg if (quote_around) 42757aa89044Smrg length += backslashes + 1; 42767aa89044Smrg 42777aa89044Smrg quoted_string = XMALLOC (char, length + 1); 42787aa89044Smrg 42797aa89044Smrg p = quoted_string; 42807aa89044Smrg backslashes = 0; 42817aa89044Smrg if (quote_around) 42827aa89044Smrg *p++ = '"'; 42837aa89044Smrg for (s = string; *s != '\0'; s++) 42847aa89044Smrg { 42857aa89044Smrg char c = *s; 42867aa89044Smrg if (c == '"') 42877aa89044Smrg { 42887aa89044Smrg unsigned int j; 42897aa89044Smrg for (j = backslashes + 1; j > 0; j--) 42907aa89044Smrg *p++ = '\\'; 42917aa89044Smrg } 42927aa89044Smrg *p++ = c; 42937aa89044Smrg if (c == '\\') 42947aa89044Smrg backslashes++; 42957aa89044Smrg else 42967aa89044Smrg backslashes = 0; 42977aa89044Smrg } 42987aa89044Smrg if (quote_around) 42997aa89044Smrg { 43007aa89044Smrg unsigned int j; 43017aa89044Smrg for (j = backslashes; j > 0; j--) 43027aa89044Smrg *p++ = '\\'; 43037aa89044Smrg *p++ = '"'; 43047aa89044Smrg } 43057aa89044Smrg *p = '\0'; 43067aa89044Smrg 43077aa89044Smrg new_argv[i] = quoted_string; 43087aa89044Smrg } 43097aa89044Smrg else 43107aa89044Smrg new_argv[i] = (char *) string; 43117aa89044Smrg } 43127aa89044Smrg new_argv[argc] = NULL; 43137aa89044Smrg 43147aa89044Smrg return new_argv; 43157aa89044Smrg} 43167aa89044SmrgEOF 43177aa89044Smrg ;; 43187aa89044Smrg esac 43197aa89044Smrg 43207aa89044Smrg cat <<"EOF" 43217aa89044Smrgvoid lt_dump_script (FILE* f) 43227aa89044Smrg{ 43237aa89044SmrgEOF 43247aa89044Smrg func_emit_wrapper yes | 43257aa89044Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 43267aa89044Smrg -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 43274b0ead49Smrg 43287aa89044Smrg cat <<"EOF" 43297aa89044Smrg} 433049dc963fSmrgEOF 433149dc963fSmrg} 433249dc963fSmrg# end: func_emit_cwrapperexe_src 43334b0ead49Smrg 43347aa89044Smrg# func_win32_import_lib_p ARG 43357aa89044Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 43367aa89044Smrgfunc_win32_import_lib_p () 43377aa89044Smrg{ 43387aa89044Smrg $opt_debug 43397aa89044Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 43407aa89044Smrg *import*) : ;; 43417aa89044Smrg *) false ;; 43427aa89044Smrg esac 43437aa89044Smrg} 43447aa89044Smrg 434549dc963fSmrg# func_mode_link arg... 434649dc963fSmrgfunc_mode_link () 434749dc963fSmrg{ 434849dc963fSmrg $opt_debug 434949dc963fSmrg case $host in 435049dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 435149dc963fSmrg # It is impossible to link a dll without this setting, and 435249dc963fSmrg # we shouldn't force the makefile maintainer to figure out 435349dc963fSmrg # which system we are compiling for in order to pass an extra 435449dc963fSmrg # flag for every libtool invocation. 435549dc963fSmrg # allow_undefined=no 43564b0ead49Smrg 435749dc963fSmrg # FIXME: Unfortunately, there are problems with the above when trying 435849dc963fSmrg # to make a dll which has undefined symbols, in which case not 435949dc963fSmrg # even a static library is built. For now, we need to specify 436049dc963fSmrg # -no-undefined on the libtool link line when we can be certain 436149dc963fSmrg # that all symbols are satisfied, otherwise we get a static library. 436249dc963fSmrg allow_undefined=yes 436349dc963fSmrg ;; 436449dc963fSmrg *) 436549dc963fSmrg allow_undefined=yes 436649dc963fSmrg ;; 436749dc963fSmrg esac 436849dc963fSmrg libtool_args=$nonopt 436949dc963fSmrg base_compile="$nonopt $@" 437049dc963fSmrg compile_command=$nonopt 437149dc963fSmrg finalize_command=$nonopt 43724b0ead49Smrg 437349dc963fSmrg compile_rpath= 437449dc963fSmrg finalize_rpath= 437549dc963fSmrg compile_shlibpath= 437649dc963fSmrg finalize_shlibpath= 437749dc963fSmrg convenience= 437849dc963fSmrg old_convenience= 437949dc963fSmrg deplibs= 438049dc963fSmrg old_deplibs= 438149dc963fSmrg compiler_flags= 438249dc963fSmrg linker_flags= 438349dc963fSmrg dllsearchpath= 438449dc963fSmrg lib_search_path=`pwd` 438549dc963fSmrg inst_prefix_dir= 438649dc963fSmrg new_inherited_linker_flags= 43874b0ead49Smrg 438849dc963fSmrg avoid_version=no 43897aa89044Smrg bindir= 439049dc963fSmrg dlfiles= 439149dc963fSmrg dlprefiles= 439249dc963fSmrg dlself=no 439349dc963fSmrg export_dynamic=no 439449dc963fSmrg export_symbols= 439549dc963fSmrg export_symbols_regex= 439649dc963fSmrg generated= 439749dc963fSmrg libobjs= 439849dc963fSmrg ltlibs= 439949dc963fSmrg module=no 440049dc963fSmrg no_install=no 440149dc963fSmrg objs= 440249dc963fSmrg non_pic_objects= 440349dc963fSmrg precious_files_regex= 440449dc963fSmrg prefer_static_libs=no 440549dc963fSmrg preload=no 440649dc963fSmrg prev= 440749dc963fSmrg prevarg= 440849dc963fSmrg release= 440949dc963fSmrg rpath= 441049dc963fSmrg xrpath= 441149dc963fSmrg perm_rpath= 441249dc963fSmrg temp_rpath= 441349dc963fSmrg thread_safe=no 441449dc963fSmrg vinfo= 441549dc963fSmrg vinfo_number=no 441649dc963fSmrg weak_libs= 441749dc963fSmrg single_module="${wl}-single_module" 441849dc963fSmrg func_infer_tag $base_compile 441949dc963fSmrg 442049dc963fSmrg # We need to know -static, to get the right output filenames. 442149dc963fSmrg for arg 442249dc963fSmrg do 442349dc963fSmrg case $arg in 442449dc963fSmrg -shared) 442549dc963fSmrg test "$build_libtool_libs" != yes && \ 442649dc963fSmrg func_fatal_configuration "can not build a shared library" 442749dc963fSmrg build_old_libs=no 442849dc963fSmrg break 442949dc963fSmrg ;; 443049dc963fSmrg -all-static | -static | -static-libtool-libs) 443149dc963fSmrg case $arg in 443249dc963fSmrg -all-static) 443349dc963fSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 443449dc963fSmrg func_warning "complete static linking is impossible in this configuration" 443549dc963fSmrg fi 443649dc963fSmrg if test -n "$link_static_flag"; then 443749dc963fSmrg dlopen_self=$dlopen_self_static 443849dc963fSmrg fi 443949dc963fSmrg prefer_static_libs=yes 444049dc963fSmrg ;; 444149dc963fSmrg -static) 444249dc963fSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 444349dc963fSmrg dlopen_self=$dlopen_self_static 444449dc963fSmrg fi 444549dc963fSmrg prefer_static_libs=built 444649dc963fSmrg ;; 444749dc963fSmrg -static-libtool-libs) 444849dc963fSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 444949dc963fSmrg dlopen_self=$dlopen_self_static 44504b0ead49Smrg fi 445149dc963fSmrg prefer_static_libs=yes 445249dc963fSmrg ;; 445349dc963fSmrg esac 445449dc963fSmrg build_libtool_libs=no 445549dc963fSmrg build_old_libs=yes 445649dc963fSmrg break 445749dc963fSmrg ;; 445849dc963fSmrg esac 445949dc963fSmrg done 44604b0ead49Smrg 446149dc963fSmrg # See if our shared archives depend on static archives. 446249dc963fSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 44634b0ead49Smrg 446449dc963fSmrg # Go through the arguments, transforming them on the way. 446549dc963fSmrg while test "$#" -gt 0; do 446649dc963fSmrg arg="$1" 446749dc963fSmrg shift 446849dc963fSmrg func_quote_for_eval "$arg" 446949dc963fSmrg qarg=$func_quote_for_eval_unquoted_result 447049dc963fSmrg func_append libtool_args " $func_quote_for_eval_result" 44714b0ead49Smrg 447249dc963fSmrg # If the previous option needs an argument, assign it. 447349dc963fSmrg if test -n "$prev"; then 447449dc963fSmrg case $prev in 447549dc963fSmrg output) 447649dc963fSmrg func_append compile_command " @OUTPUT@" 447749dc963fSmrg func_append finalize_command " @OUTPUT@" 447849dc963fSmrg ;; 447949dc963fSmrg esac 44804b0ead49Smrg 448149dc963fSmrg case $prev in 44827aa89044Smrg bindir) 44837aa89044Smrg bindir="$arg" 44847aa89044Smrg prev= 44857aa89044Smrg continue 44867aa89044Smrg ;; 448749dc963fSmrg dlfiles|dlprefiles) 448849dc963fSmrg if test "$preload" = no; then 448949dc963fSmrg # Add the symbol object into the linking commands. 449049dc963fSmrg func_append compile_command " @SYMFILE@" 449149dc963fSmrg func_append finalize_command " @SYMFILE@" 449249dc963fSmrg preload=yes 449349dc963fSmrg fi 449449dc963fSmrg case $arg in 449549dc963fSmrg *.la | *.lo) ;; # We handle these cases below. 449649dc963fSmrg force) 449749dc963fSmrg if test "$dlself" = no; then 449849dc963fSmrg dlself=needless 449949dc963fSmrg export_dynamic=yes 450049dc963fSmrg fi 450149dc963fSmrg prev= 450249dc963fSmrg continue 450349dc963fSmrg ;; 450449dc963fSmrg self) 450549dc963fSmrg if test "$prev" = dlprefiles; then 450649dc963fSmrg dlself=yes 450749dc963fSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 450849dc963fSmrg dlself=yes 45094b0ead49Smrg else 451049dc963fSmrg dlself=needless 451149dc963fSmrg export_dynamic=yes 45124b0ead49Smrg fi 451349dc963fSmrg prev= 451449dc963fSmrg continue 451549dc963fSmrg ;; 451649dc963fSmrg *) 451749dc963fSmrg if test "$prev" = dlfiles; then 451849dc963fSmrg dlfiles="$dlfiles $arg" 45194b0ead49Smrg else 452049dc963fSmrg dlprefiles="$dlprefiles $arg" 45214b0ead49Smrg fi 452249dc963fSmrg prev= 452349dc963fSmrg continue 452449dc963fSmrg ;; 452549dc963fSmrg esac 452649dc963fSmrg ;; 452749dc963fSmrg expsyms) 452849dc963fSmrg export_symbols="$arg" 452949dc963fSmrg test -f "$arg" \ 453049dc963fSmrg || func_fatal_error "symbol file \`$arg' does not exist" 453149dc963fSmrg prev= 453249dc963fSmrg continue 453349dc963fSmrg ;; 453449dc963fSmrg expsyms_regex) 453549dc963fSmrg export_symbols_regex="$arg" 453649dc963fSmrg prev= 453749dc963fSmrg continue 453849dc963fSmrg ;; 453949dc963fSmrg framework) 45404b0ead49Smrg case $host in 454149dc963fSmrg *-*-darwin*) 454249dc963fSmrg case "$deplibs " in 454349dc963fSmrg *" $qarg.ltframework "*) ;; 454449dc963fSmrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 454549dc963fSmrg ;; 454649dc963fSmrg esac 454749dc963fSmrg ;; 45484b0ead49Smrg esac 454949dc963fSmrg prev= 455049dc963fSmrg continue 45514b0ead49Smrg ;; 455249dc963fSmrg inst_prefix) 455349dc963fSmrg inst_prefix_dir="$arg" 455449dc963fSmrg prev= 455549dc963fSmrg continue 45564b0ead49Smrg ;; 455749dc963fSmrg objectlist) 455849dc963fSmrg if test -f "$arg"; then 455949dc963fSmrg save_arg=$arg 456049dc963fSmrg moreargs= 456149dc963fSmrg for fil in `cat "$save_arg"` 456249dc963fSmrg do 456349dc963fSmrg# moreargs="$moreargs $fil" 456449dc963fSmrg arg=$fil 456549dc963fSmrg # A libtool-controlled object. 45664b0ead49Smrg 456749dc963fSmrg # Check to see that this really is a libtool object. 456849dc963fSmrg if func_lalib_unsafe_p "$arg"; then 456949dc963fSmrg pic_object= 457049dc963fSmrg non_pic_object= 45714b0ead49Smrg 457249dc963fSmrg # Read the .lo file 457349dc963fSmrg func_source "$arg" 45744b0ead49Smrg 457549dc963fSmrg if test -z "$pic_object" || 457649dc963fSmrg test -z "$non_pic_object" || 457749dc963fSmrg test "$pic_object" = none && 457849dc963fSmrg test "$non_pic_object" = none; then 457949dc963fSmrg func_fatal_error "cannot find name of object for \`$arg'" 458049dc963fSmrg fi 45814b0ead49Smrg 458249dc963fSmrg # Extract subdirectory from the argument. 458349dc963fSmrg func_dirname "$arg" "/" "" 458449dc963fSmrg xdir="$func_dirname_result" 45854b0ead49Smrg 458649dc963fSmrg if test "$pic_object" != none; then 458749dc963fSmrg # Prepend the subdirectory the object is found in. 458849dc963fSmrg pic_object="$xdir$pic_object" 45894b0ead49Smrg 459049dc963fSmrg if test "$prev" = dlfiles; then 459149dc963fSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 459249dc963fSmrg dlfiles="$dlfiles $pic_object" 459349dc963fSmrg prev= 459449dc963fSmrg continue 459549dc963fSmrg else 459649dc963fSmrg # If libtool objects are unsupported, then we need to preload. 459749dc963fSmrg prev=dlprefiles 459849dc963fSmrg fi 459949dc963fSmrg fi 46004b0ead49Smrg 460149dc963fSmrg # CHECK ME: I think I busted this. -Ossama 460249dc963fSmrg if test "$prev" = dlprefiles; then 460349dc963fSmrg # Preload the old-style object. 460449dc963fSmrg dlprefiles="$dlprefiles $pic_object" 460549dc963fSmrg prev= 460649dc963fSmrg fi 46074b0ead49Smrg 460849dc963fSmrg # A PIC object. 460949dc963fSmrg func_append libobjs " $pic_object" 461049dc963fSmrg arg="$pic_object" 461149dc963fSmrg fi 46124b0ead49Smrg 461349dc963fSmrg # Non-PIC object. 461449dc963fSmrg if test "$non_pic_object" != none; then 461549dc963fSmrg # Prepend the subdirectory the object is found in. 461649dc963fSmrg non_pic_object="$xdir$non_pic_object" 46174b0ead49Smrg 461849dc963fSmrg # A standard non-PIC object 461949dc963fSmrg func_append non_pic_objects " $non_pic_object" 462049dc963fSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 462149dc963fSmrg arg="$non_pic_object" 462249dc963fSmrg fi 462349dc963fSmrg else 462449dc963fSmrg # If the PIC object exists, use it instead. 462549dc963fSmrg # $xdir was prepended to $pic_object above. 462649dc963fSmrg non_pic_object="$pic_object" 462749dc963fSmrg func_append non_pic_objects " $non_pic_object" 462849dc963fSmrg fi 462949dc963fSmrg else 463049dc963fSmrg # Only an error if not doing a dry-run. 463149dc963fSmrg if $opt_dry_run; then 463249dc963fSmrg # Extract subdirectory from the argument. 463349dc963fSmrg func_dirname "$arg" "/" "" 463449dc963fSmrg xdir="$func_dirname_result" 463549dc963fSmrg 463649dc963fSmrg func_lo2o "$arg" 463749dc963fSmrg pic_object=$xdir$objdir/$func_lo2o_result 463849dc963fSmrg non_pic_object=$xdir$func_lo2o_result 463949dc963fSmrg func_append libobjs " $pic_object" 464049dc963fSmrg func_append non_pic_objects " $non_pic_object" 464149dc963fSmrg else 464249dc963fSmrg func_fatal_error "\`$arg' is not a valid libtool object" 464349dc963fSmrg fi 464449dc963fSmrg fi 464549dc963fSmrg done 46464b0ead49Smrg else 464749dc963fSmrg func_fatal_error "link input file \`$arg' does not exist" 46484b0ead49Smrg fi 464949dc963fSmrg arg=$save_arg 465049dc963fSmrg prev= 465149dc963fSmrg continue 465249dc963fSmrg ;; 465349dc963fSmrg precious_regex) 465449dc963fSmrg precious_files_regex="$arg" 465549dc963fSmrg prev= 465649dc963fSmrg continue 465749dc963fSmrg ;; 465849dc963fSmrg release) 465949dc963fSmrg release="-$arg" 466049dc963fSmrg prev= 466149dc963fSmrg continue 466249dc963fSmrg ;; 466349dc963fSmrg rpath | xrpath) 466449dc963fSmrg # We need an absolute path. 466549dc963fSmrg case $arg in 466649dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 466749dc963fSmrg *) 466849dc963fSmrg func_fatal_error "only absolute run-paths are allowed" 466949dc963fSmrg ;; 467049dc963fSmrg esac 467149dc963fSmrg if test "$prev" = rpath; then 467249dc963fSmrg case "$rpath " in 467349dc963fSmrg *" $arg "*) ;; 467449dc963fSmrg *) rpath="$rpath $arg" ;; 467549dc963fSmrg esac 46764b0ead49Smrg else 467749dc963fSmrg case "$xrpath " in 467849dc963fSmrg *" $arg "*) ;; 467949dc963fSmrg *) xrpath="$xrpath $arg" ;; 468049dc963fSmrg esac 46814b0ead49Smrg fi 468249dc963fSmrg prev= 468349dc963fSmrg continue 468449dc963fSmrg ;; 468549dc963fSmrg shrext) 468649dc963fSmrg shrext_cmds="$arg" 468749dc963fSmrg prev= 468849dc963fSmrg continue 468949dc963fSmrg ;; 469049dc963fSmrg weak) 469149dc963fSmrg weak_libs="$weak_libs $arg" 469249dc963fSmrg prev= 469349dc963fSmrg continue 469449dc963fSmrg ;; 469549dc963fSmrg xcclinker) 469649dc963fSmrg linker_flags="$linker_flags $qarg" 469749dc963fSmrg compiler_flags="$compiler_flags $qarg" 469849dc963fSmrg prev= 469949dc963fSmrg func_append compile_command " $qarg" 470049dc963fSmrg func_append finalize_command " $qarg" 470149dc963fSmrg continue 470249dc963fSmrg ;; 470349dc963fSmrg xcompiler) 470449dc963fSmrg compiler_flags="$compiler_flags $qarg" 470549dc963fSmrg prev= 470649dc963fSmrg func_append compile_command " $qarg" 470749dc963fSmrg func_append finalize_command " $qarg" 470849dc963fSmrg continue 470949dc963fSmrg ;; 471049dc963fSmrg xlinker) 471149dc963fSmrg linker_flags="$linker_flags $qarg" 471249dc963fSmrg compiler_flags="$compiler_flags $wl$qarg" 471349dc963fSmrg prev= 471449dc963fSmrg func_append compile_command " $wl$qarg" 471549dc963fSmrg func_append finalize_command " $wl$qarg" 471649dc963fSmrg continue 471749dc963fSmrg ;; 471849dc963fSmrg *) 471949dc963fSmrg eval "$prev=\"\$arg\"" 472049dc963fSmrg prev= 472149dc963fSmrg continue 472249dc963fSmrg ;; 47234b0ead49Smrg esac 472449dc963fSmrg fi # test -n "$prev" 47254b0ead49Smrg 472649dc963fSmrg prevarg="$arg" 47274b0ead49Smrg 472849dc963fSmrg case $arg in 472949dc963fSmrg -all-static) 473049dc963fSmrg if test -n "$link_static_flag"; then 473149dc963fSmrg # See comment for -static flag below, for more details. 473249dc963fSmrg func_append compile_command " $link_static_flag" 473349dc963fSmrg func_append finalize_command " $link_static_flag" 473449dc963fSmrg fi 473549dc963fSmrg continue 473649dc963fSmrg ;; 47374b0ead49Smrg 473849dc963fSmrg -allow-undefined) 473949dc963fSmrg # FIXME: remove this flag sometime in the future. 474049dc963fSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 474149dc963fSmrg ;; 47424b0ead49Smrg 474349dc963fSmrg -avoid-version) 474449dc963fSmrg avoid_version=yes 474549dc963fSmrg continue 474649dc963fSmrg ;; 47474b0ead49Smrg 47487aa89044Smrg -bindir) 47497aa89044Smrg prev=bindir 47507aa89044Smrg continue 47517aa89044Smrg ;; 47527aa89044Smrg 475349dc963fSmrg -dlopen) 475449dc963fSmrg prev=dlfiles 475549dc963fSmrg continue 475649dc963fSmrg ;; 47574b0ead49Smrg 475849dc963fSmrg -dlpreopen) 475949dc963fSmrg prev=dlprefiles 476049dc963fSmrg continue 476149dc963fSmrg ;; 47624b0ead49Smrg 476349dc963fSmrg -export-dynamic) 476449dc963fSmrg export_dynamic=yes 476549dc963fSmrg continue 476649dc963fSmrg ;; 47674b0ead49Smrg 476849dc963fSmrg -export-symbols | -export-symbols-regex) 476949dc963fSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 477049dc963fSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 477149dc963fSmrg fi 477249dc963fSmrg if test "X$arg" = "X-export-symbols"; then 477349dc963fSmrg prev=expsyms 477449dc963fSmrg else 477549dc963fSmrg prev=expsyms_regex 477649dc963fSmrg fi 477749dc963fSmrg continue 477849dc963fSmrg ;; 47794b0ead49Smrg 478049dc963fSmrg -framework) 478149dc963fSmrg prev=framework 478249dc963fSmrg continue 478349dc963fSmrg ;; 47844b0ead49Smrg 478549dc963fSmrg -inst-prefix-dir) 478649dc963fSmrg prev=inst_prefix 478749dc963fSmrg continue 478849dc963fSmrg ;; 47894b0ead49Smrg 479049dc963fSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 479149dc963fSmrg # so, if we see these flags be careful not to treat them like -L 479249dc963fSmrg -L[A-Z][A-Z]*:*) 479349dc963fSmrg case $with_gcc/$host in 479449dc963fSmrg no/*-*-irix* | /*-*-irix*) 479549dc963fSmrg func_append compile_command " $arg" 479649dc963fSmrg func_append finalize_command " $arg" 479749dc963fSmrg ;; 479849dc963fSmrg esac 479949dc963fSmrg continue 480049dc963fSmrg ;; 48014b0ead49Smrg 480249dc963fSmrg -L*) 480349dc963fSmrg func_stripname '-L' '' "$arg" 480449dc963fSmrg dir=$func_stripname_result 480549dc963fSmrg if test -z "$dir"; then 480649dc963fSmrg if test "$#" -gt 0; then 480749dc963fSmrg func_fatal_error "require no space between \`-L' and \`$1'" 480849dc963fSmrg else 480949dc963fSmrg func_fatal_error "need path for \`-L' option" 481049dc963fSmrg fi 481149dc963fSmrg fi 481249dc963fSmrg # We need an absolute path. 481349dc963fSmrg case $dir in 481449dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 481549dc963fSmrg *) 481649dc963fSmrg absdir=`cd "$dir" && pwd` 481749dc963fSmrg test -z "$absdir" && \ 481849dc963fSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 481949dc963fSmrg dir="$absdir" 482049dc963fSmrg ;; 482149dc963fSmrg esac 482249dc963fSmrg case "$deplibs " in 482349dc963fSmrg *" -L$dir "*) ;; 482449dc963fSmrg *) 482549dc963fSmrg deplibs="$deplibs -L$dir" 482649dc963fSmrg lib_search_path="$lib_search_path $dir" 482749dc963fSmrg ;; 482849dc963fSmrg esac 482949dc963fSmrg case $host in 483049dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 48317aa89044Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 483249dc963fSmrg case :$dllsearchpath: in 483349dc963fSmrg *":$dir:"*) ;; 483449dc963fSmrg ::) dllsearchpath=$dir;; 483549dc963fSmrg *) dllsearchpath="$dllsearchpath:$dir";; 483649dc963fSmrg esac 483749dc963fSmrg case :$dllsearchpath: in 483849dc963fSmrg *":$testbindir:"*) ;; 483949dc963fSmrg ::) dllsearchpath=$testbindir;; 484049dc963fSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 484149dc963fSmrg esac 484249dc963fSmrg ;; 484349dc963fSmrg esac 484449dc963fSmrg continue 484549dc963fSmrg ;; 48464b0ead49Smrg 484749dc963fSmrg -l*) 484849dc963fSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 484949dc963fSmrg case $host in 48507aa89044Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 485149dc963fSmrg # These systems don't actually have a C or math library (as such) 485249dc963fSmrg continue 485349dc963fSmrg ;; 485449dc963fSmrg *-*-os2*) 485549dc963fSmrg # These systems don't actually have a C library (as such) 485649dc963fSmrg test "X$arg" = "X-lc" && continue 485749dc963fSmrg ;; 485849dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 485949dc963fSmrg # Do not include libc due to us having libc/libc_r. 486049dc963fSmrg test "X$arg" = "X-lc" && continue 486149dc963fSmrg ;; 486249dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 486349dc963fSmrg # Rhapsody C and math libraries are in the System framework 486449dc963fSmrg deplibs="$deplibs System.ltframework" 486549dc963fSmrg continue 486649dc963fSmrg ;; 486749dc963fSmrg *-*-sco3.2v5* | *-*-sco5v6*) 486849dc963fSmrg # Causes problems with __ctype 486949dc963fSmrg test "X$arg" = "X-lc" && continue 487049dc963fSmrg ;; 487149dc963fSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 487249dc963fSmrg # Compiler inserts libc in the correct place for threads to work 487349dc963fSmrg test "X$arg" = "X-lc" && continue 487449dc963fSmrg ;; 487549dc963fSmrg esac 487649dc963fSmrg elif test "X$arg" = "X-lc_r"; then 487749dc963fSmrg case $host in 487849dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 487949dc963fSmrg # Do not include libc_r directly, use -pthread flag. 488049dc963fSmrg continue 488149dc963fSmrg ;; 488249dc963fSmrg esac 488349dc963fSmrg fi 488449dc963fSmrg deplibs="$deplibs $arg" 488549dc963fSmrg continue 488649dc963fSmrg ;; 48874b0ead49Smrg 488849dc963fSmrg -module) 488949dc963fSmrg module=yes 489049dc963fSmrg continue 489149dc963fSmrg ;; 48924b0ead49Smrg 489349dc963fSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 489449dc963fSmrg # classes, name mangling, and exception handling. 489549dc963fSmrg # Darwin uses the -arch flag to determine output architecture. 489649dc963fSmrg -model|-arch|-isysroot) 489749dc963fSmrg compiler_flags="$compiler_flags $arg" 489849dc963fSmrg func_append compile_command " $arg" 489949dc963fSmrg func_append finalize_command " $arg" 490049dc963fSmrg prev=xcompiler 490149dc963fSmrg continue 490249dc963fSmrg ;; 49034b0ead49Smrg 490449dc963fSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 490549dc963fSmrg compiler_flags="$compiler_flags $arg" 490649dc963fSmrg func_append compile_command " $arg" 490749dc963fSmrg func_append finalize_command " $arg" 490849dc963fSmrg case "$new_inherited_linker_flags " in 490949dc963fSmrg *" $arg "*) ;; 491049dc963fSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 491149dc963fSmrg esac 491249dc963fSmrg continue 491349dc963fSmrg ;; 49144b0ead49Smrg 491549dc963fSmrg -multi_module) 491649dc963fSmrg single_module="${wl}-multi_module" 491749dc963fSmrg continue 491849dc963fSmrg ;; 49194b0ead49Smrg 492049dc963fSmrg -no-fast-install) 492149dc963fSmrg fast_install=no 492249dc963fSmrg continue 492349dc963fSmrg ;; 49244b0ead49Smrg 492549dc963fSmrg -no-install) 492649dc963fSmrg case $host in 492749dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 492849dc963fSmrg # The PATH hackery in wrapper scripts is required on Windows 492949dc963fSmrg # and Darwin in order for the loader to find any dlls it needs. 493049dc963fSmrg func_warning "\`-no-install' is ignored for $host" 493149dc963fSmrg func_warning "assuming \`-no-fast-install' instead" 493249dc963fSmrg fast_install=no 493349dc963fSmrg ;; 493449dc963fSmrg *) no_install=yes ;; 493549dc963fSmrg esac 493649dc963fSmrg continue 493749dc963fSmrg ;; 49384b0ead49Smrg 493949dc963fSmrg -no-undefined) 494049dc963fSmrg allow_undefined=no 494149dc963fSmrg continue 494249dc963fSmrg ;; 49434b0ead49Smrg 494449dc963fSmrg -objectlist) 494549dc963fSmrg prev=objectlist 494649dc963fSmrg continue 494749dc963fSmrg ;; 49484b0ead49Smrg 494949dc963fSmrg -o) prev=output ;; 49504b0ead49Smrg 495149dc963fSmrg -precious-files-regex) 495249dc963fSmrg prev=precious_regex 495349dc963fSmrg continue 495449dc963fSmrg ;; 49554b0ead49Smrg 495649dc963fSmrg -release) 495749dc963fSmrg prev=release 495849dc963fSmrg continue 495949dc963fSmrg ;; 49604b0ead49Smrg 496149dc963fSmrg -rpath) 496249dc963fSmrg prev=rpath 496349dc963fSmrg continue 496449dc963fSmrg ;; 49654b0ead49Smrg 496649dc963fSmrg -R) 496749dc963fSmrg prev=xrpath 496849dc963fSmrg continue 496949dc963fSmrg ;; 49704b0ead49Smrg 497149dc963fSmrg -R*) 497249dc963fSmrg func_stripname '-R' '' "$arg" 497349dc963fSmrg dir=$func_stripname_result 497449dc963fSmrg # We need an absolute path. 497549dc963fSmrg case $dir in 497649dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 497749dc963fSmrg *) 497849dc963fSmrg func_fatal_error "only absolute run-paths are allowed" 497949dc963fSmrg ;; 498049dc963fSmrg esac 498149dc963fSmrg case "$xrpath " in 498249dc963fSmrg *" $dir "*) ;; 498349dc963fSmrg *) xrpath="$xrpath $dir" ;; 498449dc963fSmrg esac 498549dc963fSmrg continue 498649dc963fSmrg ;; 49874b0ead49Smrg 498849dc963fSmrg -shared) 498949dc963fSmrg # The effects of -shared are defined in a previous loop. 499049dc963fSmrg continue 499149dc963fSmrg ;; 49924b0ead49Smrg 499349dc963fSmrg -shrext) 499449dc963fSmrg prev=shrext 499549dc963fSmrg continue 499649dc963fSmrg ;; 49974b0ead49Smrg 499849dc963fSmrg -static | -static-libtool-libs) 499949dc963fSmrg # The effects of -static are defined in a previous loop. 500049dc963fSmrg # We used to do the same as -all-static on platforms that 500149dc963fSmrg # didn't have a PIC flag, but the assumption that the effects 500249dc963fSmrg # would be equivalent was wrong. It would break on at least 500349dc963fSmrg # Digital Unix and AIX. 500449dc963fSmrg continue 500549dc963fSmrg ;; 50064b0ead49Smrg 500749dc963fSmrg -thread-safe) 500849dc963fSmrg thread_safe=yes 500949dc963fSmrg continue 501049dc963fSmrg ;; 50114b0ead49Smrg 501249dc963fSmrg -version-info) 501349dc963fSmrg prev=vinfo 501449dc963fSmrg continue 501549dc963fSmrg ;; 50164b0ead49Smrg 501749dc963fSmrg -version-number) 501849dc963fSmrg prev=vinfo 501949dc963fSmrg vinfo_number=yes 502049dc963fSmrg continue 502149dc963fSmrg ;; 50224b0ead49Smrg 502349dc963fSmrg -weak) 502449dc963fSmrg prev=weak 502549dc963fSmrg continue 502649dc963fSmrg ;; 50274b0ead49Smrg 502849dc963fSmrg -Wc,*) 502949dc963fSmrg func_stripname '-Wc,' '' "$arg" 503049dc963fSmrg args=$func_stripname_result 503149dc963fSmrg arg= 503249dc963fSmrg save_ifs="$IFS"; IFS=',' 503349dc963fSmrg for flag in $args; do 503449dc963fSmrg IFS="$save_ifs" 503549dc963fSmrg func_quote_for_eval "$flag" 50367aa89044Smrg arg="$arg $func_quote_for_eval_result" 503749dc963fSmrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 503849dc963fSmrg done 503949dc963fSmrg IFS="$save_ifs" 504049dc963fSmrg func_stripname ' ' '' "$arg" 504149dc963fSmrg arg=$func_stripname_result 504249dc963fSmrg ;; 50434b0ead49Smrg 504449dc963fSmrg -Wl,*) 504549dc963fSmrg func_stripname '-Wl,' '' "$arg" 504649dc963fSmrg args=$func_stripname_result 504749dc963fSmrg arg= 504849dc963fSmrg save_ifs="$IFS"; IFS=',' 504949dc963fSmrg for flag in $args; do 505049dc963fSmrg IFS="$save_ifs" 505149dc963fSmrg func_quote_for_eval "$flag" 505249dc963fSmrg arg="$arg $wl$func_quote_for_eval_result" 505349dc963fSmrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 505449dc963fSmrg linker_flags="$linker_flags $func_quote_for_eval_result" 505549dc963fSmrg done 505649dc963fSmrg IFS="$save_ifs" 505749dc963fSmrg func_stripname ' ' '' "$arg" 505849dc963fSmrg arg=$func_stripname_result 505949dc963fSmrg ;; 50604b0ead49Smrg 506149dc963fSmrg -Xcompiler) 506249dc963fSmrg prev=xcompiler 506349dc963fSmrg continue 506449dc963fSmrg ;; 50654b0ead49Smrg 506649dc963fSmrg -Xlinker) 506749dc963fSmrg prev=xlinker 506849dc963fSmrg continue 506949dc963fSmrg ;; 50704b0ead49Smrg 507149dc963fSmrg -XCClinker) 507249dc963fSmrg prev=xcclinker 507349dc963fSmrg continue 507449dc963fSmrg ;; 50754b0ead49Smrg 507649dc963fSmrg # -msg_* for osf cc 507749dc963fSmrg -msg_*) 507849dc963fSmrg func_quote_for_eval "$arg" 507949dc963fSmrg arg="$func_quote_for_eval_result" 508049dc963fSmrg ;; 50814b0ead49Smrg 50827aa89044Smrg # Flags to be passed through unchanged, with rationale: 50837aa89044Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 50847aa89044Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 50857aa89044Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 50867aa89044Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 50877aa89044Smrg # -q* compiler args for the IBM compiler 50887aa89044Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 50897aa89044Smrg # -F/path path to uninstalled frameworks, gcc on darwin 50907aa89044Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 50917aa89044Smrg # @file GCC response files 50927aa89044Smrg # -tp=* Portland pgcc target processor selection 509349dc963fSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 50947aa89044Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) 509549dc963fSmrg func_quote_for_eval "$arg" 509649dc963fSmrg arg="$func_quote_for_eval_result" 509749dc963fSmrg func_append compile_command " $arg" 509849dc963fSmrg func_append finalize_command " $arg" 509949dc963fSmrg compiler_flags="$compiler_flags $arg" 510049dc963fSmrg continue 510149dc963fSmrg ;; 51024b0ead49Smrg 510349dc963fSmrg # Some other compiler flag. 510449dc963fSmrg -* | +*) 510549dc963fSmrg func_quote_for_eval "$arg" 510649dc963fSmrg arg="$func_quote_for_eval_result" 510749dc963fSmrg ;; 51084b0ead49Smrg 510949dc963fSmrg *.$objext) 511049dc963fSmrg # A standard object. 511149dc963fSmrg objs="$objs $arg" 511249dc963fSmrg ;; 51134b0ead49Smrg 511449dc963fSmrg *.lo) 511549dc963fSmrg # A libtool-controlled object. 51164b0ead49Smrg 511749dc963fSmrg # Check to see that this really is a libtool object. 511849dc963fSmrg if func_lalib_unsafe_p "$arg"; then 511949dc963fSmrg pic_object= 512049dc963fSmrg non_pic_object= 51214b0ead49Smrg 512249dc963fSmrg # Read the .lo file 512349dc963fSmrg func_source "$arg" 51244b0ead49Smrg 512549dc963fSmrg if test -z "$pic_object" || 512649dc963fSmrg test -z "$non_pic_object" || 512749dc963fSmrg test "$pic_object" = none && 512849dc963fSmrg test "$non_pic_object" = none; then 512949dc963fSmrg func_fatal_error "cannot find name of object for \`$arg'" 513049dc963fSmrg fi 51314b0ead49Smrg 513249dc963fSmrg # Extract subdirectory from the argument. 513349dc963fSmrg func_dirname "$arg" "/" "" 513449dc963fSmrg xdir="$func_dirname_result" 513552b01e16Smrg 513649dc963fSmrg if test "$pic_object" != none; then 513749dc963fSmrg # Prepend the subdirectory the object is found in. 513849dc963fSmrg pic_object="$xdir$pic_object" 51394b0ead49Smrg 514049dc963fSmrg if test "$prev" = dlfiles; then 514149dc963fSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 514249dc963fSmrg dlfiles="$dlfiles $pic_object" 514349dc963fSmrg prev= 514449dc963fSmrg continue 514549dc963fSmrg else 514649dc963fSmrg # If libtool objects are unsupported, then we need to preload. 514749dc963fSmrg prev=dlprefiles 514849dc963fSmrg fi 514949dc963fSmrg fi 51504b0ead49Smrg 515149dc963fSmrg # CHECK ME: I think I busted this. -Ossama 515249dc963fSmrg if test "$prev" = dlprefiles; then 515349dc963fSmrg # Preload the old-style object. 515449dc963fSmrg dlprefiles="$dlprefiles $pic_object" 515549dc963fSmrg prev= 515649dc963fSmrg fi 51574b0ead49Smrg 515849dc963fSmrg # A PIC object. 515949dc963fSmrg func_append libobjs " $pic_object" 516049dc963fSmrg arg="$pic_object" 516149dc963fSmrg fi 51624b0ead49Smrg 516349dc963fSmrg # Non-PIC object. 516449dc963fSmrg if test "$non_pic_object" != none; then 516549dc963fSmrg # Prepend the subdirectory the object is found in. 516649dc963fSmrg non_pic_object="$xdir$non_pic_object" 51674b0ead49Smrg 516849dc963fSmrg # A standard non-PIC object 516949dc963fSmrg func_append non_pic_objects " $non_pic_object" 517049dc963fSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 517149dc963fSmrg arg="$non_pic_object" 517249dc963fSmrg fi 517349dc963fSmrg else 517449dc963fSmrg # If the PIC object exists, use it instead. 517549dc963fSmrg # $xdir was prepended to $pic_object above. 517649dc963fSmrg non_pic_object="$pic_object" 517749dc963fSmrg func_append non_pic_objects " $non_pic_object" 517849dc963fSmrg fi 517949dc963fSmrg else 518049dc963fSmrg # Only an error if not doing a dry-run. 518149dc963fSmrg if $opt_dry_run; then 518249dc963fSmrg # Extract subdirectory from the argument. 518349dc963fSmrg func_dirname "$arg" "/" "" 518449dc963fSmrg xdir="$func_dirname_result" 518549dc963fSmrg 518649dc963fSmrg func_lo2o "$arg" 518749dc963fSmrg pic_object=$xdir$objdir/$func_lo2o_result 518849dc963fSmrg non_pic_object=$xdir$func_lo2o_result 518949dc963fSmrg func_append libobjs " $pic_object" 519049dc963fSmrg func_append non_pic_objects " $non_pic_object" 519149dc963fSmrg else 519249dc963fSmrg func_fatal_error "\`$arg' is not a valid libtool object" 519349dc963fSmrg fi 519449dc963fSmrg fi 519549dc963fSmrg ;; 51964b0ead49Smrg 519749dc963fSmrg *.$libext) 519849dc963fSmrg # An archive. 519949dc963fSmrg deplibs="$deplibs $arg" 520049dc963fSmrg old_deplibs="$old_deplibs $arg" 520149dc963fSmrg continue 520249dc963fSmrg ;; 520349dc963fSmrg 520449dc963fSmrg *.la) 520549dc963fSmrg # A libtool-controlled library. 520649dc963fSmrg 520749dc963fSmrg if test "$prev" = dlfiles; then 520849dc963fSmrg # This library was specified with -dlopen. 520949dc963fSmrg dlfiles="$dlfiles $arg" 521049dc963fSmrg prev= 521149dc963fSmrg elif test "$prev" = dlprefiles; then 521249dc963fSmrg # The library was specified with -dlpreopen. 521349dc963fSmrg dlprefiles="$dlprefiles $arg" 521449dc963fSmrg prev= 521549dc963fSmrg else 521649dc963fSmrg deplibs="$deplibs $arg" 521749dc963fSmrg fi 521849dc963fSmrg continue 521949dc963fSmrg ;; 522049dc963fSmrg 522149dc963fSmrg # Some other compiler argument. 522249dc963fSmrg *) 522349dc963fSmrg # Unknown arguments in both finalize_command and compile_command need 522449dc963fSmrg # to be aesthetically quoted because they are evaled later. 522549dc963fSmrg func_quote_for_eval "$arg" 522649dc963fSmrg arg="$func_quote_for_eval_result" 522749dc963fSmrg ;; 522849dc963fSmrg esac # arg 522949dc963fSmrg 523049dc963fSmrg # Now actually substitute the argument into the commands. 523149dc963fSmrg if test -n "$arg"; then 523249dc963fSmrg func_append compile_command " $arg" 523349dc963fSmrg func_append finalize_command " $arg" 523449dc963fSmrg fi 523549dc963fSmrg done # argument parsing loop 523649dc963fSmrg 523749dc963fSmrg test -n "$prev" && \ 523849dc963fSmrg func_fatal_help "the \`$prevarg' option requires an argument" 523949dc963fSmrg 524049dc963fSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 524149dc963fSmrg eval arg=\"$export_dynamic_flag_spec\" 524249dc963fSmrg func_append compile_command " $arg" 524349dc963fSmrg func_append finalize_command " $arg" 524449dc963fSmrg fi 524549dc963fSmrg 524649dc963fSmrg oldlibs= 524749dc963fSmrg # calculate the name of the file, without its directory 524849dc963fSmrg func_basename "$output" 524949dc963fSmrg outputname="$func_basename_result" 525049dc963fSmrg libobjs_save="$libobjs" 525149dc963fSmrg 525249dc963fSmrg if test -n "$shlibpath_var"; then 525349dc963fSmrg # get the directories listed in $shlibpath_var 52547aa89044Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 525549dc963fSmrg else 525649dc963fSmrg shlib_search_path= 525749dc963fSmrg fi 525849dc963fSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 525949dc963fSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 526049dc963fSmrg 526149dc963fSmrg func_dirname "$output" "/" "" 526249dc963fSmrg output_objdir="$func_dirname_result$objdir" 526349dc963fSmrg # Create the object directory. 526449dc963fSmrg func_mkdir_p "$output_objdir" 526549dc963fSmrg 526649dc963fSmrg # Determine the type of output 526749dc963fSmrg case $output in 526849dc963fSmrg "") 526949dc963fSmrg func_fatal_help "you must specify an output file" 527049dc963fSmrg ;; 527149dc963fSmrg *.$libext) linkmode=oldlib ;; 527249dc963fSmrg *.lo | *.$objext) linkmode=obj ;; 527349dc963fSmrg *.la) linkmode=lib ;; 527449dc963fSmrg *) linkmode=prog ;; # Anything else should be a program. 527549dc963fSmrg esac 527649dc963fSmrg 527749dc963fSmrg specialdeplibs= 527849dc963fSmrg 527949dc963fSmrg libs= 528049dc963fSmrg # Find all interdependent deplibs by searching for libraries 528149dc963fSmrg # that are linked more than once (e.g. -la -lb -la) 528249dc963fSmrg for deplib in $deplibs; do 528349dc963fSmrg if $opt_duplicate_deps ; then 528449dc963fSmrg case "$libs " in 528549dc963fSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 528649dc963fSmrg esac 528749dc963fSmrg fi 528849dc963fSmrg libs="$libs $deplib" 528949dc963fSmrg done 529049dc963fSmrg 529149dc963fSmrg if test "$linkmode" = lib; then 529249dc963fSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 529349dc963fSmrg 529449dc963fSmrg # Compute libraries that are listed more than once in $predeps 529549dc963fSmrg # $postdeps and mark them as special (i.e., whose duplicates are 529649dc963fSmrg # not to be eliminated). 529749dc963fSmrg pre_post_deps= 529849dc963fSmrg if $opt_duplicate_compiler_generated_deps; then 529949dc963fSmrg for pre_post_dep in $predeps $postdeps; do 530049dc963fSmrg case "$pre_post_deps " in 530149dc963fSmrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 530249dc963fSmrg esac 530349dc963fSmrg pre_post_deps="$pre_post_deps $pre_post_dep" 530449dc963fSmrg done 530549dc963fSmrg fi 530649dc963fSmrg pre_post_deps= 530749dc963fSmrg fi 530849dc963fSmrg 530949dc963fSmrg deplibs= 531049dc963fSmrg newdependency_libs= 531149dc963fSmrg newlib_search_path= 531249dc963fSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 531349dc963fSmrg notinst_deplibs= # not-installed libtool libraries 531449dc963fSmrg notinst_path= # paths that contain not-installed libtool libraries 531549dc963fSmrg 531649dc963fSmrg case $linkmode in 531749dc963fSmrg lib) 531849dc963fSmrg passes="conv dlpreopen link" 531949dc963fSmrg for file in $dlfiles $dlprefiles; do 532049dc963fSmrg case $file in 532149dc963fSmrg *.la) ;; 532249dc963fSmrg *) 532349dc963fSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 532449dc963fSmrg ;; 532549dc963fSmrg esac 532649dc963fSmrg done 532749dc963fSmrg ;; 532849dc963fSmrg prog) 532949dc963fSmrg compile_deplibs= 533049dc963fSmrg finalize_deplibs= 533149dc963fSmrg alldeplibs=no 533249dc963fSmrg newdlfiles= 533349dc963fSmrg newdlprefiles= 533449dc963fSmrg passes="conv scan dlopen dlpreopen link" 533549dc963fSmrg ;; 533649dc963fSmrg *) passes="conv" 533749dc963fSmrg ;; 533849dc963fSmrg esac 533949dc963fSmrg 534049dc963fSmrg for pass in $passes; do 534149dc963fSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 534249dc963fSmrg # so that -L comes before libs that need it for instance... 534349dc963fSmrg if test "$linkmode,$pass" = "lib,link"; then 534449dc963fSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 534549dc963fSmrg ## order, and fix it there properly 534649dc963fSmrg tmp_deplibs= 534749dc963fSmrg for deplib in $deplibs; do 534849dc963fSmrg tmp_deplibs="$deplib $tmp_deplibs" 534949dc963fSmrg done 535049dc963fSmrg deplibs="$tmp_deplibs" 535149dc963fSmrg fi 535249dc963fSmrg 535349dc963fSmrg if test "$linkmode,$pass" = "lib,link" || 535449dc963fSmrg test "$linkmode,$pass" = "prog,scan"; then 535549dc963fSmrg libs="$deplibs" 535649dc963fSmrg deplibs= 535749dc963fSmrg fi 535849dc963fSmrg if test "$linkmode" = prog; then 535949dc963fSmrg case $pass in 536049dc963fSmrg dlopen) libs="$dlfiles" ;; 536149dc963fSmrg dlpreopen) libs="$dlprefiles" ;; 536249dc963fSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 536349dc963fSmrg esac 536449dc963fSmrg fi 536549dc963fSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 536649dc963fSmrg # Collect and forward deplibs of preopened libtool libs 536749dc963fSmrg for lib in $dlprefiles; do 536849dc963fSmrg # Ignore non-libtool-libs 536949dc963fSmrg dependency_libs= 537049dc963fSmrg case $lib in 537149dc963fSmrg *.la) func_source "$lib" ;; 537249dc963fSmrg esac 537349dc963fSmrg 537449dc963fSmrg # Collect preopened libtool deplibs, except any this library 537549dc963fSmrg # has declared as weak libs 537649dc963fSmrg for deplib in $dependency_libs; do 53777aa89044Smrg func_basename "$deplib" 53787aa89044Smrg deplib_base=$func_basename_result 537949dc963fSmrg case " $weak_libs " in 538049dc963fSmrg *" $deplib_base "*) ;; 538149dc963fSmrg *) deplibs="$deplibs $deplib" ;; 538249dc963fSmrg esac 538349dc963fSmrg done 538449dc963fSmrg done 538549dc963fSmrg libs="$dlprefiles" 538649dc963fSmrg fi 538749dc963fSmrg if test "$pass" = dlopen; then 538849dc963fSmrg # Collect dlpreopened libraries 538949dc963fSmrg save_deplibs="$deplibs" 539049dc963fSmrg deplibs= 539149dc963fSmrg fi 539249dc963fSmrg 539349dc963fSmrg for deplib in $libs; do 539449dc963fSmrg lib= 539549dc963fSmrg found=no 539649dc963fSmrg case $deplib in 539749dc963fSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 539849dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 539949dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 540049dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 540149dc963fSmrg else 540249dc963fSmrg compiler_flags="$compiler_flags $deplib" 540349dc963fSmrg if test "$linkmode" = lib ; then 540449dc963fSmrg case "$new_inherited_linker_flags " in 540549dc963fSmrg *" $deplib "*) ;; 540649dc963fSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 540749dc963fSmrg esac 540849dc963fSmrg fi 540949dc963fSmrg fi 541049dc963fSmrg continue 541149dc963fSmrg ;; 541249dc963fSmrg -l*) 541349dc963fSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 541449dc963fSmrg func_warning "\`-l' is ignored for archives/objects" 541549dc963fSmrg continue 541649dc963fSmrg fi 541749dc963fSmrg func_stripname '-l' '' "$deplib" 541849dc963fSmrg name=$func_stripname_result 541949dc963fSmrg if test "$linkmode" = lib; then 542049dc963fSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 542149dc963fSmrg else 542249dc963fSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 542349dc963fSmrg fi 542449dc963fSmrg for searchdir in $searchdirs; do 542549dc963fSmrg for search_ext in .la $std_shrext .so .a; do 542649dc963fSmrg # Search the libtool library 542749dc963fSmrg lib="$searchdir/lib${name}${search_ext}" 542849dc963fSmrg if test -f "$lib"; then 542949dc963fSmrg if test "$search_ext" = ".la"; then 543049dc963fSmrg found=yes 543149dc963fSmrg else 543249dc963fSmrg found=no 543349dc963fSmrg fi 543449dc963fSmrg break 2 543549dc963fSmrg fi 543649dc963fSmrg done 543749dc963fSmrg done 543849dc963fSmrg if test "$found" != yes; then 543949dc963fSmrg # deplib doesn't seem to be a libtool library 544049dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 544149dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 544249dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 544349dc963fSmrg else 544449dc963fSmrg deplibs="$deplib $deplibs" 544549dc963fSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 544649dc963fSmrg fi 544749dc963fSmrg continue 544849dc963fSmrg else # deplib is a libtool library 544949dc963fSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 545049dc963fSmrg # We need to do some special things here, and not later. 545149dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 545249dc963fSmrg case " $predeps $postdeps " in 545349dc963fSmrg *" $deplib "*) 545449dc963fSmrg if func_lalib_p "$lib"; then 545549dc963fSmrg library_names= 545649dc963fSmrg old_library= 545749dc963fSmrg func_source "$lib" 545849dc963fSmrg for l in $old_library $library_names; do 545949dc963fSmrg ll="$l" 546049dc963fSmrg done 546149dc963fSmrg if test "X$ll" = "X$old_library" ; then # only static version available 546249dc963fSmrg found=no 546349dc963fSmrg func_dirname "$lib" "" "." 546449dc963fSmrg ladir="$func_dirname_result" 546549dc963fSmrg lib=$ladir/$old_library 546649dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 546749dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 546849dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 546949dc963fSmrg else 547049dc963fSmrg deplibs="$deplib $deplibs" 547149dc963fSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 547249dc963fSmrg fi 547349dc963fSmrg continue 547449dc963fSmrg fi 547549dc963fSmrg fi 547649dc963fSmrg ;; 547749dc963fSmrg *) ;; 547849dc963fSmrg esac 547949dc963fSmrg fi 548049dc963fSmrg fi 548149dc963fSmrg ;; # -l 548249dc963fSmrg *.ltframework) 548349dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 548449dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 548549dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 548649dc963fSmrg else 548749dc963fSmrg deplibs="$deplib $deplibs" 548849dc963fSmrg if test "$linkmode" = lib ; then 548949dc963fSmrg case "$new_inherited_linker_flags " in 549049dc963fSmrg *" $deplib "*) ;; 549149dc963fSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 549249dc963fSmrg esac 549349dc963fSmrg fi 549449dc963fSmrg fi 549549dc963fSmrg continue 549649dc963fSmrg ;; 549749dc963fSmrg -L*) 549849dc963fSmrg case $linkmode in 549949dc963fSmrg lib) 550049dc963fSmrg deplibs="$deplib $deplibs" 550149dc963fSmrg test "$pass" = conv && continue 550249dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 550349dc963fSmrg func_stripname '-L' '' "$deplib" 550449dc963fSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 550549dc963fSmrg ;; 550649dc963fSmrg prog) 550749dc963fSmrg if test "$pass" = conv; then 550849dc963fSmrg deplibs="$deplib $deplibs" 550949dc963fSmrg continue 551049dc963fSmrg fi 551149dc963fSmrg if test "$pass" = scan; then 551249dc963fSmrg deplibs="$deplib $deplibs" 551349dc963fSmrg else 551449dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 551549dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 551649dc963fSmrg fi 551749dc963fSmrg func_stripname '-L' '' "$deplib" 551849dc963fSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 551949dc963fSmrg ;; 552049dc963fSmrg *) 552149dc963fSmrg func_warning "\`-L' is ignored for archives/objects" 552249dc963fSmrg ;; 552349dc963fSmrg esac # linkmode 552449dc963fSmrg continue 552549dc963fSmrg ;; # -L 552649dc963fSmrg -R*) 552749dc963fSmrg if test "$pass" = link; then 552849dc963fSmrg func_stripname '-R' '' "$deplib" 552949dc963fSmrg dir=$func_stripname_result 553049dc963fSmrg # Make sure the xrpath contains only unique directories. 553149dc963fSmrg case "$xrpath " in 553249dc963fSmrg *" $dir "*) ;; 553349dc963fSmrg *) xrpath="$xrpath $dir" ;; 553449dc963fSmrg esac 553549dc963fSmrg fi 553649dc963fSmrg deplibs="$deplib $deplibs" 553749dc963fSmrg continue 553849dc963fSmrg ;; 553949dc963fSmrg *.la) lib="$deplib" ;; 554049dc963fSmrg *.$libext) 554149dc963fSmrg if test "$pass" = conv; then 554249dc963fSmrg deplibs="$deplib $deplibs" 554349dc963fSmrg continue 554449dc963fSmrg fi 554549dc963fSmrg case $linkmode in 554649dc963fSmrg lib) 554749dc963fSmrg # Linking convenience modules into shared libraries is allowed, 554849dc963fSmrg # but linking other static libraries is non-portable. 554949dc963fSmrg case " $dlpreconveniencelibs " in 555049dc963fSmrg *" $deplib "*) ;; 555149dc963fSmrg *) 555249dc963fSmrg valid_a_lib=no 555349dc963fSmrg case $deplibs_check_method in 555449dc963fSmrg match_pattern*) 555549dc963fSmrg set dummy $deplibs_check_method; shift 555649dc963fSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 55577aa89044Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 555849dc963fSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 555949dc963fSmrg valid_a_lib=yes 556049dc963fSmrg fi 556149dc963fSmrg ;; 556249dc963fSmrg pass_all) 556349dc963fSmrg valid_a_lib=yes 556449dc963fSmrg ;; 556549dc963fSmrg esac 556649dc963fSmrg if test "$valid_a_lib" != yes; then 55677aa89044Smrg echo 556849dc963fSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 55697aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 55707aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 55717aa89044Smrg echo "*** shared version of the library, which you do not appear to have" 55727aa89044Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 55737aa89044Smrg echo "*** that it is just a static archive that I should not use here." 557449dc963fSmrg else 55757aa89044Smrg echo 557649dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the" 557749dc963fSmrg $ECHO "*** static library $deplib is not portable!" 557849dc963fSmrg deplibs="$deplib $deplibs" 557949dc963fSmrg fi 558049dc963fSmrg ;; 558149dc963fSmrg esac 558249dc963fSmrg continue 558349dc963fSmrg ;; 558449dc963fSmrg prog) 558549dc963fSmrg if test "$pass" != link; then 558649dc963fSmrg deplibs="$deplib $deplibs" 558749dc963fSmrg else 558849dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 558949dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 559049dc963fSmrg fi 559149dc963fSmrg continue 559249dc963fSmrg ;; 559349dc963fSmrg esac # linkmode 559449dc963fSmrg ;; # *.$libext 559549dc963fSmrg *.lo | *.$objext) 559649dc963fSmrg if test "$pass" = conv; then 559749dc963fSmrg deplibs="$deplib $deplibs" 559849dc963fSmrg elif test "$linkmode" = prog; then 559949dc963fSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 560049dc963fSmrg # If there is no dlopen support or we're linking statically, 560149dc963fSmrg # we need to preload. 560249dc963fSmrg newdlprefiles="$newdlprefiles $deplib" 560349dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 560449dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 560549dc963fSmrg else 560649dc963fSmrg newdlfiles="$newdlfiles $deplib" 560749dc963fSmrg fi 560849dc963fSmrg fi 560949dc963fSmrg continue 561049dc963fSmrg ;; 561149dc963fSmrg %DEPLIBS%) 561249dc963fSmrg alldeplibs=yes 561349dc963fSmrg continue 561449dc963fSmrg ;; 561549dc963fSmrg esac # case $deplib 561649dc963fSmrg 561749dc963fSmrg if test "$found" = yes || test -f "$lib"; then : 561849dc963fSmrg else 561949dc963fSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 562049dc963fSmrg fi 562149dc963fSmrg 562249dc963fSmrg # Check to see that this really is a libtool archive. 562349dc963fSmrg func_lalib_unsafe_p "$lib" \ 562449dc963fSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 562549dc963fSmrg 562649dc963fSmrg func_dirname "$lib" "" "." 562749dc963fSmrg ladir="$func_dirname_result" 562849dc963fSmrg 562949dc963fSmrg dlname= 563049dc963fSmrg dlopen= 563149dc963fSmrg dlpreopen= 563249dc963fSmrg libdir= 563349dc963fSmrg library_names= 563449dc963fSmrg old_library= 563549dc963fSmrg inherited_linker_flags= 563649dc963fSmrg # If the library was installed with an old release of libtool, 563749dc963fSmrg # it will not redefine variables installed, or shouldnotlink 563849dc963fSmrg installed=yes 563949dc963fSmrg shouldnotlink=no 564049dc963fSmrg avoidtemprpath= 564149dc963fSmrg 564249dc963fSmrg 564349dc963fSmrg # Read the .la file 564449dc963fSmrg func_source "$lib" 564549dc963fSmrg 564649dc963fSmrg # Convert "-framework foo" to "foo.ltframework" 564749dc963fSmrg if test -n "$inherited_linker_flags"; then 56487aa89044Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 564949dc963fSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 565049dc963fSmrg case " $new_inherited_linker_flags " in 565149dc963fSmrg *" $tmp_inherited_linker_flag "*) ;; 565249dc963fSmrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 565349dc963fSmrg esac 565449dc963fSmrg done 565549dc963fSmrg fi 56567aa89044Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 565749dc963fSmrg if test "$linkmode,$pass" = "lib,link" || 565849dc963fSmrg test "$linkmode,$pass" = "prog,scan" || 565949dc963fSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 566049dc963fSmrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 566149dc963fSmrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 566249dc963fSmrg fi 566349dc963fSmrg 566449dc963fSmrg if test "$pass" = conv; then 566549dc963fSmrg # Only check for convenience libraries 566649dc963fSmrg deplibs="$lib $deplibs" 566749dc963fSmrg if test -z "$libdir"; then 566849dc963fSmrg if test -z "$old_library"; then 566949dc963fSmrg func_fatal_error "cannot find name of link library for \`$lib'" 567049dc963fSmrg fi 567149dc963fSmrg # It is a libtool convenience library, so add in its objects. 567249dc963fSmrg convenience="$convenience $ladir/$objdir/$old_library" 567349dc963fSmrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 567449dc963fSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 567549dc963fSmrg func_fatal_error "\`$lib' is not a convenience library" 567649dc963fSmrg fi 567749dc963fSmrg tmp_libs= 567849dc963fSmrg for deplib in $dependency_libs; do 567949dc963fSmrg deplibs="$deplib $deplibs" 568049dc963fSmrg if $opt_duplicate_deps ; then 568149dc963fSmrg case "$tmp_libs " in 568249dc963fSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 568349dc963fSmrg esac 568449dc963fSmrg fi 568549dc963fSmrg tmp_libs="$tmp_libs $deplib" 568649dc963fSmrg done 568749dc963fSmrg continue 568849dc963fSmrg fi # $pass = conv 568949dc963fSmrg 569049dc963fSmrg 569149dc963fSmrg # Get the name of the library we link against. 569249dc963fSmrg linklib= 569349dc963fSmrg for l in $old_library $library_names; do 569449dc963fSmrg linklib="$l" 569549dc963fSmrg done 569649dc963fSmrg if test -z "$linklib"; then 569749dc963fSmrg func_fatal_error "cannot find name of link library for \`$lib'" 569849dc963fSmrg fi 569949dc963fSmrg 570049dc963fSmrg # This library was specified with -dlopen. 570149dc963fSmrg if test "$pass" = dlopen; then 570249dc963fSmrg if test -z "$libdir"; then 570349dc963fSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 570449dc963fSmrg fi 570549dc963fSmrg if test -z "$dlname" || 570649dc963fSmrg test "$dlopen_support" != yes || 570749dc963fSmrg test "$build_libtool_libs" = no; then 570849dc963fSmrg # If there is no dlname, no dlopen support or we're linking 570949dc963fSmrg # statically, we need to preload. We also need to preload any 571049dc963fSmrg # dependent libraries so libltdl's deplib preloader doesn't 571149dc963fSmrg # bomb out in the load deplibs phase. 571249dc963fSmrg dlprefiles="$dlprefiles $lib $dependency_libs" 571349dc963fSmrg else 571449dc963fSmrg newdlfiles="$newdlfiles $lib" 571549dc963fSmrg fi 571649dc963fSmrg continue 571749dc963fSmrg fi # $pass = dlopen 571849dc963fSmrg 571949dc963fSmrg # We need an absolute path. 572049dc963fSmrg case $ladir in 572149dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 572249dc963fSmrg *) 572349dc963fSmrg abs_ladir=`cd "$ladir" && pwd` 572449dc963fSmrg if test -z "$abs_ladir"; then 572549dc963fSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 572649dc963fSmrg func_warning "passing it literally to the linker, although it might fail" 572749dc963fSmrg abs_ladir="$ladir" 572849dc963fSmrg fi 572949dc963fSmrg ;; 573049dc963fSmrg esac 573149dc963fSmrg func_basename "$lib" 573249dc963fSmrg laname="$func_basename_result" 573349dc963fSmrg 573449dc963fSmrg # Find the relevant object directory and library name. 573549dc963fSmrg if test "X$installed" = Xyes; then 573649dc963fSmrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 573749dc963fSmrg func_warning "library \`$lib' was moved." 573849dc963fSmrg dir="$ladir" 573949dc963fSmrg absdir="$abs_ladir" 574049dc963fSmrg libdir="$abs_ladir" 574149dc963fSmrg else 574249dc963fSmrg dir="$libdir" 574349dc963fSmrg absdir="$libdir" 574449dc963fSmrg fi 574549dc963fSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 574649dc963fSmrg else 574749dc963fSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 574849dc963fSmrg dir="$ladir" 574949dc963fSmrg absdir="$abs_ladir" 575049dc963fSmrg # Remove this search path later 575149dc963fSmrg notinst_path="$notinst_path $abs_ladir" 575249dc963fSmrg else 575349dc963fSmrg dir="$ladir/$objdir" 575449dc963fSmrg absdir="$abs_ladir/$objdir" 575549dc963fSmrg # Remove this search path later 575649dc963fSmrg notinst_path="$notinst_path $abs_ladir" 575749dc963fSmrg fi 575849dc963fSmrg fi # $installed = yes 575949dc963fSmrg func_stripname 'lib' '.la' "$laname" 576049dc963fSmrg name=$func_stripname_result 576149dc963fSmrg 576249dc963fSmrg # This library was specified with -dlpreopen. 576349dc963fSmrg if test "$pass" = dlpreopen; then 576449dc963fSmrg if test -z "$libdir" && test "$linkmode" = prog; then 576549dc963fSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 576649dc963fSmrg fi 576749dc963fSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 576849dc963fSmrg # are required to link). 576949dc963fSmrg if test -n "$old_library"; then 577049dc963fSmrg newdlprefiles="$newdlprefiles $dir/$old_library" 577149dc963fSmrg # Keep a list of preopened convenience libraries to check 577249dc963fSmrg # that they are being used correctly in the link pass. 577349dc963fSmrg test -z "$libdir" && \ 577449dc963fSmrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 577549dc963fSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 577649dc963fSmrg elif test -n "$dlname"; then 577749dc963fSmrg newdlprefiles="$newdlprefiles $dir/$dlname" 577849dc963fSmrg else 577949dc963fSmrg newdlprefiles="$newdlprefiles $dir/$linklib" 578049dc963fSmrg fi 578149dc963fSmrg fi # $pass = dlpreopen 578249dc963fSmrg 578349dc963fSmrg if test -z "$libdir"; then 578449dc963fSmrg # Link the convenience library 578549dc963fSmrg if test "$linkmode" = lib; then 578649dc963fSmrg deplibs="$dir/$old_library $deplibs" 578749dc963fSmrg elif test "$linkmode,$pass" = "prog,link"; then 578849dc963fSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 578949dc963fSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 579049dc963fSmrg else 579149dc963fSmrg deplibs="$lib $deplibs" # used for prog,scan pass 579249dc963fSmrg fi 579349dc963fSmrg continue 579449dc963fSmrg fi 579549dc963fSmrg 579649dc963fSmrg 579749dc963fSmrg if test "$linkmode" = prog && test "$pass" != link; then 579849dc963fSmrg newlib_search_path="$newlib_search_path $ladir" 579949dc963fSmrg deplibs="$lib $deplibs" 580049dc963fSmrg 580149dc963fSmrg linkalldeplibs=no 580249dc963fSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 580349dc963fSmrg test "$build_libtool_libs" = no; then 580449dc963fSmrg linkalldeplibs=yes 580549dc963fSmrg fi 580649dc963fSmrg 580749dc963fSmrg tmp_libs= 580849dc963fSmrg for deplib in $dependency_libs; do 580949dc963fSmrg case $deplib in 581049dc963fSmrg -L*) func_stripname '-L' '' "$deplib" 581149dc963fSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 581249dc963fSmrg ;; 581349dc963fSmrg esac 581449dc963fSmrg # Need to link against all dependency_libs? 581549dc963fSmrg if test "$linkalldeplibs" = yes; then 581649dc963fSmrg deplibs="$deplib $deplibs" 581749dc963fSmrg else 581849dc963fSmrg # Need to hardcode shared library paths 581949dc963fSmrg # or/and link against static libraries 582049dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 582149dc963fSmrg fi 582249dc963fSmrg if $opt_duplicate_deps ; then 582349dc963fSmrg case "$tmp_libs " in 582449dc963fSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 582549dc963fSmrg esac 582649dc963fSmrg fi 582749dc963fSmrg tmp_libs="$tmp_libs $deplib" 582849dc963fSmrg done # for deplib 582949dc963fSmrg continue 583049dc963fSmrg fi # $linkmode = prog... 583149dc963fSmrg 583249dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 583349dc963fSmrg if test -n "$library_names" && 583449dc963fSmrg { { test "$prefer_static_libs" = no || 583549dc963fSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 583649dc963fSmrg test -z "$old_library"; }; then 583749dc963fSmrg # We need to hardcode the library path 583849dc963fSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 583949dc963fSmrg # Make sure the rpath contains only unique directories. 584049dc963fSmrg case "$temp_rpath:" in 584149dc963fSmrg *"$absdir:"*) ;; 584249dc963fSmrg *) temp_rpath="$temp_rpath$absdir:" ;; 584349dc963fSmrg esac 584449dc963fSmrg fi 584549dc963fSmrg 584649dc963fSmrg # Hardcode the library path. 584749dc963fSmrg # Skip directories that are in the system default run-time 584849dc963fSmrg # search path. 584949dc963fSmrg case " $sys_lib_dlsearch_path " in 585049dc963fSmrg *" $absdir "*) ;; 585149dc963fSmrg *) 585249dc963fSmrg case "$compile_rpath " in 585349dc963fSmrg *" $absdir "*) ;; 585449dc963fSmrg *) compile_rpath="$compile_rpath $absdir" 585549dc963fSmrg esac 585649dc963fSmrg ;; 585749dc963fSmrg esac 585849dc963fSmrg case " $sys_lib_dlsearch_path " in 585949dc963fSmrg *" $libdir "*) ;; 586049dc963fSmrg *) 586149dc963fSmrg case "$finalize_rpath " in 586249dc963fSmrg *" $libdir "*) ;; 586349dc963fSmrg *) finalize_rpath="$finalize_rpath $libdir" 586449dc963fSmrg esac 586549dc963fSmrg ;; 586649dc963fSmrg esac 586749dc963fSmrg fi # $linkmode,$pass = prog,link... 586849dc963fSmrg 586949dc963fSmrg if test "$alldeplibs" = yes && 587049dc963fSmrg { test "$deplibs_check_method" = pass_all || 587149dc963fSmrg { test "$build_libtool_libs" = yes && 587249dc963fSmrg test -n "$library_names"; }; }; then 587349dc963fSmrg # We only need to search for static libraries 587449dc963fSmrg continue 587549dc963fSmrg fi 587649dc963fSmrg fi 587749dc963fSmrg 587849dc963fSmrg link_static=no # Whether the deplib will be linked statically 587949dc963fSmrg use_static_libs=$prefer_static_libs 588049dc963fSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 588149dc963fSmrg use_static_libs=no 588249dc963fSmrg fi 588349dc963fSmrg if test -n "$library_names" && 588449dc963fSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 588549dc963fSmrg case $host in 588649dc963fSmrg *cygwin* | *mingw* | *cegcc*) 588749dc963fSmrg # No point in relinking DLLs because paths are not encoded 588849dc963fSmrg notinst_deplibs="$notinst_deplibs $lib" 588949dc963fSmrg need_relink=no 589049dc963fSmrg ;; 589149dc963fSmrg *) 589249dc963fSmrg if test "$installed" = no; then 589349dc963fSmrg notinst_deplibs="$notinst_deplibs $lib" 589449dc963fSmrg need_relink=yes 589549dc963fSmrg fi 589649dc963fSmrg ;; 589749dc963fSmrg esac 589849dc963fSmrg # This is a shared library 589949dc963fSmrg 590049dc963fSmrg # Warn about portability, can't link against -module's on some 590149dc963fSmrg # systems (darwin). Don't bleat about dlopened modules though! 590249dc963fSmrg dlopenmodule="" 590349dc963fSmrg for dlpremoduletest in $dlprefiles; do 590449dc963fSmrg if test "X$dlpremoduletest" = "X$lib"; then 590549dc963fSmrg dlopenmodule="$dlpremoduletest" 590649dc963fSmrg break 590749dc963fSmrg fi 590849dc963fSmrg done 590949dc963fSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 59107aa89044Smrg echo 591149dc963fSmrg if test "$linkmode" = prog; then 591249dc963fSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 591349dc963fSmrg else 591449dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 591549dc963fSmrg fi 591649dc963fSmrg $ECHO "*** $linklib is not portable!" 591749dc963fSmrg fi 591849dc963fSmrg if test "$linkmode" = lib && 591949dc963fSmrg test "$hardcode_into_libs" = yes; then 592049dc963fSmrg # Hardcode the library path. 592149dc963fSmrg # Skip directories that are in the system default run-time 592249dc963fSmrg # search path. 592349dc963fSmrg case " $sys_lib_dlsearch_path " in 592449dc963fSmrg *" $absdir "*) ;; 592549dc963fSmrg *) 592649dc963fSmrg case "$compile_rpath " in 592749dc963fSmrg *" $absdir "*) ;; 592849dc963fSmrg *) compile_rpath="$compile_rpath $absdir" 592949dc963fSmrg esac 593049dc963fSmrg ;; 593149dc963fSmrg esac 593249dc963fSmrg case " $sys_lib_dlsearch_path " in 593349dc963fSmrg *" $libdir "*) ;; 593449dc963fSmrg *) 593549dc963fSmrg case "$finalize_rpath " in 593649dc963fSmrg *" $libdir "*) ;; 593749dc963fSmrg *) finalize_rpath="$finalize_rpath $libdir" 593849dc963fSmrg esac 593949dc963fSmrg ;; 594049dc963fSmrg esac 594149dc963fSmrg fi 594249dc963fSmrg 594349dc963fSmrg if test -n "$old_archive_from_expsyms_cmds"; then 594449dc963fSmrg # figure out the soname 594549dc963fSmrg set dummy $library_names 594649dc963fSmrg shift 594749dc963fSmrg realname="$1" 594849dc963fSmrg shift 594949dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 595049dc963fSmrg # use dlname if we got it. it's perfectly good, no? 595149dc963fSmrg if test -n "$dlname"; then 595249dc963fSmrg soname="$dlname" 595349dc963fSmrg elif test -n "$soname_spec"; then 595449dc963fSmrg # bleh windows 595549dc963fSmrg case $host in 595649dc963fSmrg *cygwin* | mingw* | *cegcc*) 595749dc963fSmrg func_arith $current - $age 595849dc963fSmrg major=$func_arith_result 595949dc963fSmrg versuffix="-$major" 596049dc963fSmrg ;; 596149dc963fSmrg esac 596249dc963fSmrg eval soname=\"$soname_spec\" 596349dc963fSmrg else 596449dc963fSmrg soname="$realname" 596549dc963fSmrg fi 596649dc963fSmrg 596749dc963fSmrg # Make a new name for the extract_expsyms_cmds to use 596849dc963fSmrg soroot="$soname" 596949dc963fSmrg func_basename "$soroot" 597049dc963fSmrg soname="$func_basename_result" 597149dc963fSmrg func_stripname 'lib' '.dll' "$soname" 597249dc963fSmrg newlib=libimp-$func_stripname_result.a 597349dc963fSmrg 597449dc963fSmrg # If the library has no export list, then create one now 597549dc963fSmrg if test -f "$output_objdir/$soname-def"; then : 597649dc963fSmrg else 597749dc963fSmrg func_verbose "extracting exported symbol list from \`$soname'" 597849dc963fSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 597949dc963fSmrg fi 598049dc963fSmrg 598149dc963fSmrg # Create $newlib 598249dc963fSmrg if test -f "$output_objdir/$newlib"; then :; else 598349dc963fSmrg func_verbose "generating import library for \`$soname'" 598449dc963fSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 598549dc963fSmrg fi 598649dc963fSmrg # make sure the library variables are pointing to the new library 598749dc963fSmrg dir=$output_objdir 598849dc963fSmrg linklib=$newlib 598949dc963fSmrg fi # test -n "$old_archive_from_expsyms_cmds" 599049dc963fSmrg 599149dc963fSmrg if test "$linkmode" = prog || test "$mode" != relink; then 599249dc963fSmrg add_shlibpath= 599349dc963fSmrg add_dir= 599449dc963fSmrg add= 599549dc963fSmrg lib_linked=yes 599649dc963fSmrg case $hardcode_action in 599749dc963fSmrg immediate | unsupported) 599849dc963fSmrg if test "$hardcode_direct" = no; then 599949dc963fSmrg add="$dir/$linklib" 600049dc963fSmrg case $host in 600149dc963fSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 600249dc963fSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 600349dc963fSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 600449dc963fSmrg *-*-unixware7*) add_dir="-L$dir" ;; 600549dc963fSmrg *-*-darwin* ) 600649dc963fSmrg # if the lib is a (non-dlopened) module then we can not 600749dc963fSmrg # link against it, someone is ignoring the earlier warnings 600849dc963fSmrg if /usr/bin/file -L $add 2> /dev/null | 600949dc963fSmrg $GREP ": [^:]* bundle" >/dev/null ; then 601049dc963fSmrg if test "X$dlopenmodule" != "X$lib"; then 601149dc963fSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 601249dc963fSmrg if test -z "$old_library" ; then 60137aa89044Smrg echo 60147aa89044Smrg echo "*** And there doesn't seem to be a static archive available" 60157aa89044Smrg echo "*** The link will probably fail, sorry" 601649dc963fSmrg else 601749dc963fSmrg add="$dir/$old_library" 601849dc963fSmrg fi 601949dc963fSmrg elif test -n "$old_library"; then 602049dc963fSmrg add="$dir/$old_library" 602149dc963fSmrg fi 602249dc963fSmrg fi 602349dc963fSmrg esac 602449dc963fSmrg elif test "$hardcode_minus_L" = no; then 602549dc963fSmrg case $host in 602649dc963fSmrg *-*-sunos*) add_shlibpath="$dir" ;; 602749dc963fSmrg esac 602849dc963fSmrg add_dir="-L$dir" 602949dc963fSmrg add="-l$name" 603049dc963fSmrg elif test "$hardcode_shlibpath_var" = no; then 603149dc963fSmrg add_shlibpath="$dir" 603249dc963fSmrg add="-l$name" 603349dc963fSmrg else 603449dc963fSmrg lib_linked=no 603549dc963fSmrg fi 603649dc963fSmrg ;; 603749dc963fSmrg relink) 603849dc963fSmrg if test "$hardcode_direct" = yes && 603949dc963fSmrg test "$hardcode_direct_absolute" = no; then 604049dc963fSmrg add="$dir/$linklib" 604149dc963fSmrg elif test "$hardcode_minus_L" = yes; then 604249dc963fSmrg add_dir="-L$dir" 604349dc963fSmrg # Try looking first in the location we're being installed to. 604449dc963fSmrg if test -n "$inst_prefix_dir"; then 604549dc963fSmrg case $libdir in 604649dc963fSmrg [\\/]*) 604749dc963fSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 604849dc963fSmrg ;; 604949dc963fSmrg esac 605049dc963fSmrg fi 605149dc963fSmrg add="-l$name" 605249dc963fSmrg elif test "$hardcode_shlibpath_var" = yes; then 605349dc963fSmrg add_shlibpath="$dir" 605449dc963fSmrg add="-l$name" 605549dc963fSmrg else 605649dc963fSmrg lib_linked=no 605749dc963fSmrg fi 605849dc963fSmrg ;; 605949dc963fSmrg *) lib_linked=no ;; 606049dc963fSmrg esac 606149dc963fSmrg 606249dc963fSmrg if test "$lib_linked" != yes; then 606349dc963fSmrg func_fatal_configuration "unsupported hardcode properties" 606449dc963fSmrg fi 606549dc963fSmrg 606649dc963fSmrg if test -n "$add_shlibpath"; then 606749dc963fSmrg case :$compile_shlibpath: in 606849dc963fSmrg *":$add_shlibpath:"*) ;; 606949dc963fSmrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 607049dc963fSmrg esac 607149dc963fSmrg fi 607249dc963fSmrg if test "$linkmode" = prog; then 607349dc963fSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 607449dc963fSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 607549dc963fSmrg else 607649dc963fSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 607749dc963fSmrg test -n "$add" && deplibs="$add $deplibs" 607849dc963fSmrg if test "$hardcode_direct" != yes && 607949dc963fSmrg test "$hardcode_minus_L" != yes && 608049dc963fSmrg test "$hardcode_shlibpath_var" = yes; then 608149dc963fSmrg case :$finalize_shlibpath: in 608249dc963fSmrg *":$libdir:"*) ;; 608349dc963fSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 608449dc963fSmrg esac 608549dc963fSmrg fi 608649dc963fSmrg fi 608749dc963fSmrg fi 608849dc963fSmrg 608949dc963fSmrg if test "$linkmode" = prog || test "$mode" = relink; then 609049dc963fSmrg add_shlibpath= 609149dc963fSmrg add_dir= 609249dc963fSmrg add= 609349dc963fSmrg # Finalize command for both is simple: just hardcode it. 609449dc963fSmrg if test "$hardcode_direct" = yes && 609549dc963fSmrg test "$hardcode_direct_absolute" = no; then 609649dc963fSmrg add="$libdir/$linklib" 609749dc963fSmrg elif test "$hardcode_minus_L" = yes; then 609849dc963fSmrg add_dir="-L$libdir" 609949dc963fSmrg add="-l$name" 610049dc963fSmrg elif test "$hardcode_shlibpath_var" = yes; then 610149dc963fSmrg case :$finalize_shlibpath: in 610249dc963fSmrg *":$libdir:"*) ;; 610349dc963fSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 610449dc963fSmrg esac 610549dc963fSmrg add="-l$name" 610649dc963fSmrg elif test "$hardcode_automatic" = yes; then 610749dc963fSmrg if test -n "$inst_prefix_dir" && 610849dc963fSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 610949dc963fSmrg add="$inst_prefix_dir$libdir/$linklib" 611049dc963fSmrg else 611149dc963fSmrg add="$libdir/$linklib" 611249dc963fSmrg fi 611349dc963fSmrg else 611449dc963fSmrg # We cannot seem to hardcode it, guess we'll fake it. 611549dc963fSmrg add_dir="-L$libdir" 611649dc963fSmrg # Try looking first in the location we're being installed to. 611749dc963fSmrg if test -n "$inst_prefix_dir"; then 611849dc963fSmrg case $libdir in 611949dc963fSmrg [\\/]*) 612049dc963fSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 612149dc963fSmrg ;; 612249dc963fSmrg esac 612349dc963fSmrg fi 612449dc963fSmrg add="-l$name" 612549dc963fSmrg fi 612649dc963fSmrg 612749dc963fSmrg if test "$linkmode" = prog; then 612849dc963fSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 612949dc963fSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 613049dc963fSmrg else 613149dc963fSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 613249dc963fSmrg test -n "$add" && deplibs="$add $deplibs" 613349dc963fSmrg fi 613449dc963fSmrg fi 613549dc963fSmrg elif test "$linkmode" = prog; then 613649dc963fSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 613749dc963fSmrg # is not unsupported. This is valid on all known static and 613849dc963fSmrg # shared platforms. 613949dc963fSmrg if test "$hardcode_direct" != unsupported; then 614049dc963fSmrg test -n "$old_library" && linklib="$old_library" 614149dc963fSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 614249dc963fSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 614349dc963fSmrg else 614449dc963fSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 614549dc963fSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 614649dc963fSmrg fi 614749dc963fSmrg elif test "$build_libtool_libs" = yes; then 614849dc963fSmrg # Not a shared library 614949dc963fSmrg if test "$deplibs_check_method" != pass_all; then 615049dc963fSmrg # We're trying link a shared library against a static one 615149dc963fSmrg # but the system doesn't support it. 615249dc963fSmrg 615349dc963fSmrg # Just print a warning and add the library to dependency_libs so 615449dc963fSmrg # that the program can be linked against the static library. 61557aa89044Smrg echo 615649dc963fSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 61577aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 61587aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 61597aa89044Smrg echo "*** shared version of the library, which you do not appear to have." 616049dc963fSmrg if test "$module" = yes; then 61617aa89044Smrg echo "*** But as you try to build a module library, libtool will still create " 61627aa89044Smrg echo "*** a static module, that should work as long as the dlopening application" 61637aa89044Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 616449dc963fSmrg if test -z "$global_symbol_pipe"; then 61657aa89044Smrg echo 61667aa89044Smrg echo "*** However, this would only work if libtool was able to extract symbol" 61677aa89044Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 61687aa89044Smrg echo "*** not find such a program. So, this module is probably useless." 61697aa89044Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 617049dc963fSmrg fi 617149dc963fSmrg if test "$build_old_libs" = no; then 617249dc963fSmrg build_libtool_libs=module 617349dc963fSmrg build_old_libs=yes 617449dc963fSmrg else 617549dc963fSmrg build_libtool_libs=no 617649dc963fSmrg fi 617749dc963fSmrg fi 617849dc963fSmrg else 617949dc963fSmrg deplibs="$dir/$old_library $deplibs" 618049dc963fSmrg link_static=yes 618149dc963fSmrg fi 618249dc963fSmrg fi # link shared/static library? 618349dc963fSmrg 618449dc963fSmrg if test "$linkmode" = lib; then 618549dc963fSmrg if test -n "$dependency_libs" && 618649dc963fSmrg { test "$hardcode_into_libs" != yes || 618749dc963fSmrg test "$build_old_libs" = yes || 618849dc963fSmrg test "$link_static" = yes; }; then 618949dc963fSmrg # Extract -R from dependency_libs 619049dc963fSmrg temp_deplibs= 619149dc963fSmrg for libdir in $dependency_libs; do 619249dc963fSmrg case $libdir in 619349dc963fSmrg -R*) func_stripname '-R' '' "$libdir" 619449dc963fSmrg temp_xrpath=$func_stripname_result 619549dc963fSmrg case " $xrpath " in 619649dc963fSmrg *" $temp_xrpath "*) ;; 619749dc963fSmrg *) xrpath="$xrpath $temp_xrpath";; 619849dc963fSmrg esac;; 619949dc963fSmrg *) temp_deplibs="$temp_deplibs $libdir";; 620049dc963fSmrg esac 620149dc963fSmrg done 620249dc963fSmrg dependency_libs="$temp_deplibs" 620349dc963fSmrg fi 620449dc963fSmrg 620549dc963fSmrg newlib_search_path="$newlib_search_path $absdir" 620649dc963fSmrg # Link against this library 620749dc963fSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 620849dc963fSmrg # ... and its dependency_libs 620949dc963fSmrg tmp_libs= 621049dc963fSmrg for deplib in $dependency_libs; do 621149dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 621249dc963fSmrg if $opt_duplicate_deps ; then 621349dc963fSmrg case "$tmp_libs " in 621449dc963fSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 621549dc963fSmrg esac 621649dc963fSmrg fi 621749dc963fSmrg tmp_libs="$tmp_libs $deplib" 621849dc963fSmrg done 621949dc963fSmrg 622049dc963fSmrg if test "$link_all_deplibs" != no; then 622149dc963fSmrg # Add the search paths of all dependency libraries 622249dc963fSmrg for deplib in $dependency_libs; do 62237aa89044Smrg path= 622449dc963fSmrg case $deplib in 622549dc963fSmrg -L*) path="$deplib" ;; 622649dc963fSmrg *.la) 622749dc963fSmrg func_dirname "$deplib" "" "." 622849dc963fSmrg dir="$func_dirname_result" 622949dc963fSmrg # We need an absolute path. 623049dc963fSmrg case $dir in 623149dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 623249dc963fSmrg *) 623349dc963fSmrg absdir=`cd "$dir" && pwd` 623449dc963fSmrg if test -z "$absdir"; then 623549dc963fSmrg func_warning "cannot determine absolute directory name of \`$dir'" 623649dc963fSmrg absdir="$dir" 623749dc963fSmrg fi 623849dc963fSmrg ;; 623949dc963fSmrg esac 624049dc963fSmrg if $GREP "^installed=no" $deplib > /dev/null; then 624149dc963fSmrg case $host in 624249dc963fSmrg *-*-darwin*) 624349dc963fSmrg depdepl= 624449dc963fSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 624549dc963fSmrg if test -n "$deplibrary_names" ; then 624649dc963fSmrg for tmp in $deplibrary_names ; do 624749dc963fSmrg depdepl=$tmp 624849dc963fSmrg done 624949dc963fSmrg if test -f "$absdir/$objdir/$depdepl" ; then 625049dc963fSmrg depdepl="$absdir/$objdir/$depdepl" 625149dc963fSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 625249dc963fSmrg if test -z "$darwin_install_name"; then 625349dc963fSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 625449dc963fSmrg fi 625549dc963fSmrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 625649dc963fSmrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 625749dc963fSmrg path= 625849dc963fSmrg fi 625949dc963fSmrg fi 626049dc963fSmrg ;; 626149dc963fSmrg *) 626249dc963fSmrg path="-L$absdir/$objdir" 626349dc963fSmrg ;; 626449dc963fSmrg esac 626549dc963fSmrg else 626649dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 626749dc963fSmrg test -z "$libdir" && \ 626849dc963fSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 626949dc963fSmrg test "$absdir" != "$libdir" && \ 627049dc963fSmrg func_warning "\`$deplib' seems to be moved" 627149dc963fSmrg 627249dc963fSmrg path="-L$absdir" 627349dc963fSmrg fi 627449dc963fSmrg ;; 627549dc963fSmrg esac 627649dc963fSmrg case " $deplibs " in 627749dc963fSmrg *" $path "*) ;; 627849dc963fSmrg *) deplibs="$path $deplibs" ;; 627949dc963fSmrg esac 628049dc963fSmrg done 628149dc963fSmrg fi # link_all_deplibs != no 628249dc963fSmrg fi # linkmode = lib 628349dc963fSmrg done # for deplib in $libs 628449dc963fSmrg if test "$pass" = link; then 628549dc963fSmrg if test "$linkmode" = "prog"; then 628649dc963fSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 628749dc963fSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 628849dc963fSmrg else 62897aa89044Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 629049dc963fSmrg fi 629149dc963fSmrg fi 629249dc963fSmrg dependency_libs="$newdependency_libs" 629349dc963fSmrg if test "$pass" = dlpreopen; then 629449dc963fSmrg # Link the dlpreopened libraries before other libraries 629549dc963fSmrg for deplib in $save_deplibs; do 629649dc963fSmrg deplibs="$deplib $deplibs" 629749dc963fSmrg done 629849dc963fSmrg fi 629949dc963fSmrg if test "$pass" != dlopen; then 630049dc963fSmrg if test "$pass" != conv; then 630149dc963fSmrg # Make sure lib_search_path contains only unique directories. 630249dc963fSmrg lib_search_path= 630349dc963fSmrg for dir in $newlib_search_path; do 630449dc963fSmrg case "$lib_search_path " in 630549dc963fSmrg *" $dir "*) ;; 630649dc963fSmrg *) lib_search_path="$lib_search_path $dir" ;; 630749dc963fSmrg esac 630849dc963fSmrg done 630949dc963fSmrg newlib_search_path= 631049dc963fSmrg fi 631149dc963fSmrg 631249dc963fSmrg if test "$linkmode,$pass" != "prog,link"; then 631349dc963fSmrg vars="deplibs" 631449dc963fSmrg else 631549dc963fSmrg vars="compile_deplibs finalize_deplibs" 631649dc963fSmrg fi 631749dc963fSmrg for var in $vars dependency_libs; do 631849dc963fSmrg # Add libraries to $var in reverse order 631949dc963fSmrg eval tmp_libs=\"\$$var\" 632049dc963fSmrg new_libs= 632149dc963fSmrg for deplib in $tmp_libs; do 632249dc963fSmrg # FIXME: Pedantically, this is the right thing to do, so 632349dc963fSmrg # that some nasty dependency loop isn't accidentally 632449dc963fSmrg # broken: 632549dc963fSmrg #new_libs="$deplib $new_libs" 632649dc963fSmrg # Pragmatically, this seems to cause very few problems in 632749dc963fSmrg # practice: 632849dc963fSmrg case $deplib in 632949dc963fSmrg -L*) new_libs="$deplib $new_libs" ;; 633049dc963fSmrg -R*) ;; 633149dc963fSmrg *) 633249dc963fSmrg # And here is the reason: when a library appears more 633349dc963fSmrg # than once as an explicit dependence of a library, or 633449dc963fSmrg # is implicitly linked in more than once by the 633549dc963fSmrg # compiler, it is considered special, and multiple 633649dc963fSmrg # occurrences thereof are not removed. Compare this 633749dc963fSmrg # with having the same library being listed as a 633849dc963fSmrg # dependency of multiple other libraries: in this case, 633949dc963fSmrg # we know (pedantically, we assume) the library does not 634049dc963fSmrg # need to be listed more than once, so we keep only the 634149dc963fSmrg # last copy. This is not always right, but it is rare 634249dc963fSmrg # enough that we require users that really mean to play 634349dc963fSmrg # such unportable linking tricks to link the library 634449dc963fSmrg # using -Wl,-lname, so that libtool does not consider it 634549dc963fSmrg # for duplicate removal. 634649dc963fSmrg case " $specialdeplibs " in 634749dc963fSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 634849dc963fSmrg *) 634949dc963fSmrg case " $new_libs " in 635049dc963fSmrg *" $deplib "*) ;; 635149dc963fSmrg *) new_libs="$deplib $new_libs" ;; 635249dc963fSmrg esac 635349dc963fSmrg ;; 635449dc963fSmrg esac 635549dc963fSmrg ;; 635649dc963fSmrg esac 635749dc963fSmrg done 635849dc963fSmrg tmp_libs= 635949dc963fSmrg for deplib in $new_libs; do 636049dc963fSmrg case $deplib in 636149dc963fSmrg -L*) 636249dc963fSmrg case " $tmp_libs " in 636349dc963fSmrg *" $deplib "*) ;; 636449dc963fSmrg *) tmp_libs="$tmp_libs $deplib" ;; 636549dc963fSmrg esac 636649dc963fSmrg ;; 636749dc963fSmrg *) tmp_libs="$tmp_libs $deplib" ;; 636849dc963fSmrg esac 636949dc963fSmrg done 637049dc963fSmrg eval $var=\"$tmp_libs\" 637149dc963fSmrg done # for var 637249dc963fSmrg fi 637349dc963fSmrg # Last step: remove runtime libs from dependency_libs 637449dc963fSmrg # (they stay in deplibs) 637549dc963fSmrg tmp_libs= 637649dc963fSmrg for i in $dependency_libs ; do 637749dc963fSmrg case " $predeps $postdeps $compiler_lib_search_path " in 637849dc963fSmrg *" $i "*) 637949dc963fSmrg i="" 638049dc963fSmrg ;; 638149dc963fSmrg esac 638249dc963fSmrg if test -n "$i" ; then 638349dc963fSmrg tmp_libs="$tmp_libs $i" 638449dc963fSmrg fi 638549dc963fSmrg done 638649dc963fSmrg dependency_libs=$tmp_libs 638749dc963fSmrg done # for pass 638849dc963fSmrg if test "$linkmode" = prog; then 638949dc963fSmrg dlfiles="$newdlfiles" 639049dc963fSmrg fi 639149dc963fSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 639249dc963fSmrg dlprefiles="$newdlprefiles" 639349dc963fSmrg fi 639449dc963fSmrg 639549dc963fSmrg case $linkmode in 639649dc963fSmrg oldlib) 639749dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 639849dc963fSmrg func_warning "\`-dlopen' is ignored for archives" 639949dc963fSmrg fi 640049dc963fSmrg 640149dc963fSmrg case " $deplibs" in 640249dc963fSmrg *\ -l* | *\ -L*) 640349dc963fSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 640449dc963fSmrg esac 640549dc963fSmrg 640649dc963fSmrg test -n "$rpath" && \ 640749dc963fSmrg func_warning "\`-rpath' is ignored for archives" 640849dc963fSmrg 640949dc963fSmrg test -n "$xrpath" && \ 641049dc963fSmrg func_warning "\`-R' is ignored for archives" 641149dc963fSmrg 641249dc963fSmrg test -n "$vinfo" && \ 641349dc963fSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 641449dc963fSmrg 641549dc963fSmrg test -n "$release" && \ 641649dc963fSmrg func_warning "\`-release' is ignored for archives" 641749dc963fSmrg 641849dc963fSmrg test -n "$export_symbols$export_symbols_regex" && \ 641949dc963fSmrg func_warning "\`-export-symbols' is ignored for archives" 642049dc963fSmrg 642149dc963fSmrg # Now set the variables for building old libraries. 642249dc963fSmrg build_libtool_libs=no 642349dc963fSmrg oldlibs="$output" 642449dc963fSmrg objs="$objs$old_deplibs" 642549dc963fSmrg ;; 642649dc963fSmrg 642749dc963fSmrg lib) 642849dc963fSmrg # Make sure we only generate libraries of the form `libNAME.la'. 642949dc963fSmrg case $outputname in 643049dc963fSmrg lib*) 643149dc963fSmrg func_stripname 'lib' '.la' "$outputname" 643249dc963fSmrg name=$func_stripname_result 643349dc963fSmrg eval shared_ext=\"$shrext_cmds\" 643449dc963fSmrg eval libname=\"$libname_spec\" 643549dc963fSmrg ;; 643649dc963fSmrg *) 643749dc963fSmrg test "$module" = no && \ 643849dc963fSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 643949dc963fSmrg 644049dc963fSmrg if test "$need_lib_prefix" != no; then 644149dc963fSmrg # Add the "lib" prefix for modules if required 644249dc963fSmrg func_stripname '' '.la' "$outputname" 644349dc963fSmrg name=$func_stripname_result 644449dc963fSmrg eval shared_ext=\"$shrext_cmds\" 644549dc963fSmrg eval libname=\"$libname_spec\" 644649dc963fSmrg else 644749dc963fSmrg func_stripname '' '.la' "$outputname" 644849dc963fSmrg libname=$func_stripname_result 644949dc963fSmrg fi 645049dc963fSmrg ;; 645149dc963fSmrg esac 645249dc963fSmrg 645349dc963fSmrg if test -n "$objs"; then 645449dc963fSmrg if test "$deplibs_check_method" != pass_all; then 645549dc963fSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 645649dc963fSmrg else 64577aa89044Smrg echo 645849dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 645949dc963fSmrg $ECHO "*** objects $objs is not portable!" 646049dc963fSmrg libobjs="$libobjs $objs" 646149dc963fSmrg fi 646249dc963fSmrg fi 646349dc963fSmrg 646449dc963fSmrg test "$dlself" != no && \ 646549dc963fSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 646649dc963fSmrg 646749dc963fSmrg set dummy $rpath 646849dc963fSmrg shift 646949dc963fSmrg test "$#" -gt 1 && \ 647049dc963fSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 647149dc963fSmrg 647249dc963fSmrg install_libdir="$1" 647349dc963fSmrg 647449dc963fSmrg oldlibs= 647549dc963fSmrg if test -z "$rpath"; then 647649dc963fSmrg if test "$build_libtool_libs" = yes; then 647749dc963fSmrg # Building a libtool convenience library. 647849dc963fSmrg # Some compilers have problems with a `.al' extension so 647949dc963fSmrg # convenience libraries should have the same extension an 648049dc963fSmrg # archive normally would. 648149dc963fSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 648249dc963fSmrg build_libtool_libs=convenience 648349dc963fSmrg build_old_libs=yes 648449dc963fSmrg fi 648549dc963fSmrg 648649dc963fSmrg test -n "$vinfo" && \ 648749dc963fSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 648849dc963fSmrg 648949dc963fSmrg test -n "$release" && \ 649049dc963fSmrg func_warning "\`-release' is ignored for convenience libraries" 649149dc963fSmrg else 649249dc963fSmrg 649349dc963fSmrg # Parse the version information argument. 649449dc963fSmrg save_ifs="$IFS"; IFS=':' 649549dc963fSmrg set dummy $vinfo 0 0 0 649649dc963fSmrg shift 649749dc963fSmrg IFS="$save_ifs" 649849dc963fSmrg 649949dc963fSmrg test -n "$7" && \ 650049dc963fSmrg func_fatal_help "too many parameters to \`-version-info'" 650149dc963fSmrg 650249dc963fSmrg # convert absolute version numbers to libtool ages 650349dc963fSmrg # this retains compatibility with .la files and attempts 650449dc963fSmrg # to make the code below a bit more comprehensible 650549dc963fSmrg 650649dc963fSmrg case $vinfo_number in 650749dc963fSmrg yes) 650849dc963fSmrg number_major="$1" 650949dc963fSmrg number_minor="$2" 651049dc963fSmrg number_revision="$3" 651149dc963fSmrg # 651249dc963fSmrg # There are really only two kinds -- those that 651349dc963fSmrg # use the current revision as the major version 651449dc963fSmrg # and those that subtract age and use age as 651549dc963fSmrg # a minor version. But, then there is irix 651649dc963fSmrg # which has an extra 1 added just for fun 651749dc963fSmrg # 651849dc963fSmrg case $version_type in 651949dc963fSmrg darwin|linux|osf|windows|none) 652049dc963fSmrg func_arith $number_major + $number_minor 652149dc963fSmrg current=$func_arith_result 652249dc963fSmrg age="$number_minor" 652349dc963fSmrg revision="$number_revision" 652449dc963fSmrg ;; 65257aa89044Smrg freebsd-aout|freebsd-elf|qnx|sunos) 652649dc963fSmrg current="$number_major" 652749dc963fSmrg revision="$number_minor" 652849dc963fSmrg age="0" 652949dc963fSmrg ;; 653049dc963fSmrg irix|nonstopux) 653149dc963fSmrg func_arith $number_major + $number_minor 653249dc963fSmrg current=$func_arith_result 653349dc963fSmrg age="$number_minor" 653449dc963fSmrg revision="$number_minor" 653549dc963fSmrg lt_irix_increment=no 653649dc963fSmrg ;; 653749dc963fSmrg esac 653849dc963fSmrg ;; 653949dc963fSmrg no) 654049dc963fSmrg current="$1" 654149dc963fSmrg revision="$2" 654249dc963fSmrg age="$3" 654349dc963fSmrg ;; 654449dc963fSmrg esac 654549dc963fSmrg 654649dc963fSmrg # Check that each of the things are valid numbers. 654749dc963fSmrg case $current in 654849dc963fSmrg 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]) ;; 654949dc963fSmrg *) 655049dc963fSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 655149dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 655249dc963fSmrg ;; 655349dc963fSmrg esac 655449dc963fSmrg 655549dc963fSmrg case $revision in 655649dc963fSmrg 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]) ;; 655749dc963fSmrg *) 655849dc963fSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 655949dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 656049dc963fSmrg ;; 656149dc963fSmrg esac 656249dc963fSmrg 656349dc963fSmrg case $age in 656449dc963fSmrg 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]) ;; 656549dc963fSmrg *) 656649dc963fSmrg func_error "AGE \`$age' must be a nonnegative integer" 656749dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 656849dc963fSmrg ;; 656949dc963fSmrg esac 657049dc963fSmrg 657149dc963fSmrg if test "$age" -gt "$current"; then 657249dc963fSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 657349dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 657449dc963fSmrg fi 657549dc963fSmrg 657649dc963fSmrg # Calculate the version variables. 657749dc963fSmrg major= 657849dc963fSmrg versuffix= 657949dc963fSmrg verstring= 658049dc963fSmrg case $version_type in 658149dc963fSmrg none) ;; 658249dc963fSmrg 658349dc963fSmrg darwin) 658449dc963fSmrg # Like Linux, but with the current version available in 658549dc963fSmrg # verstring for coding it into the library header 658649dc963fSmrg func_arith $current - $age 658749dc963fSmrg major=.$func_arith_result 658849dc963fSmrg versuffix="$major.$age.$revision" 658949dc963fSmrg # Darwin ld doesn't like 0 for these options... 659049dc963fSmrg func_arith $current + 1 659149dc963fSmrg minor_current=$func_arith_result 659249dc963fSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 659349dc963fSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 659449dc963fSmrg ;; 659549dc963fSmrg 659649dc963fSmrg freebsd-aout) 659749dc963fSmrg major=".$current" 659849dc963fSmrg versuffix=".$current.$revision"; 659949dc963fSmrg ;; 660049dc963fSmrg 660149dc963fSmrg freebsd-elf) 660249dc963fSmrg major=".$current" 660349dc963fSmrg versuffix=".$current" 660449dc963fSmrg ;; 660549dc963fSmrg 660649dc963fSmrg irix | nonstopux) 660749dc963fSmrg if test "X$lt_irix_increment" = "Xno"; then 660849dc963fSmrg func_arith $current - $age 660949dc963fSmrg else 661049dc963fSmrg func_arith $current - $age + 1 661149dc963fSmrg fi 661249dc963fSmrg major=$func_arith_result 661349dc963fSmrg 661449dc963fSmrg case $version_type in 661549dc963fSmrg nonstopux) verstring_prefix=nonstopux ;; 661649dc963fSmrg *) verstring_prefix=sgi ;; 661749dc963fSmrg esac 661849dc963fSmrg verstring="$verstring_prefix$major.$revision" 661949dc963fSmrg 662049dc963fSmrg # Add in all the interfaces that we are compatible with. 662149dc963fSmrg loop=$revision 662249dc963fSmrg while test "$loop" -ne 0; do 662349dc963fSmrg func_arith $revision - $loop 662449dc963fSmrg iface=$func_arith_result 662549dc963fSmrg func_arith $loop - 1 662649dc963fSmrg loop=$func_arith_result 662749dc963fSmrg verstring="$verstring_prefix$major.$iface:$verstring" 662849dc963fSmrg done 662949dc963fSmrg 663049dc963fSmrg # Before this point, $major must not contain `.'. 663149dc963fSmrg major=.$major 663249dc963fSmrg versuffix="$major.$revision" 663349dc963fSmrg ;; 663449dc963fSmrg 663549dc963fSmrg linux) 663649dc963fSmrg func_arith $current - $age 663749dc963fSmrg major=.$func_arith_result 663849dc963fSmrg versuffix="$major.$age.$revision" 663949dc963fSmrg ;; 664049dc963fSmrg 664149dc963fSmrg osf) 664249dc963fSmrg func_arith $current - $age 664349dc963fSmrg major=.$func_arith_result 664449dc963fSmrg versuffix=".$current.$age.$revision" 664549dc963fSmrg verstring="$current.$age.$revision" 664649dc963fSmrg 664749dc963fSmrg # Add in all the interfaces that we are compatible with. 664849dc963fSmrg loop=$age 664949dc963fSmrg while test "$loop" -ne 0; do 665049dc963fSmrg func_arith $current - $loop 665149dc963fSmrg iface=$func_arith_result 665249dc963fSmrg func_arith $loop - 1 665349dc963fSmrg loop=$func_arith_result 665449dc963fSmrg verstring="$verstring:${iface}.0" 665549dc963fSmrg done 665649dc963fSmrg 665749dc963fSmrg # Make executables depend on our current version. 665849dc963fSmrg verstring="$verstring:${current}.0" 665949dc963fSmrg ;; 666049dc963fSmrg 666149dc963fSmrg qnx) 666249dc963fSmrg major=".$current" 666349dc963fSmrg versuffix=".$current" 666449dc963fSmrg ;; 666549dc963fSmrg 666649dc963fSmrg sunos) 666749dc963fSmrg major=".$current" 666849dc963fSmrg versuffix=".$current.$revision" 666949dc963fSmrg ;; 667049dc963fSmrg 667149dc963fSmrg windows) 667249dc963fSmrg # Use '-' rather than '.', since we only want one 667349dc963fSmrg # extension on DOS 8.3 filesystems. 667449dc963fSmrg func_arith $current - $age 667549dc963fSmrg major=$func_arith_result 667649dc963fSmrg versuffix="-$major" 667749dc963fSmrg ;; 667849dc963fSmrg 667949dc963fSmrg *) 668049dc963fSmrg func_fatal_configuration "unknown library version type \`$version_type'" 668149dc963fSmrg ;; 668249dc963fSmrg esac 668349dc963fSmrg 668449dc963fSmrg # Clear the version info if we defaulted, and they specified a release. 668549dc963fSmrg if test -z "$vinfo" && test -n "$release"; then 668649dc963fSmrg major= 668749dc963fSmrg case $version_type in 668849dc963fSmrg darwin) 668949dc963fSmrg # we can't check for "0.0" in archive_cmds due to quoting 669049dc963fSmrg # problems, so we reset it completely 669149dc963fSmrg verstring= 669249dc963fSmrg ;; 669349dc963fSmrg *) 669449dc963fSmrg verstring="0.0" 669549dc963fSmrg ;; 669649dc963fSmrg esac 669749dc963fSmrg if test "$need_version" = no; then 669849dc963fSmrg versuffix= 669949dc963fSmrg else 670049dc963fSmrg versuffix=".0.0" 670149dc963fSmrg fi 670249dc963fSmrg fi 670349dc963fSmrg 670449dc963fSmrg # Remove version info from name if versioning should be avoided 670549dc963fSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 670649dc963fSmrg major= 670749dc963fSmrg versuffix= 670849dc963fSmrg verstring="" 670949dc963fSmrg fi 671049dc963fSmrg 671149dc963fSmrg # Check to see if the archive will have undefined symbols. 671249dc963fSmrg if test "$allow_undefined" = yes; then 671349dc963fSmrg if test "$allow_undefined_flag" = unsupported; then 671449dc963fSmrg func_warning "undefined symbols not allowed in $host shared libraries" 671549dc963fSmrg build_libtool_libs=no 671649dc963fSmrg build_old_libs=yes 671749dc963fSmrg fi 671849dc963fSmrg else 671949dc963fSmrg # Don't allow undefined symbols. 672049dc963fSmrg allow_undefined_flag="$no_undefined_flag" 672149dc963fSmrg fi 672249dc963fSmrg 672349dc963fSmrg fi 672449dc963fSmrg 672549dc963fSmrg func_generate_dlsyms "$libname" "$libname" "yes" 672649dc963fSmrg libobjs="$libobjs $symfileobj" 672749dc963fSmrg test "X$libobjs" = "X " && libobjs= 672849dc963fSmrg 672949dc963fSmrg if test "$mode" != relink; then 673049dc963fSmrg # Remove our outputs, but don't remove object files since they 673149dc963fSmrg # may have been created when compiling PIC objects. 673249dc963fSmrg removelist= 673349dc963fSmrg tempremovelist=`$ECHO "$output_objdir/*"` 673449dc963fSmrg for p in $tempremovelist; do 673549dc963fSmrg case $p in 673649dc963fSmrg *.$objext | *.gcno) 673749dc963fSmrg ;; 673849dc963fSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 673949dc963fSmrg if test "X$precious_files_regex" != "X"; then 674049dc963fSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 674149dc963fSmrg then 674249dc963fSmrg continue 674349dc963fSmrg fi 674449dc963fSmrg fi 674549dc963fSmrg removelist="$removelist $p" 674649dc963fSmrg ;; 674749dc963fSmrg *) ;; 674849dc963fSmrg esac 674949dc963fSmrg done 675049dc963fSmrg test -n "$removelist" && \ 675149dc963fSmrg func_show_eval "${RM}r \$removelist" 675249dc963fSmrg fi 675349dc963fSmrg 675449dc963fSmrg # Now set the variables for building old libraries. 675549dc963fSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 675649dc963fSmrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 675749dc963fSmrg 675849dc963fSmrg # Transform .lo files to .o files. 67597aa89044Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 676049dc963fSmrg fi 676149dc963fSmrg 676249dc963fSmrg # Eliminate all temporary directories. 676349dc963fSmrg #for path in $notinst_path; do 67647aa89044Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 67657aa89044Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 67667aa89044Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 676749dc963fSmrg #done 676849dc963fSmrg 676949dc963fSmrg if test -n "$xrpath"; then 677049dc963fSmrg # If the user specified any rpath flags, then add them. 677149dc963fSmrg temp_xrpath= 677249dc963fSmrg for libdir in $xrpath; do 677349dc963fSmrg temp_xrpath="$temp_xrpath -R$libdir" 677449dc963fSmrg case "$finalize_rpath " in 677549dc963fSmrg *" $libdir "*) ;; 677649dc963fSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 677749dc963fSmrg esac 677849dc963fSmrg done 677949dc963fSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 678049dc963fSmrg dependency_libs="$temp_xrpath $dependency_libs" 678149dc963fSmrg fi 678249dc963fSmrg fi 678349dc963fSmrg 678449dc963fSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 678549dc963fSmrg old_dlfiles="$dlfiles" 678649dc963fSmrg dlfiles= 678749dc963fSmrg for lib in $old_dlfiles; do 678849dc963fSmrg case " $dlprefiles $dlfiles " in 678949dc963fSmrg *" $lib "*) ;; 679049dc963fSmrg *) dlfiles="$dlfiles $lib" ;; 679149dc963fSmrg esac 679249dc963fSmrg done 679349dc963fSmrg 679449dc963fSmrg # Make sure dlprefiles contains only unique files 679549dc963fSmrg old_dlprefiles="$dlprefiles" 679649dc963fSmrg dlprefiles= 679749dc963fSmrg for lib in $old_dlprefiles; do 679849dc963fSmrg case "$dlprefiles " in 679949dc963fSmrg *" $lib "*) ;; 680049dc963fSmrg *) dlprefiles="$dlprefiles $lib" ;; 680149dc963fSmrg esac 680249dc963fSmrg done 680349dc963fSmrg 680449dc963fSmrg if test "$build_libtool_libs" = yes; then 680549dc963fSmrg if test -n "$rpath"; then 680649dc963fSmrg case $host in 68077aa89044Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 680849dc963fSmrg # these systems don't actually have a c library (as such)! 680949dc963fSmrg ;; 681049dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 681149dc963fSmrg # Rhapsody C library is in the System framework 681249dc963fSmrg deplibs="$deplibs System.ltframework" 681349dc963fSmrg ;; 681449dc963fSmrg *-*-netbsd*) 681549dc963fSmrg # Don't link with libc until the a.out ld.so is fixed. 681649dc963fSmrg ;; 681749dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 681849dc963fSmrg # Do not include libc due to us having libc/libc_r. 681949dc963fSmrg ;; 682049dc963fSmrg *-*-sco3.2v5* | *-*-sco5v6*) 682149dc963fSmrg # Causes problems with __ctype 682249dc963fSmrg ;; 682349dc963fSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 682449dc963fSmrg # Compiler inserts libc in the correct place for threads to work 682549dc963fSmrg ;; 682649dc963fSmrg *) 682749dc963fSmrg # Add libc to deplibs on all other systems if necessary. 682849dc963fSmrg if test "$build_libtool_need_lc" = "yes"; then 682949dc963fSmrg deplibs="$deplibs -lc" 683049dc963fSmrg fi 683149dc963fSmrg ;; 683249dc963fSmrg esac 683349dc963fSmrg fi 683449dc963fSmrg 683549dc963fSmrg # Transform deplibs into only deplibs that can be linked in shared. 683649dc963fSmrg name_save=$name 683749dc963fSmrg libname_save=$libname 683849dc963fSmrg release_save=$release 683949dc963fSmrg versuffix_save=$versuffix 684049dc963fSmrg major_save=$major 684149dc963fSmrg # I'm not sure if I'm treating the release correctly. I think 684249dc963fSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 684349dc963fSmrg # add it in twice. Is that correct? 684449dc963fSmrg release="" 684549dc963fSmrg versuffix="" 684649dc963fSmrg major="" 684749dc963fSmrg newdeplibs= 684849dc963fSmrg droppeddeps=no 684949dc963fSmrg case $deplibs_check_method in 685049dc963fSmrg pass_all) 685149dc963fSmrg # Don't check for shared/static. Everything works. 685249dc963fSmrg # This might be a little naive. We might want to check 685349dc963fSmrg # whether the library exists or not. But this is on 685449dc963fSmrg # osf3 & osf4 and I'm not really sure... Just 685549dc963fSmrg # implementing what was already the behavior. 685649dc963fSmrg newdeplibs=$deplibs 685749dc963fSmrg ;; 685849dc963fSmrg test_compile) 685949dc963fSmrg # This code stresses the "libraries are programs" paradigm to its 686049dc963fSmrg # limits. Maybe even breaks it. We compile a program, linking it 686149dc963fSmrg # against the deplibs as a proxy for the library. Then we can check 686249dc963fSmrg # whether they linked in statically or dynamically with ldd. 686349dc963fSmrg $opt_dry_run || $RM conftest.c 686449dc963fSmrg cat > conftest.c <<EOF 686549dc963fSmrg int main() { return 0; } 686649dc963fSmrgEOF 686749dc963fSmrg $opt_dry_run || $RM conftest 686849dc963fSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 686949dc963fSmrg ldd_output=`ldd conftest` 687049dc963fSmrg for i in $deplibs; do 687149dc963fSmrg case $i in 687249dc963fSmrg -l*) 687349dc963fSmrg func_stripname -l '' "$i" 687449dc963fSmrg name=$func_stripname_result 687549dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 687649dc963fSmrg case " $predeps $postdeps " in 687749dc963fSmrg *" $i "*) 687849dc963fSmrg newdeplibs="$newdeplibs $i" 687949dc963fSmrg i="" 688049dc963fSmrg ;; 688149dc963fSmrg esac 688249dc963fSmrg fi 688349dc963fSmrg if test -n "$i" ; then 688449dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 688549dc963fSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 688649dc963fSmrg set dummy $deplib_matches; shift 688749dc963fSmrg deplib_match=$1 688849dc963fSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 688949dc963fSmrg newdeplibs="$newdeplibs $i" 689049dc963fSmrg else 689149dc963fSmrg droppeddeps=yes 68927aa89044Smrg echo 689349dc963fSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 68947aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 68957aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 68967aa89044Smrg echo "*** shared version of the library, which I believe you do not have" 68977aa89044Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 68987aa89044Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 689949dc963fSmrg fi 690049dc963fSmrg fi 690149dc963fSmrg ;; 690249dc963fSmrg *) 690349dc963fSmrg newdeplibs="$newdeplibs $i" 690449dc963fSmrg ;; 690549dc963fSmrg esac 690649dc963fSmrg done 690749dc963fSmrg else 690849dc963fSmrg # Error occurred in the first compile. Let's try to salvage 690949dc963fSmrg # the situation: Compile a separate program for each library. 691049dc963fSmrg for i in $deplibs; do 691149dc963fSmrg case $i in 691249dc963fSmrg -l*) 691349dc963fSmrg func_stripname -l '' "$i" 691449dc963fSmrg name=$func_stripname_result 691549dc963fSmrg $opt_dry_run || $RM conftest 691649dc963fSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 691749dc963fSmrg ldd_output=`ldd conftest` 691849dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 691949dc963fSmrg case " $predeps $postdeps " in 692049dc963fSmrg *" $i "*) 692149dc963fSmrg newdeplibs="$newdeplibs $i" 692249dc963fSmrg i="" 692349dc963fSmrg ;; 692449dc963fSmrg esac 692549dc963fSmrg fi 692649dc963fSmrg if test -n "$i" ; then 692749dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 692849dc963fSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 692949dc963fSmrg set dummy $deplib_matches; shift 693049dc963fSmrg deplib_match=$1 693149dc963fSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 693249dc963fSmrg newdeplibs="$newdeplibs $i" 693349dc963fSmrg else 693449dc963fSmrg droppeddeps=yes 69357aa89044Smrg echo 693649dc963fSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 69377aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 69387aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 69397aa89044Smrg echo "*** shared version of the library, which you do not appear to have" 69407aa89044Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 69417aa89044Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 694249dc963fSmrg fi 694349dc963fSmrg fi 694449dc963fSmrg else 694549dc963fSmrg droppeddeps=yes 69467aa89044Smrg echo 694749dc963fSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 69487aa89044Smrg echo "*** make it link in! You will probably need to install it or some" 69497aa89044Smrg echo "*** library that it depends on before this library will be fully" 69507aa89044Smrg echo "*** functional. Installing it before continuing would be even better." 695149dc963fSmrg fi 695249dc963fSmrg ;; 695349dc963fSmrg *) 695449dc963fSmrg newdeplibs="$newdeplibs $i" 695549dc963fSmrg ;; 695649dc963fSmrg esac 695749dc963fSmrg done 695849dc963fSmrg fi 695949dc963fSmrg ;; 696049dc963fSmrg file_magic*) 696149dc963fSmrg set dummy $deplibs_check_method; shift 696249dc963fSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 696349dc963fSmrg for a_deplib in $deplibs; do 696449dc963fSmrg case $a_deplib in 696549dc963fSmrg -l*) 696649dc963fSmrg func_stripname -l '' "$a_deplib" 696749dc963fSmrg name=$func_stripname_result 696849dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 696949dc963fSmrg case " $predeps $postdeps " in 697049dc963fSmrg *" $a_deplib "*) 697149dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 697249dc963fSmrg a_deplib="" 697349dc963fSmrg ;; 697449dc963fSmrg esac 697549dc963fSmrg fi 697649dc963fSmrg if test -n "$a_deplib" ; then 697749dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 697849dc963fSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 697949dc963fSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 698049dc963fSmrg for potent_lib in $potential_libs; do 698149dc963fSmrg # Follow soft links. 698249dc963fSmrg if ls -lLd "$potent_lib" 2>/dev/null | 698349dc963fSmrg $GREP " -> " >/dev/null; then 698449dc963fSmrg continue 698549dc963fSmrg fi 698649dc963fSmrg # The statement above tries to avoid entering an 698749dc963fSmrg # endless loop below, in case of cyclic links. 698849dc963fSmrg # We might still enter an endless loop, since a link 698949dc963fSmrg # loop can be closed while we follow links, 699049dc963fSmrg # but so what? 699149dc963fSmrg potlib="$potent_lib" 699249dc963fSmrg while test -h "$potlib" 2>/dev/null; do 699349dc963fSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 699449dc963fSmrg case $potliblink in 699549dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 69967aa89044Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 699749dc963fSmrg esac 699849dc963fSmrg done 699949dc963fSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 700049dc963fSmrg $SED -e 10q | 700149dc963fSmrg $EGREP "$file_magic_regex" > /dev/null; then 700249dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 700349dc963fSmrg a_deplib="" 700449dc963fSmrg break 2 700549dc963fSmrg fi 700649dc963fSmrg done 700749dc963fSmrg done 700849dc963fSmrg fi 700949dc963fSmrg if test -n "$a_deplib" ; then 701049dc963fSmrg droppeddeps=yes 70117aa89044Smrg echo 701249dc963fSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 70137aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 70147aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 70157aa89044Smrg echo "*** shared version of the library, which you do not appear to have" 70167aa89044Smrg echo "*** because I did check the linker path looking for a file starting" 701749dc963fSmrg if test -z "$potlib" ; then 701849dc963fSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 701949dc963fSmrg else 702049dc963fSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 702149dc963fSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 702249dc963fSmrg fi 702349dc963fSmrg fi 702449dc963fSmrg ;; 702549dc963fSmrg *) 702649dc963fSmrg # Add a -L argument. 702749dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 702849dc963fSmrg ;; 702949dc963fSmrg esac 703049dc963fSmrg done # Gone through all deplibs. 703149dc963fSmrg ;; 703249dc963fSmrg match_pattern*) 703349dc963fSmrg set dummy $deplibs_check_method; shift 703449dc963fSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 703549dc963fSmrg for a_deplib in $deplibs; do 703649dc963fSmrg case $a_deplib in 703749dc963fSmrg -l*) 703849dc963fSmrg func_stripname -l '' "$a_deplib" 703949dc963fSmrg name=$func_stripname_result 704049dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 704149dc963fSmrg case " $predeps $postdeps " in 704249dc963fSmrg *" $a_deplib "*) 704349dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 704449dc963fSmrg a_deplib="" 704549dc963fSmrg ;; 704649dc963fSmrg esac 704749dc963fSmrg fi 704849dc963fSmrg if test -n "$a_deplib" ; then 704949dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 705049dc963fSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 705149dc963fSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 705249dc963fSmrg for potent_lib in $potential_libs; do 705349dc963fSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 70547aa89044Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 705549dc963fSmrg $EGREP "$match_pattern_regex" > /dev/null; then 705649dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 705749dc963fSmrg a_deplib="" 705849dc963fSmrg break 2 705949dc963fSmrg fi 706049dc963fSmrg done 706149dc963fSmrg done 706249dc963fSmrg fi 706349dc963fSmrg if test -n "$a_deplib" ; then 706449dc963fSmrg droppeddeps=yes 70657aa89044Smrg echo 706649dc963fSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 70677aa89044Smrg echo "*** I have the capability to make that library automatically link in when" 70687aa89044Smrg echo "*** you link to this library. But I can only do this if you have a" 70697aa89044Smrg echo "*** shared version of the library, which you do not appear to have" 70707aa89044Smrg echo "*** because I did check the linker path looking for a file starting" 707149dc963fSmrg if test -z "$potlib" ; then 707249dc963fSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 707349dc963fSmrg else 707449dc963fSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 707549dc963fSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 707649dc963fSmrg fi 707749dc963fSmrg fi 707849dc963fSmrg ;; 707949dc963fSmrg *) 708049dc963fSmrg # Add a -L argument. 708149dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 708249dc963fSmrg ;; 708349dc963fSmrg esac 708449dc963fSmrg done # Gone through all deplibs. 708549dc963fSmrg ;; 708649dc963fSmrg none | unknown | *) 708749dc963fSmrg newdeplibs="" 70887aa89044Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 708949dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 709049dc963fSmrg for i in $predeps $postdeps ; do 709149dc963fSmrg # can't use Xsed below, because $i might contain '/' 70927aa89044Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 709349dc963fSmrg done 709449dc963fSmrg fi 70957aa89044Smrg case $tmp_deplibs in 70967aa89044Smrg *[!\ \ ]*) 70977aa89044Smrg echo 709849dc963fSmrg if test "X$deplibs_check_method" = "Xnone"; then 70997aa89044Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 710049dc963fSmrg else 71017aa89044Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 710249dc963fSmrg fi 71037aa89044Smrg echo "*** All declared inter-library dependencies are being dropped." 710449dc963fSmrg droppeddeps=yes 71057aa89044Smrg ;; 71067aa89044Smrg esac 710749dc963fSmrg ;; 710849dc963fSmrg esac 710949dc963fSmrg versuffix=$versuffix_save 711049dc963fSmrg major=$major_save 711149dc963fSmrg release=$release_save 711249dc963fSmrg libname=$libname_save 711349dc963fSmrg name=$name_save 711449dc963fSmrg 711549dc963fSmrg case $host in 711649dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 711749dc963fSmrg # On Rhapsody replace the C library with the System framework 71187aa89044Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 711949dc963fSmrg ;; 712049dc963fSmrg esac 712149dc963fSmrg 712249dc963fSmrg if test "$droppeddeps" = yes; then 712349dc963fSmrg if test "$module" = yes; then 71247aa89044Smrg echo 71257aa89044Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 712649dc963fSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 71277aa89044Smrg echo "*** a static module, that should work as long as the dlopening" 71287aa89044Smrg echo "*** application is linked with the -dlopen flag." 712949dc963fSmrg if test -z "$global_symbol_pipe"; then 71307aa89044Smrg echo 71317aa89044Smrg echo "*** However, this would only work if libtool was able to extract symbol" 71327aa89044Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 71337aa89044Smrg echo "*** not find such a program. So, this module is probably useless." 71347aa89044Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 713549dc963fSmrg fi 713649dc963fSmrg if test "$build_old_libs" = no; then 713749dc963fSmrg oldlibs="$output_objdir/$libname.$libext" 713849dc963fSmrg build_libtool_libs=module 713949dc963fSmrg build_old_libs=yes 714049dc963fSmrg else 714149dc963fSmrg build_libtool_libs=no 714249dc963fSmrg fi 714349dc963fSmrg else 71447aa89044Smrg echo "*** The inter-library dependencies that have been dropped here will be" 71457aa89044Smrg echo "*** automatically added whenever a program is linked with this library" 71467aa89044Smrg echo "*** or is declared to -dlopen it." 714749dc963fSmrg 714849dc963fSmrg if test "$allow_undefined" = no; then 71497aa89044Smrg echo 71507aa89044Smrg echo "*** Since this library must not contain undefined symbols," 71517aa89044Smrg echo "*** because either the platform does not support them or" 71527aa89044Smrg echo "*** it was explicitly requested with -no-undefined," 71537aa89044Smrg echo "*** libtool will only create a static version of it." 715449dc963fSmrg if test "$build_old_libs" = no; then 715549dc963fSmrg oldlibs="$output_objdir/$libname.$libext" 715649dc963fSmrg build_libtool_libs=module 715749dc963fSmrg build_old_libs=yes 715849dc963fSmrg else 715949dc963fSmrg build_libtool_libs=no 716049dc963fSmrg fi 716149dc963fSmrg fi 716249dc963fSmrg fi 716349dc963fSmrg fi 716449dc963fSmrg # Done checking deplibs! 716549dc963fSmrg deplibs=$newdeplibs 716649dc963fSmrg fi 716749dc963fSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 716849dc963fSmrg case $host in 716949dc963fSmrg *-*-darwin*) 71707aa89044Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 71717aa89044Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 71727aa89044Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 717349dc963fSmrg ;; 717449dc963fSmrg esac 717549dc963fSmrg 717649dc963fSmrg # move library search paths that coincide with paths to not yet 717749dc963fSmrg # installed libraries to the beginning of the library search list 717849dc963fSmrg new_libs= 717949dc963fSmrg for path in $notinst_path; do 718049dc963fSmrg case " $new_libs " in 718149dc963fSmrg *" -L$path/$objdir "*) ;; 718249dc963fSmrg *) 718349dc963fSmrg case " $deplibs " in 718449dc963fSmrg *" -L$path/$objdir "*) 718549dc963fSmrg new_libs="$new_libs -L$path/$objdir" ;; 718649dc963fSmrg esac 718749dc963fSmrg ;; 718849dc963fSmrg esac 718949dc963fSmrg done 719049dc963fSmrg for deplib in $deplibs; do 719149dc963fSmrg case $deplib in 719249dc963fSmrg -L*) 719349dc963fSmrg case " $new_libs " in 719449dc963fSmrg *" $deplib "*) ;; 719549dc963fSmrg *) new_libs="$new_libs $deplib" ;; 719649dc963fSmrg esac 719749dc963fSmrg ;; 719849dc963fSmrg *) new_libs="$new_libs $deplib" ;; 719949dc963fSmrg esac 720049dc963fSmrg done 720149dc963fSmrg deplibs="$new_libs" 720249dc963fSmrg 720349dc963fSmrg # All the library-specific variables (install_libdir is set above). 720449dc963fSmrg library_names= 720549dc963fSmrg old_library= 720649dc963fSmrg dlname= 720749dc963fSmrg 720849dc963fSmrg # Test again, we may have decided not to build it any more 720949dc963fSmrg if test "$build_libtool_libs" = yes; then 721049dc963fSmrg if test "$hardcode_into_libs" = yes; then 721149dc963fSmrg # Hardcode the library paths 721249dc963fSmrg hardcode_libdirs= 721349dc963fSmrg dep_rpath= 721449dc963fSmrg rpath="$finalize_rpath" 721549dc963fSmrg test "$mode" != relink && rpath="$compile_rpath$rpath" 721649dc963fSmrg for libdir in $rpath; do 721749dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 721849dc963fSmrg if test -n "$hardcode_libdir_separator"; then 721949dc963fSmrg if test -z "$hardcode_libdirs"; then 722049dc963fSmrg hardcode_libdirs="$libdir" 722149dc963fSmrg else 722249dc963fSmrg # Just accumulate the unique libdirs. 722349dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 722449dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 722549dc963fSmrg ;; 722649dc963fSmrg *) 722749dc963fSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 722849dc963fSmrg ;; 722949dc963fSmrg esac 723049dc963fSmrg fi 723149dc963fSmrg else 723249dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 723349dc963fSmrg dep_rpath="$dep_rpath $flag" 723449dc963fSmrg fi 723549dc963fSmrg elif test -n "$runpath_var"; then 723649dc963fSmrg case "$perm_rpath " in 723749dc963fSmrg *" $libdir "*) ;; 723849dc963fSmrg *) perm_rpath="$perm_rpath $libdir" ;; 723949dc963fSmrg esac 724049dc963fSmrg fi 724149dc963fSmrg done 724249dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 724349dc963fSmrg if test -n "$hardcode_libdir_separator" && 724449dc963fSmrg test -n "$hardcode_libdirs"; then 724549dc963fSmrg libdir="$hardcode_libdirs" 724649dc963fSmrg if test -n "$hardcode_libdir_flag_spec_ld"; then 724749dc963fSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 724849dc963fSmrg else 724949dc963fSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 725049dc963fSmrg fi 725149dc963fSmrg fi 725249dc963fSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 725349dc963fSmrg # We should set the runpath_var. 725449dc963fSmrg rpath= 725549dc963fSmrg for dir in $perm_rpath; do 725649dc963fSmrg rpath="$rpath$dir:" 725749dc963fSmrg done 725849dc963fSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 725949dc963fSmrg fi 726049dc963fSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 726149dc963fSmrg fi 72624b0ead49Smrg 726349dc963fSmrg shlibpath="$finalize_shlibpath" 726449dc963fSmrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 726549dc963fSmrg if test -n "$shlibpath"; then 726649dc963fSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 726749dc963fSmrg fi 72684b0ead49Smrg 726949dc963fSmrg # Get the real and link names of the library. 727049dc963fSmrg eval shared_ext=\"$shrext_cmds\" 727149dc963fSmrg eval library_names=\"$library_names_spec\" 727249dc963fSmrg set dummy $library_names 727349dc963fSmrg shift 727449dc963fSmrg realname="$1" 727549dc963fSmrg shift 72764b0ead49Smrg 727749dc963fSmrg if test -n "$soname_spec"; then 727849dc963fSmrg eval soname=\"$soname_spec\" 727949dc963fSmrg else 728049dc963fSmrg soname="$realname" 728149dc963fSmrg fi 728249dc963fSmrg if test -z "$dlname"; then 728349dc963fSmrg dlname=$soname 728449dc963fSmrg fi 72854b0ead49Smrg 728649dc963fSmrg lib="$output_objdir/$realname" 728749dc963fSmrg linknames= 728849dc963fSmrg for link 728949dc963fSmrg do 729049dc963fSmrg linknames="$linknames $link" 729149dc963fSmrg done 72924b0ead49Smrg 729349dc963fSmrg # Use standard objects if they are pic 72947aa89044Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 729549dc963fSmrg test "X$libobjs" = "X " && libobjs= 72964b0ead49Smrg 729749dc963fSmrg delfiles= 729849dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 729949dc963fSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 730049dc963fSmrg export_symbols="$output_objdir/$libname.uexp" 730149dc963fSmrg delfiles="$delfiles $export_symbols" 730249dc963fSmrg fi 73034b0ead49Smrg 730449dc963fSmrg orig_export_symbols= 730549dc963fSmrg case $host_os in 730649dc963fSmrg cygwin* | mingw* | cegcc*) 730749dc963fSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 730849dc963fSmrg # exporting using user supplied symfile 730949dc963fSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 731049dc963fSmrg # and it's NOT already a .def file. Must figure out 731149dc963fSmrg # which of the given symbols are data symbols and tag 731249dc963fSmrg # them as such. So, trigger use of export_symbols_cmds. 731349dc963fSmrg # export_symbols gets reassigned inside the "prepare 731449dc963fSmrg # the list of exported symbols" if statement, so the 731549dc963fSmrg # include_expsyms logic still works. 731649dc963fSmrg orig_export_symbols="$export_symbols" 731749dc963fSmrg export_symbols= 731849dc963fSmrg always_export_symbols=yes 731949dc963fSmrg fi 732049dc963fSmrg fi 732149dc963fSmrg ;; 732249dc963fSmrg esac 73234b0ead49Smrg 732449dc963fSmrg # Prepare the list of exported symbols 732549dc963fSmrg if test -z "$export_symbols"; then 732649dc963fSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 732749dc963fSmrg func_verbose "generating symbol list for \`$libname.la'" 732849dc963fSmrg export_symbols="$output_objdir/$libname.exp" 732949dc963fSmrg $opt_dry_run || $RM $export_symbols 733049dc963fSmrg cmds=$export_symbols_cmds 733149dc963fSmrg save_ifs="$IFS"; IFS='~' 733249dc963fSmrg for cmd in $cmds; do 733349dc963fSmrg IFS="$save_ifs" 733449dc963fSmrg eval cmd=\"$cmd\" 733549dc963fSmrg func_len " $cmd" 733649dc963fSmrg len=$func_len_result 733749dc963fSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 733849dc963fSmrg func_show_eval "$cmd" 'exit $?' 733949dc963fSmrg skipped_export=false 734049dc963fSmrg else 734149dc963fSmrg # The command line is too long to execute in one step. 734249dc963fSmrg func_verbose "using reloadable object file for export list..." 734349dc963fSmrg skipped_export=: 734449dc963fSmrg # Break out early, otherwise skipped_export may be 734549dc963fSmrg # set to false by a later but shorter cmd. 734649dc963fSmrg break 734749dc963fSmrg fi 734849dc963fSmrg done 734949dc963fSmrg IFS="$save_ifs" 735049dc963fSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 735149dc963fSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 735249dc963fSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 735349dc963fSmrg fi 735449dc963fSmrg fi 73554b0ead49Smrg fi 73564b0ead49Smrg 735749dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 735849dc963fSmrg tmp_export_symbols="$export_symbols" 735949dc963fSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 73607aa89044Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 736149dc963fSmrg fi 73624b0ead49Smrg 736349dc963fSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 736449dc963fSmrg # The given exports_symbols file has to be filtered, so filter it. 736549dc963fSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 736649dc963fSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 736749dc963fSmrg # 's' commands which not all seds can handle. GNU sed should be fine 736849dc963fSmrg # though. Also, the filter scales superlinearly with the number of 736949dc963fSmrg # global variables. join(1) would be nice here, but unfortunately 737049dc963fSmrg # isn't a blessed tool. 737149dc963fSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 737249dc963fSmrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 737349dc963fSmrg export_symbols=$output_objdir/$libname.def 737449dc963fSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 737549dc963fSmrg fi 73764b0ead49Smrg 737749dc963fSmrg tmp_deplibs= 737849dc963fSmrg for test_deplib in $deplibs; do 737949dc963fSmrg case " $convenience " in 738049dc963fSmrg *" $test_deplib "*) ;; 738149dc963fSmrg *) 738249dc963fSmrg tmp_deplibs="$tmp_deplibs $test_deplib" 738349dc963fSmrg ;; 738449dc963fSmrg esac 738549dc963fSmrg done 738649dc963fSmrg deplibs="$tmp_deplibs" 73874b0ead49Smrg 738849dc963fSmrg if test -n "$convenience"; then 738949dc963fSmrg if test -n "$whole_archive_flag_spec" && 739049dc963fSmrg test "$compiler_needs_object" = yes && 739149dc963fSmrg test -z "$libobjs"; then 739249dc963fSmrg # extract the archives, so we have objects to list. 739349dc963fSmrg # TODO: could optimize this to just extract one archive. 739449dc963fSmrg whole_archive_flag_spec= 739549dc963fSmrg fi 739649dc963fSmrg if test -n "$whole_archive_flag_spec"; then 739749dc963fSmrg save_libobjs=$libobjs 739849dc963fSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 739949dc963fSmrg test "X$libobjs" = "X " && libobjs= 740049dc963fSmrg else 740149dc963fSmrg gentop="$output_objdir/${outputname}x" 740249dc963fSmrg generated="$generated $gentop" 74034b0ead49Smrg 740449dc963fSmrg func_extract_archives $gentop $convenience 740549dc963fSmrg libobjs="$libobjs $func_extract_archives_result" 740649dc963fSmrg test "X$libobjs" = "X " && libobjs= 740749dc963fSmrg fi 74084b0ead49Smrg fi 74094b0ead49Smrg 741049dc963fSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 741149dc963fSmrg eval flag=\"$thread_safe_flag_spec\" 741249dc963fSmrg linker_flags="$linker_flags $flag" 74134b0ead49Smrg fi 74144b0ead49Smrg 741549dc963fSmrg # Make a backup of the uninstalled library when relinking 741649dc963fSmrg if test "$mode" = relink; then 741749dc963fSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 741849dc963fSmrg fi 74194b0ead49Smrg 742049dc963fSmrg # Do each of the archive commands. 742149dc963fSmrg if test "$module" = yes && test -n "$module_cmds" ; then 742249dc963fSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 742349dc963fSmrg eval test_cmds=\"$module_expsym_cmds\" 742449dc963fSmrg cmds=$module_expsym_cmds 742549dc963fSmrg else 742649dc963fSmrg eval test_cmds=\"$module_cmds\" 742749dc963fSmrg cmds=$module_cmds 742849dc963fSmrg fi 74294b0ead49Smrg else 743049dc963fSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 743149dc963fSmrg eval test_cmds=\"$archive_expsym_cmds\" 743249dc963fSmrg cmds=$archive_expsym_cmds 743349dc963fSmrg else 743449dc963fSmrg eval test_cmds=\"$archive_cmds\" 743549dc963fSmrg cmds=$archive_cmds 743649dc963fSmrg fi 74374b0ead49Smrg fi 74384b0ead49Smrg 743949dc963fSmrg if test "X$skipped_export" != "X:" && 744049dc963fSmrg func_len " $test_cmds" && 744149dc963fSmrg len=$func_len_result && 744249dc963fSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 744349dc963fSmrg : 744449dc963fSmrg else 744549dc963fSmrg # The command line is too long to link in one step, link piecewise 744649dc963fSmrg # or, if using GNU ld and skipped_export is not :, use a linker 744749dc963fSmrg # script. 74484b0ead49Smrg 744949dc963fSmrg # Save the value of $output and $libobjs because we want to 745049dc963fSmrg # use them later. If we have whole_archive_flag_spec, we 745149dc963fSmrg # want to use save_libobjs as it was before 745249dc963fSmrg # whole_archive_flag_spec was expanded, because we can't 745349dc963fSmrg # assume the linker understands whole_archive_flag_spec. 745449dc963fSmrg # This may have to be revisited, in case too many 745549dc963fSmrg # convenience libraries get linked in and end up exceeding 745649dc963fSmrg # the spec. 745749dc963fSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 745849dc963fSmrg save_libobjs=$libobjs 745949dc963fSmrg fi 746049dc963fSmrg save_output=$output 74617aa89044Smrg func_basename "$output" 74627aa89044Smrg output_la=$func_basename_result 74634b0ead49Smrg 746449dc963fSmrg # Clear the reloadable object creation command queue and 746549dc963fSmrg # initialize k to one. 746649dc963fSmrg test_cmds= 746749dc963fSmrg concat_cmds= 746849dc963fSmrg objlist= 746949dc963fSmrg last_robj= 747049dc963fSmrg k=1 747149dc963fSmrg 747249dc963fSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 747349dc963fSmrg output=${output_objdir}/${output_la}.lnkscript 747449dc963fSmrg func_verbose "creating GNU ld script: $output" 74757aa89044Smrg echo 'INPUT (' > $output 747649dc963fSmrg for obj in $save_libobjs 74774b0ead49Smrg do 747849dc963fSmrg $ECHO "$obj" >> $output 747949dc963fSmrg done 74807aa89044Smrg echo ')' >> $output 748149dc963fSmrg delfiles="$delfiles $output" 748249dc963fSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 748349dc963fSmrg output=${output_objdir}/${output_la}.lnk 748449dc963fSmrg func_verbose "creating linker input file list: $output" 748549dc963fSmrg : > $output 748649dc963fSmrg set x $save_libobjs 748749dc963fSmrg shift 748849dc963fSmrg firstobj= 748949dc963fSmrg if test "$compiler_needs_object" = yes; then 749049dc963fSmrg firstobj="$1 " 749149dc963fSmrg shift 749249dc963fSmrg fi 749349dc963fSmrg for obj 749449dc963fSmrg do 749549dc963fSmrg $ECHO "$obj" >> $output 749649dc963fSmrg done 749749dc963fSmrg delfiles="$delfiles $output" 749849dc963fSmrg output=$firstobj\"$file_list_spec$output\" 749949dc963fSmrg else 750049dc963fSmrg if test -n "$save_libobjs"; then 750149dc963fSmrg func_verbose "creating reloadable object files..." 750249dc963fSmrg output=$output_objdir/$output_la-${k}.$objext 750349dc963fSmrg eval test_cmds=\"$reload_cmds\" 750449dc963fSmrg func_len " $test_cmds" 750549dc963fSmrg len0=$func_len_result 750649dc963fSmrg len=$len0 750749dc963fSmrg 750849dc963fSmrg # Loop over the list of objects to be linked. 750949dc963fSmrg for obj in $save_libobjs 751049dc963fSmrg do 751149dc963fSmrg func_len " $obj" 751249dc963fSmrg func_arith $len + $func_len_result 751349dc963fSmrg len=$func_arith_result 751449dc963fSmrg if test "X$objlist" = X || 751549dc963fSmrg test "$len" -lt "$max_cmd_len"; then 751649dc963fSmrg func_append objlist " $obj" 751749dc963fSmrg else 751849dc963fSmrg # The command $test_cmds is almost too long, add a 751949dc963fSmrg # command to the queue. 752049dc963fSmrg if test "$k" -eq 1 ; then 752149dc963fSmrg # The first file doesn't have a previous command to add. 75227aa89044Smrg reload_objs=$objlist 75237aa89044Smrg eval concat_cmds=\"$reload_cmds\" 752449dc963fSmrg else 752549dc963fSmrg # All subsequent reloadable object files will link in 752649dc963fSmrg # the last one created. 75277aa89044Smrg reload_objs="$objlist $last_robj" 75287aa89044Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 752949dc963fSmrg fi 753049dc963fSmrg last_robj=$output_objdir/$output_la-${k}.$objext 753149dc963fSmrg func_arith $k + 1 753249dc963fSmrg k=$func_arith_result 753349dc963fSmrg output=$output_objdir/$output_la-${k}.$objext 75347aa89044Smrg objlist=" $obj" 753549dc963fSmrg func_len " $last_robj" 753649dc963fSmrg func_arith $len0 + $func_len_result 753749dc963fSmrg len=$func_arith_result 753849dc963fSmrg fi 753949dc963fSmrg done 754049dc963fSmrg # Handle the remaining objects by creating one last 754149dc963fSmrg # reloadable object file. All subsequent reloadable object 754249dc963fSmrg # files will link in the last one created. 754349dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 75447aa89044Smrg reload_objs="$objlist $last_robj" 75457aa89044Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 754649dc963fSmrg if test -n "$last_robj"; then 754749dc963fSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 754849dc963fSmrg fi 754949dc963fSmrg delfiles="$delfiles $output" 75504b0ead49Smrg 755149dc963fSmrg else 755249dc963fSmrg output= 755349dc963fSmrg fi 75544b0ead49Smrg 755549dc963fSmrg if ${skipped_export-false}; then 755649dc963fSmrg func_verbose "generating symbol list for \`$libname.la'" 755749dc963fSmrg export_symbols="$output_objdir/$libname.exp" 755849dc963fSmrg $opt_dry_run || $RM $export_symbols 755949dc963fSmrg libobjs=$output 756049dc963fSmrg # Append the command to create the export file. 756149dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 756249dc963fSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 756349dc963fSmrg if test -n "$last_robj"; then 756449dc963fSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 756549dc963fSmrg fi 75664b0ead49Smrg fi 75674b0ead49Smrg 756849dc963fSmrg test -n "$save_libobjs" && 756949dc963fSmrg func_verbose "creating a temporary reloadable object file: $output" 75704b0ead49Smrg 757149dc963fSmrg # Loop through the commands generated above and execute them. 757249dc963fSmrg save_ifs="$IFS"; IFS='~' 757349dc963fSmrg for cmd in $concat_cmds; do 757449dc963fSmrg IFS="$save_ifs" 757549dc963fSmrg $opt_silent || { 757649dc963fSmrg func_quote_for_expand "$cmd" 757749dc963fSmrg eval "func_echo $func_quote_for_expand_result" 757849dc963fSmrg } 757949dc963fSmrg $opt_dry_run || eval "$cmd" || { 758049dc963fSmrg lt_exit=$? 758149dc963fSmrg 758249dc963fSmrg # Restore the uninstalled library and exit 758349dc963fSmrg if test "$mode" = relink; then 758449dc963fSmrg ( cd "$output_objdir" && \ 758549dc963fSmrg $RM "${realname}T" && \ 758649dc963fSmrg $MV "${realname}U" "$realname" ) 758749dc963fSmrg fi 75884b0ead49Smrg 758949dc963fSmrg exit $lt_exit 759049dc963fSmrg } 759149dc963fSmrg done 759249dc963fSmrg IFS="$save_ifs" 75934b0ead49Smrg 759449dc963fSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 759549dc963fSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 759649dc963fSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 75974b0ead49Smrg fi 75984b0ead49Smrg fi 75994b0ead49Smrg 760049dc963fSmrg if ${skipped_export-false}; then 760149dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 760249dc963fSmrg tmp_export_symbols="$export_symbols" 760349dc963fSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 76047aa89044Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 760549dc963fSmrg fi 76064b0ead49Smrg 760749dc963fSmrg if test -n "$orig_export_symbols"; then 760849dc963fSmrg # The given exports_symbols file has to be filtered, so filter it. 760949dc963fSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 761049dc963fSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 761149dc963fSmrg # 's' commands which not all seds can handle. GNU sed should be fine 761249dc963fSmrg # though. Also, the filter scales superlinearly with the number of 761349dc963fSmrg # global variables. join(1) would be nice here, but unfortunately 761449dc963fSmrg # isn't a blessed tool. 761549dc963fSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 761649dc963fSmrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 761749dc963fSmrg export_symbols=$output_objdir/$libname.def 761849dc963fSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 761949dc963fSmrg fi 762049dc963fSmrg fi 76214b0ead49Smrg 762249dc963fSmrg libobjs=$output 762349dc963fSmrg # Restore the value of output. 762449dc963fSmrg output=$save_output 76254b0ead49Smrg 762649dc963fSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 762749dc963fSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 762849dc963fSmrg test "X$libobjs" = "X " && libobjs= 762949dc963fSmrg fi 763049dc963fSmrg # Expand the library linking commands again to reset the 763149dc963fSmrg # value of $libobjs for piecewise linking. 76324b0ead49Smrg 763349dc963fSmrg # Do each of the archive commands. 763449dc963fSmrg if test "$module" = yes && test -n "$module_cmds" ; then 763549dc963fSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 763649dc963fSmrg cmds=$module_expsym_cmds 763749dc963fSmrg else 763849dc963fSmrg cmds=$module_cmds 76394b0ead49Smrg fi 76404b0ead49Smrg else 764149dc963fSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 764249dc963fSmrg cmds=$archive_expsym_cmds 764349dc963fSmrg else 764449dc963fSmrg cmds=$archive_cmds 764549dc963fSmrg fi 76464b0ead49Smrg fi 764749dc963fSmrg fi 76484b0ead49Smrg 764949dc963fSmrg if test -n "$delfiles"; then 765049dc963fSmrg # Append the command to remove temporary files to $cmds. 765149dc963fSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 765249dc963fSmrg fi 76534b0ead49Smrg 765449dc963fSmrg # Add any objects from preloaded convenience libraries 765549dc963fSmrg if test -n "$dlprefiles"; then 765649dc963fSmrg gentop="$output_objdir/${outputname}x" 765749dc963fSmrg generated="$generated $gentop" 76584b0ead49Smrg 765949dc963fSmrg func_extract_archives $gentop $dlprefiles 766049dc963fSmrg libobjs="$libobjs $func_extract_archives_result" 766149dc963fSmrg test "X$libobjs" = "X " && libobjs= 766249dc963fSmrg fi 76634b0ead49Smrg 766449dc963fSmrg save_ifs="$IFS"; IFS='~' 766549dc963fSmrg for cmd in $cmds; do 766649dc963fSmrg IFS="$save_ifs" 766749dc963fSmrg eval cmd=\"$cmd\" 766849dc963fSmrg $opt_silent || { 766949dc963fSmrg func_quote_for_expand "$cmd" 767049dc963fSmrg eval "func_echo $func_quote_for_expand_result" 767149dc963fSmrg } 767249dc963fSmrg $opt_dry_run || eval "$cmd" || { 767349dc963fSmrg lt_exit=$? 76744b0ead49Smrg 767549dc963fSmrg # Restore the uninstalled library and exit 767649dc963fSmrg if test "$mode" = relink; then 767749dc963fSmrg ( cd "$output_objdir" && \ 767849dc963fSmrg $RM "${realname}T" && \ 767949dc963fSmrg $MV "${realname}U" "$realname" ) 768049dc963fSmrg fi 76814b0ead49Smrg 768249dc963fSmrg exit $lt_exit 768349dc963fSmrg } 768449dc963fSmrg done 768549dc963fSmrg IFS="$save_ifs" 76864b0ead49Smrg 768749dc963fSmrg # Restore the uninstalled library and exit 768849dc963fSmrg if test "$mode" = relink; then 768949dc963fSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 76904b0ead49Smrg 769149dc963fSmrg if test -n "$convenience"; then 769249dc963fSmrg if test -z "$whole_archive_flag_spec"; then 769349dc963fSmrg func_show_eval '${RM}r "$gentop"' 769449dc963fSmrg fi 769549dc963fSmrg fi 76964b0ead49Smrg 769749dc963fSmrg exit $EXIT_SUCCESS 769849dc963fSmrg fi 769949dc963fSmrg 770049dc963fSmrg # Create links to the real library. 770149dc963fSmrg for linkname in $linknames; do 770249dc963fSmrg if test "$realname" != "$linkname"; then 770349dc963fSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 77044b0ead49Smrg fi 77054b0ead49Smrg done 77064b0ead49Smrg 770749dc963fSmrg # If -module or -export-dynamic was specified, set the dlname. 770849dc963fSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 770949dc963fSmrg # On all known operating systems, these are identical. 771049dc963fSmrg dlname="$soname" 771149dc963fSmrg fi 771249dc963fSmrg fi 77134b0ead49Smrg ;; 77144b0ead49Smrg 771549dc963fSmrg obj) 771649dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 771749dc963fSmrg func_warning "\`-dlopen' is ignored for objects" 771849dc963fSmrg fi 77194b0ead49Smrg 772049dc963fSmrg case " $deplibs" in 772149dc963fSmrg *\ -l* | *\ -L*) 772249dc963fSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 77234b0ead49Smrg esac 77244b0ead49Smrg 772549dc963fSmrg test -n "$rpath" && \ 772649dc963fSmrg func_warning "\`-rpath' is ignored for objects" 772749dc963fSmrg 772849dc963fSmrg test -n "$xrpath" && \ 772949dc963fSmrg func_warning "\`-R' is ignored for objects" 77304b0ead49Smrg 773149dc963fSmrg test -n "$vinfo" && \ 773249dc963fSmrg func_warning "\`-version-info' is ignored for objects" 77334b0ead49Smrg 773449dc963fSmrg test -n "$release" && \ 773549dc963fSmrg func_warning "\`-release' is ignored for objects" 773649dc963fSmrg 773749dc963fSmrg case $output in 773849dc963fSmrg *.lo) 773949dc963fSmrg test -n "$objs$old_deplibs" && \ 774049dc963fSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 774149dc963fSmrg 774249dc963fSmrg libobj=$output 774349dc963fSmrg func_lo2o "$libobj" 774449dc963fSmrg obj=$func_lo2o_result 77454b0ead49Smrg ;; 77464b0ead49Smrg *) 774749dc963fSmrg libobj= 774849dc963fSmrg obj="$output" 77494b0ead49Smrg ;; 77504b0ead49Smrg esac 77514b0ead49Smrg 775249dc963fSmrg # Delete the old objects. 775349dc963fSmrg $opt_dry_run || $RM $obj $libobj 77544b0ead49Smrg 775549dc963fSmrg # Objects from convenience libraries. This assumes 775649dc963fSmrg # single-version convenience libraries. Whenever we create 775749dc963fSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 775849dc963fSmrg # the extraction. 775949dc963fSmrg reload_conv_objs= 776049dc963fSmrg gentop= 776149dc963fSmrg # reload_cmds runs $LD directly, so let us get rid of 776249dc963fSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 776349dc963fSmrg # turning comma into space.. 776449dc963fSmrg wl= 77654b0ead49Smrg 776649dc963fSmrg if test -n "$convenience"; then 776749dc963fSmrg if test -n "$whole_archive_flag_spec"; then 776849dc963fSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 77697aa89044Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 777049dc963fSmrg else 777149dc963fSmrg gentop="$output_objdir/${obj}x" 777249dc963fSmrg generated="$generated $gentop" 77734b0ead49Smrg 777449dc963fSmrg func_extract_archives $gentop $convenience 777549dc963fSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 777649dc963fSmrg fi 77774b0ead49Smrg fi 77784b0ead49Smrg 777949dc963fSmrg # Create the old-style object. 77807aa89044Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 77814b0ead49Smrg 778249dc963fSmrg output="$obj" 778349dc963fSmrg func_execute_cmds "$reload_cmds" 'exit $?' 77844b0ead49Smrg 778549dc963fSmrg # Exit if we aren't doing a library object file. 778649dc963fSmrg if test -z "$libobj"; then 778749dc963fSmrg if test -n "$gentop"; then 778849dc963fSmrg func_show_eval '${RM}r "$gentop"' 778949dc963fSmrg fi 779049dc963fSmrg 779149dc963fSmrg exit $EXIT_SUCCESS 77924b0ead49Smrg fi 779349dc963fSmrg 779449dc963fSmrg if test "$build_libtool_libs" != yes; then 779549dc963fSmrg if test -n "$gentop"; then 779649dc963fSmrg func_show_eval '${RM}r "$gentop"' 779749dc963fSmrg fi 779849dc963fSmrg 779949dc963fSmrg # Create an invalid libtool object if no PIC, so that we don't 780049dc963fSmrg # accidentally link it into a program. 780149dc963fSmrg # $show "echo timestamp > $libobj" 780249dc963fSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 780349dc963fSmrg exit $EXIT_SUCCESS 780449dc963fSmrg fi 780549dc963fSmrg 780649dc963fSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 780749dc963fSmrg # Only do commands if we really have different PIC objects. 780849dc963fSmrg reload_objs="$libobjs $reload_conv_objs" 780949dc963fSmrg output="$libobj" 781049dc963fSmrg func_execute_cmds "$reload_cmds" 'exit $?' 781149dc963fSmrg fi 781249dc963fSmrg 781349dc963fSmrg if test -n "$gentop"; then 781449dc963fSmrg func_show_eval '${RM}r "$gentop"' 781549dc963fSmrg fi 781649dc963fSmrg 781749dc963fSmrg exit $EXIT_SUCCESS 78184b0ead49Smrg ;; 78194b0ead49Smrg 782049dc963fSmrg prog) 782149dc963fSmrg case $host in 782249dc963fSmrg *cygwin*) func_stripname '' '.exe' "$output" 782349dc963fSmrg output=$func_stripname_result.exe;; 782449dc963fSmrg esac 782549dc963fSmrg test -n "$vinfo" && \ 782649dc963fSmrg func_warning "\`-version-info' is ignored for programs" 78274b0ead49Smrg 782849dc963fSmrg test -n "$release" && \ 782949dc963fSmrg func_warning "\`-release' is ignored for programs" 78304b0ead49Smrg 783149dc963fSmrg test "$preload" = yes \ 783249dc963fSmrg && test "$dlopen_support" = unknown \ 783349dc963fSmrg && test "$dlopen_self" = unknown \ 783449dc963fSmrg && test "$dlopen_self_static" = unknown && \ 783549dc963fSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 783649dc963fSmrg 783749dc963fSmrg case $host in 783849dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 783949dc963fSmrg # On Rhapsody replace the C library is the System framework 78407aa89044Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 78417aa89044Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 78424b0ead49Smrg ;; 784349dc963fSmrg esac 78444b0ead49Smrg 784549dc963fSmrg case $host in 784649dc963fSmrg *-*-darwin*) 784749dc963fSmrg # Don't allow lazy linking, it breaks C++ global constructors 784849dc963fSmrg # But is supposedly fixed on 10.4 or later (yay!). 784949dc963fSmrg if test "$tagname" = CXX ; then 785049dc963fSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 785149dc963fSmrg 10.[0123]) 785249dc963fSmrg compile_command="$compile_command ${wl}-bind_at_load" 785349dc963fSmrg finalize_command="$finalize_command ${wl}-bind_at_load" 785449dc963fSmrg ;; 785549dc963fSmrg esac 78564b0ead49Smrg fi 785749dc963fSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 78587aa89044Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 78597aa89044Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 786049dc963fSmrg ;; 786149dc963fSmrg esac 78624b0ead49Smrg 78634b0ead49Smrg 786449dc963fSmrg # move library search paths that coincide with paths to not yet 786549dc963fSmrg # installed libraries to the beginning of the library search list 786649dc963fSmrg new_libs= 786749dc963fSmrg for path in $notinst_path; do 786849dc963fSmrg case " $new_libs " in 786949dc963fSmrg *" -L$path/$objdir "*) ;; 787049dc963fSmrg *) 787149dc963fSmrg case " $compile_deplibs " in 787249dc963fSmrg *" -L$path/$objdir "*) 787349dc963fSmrg new_libs="$new_libs -L$path/$objdir" ;; 78744b0ead49Smrg esac 787549dc963fSmrg ;; 787649dc963fSmrg esac 787749dc963fSmrg done 787849dc963fSmrg for deplib in $compile_deplibs; do 787949dc963fSmrg case $deplib in 788049dc963fSmrg -L*) 788149dc963fSmrg case " $new_libs " in 788249dc963fSmrg *" $deplib "*) ;; 788349dc963fSmrg *) new_libs="$new_libs $deplib" ;; 78844b0ead49Smrg esac 788549dc963fSmrg ;; 788649dc963fSmrg *) new_libs="$new_libs $deplib" ;; 788749dc963fSmrg esac 788849dc963fSmrg done 788949dc963fSmrg compile_deplibs="$new_libs" 78904b0ead49Smrg 78914b0ead49Smrg 789249dc963fSmrg compile_command="$compile_command $compile_deplibs" 789349dc963fSmrg finalize_command="$finalize_command $finalize_deplibs" 78944b0ead49Smrg 789549dc963fSmrg if test -n "$rpath$xrpath"; then 789649dc963fSmrg # If the user specified any rpath flags, then add them. 789749dc963fSmrg for libdir in $rpath $xrpath; do 789849dc963fSmrg # This is the magic to use -rpath. 789949dc963fSmrg case "$finalize_rpath " in 790049dc963fSmrg *" $libdir "*) ;; 790149dc963fSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 790249dc963fSmrg esac 790349dc963fSmrg done 790449dc963fSmrg fi 79054b0ead49Smrg 790649dc963fSmrg # Now hardcode the library paths 790749dc963fSmrg rpath= 790849dc963fSmrg hardcode_libdirs= 790949dc963fSmrg for libdir in $compile_rpath $finalize_rpath; do 791049dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 791149dc963fSmrg if test -n "$hardcode_libdir_separator"; then 791249dc963fSmrg if test -z "$hardcode_libdirs"; then 791349dc963fSmrg hardcode_libdirs="$libdir" 791449dc963fSmrg else 791549dc963fSmrg # Just accumulate the unique libdirs. 791649dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 791749dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 791849dc963fSmrg ;; 791949dc963fSmrg *) 792049dc963fSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 792149dc963fSmrg ;; 792249dc963fSmrg esac 792349dc963fSmrg fi 79244b0ead49Smrg else 792549dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 792649dc963fSmrg rpath="$rpath $flag" 79274b0ead49Smrg fi 792849dc963fSmrg elif test -n "$runpath_var"; then 792949dc963fSmrg case "$perm_rpath " in 793049dc963fSmrg *" $libdir "*) ;; 793149dc963fSmrg *) perm_rpath="$perm_rpath $libdir" ;; 793249dc963fSmrg esac 793349dc963fSmrg fi 793449dc963fSmrg case $host in 793549dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 793649dc963fSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 793749dc963fSmrg case :$dllsearchpath: in 793849dc963fSmrg *":$libdir:"*) ;; 793949dc963fSmrg ::) dllsearchpath=$libdir;; 794049dc963fSmrg *) dllsearchpath="$dllsearchpath:$libdir";; 794149dc963fSmrg esac 794249dc963fSmrg case :$dllsearchpath: in 794349dc963fSmrg *":$testbindir:"*) ;; 794449dc963fSmrg ::) dllsearchpath=$testbindir;; 794549dc963fSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 794649dc963fSmrg esac 794749dc963fSmrg ;; 794849dc963fSmrg esac 794949dc963fSmrg done 795049dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 795149dc963fSmrg if test -n "$hardcode_libdir_separator" && 795249dc963fSmrg test -n "$hardcode_libdirs"; then 795349dc963fSmrg libdir="$hardcode_libdirs" 795449dc963fSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 795549dc963fSmrg fi 795649dc963fSmrg compile_rpath="$rpath" 79574b0ead49Smrg 795849dc963fSmrg rpath= 795949dc963fSmrg hardcode_libdirs= 796049dc963fSmrg for libdir in $finalize_rpath; do 796149dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 796249dc963fSmrg if test -n "$hardcode_libdir_separator"; then 796349dc963fSmrg if test -z "$hardcode_libdirs"; then 796449dc963fSmrg hardcode_libdirs="$libdir" 796549dc963fSmrg else 796649dc963fSmrg # Just accumulate the unique libdirs. 796749dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 796849dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 796949dc963fSmrg ;; 797049dc963fSmrg *) 797149dc963fSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 797249dc963fSmrg ;; 797349dc963fSmrg esac 797449dc963fSmrg fi 79754b0ead49Smrg else 797649dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 797749dc963fSmrg rpath="$rpath $flag" 79784b0ead49Smrg fi 797949dc963fSmrg elif test -n "$runpath_var"; then 798049dc963fSmrg case "$finalize_perm_rpath " in 798149dc963fSmrg *" $libdir "*) ;; 798249dc963fSmrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 798349dc963fSmrg esac 79844b0ead49Smrg fi 798549dc963fSmrg done 798649dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 798749dc963fSmrg if test -n "$hardcode_libdir_separator" && 798849dc963fSmrg test -n "$hardcode_libdirs"; then 798949dc963fSmrg libdir="$hardcode_libdirs" 799049dc963fSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 799149dc963fSmrg fi 799249dc963fSmrg finalize_rpath="$rpath" 79934b0ead49Smrg 799449dc963fSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 799549dc963fSmrg # Transform all the library objects into standard objects. 79967aa89044Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 79977aa89044Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 799849dc963fSmrg fi 79994b0ead49Smrg 800049dc963fSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 80014b0ead49Smrg 800249dc963fSmrg # template prelinking step 800349dc963fSmrg if test -n "$prelink_cmds"; then 800449dc963fSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 800549dc963fSmrg fi 80064b0ead49Smrg 800749dc963fSmrg wrappers_required=yes 800849dc963fSmrg case $host in 80097aa89044Smrg *cegcc* | *mingw32ce*) 80107aa89044Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 80117aa89044Smrg wrappers_required=no 80127aa89044Smrg ;; 801349dc963fSmrg *cygwin* | *mingw* ) 801449dc963fSmrg if test "$build_libtool_libs" != yes; then 801549dc963fSmrg wrappers_required=no 801649dc963fSmrg fi 801749dc963fSmrg ;; 801849dc963fSmrg *) 801949dc963fSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 802049dc963fSmrg wrappers_required=no 802149dc963fSmrg fi 802249dc963fSmrg ;; 802349dc963fSmrg esac 802449dc963fSmrg if test "$wrappers_required" = no; then 802549dc963fSmrg # Replace the output file specification. 80267aa89044Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 802749dc963fSmrg link_command="$compile_command$compile_rpath" 80284b0ead49Smrg 802949dc963fSmrg # We have no uninstalled library dependencies, so finalize right now. 803049dc963fSmrg exit_status=0 803149dc963fSmrg func_show_eval "$link_command" 'exit_status=$?' 80324b0ead49Smrg 803349dc963fSmrg # Delete the generated files. 803449dc963fSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 803549dc963fSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 80364b0ead49Smrg fi 80374b0ead49Smrg 803849dc963fSmrg exit $exit_status 803949dc963fSmrg fi 80404b0ead49Smrg 804149dc963fSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 804249dc963fSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 804349dc963fSmrg fi 804449dc963fSmrg if test -n "$finalize_shlibpath"; then 804549dc963fSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 804649dc963fSmrg fi 80474b0ead49Smrg 804849dc963fSmrg compile_var= 804949dc963fSmrg finalize_var= 805049dc963fSmrg if test -n "$runpath_var"; then 805149dc963fSmrg if test -n "$perm_rpath"; then 805249dc963fSmrg # We should set the runpath_var. 805349dc963fSmrg rpath= 805449dc963fSmrg for dir in $perm_rpath; do 805549dc963fSmrg rpath="$rpath$dir:" 805649dc963fSmrg done 805749dc963fSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 80584b0ead49Smrg fi 805949dc963fSmrg if test -n "$finalize_perm_rpath"; then 806049dc963fSmrg # We should set the runpath_var. 806149dc963fSmrg rpath= 806249dc963fSmrg for dir in $finalize_perm_rpath; do 806349dc963fSmrg rpath="$rpath$dir:" 806449dc963fSmrg done 806549dc963fSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 80664b0ead49Smrg fi 806749dc963fSmrg fi 80684b0ead49Smrg 806949dc963fSmrg if test "$no_install" = yes; then 807049dc963fSmrg # We don't need to create a wrapper script. 807149dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 807249dc963fSmrg # Replace the output file specification. 80737aa89044Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 807449dc963fSmrg # Delete the old output file. 807549dc963fSmrg $opt_dry_run || $RM $output 807649dc963fSmrg # Link the executable and exit 807749dc963fSmrg func_show_eval "$link_command" 'exit $?' 80784b0ead49Smrg exit $EXIT_SUCCESS 807949dc963fSmrg fi 80804b0ead49Smrg 808149dc963fSmrg if test "$hardcode_action" = relink; then 808249dc963fSmrg # Fast installation is not supported 808349dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 808449dc963fSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 808549dc963fSmrg 808649dc963fSmrg func_warning "this platform does not like uninstalled shared libraries" 808749dc963fSmrg func_warning "\`$output' will be relinked during installation" 808849dc963fSmrg else 808949dc963fSmrg if test "$fast_install" != no; then 809049dc963fSmrg link_command="$finalize_var$compile_command$finalize_rpath" 809149dc963fSmrg if test "$fast_install" = yes; then 80927aa89044Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 809349dc963fSmrg else 809449dc963fSmrg # fast_install is set to needless 809549dc963fSmrg relink_command= 809649dc963fSmrg fi 80974b0ead49Smrg else 809849dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 809949dc963fSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 81004b0ead49Smrg fi 810149dc963fSmrg fi 81024b0ead49Smrg 810349dc963fSmrg # Replace the output file specification. 81047aa89044Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 81054b0ead49Smrg 810649dc963fSmrg # Delete the old output files. 810749dc963fSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 81084b0ead49Smrg 810949dc963fSmrg func_show_eval "$link_command" 'exit $?' 81104b0ead49Smrg 811149dc963fSmrg # Now create the wrapper script. 811249dc963fSmrg func_verbose "creating $output" 81134b0ead49Smrg 811449dc963fSmrg # Quote the relink command for shipping. 811549dc963fSmrg if test -n "$relink_command"; then 811649dc963fSmrg # Preserve any variables that may affect compiler behavior 811749dc963fSmrg for var in $variables_saved_for_relink; do 811849dc963fSmrg if eval test -z \"\${$var+set}\"; then 811949dc963fSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 812049dc963fSmrg elif eval var_value=\$$var; test -z "$var_value"; then 812149dc963fSmrg relink_command="$var=; export $var; $relink_command" 81224b0ead49Smrg else 812349dc963fSmrg func_quote_for_eval "$var_value" 812449dc963fSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 81254b0ead49Smrg fi 812649dc963fSmrg done 812749dc963fSmrg relink_command="(cd `pwd`; $relink_command)" 81287aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 812949dc963fSmrg fi 813049dc963fSmrg 813149dc963fSmrg # Only actually do things if not in dry run mode. 813249dc963fSmrg $opt_dry_run || { 813349dc963fSmrg # win32 will think the script is a binary if it has 813449dc963fSmrg # a .exe suffix, so we strip it off here. 813549dc963fSmrg case $output in 813649dc963fSmrg *.exe) func_stripname '' '.exe' "$output" 813749dc963fSmrg output=$func_stripname_result ;; 813849dc963fSmrg esac 813949dc963fSmrg # test for cygwin because mv fails w/o .exe extensions 814049dc963fSmrg case $host in 814149dc963fSmrg *cygwin*) 814249dc963fSmrg exeext=.exe 814349dc963fSmrg func_stripname '' '.exe' "$outputname" 814449dc963fSmrg outputname=$func_stripname_result ;; 814549dc963fSmrg *) exeext= ;; 81464b0ead49Smrg esac 814749dc963fSmrg case $host in 814849dc963fSmrg *cygwin* | *mingw* ) 814949dc963fSmrg func_dirname_and_basename "$output" "" "." 815049dc963fSmrg output_name=$func_basename_result 815149dc963fSmrg output_path=$func_dirname_result 815249dc963fSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 815349dc963fSmrg cwrapper="$output_path/$output_name.exe" 815449dc963fSmrg $RM $cwrappersource $cwrapper 815549dc963fSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 815649dc963fSmrg 815749dc963fSmrg func_emit_cwrapperexe_src > $cwrappersource 815849dc963fSmrg 815949dc963fSmrg # The wrapper executable is built using the $host compiler, 816049dc963fSmrg # because it contains $host paths and files. If cross- 816149dc963fSmrg # compiling, it, like the target executable, must be 816249dc963fSmrg # executed on the $host or under an emulation environment. 816349dc963fSmrg $opt_dry_run || { 816449dc963fSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 816549dc963fSmrg $STRIP $cwrapper 816649dc963fSmrg } 81674b0ead49Smrg 816849dc963fSmrg # Now, create the wrapper script for func_source use: 816949dc963fSmrg func_ltwrapper_scriptname $cwrapper 817049dc963fSmrg $RM $func_ltwrapper_scriptname_result 817149dc963fSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 817249dc963fSmrg $opt_dry_run || { 817349dc963fSmrg # note: this script will not be executed, so do not chmod. 817449dc963fSmrg if test "x$build" = "x$host" ; then 817549dc963fSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 817649dc963fSmrg else 817749dc963fSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 817849dc963fSmrg fi 817949dc963fSmrg } 818049dc963fSmrg ;; 818149dc963fSmrg * ) 818249dc963fSmrg $RM $output 818349dc963fSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 81844b0ead49Smrg 818549dc963fSmrg func_emit_wrapper no > $output 818649dc963fSmrg chmod +x $output 818749dc963fSmrg ;; 818849dc963fSmrg esac 818949dc963fSmrg } 819049dc963fSmrg exit $EXIT_SUCCESS 819149dc963fSmrg ;; 819249dc963fSmrg esac 81934b0ead49Smrg 819449dc963fSmrg # See if we need to build an old-fashioned archive. 819549dc963fSmrg for oldlib in $oldlibs; do 81964b0ead49Smrg 819749dc963fSmrg if test "$build_libtool_libs" = convenience; then 819849dc963fSmrg oldobjs="$libobjs_save $symfileobj" 819949dc963fSmrg addlibs="$convenience" 820049dc963fSmrg build_libtool_libs=no 820149dc963fSmrg else 820249dc963fSmrg if test "$build_libtool_libs" = module; then 820349dc963fSmrg oldobjs="$libobjs_save" 820449dc963fSmrg build_libtool_libs=no 820549dc963fSmrg else 820649dc963fSmrg oldobjs="$old_deplibs $non_pic_objects" 820749dc963fSmrg if test "$preload" = yes && test -f "$symfileobj"; then 820849dc963fSmrg oldobjs="$oldobjs $symfileobj" 820949dc963fSmrg fi 821049dc963fSmrg fi 821149dc963fSmrg addlibs="$old_convenience" 82124b0ead49Smrg fi 82134b0ead49Smrg 821449dc963fSmrg if test -n "$addlibs"; then 821549dc963fSmrg gentop="$output_objdir/${outputname}x" 821649dc963fSmrg generated="$generated $gentop" 82174b0ead49Smrg 821849dc963fSmrg func_extract_archives $gentop $addlibs 821949dc963fSmrg oldobjs="$oldobjs $func_extract_archives_result" 822049dc963fSmrg fi 82214b0ead49Smrg 822249dc963fSmrg # Do each command in the archive commands. 822349dc963fSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 822449dc963fSmrg cmds=$old_archive_from_new_cmds 822549dc963fSmrg else 82264b0ead49Smrg 822749dc963fSmrg # Add any objects from preloaded convenience libraries 822849dc963fSmrg if test -n "$dlprefiles"; then 822949dc963fSmrg gentop="$output_objdir/${outputname}x" 823049dc963fSmrg generated="$generated $gentop" 82314b0ead49Smrg 823249dc963fSmrg func_extract_archives $gentop $dlprefiles 823349dc963fSmrg oldobjs="$oldobjs $func_extract_archives_result" 823449dc963fSmrg fi 82354b0ead49Smrg 823649dc963fSmrg # POSIX demands no paths to be encoded in archives. We have 823749dc963fSmrg # to avoid creating archives with duplicate basenames if we 823849dc963fSmrg # might have to extract them afterwards, e.g., when creating a 823949dc963fSmrg # static archive out of a convenience library, or when linking 824049dc963fSmrg # the entirety of a libtool archive into another (currently 824149dc963fSmrg # not supported by libtool). 824249dc963fSmrg if (for obj in $oldobjs 824349dc963fSmrg do 824449dc963fSmrg func_basename "$obj" 824549dc963fSmrg $ECHO "$func_basename_result" 824649dc963fSmrg done | sort | sort -uc >/dev/null 2>&1); then 824749dc963fSmrg : 824849dc963fSmrg else 82497aa89044Smrg echo "copying selected object files to avoid basename conflicts..." 825049dc963fSmrg gentop="$output_objdir/${outputname}x" 825149dc963fSmrg generated="$generated $gentop" 825249dc963fSmrg func_mkdir_p "$gentop" 825349dc963fSmrg save_oldobjs=$oldobjs 825449dc963fSmrg oldobjs= 825549dc963fSmrg counter=1 825649dc963fSmrg for obj in $save_oldobjs 825749dc963fSmrg do 825849dc963fSmrg func_basename "$obj" 825949dc963fSmrg objbase="$func_basename_result" 826049dc963fSmrg case " $oldobjs " in 826149dc963fSmrg " ") oldobjs=$obj ;; 826249dc963fSmrg *[\ /]"$objbase "*) 826349dc963fSmrg while :; do 826449dc963fSmrg # Make sure we don't pick an alternate name that also 826549dc963fSmrg # overlaps. 826649dc963fSmrg newobj=lt$counter-$objbase 826749dc963fSmrg func_arith $counter + 1 826849dc963fSmrg counter=$func_arith_result 826949dc963fSmrg case " $oldobjs " in 827049dc963fSmrg *[\ /]"$newobj "*) ;; 827149dc963fSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 827249dc963fSmrg esac 827349dc963fSmrg done 827449dc963fSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 827549dc963fSmrg oldobjs="$oldobjs $gentop/$newobj" 827649dc963fSmrg ;; 827749dc963fSmrg *) oldobjs="$oldobjs $obj" ;; 827849dc963fSmrg esac 82794b0ead49Smrg done 82804b0ead49Smrg fi 828149dc963fSmrg eval cmds=\"$old_archive_cmds\" 82824b0ead49Smrg 828349dc963fSmrg func_len " $cmds" 828449dc963fSmrg len=$func_len_result 828549dc963fSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 828649dc963fSmrg cmds=$old_archive_cmds 828749dc963fSmrg else 828849dc963fSmrg # the command line is too long to link in one step, link in parts 828949dc963fSmrg func_verbose "using piecewise archive linking..." 829049dc963fSmrg save_RANLIB=$RANLIB 829149dc963fSmrg RANLIB=: 829249dc963fSmrg objlist= 829349dc963fSmrg concat_cmds= 829449dc963fSmrg save_oldobjs=$oldobjs 829549dc963fSmrg oldobjs= 829649dc963fSmrg # Is there a better way of finding the last object in the list? 829749dc963fSmrg for obj in $save_oldobjs 829849dc963fSmrg do 829949dc963fSmrg last_oldobj=$obj 830049dc963fSmrg done 830149dc963fSmrg eval test_cmds=\"$old_archive_cmds\" 830249dc963fSmrg func_len " $test_cmds" 830349dc963fSmrg len0=$func_len_result 830449dc963fSmrg len=$len0 830549dc963fSmrg for obj in $save_oldobjs 830649dc963fSmrg do 830749dc963fSmrg func_len " $obj" 830849dc963fSmrg func_arith $len + $func_len_result 830949dc963fSmrg len=$func_arith_result 831049dc963fSmrg func_append objlist " $obj" 831149dc963fSmrg if test "$len" -lt "$max_cmd_len"; then 831249dc963fSmrg : 831349dc963fSmrg else 831449dc963fSmrg # the above command should be used before it gets too long 831549dc963fSmrg oldobjs=$objlist 831649dc963fSmrg if test "$obj" = "$last_oldobj" ; then 831749dc963fSmrg RANLIB=$save_RANLIB 831849dc963fSmrg fi 831949dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 832049dc963fSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 832149dc963fSmrg objlist= 832249dc963fSmrg len=$len0 832349dc963fSmrg fi 832449dc963fSmrg done 832549dc963fSmrg RANLIB=$save_RANLIB 832649dc963fSmrg oldobjs=$objlist 832749dc963fSmrg if test "X$oldobjs" = "X" ; then 832849dc963fSmrg eval cmds=\"\$concat_cmds\" 832949dc963fSmrg else 833049dc963fSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 833149dc963fSmrg fi 833249dc963fSmrg fi 833349dc963fSmrg fi 833449dc963fSmrg func_execute_cmds "$cmds" 'exit $?' 83354b0ead49Smrg done 83364b0ead49Smrg 833749dc963fSmrg test -n "$generated" && \ 833849dc963fSmrg func_show_eval "${RM}r$generated" 83394b0ead49Smrg 834049dc963fSmrg # Now create the libtool archive. 834149dc963fSmrg case $output in 834249dc963fSmrg *.la) 834349dc963fSmrg old_library= 834449dc963fSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 834549dc963fSmrg func_verbose "creating $output" 83464b0ead49Smrg 834749dc963fSmrg # Preserve any variables that may affect compiler behavior 834849dc963fSmrg for var in $variables_saved_for_relink; do 834949dc963fSmrg if eval test -z \"\${$var+set}\"; then 835049dc963fSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 835149dc963fSmrg elif eval var_value=\$$var; test -z "$var_value"; then 835249dc963fSmrg relink_command="$var=; export $var; $relink_command" 83534b0ead49Smrg else 835449dc963fSmrg func_quote_for_eval "$var_value" 835549dc963fSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 83564b0ead49Smrg fi 835749dc963fSmrg done 835849dc963fSmrg # Quote the link command for shipping. 835949dc963fSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 83607aa89044Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 836149dc963fSmrg if test "$hardcode_automatic" = yes ; then 836249dc963fSmrg relink_command= 836349dc963fSmrg fi 83644b0ead49Smrg 836549dc963fSmrg # Only create the output if not a dry run. 836649dc963fSmrg $opt_dry_run || { 836749dc963fSmrg for installed in no yes; do 836849dc963fSmrg if test "$installed" = yes; then 836949dc963fSmrg if test -z "$install_libdir"; then 837049dc963fSmrg break 837149dc963fSmrg fi 837249dc963fSmrg output="$output_objdir/$outputname"i 837349dc963fSmrg # Replace all uninstalled libtool libraries with the installed ones 837449dc963fSmrg newdependency_libs= 837549dc963fSmrg for deplib in $dependency_libs; do 837649dc963fSmrg case $deplib in 837749dc963fSmrg *.la) 837849dc963fSmrg func_basename "$deplib" 837949dc963fSmrg name="$func_basename_result" 838049dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 838149dc963fSmrg test -z "$libdir" && \ 838249dc963fSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 838349dc963fSmrg newdependency_libs="$newdependency_libs $libdir/$name" 838449dc963fSmrg ;; 838549dc963fSmrg *) newdependency_libs="$newdependency_libs $deplib" ;; 838649dc963fSmrg esac 838749dc963fSmrg done 838849dc963fSmrg dependency_libs="$newdependency_libs" 838949dc963fSmrg newdlfiles= 839049dc963fSmrg 839149dc963fSmrg for lib in $dlfiles; do 839249dc963fSmrg case $lib in 839349dc963fSmrg *.la) 839449dc963fSmrg func_basename "$lib" 839549dc963fSmrg name="$func_basename_result" 839649dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 839749dc963fSmrg test -z "$libdir" && \ 839849dc963fSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 839949dc963fSmrg newdlfiles="$newdlfiles $libdir/$name" 840049dc963fSmrg ;; 840149dc963fSmrg *) newdlfiles="$newdlfiles $lib" ;; 840249dc963fSmrg esac 840349dc963fSmrg done 840449dc963fSmrg dlfiles="$newdlfiles" 840549dc963fSmrg newdlprefiles= 840649dc963fSmrg for lib in $dlprefiles; do 840749dc963fSmrg case $lib in 840849dc963fSmrg *.la) 840949dc963fSmrg # Only pass preopened files to the pseudo-archive (for 841049dc963fSmrg # eventual linking with the app. that links it) if we 841149dc963fSmrg # didn't already link the preopened objects directly into 841249dc963fSmrg # the library: 841349dc963fSmrg func_basename "$lib" 841449dc963fSmrg name="$func_basename_result" 841549dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 841649dc963fSmrg test -z "$libdir" && \ 841749dc963fSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 841849dc963fSmrg newdlprefiles="$newdlprefiles $libdir/$name" 841949dc963fSmrg ;; 842049dc963fSmrg esac 842149dc963fSmrg done 842249dc963fSmrg dlprefiles="$newdlprefiles" 842349dc963fSmrg else 842449dc963fSmrg newdlfiles= 842549dc963fSmrg for lib in $dlfiles; do 842649dc963fSmrg case $lib in 842749dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 842849dc963fSmrg *) abs=`pwd`"/$lib" ;; 842949dc963fSmrg esac 843049dc963fSmrg newdlfiles="$newdlfiles $abs" 843149dc963fSmrg done 843249dc963fSmrg dlfiles="$newdlfiles" 843349dc963fSmrg newdlprefiles= 843449dc963fSmrg for lib in $dlprefiles; do 843549dc963fSmrg case $lib in 843649dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 843749dc963fSmrg *) abs=`pwd`"/$lib" ;; 843849dc963fSmrg esac 843949dc963fSmrg newdlprefiles="$newdlprefiles $abs" 844049dc963fSmrg done 844149dc963fSmrg dlprefiles="$newdlprefiles" 844249dc963fSmrg fi 844349dc963fSmrg $RM $output 844449dc963fSmrg # place dlname in correct position for cygwin 84457aa89044Smrg # In fact, it would be nice if we could use this code for all target 84467aa89044Smrg # systems that can't hard-code library paths into their executables 84477aa89044Smrg # and that have no shared library path variable independent of PATH, 84487aa89044Smrg # but it turns out we can't easily determine that from inspecting 84497aa89044Smrg # libtool variables, so we have to hard-code the OSs to which it 84507aa89044Smrg # applies here; at the moment, that means platforms that use the PE 84517aa89044Smrg # object format with DLL files. See the long comment at the top of 84527aa89044Smrg # tests/bindir.at for full details. 845349dc963fSmrg tdlname=$dlname 845449dc963fSmrg case $host,$output,$installed,$module,$dlname in 84557aa89044Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 84567aa89044Smrg # If a -bindir argument was supplied, place the dll there. 84577aa89044Smrg if test "x$bindir" != x ; 84587aa89044Smrg then 84597aa89044Smrg func_relative_path "$install_libdir" "$bindir" 84607aa89044Smrg tdlname=$func_relative_path_result$dlname 84617aa89044Smrg else 84627aa89044Smrg # Otherwise fall back on heuristic. 84637aa89044Smrg tdlname=../bin/$dlname 84647aa89044Smrg fi 84657aa89044Smrg ;; 846649dc963fSmrg esac 846749dc963fSmrg $ECHO > $output "\ 846849dc963fSmrg# $outputname - a libtool library file 846949dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 847049dc963fSmrg# 847149dc963fSmrg# Please DO NOT delete this file! 847249dc963fSmrg# It is necessary for linking the library. 84734b0ead49Smrg 847449dc963fSmrg# The name that we can dlopen(3). 847549dc963fSmrgdlname='$tdlname' 84764b0ead49Smrg 847749dc963fSmrg# Names of this library. 847849dc963fSmrglibrary_names='$library_names' 84794b0ead49Smrg 848049dc963fSmrg# The name of the static archive. 848149dc963fSmrgold_library='$old_library' 84824b0ead49Smrg 848349dc963fSmrg# Linker flags that can not go in dependency_libs. 848449dc963fSmrginherited_linker_flags='$new_inherited_linker_flags' 84854b0ead49Smrg 848649dc963fSmrg# Libraries that this one depends upon. 848749dc963fSmrgdependency_libs='$dependency_libs' 84884b0ead49Smrg 848949dc963fSmrg# Names of additional weak libraries provided by this library 849049dc963fSmrgweak_library_names='$weak_libs' 84914b0ead49Smrg 849249dc963fSmrg# Version information for $libname. 849349dc963fSmrgcurrent=$current 849449dc963fSmrgage=$age 849549dc963fSmrgrevision=$revision 84964b0ead49Smrg 849749dc963fSmrg# Is this an already installed library? 849849dc963fSmrginstalled=$installed 84994b0ead49Smrg 850049dc963fSmrg# Should we warn about portability when linking against -modules? 850149dc963fSmrgshouldnotlink=$module 85024b0ead49Smrg 850349dc963fSmrg# Files to dlopen/dlpreopen 850449dc963fSmrgdlopen='$dlfiles' 850549dc963fSmrgdlpreopen='$dlprefiles' 85064b0ead49Smrg 850749dc963fSmrg# Directory that this library needs to be installed in: 850849dc963fSmrglibdir='$install_libdir'" 850949dc963fSmrg if test "$installed" = no && test "$need_relink" = yes; then 851049dc963fSmrg $ECHO >> $output "\ 851149dc963fSmrgrelink_command=\"$relink_command\"" 851249dc963fSmrg fi 851349dc963fSmrg done 851449dc963fSmrg } 85154b0ead49Smrg 851649dc963fSmrg # Do a symbolic link so that the libtool archive can be found in 851749dc963fSmrg # LD_LIBRARY_PATH before the program is installed. 851849dc963fSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 851949dc963fSmrg ;; 852049dc963fSmrg esac 852149dc963fSmrg exit $EXIT_SUCCESS 852249dc963fSmrg} 85234b0ead49Smrg 852449dc963fSmrg{ test "$mode" = link || test "$mode" = relink; } && 852549dc963fSmrg func_mode_link ${1+"$@"} 85264b0ead49Smrg 85274b0ead49Smrg 852849dc963fSmrg# func_mode_uninstall arg... 852949dc963fSmrgfunc_mode_uninstall () 853049dc963fSmrg{ 853149dc963fSmrg $opt_debug 853249dc963fSmrg RM="$nonopt" 85334b0ead49Smrg files= 85344b0ead49Smrg rmforce= 85354b0ead49Smrg exit_status=0 85364b0ead49Smrg 85374b0ead49Smrg # This variable tells wrapper scripts just to set variables rather 85384b0ead49Smrg # than running their programs. 85394b0ead49Smrg libtool_install_magic="$magic" 85404b0ead49Smrg 85414b0ead49Smrg for arg 85424b0ead49Smrg do 85434b0ead49Smrg case $arg in 854449dc963fSmrg -f) RM="$RM $arg"; rmforce=yes ;; 854549dc963fSmrg -*) RM="$RM $arg" ;; 85464b0ead49Smrg *) files="$files $arg" ;; 85474b0ead49Smrg esac 85484b0ead49Smrg done 85494b0ead49Smrg 855049dc963fSmrg test -z "$RM" && \ 855149dc963fSmrg func_fatal_help "you must specify an RM program" 85524b0ead49Smrg 85534b0ead49Smrg rmdirs= 85544b0ead49Smrg 85554b0ead49Smrg origobjdir="$objdir" 85564b0ead49Smrg for file in $files; do 855749dc963fSmrg func_dirname "$file" "" "." 855849dc963fSmrg dir="$func_dirname_result" 855949dc963fSmrg if test "X$dir" = X.; then 85604b0ead49Smrg objdir="$origobjdir" 85614b0ead49Smrg else 85624b0ead49Smrg objdir="$dir/$origobjdir" 85634b0ead49Smrg fi 856449dc963fSmrg func_basename "$file" 856549dc963fSmrg name="$func_basename_result" 85664b0ead49Smrg test "$mode" = uninstall && objdir="$dir" 85674b0ead49Smrg 85684b0ead49Smrg # Remember objdir for removal later, being careful to avoid duplicates 85694b0ead49Smrg if test "$mode" = clean; then 85704b0ead49Smrg case " $rmdirs " in 85714b0ead49Smrg *" $objdir "*) ;; 85724b0ead49Smrg *) rmdirs="$rmdirs $objdir" ;; 85734b0ead49Smrg esac 85744b0ead49Smrg fi 85754b0ead49Smrg 85764b0ead49Smrg # Don't error if the file doesn't exist and rm -f was used. 857749dc963fSmrg if { test -L "$file"; } >/dev/null 2>&1 || 857849dc963fSmrg { test -h "$file"; } >/dev/null 2>&1 || 857949dc963fSmrg test -f "$file"; then 85804b0ead49Smrg : 85814b0ead49Smrg elif test -d "$file"; then 85824b0ead49Smrg exit_status=1 85834b0ead49Smrg continue 85844b0ead49Smrg elif test "$rmforce" = yes; then 85854b0ead49Smrg continue 85864b0ead49Smrg fi 85874b0ead49Smrg 85884b0ead49Smrg rmfiles="$file" 85894b0ead49Smrg 85904b0ead49Smrg case $name in 85914b0ead49Smrg *.la) 85924b0ead49Smrg # Possibly a libtool archive, so verify it. 859349dc963fSmrg if func_lalib_p "$file"; then 859449dc963fSmrg func_source $dir/$name 85954b0ead49Smrg 85964b0ead49Smrg # Delete the libtool libraries and symlinks. 85974b0ead49Smrg for n in $library_names; do 85984b0ead49Smrg rmfiles="$rmfiles $objdir/$n" 85994b0ead49Smrg done 86004b0ead49Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 86014b0ead49Smrg 86024b0ead49Smrg case "$mode" in 86034b0ead49Smrg clean) 86044b0ead49Smrg case " $library_names " in 86054b0ead49Smrg # " " in the beginning catches empty $dlname 86064b0ead49Smrg *" $dlname "*) ;; 86074b0ead49Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 86084b0ead49Smrg esac 860949dc963fSmrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 86104b0ead49Smrg ;; 86114b0ead49Smrg uninstall) 86124b0ead49Smrg if test -n "$library_names"; then 86134b0ead49Smrg # Do each command in the postuninstall commands. 861449dc963fSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 86154b0ead49Smrg fi 86164b0ead49Smrg 86174b0ead49Smrg if test -n "$old_library"; then 86184b0ead49Smrg # Do each command in the old_postuninstall commands. 861949dc963fSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 86204b0ead49Smrg fi 86214b0ead49Smrg # FIXME: should reinstall the best remaining shared library. 86224b0ead49Smrg ;; 86234b0ead49Smrg esac 86244b0ead49Smrg fi 86254b0ead49Smrg ;; 86264b0ead49Smrg 86274b0ead49Smrg *.lo) 86284b0ead49Smrg # Possibly a libtool object, so verify it. 862949dc963fSmrg if func_lalib_p "$file"; then 86304b0ead49Smrg 86314b0ead49Smrg # Read the .lo file 863249dc963fSmrg func_source $dir/$name 86334b0ead49Smrg 86344b0ead49Smrg # Add PIC object to the list of files to remove. 863549dc963fSmrg if test -n "$pic_object" && 863649dc963fSmrg test "$pic_object" != none; then 86374b0ead49Smrg rmfiles="$rmfiles $dir/$pic_object" 86384b0ead49Smrg fi 86394b0ead49Smrg 86404b0ead49Smrg # Add non-PIC object to the list of files to remove. 864149dc963fSmrg if test -n "$non_pic_object" && 864249dc963fSmrg test "$non_pic_object" != none; then 86434b0ead49Smrg rmfiles="$rmfiles $dir/$non_pic_object" 86444b0ead49Smrg fi 86454b0ead49Smrg fi 86464b0ead49Smrg ;; 86474b0ead49Smrg 86484b0ead49Smrg *) 86494b0ead49Smrg if test "$mode" = clean ; then 86504b0ead49Smrg noexename=$name 86514b0ead49Smrg case $file in 86524b0ead49Smrg *.exe) 865349dc963fSmrg func_stripname '' '.exe' "$file" 865449dc963fSmrg file=$func_stripname_result 865549dc963fSmrg func_stripname '' '.exe' "$name" 865649dc963fSmrg noexename=$func_stripname_result 86574b0ead49Smrg # $file with .exe has already been added to rmfiles, 86584b0ead49Smrg # add $file without .exe 86594b0ead49Smrg rmfiles="$rmfiles $file" 86604b0ead49Smrg ;; 86614b0ead49Smrg esac 86624b0ead49Smrg # Do a test to see if this is a libtool program. 866349dc963fSmrg if func_ltwrapper_p "$file"; then 866449dc963fSmrg if func_ltwrapper_executable_p "$file"; then 866549dc963fSmrg func_ltwrapper_scriptname "$file" 866649dc963fSmrg relink_command= 866749dc963fSmrg func_source $func_ltwrapper_scriptname_result 866849dc963fSmrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 866949dc963fSmrg else 867049dc963fSmrg relink_command= 867149dc963fSmrg func_source $dir/$noexename 867249dc963fSmrg fi 86734b0ead49Smrg 86744b0ead49Smrg # note $name still contains .exe if it was in $file originally 86754b0ead49Smrg # as does the version of $file that was added into $rmfiles 86764b0ead49Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 86774b0ead49Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 86784b0ead49Smrg rmfiles="$rmfiles $objdir/lt-$name" 86794b0ead49Smrg fi 86804b0ead49Smrg if test "X$noexename" != "X$name" ; then 86814b0ead49Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 86824b0ead49Smrg fi 86834b0ead49Smrg fi 86844b0ead49Smrg fi 86854b0ead49Smrg ;; 86864b0ead49Smrg esac 868749dc963fSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 86884b0ead49Smrg done 86894b0ead49Smrg objdir="$origobjdir" 86904b0ead49Smrg 86914b0ead49Smrg # Try to remove the ${objdir}s in the directories where we deleted files 86924b0ead49Smrg for dir in $rmdirs; do 86934b0ead49Smrg if test -d "$dir"; then 869449dc963fSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 86954b0ead49Smrg fi 86964b0ead49Smrg done 86974b0ead49Smrg 86984b0ead49Smrg exit $exit_status 869949dc963fSmrg} 87004b0ead49Smrg 870149dc963fSmrg{ test "$mode" = uninstall || test "$mode" = clean; } && 870249dc963fSmrg func_mode_uninstall ${1+"$@"} 87034b0ead49Smrg 870449dc963fSmrgtest -z "$mode" && { 870549dc963fSmrg help="$generic_help" 870649dc963fSmrg func_fatal_help "you must specify a MODE" 870749dc963fSmrg} 870849dc963fSmrg 870949dc963fSmrgtest -z "$exec_cmd" && \ 871049dc963fSmrg func_fatal_help "invalid operation mode \`$mode'" 87114b0ead49Smrg 87124b0ead49Smrgif test -n "$exec_cmd"; then 871349dc963fSmrg eval exec "$exec_cmd" 87144b0ead49Smrg exit $EXIT_FAILURE 87154b0ead49Smrgfi 87164b0ead49Smrg 871749dc963fSmrgexit $exit_status 87184b0ead49Smrg 87194b0ead49Smrg 87204b0ead49Smrg# The TAGs below are defined such that we never get into a situation 87214b0ead49Smrg# in which we disable both kinds of libraries. Given conflicting 87224b0ead49Smrg# choices, we go for a static library, that is the most portable, 87234b0ead49Smrg# since we can't tell whether shared libraries were disabled because 87244b0ead49Smrg# the user asked for that or because the platform doesn't support 87254b0ead49Smrg# them. This is particularly important on AIX, because we don't 87264b0ead49Smrg# support having both static and shared libraries enabled at the same 87274b0ead49Smrg# time on that platform, so we default to a shared-only configuration. 87284b0ead49Smrg# If a disable-shared tag is given, we'll fallback to a static-only 87294b0ead49Smrg# configuration. But we'll never go from static-only to shared-only. 87304b0ead49Smrg 87314b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 873249dc963fSmrgbuild_libtool_libs=no 873349dc963fSmrgbuild_old_libs=yes 87344b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 87354b0ead49Smrg 87364b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 873749dc963fSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 87384b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-static 87394b0ead49Smrg 87404b0ead49Smrg# Local Variables: 87414b0ead49Smrg# mode:shell-script 87424b0ead49Smrg# sh-indentation:2 87434b0ead49Smrg# End: 874449dc963fSmrg# vi:sw=2 874549dc963fSmrg 8746