ltmain.sh revision 3e51e026
1a7b590b3Smrg 23e51e026Smrg# libtool (GNU libtool) 2.4.2 3a7b590b3Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4a7b590b3Smrg 53e51e026Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 63e51e026Smrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7a7b590b3Smrg# This is free software; see the source for copying conditions. There is NO 8a7b590b3Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9a7b590b3Smrg 10a7b590b3Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11943345d3Smrg# it under the terms of the GNU General Public License as published by 12943345d3Smrg# the Free Software Foundation; either version 2 of the License, or 13943345d3Smrg# (at your option) any later version. 14943345d3Smrg# 15a7b590b3Smrg# As a special exception to the GNU General Public License, 16a7b590b3Smrg# if you distribute this file as part of a program or library that 17a7b590b3Smrg# is built using GNU Libtool, you may include this file under the 18a7b590b3Smrg# same distribution terms that you use for the rest of that program. 19a7b590b3Smrg# 20a7b590b3Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21943345d3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22943345d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23943345d3Smrg# General Public License for more details. 24943345d3Smrg# 25943345d3Smrg# You should have received a copy of the GNU General Public License 26a7b590b3Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 27a7b590b3Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28a7b590b3Smrg# or obtained by writing to the Free Software Foundation, Inc., 29a7b590b3Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30943345d3Smrg 31a7b590b3Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 32a7b590b3Smrg# 33a7b590b3Smrg# Provide generalized library-building support services. 34a7b590b3Smrg# 353e51e026Smrg# --config show all configuration variables 363e51e026Smrg# --debug enable verbose shell tracing 373e51e026Smrg# -n, --dry-run display commands without modifying any files 383e51e026Smrg# --features display basic configuration information and exit 393e51e026Smrg# --mode=MODE use operation mode MODE 403e51e026Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 413e51e026Smrg# --quiet, --silent don't print informational messages 423e51e026Smrg# --no-quiet, --no-silent 433e51e026Smrg# print informational messages (default) 443e51e026Smrg# --no-warn don't display warning messages 453e51e026Smrg# --tag=TAG use configuration variables from tag TAG 463e51e026Smrg# -v, --verbose print more informational messages than default 473e51e026Smrg# --no-verbose don't print the extra informational messages 483e51e026Smrg# --version print version information 493e51e026Smrg# -h, --help, --help-all print short, long, or detailed help message 50a7b590b3Smrg# 51a7b590b3Smrg# MODE must be one of the following: 52a7b590b3Smrg# 533e51e026Smrg# clean remove files from the build directory 543e51e026Smrg# compile compile a source file into a libtool object 553e51e026Smrg# execute automatically set library path, then run a program 563e51e026Smrg# finish complete the installation of libtool libraries 573e51e026Smrg# install install libraries or executables 583e51e026Smrg# link create a library or an executable 593e51e026Smrg# uninstall remove libraries from an installed directory 60a7b590b3Smrg# 613e51e026Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 623e51e026Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63a7b590b3Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64a7b590b3Smrg# 65a7b590b3Smrg# When reporting a bug, please describe a test case to reproduce it and 66a7b590b3Smrg# include the following information: 67a7b590b3Smrg# 683e51e026Smrg# host-triplet: $host 693e51e026Smrg# shell: $SHELL 703e51e026Smrg# compiler: $LTCC 713e51e026Smrg# compiler flags: $LTCFLAGS 723e51e026Smrg# linker: $LD (gnu? $with_gnu_ld) 733e51e026Smrg# $progname: (GNU libtool) 2.4.2 743e51e026Smrg# automake: $automake_version 753e51e026Smrg# autoconf: $autoconf_version 76a7b590b3Smrg# 77a7b590b3Smrg# Report bugs to <bug-libtool@gnu.org>. 783e51e026Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 793e51e026Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 80943345d3Smrg 813e51e026SmrgPROGRAM=libtool 82943345d3SmrgPACKAGE=libtool 833e51e026SmrgVERSION=2.4.2 84a7b590b3SmrgTIMESTAMP="" 853e51e026Smrgpackage_revision=1.3337 86943345d3Smrg 87a7b590b3Smrg# Be Bourne compatible 88f67b85aaSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 89f67b85aaSmrg emulate sh 90f67b85aaSmrg NULLCMD=: 91f67b85aaSmrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 92f67b85aaSmrg # is contrary to our usage. Disable this feature. 93f67b85aaSmrg alias -g '${1+"$@"}'='"$@"' 94943345d3Smrg setopt NO_GLOB_SUBST 95f67b85aaSmrgelse 96f67b85aaSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97943345d3Smrgfi 985e695a52SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 995e695a52SmrgDUALCASE=1; export DUALCASE # for MKS sh 100943345d3Smrg 1013e51e026Smrg# A function that is used when there is no print builtin or printf. 1023e51e026Smrgfunc_fallback_echo () 1033e51e026Smrg{ 1043e51e026Smrg eval 'cat <<_LTECHO_EOF 1053e51e026Smrg$1 1063e51e026Smrg_LTECHO_EOF' 1073e51e026Smrg} 1083e51e026Smrg 109a7b590b3Smrg# NLS nuisances: We save the old values to restore during execute mode. 110a7b590b3Smrglt_user_locale= 111a7b590b3Smrglt_safe_locale= 1125e695a52Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 113f67b85aaSmrgdo 114f67b85aaSmrg eval "if test \"\${$lt_var+set}\" = set; then 115a7b590b3Smrg save_$lt_var=\$$lt_var 116a7b590b3Smrg $lt_var=C 1175e695a52Smrg export $lt_var 118a7b590b3Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119a7b590b3Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1205e695a52Smrg fi" 121f67b85aaSmrgdone 1223e51e026SmrgLC_ALL=C 1233e51e026SmrgLANGUAGE=C 1243e51e026Smrgexport LANGUAGE LC_ALL 125943345d3Smrg 126a7b590b3Smrg$lt_unset CDPATH 127a7b590b3Smrg 128a7b590b3Smrg 1293e51e026Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1303e51e026Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1313e51e026Smrg# the _XPG environment variable is not equal to 1 (one), the special 1323e51e026Smrg# positional parameter $0, within a function call, is the name of the 1333e51e026Smrg# function. 1343e51e026Smrgprogpath="$0" 135a7b590b3Smrg 136a7b590b3Smrg 137a7b590b3Smrg 138a7b590b3Smrg: ${CP="cp -f"} 1393e51e026Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140a7b590b3Smrg: ${MAKE="make"} 141a7b590b3Smrg: ${MKDIR="mkdir"} 142a7b590b3Smrg: ${MV="mv -f"} 143a7b590b3Smrg: ${RM="rm -f"} 144a7b590b3Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145a7b590b3Smrg: ${Xsed="$SED -e 1s/^X//"} 146a7b590b3Smrg 147a7b590b3Smrg# Global variables: 148a7b590b3SmrgEXIT_SUCCESS=0 149a7b590b3SmrgEXIT_FAILURE=1 150a7b590b3SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151a7b590b3SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152a7b590b3Smrg 153a7b590b3Smrgexit_status=$EXIT_SUCCESS 1545e695a52Smrg 155943345d3Smrg# Make sure IFS has a sensible default 156943345d3Smrglt_nl=' 157943345d3Smrg' 158943345d3SmrgIFS=" $lt_nl" 159943345d3Smrg 160a7b590b3Smrgdirname="s,/[^/]*$,," 161a7b590b3Smrgbasename="s,^.*/,," 162a7b590b3Smrg 1633e51e026Smrg# func_dirname file append nondir_replacement 1643e51e026Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 1653e51e026Smrg# otherwise set result to NONDIR_REPLACEMENT. 1663e51e026Smrgfunc_dirname () 1673e51e026Smrg{ 1683e51e026Smrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 1693e51e026Smrg if test "X$func_dirname_result" = "X${1}"; then 1703e51e026Smrg func_dirname_result="${3}" 1713e51e026Smrg else 1723e51e026Smrg func_dirname_result="$func_dirname_result${2}" 1733e51e026Smrg fi 1743e51e026Smrg} # func_dirname may be replaced by extended shell implementation 1753e51e026Smrg 1763e51e026Smrg 1773e51e026Smrg# func_basename file 1783e51e026Smrgfunc_basename () 1793e51e026Smrg{ 1803e51e026Smrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 1813e51e026Smrg} # func_basename may be replaced by extended shell implementation 1823e51e026Smrg 1833e51e026Smrg 184a7b590b3Smrg# func_dirname_and_basename file append nondir_replacement 185a7b590b3Smrg# perform func_basename and func_dirname in a single function 186a7b590b3Smrg# call: 187a7b590b3Smrg# dirname: Compute the dirname of FILE. If nonempty, 188a7b590b3Smrg# add APPEND to the result, otherwise set result 189a7b590b3Smrg# to NONDIR_REPLACEMENT. 190a7b590b3Smrg# value returned in "$func_dirname_result" 191a7b590b3Smrg# basename: Compute filename of FILE. 192a7b590b3Smrg# value retuned in "$func_basename_result" 193a7b590b3Smrg# Implementation must be kept synchronized with func_dirname 194a7b590b3Smrg# and func_basename. For efficiency, we do not delegate to 195a7b590b3Smrg# those functions but instead duplicate the functionality here. 196a7b590b3Smrgfunc_dirname_and_basename () 197a7b590b3Smrg{ 1983e51e026Smrg # Extract subdirectory from the argument. 1993e51e026Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 2003e51e026Smrg if test "X$func_dirname_result" = "X${1}"; then 2013e51e026Smrg func_dirname_result="${3}" 2023e51e026Smrg else 2033e51e026Smrg func_dirname_result="$func_dirname_result${2}" 2043e51e026Smrg fi 2053e51e026Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 2063e51e026Smrg} # func_dirname_and_basename may be replaced by extended shell implementation 2073e51e026Smrg 2083e51e026Smrg 2093e51e026Smrg# func_stripname prefix suffix name 2103e51e026Smrg# strip PREFIX and SUFFIX off of NAME. 2113e51e026Smrg# PREFIX and SUFFIX must not contain globbing or regex special 2123e51e026Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 2133e51e026Smrg# dot (in which case that matches only a dot). 2143e51e026Smrg# func_strip_suffix prefix name 2153e51e026Smrgfunc_stripname () 2163e51e026Smrg{ 2173e51e026Smrg case ${2} in 2183e51e026Smrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 2193e51e026Smrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 2203e51e026Smrg esac 2213e51e026Smrg} # func_stripname may be replaced by extended shell implementation 2223e51e026Smrg 2233e51e026Smrg 2243e51e026Smrg# These SED scripts presuppose an absolute path with a trailing slash. 2253e51e026Smrgpathcar='s,^/\([^/]*\).*$,\1,' 2263e51e026Smrgpathcdr='s,^/[^/]*,,' 2273e51e026Smrgremovedotparts=':dotsl 2283e51e026Smrg s@/\./@/@g 2293e51e026Smrg t dotsl 2303e51e026Smrg s,/\.$,/,' 2313e51e026Smrgcollapseslashes='s@/\{1,\}@/@g' 2323e51e026Smrgfinalslash='s,/*$,/,' 2333e51e026Smrg 2343e51e026Smrg# func_normal_abspath PATH 2353e51e026Smrg# Remove doubled-up and trailing slashes, "." path components, 2363e51e026Smrg# and cancel out any ".." path components in PATH after making 2373e51e026Smrg# it an absolute path. 2383e51e026Smrg# value returned in "$func_normal_abspath_result" 2393e51e026Smrgfunc_normal_abspath () 2403e51e026Smrg{ 2413e51e026Smrg # Start from root dir and reassemble the path. 2423e51e026Smrg func_normal_abspath_result= 2433e51e026Smrg func_normal_abspath_tpath=$1 2443e51e026Smrg func_normal_abspath_altnamespace= 2453e51e026Smrg case $func_normal_abspath_tpath in 2463e51e026Smrg "") 2473e51e026Smrg # Empty path, that just means $cwd. 2483e51e026Smrg func_stripname '' '/' "`pwd`" 2493e51e026Smrg func_normal_abspath_result=$func_stripname_result 2503e51e026Smrg return 2513e51e026Smrg ;; 2523e51e026Smrg # The next three entries are used to spot a run of precisely 2533e51e026Smrg # two leading slashes without using negated character classes; 2543e51e026Smrg # we take advantage of case's first-match behaviour. 2553e51e026Smrg ///*) 2563e51e026Smrg # Unusual form of absolute path, do nothing. 2573e51e026Smrg ;; 2583e51e026Smrg //*) 2593e51e026Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2603e51e026Smrg # and for example Cygwin uses it to access remote file shares 2613e51e026Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 2623e51e026Smrg func_normal_abspath_altnamespace=/ 2633e51e026Smrg ;; 2643e51e026Smrg /*) 2653e51e026Smrg # Absolute path, do nothing. 2663e51e026Smrg ;; 2673e51e026Smrg *) 2683e51e026Smrg # Relative path, prepend $cwd. 2693e51e026Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2703e51e026Smrg ;; 2713e51e026Smrg esac 2723e51e026Smrg # Cancel out all the simple stuff to save iterations. We also want 2733e51e026Smrg # the path to end with a slash for ease of parsing, so make sure 2743e51e026Smrg # there is one (and only one) here. 2753e51e026Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2763e51e026Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2773e51e026Smrg while :; do 2783e51e026Smrg # Processed it all yet? 2793e51e026Smrg if test "$func_normal_abspath_tpath" = / ; then 2803e51e026Smrg # If we ascended to the root using ".." the result may be empty now. 2813e51e026Smrg if test -z "$func_normal_abspath_result" ; then 2823e51e026Smrg func_normal_abspath_result=/ 2833e51e026Smrg fi 2843e51e026Smrg break 2853e51e026Smrg fi 2863e51e026Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2873e51e026Smrg -e "$pathcar"` 2883e51e026Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2893e51e026Smrg -e "$pathcdr"` 2903e51e026Smrg # Figure out what to do with it 2913e51e026Smrg case $func_normal_abspath_tcomponent in 2923e51e026Smrg "") 2933e51e026Smrg # Trailing empty path component, ignore it. 2943e51e026Smrg ;; 2953e51e026Smrg ..) 2963e51e026Smrg # Parent dir; strip last assembled component from result. 2973e51e026Smrg func_dirname "$func_normal_abspath_result" 2983e51e026Smrg func_normal_abspath_result=$func_dirname_result 2993e51e026Smrg ;; 3003e51e026Smrg *) 3013e51e026Smrg # Actual path component, append it. 3023e51e026Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 3033e51e026Smrg ;; 3043e51e026Smrg esac 3053e51e026Smrg done 3063e51e026Smrg # Restore leading double-slash if one was found on entry. 3073e51e026Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308a7b590b3Smrg} 309943345d3Smrg 3103e51e026Smrg# func_relative_path SRCDIR DSTDIR 3113e51e026Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 3123e51e026Smrg# slash if non-empty, suitable for immediately appending a filename 3133e51e026Smrg# without needing to append a separator. 3143e51e026Smrg# value returned in "$func_relative_path_result" 3153e51e026Smrgfunc_relative_path () 3163e51e026Smrg{ 3173e51e026Smrg func_relative_path_result= 3183e51e026Smrg func_normal_abspath "$1" 3193e51e026Smrg func_relative_path_tlibdir=$func_normal_abspath_result 3203e51e026Smrg func_normal_abspath "$2" 3213e51e026Smrg func_relative_path_tbindir=$func_normal_abspath_result 3223e51e026Smrg 3233e51e026Smrg # Ascend the tree starting from libdir 3243e51e026Smrg while :; do 3253e51e026Smrg # check if we have found a prefix of bindir 3263e51e026Smrg case $func_relative_path_tbindir in 3273e51e026Smrg $func_relative_path_tlibdir) 3283e51e026Smrg # found an exact match 3293e51e026Smrg func_relative_path_tcancelled= 3303e51e026Smrg break 3313e51e026Smrg ;; 3323e51e026Smrg $func_relative_path_tlibdir*) 3333e51e026Smrg # found a matching prefix 3343e51e026Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3353e51e026Smrg func_relative_path_tcancelled=$func_stripname_result 3363e51e026Smrg if test -z "$func_relative_path_result"; then 3373e51e026Smrg func_relative_path_result=. 3383e51e026Smrg fi 3393e51e026Smrg break 3403e51e026Smrg ;; 3413e51e026Smrg *) 3423e51e026Smrg func_dirname $func_relative_path_tlibdir 3433e51e026Smrg func_relative_path_tlibdir=${func_dirname_result} 3443e51e026Smrg if test "x$func_relative_path_tlibdir" = x ; then 3453e51e026Smrg # Have to descend all the way to the root! 3463e51e026Smrg func_relative_path_result=../$func_relative_path_result 3473e51e026Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 3483e51e026Smrg break 3493e51e026Smrg fi 3503e51e026Smrg func_relative_path_result=../$func_relative_path_result 3513e51e026Smrg ;; 3523e51e026Smrg esac 3533e51e026Smrg done 354a7b590b3Smrg 3553e51e026Smrg # Now calculate path; take care to avoid doubling-up slashes. 3563e51e026Smrg func_stripname '' '/' "$func_relative_path_result" 3573e51e026Smrg func_relative_path_result=$func_stripname_result 3583e51e026Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3593e51e026Smrg if test "x$func_stripname_result" != x ; then 3603e51e026Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3613e51e026Smrg fi 3623e51e026Smrg 3633e51e026Smrg # Normalisation. If bindir is libdir, return empty string, 3643e51e026Smrg # else relative path ending with a slash; either way, target 3653e51e026Smrg # file name can be directly appended. 3663e51e026Smrg if test ! -z "$func_relative_path_result"; then 3673e51e026Smrg func_stripname './' '' "$func_relative_path_result/" 3683e51e026Smrg func_relative_path_result=$func_stripname_result 3693e51e026Smrg fi 3703e51e026Smrg} 371a7b590b3Smrg 372a7b590b3Smrg# The name of this program: 373a7b590b3Smrgfunc_dirname_and_basename "$progpath" 374a7b590b3Smrgprogname=$func_basename_result 375a7b590b3Smrg 376a7b590b3Smrg# Make sure we have an absolute path for reexecution: 377a7b590b3Smrgcase $progpath in 378a7b590b3Smrg [\\/]*|[A-Za-z]:\\*) ;; 379a7b590b3Smrg *[\\/]*) 380a7b590b3Smrg progdir=$func_dirname_result 381a7b590b3Smrg progdir=`cd "$progdir" && pwd` 382a7b590b3Smrg progpath="$progdir/$progname" 383a7b590b3Smrg ;; 384a7b590b3Smrg *) 385a7b590b3Smrg save_IFS="$IFS" 3863e51e026Smrg IFS=${PATH_SEPARATOR-:} 387a7b590b3Smrg for progdir in $PATH; do 388a7b590b3Smrg IFS="$save_IFS" 389a7b590b3Smrg test -x "$progdir/$progname" && break 390a7b590b3Smrg done 391a7b590b3Smrg IFS="$save_IFS" 392a7b590b3Smrg test -n "$progdir" || progdir=`pwd` 393a7b590b3Smrg progpath="$progdir/$progname" 394a7b590b3Smrg ;; 395a7b590b3Smrgesac 396a7b590b3Smrg 397a7b590b3Smrg# Sed substitution that helps us do robust quoting. It backslashifies 398a7b590b3Smrg# metacharacters that are still active within double-quoted strings. 399a7b590b3SmrgXsed="${SED}"' -e 1s/^X//' 400a7b590b3Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401a7b590b3Smrg 402a7b590b3Smrg# Same as above, but do not quote variable references. 403a7b590b3Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404a7b590b3Smrg 4053e51e026Smrg# Sed substitution that turns a string into a regex matching for the 4063e51e026Smrg# string literally. 4073e51e026Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 4083e51e026Smrg 4093e51e026Smrg# Sed substitution that converts a w32 file name or path 4103e51e026Smrg# which contains forward slashes, into one that contains 4113e51e026Smrg# (escaped) backslashes. A very naive implementation. 4123e51e026Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 4133e51e026Smrg 414a7b590b3Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 415a7b590b3Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416a7b590b3Smrg# in input to double_quote_subst, that '$' was protected from expansion. 417a7b590b3Smrg# Since each input `\' is now two `\'s, look for any number of runs of 418a7b590b3Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419a7b590b3Smrgbs='\\' 420a7b590b3Smrgbs2='\\\\' 421a7b590b3Smrgbs4='\\\\\\\\' 422a7b590b3Smrgdollar='\$' 423a7b590b3Smrgsed_double_backslash="\ 424a7b590b3Smrg s/$bs4/&\\ 425a7b590b3Smrg/g 426a7b590b3Smrg s/^$bs2$dollar/$bs&/ 427a7b590b3Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428a7b590b3Smrg s/\n//g" 429a7b590b3Smrg 430a7b590b3Smrg# Standard options: 431a7b590b3Smrgopt_dry_run=false 432a7b590b3Smrgopt_help=false 433a7b590b3Smrgopt_quiet=false 434a7b590b3Smrgopt_verbose=false 435a7b590b3Smrgopt_warning=: 436a7b590b3Smrg 437a7b590b3Smrg# func_echo arg... 438a7b590b3Smrg# Echo program name prefixed message, along with the current mode 439a7b590b3Smrg# name if it has been set yet. 440a7b590b3Smrgfunc_echo () 441a7b590b3Smrg{ 4423e51e026Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443a7b590b3Smrg} 444a7b590b3Smrg 445a7b590b3Smrg# func_verbose arg... 446a7b590b3Smrg# Echo program name prefixed message in verbose mode only. 447a7b590b3Smrgfunc_verbose () 448a7b590b3Smrg{ 449a7b590b3Smrg $opt_verbose && func_echo ${1+"$@"} 450a7b590b3Smrg 451a7b590b3Smrg # A bug in bash halts the script if the last line of a function 452a7b590b3Smrg # fails when set -e is in force, so we need another command to 453a7b590b3Smrg # work around that: 454a7b590b3Smrg : 455a7b590b3Smrg} 456a7b590b3Smrg 4573e51e026Smrg# func_echo_all arg... 4583e51e026Smrg# Invoke $ECHO with all args, space-separated. 4593e51e026Smrgfunc_echo_all () 4603e51e026Smrg{ 4613e51e026Smrg $ECHO "$*" 4623e51e026Smrg} 4633e51e026Smrg 464a7b590b3Smrg# func_error arg... 465a7b590b3Smrg# Echo program name prefixed message to standard error. 466a7b590b3Smrgfunc_error () 467a7b590b3Smrg{ 4683e51e026Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469a7b590b3Smrg} 470a7b590b3Smrg 471a7b590b3Smrg# func_warning arg... 472a7b590b3Smrg# Echo program name prefixed warning message to standard error. 473a7b590b3Smrgfunc_warning () 474a7b590b3Smrg{ 4753e51e026Smrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476a7b590b3Smrg 477a7b590b3Smrg # bash bug again: 478a7b590b3Smrg : 479a7b590b3Smrg} 480a7b590b3Smrg 481a7b590b3Smrg# func_fatal_error arg... 482a7b590b3Smrg# Echo program name prefixed message to standard error, and exit. 483a7b590b3Smrgfunc_fatal_error () 484a7b590b3Smrg{ 485a7b590b3Smrg func_error ${1+"$@"} 486a7b590b3Smrg exit $EXIT_FAILURE 487a7b590b3Smrg} 488a7b590b3Smrg 489a7b590b3Smrg# func_fatal_help arg... 490a7b590b3Smrg# Echo program name prefixed message to standard error, followed by 491a7b590b3Smrg# a help hint, and exit. 492a7b590b3Smrgfunc_fatal_help () 493a7b590b3Smrg{ 494a7b590b3Smrg func_error ${1+"$@"} 495a7b590b3Smrg func_fatal_error "$help" 496a7b590b3Smrg} 497a7b590b3Smrghelp="Try \`$progname --help' for more information." ## default 498a7b590b3Smrg 499a7b590b3Smrg 500a7b590b3Smrg# func_grep expression filename 501a7b590b3Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502a7b590b3Smrgfunc_grep () 503a7b590b3Smrg{ 504a7b590b3Smrg $GREP "$1" "$2" >/dev/null 2>&1 505a7b590b3Smrg} 506a7b590b3Smrg 507a7b590b3Smrg 508a7b590b3Smrg# func_mkdir_p directory-path 509a7b590b3Smrg# Make sure the entire path to DIRECTORY-PATH is available. 510a7b590b3Smrgfunc_mkdir_p () 511a7b590b3Smrg{ 512a7b590b3Smrg my_directory_path="$1" 513a7b590b3Smrg my_dir_list= 514a7b590b3Smrg 515a7b590b3Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516a7b590b3Smrg 517a7b590b3Smrg # Protect directory names starting with `-' 518a7b590b3Smrg case $my_directory_path in 519a7b590b3Smrg -*) my_directory_path="./$my_directory_path" ;; 520a7b590b3Smrg esac 521a7b590b3Smrg 522a7b590b3Smrg # While some portion of DIR does not yet exist... 523a7b590b3Smrg while test ! -d "$my_directory_path"; do 524a7b590b3Smrg # ...make a list in topmost first order. Use a colon delimited 525a7b590b3Smrg # list incase some portion of path contains whitespace. 526a7b590b3Smrg my_dir_list="$my_directory_path:$my_dir_list" 527a7b590b3Smrg 528a7b590b3Smrg # If the last portion added has no slash in it, the list is done 529a7b590b3Smrg case $my_directory_path in */*) ;; *) break ;; esac 530a7b590b3Smrg 531a7b590b3Smrg # ...otherwise throw away the child directory and loop 5323e51e026Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533a7b590b3Smrg done 5343e51e026Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535a7b590b3Smrg 536a7b590b3Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 537a7b590b3Smrg for my_dir in $my_dir_list; do 538a7b590b3Smrg IFS="$save_mkdir_p_IFS" 539a7b590b3Smrg # mkdir can fail with a `File exist' error if two processes 540a7b590b3Smrg # try to create one of the directories concurrently. Don't 541a7b590b3Smrg # stop in that case! 542a7b590b3Smrg $MKDIR "$my_dir" 2>/dev/null || : 543a7b590b3Smrg done 544a7b590b3Smrg IFS="$save_mkdir_p_IFS" 545a7b590b3Smrg 546a7b590b3Smrg # Bail out if we (or some other process) failed to create a directory. 547a7b590b3Smrg test -d "$my_directory_path" || \ 548a7b590b3Smrg func_fatal_error "Failed to create \`$1'" 549a7b590b3Smrg fi 550a7b590b3Smrg} 551943345d3Smrg 552943345d3Smrg 553943345d3Smrg# func_mktempdir [string] 554943345d3Smrg# Make a temporary directory that won't clash with other running 555943345d3Smrg# libtool processes, and avoids race conditions if possible. If 556943345d3Smrg# given, STRING is the basename for that directory. 557943345d3Smrgfunc_mktempdir () 558943345d3Smrg{ 559943345d3Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 560943345d3Smrg 561a7b590b3Smrg if test "$opt_dry_run" = ":"; then 562943345d3Smrg # Return a directory name, but don't create it in dry-run mode 563943345d3Smrg my_tmpdir="${my_template}-$$" 564943345d3Smrg else 565943345d3Smrg 566943345d3Smrg # If mktemp works, use that first and foremost 567943345d3Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568943345d3Smrg 569943345d3Smrg if test ! -d "$my_tmpdir"; then 570a7b590b3Smrg # Failing that, at least try and use $RANDOM to avoid a race 571a7b590b3Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 572943345d3Smrg 573a7b590b3Smrg save_mktempdir_umask=`umask` 574a7b590b3Smrg umask 0077 575a7b590b3Smrg $MKDIR "$my_tmpdir" 576a7b590b3Smrg umask $save_mktempdir_umask 577943345d3Smrg fi 578943345d3Smrg 579943345d3Smrg # If we're not in dry-run mode, bomb out on failure 580a7b590b3Smrg test -d "$my_tmpdir" || \ 581a7b590b3Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582943345d3Smrg fi 583943345d3Smrg 5843e51e026Smrg $ECHO "$my_tmpdir" 585943345d3Smrg} 586943345d3Smrg 587943345d3Smrg 588a7b590b3Smrg# func_quote_for_eval arg 589a7b590b3Smrg# Aesthetically quote ARG to be evaled later. 590a7b590b3Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591a7b590b3Smrg# is double-quoted, suitable for a subsequent eval, whereas 592a7b590b3Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593a7b590b3Smrg# which are still active within double quotes backslashified. 594a7b590b3Smrgfunc_quote_for_eval () 595943345d3Smrg{ 596a7b590b3Smrg case $1 in 597a7b590b3Smrg *[\\\`\"\$]*) 5983e51e026Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599a7b590b3Smrg *) 600a7b590b3Smrg func_quote_for_eval_unquoted_result="$1" ;; 601a7b590b3Smrg esac 602a7b590b3Smrg 603a7b590b3Smrg case $func_quote_for_eval_unquoted_result in 604a7b590b3Smrg # Double-quote args containing shell metacharacters to delay 605a7b590b3Smrg # word splitting, command substitution and and variable 606a7b590b3Smrg # expansion for a subsequent eval. 607a7b590b3Smrg # Many Bourne shells cannot handle close brackets correctly 608a7b590b3Smrg # in scan sets, so we specify it separately. 609a7b590b3Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610a7b590b3Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611a7b590b3Smrg ;; 612a7b590b3Smrg *) 613a7b590b3Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614943345d3Smrg esac 615943345d3Smrg} 616943345d3Smrg 617943345d3Smrg 618a7b590b3Smrg# func_quote_for_expand arg 619a7b590b3Smrg# Aesthetically quote ARG to be evaled later; same as above, 620a7b590b3Smrg# but do not quote variable references. 621a7b590b3Smrgfunc_quote_for_expand () 622943345d3Smrg{ 623a7b590b3Smrg case $1 in 624a7b590b3Smrg *[\\\`\"]*) 6253e51e026Smrg my_arg=`$ECHO "$1" | $SED \ 626a7b590b3Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 627943345d3Smrg *) 628a7b590b3Smrg my_arg="$1" ;; 629a7b590b3Smrg esac 630a7b590b3Smrg 631a7b590b3Smrg case $my_arg in 632a7b590b3Smrg # Double-quote args containing shell metacharacters to delay 633a7b590b3Smrg # word splitting and command substitution for a subsequent eval. 634a7b590b3Smrg # Many Bourne shells cannot handle close brackets correctly 635a7b590b3Smrg # in scan sets, so we specify it separately. 636a7b590b3Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637a7b590b3Smrg my_arg="\"$my_arg\"" 638a7b590b3Smrg ;; 639a7b590b3Smrg esac 640a7b590b3Smrg 641a7b590b3Smrg func_quote_for_expand_result="$my_arg" 642943345d3Smrg} 643943345d3Smrg 644943345d3Smrg 645a7b590b3Smrg# func_show_eval cmd [fail_exp] 646a7b590b3Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647a7b590b3Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648a7b590b3Smrg# is given, then evaluate it. 649a7b590b3Smrgfunc_show_eval () 650943345d3Smrg{ 651a7b590b3Smrg my_cmd="$1" 652a7b590b3Smrg my_fail_exp="${2-:}" 653943345d3Smrg 654a7b590b3Smrg ${opt_silent-false} || { 655a7b590b3Smrg func_quote_for_expand "$my_cmd" 656a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 657a7b590b3Smrg } 658a7b590b3Smrg 659a7b590b3Smrg if ${opt_dry_run-false}; then :; else 660a7b590b3Smrg eval "$my_cmd" 661a7b590b3Smrg my_status=$? 662a7b590b3Smrg if test "$my_status" -eq 0; then :; else 663a7b590b3Smrg eval "(exit $my_status); $my_fail_exp" 664a7b590b3Smrg fi 665943345d3Smrg fi 666943345d3Smrg} 667943345d3Smrg 668a7b590b3Smrg 669a7b590b3Smrg# func_show_eval_locale cmd [fail_exp] 670a7b590b3Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671a7b590b3Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672a7b590b3Smrg# is given, then evaluate it. Use the saved locale for evaluation. 673a7b590b3Smrgfunc_show_eval_locale () 674943345d3Smrg{ 675a7b590b3Smrg my_cmd="$1" 676a7b590b3Smrg my_fail_exp="${2-:}" 677a7b590b3Smrg 678a7b590b3Smrg ${opt_silent-false} || { 679a7b590b3Smrg func_quote_for_expand "$my_cmd" 680a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 681a7b590b3Smrg } 682a7b590b3Smrg 683a7b590b3Smrg if ${opt_dry_run-false}; then :; else 684a7b590b3Smrg eval "$lt_user_locale 685a7b590b3Smrg $my_cmd" 686a7b590b3Smrg my_status=$? 687a7b590b3Smrg eval "$lt_safe_locale" 688a7b590b3Smrg if test "$my_status" -eq 0; then :; else 689a7b590b3Smrg eval "(exit $my_status); $my_fail_exp" 690a7b590b3Smrg fi 691943345d3Smrg fi 692a7b590b3Smrg} 693943345d3Smrg 6943e51e026Smrg# func_tr_sh 6953e51e026Smrg# Turn $1 into a string suitable for a shell variable name. 6963e51e026Smrg# Result is stored in $func_tr_sh_result. All characters 6973e51e026Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 6983e51e026Smrg# if $1 begins with a digit, a '_' is prepended as well. 6993e51e026Smrgfunc_tr_sh () 7003e51e026Smrg{ 7013e51e026Smrg case $1 in 7023e51e026Smrg [0-9]* | *[!a-zA-Z0-9_]*) 7033e51e026Smrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 7043e51e026Smrg ;; 7053e51e026Smrg * ) 7063e51e026Smrg func_tr_sh_result=$1 7073e51e026Smrg ;; 7083e51e026Smrg esac 7093e51e026Smrg} 710a7b590b3Smrg 711a7b590b3Smrg 712a7b590b3Smrg# func_version 713a7b590b3Smrg# Echo version message to standard output and exit. 714a7b590b3Smrgfunc_version () 715a7b590b3Smrg{ 7163e51e026Smrg $opt_debug 7173e51e026Smrg 7183e51e026Smrg $SED -n '/(C)/!b go 7193e51e026Smrg :more 7203e51e026Smrg /\./!{ 7213e51e026Smrg N 7223e51e026Smrg s/\n# / / 7233e51e026Smrg b more 7243e51e026Smrg } 7253e51e026Smrg :go 7263e51e026Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 727a7b590b3Smrg s/^# // 728a7b590b3Smrg s/^# *$// 729a7b590b3Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730a7b590b3Smrg p 731a7b590b3Smrg }' < "$progpath" 732a7b590b3Smrg exit $? 733a7b590b3Smrg} 734a7b590b3Smrg 735a7b590b3Smrg# func_usage 736a7b590b3Smrg# Echo short help message to standard output and exit. 737a7b590b3Smrgfunc_usage () 738a7b590b3Smrg{ 7393e51e026Smrg $opt_debug 7403e51e026Smrg 7413e51e026Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 742a7b590b3Smrg s/^# // 743a7b590b3Smrg s/^# *$// 744a7b590b3Smrg s/\$progname/'$progname'/ 745a7b590b3Smrg p 746a7b590b3Smrg }' < "$progpath" 7473e51e026Smrg echo 748a7b590b3Smrg $ECHO "run \`$progname --help | more' for full usage" 749a7b590b3Smrg exit $? 750a7b590b3Smrg} 751a7b590b3Smrg 7523e51e026Smrg# func_help [NOEXIT] 7533e51e026Smrg# Echo long help message to standard output and exit, 7543e51e026Smrg# unless 'noexit' is passed as argument. 755a7b590b3Smrgfunc_help () 756a7b590b3Smrg{ 7573e51e026Smrg $opt_debug 7583e51e026Smrg 759a7b590b3Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 7603e51e026Smrg :print 761a7b590b3Smrg s/^# // 762a7b590b3Smrg s/^# *$// 763a7b590b3Smrg s*\$progname*'$progname'* 764a7b590b3Smrg s*\$host*'"$host"'* 765a7b590b3Smrg s*\$SHELL*'"$SHELL"'* 766a7b590b3Smrg s*\$LTCC*'"$LTCC"'* 767a7b590b3Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 768a7b590b3Smrg s*\$LD*'"$LD"'* 769a7b590b3Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 7703e51e026Smrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 7713e51e026Smrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772a7b590b3Smrg p 7733e51e026Smrg d 7743e51e026Smrg } 7753e51e026Smrg /^# .* home page:/b print 7763e51e026Smrg /^# General help using/b print 7773e51e026Smrg ' < "$progpath" 7783e51e026Smrg ret=$? 7793e51e026Smrg if test -z "$1"; then 7803e51e026Smrg exit $ret 7813e51e026Smrg fi 782a7b590b3Smrg} 783a7b590b3Smrg 784a7b590b3Smrg# func_missing_arg argname 785a7b590b3Smrg# Echo program name prefixed message to standard error and set global 786a7b590b3Smrg# exit_cmd. 787a7b590b3Smrgfunc_missing_arg () 788a7b590b3Smrg{ 7893e51e026Smrg $opt_debug 7903e51e026Smrg 7913e51e026Smrg func_error "missing argument for $1." 792a7b590b3Smrg exit_cmd=exit 793943345d3Smrg} 794943345d3Smrg 795943345d3Smrg 7963e51e026Smrg# func_split_short_opt shortopt 7973e51e026Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 7983e51e026Smrg# variables after splitting SHORTOPT after the 2nd character. 7993e51e026Smrgfunc_split_short_opt () 8003e51e026Smrg{ 8013e51e026Smrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 8023e51e026Smrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803943345d3Smrg 8043e51e026Smrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 8053e51e026Smrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 8063e51e026Smrg} # func_split_short_opt may be replaced by extended shell implementation 8073e51e026Smrg 8083e51e026Smrg 8093e51e026Smrg# func_split_long_opt longopt 8103e51e026Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 8113e51e026Smrg# variables after splitting LONGOPT at the `=' sign. 8123e51e026Smrgfunc_split_long_opt () 8133e51e026Smrg{ 8143e51e026Smrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 8153e51e026Smrg my_sed_long_arg='1s/^--[^=]*=//' 8163e51e026Smrg 8173e51e026Smrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 8183e51e026Smrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 8193e51e026Smrg} # func_split_long_opt may be replaced by extended shell implementation 8203e51e026Smrg 8213e51e026Smrgexit_cmd=: 822a7b590b3Smrg 823a7b590b3Smrg 824a7b590b3Smrg 825943345d3Smrg 826943345d3Smrg 827a7b590b3Smrgmagic="%%%MAGIC variable%%%" 828a7b590b3Smrgmagic_exe="%%%MAGIC EXE variable%%%" 829943345d3Smrg 830a7b590b3Smrg# Global variables. 831a7b590b3Smrgnonopt= 832a7b590b3Smrgpreserve_args= 833a7b590b3Smrglo2o="s/\\.lo\$/.${objext}/" 834a7b590b3Smrgo2lo="s/\\.${objext}\$/.lo/" 835a7b590b3Smrgextracted_archives= 836a7b590b3Smrgextracted_serial=0 837943345d3Smrg 838a7b590b3Smrg# If this variable is set in any of the actions, the command in it 839a7b590b3Smrg# will be execed at the end. This prevents here-documents from being 840a7b590b3Smrg# left over by shells. 841a7b590b3Smrgexec_cmd= 842a7b590b3Smrg 8433e51e026Smrg# func_append var value 8443e51e026Smrg# Append VALUE to the end of shell variable VAR. 8453e51e026Smrgfunc_append () 8463e51e026Smrg{ 8473e51e026Smrg eval "${1}=\$${1}\${2}" 8483e51e026Smrg} # func_append may be replaced by extended shell implementation 8493e51e026Smrg 8503e51e026Smrg# func_append_quoted var value 8513e51e026Smrg# Quote VALUE and append to the end of shell variable VAR, separated 8523e51e026Smrg# by a space. 8533e51e026Smrgfunc_append_quoted () 8543e51e026Smrg{ 8553e51e026Smrg func_quote_for_eval "${2}" 8563e51e026Smrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 8573e51e026Smrg} # func_append_quoted may be replaced by extended shell implementation 8583e51e026Smrg 8593e51e026Smrg 8603e51e026Smrg# func_arith arithmetic-term... 8613e51e026Smrgfunc_arith () 8623e51e026Smrg{ 8633e51e026Smrg func_arith_result=`expr "${@}"` 8643e51e026Smrg} # func_arith may be replaced by extended shell implementation 8653e51e026Smrg 8663e51e026Smrg 8673e51e026Smrg# func_len string 8683e51e026Smrg# STRING may not start with a hyphen. 8693e51e026Smrgfunc_len () 8703e51e026Smrg{ 8713e51e026Smrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 8723e51e026Smrg} # func_len may be replaced by extended shell implementation 8733e51e026Smrg 8743e51e026Smrg 8753e51e026Smrg# func_lo2o object 8763e51e026Smrgfunc_lo2o () 8773e51e026Smrg{ 8783e51e026Smrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 8793e51e026Smrg} # func_lo2o may be replaced by extended shell implementation 8803e51e026Smrg 8813e51e026Smrg 8823e51e026Smrg# func_xform libobj-or-source 8833e51e026Smrgfunc_xform () 8843e51e026Smrg{ 8853e51e026Smrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 8863e51e026Smrg} # func_xform may be replaced by extended shell implementation 8873e51e026Smrg 8883e51e026Smrg 889a7b590b3Smrg# func_fatal_configuration arg... 890a7b590b3Smrg# Echo program name prefixed message to standard error, followed by 891a7b590b3Smrg# a configuration failure hint, and exit. 892a7b590b3Smrgfunc_fatal_configuration () 893a7b590b3Smrg{ 894a7b590b3Smrg func_error ${1+"$@"} 895a7b590b3Smrg func_error "See the $PACKAGE documentation for more information." 896a7b590b3Smrg func_fatal_error "Fatal configuration error." 897a7b590b3Smrg} 898943345d3Smrg 8995e695a52Smrg 900a7b590b3Smrg# func_config 901a7b590b3Smrg# Display the configuration for all the tags in this script. 902a7b590b3Smrgfunc_config () 903a7b590b3Smrg{ 904a7b590b3Smrg re_begincf='^# ### BEGIN LIBTOOL' 905a7b590b3Smrg re_endcf='^# ### END LIBTOOL' 906a7b590b3Smrg 907a7b590b3Smrg # Default configuration. 908a7b590b3Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909943345d3Smrg 910943345d3Smrg # Now print the configurations for the tags. 911943345d3Smrg for tagname in $taglist; do 912a7b590b3Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913943345d3Smrg done 914943345d3Smrg 915a7b590b3Smrg exit $? 916a7b590b3Smrg} 917943345d3Smrg 918a7b590b3Smrg# func_features 919a7b590b3Smrg# Display the features supported by this script. 920a7b590b3Smrgfunc_features () 921a7b590b3Smrg{ 9223e51e026Smrg echo "host: $host" 923943345d3Smrg if test "$build_libtool_libs" = yes; then 9243e51e026Smrg echo "enable shared libraries" 925943345d3Smrg else 9263e51e026Smrg echo "disable shared libraries" 927943345d3Smrg fi 928943345d3Smrg if test "$build_old_libs" = yes; then 9293e51e026Smrg echo "enable static libraries" 930943345d3Smrg else 9313e51e026Smrg echo "disable static libraries" 932943345d3Smrg fi 933a7b590b3Smrg 934943345d3Smrg exit $? 935a7b590b3Smrg} 936943345d3Smrg 937a7b590b3Smrg# func_enable_tag tagname 938a7b590b3Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939a7b590b3Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940a7b590b3Smrg# variable here. 941a7b590b3Smrgfunc_enable_tag () 942a7b590b3Smrg{ 943a7b590b3Smrg # Global variable: 944a7b590b3Smrg tagname="$1" 945943345d3Smrg 946a7b590b3Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947a7b590b3Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948a7b590b3Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 949943345d3Smrg 950a7b590b3Smrg # Validate tagname. 951a7b590b3Smrg case $tagname in 952a7b590b3Smrg *[!-_A-Za-z0-9,/]*) 953a7b590b3Smrg func_fatal_error "invalid tag name: $tagname" 954a7b590b3Smrg ;; 955a7b590b3Smrg esac 956943345d3Smrg 957a7b590b3Smrg # Don't test for the "default" C tag, as we know it's 958a7b590b3Smrg # there but not specially marked. 959a7b590b3Smrg case $tagname in 960a7b590b3Smrg CC) ;; 961a7b590b3Smrg *) 962a7b590b3Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963a7b590b3Smrg taglist="$taglist $tagname" 964a7b590b3Smrg 965a7b590b3Smrg # Evaluate the configuration. Be careful to quote the path 966a7b590b3Smrg # and the sed script, to avoid splitting on whitespace, but 967a7b590b3Smrg # also don't use non-portable quotes within backquotes within 968a7b590b3Smrg # quotes we have to do it in 2 steps: 969a7b590b3Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970a7b590b3Smrg eval "$extractedcf" 971a7b590b3Smrg else 972a7b590b3Smrg func_error "ignoring unknown tag $tagname" 973a7b590b3Smrg fi 974a7b590b3Smrg ;; 975a7b590b3Smrg esac 976a7b590b3Smrg} 977a7b590b3Smrg 9783e51e026Smrg# func_check_version_match 9793e51e026Smrg# Ensure that we are using m4 macros, and libtool script from the same 9803e51e026Smrg# release of libtool. 9813e51e026Smrgfunc_check_version_match () 982a7b590b3Smrg{ 9833e51e026Smrg if test "$package_revision" != "$macro_revision"; then 9843e51e026Smrg if test "$VERSION" != "$macro_version"; then 9853e51e026Smrg if test -z "$macro_version"; then 9863e51e026Smrg cat >&2 <<_LT_EOF 9873e51e026Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9883e51e026Smrg$progname: definition of this LT_INIT comes from an older release. 9893e51e026Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9903e51e026Smrg$progname: and run autoconf again. 9913e51e026Smrg_LT_EOF 9923e51e026Smrg else 9933e51e026Smrg cat >&2 <<_LT_EOF 9943e51e026Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9953e51e026Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 9963e51e026Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9973e51e026Smrg$progname: and run autoconf again. 9983e51e026Smrg_LT_EOF 9993e51e026Smrg fi 10003e51e026Smrg else 10013e51e026Smrg cat >&2 <<_LT_EOF 10023e51e026Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 10033e51e026Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 10043e51e026Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 10053e51e026Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 10063e51e026Smrg_LT_EOF 10073e51e026Smrg fi 10083e51e026Smrg 10093e51e026Smrg exit $EXIT_MISMATCH 10103e51e026Smrg fi 10113e51e026Smrg} 10123e51e026Smrg 10133e51e026Smrg 10143e51e026Smrg# Shorthand for --mode=foo, only valid as the first argument 10153e51e026Smrgcase $1 in 10163e51e026Smrgclean|clea|cle|cl) 10173e51e026Smrg shift; set dummy --mode clean ${1+"$@"}; shift 10183e51e026Smrg ;; 10193e51e026Smrgcompile|compil|compi|comp|com|co|c) 10203e51e026Smrg shift; set dummy --mode compile ${1+"$@"}; shift 10213e51e026Smrg ;; 10223e51e026Smrgexecute|execut|execu|exec|exe|ex|e) 10233e51e026Smrg shift; set dummy --mode execute ${1+"$@"}; shift 10243e51e026Smrg ;; 10253e51e026Smrgfinish|finis|fini|fin|fi|f) 10263e51e026Smrg shift; set dummy --mode finish ${1+"$@"}; shift 10273e51e026Smrg ;; 10283e51e026Smrginstall|instal|insta|inst|ins|in|i) 10293e51e026Smrg shift; set dummy --mode install ${1+"$@"}; shift 10303e51e026Smrg ;; 10313e51e026Smrglink|lin|li|l) 10323e51e026Smrg shift; set dummy --mode link ${1+"$@"}; shift 10333e51e026Smrg ;; 10343e51e026Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 10353e51e026Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 10363e51e026Smrg ;; 10373e51e026Smrgesac 10383e51e026Smrg 10393e51e026Smrg 10403e51e026Smrg 10413e51e026Smrg# Option defaults: 10423e51e026Smrgopt_debug=: 10433e51e026Smrgopt_dry_run=false 10443e51e026Smrgopt_config=false 10453e51e026Smrgopt_preserve_dup_deps=false 10463e51e026Smrgopt_features=false 10473e51e026Smrgopt_finish=false 10483e51e026Smrgopt_help=false 10493e51e026Smrgopt_help_all=false 10503e51e026Smrgopt_silent=: 10513e51e026Smrgopt_warning=: 10523e51e026Smrgopt_verbose=: 10533e51e026Smrgopt_silent=false 10543e51e026Smrgopt_verbose=false 1055943345d3Smrg 1056943345d3Smrg 10573e51e026Smrg# Parse options once, thoroughly. This comes as soon as possible in the 10583e51e026Smrg# script to make things like `--version' happen as quickly as we can. 10593e51e026Smrg{ 10603e51e026Smrg # this just eases exit handling 10613e51e026Smrg while test $# -gt 0; do 1062a7b590b3Smrg opt="$1" 1063a7b590b3Smrg shift 1064a7b590b3Smrg case $opt in 10653e51e026Smrg --debug|-x) opt_debug='set -x' 1066a7b590b3Smrg func_echo "enabling shell trace mode" 1067a7b590b3Smrg $opt_debug 1068a7b590b3Smrg ;; 10693e51e026Smrg --dry-run|--dryrun|-n) 10703e51e026Smrg opt_dry_run=: 1071a7b590b3Smrg ;; 10723e51e026Smrg --config) 10733e51e026Smrg opt_config=: 10743e51e026Smrgfunc_config 10753e51e026Smrg ;; 10763e51e026Smrg --dlopen|-dlopen) 10773e51e026Smrg optarg="$1" 10783e51e026Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 10793e51e026Smrg}$optarg" 1080a7b590b3Smrg shift 1081a7b590b3Smrg ;; 1082a7b590b3Smrg --preserve-dup-deps) 10833e51e026Smrg opt_preserve_dup_deps=: 1084a7b590b3Smrg ;; 10853e51e026Smrg --features) 10863e51e026Smrg opt_features=: 10873e51e026Smrgfunc_features 10883e51e026Smrg ;; 10893e51e026Smrg --finish) 10903e51e026Smrg opt_finish=: 10913e51e026Smrgset dummy --mode finish ${1+"$@"}; shift 10923e51e026Smrg ;; 10933e51e026Smrg --help) 10943e51e026Smrg opt_help=: 10953e51e026Smrg ;; 10963e51e026Smrg --help-all) 10973e51e026Smrg opt_help_all=: 10983e51e026Smrgopt_help=': help-all' 10993e51e026Smrg ;; 11003e51e026Smrg --mode) 11013e51e026Smrg test $# = 0 && func_missing_arg $opt && break 11023e51e026Smrg optarg="$1" 11033e51e026Smrg opt_mode="$optarg" 11043e51e026Smrgcase $optarg in 11053e51e026Smrg # Valid mode arguments: 11063e51e026Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 11073e51e026Smrg 11083e51e026Smrg # Catch anything else as an error 11093e51e026Smrg *) func_error "invalid argument for $opt" 11103e51e026Smrg exit_cmd=exit 11113e51e026Smrg break 11123e51e026Smrg ;; 11133e51e026Smrgesac 11143e51e026Smrg shift 11153e51e026Smrg ;; 11163e51e026Smrg --no-silent|--no-quiet) 1117a7b590b3Smrg opt_silent=false 11183e51e026Smrgfunc_append preserve_args " $opt" 1119a7b590b3Smrg ;; 11203e51e026Smrg --no-warning|--no-warn) 11213e51e026Smrg opt_warning=false 11223e51e026Smrgfunc_append preserve_args " $opt" 11233e51e026Smrg ;; 11243e51e026Smrg --no-verbose) 11253e51e026Smrg opt_verbose=false 11263e51e026Smrgfunc_append preserve_args " $opt" 11273e51e026Smrg ;; 11283e51e026Smrg --silent|--quiet) 11293e51e026Smrg opt_silent=: 11303e51e026Smrgfunc_append preserve_args " $opt" 11313e51e026Smrg opt_verbose=false 11323e51e026Smrg ;; 11333e51e026Smrg --verbose|-v) 11343e51e026Smrg opt_verbose=: 11353e51e026Smrgfunc_append preserve_args " $opt" 11363e51e026Smrgopt_silent=false 11373e51e026Smrg ;; 11383e51e026Smrg --tag) 11393e51e026Smrg test $# = 0 && func_missing_arg $opt && break 11403e51e026Smrg optarg="$1" 11413e51e026Smrg opt_tag="$optarg" 11423e51e026Smrgfunc_append preserve_args " $opt $optarg" 11433e51e026Smrgfunc_enable_tag "$optarg" 1144a7b590b3Smrg shift 1145a7b590b3Smrg ;; 1146a7b590b3Smrg 11473e51e026Smrg -\?|-h) func_usage ;; 11483e51e026Smrg --help) func_help ;; 11493e51e026Smrg --version) func_version ;; 11503e51e026Smrg 1151a7b590b3Smrg # Separate optargs to long options: 11523e51e026Smrg --*=*) 11533e51e026Smrg func_split_long_opt "$opt" 11543e51e026Smrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155a7b590b3Smrg shift 1156a7b590b3Smrg ;; 1157a7b590b3Smrg 11583e51e026Smrg # Separate non-argument short options: 11593e51e026Smrg -\?*|-h*|-n*|-v*) 11603e51e026Smrg func_split_short_opt "$opt" 11613e51e026Smrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 11623e51e026Smrg shift 1163a7b590b3Smrg ;; 11643e51e026Smrg 11653e51e026Smrg --) break ;; 11663e51e026Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 11673e51e026Smrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168a7b590b3Smrg esac 1169a7b590b3Smrg done 1170a7b590b3Smrg 11713e51e026Smrg # Validate options: 11723e51e026Smrg 11733e51e026Smrg # save first non-option argument 11743e51e026Smrg if test "$#" -gt 0; then 11753e51e026Smrg nonopt="$opt" 11763e51e026Smrg shift 11773e51e026Smrg fi 11783e51e026Smrg 11793e51e026Smrg # preserve --debug 11803e51e026Smrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181a7b590b3Smrg 1182a7b590b3Smrg case $host in 1183a7b590b3Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 1184a7b590b3Smrg # don't eliminate duplications in $postdeps and $predeps 1185a7b590b3Smrg opt_duplicate_compiler_generated_deps=: 1186943345d3Smrg ;; 1187943345d3Smrg *) 11883e51e026Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189a7b590b3Smrg ;; 1190a7b590b3Smrg esac 1191943345d3Smrg 11923e51e026Smrg $opt_help || { 11933e51e026Smrg # Sanity checks first: 11943e51e026Smrg func_check_version_match 1195a7b590b3Smrg 11963e51e026Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 11973e51e026Smrg func_fatal_configuration "not configured to build any kind of library" 1198a7b590b3Smrg fi 1199a7b590b3Smrg 12003e51e026Smrg # Darwin sucks 12013e51e026Smrg eval std_shrext=\"$shrext_cmds\" 1202a7b590b3Smrg 12033e51e026Smrg # Only execute mode is allowed to have -dlopen flags. 12043e51e026Smrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 12053e51e026Smrg func_error "unrecognized option \`-dlopen'" 12063e51e026Smrg $ECHO "$help" 1>&2 12073e51e026Smrg exit $EXIT_FAILURE 12083e51e026Smrg fi 1209943345d3Smrg 12103e51e026Smrg # Change the help message to a mode-specific one. 12113e51e026Smrg generic_help="$help" 12123e51e026Smrg help="Try \`$progname --help --mode=$opt_mode' for more information." 12133e51e026Smrg } 1214a7b590b3Smrg 1215a7b590b3Smrg 12163e51e026Smrg # Bail if the options were screwed 12173e51e026Smrg $exit_cmd $EXIT_FAILURE 12183e51e026Smrg} 1219a7b590b3Smrg 1220a7b590b3Smrg 1221943345d3Smrg 1222943345d3Smrg 12233e51e026Smrg## ----------- ## 12243e51e026Smrg## Main. ## 12253e51e026Smrg## ----------- ## 1226943345d3Smrg 1227a7b590b3Smrg# func_lalib_p file 1228a7b590b3Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out 1230a7b590b3Smrg# determined imposters. 1231a7b590b3Smrgfunc_lalib_p () 1232a7b590b3Smrg{ 1233a7b590b3Smrg test -f "$1" && 1234a7b590b3Smrg $SED -e 4q "$1" 2>/dev/null \ 1235a7b590b3Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236a7b590b3Smrg} 1237943345d3Smrg 1238a7b590b3Smrg# func_lalib_unsafe_p file 1239a7b590b3Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240a7b590b3Smrg# This function implements the same check as func_lalib_p without 1241a7b590b3Smrg# resorting to external programs. To this end, it redirects stdin and 1242a7b590b3Smrg# closes it afterwards, without saving the original file descriptor. 1243a7b590b3Smrg# As a safety measure, use it only where a negative result would be 1244a7b590b3Smrg# fatal anyway. Works if `file' does not exist. 1245a7b590b3Smrgfunc_lalib_unsafe_p () 1246a7b590b3Smrg{ 1247a7b590b3Smrg lalib_p=no 1248a7b590b3Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249a7b590b3Smrg for lalib_p_l in 1 2 3 4 1250a7b590b3Smrg do 1251a7b590b3Smrg read lalib_p_line 1252a7b590b3Smrg case "$lalib_p_line" in 1253a7b590b3Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254a7b590b3Smrg esac 1255a7b590b3Smrg done 1256a7b590b3Smrg exec 0<&5 5<&- 1257a7b590b3Smrg fi 1258a7b590b3Smrg test "$lalib_p" = yes 1259a7b590b3Smrg} 1260943345d3Smrg 1261a7b590b3Smrg# func_ltwrapper_script_p file 1262a7b590b3Smrg# True iff FILE is a libtool wrapper script 1263a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out 1264a7b590b3Smrg# determined imposters. 1265a7b590b3Smrgfunc_ltwrapper_script_p () 1266a7b590b3Smrg{ 1267a7b590b3Smrg func_lalib_p "$1" 1268a7b590b3Smrg} 1269943345d3Smrg 1270a7b590b3Smrg# func_ltwrapper_executable_p file 1271a7b590b3Smrg# True iff FILE is a libtool wrapper executable 1272a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out 1273a7b590b3Smrg# determined imposters. 1274a7b590b3Smrgfunc_ltwrapper_executable_p () 1275a7b590b3Smrg{ 1276a7b590b3Smrg func_ltwrapper_exec_suffix= 1277a7b590b3Smrg case $1 in 1278a7b590b3Smrg *.exe) ;; 1279a7b590b3Smrg *) func_ltwrapper_exec_suffix=.exe ;; 1280a7b590b3Smrg esac 1281a7b590b3Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282a7b590b3Smrg} 1283943345d3Smrg 1284a7b590b3Smrg# func_ltwrapper_scriptname file 1285a7b590b3Smrg# Assumes file is an ltwrapper_executable 1286a7b590b3Smrg# uses $file to determine the appropriate filename for a 1287a7b590b3Smrg# temporary ltwrapper_script. 1288a7b590b3Smrgfunc_ltwrapper_scriptname () 1289a7b590b3Smrg{ 12903e51e026Smrg func_dirname_and_basename "$1" "" "." 12913e51e026Smrg func_stripname '' '.exe' "$func_basename_result" 12923e51e026Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293a7b590b3Smrg} 1294a7b590b3Smrg 1295a7b590b3Smrg# func_ltwrapper_p file 1296a7b590b3Smrg# True iff FILE is a libtool wrapper script or wrapper executable 1297a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out 1298a7b590b3Smrg# determined imposters. 1299a7b590b3Smrgfunc_ltwrapper_p () 1300a7b590b3Smrg{ 1301a7b590b3Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302a7b590b3Smrg} 1303a7b590b3Smrg 1304a7b590b3Smrg 1305a7b590b3Smrg# func_execute_cmds commands fail_cmd 1306a7b590b3Smrg# Execute tilde-delimited COMMANDS. 1307a7b590b3Smrg# If FAIL_CMD is given, eval that upon failure. 1308a7b590b3Smrg# FAIL_CMD may read-access the current command in variable CMD! 1309a7b590b3Smrgfunc_execute_cmds () 1310a7b590b3Smrg{ 1311a7b590b3Smrg $opt_debug 1312a7b590b3Smrg save_ifs=$IFS; IFS='~' 1313a7b590b3Smrg for cmd in $1; do 1314a7b590b3Smrg IFS=$save_ifs 1315a7b590b3Smrg eval cmd=\"$cmd\" 1316a7b590b3Smrg func_show_eval "$cmd" "${2-:}" 1317a7b590b3Smrg done 1318a7b590b3Smrg IFS=$save_ifs 1319a7b590b3Smrg} 1320a7b590b3Smrg 1321a7b590b3Smrg 1322a7b590b3Smrg# func_source file 1323a7b590b3Smrg# Source FILE, adding directory component if necessary. 1324a7b590b3Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325a7b590b3Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326a7b590b3Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327a7b590b3Smrg# `FILE.' does not work on cygwin managed mounts. 1328a7b590b3Smrgfunc_source () 1329a7b590b3Smrg{ 1330a7b590b3Smrg $opt_debug 1331a7b590b3Smrg case $1 in 1332a7b590b3Smrg */* | *\\*) . "$1" ;; 1333a7b590b3Smrg *) . "./$1" ;; 1334a7b590b3Smrg esac 1335a7b590b3Smrg} 1336a7b590b3Smrg 1337a7b590b3Smrg 13383e51e026Smrg# func_resolve_sysroot PATH 13393e51e026Smrg# Replace a leading = in PATH with a sysroot. Store the result into 13403e51e026Smrg# func_resolve_sysroot_result 13413e51e026Smrgfunc_resolve_sysroot () 13423e51e026Smrg{ 13433e51e026Smrg func_resolve_sysroot_result=$1 13443e51e026Smrg case $func_resolve_sysroot_result in 13453e51e026Smrg =*) 13463e51e026Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 13473e51e026Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 13483e51e026Smrg ;; 13493e51e026Smrg esac 13503e51e026Smrg} 13513e51e026Smrg 13523e51e026Smrg# func_replace_sysroot PATH 13533e51e026Smrg# If PATH begins with the sysroot, replace it with = and 13543e51e026Smrg# store the result into func_replace_sysroot_result. 13553e51e026Smrgfunc_replace_sysroot () 13563e51e026Smrg{ 13573e51e026Smrg case "$lt_sysroot:$1" in 13583e51e026Smrg ?*:"$lt_sysroot"*) 13593e51e026Smrg func_stripname "$lt_sysroot" '' "$1" 13603e51e026Smrg func_replace_sysroot_result="=$func_stripname_result" 13613e51e026Smrg ;; 13623e51e026Smrg *) 13633e51e026Smrg # Including no sysroot. 13643e51e026Smrg func_replace_sysroot_result=$1 13653e51e026Smrg ;; 13663e51e026Smrg esac 13673e51e026Smrg} 13683e51e026Smrg 1369a7b590b3Smrg# func_infer_tag arg 1370a7b590b3Smrg# Infer tagged configuration to use if any are available and 1371a7b590b3Smrg# if one wasn't chosen via the "--tag" command line option. 1372a7b590b3Smrg# Only attempt this if the compiler in the base compile 1373a7b590b3Smrg# command doesn't match the default compiler. 1374a7b590b3Smrg# arg is usually of the form 'gcc ...' 1375a7b590b3Smrgfunc_infer_tag () 1376a7b590b3Smrg{ 1377a7b590b3Smrg $opt_debug 1378a7b590b3Smrg if test -n "$available_tags" && test -z "$tagname"; then 1379a7b590b3Smrg CC_quoted= 1380a7b590b3Smrg for arg in $CC; do 13813e51e026Smrg func_append_quoted CC_quoted "$arg" 1382a7b590b3Smrg done 13833e51e026Smrg CC_expanded=`func_echo_all $CC` 13843e51e026Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385a7b590b3Smrg case $@ in 1386a7b590b3Smrg # Blanks in the command may have been stripped by the calling shell, 1387a7b590b3Smrg # but not from the CC environment variable when configure was run. 13883e51e026Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 13893e51e026Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390a7b590b3Smrg # Blanks at the start of $base_compile will cause this to fail 1391a7b590b3Smrg # if we don't check for them as well. 1392a7b590b3Smrg *) 1393a7b590b3Smrg for z in $available_tags; do 1394a7b590b3Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395a7b590b3Smrg # Evaluate the configuration. 1396a7b590b3Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397a7b590b3Smrg CC_quoted= 1398a7b590b3Smrg for arg in $CC; do 1399a7b590b3Smrg # Double-quote args containing other shell metacharacters. 14003e51e026Smrg func_append_quoted CC_quoted "$arg" 1401a7b590b3Smrg done 14023e51e026Smrg CC_expanded=`func_echo_all $CC` 14033e51e026Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404a7b590b3Smrg case "$@ " in 14053e51e026Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 14063e51e026Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407a7b590b3Smrg # The compiler in the base compile command matches 1408a7b590b3Smrg # the one in the tagged configuration. 1409a7b590b3Smrg # Assume this is the tagged configuration we want. 1410a7b590b3Smrg tagname=$z 1411a7b590b3Smrg break 1412a7b590b3Smrg ;; 1413a7b590b3Smrg esac 1414a7b590b3Smrg fi 1415a7b590b3Smrg done 1416a7b590b3Smrg # If $tagname still isn't set, then no tagged configuration 1417a7b590b3Smrg # was found and let the user know that the "--tag" command 1418a7b590b3Smrg # line option must be used. 1419a7b590b3Smrg if test -z "$tagname"; then 1420a7b590b3Smrg func_echo "unable to infer tagged configuration" 1421a7b590b3Smrg func_fatal_error "specify a tag with \`--tag'" 1422a7b590b3Smrg# else 1423a7b590b3Smrg# func_verbose "using $tagname tagged configuration" 1424a7b590b3Smrg fi 1425a7b590b3Smrg ;; 1426a7b590b3Smrg esac 1427a7b590b3Smrg fi 1428a7b590b3Smrg} 1429a7b590b3Smrg 1430a7b590b3Smrg 1431a7b590b3Smrg 1432a7b590b3Smrg# func_write_libtool_object output_name pic_name nonpic_name 1433a7b590b3Smrg# Create a libtool object file (analogous to a ".la" file), 1434a7b590b3Smrg# but don't create it if we're doing a dry run. 1435a7b590b3Smrgfunc_write_libtool_object () 1436a7b590b3Smrg{ 1437a7b590b3Smrg write_libobj=${1} 1438a7b590b3Smrg if test "$build_libtool_libs" = yes; then 1439a7b590b3Smrg write_lobj=\'${2}\' 1440a7b590b3Smrg else 1441a7b590b3Smrg write_lobj=none 1442a7b590b3Smrg fi 1443a7b590b3Smrg 1444a7b590b3Smrg if test "$build_old_libs" = yes; then 1445a7b590b3Smrg write_oldobj=\'${3}\' 1446a7b590b3Smrg else 1447a7b590b3Smrg write_oldobj=none 1448a7b590b3Smrg fi 1449a7b590b3Smrg 1450a7b590b3Smrg $opt_dry_run || { 1451a7b590b3Smrg cat >${write_libobj}T <<EOF 1452a7b590b3Smrg# $write_libobj - a libtool object file 1453a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454a7b590b3Smrg# 1455a7b590b3Smrg# Please DO NOT delete this file! 1456a7b590b3Smrg# It is necessary for linking the library. 1457a7b590b3Smrg 1458a7b590b3Smrg# Name of the PIC object. 1459a7b590b3Smrgpic_object=$write_lobj 1460a7b590b3Smrg 1461a7b590b3Smrg# Name of the non-PIC object 1462a7b590b3Smrgnon_pic_object=$write_oldobj 1463a7b590b3Smrg 1464a7b590b3SmrgEOF 1465a7b590b3Smrg $MV "${write_libobj}T" "${write_libobj}" 1466a7b590b3Smrg } 1467a7b590b3Smrg} 1468a7b590b3Smrg 14693e51e026Smrg 14703e51e026Smrg################################################## 14713e51e026Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 14723e51e026Smrg################################################## 14733e51e026Smrg 14743e51e026Smrg# func_convert_core_file_wine_to_w32 ARG 14753e51e026Smrg# Helper function used by file name conversion functions when $build is *nix, 14763e51e026Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 14773e51e026Smrg# correctly configured wine environment available, with the winepath program 14783e51e026Smrg# in $build's $PATH. 14793e51e026Smrg# 14803e51e026Smrg# ARG is the $build file name to be converted to w32 format. 14813e51e026Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 14823e51e026Smrg# be empty on error (or when ARG is empty) 14833e51e026Smrgfunc_convert_core_file_wine_to_w32 () 14843e51e026Smrg{ 14853e51e026Smrg $opt_debug 14863e51e026Smrg func_convert_core_file_wine_to_w32_result="$1" 14873e51e026Smrg if test -n "$1"; then 14883e51e026Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 14893e51e026Smrg # are forced to check the contents of stdout. On the other hand, if the 14903e51e026Smrg # command is not found, the shell will set an exit code of 127 and print 14913e51e026Smrg # *an error message* to stdout. So we must check for both error code of 14923e51e026Smrg # zero AND non-empty stdout, which explains the odd construction: 14933e51e026Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 14943e51e026Smrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 14953e51e026Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 14963e51e026Smrg $SED -e "$lt_sed_naive_backslashify"` 14973e51e026Smrg else 14983e51e026Smrg func_convert_core_file_wine_to_w32_result= 14993e51e026Smrg fi 15003e51e026Smrg fi 15013e51e026Smrg} 15023e51e026Smrg# end: func_convert_core_file_wine_to_w32 15033e51e026Smrg 15043e51e026Smrg 15053e51e026Smrg# func_convert_core_path_wine_to_w32 ARG 15063e51e026Smrg# Helper function used by path conversion functions when $build is *nix, and 15073e51e026Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 15083e51e026Smrg# configured wine environment available, with the winepath program in $build's 15093e51e026Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 15103e51e026Smrg# 15113e51e026Smrg# ARG is path to be converted from $build format to win32. 15123e51e026Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 15133e51e026Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 15143e51e026Smrg# are convertible, then the result may be empty. 15153e51e026Smrgfunc_convert_core_path_wine_to_w32 () 15163e51e026Smrg{ 15173e51e026Smrg $opt_debug 15183e51e026Smrg # unfortunately, winepath doesn't convert paths, only file names 15193e51e026Smrg func_convert_core_path_wine_to_w32_result="" 15203e51e026Smrg if test -n "$1"; then 15213e51e026Smrg oldIFS=$IFS 15223e51e026Smrg IFS=: 15233e51e026Smrg for func_convert_core_path_wine_to_w32_f in $1; do 15243e51e026Smrg IFS=$oldIFS 15253e51e026Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 15263e51e026Smrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 15273e51e026Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 15283e51e026Smrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 15293e51e026Smrg else 15303e51e026Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 15313e51e026Smrg fi 15323e51e026Smrg fi 15333e51e026Smrg done 15343e51e026Smrg IFS=$oldIFS 15353e51e026Smrg fi 15363e51e026Smrg} 15373e51e026Smrg# end: func_convert_core_path_wine_to_w32 15383e51e026Smrg 15393e51e026Smrg 15403e51e026Smrg# func_cygpath ARGS... 15413e51e026Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 15423e51e026Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 15433e51e026Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 15443e51e026Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 15453e51e026Smrg# file name or path is assumed to be in w32 format, as previously converted 15463e51e026Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 15473e51e026Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 15483e51e026Smrg# Cygwin format). Returns an empty string on error. 15493e51e026Smrg# 15503e51e026Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 15513e51e026Smrg# be converted. 15523e51e026Smrg# 15533e51e026Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 15543e51e026Smrg# environment variable; do not put it in $PATH. 15553e51e026Smrgfunc_cygpath () 15563e51e026Smrg{ 15573e51e026Smrg $opt_debug 15583e51e026Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 15593e51e026Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 15603e51e026Smrg if test "$?" -ne 0; then 15613e51e026Smrg # on failure, ensure result is empty 15623e51e026Smrg func_cygpath_result= 15633e51e026Smrg fi 15643e51e026Smrg else 15653e51e026Smrg func_cygpath_result= 15663e51e026Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 15673e51e026Smrg fi 15683e51e026Smrg} 15693e51e026Smrg#end: func_cygpath 15703e51e026Smrg 15713e51e026Smrg 15723e51e026Smrg# func_convert_core_msys_to_w32 ARG 15733e51e026Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 15743e51e026Smrg# result in func_convert_core_msys_to_w32_result. 15753e51e026Smrgfunc_convert_core_msys_to_w32 () 15763e51e026Smrg{ 15773e51e026Smrg $opt_debug 15783e51e026Smrg # awkward: cmd appends spaces to result 15793e51e026Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 15803e51e026Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 15813e51e026Smrg} 15823e51e026Smrg#end: func_convert_core_msys_to_w32 15833e51e026Smrg 15843e51e026Smrg 15853e51e026Smrg# func_convert_file_check ARG1 ARG2 15863e51e026Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 15873e51e026Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 15883e51e026Smrg# func_to_host_file_result to ARG1). 15893e51e026Smrgfunc_convert_file_check () 15903e51e026Smrg{ 15913e51e026Smrg $opt_debug 15923e51e026Smrg if test -z "$2" && test -n "$1" ; then 15933e51e026Smrg func_error "Could not determine host file name corresponding to" 15943e51e026Smrg func_error " \`$1'" 15953e51e026Smrg func_error "Continuing, but uninstalled executables may not work." 15963e51e026Smrg # Fallback: 15973e51e026Smrg func_to_host_file_result="$1" 15983e51e026Smrg fi 15993e51e026Smrg} 16003e51e026Smrg# end func_convert_file_check 16013e51e026Smrg 16023e51e026Smrg 16033e51e026Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 16043e51e026Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 16053e51e026Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 16063e51e026Smrg# func_to_host_file_result to a simplistic fallback value (see below). 16073e51e026Smrgfunc_convert_path_check () 16083e51e026Smrg{ 16093e51e026Smrg $opt_debug 16103e51e026Smrg if test -z "$4" && test -n "$3"; then 16113e51e026Smrg func_error "Could not determine the host path corresponding to" 16123e51e026Smrg func_error " \`$3'" 16133e51e026Smrg func_error "Continuing, but uninstalled executables may not work." 16143e51e026Smrg # Fallback. This is a deliberately simplistic "conversion" and 16153e51e026Smrg # should not be "improved". See libtool.info. 16163e51e026Smrg if test "x$1" != "x$2"; then 16173e51e026Smrg lt_replace_pathsep_chars="s|$1|$2|g" 16183e51e026Smrg func_to_host_path_result=`echo "$3" | 16193e51e026Smrg $SED -e "$lt_replace_pathsep_chars"` 16203e51e026Smrg else 16213e51e026Smrg func_to_host_path_result="$3" 16223e51e026Smrg fi 16233e51e026Smrg fi 16243e51e026Smrg} 16253e51e026Smrg# end func_convert_path_check 16263e51e026Smrg 16273e51e026Smrg 16283e51e026Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 16293e51e026Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 16303e51e026Smrg# and appending REPL if ORIG matches BACKPAT. 16313e51e026Smrgfunc_convert_path_front_back_pathsep () 16323e51e026Smrg{ 16333e51e026Smrg $opt_debug 16343e51e026Smrg case $4 in 16353e51e026Smrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 16363e51e026Smrg ;; 16373e51e026Smrg esac 16383e51e026Smrg case $4 in 16393e51e026Smrg $2 ) func_append func_to_host_path_result "$3" 16403e51e026Smrg ;; 16413e51e026Smrg esac 16423e51e026Smrg} 16433e51e026Smrg# end func_convert_path_front_back_pathsep 16443e51e026Smrg 16453e51e026Smrg 16463e51e026Smrg################################################## 16473e51e026Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 16483e51e026Smrg################################################## 16493e51e026Smrg# invoked via `$to_host_file_cmd ARG' 16503e51e026Smrg# 16513e51e026Smrg# In each case, ARG is the path to be converted from $build to $host format. 16523e51e026Smrg# Result will be available in $func_to_host_file_result. 16533e51e026Smrg 16543e51e026Smrg 16553e51e026Smrg# func_to_host_file ARG 16563e51e026Smrg# Converts the file name ARG from $build format to $host format. Return result 16573e51e026Smrg# in func_to_host_file_result. 16583e51e026Smrgfunc_to_host_file () 16593e51e026Smrg{ 16603e51e026Smrg $opt_debug 16613e51e026Smrg $to_host_file_cmd "$1" 16623e51e026Smrg} 16633e51e026Smrg# end func_to_host_file 16643e51e026Smrg 16653e51e026Smrg 16663e51e026Smrg# func_to_tool_file ARG LAZY 16673e51e026Smrg# converts the file name ARG from $build format to toolchain format. Return 16683e51e026Smrg# result in func_to_tool_file_result. If the conversion in use is listed 16693e51e026Smrg# in (the comma separated) LAZY, no conversion takes place. 16703e51e026Smrgfunc_to_tool_file () 16713e51e026Smrg{ 16723e51e026Smrg $opt_debug 16733e51e026Smrg case ,$2, in 16743e51e026Smrg *,"$to_tool_file_cmd",*) 16753e51e026Smrg func_to_tool_file_result=$1 16763e51e026Smrg ;; 16773e51e026Smrg *) 16783e51e026Smrg $to_tool_file_cmd "$1" 16793e51e026Smrg func_to_tool_file_result=$func_to_host_file_result 16803e51e026Smrg ;; 16813e51e026Smrg esac 16823e51e026Smrg} 16833e51e026Smrg# end func_to_tool_file 16843e51e026Smrg 16853e51e026Smrg 16863e51e026Smrg# func_convert_file_noop ARG 16873e51e026Smrg# Copy ARG to func_to_host_file_result. 16883e51e026Smrgfunc_convert_file_noop () 16893e51e026Smrg{ 16903e51e026Smrg func_to_host_file_result="$1" 16913e51e026Smrg} 16923e51e026Smrg# end func_convert_file_noop 16933e51e026Smrg 16943e51e026Smrg 16953e51e026Smrg# func_convert_file_msys_to_w32 ARG 16963e51e026Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 16973e51e026Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 16983e51e026Smrg# func_to_host_file_result. 16993e51e026Smrgfunc_convert_file_msys_to_w32 () 17003e51e026Smrg{ 17013e51e026Smrg $opt_debug 17023e51e026Smrg func_to_host_file_result="$1" 17033e51e026Smrg if test -n "$1"; then 17043e51e026Smrg func_convert_core_msys_to_w32 "$1" 17053e51e026Smrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 17063e51e026Smrg fi 17073e51e026Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17083e51e026Smrg} 17093e51e026Smrg# end func_convert_file_msys_to_w32 17103e51e026Smrg 17113e51e026Smrg 17123e51e026Smrg# func_convert_file_cygwin_to_w32 ARG 17133e51e026Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 17143e51e026Smrg# func_to_host_file_result. 17153e51e026Smrgfunc_convert_file_cygwin_to_w32 () 17163e51e026Smrg{ 17173e51e026Smrg $opt_debug 17183e51e026Smrg func_to_host_file_result="$1" 17193e51e026Smrg if test -n "$1"; then 17203e51e026Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 17213e51e026Smrg # LT_CYGPATH in this case. 17223e51e026Smrg func_to_host_file_result=`cygpath -m "$1"` 17233e51e026Smrg fi 17243e51e026Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17253e51e026Smrg} 17263e51e026Smrg# end func_convert_file_cygwin_to_w32 17273e51e026Smrg 17283e51e026Smrg 17293e51e026Smrg# func_convert_file_nix_to_w32 ARG 17303e51e026Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 17313e51e026Smrg# and a working winepath. Returns result in func_to_host_file_result. 17323e51e026Smrgfunc_convert_file_nix_to_w32 () 17333e51e026Smrg{ 17343e51e026Smrg $opt_debug 17353e51e026Smrg func_to_host_file_result="$1" 17363e51e026Smrg if test -n "$1"; then 17373e51e026Smrg func_convert_core_file_wine_to_w32 "$1" 17383e51e026Smrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 17393e51e026Smrg fi 17403e51e026Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17413e51e026Smrg} 17423e51e026Smrg# end func_convert_file_nix_to_w32 17433e51e026Smrg 17443e51e026Smrg 17453e51e026Smrg# func_convert_file_msys_to_cygwin ARG 17463e51e026Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 17473e51e026Smrg# Returns result in func_to_host_file_result. 17483e51e026Smrgfunc_convert_file_msys_to_cygwin () 17493e51e026Smrg{ 17503e51e026Smrg $opt_debug 17513e51e026Smrg func_to_host_file_result="$1" 17523e51e026Smrg if test -n "$1"; then 17533e51e026Smrg func_convert_core_msys_to_w32 "$1" 17543e51e026Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 17553e51e026Smrg func_to_host_file_result="$func_cygpath_result" 17563e51e026Smrg fi 17573e51e026Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17583e51e026Smrg} 17593e51e026Smrg# end func_convert_file_msys_to_cygwin 17603e51e026Smrg 17613e51e026Smrg 17623e51e026Smrg# func_convert_file_nix_to_cygwin ARG 17633e51e026Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 17643e51e026Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 17653e51e026Smrg# in func_to_host_file_result. 17663e51e026Smrgfunc_convert_file_nix_to_cygwin () 17673e51e026Smrg{ 17683e51e026Smrg $opt_debug 17693e51e026Smrg func_to_host_file_result="$1" 17703e51e026Smrg if test -n "$1"; then 17713e51e026Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 17723e51e026Smrg func_convert_core_file_wine_to_w32 "$1" 17733e51e026Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 17743e51e026Smrg func_to_host_file_result="$func_cygpath_result" 17753e51e026Smrg fi 17763e51e026Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17773e51e026Smrg} 17783e51e026Smrg# end func_convert_file_nix_to_cygwin 17793e51e026Smrg 17803e51e026Smrg 17813e51e026Smrg############################################# 17823e51e026Smrg# $build to $host PATH CONVERSION FUNCTIONS # 17833e51e026Smrg############################################# 17843e51e026Smrg# invoked via `$to_host_path_cmd ARG' 17853e51e026Smrg# 17863e51e026Smrg# In each case, ARG is the path to be converted from $build to $host format. 17873e51e026Smrg# The result will be available in $func_to_host_path_result. 17883e51e026Smrg# 17893e51e026Smrg# Path separators are also converted from $build format to $host format. If 17903e51e026Smrg# ARG begins or ends with a path separator character, it is preserved (but 17913e51e026Smrg# converted to $host format) on output. 17923e51e026Smrg# 17933e51e026Smrg# All path conversion functions are named using the following convention: 17943e51e026Smrg# file name conversion function : func_convert_file_X_to_Y () 17953e51e026Smrg# path conversion function : func_convert_path_X_to_Y () 17963e51e026Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 17973e51e026Smrg# same. If conversion functions are added for new $build/$host combinations, 17983e51e026Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 17993e51e026Smrg# will break. 18003e51e026Smrg 18013e51e026Smrg 18023e51e026Smrg# func_init_to_host_path_cmd 18033e51e026Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 18043e51e026Smrg# appropriate value, based on the value of $to_host_file_cmd. 18053e51e026Smrgto_host_path_cmd= 18063e51e026Smrgfunc_init_to_host_path_cmd () 18073e51e026Smrg{ 18083e51e026Smrg $opt_debug 18093e51e026Smrg if test -z "$to_host_path_cmd"; then 18103e51e026Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 18113e51e026Smrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 18123e51e026Smrg fi 18133e51e026Smrg} 18143e51e026Smrg 18153e51e026Smrg 18163e51e026Smrg# func_to_host_path ARG 18173e51e026Smrg# Converts the path ARG from $build format to $host format. Return result 18183e51e026Smrg# in func_to_host_path_result. 18193e51e026Smrgfunc_to_host_path () 18203e51e026Smrg{ 18213e51e026Smrg $opt_debug 18223e51e026Smrg func_init_to_host_path_cmd 18233e51e026Smrg $to_host_path_cmd "$1" 18243e51e026Smrg} 18253e51e026Smrg# end func_to_host_path 18263e51e026Smrg 18273e51e026Smrg 18283e51e026Smrg# func_convert_path_noop ARG 18293e51e026Smrg# Copy ARG to func_to_host_path_result. 18303e51e026Smrgfunc_convert_path_noop () 18313e51e026Smrg{ 18323e51e026Smrg func_to_host_path_result="$1" 18333e51e026Smrg} 18343e51e026Smrg# end func_convert_path_noop 18353e51e026Smrg 18363e51e026Smrg 18373e51e026Smrg# func_convert_path_msys_to_w32 ARG 18383e51e026Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 18393e51e026Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 18403e51e026Smrg# func_to_host_path_result. 18413e51e026Smrgfunc_convert_path_msys_to_w32 () 18423e51e026Smrg{ 18433e51e026Smrg $opt_debug 18443e51e026Smrg func_to_host_path_result="$1" 18453e51e026Smrg if test -n "$1"; then 18463e51e026Smrg # Remove leading and trailing path separator characters from ARG. MSYS 18473e51e026Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 18483e51e026Smrg # and winepath ignores them completely. 18493e51e026Smrg func_stripname : : "$1" 18503e51e026Smrg func_to_host_path_tmp1=$func_stripname_result 18513e51e026Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 18523e51e026Smrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 18533e51e026Smrg func_convert_path_check : ";" \ 18543e51e026Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18553e51e026Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18563e51e026Smrg fi 18573e51e026Smrg} 18583e51e026Smrg# end func_convert_path_msys_to_w32 18593e51e026Smrg 18603e51e026Smrg 18613e51e026Smrg# func_convert_path_cygwin_to_w32 ARG 18623e51e026Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 18633e51e026Smrg# func_to_host_file_result. 18643e51e026Smrgfunc_convert_path_cygwin_to_w32 () 18653e51e026Smrg{ 18663e51e026Smrg $opt_debug 18673e51e026Smrg func_to_host_path_result="$1" 18683e51e026Smrg if test -n "$1"; then 18693e51e026Smrg # See func_convert_path_msys_to_w32: 18703e51e026Smrg func_stripname : : "$1" 18713e51e026Smrg func_to_host_path_tmp1=$func_stripname_result 18723e51e026Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 18733e51e026Smrg func_convert_path_check : ";" \ 18743e51e026Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18753e51e026Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18763e51e026Smrg fi 18773e51e026Smrg} 18783e51e026Smrg# end func_convert_path_cygwin_to_w32 18793e51e026Smrg 18803e51e026Smrg 18813e51e026Smrg# func_convert_path_nix_to_w32 ARG 18823e51e026Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 18833e51e026Smrg# a working winepath. Returns result in func_to_host_file_result. 18843e51e026Smrgfunc_convert_path_nix_to_w32 () 18853e51e026Smrg{ 18863e51e026Smrg $opt_debug 18873e51e026Smrg func_to_host_path_result="$1" 18883e51e026Smrg if test -n "$1"; then 18893e51e026Smrg # See func_convert_path_msys_to_w32: 18903e51e026Smrg func_stripname : : "$1" 18913e51e026Smrg func_to_host_path_tmp1=$func_stripname_result 18923e51e026Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 18933e51e026Smrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 18943e51e026Smrg func_convert_path_check : ";" \ 18953e51e026Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18963e51e026Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18973e51e026Smrg fi 18983e51e026Smrg} 18993e51e026Smrg# end func_convert_path_nix_to_w32 19003e51e026Smrg 19013e51e026Smrg 19023e51e026Smrg# func_convert_path_msys_to_cygwin ARG 19033e51e026Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 19043e51e026Smrg# Returns result in func_to_host_file_result. 19053e51e026Smrgfunc_convert_path_msys_to_cygwin () 19063e51e026Smrg{ 19073e51e026Smrg $opt_debug 19083e51e026Smrg func_to_host_path_result="$1" 19093e51e026Smrg if test -n "$1"; then 19103e51e026Smrg # See func_convert_path_msys_to_w32: 19113e51e026Smrg func_stripname : : "$1" 19123e51e026Smrg func_to_host_path_tmp1=$func_stripname_result 19133e51e026Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 19143e51e026Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 19153e51e026Smrg func_to_host_path_result="$func_cygpath_result" 19163e51e026Smrg func_convert_path_check : : \ 19173e51e026Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19183e51e026Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19193e51e026Smrg fi 19203e51e026Smrg} 19213e51e026Smrg# end func_convert_path_msys_to_cygwin 19223e51e026Smrg 19233e51e026Smrg 19243e51e026Smrg# func_convert_path_nix_to_cygwin ARG 19253e51e026Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 19263e51e026Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 19273e51e026Smrg# func_to_host_file_result. 19283e51e026Smrgfunc_convert_path_nix_to_cygwin () 19293e51e026Smrg{ 19303e51e026Smrg $opt_debug 19313e51e026Smrg func_to_host_path_result="$1" 19323e51e026Smrg if test -n "$1"; then 19333e51e026Smrg # Remove leading and trailing path separator characters from 19343e51e026Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 19353e51e026Smrg # into '.;' and ';.', and winepath ignores them completely. 19363e51e026Smrg func_stripname : : "$1" 19373e51e026Smrg func_to_host_path_tmp1=$func_stripname_result 19383e51e026Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 19393e51e026Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 19403e51e026Smrg func_to_host_path_result="$func_cygpath_result" 19413e51e026Smrg func_convert_path_check : : \ 19423e51e026Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19433e51e026Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19443e51e026Smrg fi 19453e51e026Smrg} 19463e51e026Smrg# end func_convert_path_nix_to_cygwin 19473e51e026Smrg 19483e51e026Smrg 1949a7b590b3Smrg# func_mode_compile arg... 1950a7b590b3Smrgfunc_mode_compile () 1951a7b590b3Smrg{ 1952a7b590b3Smrg $opt_debug 1953a7b590b3Smrg # Get the compilation command and the source file. 1954a7b590b3Smrg base_compile= 1955a7b590b3Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956a7b590b3Smrg suppress_opt=yes 1957a7b590b3Smrg suppress_output= 1958a7b590b3Smrg arg_mode=normal 1959a7b590b3Smrg libobj= 1960a7b590b3Smrg later= 1961a7b590b3Smrg pie_flag= 1962a7b590b3Smrg 1963a7b590b3Smrg for arg 1964a7b590b3Smrg do 1965a7b590b3Smrg case $arg_mode in 1966a7b590b3Smrg arg ) 1967a7b590b3Smrg # do not "continue". Instead, add this to base_compile 1968a7b590b3Smrg lastarg="$arg" 1969a7b590b3Smrg arg_mode=normal 1970a7b590b3Smrg ;; 1971a7b590b3Smrg 1972a7b590b3Smrg target ) 1973a7b590b3Smrg libobj="$arg" 1974a7b590b3Smrg arg_mode=normal 1975a7b590b3Smrg continue 1976a7b590b3Smrg ;; 1977a7b590b3Smrg 1978a7b590b3Smrg normal ) 1979a7b590b3Smrg # Accept any command-line options. 1980a7b590b3Smrg case $arg in 1981a7b590b3Smrg -o) 1982a7b590b3Smrg test -n "$libobj" && \ 1983a7b590b3Smrg func_fatal_error "you cannot specify \`-o' more than once" 1984a7b590b3Smrg arg_mode=target 1985a7b590b3Smrg continue 1986a7b590b3Smrg ;; 1987a7b590b3Smrg 1988a7b590b3Smrg -pie | -fpie | -fPIE) 19893e51e026Smrg func_append pie_flag " $arg" 1990a7b590b3Smrg continue 1991a7b590b3Smrg ;; 1992a7b590b3Smrg 1993a7b590b3Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 19943e51e026Smrg func_append later " $arg" 1995a7b590b3Smrg continue 1996a7b590b3Smrg ;; 1997a7b590b3Smrg 1998a7b590b3Smrg -no-suppress) 1999943345d3Smrg suppress_opt=no 2000943345d3Smrg continue 2001943345d3Smrg ;; 2002943345d3Smrg 2003943345d3Smrg -Xcompiler) 2004943345d3Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 2005943345d3Smrg continue # The current "srcfile" will either be retained or 2006943345d3Smrg ;; # replaced later. I would guess that would be a bug. 2007943345d3Smrg 2008943345d3Smrg -Wc,*) 2009a7b590b3Smrg func_stripname '-Wc,' '' "$arg" 2010a7b590b3Smrg args=$func_stripname_result 2011943345d3Smrg lastarg= 2012943345d3Smrg save_ifs="$IFS"; IFS=',' 2013a7b590b3Smrg for arg in $args; do 2014943345d3Smrg IFS="$save_ifs" 20153e51e026Smrg func_append_quoted lastarg "$arg" 2016943345d3Smrg done 2017943345d3Smrg IFS="$save_ifs" 2018a7b590b3Smrg func_stripname ' ' '' "$lastarg" 2019a7b590b3Smrg lastarg=$func_stripname_result 2020943345d3Smrg 2021943345d3Smrg # Add the arguments to base_compile. 20223e51e026Smrg func_append base_compile " $lastarg" 2023943345d3Smrg continue 2024943345d3Smrg ;; 2025943345d3Smrg 2026a7b590b3Smrg *) 2027943345d3Smrg # Accept the current argument as the source file. 2028943345d3Smrg # The previous "srcfile" becomes the current argument. 2029943345d3Smrg # 2030943345d3Smrg lastarg="$srcfile" 2031943345d3Smrg srcfile="$arg" 2032943345d3Smrg ;; 2033943345d3Smrg esac # case $arg 2034943345d3Smrg ;; 2035943345d3Smrg esac # case $arg_mode 2036943345d3Smrg 2037943345d3Smrg # Aesthetically quote the previous argument. 20383e51e026Smrg func_append_quoted base_compile "$lastarg" 2039943345d3Smrg done # for arg 2040943345d3Smrg 2041943345d3Smrg case $arg_mode in 2042943345d3Smrg arg) 2043a7b590b3Smrg func_fatal_error "you must specify an argument for -Xcompile" 2044943345d3Smrg ;; 2045943345d3Smrg target) 2046a7b590b3Smrg func_fatal_error "you must specify a target with \`-o'" 2047943345d3Smrg ;; 2048943345d3Smrg *) 2049943345d3Smrg # Get the name of the library object. 2050a7b590b3Smrg test -z "$libobj" && { 2051a7b590b3Smrg func_basename "$srcfile" 2052a7b590b3Smrg libobj="$func_basename_result" 2053a7b590b3Smrg } 2054943345d3Smrg ;; 2055943345d3Smrg esac 2056943345d3Smrg 2057943345d3Smrg # Recognize several different file suffixes. 2058943345d3Smrg # If the user specifies -o file.o, it is replaced with file.lo 2059943345d3Smrg case $libobj in 2060a7b590b3Smrg *.[cCFSifmso] | \ 2061a7b590b3Smrg *.ada | *.adb | *.ads | *.asm | \ 2062a7b590b3Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 20633e51e026Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064a7b590b3Smrg func_xform "$libobj" 2065a7b590b3Smrg libobj=$func_xform_result 2066a7b590b3Smrg ;; 2067943345d3Smrg esac 2068943345d3Smrg 2069943345d3Smrg case $libobj in 2070a7b590b3Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071943345d3Smrg *) 2072a7b590b3Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2073943345d3Smrg ;; 2074943345d3Smrg esac 2075943345d3Smrg 2076943345d3Smrg func_infer_tag $base_compile 2077943345d3Smrg 2078943345d3Smrg for arg in $later; do 2079943345d3Smrg case $arg in 2080a7b590b3Smrg -shared) 2081a7b590b3Smrg test "$build_libtool_libs" != yes && \ 2082a7b590b3Smrg func_fatal_configuration "can not build a shared library" 2083a7b590b3Smrg build_old_libs=no 2084a7b590b3Smrg continue 2085a7b590b3Smrg ;; 2086a7b590b3Smrg 2087943345d3Smrg -static) 2088a7b590b3Smrg build_libtool_libs=no 2089943345d3Smrg build_old_libs=yes 2090943345d3Smrg continue 2091943345d3Smrg ;; 2092943345d3Smrg 2093943345d3Smrg -prefer-pic) 2094943345d3Smrg pic_mode=yes 2095943345d3Smrg continue 2096943345d3Smrg ;; 2097943345d3Smrg 2098943345d3Smrg -prefer-non-pic) 2099943345d3Smrg pic_mode=no 2100943345d3Smrg continue 2101943345d3Smrg ;; 2102943345d3Smrg esac 2103943345d3Smrg done 2104943345d3Smrg 2105a7b590b3Smrg func_quote_for_eval "$libobj" 2106a7b590b3Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107a7b590b3Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108a7b590b3Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109a7b590b3Smrg func_dirname_and_basename "$obj" "/" "" 2110a7b590b3Smrg objname="$func_basename_result" 2111a7b590b3Smrg xdir="$func_dirname_result" 2112943345d3Smrg lobj=${xdir}$objdir/$objname 2113943345d3Smrg 2114a7b590b3Smrg test -z "$base_compile" && \ 2115a7b590b3Smrg func_fatal_help "you must specify a compilation command" 2116943345d3Smrg 2117943345d3Smrg # Delete any leftover library objects. 2118943345d3Smrg if test "$build_old_libs" = yes; then 2119943345d3Smrg removelist="$obj $lobj $libobj ${libobj}T" 2120943345d3Smrg else 2121943345d3Smrg removelist="$lobj $libobj ${libobj}T" 2122943345d3Smrg fi 2123943345d3Smrg 2124943345d3Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 2125943345d3Smrg case $host_os in 2126a7b590b3Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2127943345d3Smrg pic_mode=default 2128943345d3Smrg ;; 2129943345d3Smrg esac 2130943345d3Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131943345d3Smrg # non-PIC code in shared libraries is not supported 2132943345d3Smrg pic_mode=default 2133943345d3Smrg fi 2134943345d3Smrg 2135943345d3Smrg # Calculate the filename of the output object if compiler does 2136943345d3Smrg # not support -o with -c 2137943345d3Smrg if test "$compiler_c_o" = no; then 21383e51e026Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2139943345d3Smrg lockfile="$output_obj.lock" 2140943345d3Smrg else 2141943345d3Smrg output_obj= 2142943345d3Smrg need_locks=no 2143943345d3Smrg lockfile= 2144943345d3Smrg fi 2145943345d3Smrg 2146943345d3Smrg # Lock this critical section if it is needed 2147943345d3Smrg # We use this script file to make the link, it avoids creating a new file 2148943345d3Smrg if test "$need_locks" = yes; then 2149a7b590b3Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150a7b590b3Smrg func_echo "Waiting for $lockfile to be removed" 2151943345d3Smrg sleep 2 2152943345d3Smrg done 2153943345d3Smrg elif test "$need_locks" = warn; then 2154943345d3Smrg if test -f "$lockfile"; then 2155a7b590b3Smrg $ECHO "\ 2156943345d3Smrg*** ERROR, $lockfile exists and contains: 2157943345d3Smrg`cat $lockfile 2>/dev/null` 2158943345d3Smrg 2159943345d3SmrgThis indicates that another process is trying to use the same 2160943345d3Smrgtemporary object file, and libtool could not work around it because 2161943345d3Smrgyour compiler does not support \`-c' and \`-o' together. If you 2162943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 2163943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better 2164943345d3Smrgcompiler." 2165943345d3Smrg 2166a7b590b3Smrg $opt_dry_run || $RM $removelist 2167943345d3Smrg exit $EXIT_FAILURE 2168943345d3Smrg fi 21693e51e026Smrg func_append removelist " $output_obj" 2170a7b590b3Smrg $ECHO "$srcfile" > "$lockfile" 2171943345d3Smrg fi 2172943345d3Smrg 2173a7b590b3Smrg $opt_dry_run || $RM $removelist 21743e51e026Smrg func_append removelist " $lockfile" 2175a7b590b3Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176a7b590b3Smrg 21773e51e026Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 21783e51e026Smrg srcfile=$func_to_tool_file_result 2179a7b590b3Smrg func_quote_for_eval "$srcfile" 2180a7b590b3Smrg qsrcfile=$func_quote_for_eval_result 2181943345d3Smrg 2182943345d3Smrg # Only build a PIC object if we are building libtool libraries. 2183943345d3Smrg if test "$build_libtool_libs" = yes; then 2184943345d3Smrg # Without this assignment, base_compile gets emptied. 2185943345d3Smrg fbsd_hideous_sh_bug=$base_compile 2186943345d3Smrg 2187943345d3Smrg if test "$pic_mode" != no; then 2188943345d3Smrg command="$base_compile $qsrcfile $pic_flag" 2189943345d3Smrg else 2190943345d3Smrg # Don't build PIC code 2191943345d3Smrg command="$base_compile $qsrcfile" 2192943345d3Smrg fi 2193943345d3Smrg 2194a7b590b3Smrg func_mkdir_p "$xdir$objdir" 2195943345d3Smrg 2196943345d3Smrg if test -z "$output_obj"; then 2197943345d3Smrg # Place PIC objects in $objdir 21983e51e026Smrg func_append command " -o $lobj" 2199943345d3Smrg fi 2200943345d3Smrg 2201a7b590b3Smrg func_show_eval_locale "$command" \ 2202a7b590b3Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203943345d3Smrg 2204943345d3Smrg if test "$need_locks" = warn && 2205943345d3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206a7b590b3Smrg $ECHO "\ 2207943345d3Smrg*** ERROR, $lockfile contains: 2208943345d3Smrg`cat $lockfile 2>/dev/null` 2209943345d3Smrg 2210943345d3Smrgbut it should contain: 2211943345d3Smrg$srcfile 2212943345d3Smrg 2213943345d3SmrgThis indicates that another process is trying to use the same 2214943345d3Smrgtemporary object file, and libtool could not work around it because 2215943345d3Smrgyour compiler does not support \`-c' and \`-o' together. If you 2216943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 2217943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better 2218943345d3Smrgcompiler." 2219943345d3Smrg 2220a7b590b3Smrg $opt_dry_run || $RM $removelist 2221943345d3Smrg exit $EXIT_FAILURE 2222943345d3Smrg fi 2223943345d3Smrg 2224943345d3Smrg # Just move the object if needed, then go on to compile the next one 2225943345d3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226a7b590b3Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227a7b590b3Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228943345d3Smrg fi 2229943345d3Smrg 2230943345d3Smrg # Allow error messages only from the first compilation. 2231943345d3Smrg if test "$suppress_opt" = yes; then 2232a7b590b3Smrg suppress_output=' >/dev/null 2>&1' 2233943345d3Smrg fi 2234943345d3Smrg fi 2235943345d3Smrg 2236943345d3Smrg # Only build a position-dependent object if we build old libraries. 2237943345d3Smrg if test "$build_old_libs" = yes; then 2238943345d3Smrg if test "$pic_mode" != yes; then 2239943345d3Smrg # Don't build PIC code 2240a7b590b3Smrg command="$base_compile $qsrcfile$pie_flag" 2241943345d3Smrg else 2242943345d3Smrg command="$base_compile $qsrcfile $pic_flag" 2243943345d3Smrg fi 2244943345d3Smrg if test "$compiler_c_o" = yes; then 22453e51e026Smrg func_append command " -o $obj" 2246943345d3Smrg fi 2247943345d3Smrg 2248943345d3Smrg # Suppress compiler output if we already did a PIC compilation. 22493e51e026Smrg func_append command "$suppress_output" 2250a7b590b3Smrg func_show_eval_locale "$command" \ 2251a7b590b3Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252943345d3Smrg 2253943345d3Smrg if test "$need_locks" = warn && 2254943345d3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255a7b590b3Smrg $ECHO "\ 2256943345d3Smrg*** ERROR, $lockfile contains: 2257943345d3Smrg`cat $lockfile 2>/dev/null` 2258943345d3Smrg 2259943345d3Smrgbut it should contain: 2260943345d3Smrg$srcfile 2261943345d3Smrg 2262943345d3SmrgThis indicates that another process is trying to use the same 2263943345d3Smrgtemporary object file, and libtool could not work around it because 2264943345d3Smrgyour compiler does not support \`-c' and \`-o' together. If you 2265943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 2266943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better 2267943345d3Smrgcompiler." 2268943345d3Smrg 2269a7b590b3Smrg $opt_dry_run || $RM $removelist 2270943345d3Smrg exit $EXIT_FAILURE 2271943345d3Smrg fi 2272943345d3Smrg 2273943345d3Smrg # Just move the object if needed 2274943345d3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275a7b590b3Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276a7b590b3Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277943345d3Smrg fi 2278943345d3Smrg fi 2279943345d3Smrg 2280a7b590b3Smrg $opt_dry_run || { 2281a7b590b3Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282943345d3Smrg 2283a7b590b3Smrg # Unlock the critical section if it was locked 2284a7b590b3Smrg if test "$need_locks" != no; then 2285a7b590b3Smrg removelist=$lockfile 2286a7b590b3Smrg $RM "$lockfile" 2287a7b590b3Smrg fi 2288a7b590b3Smrg } 2289943345d3Smrg 2290943345d3Smrg exit $EXIT_SUCCESS 2291a7b590b3Smrg} 2292943345d3Smrg 2293a7b590b3Smrg$opt_help || { 22943e51e026Smrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295a7b590b3Smrg} 2296943345d3Smrg 2297a7b590b3Smrgfunc_mode_help () 2298a7b590b3Smrg{ 2299a7b590b3Smrg # We need to display help for each of the modes. 23003e51e026Smrg case $opt_mode in 2301a7b590b3Smrg "") 2302a7b590b3Smrg # Generic help is extracted from the usage comments 2303a7b590b3Smrg # at the start of this file. 2304a7b590b3Smrg func_help 2305a7b590b3Smrg ;; 2306943345d3Smrg 2307a7b590b3Smrg clean) 2308a7b590b3Smrg $ECHO \ 2309a7b590b3Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310943345d3Smrg 2311a7b590b3SmrgRemove files from the build directory. 2312943345d3Smrg 2313a7b590b3SmrgRM is the name of the program to use to delete files associated with each FILE 2314a7b590b3Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315a7b590b3Smrgto RM. 2316943345d3Smrg 2317a7b590b3SmrgIf FILE is a libtool library, object or program, all the files associated 2318a7b590b3Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319a7b590b3Smrg ;; 2320943345d3Smrg 2321a7b590b3Smrg compile) 2322a7b590b3Smrg $ECHO \ 2323a7b590b3Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324943345d3Smrg 2325a7b590b3SmrgCompile a source file into a libtool library object. 2326943345d3Smrg 2327a7b590b3SmrgThis mode accepts the following additional options: 2328943345d3Smrg 2329a7b590b3Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330a7b590b3Smrg -no-suppress do not suppress compiler output for multiple passes 23313e51e026Smrg -prefer-pic try to build PIC objects only 23323e51e026Smrg -prefer-non-pic try to build non-PIC objects only 2333a7b590b3Smrg -shared do not build a \`.o' file suitable for static linking 2334a7b590b3Smrg -static only build a \`.o' file suitable for static linking 23353e51e026Smrg -Wc,FLAG pass FLAG directly to the compiler 2336943345d3Smrg 2337a7b590b3SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338a7b590b3Smrgfrom the given SOURCEFILE. 2339943345d3Smrg 2340a7b590b3SmrgThe output file name is determined by removing the directory component from 2341a7b590b3SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342a7b590b3Smrglibrary object suffix, \`.lo'." 2343a7b590b3Smrg ;; 2344943345d3Smrg 2345a7b590b3Smrg execute) 2346a7b590b3Smrg $ECHO \ 2347a7b590b3Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348943345d3Smrg 2349a7b590b3SmrgAutomatically set library path, then run a program. 2350943345d3Smrg 2351a7b590b3SmrgThis mode accepts the following additional options: 2352943345d3Smrg 2353a7b590b3Smrg -dlopen FILE add the directory containing FILE to the library path 2354943345d3Smrg 2355a7b590b3SmrgThis mode sets the library path environment variable according to \`-dlopen' 2356a7b590b3Smrgflags. 2357943345d3Smrg 2358a7b590b3SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359a7b590b3Smrginto their corresponding uninstalled binary, and any of their required library 2360a7b590b3Smrgdirectories are added to the library path. 2361943345d3Smrg 2362a7b590b3SmrgThen, COMMAND is executed, with ARGS as arguments." 2363a7b590b3Smrg ;; 2364943345d3Smrg 2365a7b590b3Smrg finish) 2366a7b590b3Smrg $ECHO \ 2367a7b590b3Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368943345d3Smrg 2369a7b590b3SmrgComplete the installation of libtool libraries. 2370943345d3Smrg 2371a7b590b3SmrgEach LIBDIR is a directory that contains libtool libraries. 2372943345d3Smrg 2373a7b590b3SmrgThe commands that this mode executes may require superuser privileges. Use 2374a7b590b3Smrgthe \`--dry-run' option if you just want to see what would be executed." 2375a7b590b3Smrg ;; 2376943345d3Smrg 2377a7b590b3Smrg install) 2378a7b590b3Smrg $ECHO \ 2379a7b590b3Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380943345d3Smrg 2381a7b590b3SmrgInstall executables or libraries. 2382943345d3Smrg 2383a7b590b3SmrgINSTALL-COMMAND is the installation command. The first component should be 2384a7b590b3Smrgeither the \`install' or \`cp' program. 2385943345d3Smrg 2386a7b590b3SmrgThe following components of INSTALL-COMMAND are treated specially: 2387943345d3Smrg 23883e51e026Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389943345d3Smrg 2390a7b590b3SmrgThe rest of the components are interpreted as arguments to that command (only 2391a7b590b3SmrgBSD-compatible install options are recognized)." 2392a7b590b3Smrg ;; 2393943345d3Smrg 2394a7b590b3Smrg link) 2395a7b590b3Smrg $ECHO \ 2396a7b590b3Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397943345d3Smrg 2398a7b590b3SmrgLink object files or libraries together to form another library, or to 2399a7b590b3Smrgcreate an executable program. 2400943345d3Smrg 2401a7b590b3SmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402a7b590b3Smrga program from several object files. 2403943345d3Smrg 2404a7b590b3SmrgThe following components of LINK-COMMAND are treated specially: 2405943345d3Smrg 2406a7b590b3Smrg -all-static do not do any dynamic linking at all 2407a7b590b3Smrg -avoid-version do not add a version suffix if possible 24083e51e026Smrg -bindir BINDIR specify path to binaries directory (for systems where 24093e51e026Smrg libraries must be found in the PATH setting at runtime) 2410a7b590b3Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411a7b590b3Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412a7b590b3Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413a7b590b3Smrg -export-symbols SYMFILE 2414a7b590b3Smrg try to export only the symbols listed in SYMFILE 2415a7b590b3Smrg -export-symbols-regex REGEX 2416a7b590b3Smrg try to export only the symbols matching REGEX 2417a7b590b3Smrg -LLIBDIR search LIBDIR for required installed libraries 2418a7b590b3Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419a7b590b3Smrg -module build a library that can dlopened 2420a7b590b3Smrg -no-fast-install disable the fast-install mode 2421a7b590b3Smrg -no-install link a not-installable executable 2422a7b590b3Smrg -no-undefined declare that a library does not refer to external symbols 2423a7b590b3Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424a7b590b3Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425a7b590b3Smrg -precious-files-regex REGEX 2426a7b590b3Smrg don't remove output files matching REGEX 2427a7b590b3Smrg -release RELEASE specify package release information 2428a7b590b3Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429a7b590b3Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430a7b590b3Smrg -shared only do dynamic linking of libtool libraries 2431a7b590b3Smrg -shrext SUFFIX override the standard shared library file extension 2432a7b590b3Smrg -static do not do any dynamic linking of uninstalled libtool libraries 2433a7b590b3Smrg -static-libtool-libs 2434a7b590b3Smrg do not do any dynamic linking of libtool libraries 2435a7b590b3Smrg -version-info CURRENT[:REVISION[:AGE]] 2436a7b590b3Smrg specify library version info [each variable defaults to 0] 2437a7b590b3Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 24383e51e026Smrg -Wc,FLAG 24393e51e026Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 24403e51e026Smrg -Wl,FLAG 24413e51e026Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 24423e51e026Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443943345d3Smrg 2444a7b590b3SmrgAll other options (arguments beginning with \`-') are ignored. 2445943345d3Smrg 2446a7b590b3SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447a7b590b3Smrgtreated as uninstalled libtool libraries, other files are standard or library 2448a7b590b3Smrgobject files. 24495e695a52Smrg 2450a7b590b3SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451a7b590b3Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452a7b590b3Smrgrequired, except when creating a convenience library. 2453943345d3Smrg 2454a7b590b3SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455a7b590b3Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456943345d3Smrg 2457a7b590b3SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458a7b590b3Smrgis created, otherwise an executable program is created." 2459943345d3Smrg ;; 2460943345d3Smrg 2461a7b590b3Smrg uninstall) 2462a7b590b3Smrg $ECHO \ 2463a7b590b3Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464943345d3Smrg 2465a7b590b3SmrgRemove libraries from an installation directory. 2466943345d3Smrg 2467a7b590b3SmrgRM is the name of the program to use to delete files associated with each FILE 2468a7b590b3Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469a7b590b3Smrgto RM. 2470943345d3Smrg 2471a7b590b3SmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472a7b590b3SmrgOtherwise, only FILE itself is deleted using RM." 2473a7b590b3Smrg ;; 2474943345d3Smrg 2475a7b590b3Smrg *) 24763e51e026Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477a7b590b3Smrg ;; 2478a7b590b3Smrg esac 2479943345d3Smrg 24803e51e026Smrg echo 2481a7b590b3Smrg $ECHO "Try \`$progname --help' for more information about other modes." 2482a7b590b3Smrg} 2483943345d3Smrg 24843e51e026Smrg# Now that we've collected a possible --mode arg, show help if necessary 24853e51e026Smrgif $opt_help; then 24863e51e026Smrg if test "$opt_help" = :; then 24873e51e026Smrg func_mode_help 24883e51e026Smrg else 24893e51e026Smrg { 24903e51e026Smrg func_help noexit 24913e51e026Smrg for opt_mode in compile link execute install finish uninstall clean; do 24923e51e026Smrg func_mode_help 24933e51e026Smrg done 24943e51e026Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 24953e51e026Smrg { 24963e51e026Smrg func_help noexit 24973e51e026Smrg for opt_mode in compile link execute install finish uninstall clean; do 24983e51e026Smrg echo 24993e51e026Smrg func_mode_help 25003e51e026Smrg done 25013e51e026Smrg } | 25023e51e026Smrg sed '1d 25033e51e026Smrg /^When reporting/,/^Report/{ 25043e51e026Smrg H 25053e51e026Smrg d 25063e51e026Smrg } 25073e51e026Smrg $x 25083e51e026Smrg /information about other modes/d 25093e51e026Smrg /more detailed .*MODE/d 25103e51e026Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 25113e51e026Smrg fi 25123e51e026Smrg exit $? 25133e51e026Smrgfi 2514943345d3Smrg 2515943345d3Smrg 2516a7b590b3Smrg# func_mode_execute arg... 2517a7b590b3Smrgfunc_mode_execute () 2518a7b590b3Smrg{ 2519a7b590b3Smrg $opt_debug 2520a7b590b3Smrg # The first argument is the command name. 2521a7b590b3Smrg cmd="$nonopt" 2522a7b590b3Smrg test -z "$cmd" && \ 2523a7b590b3Smrg func_fatal_help "you must specify a COMMAND" 2524943345d3Smrg 2525a7b590b3Smrg # Handle -dlopen flags immediately. 25263e51e026Smrg for file in $opt_dlopen; do 2527a7b590b3Smrg test -f "$file" \ 2528a7b590b3Smrg || func_fatal_help "\`$file' is not a file" 2529943345d3Smrg 2530a7b590b3Smrg dir= 2531a7b590b3Smrg case $file in 2532a7b590b3Smrg *.la) 25333e51e026Smrg func_resolve_sysroot "$file" 25343e51e026Smrg file=$func_resolve_sysroot_result 25353e51e026Smrg 2536a7b590b3Smrg # Check to see that this really is a libtool archive. 2537a7b590b3Smrg func_lalib_unsafe_p "$file" \ 2538a7b590b3Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2539943345d3Smrg 2540a7b590b3Smrg # Read the libtool library. 2541a7b590b3Smrg dlname= 2542a7b590b3Smrg library_names= 2543a7b590b3Smrg func_source "$file" 2544943345d3Smrg 2545a7b590b3Smrg # Skip this library if it cannot be dlopened. 2546a7b590b3Smrg if test -z "$dlname"; then 2547a7b590b3Smrg # Warn if it was a shared library. 2548a7b590b3Smrg test -n "$library_names" && \ 2549a7b590b3Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550a7b590b3Smrg continue 2551a7b590b3Smrg fi 2552943345d3Smrg 2553a7b590b3Smrg func_dirname "$file" "" "." 2554a7b590b3Smrg dir="$func_dirname_result" 2555943345d3Smrg 2556a7b590b3Smrg if test -f "$dir/$objdir/$dlname"; then 25573e51e026Smrg func_append dir "/$objdir" 2558a7b590b3Smrg else 2559a7b590b3Smrg if test ! -f "$dir/$dlname"; then 2560a7b590b3Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561a7b590b3Smrg fi 2562a7b590b3Smrg fi 2563943345d3Smrg ;; 2564943345d3Smrg 2565a7b590b3Smrg *.lo) 2566a7b590b3Smrg # Just add the directory containing the .lo file. 2567a7b590b3Smrg func_dirname "$file" "" "." 2568a7b590b3Smrg dir="$func_dirname_result" 2569943345d3Smrg ;; 2570943345d3Smrg 2571a7b590b3Smrg *) 2572a7b590b3Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573943345d3Smrg continue 2574943345d3Smrg ;; 2575a7b590b3Smrg esac 2576943345d3Smrg 2577a7b590b3Smrg # Get the absolute pathname. 2578a7b590b3Smrg absdir=`cd "$dir" && pwd` 2579a7b590b3Smrg test -n "$absdir" && dir="$absdir" 2580943345d3Smrg 2581a7b590b3Smrg # Now add the directory to shlibpath_var. 2582a7b590b3Smrg if eval "test -z \"\$$shlibpath_var\""; then 2583a7b590b3Smrg eval "$shlibpath_var=\"\$dir\"" 2584a7b590b3Smrg else 2585a7b590b3Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586a7b590b3Smrg fi 2587a7b590b3Smrg done 2588943345d3Smrg 2589a7b590b3Smrg # This variable tells wrapper scripts just to set shlibpath_var 2590a7b590b3Smrg # rather than running their programs. 2591a7b590b3Smrg libtool_execute_magic="$magic" 2592943345d3Smrg 2593a7b590b3Smrg # Check if any of the arguments is a wrapper script. 2594a7b590b3Smrg args= 2595a7b590b3Smrg for file 2596a7b590b3Smrg do 2597a7b590b3Smrg case $file in 25983e51e026Smrg -* | *.la | *.lo ) ;; 2599a7b590b3Smrg *) 2600a7b590b3Smrg # Do a test to see if this is really a libtool program. 2601a7b590b3Smrg if func_ltwrapper_script_p "$file"; then 2602a7b590b3Smrg func_source "$file" 2603a7b590b3Smrg # Transform arg to wrapped name. 2604a7b590b3Smrg file="$progdir/$program" 2605a7b590b3Smrg elif func_ltwrapper_executable_p "$file"; then 2606a7b590b3Smrg func_ltwrapper_scriptname "$file" 2607a7b590b3Smrg func_source "$func_ltwrapper_scriptname_result" 2608a7b590b3Smrg # Transform arg to wrapped name. 2609a7b590b3Smrg file="$progdir/$program" 2610a7b590b3Smrg fi 2611a7b590b3Smrg ;; 2612a7b590b3Smrg esac 2613a7b590b3Smrg # Quote arguments (to preserve shell metacharacters). 26143e51e026Smrg func_append_quoted args "$file" 2615a7b590b3Smrg done 2616943345d3Smrg 2617a7b590b3Smrg if test "X$opt_dry_run" = Xfalse; then 2618a7b590b3Smrg if test -n "$shlibpath_var"; then 2619a7b590b3Smrg # Export the shlibpath_var. 2620a7b590b3Smrg eval "export $shlibpath_var" 2621a7b590b3Smrg fi 2622943345d3Smrg 2623a7b590b3Smrg # Restore saved environment variables 2624a7b590b3Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625a7b590b3Smrg do 2626a7b590b3Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627a7b590b3Smrg $lt_var=\$save_$lt_var; export $lt_var 2628943345d3Smrg else 2629a7b590b3Smrg $lt_unset $lt_var 2630a7b590b3Smrg fi" 2631a7b590b3Smrg done 2632943345d3Smrg 2633a7b590b3Smrg # Now prepare to actually exec the command. 2634a7b590b3Smrg exec_cmd="\$cmd$args" 2635a7b590b3Smrg else 2636a7b590b3Smrg # Display what would be done. 2637a7b590b3Smrg if test -n "$shlibpath_var"; then 2638a7b590b3Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 26393e51e026Smrg echo "export $shlibpath_var" 2640a7b590b3Smrg fi 2641a7b590b3Smrg $ECHO "$cmd$args" 2642a7b590b3Smrg exit $EXIT_SUCCESS 2643a7b590b3Smrg fi 2644a7b590b3Smrg} 2645943345d3Smrg 26463e51e026Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647943345d3Smrg 2648943345d3Smrg 2649a7b590b3Smrg# func_mode_finish arg... 2650a7b590b3Smrgfunc_mode_finish () 2651a7b590b3Smrg{ 2652a7b590b3Smrg $opt_debug 26533e51e026Smrg libs= 26543e51e026Smrg libdirs= 2655a7b590b3Smrg admincmds= 2656943345d3Smrg 26573e51e026Smrg for opt in "$nonopt" ${1+"$@"} 26583e51e026Smrg do 26593e51e026Smrg if test -d "$opt"; then 26603e51e026Smrg func_append libdirs " $opt" 26613e51e026Smrg 26623e51e026Smrg elif test -f "$opt"; then 26633e51e026Smrg if func_lalib_unsafe_p "$opt"; then 26643e51e026Smrg func_append libs " $opt" 26653e51e026Smrg else 26663e51e026Smrg func_warning "\`$opt' is not a valid libtool archive" 26673e51e026Smrg fi 26683e51e026Smrg 26693e51e026Smrg else 26703e51e026Smrg func_fatal_error "invalid argument \`$opt'" 26713e51e026Smrg fi 26723e51e026Smrg done 26733e51e026Smrg 26743e51e026Smrg if test -n "$libs"; then 26753e51e026Smrg if test -n "$lt_sysroot"; then 26763e51e026Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 26773e51e026Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 26783e51e026Smrg else 26793e51e026Smrg sysroot_cmd= 26803e51e026Smrg fi 26813e51e026Smrg 26823e51e026Smrg # Remove sysroot references 26833e51e026Smrg if $opt_dry_run; then 26843e51e026Smrg for lib in $libs; do 26853e51e026Smrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 26863e51e026Smrg done 26873e51e026Smrg else 26883e51e026Smrg tmpdir=`func_mktempdir` 26893e51e026Smrg for lib in $libs; do 26903e51e026Smrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 26913e51e026Smrg > $tmpdir/tmp-la 26923e51e026Smrg mv -f $tmpdir/tmp-la $lib 26933e51e026Smrg done 26943e51e026Smrg ${RM}r "$tmpdir" 26953e51e026Smrg fi 26963e51e026Smrg fi 2697943345d3Smrg 26983e51e026Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699a7b590b3Smrg for libdir in $libdirs; do 2700a7b590b3Smrg if test -n "$finish_cmds"; then 2701a7b590b3Smrg # Do each command in the finish commands. 2702a7b590b3Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703a7b590b3Smrg'"$cmd"'"' 2704943345d3Smrg fi 2705a7b590b3Smrg if test -n "$finish_eval"; then 2706a7b590b3Smrg # Do the single finish_eval. 2707a7b590b3Smrg eval cmds=\"$finish_eval\" 27083e51e026Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709a7b590b3Smrg $cmds" 2710a7b590b3Smrg fi 2711a7b590b3Smrg done 2712a7b590b3Smrg fi 2713943345d3Smrg 2714a7b590b3Smrg # Exit here if they wanted silent mode. 2715a7b590b3Smrg $opt_silent && exit $EXIT_SUCCESS 2716943345d3Smrg 27173e51e026Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 27183e51e026Smrg echo "----------------------------------------------------------------------" 27193e51e026Smrg echo "Libraries have been installed in:" 27203e51e026Smrg for libdir in $libdirs; do 27213e51e026Smrg $ECHO " $libdir" 27223e51e026Smrg done 27233e51e026Smrg echo 27243e51e026Smrg echo "If you ever happen to want to link against installed libraries" 27253e51e026Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 27263e51e026Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 27273e51e026Smrg echo "flag during linking and do at least one of the following:" 27283e51e026Smrg if test -n "$shlibpath_var"; then 27293e51e026Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 27303e51e026Smrg echo " during execution" 27313e51e026Smrg fi 27323e51e026Smrg if test -n "$runpath_var"; then 27333e51e026Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 27343e51e026Smrg echo " during linking" 27353e51e026Smrg fi 27363e51e026Smrg if test -n "$hardcode_libdir_flag_spec"; then 27373e51e026Smrg libdir=LIBDIR 27383e51e026Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2739a7b590b3Smrg 27403e51e026Smrg $ECHO " - use the \`$flag' linker flag" 27413e51e026Smrg fi 27423e51e026Smrg if test -n "$admincmds"; then 27433e51e026Smrg $ECHO " - have your system administrator run these commands:$admincmds" 27443e51e026Smrg fi 27453e51e026Smrg if test -f /etc/ld.so.conf; then 27463e51e026Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 27473e51e026Smrg fi 27483e51e026Smrg echo 2749a7b590b3Smrg 27503e51e026Smrg echo "See any operating system documentation about shared libraries for" 27513e51e026Smrg case $host in 27523e51e026Smrg solaris2.[6789]|solaris2.1[0-9]) 27533e51e026Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 27543e51e026Smrg echo "pages." 27553e51e026Smrg ;; 27563e51e026Smrg *) 27573e51e026Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 27583e51e026Smrg ;; 27593e51e026Smrg esac 27603e51e026Smrg echo "----------------------------------------------------------------------" 27613e51e026Smrg fi 2762a7b590b3Smrg exit $EXIT_SUCCESS 2763a7b590b3Smrg} 2764a7b590b3Smrg 27653e51e026Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766a7b590b3Smrg 2767a7b590b3Smrg 2768a7b590b3Smrg# func_mode_install arg... 2769a7b590b3Smrgfunc_mode_install () 2770a7b590b3Smrg{ 2771a7b590b3Smrg $opt_debug 2772a7b590b3Smrg # There may be an optional sh(1) argument at the beginning of 2773a7b590b3Smrg # install_prog (especially on Windows NT). 2774a7b590b3Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775a7b590b3Smrg # Allow the use of GNU shtool's install command. 27763e51e026Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777a7b590b3Smrg # Aesthetically quote it. 2778a7b590b3Smrg func_quote_for_eval "$nonopt" 2779a7b590b3Smrg install_prog="$func_quote_for_eval_result " 2780a7b590b3Smrg arg=$1 2781a7b590b3Smrg shift 2782a7b590b3Smrg else 2783a7b590b3Smrg install_prog= 2784a7b590b3Smrg arg=$nonopt 2785a7b590b3Smrg fi 2786a7b590b3Smrg 2787a7b590b3Smrg # The real first argument should be the name of the installation program. 2788a7b590b3Smrg # Aesthetically quote it. 2789a7b590b3Smrg func_quote_for_eval "$arg" 27903e51e026Smrg func_append install_prog "$func_quote_for_eval_result" 27913e51e026Smrg install_shared_prog=$install_prog 27923e51e026Smrg case " $install_prog " in 27933e51e026Smrg *[\\\ /]cp\ *) install_cp=: ;; 27943e51e026Smrg *) install_cp=false ;; 27953e51e026Smrg esac 2796a7b590b3Smrg 2797a7b590b3Smrg # We need to accept at least all the BSD install flags. 2798a7b590b3Smrg dest= 2799a7b590b3Smrg files= 2800a7b590b3Smrg opts= 2801a7b590b3Smrg prev= 2802a7b590b3Smrg install_type= 2803a7b590b3Smrg isdir=no 2804a7b590b3Smrg stripme= 28053e51e026Smrg no_mode=: 2806a7b590b3Smrg for arg 2807a7b590b3Smrg do 28083e51e026Smrg arg2= 2809a7b590b3Smrg if test -n "$dest"; then 28103e51e026Smrg func_append files " $dest" 2811a7b590b3Smrg dest=$arg 2812a7b590b3Smrg continue 2813a7b590b3Smrg fi 2814a7b590b3Smrg 2815a7b590b3Smrg case $arg in 2816a7b590b3Smrg -d) isdir=yes ;; 2817a7b590b3Smrg -f) 28183e51e026Smrg if $install_cp; then :; else 28193e51e026Smrg prev=$arg 28203e51e026Smrg fi 2821a7b590b3Smrg ;; 2822a7b590b3Smrg -g | -m | -o) 2823a7b590b3Smrg prev=$arg 2824a7b590b3Smrg ;; 2825a7b590b3Smrg -s) 2826a7b590b3Smrg stripme=" -s" 2827a7b590b3Smrg continue 2828a7b590b3Smrg ;; 2829a7b590b3Smrg -*) 2830a7b590b3Smrg ;; 2831a7b590b3Smrg *) 2832a7b590b3Smrg # If the previous option needed an argument, then skip it. 2833a7b590b3Smrg if test -n "$prev"; then 28343e51e026Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 28353e51e026Smrg arg2=$install_override_mode 28363e51e026Smrg no_mode=false 28373e51e026Smrg fi 2838943345d3Smrg prev= 2839943345d3Smrg else 2840a7b590b3Smrg dest=$arg 2841a7b590b3Smrg continue 2842943345d3Smrg fi 2843943345d3Smrg ;; 2844a7b590b3Smrg esac 2845943345d3Smrg 2846a7b590b3Smrg # Aesthetically quote the argument. 2847a7b590b3Smrg func_quote_for_eval "$arg" 28483e51e026Smrg func_append install_prog " $func_quote_for_eval_result" 28493e51e026Smrg if test -n "$arg2"; then 28503e51e026Smrg func_quote_for_eval "$arg2" 28513e51e026Smrg fi 28523e51e026Smrg func_append install_shared_prog " $func_quote_for_eval_result" 2853a7b590b3Smrg done 2854943345d3Smrg 2855a7b590b3Smrg test -z "$install_prog" && \ 2856a7b590b3Smrg func_fatal_help "you must specify an install program" 2857943345d3Smrg 2858a7b590b3Smrg test -n "$prev" && \ 2859a7b590b3Smrg func_fatal_help "the \`$prev' option requires an argument" 2860943345d3Smrg 28613e51e026Smrg if test -n "$install_override_mode" && $no_mode; then 28623e51e026Smrg if $install_cp; then :; else 28633e51e026Smrg func_quote_for_eval "$install_override_mode" 28643e51e026Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 28653e51e026Smrg fi 28663e51e026Smrg fi 28673e51e026Smrg 2868a7b590b3Smrg if test -z "$files"; then 2869a7b590b3Smrg if test -z "$dest"; then 2870a7b590b3Smrg func_fatal_help "no file or destination specified" 2871a7b590b3Smrg else 2872a7b590b3Smrg func_fatal_help "you must specify a destination" 2873a7b590b3Smrg fi 2874943345d3Smrg fi 2875943345d3Smrg 2876a7b590b3Smrg # Strip any trailing slash from the destination. 2877a7b590b3Smrg func_stripname '' '/' "$dest" 2878a7b590b3Smrg dest=$func_stripname_result 2879943345d3Smrg 2880a7b590b3Smrg # Check to see that the destination is a directory. 2881a7b590b3Smrg test -d "$dest" && isdir=yes 2882a7b590b3Smrg if test "$isdir" = yes; then 2883a7b590b3Smrg destdir="$dest" 2884a7b590b3Smrg destname= 2885943345d3Smrg else 2886a7b590b3Smrg func_dirname_and_basename "$dest" "" "." 2887a7b590b3Smrg destdir="$func_dirname_result" 2888a7b590b3Smrg destname="$func_basename_result" 2889943345d3Smrg 2890a7b590b3Smrg # Not a directory, so check to see that there is only one file specified. 2891a7b590b3Smrg set dummy $files; shift 2892a7b590b3Smrg test "$#" -gt 1 && \ 2893a7b590b3Smrg func_fatal_help "\`$dest' is not a directory" 2894943345d3Smrg fi 2895a7b590b3Smrg case $destdir in 2896a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2897943345d3Smrg *) 2898a7b590b3Smrg for file in $files; do 2899a7b590b3Smrg case $file in 2900a7b590b3Smrg *.lo) ;; 2901a7b590b3Smrg *) 2902a7b590b3Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903a7b590b3Smrg ;; 2904a7b590b3Smrg esac 2905a7b590b3Smrg done 2906943345d3Smrg ;; 2907943345d3Smrg esac 2908943345d3Smrg 2909a7b590b3Smrg # This variable tells wrapper scripts just to set variables rather 2910a7b590b3Smrg # than running their programs. 2911a7b590b3Smrg libtool_install_magic="$magic" 2912943345d3Smrg 2913a7b590b3Smrg staticlibs= 2914a7b590b3Smrg future_libdirs= 2915a7b590b3Smrg current_libdirs= 2916a7b590b3Smrg for file in $files; do 2917943345d3Smrg 2918a7b590b3Smrg # Do each installation. 2919a7b590b3Smrg case $file in 2920a7b590b3Smrg *.$libext) 2921a7b590b3Smrg # Do the static libraries later. 29223e51e026Smrg func_append staticlibs " $file" 2923a7b590b3Smrg ;; 2924a7b590b3Smrg 2925a7b590b3Smrg *.la) 29263e51e026Smrg func_resolve_sysroot "$file" 29273e51e026Smrg file=$func_resolve_sysroot_result 29283e51e026Smrg 2929a7b590b3Smrg # Check to see that this really is a libtool archive. 2930a7b590b3Smrg func_lalib_unsafe_p "$file" \ 2931a7b590b3Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932a7b590b3Smrg 2933a7b590b3Smrg library_names= 2934a7b590b3Smrg old_library= 2935a7b590b3Smrg relink_command= 2936a7b590b3Smrg func_source "$file" 2937a7b590b3Smrg 2938a7b590b3Smrg # Add the libdir to current_libdirs if it is the destination. 2939a7b590b3Smrg if test "X$destdir" = "X$libdir"; then 2940a7b590b3Smrg case "$current_libdirs " in 2941a7b590b3Smrg *" $libdir "*) ;; 29423e51e026Smrg *) func_append current_libdirs " $libdir" ;; 2943943345d3Smrg esac 2944a7b590b3Smrg else 2945a7b590b3Smrg # Note the libdir as a future libdir. 2946a7b590b3Smrg case "$future_libdirs " in 2947a7b590b3Smrg *" $libdir "*) ;; 29483e51e026Smrg *) func_append future_libdirs " $libdir" ;; 2949a7b590b3Smrg esac 2950a7b590b3Smrg fi 2951943345d3Smrg 2952a7b590b3Smrg func_dirname "$file" "/" "" 2953a7b590b3Smrg dir="$func_dirname_result" 29543e51e026Smrg func_append dir "$objdir" 2955a7b590b3Smrg 2956a7b590b3Smrg if test -n "$relink_command"; then 2957a7b590b3Smrg # Determine the prefix the user has applied to our future dir. 29583e51e026Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959a7b590b3Smrg 2960a7b590b3Smrg # Don't allow the user to place us outside of our expected 2961a7b590b3Smrg # location b/c this prevents finding dependent libraries that 2962a7b590b3Smrg # are installed to the same prefix. 2963a7b590b3Smrg # At present, this check doesn't affect windows .dll's that 2964a7b590b3Smrg # are installed into $libdir/../bin (currently, that works fine) 2965a7b590b3Smrg # but it's something to keep an eye on. 2966a7b590b3Smrg test "$inst_prefix_dir" = "$destdir" && \ 2967a7b590b3Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968a7b590b3Smrg 2969a7b590b3Smrg if test -n "$inst_prefix_dir"; then 2970a7b590b3Smrg # Stick the inst_prefix_dir data into the link command. 29713e51e026Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972a7b590b3Smrg else 29733e51e026Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974a7b590b3Smrg fi 2975a7b590b3Smrg 2976a7b590b3Smrg func_warning "relinking \`$file'" 2977a7b590b3Smrg func_show_eval "$relink_command" \ 2978a7b590b3Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979a7b590b3Smrg fi 2980a7b590b3Smrg 2981a7b590b3Smrg # See the names of the shared library. 2982a7b590b3Smrg set dummy $library_names; shift 2983a7b590b3Smrg if test -n "$1"; then 2984a7b590b3Smrg realname="$1" 2985a7b590b3Smrg shift 2986a7b590b3Smrg 2987a7b590b3Smrg srcname="$realname" 2988a7b590b3Smrg test -n "$relink_command" && srcname="$realname"T 2989a7b590b3Smrg 2990a7b590b3Smrg # Install the shared library and build the symlinks. 29913e51e026Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992a7b590b3Smrg 'exit $?' 2993a7b590b3Smrg tstripme="$stripme" 2994a7b590b3Smrg case $host_os in 2995a7b590b3Smrg cygwin* | mingw* | pw32* | cegcc*) 2996a7b590b3Smrg case $realname in 2997a7b590b3Smrg *.dll.a) 2998a7b590b3Smrg tstripme="" 2999a7b590b3Smrg ;; 3000a7b590b3Smrg esac 3001943345d3Smrg ;; 3002943345d3Smrg esac 3003a7b590b3Smrg if test -n "$tstripme" && test -n "$striplib"; then 3004a7b590b3Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005943345d3Smrg fi 3006a7b590b3Smrg 3007a7b590b3Smrg if test "$#" -gt 0; then 3008a7b590b3Smrg # Delete the old symlinks, and create new ones. 3009a7b590b3Smrg # Try `ln -sf' first, because the `ln' binary might depend on 3010a7b590b3Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011a7b590b3Smrg # so we also need to try rm && ln -s. 3012a7b590b3Smrg for linkname 3013a7b590b3Smrg do 3014a7b590b3Smrg test "$linkname" != "$realname" \ 3015a7b590b3Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016943345d3Smrg done 3017943345d3Smrg fi 3018943345d3Smrg 3019a7b590b3Smrg # Do each command in the postinstall commands. 3020a7b590b3Smrg lib="$destdir/$realname" 3021a7b590b3Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 3022943345d3Smrg fi 3023943345d3Smrg 3024a7b590b3Smrg # Install the pseudo-library for information purposes. 3025a7b590b3Smrg func_basename "$file" 3026a7b590b3Smrg name="$func_basename_result" 3027a7b590b3Smrg instname="$dir/$name"i 3028a7b590b3Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029943345d3Smrg 3030a7b590b3Smrg # Maybe install the static library, too. 30313e51e026Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032a7b590b3Smrg ;; 3033943345d3Smrg 3034a7b590b3Smrg *.lo) 3035a7b590b3Smrg # Install (i.e. copy) a libtool object. 3036943345d3Smrg 3037a7b590b3Smrg # Figure out destination file name, if it wasn't already specified. 3038a7b590b3Smrg if test -n "$destname"; then 3039a7b590b3Smrg destfile="$destdir/$destname" 3040a7b590b3Smrg else 3041a7b590b3Smrg func_basename "$file" 3042a7b590b3Smrg destfile="$func_basename_result" 3043a7b590b3Smrg destfile="$destdir/$destfile" 3044943345d3Smrg fi 3045943345d3Smrg 3046a7b590b3Smrg # Deduce the name of the destination old-style object file. 3047a7b590b3Smrg case $destfile in 3048a7b590b3Smrg *.lo) 3049a7b590b3Smrg func_lo2o "$destfile" 3050a7b590b3Smrg staticdest=$func_lo2o_result 3051a7b590b3Smrg ;; 3052a7b590b3Smrg *.$objext) 3053a7b590b3Smrg staticdest="$destfile" 3054a7b590b3Smrg destfile= 3055a7b590b3Smrg ;; 3056a7b590b3Smrg *) 3057a7b590b3Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058a7b590b3Smrg ;; 3059a7b590b3Smrg esac 3060943345d3Smrg 3061a7b590b3Smrg # Install the libtool object if requested. 3062a7b590b3Smrg test -n "$destfile" && \ 3063a7b590b3Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 3064943345d3Smrg 3065a7b590b3Smrg # Install the old object if enabled. 3066a7b590b3Smrg if test "$build_old_libs" = yes; then 3067a7b590b3Smrg # Deduce the name of the old-style object file. 3068a7b590b3Smrg func_lo2o "$file" 3069a7b590b3Smrg staticobj=$func_lo2o_result 3070a7b590b3Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071943345d3Smrg fi 3072a7b590b3Smrg exit $EXIT_SUCCESS 3073a7b590b3Smrg ;; 3074943345d3Smrg 3075a7b590b3Smrg *) 3076a7b590b3Smrg # Figure out destination file name, if it wasn't already specified. 3077a7b590b3Smrg if test -n "$destname"; then 3078a7b590b3Smrg destfile="$destdir/$destname" 3079a7b590b3Smrg else 3080a7b590b3Smrg func_basename "$file" 3081a7b590b3Smrg destfile="$func_basename_result" 3082a7b590b3Smrg destfile="$destdir/$destfile" 3083a7b590b3Smrg fi 3084943345d3Smrg 3085a7b590b3Smrg # If the file is missing, and there is a .exe on the end, strip it 3086a7b590b3Smrg # because it is most likely a libtool script we actually want to 3087a7b590b3Smrg # install 3088a7b590b3Smrg stripped_ext="" 3089a7b590b3Smrg case $file in 3090a7b590b3Smrg *.exe) 3091a7b590b3Smrg if test ! -f "$file"; then 3092a7b590b3Smrg func_stripname '' '.exe' "$file" 3093a7b590b3Smrg file=$func_stripname_result 3094a7b590b3Smrg stripped_ext=".exe" 3095a7b590b3Smrg fi 3096a7b590b3Smrg ;; 3097a7b590b3Smrg esac 3098a7b590b3Smrg 3099a7b590b3Smrg # Do a test to see if this is really a libtool program. 3100a7b590b3Smrg case $host in 3101a7b590b3Smrg *cygwin* | *mingw*) 3102a7b590b3Smrg if func_ltwrapper_executable_p "$file"; then 3103a7b590b3Smrg func_ltwrapper_scriptname "$file" 3104a7b590b3Smrg wrapper=$func_ltwrapper_scriptname_result 3105a7b590b3Smrg else 3106a7b590b3Smrg func_stripname '' '.exe' "$file" 3107a7b590b3Smrg wrapper=$func_stripname_result 3108a7b590b3Smrg fi 3109a7b590b3Smrg ;; 3110943345d3Smrg *) 3111a7b590b3Smrg wrapper=$file 3112a7b590b3Smrg ;; 3113a7b590b3Smrg esac 3114a7b590b3Smrg if func_ltwrapper_script_p "$wrapper"; then 3115a7b590b3Smrg notinst_deplibs= 3116a7b590b3Smrg relink_command= 3117a7b590b3Smrg 3118a7b590b3Smrg func_source "$wrapper" 3119a7b590b3Smrg 3120a7b590b3Smrg # Check the variables that should have been set. 3121a7b590b3Smrg test -z "$generated_by_libtool_version" && \ 3122a7b590b3Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123a7b590b3Smrg 3124a7b590b3Smrg finalize=yes 3125a7b590b3Smrg for lib in $notinst_deplibs; do 3126a7b590b3Smrg # Check to see that each library is installed. 3127a7b590b3Smrg libdir= 3128a7b590b3Smrg if test -f "$lib"; then 3129a7b590b3Smrg func_source "$lib" 3130a7b590b3Smrg fi 31313e51e026Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132a7b590b3Smrg if test -n "$libdir" && test ! -f "$libfile"; then 3133a7b590b3Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 3134a7b590b3Smrg finalize=no 3135a7b590b3Smrg fi 3136a7b590b3Smrg done 3137a7b590b3Smrg 3138a7b590b3Smrg relink_command= 3139a7b590b3Smrg func_source "$wrapper" 3140a7b590b3Smrg 3141a7b590b3Smrg outputname= 3142a7b590b3Smrg if test "$fast_install" = no && test -n "$relink_command"; then 3143a7b590b3Smrg $opt_dry_run || { 3144a7b590b3Smrg if test "$finalize" = yes; then 3145a7b590b3Smrg tmpdir=`func_mktempdir` 3146a7b590b3Smrg func_basename "$file$stripped_ext" 3147a7b590b3Smrg file="$func_basename_result" 3148a7b590b3Smrg outputname="$tmpdir/$file" 3149a7b590b3Smrg # Replace the output file specification. 31503e51e026Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151a7b590b3Smrg 3152a7b590b3Smrg $opt_silent || { 3153a7b590b3Smrg func_quote_for_expand "$relink_command" 3154a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 3155a7b590b3Smrg } 3156a7b590b3Smrg if eval "$relink_command"; then : 3157a7b590b3Smrg else 3158a7b590b3Smrg func_error "error: relink \`$file' with the above command before installing it" 3159a7b590b3Smrg $opt_dry_run || ${RM}r "$tmpdir" 3160a7b590b3Smrg continue 3161a7b590b3Smrg fi 3162a7b590b3Smrg file="$outputname" 3163a7b590b3Smrg else 3164a7b590b3Smrg func_warning "cannot relink \`$file'" 3165a7b590b3Smrg fi 3166a7b590b3Smrg } 3167a7b590b3Smrg else 3168a7b590b3Smrg # Install the binary that we compiled earlier. 31693e51e026Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170943345d3Smrg fi 3171a7b590b3Smrg fi 3172a7b590b3Smrg 3173a7b590b3Smrg # remove .exe since cygwin /usr/bin/install will append another 3174a7b590b3Smrg # one anyway 3175a7b590b3Smrg case $install_prog,$host in 3176a7b590b3Smrg */usr/bin/install*,*cygwin*) 3177a7b590b3Smrg case $file:$destfile in 3178a7b590b3Smrg *.exe:*.exe) 3179a7b590b3Smrg # this is ok 3180a7b590b3Smrg ;; 3181a7b590b3Smrg *.exe:*) 3182a7b590b3Smrg destfile=$destfile.exe 3183a7b590b3Smrg ;; 3184a7b590b3Smrg *:*.exe) 3185a7b590b3Smrg func_stripname '' '.exe' "$destfile" 3186a7b590b3Smrg destfile=$func_stripname_result 3187a7b590b3Smrg ;; 3188a7b590b3Smrg esac 3189943345d3Smrg ;; 3190943345d3Smrg esac 3191a7b590b3Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192a7b590b3Smrg $opt_dry_run || if test -n "$outputname"; then 3193a7b590b3Smrg ${RM}r "$tmpdir" 3194a7b590b3Smrg fi 3195a7b590b3Smrg ;; 3196a7b590b3Smrg esac 3197a7b590b3Smrg done 3198943345d3Smrg 3199a7b590b3Smrg for file in $staticlibs; do 3200a7b590b3Smrg func_basename "$file" 3201a7b590b3Smrg name="$func_basename_result" 3202a7b590b3Smrg 3203a7b590b3Smrg # Set up the ranlib parameters. 3204a7b590b3Smrg oldlib="$destdir/$name" 32053e51e026Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 32063e51e026Smrg tool_oldlib=$func_to_tool_file_result 3207a7b590b3Smrg 3208a7b590b3Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209a7b590b3Smrg 3210a7b590b3Smrg if test -n "$stripme" && test -n "$old_striplib"; then 32113e51e026Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212a7b590b3Smrg fi 3213a7b590b3Smrg 3214a7b590b3Smrg # Do each command in the postinstall commands. 3215a7b590b3Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216a7b590b3Smrg done 3217a7b590b3Smrg 3218a7b590b3Smrg test -n "$future_libdirs" && \ 3219a7b590b3Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3220a7b590b3Smrg 3221a7b590b3Smrg if test -n "$current_libdirs"; then 3222a7b590b3Smrg # Maybe just do a dry run. 3223a7b590b3Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224a7b590b3Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225a7b590b3Smrg else 3226a7b590b3Smrg exit $EXIT_SUCCESS 3227a7b590b3Smrg fi 3228a7b590b3Smrg} 3229a7b590b3Smrg 32303e51e026Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231a7b590b3Smrg 3232a7b590b3Smrg 3233a7b590b3Smrg# func_generate_dlsyms outputname originator pic_p 3234a7b590b3Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235a7b590b3Smrg# a dlpreopen symbol table. 3236a7b590b3Smrgfunc_generate_dlsyms () 3237a7b590b3Smrg{ 3238a7b590b3Smrg $opt_debug 3239a7b590b3Smrg my_outputname="$1" 3240a7b590b3Smrg my_originator="$2" 3241a7b590b3Smrg my_pic_p="${3-no}" 3242a7b590b3Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243a7b590b3Smrg my_dlsyms= 3244a7b590b3Smrg 3245a7b590b3Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246a7b590b3Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247a7b590b3Smrg my_dlsyms="${my_outputname}S.c" 3248a7b590b3Smrg else 3249a7b590b3Smrg func_error "not configured to extract global symbols from dlpreopened files" 3250a7b590b3Smrg fi 3251a7b590b3Smrg fi 3252a7b590b3Smrg 3253a7b590b3Smrg if test -n "$my_dlsyms"; then 3254a7b590b3Smrg case $my_dlsyms in 3255a7b590b3Smrg "") ;; 3256a7b590b3Smrg *.c) 3257a7b590b3Smrg # Discover the nlist of each of the dlfiles. 3258a7b590b3Smrg nlist="$output_objdir/${my_outputname}.nm" 3259a7b590b3Smrg 3260a7b590b3Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261a7b590b3Smrg 3262a7b590b3Smrg # Parse the name list into a source file. 3263a7b590b3Smrg func_verbose "creating $output_objdir/$my_dlsyms" 3264a7b590b3Smrg 3265a7b590b3Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266a7b590b3Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267a7b590b3Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268a7b590b3Smrg 3269a7b590b3Smrg#ifdef __cplusplus 3270a7b590b3Smrgextern \"C\" { 3271a7b590b3Smrg#endif 3272a7b590b3Smrg 32733e51e026Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 32743e51e026Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 32753e51e026Smrg#endif 32763e51e026Smrg 32773e51e026Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 32783e51e026Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 32793e51e026Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 32803e51e026Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 32813e51e026Smrg# define LT_DLSYM_CONST 32823e51e026Smrg#elif defined(__osf__) 32833e51e026Smrg/* This system does not cope well with relocations in const data. */ 32843e51e026Smrg# define LT_DLSYM_CONST 32853e51e026Smrg#else 32863e51e026Smrg# define LT_DLSYM_CONST const 32873e51e026Smrg#endif 32883e51e026Smrg 3289a7b590b3Smrg/* External symbol declarations for the compiler. */\ 3290a7b590b3Smrg" 3291a7b590b3Smrg 3292a7b590b3Smrg if test "$dlself" = yes; then 3293a7b590b3Smrg func_verbose "generating symbol list for \`$output'" 3294a7b590b3Smrg 3295a7b590b3Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296a7b590b3Smrg 3297a7b590b3Smrg # Add our own program objects to the symbol list. 32983e51e026Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299a7b590b3Smrg for progfile in $progfiles; do 33003e51e026Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 33013e51e026Smrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 33023e51e026Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303a7b590b3Smrg done 3304a7b590b3Smrg 3305a7b590b3Smrg if test -n "$exclude_expsyms"; then 3306a7b590b3Smrg $opt_dry_run || { 3307a7b590b3Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308a7b590b3Smrg eval '$MV "$nlist"T "$nlist"' 3309a7b590b3Smrg } 3310943345d3Smrg fi 3311a7b590b3Smrg 3312a7b590b3Smrg if test -n "$export_symbols_regex"; then 3313a7b590b3Smrg $opt_dry_run || { 3314a7b590b3Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315a7b590b3Smrg eval '$MV "$nlist"T "$nlist"' 3316a7b590b3Smrg } 3317a7b590b3Smrg fi 3318a7b590b3Smrg 3319a7b590b3Smrg # Prepare the list of exported symbols 3320a7b590b3Smrg if test -z "$export_symbols"; then 3321a7b590b3Smrg export_symbols="$output_objdir/$outputname.exp" 3322a7b590b3Smrg $opt_dry_run || { 3323a7b590b3Smrg $RM $export_symbols 3324a7b590b3Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325a7b590b3Smrg case $host in 3326a7b590b3Smrg *cygwin* | *mingw* | *cegcc* ) 3327a7b590b3Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328a7b590b3Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329a7b590b3Smrg ;; 3330a7b590b3Smrg esac 3331a7b590b3Smrg } 3332943345d3Smrg else 3333a7b590b3Smrg $opt_dry_run || { 3334a7b590b3Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335a7b590b3Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336a7b590b3Smrg eval '$MV "$nlist"T "$nlist"' 3337a7b590b3Smrg case $host in 33383e51e026Smrg *cygwin* | *mingw* | *cegcc* ) 3339a7b590b3Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340a7b590b3Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341a7b590b3Smrg ;; 3342a7b590b3Smrg esac 3343a7b590b3Smrg } 3344943345d3Smrg fi 3345a7b590b3Smrg fi 3346943345d3Smrg 3347a7b590b3Smrg for dlprefile in $dlprefiles; do 3348a7b590b3Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349a7b590b3Smrg func_basename "$dlprefile" 3350a7b590b3Smrg name="$func_basename_result" 33513e51e026Smrg case $host in 33523e51e026Smrg *cygwin* | *mingw* | *cegcc* ) 33533e51e026Smrg # if an import library, we need to obtain dlname 33543e51e026Smrg if func_win32_import_lib_p "$dlprefile"; then 33553e51e026Smrg func_tr_sh "$dlprefile" 33563e51e026Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 33573e51e026Smrg dlprefile_dlbasename="" 33583e51e026Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 33593e51e026Smrg # Use subshell, to avoid clobbering current variable values 33603e51e026Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 33613e51e026Smrg if test -n "$dlprefile_dlname" ; then 33623e51e026Smrg func_basename "$dlprefile_dlname" 33633e51e026Smrg dlprefile_dlbasename="$func_basename_result" 33643e51e026Smrg else 33653e51e026Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 33663e51e026Smrg $sharedlib_from_linklib_cmd "$dlprefile" 33673e51e026Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 33683e51e026Smrg fi 33693e51e026Smrg fi 33703e51e026Smrg $opt_dry_run || { 33713e51e026Smrg if test -n "$dlprefile_dlbasename" ; then 33723e51e026Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 33733e51e026Smrg else 33743e51e026Smrg func_warning "Could not compute DLL name from $name" 33753e51e026Smrg eval '$ECHO ": $name " >> "$nlist"' 33763e51e026Smrg fi 33773e51e026Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33783e51e026Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 33793e51e026Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 33803e51e026Smrg } 33813e51e026Smrg else # not an import lib 33823e51e026Smrg $opt_dry_run || { 33833e51e026Smrg eval '$ECHO ": $name " >> "$nlist"' 33843e51e026Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33853e51e026Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33863e51e026Smrg } 33873e51e026Smrg fi 33883e51e026Smrg ;; 33893e51e026Smrg *) 33903e51e026Smrg $opt_dry_run || { 33913e51e026Smrg eval '$ECHO ": $name " >> "$nlist"' 33923e51e026Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33933e51e026Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33943e51e026Smrg } 33953e51e026Smrg ;; 33963e51e026Smrg esac 3397a7b590b3Smrg done 3398a7b590b3Smrg 3399a7b590b3Smrg $opt_dry_run || { 3400a7b590b3Smrg # Make sure we have at least an empty file. 3401a7b590b3Smrg test -f "$nlist" || : > "$nlist" 3402a7b590b3Smrg 3403a7b590b3Smrg if test -n "$exclude_expsyms"; then 3404a7b590b3Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405a7b590b3Smrg $MV "$nlist"T "$nlist" 3406943345d3Smrg fi 3407a7b590b3Smrg 3408a7b590b3Smrg # Try sorting and uniquifying the output. 3409a7b590b3Smrg if $GREP -v "^: " < "$nlist" | 3410a7b590b3Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411a7b590b3Smrg sort -k 3 3412a7b590b3Smrg else 3413a7b590b3Smrg sort +2 3414a7b590b3Smrg fi | 3415a7b590b3Smrg uniq > "$nlist"S; then 3416a7b590b3Smrg : 3417943345d3Smrg else 3418a7b590b3Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 3419943345d3Smrg fi 3420943345d3Smrg 3421a7b590b3Smrg if test -f "$nlist"S; then 3422a7b590b3Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423943345d3Smrg else 34243e51e026Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425943345d3Smrg fi 3426943345d3Smrg 34273e51e026Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3428943345d3Smrg 3429a7b590b3Smrg/* The mapping between symbol names and symbols. */ 3430a7b590b3Smrgtypedef struct { 3431a7b590b3Smrg const char *name; 3432a7b590b3Smrg void *address; 3433a7b590b3Smrg} lt_dlsymlist; 34343e51e026Smrgextern LT_DLSYM_CONST lt_dlsymlist 3435a7b590b3Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 34363e51e026SmrgLT_DLSYM_CONST lt_dlsymlist 3437a7b590b3Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 3438a7b590b3Smrg{\ 3439a7b590b3Smrg { \"$my_originator\", (void *) 0 }," 3440943345d3Smrg 3441a7b590b3Smrg case $need_lib_prefix in 3442a7b590b3Smrg no) 3443a7b590b3Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444a7b590b3Smrg ;; 3445a7b590b3Smrg *) 3446a7b590b3Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447a7b590b3Smrg ;; 3448a7b590b3Smrg esac 34493e51e026Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3450a7b590b3Smrg {0, (void *) 0} 3451a7b590b3Smrg}; 3452943345d3Smrg 3453a7b590b3Smrg/* This works around a problem in FreeBSD linker */ 3454a7b590b3Smrg#ifdef FREEBSD_WORKAROUND 3455a7b590b3Smrgstatic const void *lt_preloaded_setup() { 3456a7b590b3Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457a7b590b3Smrg} 3458a7b590b3Smrg#endif 3459a7b590b3Smrg 3460a7b590b3Smrg#ifdef __cplusplus 3461a7b590b3Smrg} 3462a7b590b3Smrg#endif\ 3463a7b590b3Smrg" 3464a7b590b3Smrg } # !$opt_dry_run 3465a7b590b3Smrg 3466a7b590b3Smrg pic_flag_for_symtable= 3467a7b590b3Smrg case "$compile_command " in 3468a7b590b3Smrg *" -static "*) ;; 3469a7b590b3Smrg *) 3470a7b590b3Smrg case $host in 3471a7b590b3Smrg # compiling the symbol table file with pic_flag works around 3472a7b590b3Smrg # a FreeBSD bug that causes programs to crash when -lm is 3473a7b590b3Smrg # linked before any other PIC object. But we must not use 3474a7b590b3Smrg # pic_flag when linking with -static. The problem exists in 3475a7b590b3Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 34763e51e026Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477a7b590b3Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478a7b590b3Smrg *-*-hpux*) 3479a7b590b3Smrg pic_flag_for_symtable=" $pic_flag" ;; 3480a7b590b3Smrg *) 3481a7b590b3Smrg if test "X$my_pic_p" != Xno; then 3482a7b590b3Smrg pic_flag_for_symtable=" $pic_flag" 3483943345d3Smrg fi 3484a7b590b3Smrg ;; 3485a7b590b3Smrg esac 3486a7b590b3Smrg ;; 3487a7b590b3Smrg esac 3488a7b590b3Smrg symtab_cflags= 3489a7b590b3Smrg for arg in $LTCFLAGS; do 3490a7b590b3Smrg case $arg in 3491a7b590b3Smrg -pie | -fpie | -fPIE) ;; 34923e51e026Smrg *) func_append symtab_cflags " $arg" ;; 3493a7b590b3Smrg esac 3494a7b590b3Smrg done 3495943345d3Smrg 3496a7b590b3Smrg # Now compile the dynamic symbol file. 3497a7b590b3Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498943345d3Smrg 3499a7b590b3Smrg # Clean up the generated files. 3500a7b590b3Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501943345d3Smrg 3502a7b590b3Smrg # Transform the symbol file into the correct name. 3503a7b590b3Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504a7b590b3Smrg case $host in 3505a7b590b3Smrg *cygwin* | *mingw* | *cegcc* ) 3506a7b590b3Smrg if test -f "$output_objdir/$my_outputname.def"; then 35073e51e026Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 35083e51e026Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509a7b590b3Smrg else 35103e51e026Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35113e51e026Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512943345d3Smrg fi 3513a7b590b3Smrg ;; 3514a7b590b3Smrg *) 35153e51e026Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35163e51e026Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517a7b590b3Smrg ;; 3518a7b590b3Smrg esac 3519a7b590b3Smrg ;; 3520a7b590b3Smrg *) 3521a7b590b3Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522a7b590b3Smrg ;; 3523a7b590b3Smrg esac 3524a7b590b3Smrg else 3525a7b590b3Smrg # We keep going just in case the user didn't refer to 3526a7b590b3Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527a7b590b3Smrg # really was required. 3528943345d3Smrg 3529a7b590b3Smrg # Nullify the symbol file. 35303e51e026Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 35313e51e026Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532a7b590b3Smrg fi 3533a7b590b3Smrg} 3534943345d3Smrg 3535a7b590b3Smrg# func_win32_libid arg 3536a7b590b3Smrg# return the library type of file 'arg' 3537a7b590b3Smrg# 3538a7b590b3Smrg# Need a lot of goo to handle *both* DLLs and import libs 3539a7b590b3Smrg# Has to be a shell function in order to 'eat' the argument 3540a7b590b3Smrg# that is supplied when $file_magic_command is called. 35413e51e026Smrg# Despite the name, also deal with 64 bit binaries. 3542a7b590b3Smrgfunc_win32_libid () 3543a7b590b3Smrg{ 3544a7b590b3Smrg $opt_debug 3545a7b590b3Smrg win32_libid_type="unknown" 3546a7b590b3Smrg win32_fileres=`file -L $1 2>/dev/null` 3547a7b590b3Smrg case $win32_fileres in 3548a7b590b3Smrg *ar\ archive\ import\ library*) # definitely import 3549a7b590b3Smrg win32_libid_type="x86 archive import" 3550a7b590b3Smrg ;; 3551a7b590b3Smrg *ar\ archive*) # could be an import, or static 35523e51e026Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553a7b590b3Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 35543e51e026Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 35553e51e026Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 35563e51e026Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557a7b590b3Smrg $SED -n -e ' 3558a7b590b3Smrg 1,100{ 3559a7b590b3Smrg / I /{ 3560a7b590b3Smrg s,.*,import, 3561a7b590b3Smrg p 3562a7b590b3Smrg q 3563a7b590b3Smrg } 3564a7b590b3Smrg }'` 3565a7b590b3Smrg case $win32_nmres in 3566a7b590b3Smrg import*) win32_libid_type="x86 archive import";; 3567a7b590b3Smrg *) win32_libid_type="x86 archive static";; 3568a7b590b3Smrg esac 3569a7b590b3Smrg fi 3570a7b590b3Smrg ;; 3571a7b590b3Smrg *DLL*) 3572a7b590b3Smrg win32_libid_type="x86 DLL" 3573a7b590b3Smrg ;; 3574a7b590b3Smrg *executable*) # but shell scripts are "executable" too... 3575a7b590b3Smrg case $win32_fileres in 3576a7b590b3Smrg *MS\ Windows\ PE\ Intel*) 3577a7b590b3Smrg win32_libid_type="x86 DLL" 3578a7b590b3Smrg ;; 3579a7b590b3Smrg esac 3580a7b590b3Smrg ;; 3581a7b590b3Smrg esac 3582a7b590b3Smrg $ECHO "$win32_libid_type" 3583a7b590b3Smrg} 3584943345d3Smrg 35853e51e026Smrg# func_cygming_dll_for_implib ARG 35863e51e026Smrg# 35873e51e026Smrg# Platform-specific function to extract the 35883e51e026Smrg# name of the DLL associated with the specified 35893e51e026Smrg# import library ARG. 35903e51e026Smrg# Invoked by eval'ing the libtool variable 35913e51e026Smrg# $sharedlib_from_linklib_cmd 35923e51e026Smrg# Result is available in the variable 35933e51e026Smrg# $sharedlib_from_linklib_result 35943e51e026Smrgfunc_cygming_dll_for_implib () 35953e51e026Smrg{ 35963e51e026Smrg $opt_debug 35973e51e026Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 35983e51e026Smrg} 35993e51e026Smrg 36003e51e026Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 36013e51e026Smrg# 36023e51e026Smrg# The is the core of a fallback implementation of a 36033e51e026Smrg# platform-specific function to extract the name of the 36043e51e026Smrg# DLL associated with the specified import library LIBNAME. 36053e51e026Smrg# 36063e51e026Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 36073e51e026Smrg# on the platform and compiler that created the implib. 36083e51e026Smrg# 36093e51e026Smrg# Echos the name of the DLL associated with the 36103e51e026Smrg# specified import library. 36113e51e026Smrgfunc_cygming_dll_for_implib_fallback_core () 36123e51e026Smrg{ 36133e51e026Smrg $opt_debug 36143e51e026Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 36153e51e026Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 36163e51e026Smrg $SED '/^Contents of section '"$match_literal"':/{ 36173e51e026Smrg # Place marker at beginning of archive member dllname section 36183e51e026Smrg s/.*/====MARK====/ 36193e51e026Smrg p 36203e51e026Smrg d 36213e51e026Smrg } 36223e51e026Smrg # These lines can sometimes be longer than 43 characters, but 36233e51e026Smrg # are always uninteresting 36243e51e026Smrg /:[ ]*file format pe[i]\{,1\}-/d 36253e51e026Smrg /^In archive [^:]*:/d 36263e51e026Smrg # Ensure marker is printed 36273e51e026Smrg /^====MARK====/p 36283e51e026Smrg # Remove all lines with less than 43 characters 36293e51e026Smrg /^.\{43\}/!d 36303e51e026Smrg # From remaining lines, remove first 43 characters 36313e51e026Smrg s/^.\{43\}//' | 36323e51e026Smrg $SED -n ' 36333e51e026Smrg # Join marker and all lines until next marker into a single line 36343e51e026Smrg /^====MARK====/ b para 36353e51e026Smrg H 36363e51e026Smrg $ b para 36373e51e026Smrg b 36383e51e026Smrg :para 36393e51e026Smrg x 36403e51e026Smrg s/\n//g 36413e51e026Smrg # Remove the marker 36423e51e026Smrg s/^====MARK====// 36433e51e026Smrg # Remove trailing dots and whitespace 36443e51e026Smrg s/[\. \t]*$// 36453e51e026Smrg # Print 36463e51e026Smrg /./p' | 36473e51e026Smrg # we now have a list, one entry per line, of the stringified 36483e51e026Smrg # contents of the appropriate section of all members of the 36493e51e026Smrg # archive which possess that section. Heuristic: eliminate 36503e51e026Smrg # all those which have a first or second character that is 36513e51e026Smrg # a '.' (that is, objdump's representation of an unprintable 36523e51e026Smrg # character.) This should work for all archives with less than 36533e51e026Smrg # 0x302f exports -- but will fail for DLLs whose name actually 36543e51e026Smrg # begins with a literal '.' or a single character followed by 36553e51e026Smrg # a '.'. 36563e51e026Smrg # 36573e51e026Smrg # Of those that remain, print the first one. 36583e51e026Smrg $SED -e '/^\./d;/^.\./d;q' 36593e51e026Smrg} 36603e51e026Smrg 36613e51e026Smrg# func_cygming_gnu_implib_p ARG 36623e51e026Smrg# This predicate returns with zero status (TRUE) if 36633e51e026Smrg# ARG is a GNU/binutils-style import library. Returns 36643e51e026Smrg# with nonzero status (FALSE) otherwise. 36653e51e026Smrgfunc_cygming_gnu_implib_p () 36663e51e026Smrg{ 36673e51e026Smrg $opt_debug 36683e51e026Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36693e51e026Smrg func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` 36703e51e026Smrg test -n "$func_cygming_gnu_implib_tmp" 36713e51e026Smrg} 36723e51e026Smrg 36733e51e026Smrg# func_cygming_ms_implib_p ARG 36743e51e026Smrg# This predicate returns with zero status (TRUE) if 36753e51e026Smrg# ARG is an MS-style import library. Returns 36763e51e026Smrg# with nonzero status (FALSE) otherwise. 36773e51e026Smrgfunc_cygming_ms_implib_p () 36783e51e026Smrg{ 36793e51e026Smrg $opt_debug 36803e51e026Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36813e51e026Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 36823e51e026Smrg test -n "$func_cygming_ms_implib_tmp" 36833e51e026Smrg} 36843e51e026Smrg 36853e51e026Smrg# func_cygming_dll_for_implib_fallback ARG 36863e51e026Smrg# Platform-specific function to extract the 36873e51e026Smrg# name of the DLL associated with the specified 36883e51e026Smrg# import library ARG. 36893e51e026Smrg# 36903e51e026Smrg# This fallback implementation is for use when $DLLTOOL 36913e51e026Smrg# does not support the --identify-strict option. 36923e51e026Smrg# Invoked by eval'ing the libtool variable 36933e51e026Smrg# $sharedlib_from_linklib_cmd 36943e51e026Smrg# Result is available in the variable 36953e51e026Smrg# $sharedlib_from_linklib_result 36963e51e026Smrgfunc_cygming_dll_for_implib_fallback () 36973e51e026Smrg{ 36983e51e026Smrg $opt_debug 36993e51e026Smrg if func_cygming_gnu_implib_p "$1" ; then 37003e51e026Smrg # binutils import library 37013e51e026Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 37023e51e026Smrg elif func_cygming_ms_implib_p "$1" ; then 37033e51e026Smrg # ms-generated import library 37043e51e026Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 37053e51e026Smrg else 37063e51e026Smrg # unknown 37073e51e026Smrg sharedlib_from_linklib_result="" 37083e51e026Smrg fi 37093e51e026Smrg} 3710943345d3Smrg 3711943345d3Smrg 3712a7b590b3Smrg# func_extract_an_archive dir oldlib 3713a7b590b3Smrgfunc_extract_an_archive () 3714a7b590b3Smrg{ 3715a7b590b3Smrg $opt_debug 3716a7b590b3Smrg f_ex_an_ar_dir="$1"; shift 3717a7b590b3Smrg f_ex_an_ar_oldlib="$1" 37183e51e026Smrg if test "$lock_old_archive_extraction" = yes; then 37193e51e026Smrg lockfile=$f_ex_an_ar_oldlib.lock 37203e51e026Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 37213e51e026Smrg func_echo "Waiting for $lockfile to be removed" 37223e51e026Smrg sleep 2 37233e51e026Smrg done 37243e51e026Smrg fi 37253e51e026Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 37263e51e026Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 37273e51e026Smrg if test "$lock_old_archive_extraction" = yes; then 37283e51e026Smrg $opt_dry_run || rm -f "$lockfile" 37293e51e026Smrg fi 3730a7b590b3Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731a7b590b3Smrg : 3732a7b590b3Smrg else 3733a7b590b3Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734a7b590b3Smrg fi 3735a7b590b3Smrg} 3736943345d3Smrg 3737943345d3Smrg 3738a7b590b3Smrg# func_extract_archives gentop oldlib ... 3739a7b590b3Smrgfunc_extract_archives () 3740a7b590b3Smrg{ 3741a7b590b3Smrg $opt_debug 3742a7b590b3Smrg my_gentop="$1"; shift 3743a7b590b3Smrg my_oldlibs=${1+"$@"} 3744a7b590b3Smrg my_oldobjs="" 3745a7b590b3Smrg my_xlib="" 3746a7b590b3Smrg my_xabs="" 3747a7b590b3Smrg my_xdir="" 3748943345d3Smrg 3749a7b590b3Smrg for my_xlib in $my_oldlibs; do 3750a7b590b3Smrg # Extract the objects. 3751a7b590b3Smrg case $my_xlib in 3752a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753a7b590b3Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754a7b590b3Smrg esac 3755a7b590b3Smrg func_basename "$my_xlib" 3756a7b590b3Smrg my_xlib="$func_basename_result" 3757a7b590b3Smrg my_xlib_u=$my_xlib 3758a7b590b3Smrg while :; do 3759a7b590b3Smrg case " $extracted_archives " in 3760a7b590b3Smrg *" $my_xlib_u "*) 3761a7b590b3Smrg func_arith $extracted_serial + 1 3762a7b590b3Smrg extracted_serial=$func_arith_result 3763a7b590b3Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764a7b590b3Smrg *) break ;; 3765a7b590b3Smrg esac 3766a7b590b3Smrg done 3767a7b590b3Smrg extracted_archives="$extracted_archives $my_xlib_u" 3768a7b590b3Smrg my_xdir="$my_gentop/$my_xlib_u" 3769943345d3Smrg 3770a7b590b3Smrg func_mkdir_p "$my_xdir" 3771943345d3Smrg 3772a7b590b3Smrg case $host in 3773a7b590b3Smrg *-darwin*) 3774a7b590b3Smrg func_verbose "Extracting $my_xabs" 3775a7b590b3Smrg # Do not bother doing anything if just a dry run 3776a7b590b3Smrg $opt_dry_run || { 3777a7b590b3Smrg darwin_orig_dir=`pwd` 3778a7b590b3Smrg cd $my_xdir || exit $? 3779a7b590b3Smrg darwin_archive=$my_xabs 3780a7b590b3Smrg darwin_curdir=`pwd` 3781a7b590b3Smrg darwin_base_archive=`basename "$darwin_archive"` 3782a7b590b3Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783a7b590b3Smrg if test -n "$darwin_arches"; then 3784a7b590b3Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785a7b590b3Smrg darwin_arch= 3786a7b590b3Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787a7b590b3Smrg for darwin_arch in $darwin_arches ; do 3788a7b590b3Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789a7b590b3Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790a7b590b3Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791a7b590b3Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792a7b590b3Smrg cd "$darwin_curdir" 3793a7b590b3Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794a7b590b3Smrg done # $darwin_arches 3795a7b590b3Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796a7b590b3Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797a7b590b3Smrg darwin_file= 3798a7b590b3Smrg darwin_files= 3799a7b590b3Smrg for darwin_file in $darwin_filelist; do 38003e51e026Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801a7b590b3Smrg $LIPO -create -output "$darwin_file" $darwin_files 3802a7b590b3Smrg done # $darwin_filelist 3803a7b590b3Smrg $RM -rf unfat-$$ 3804a7b590b3Smrg cd "$darwin_orig_dir" 3805943345d3Smrg else 3806a7b590b3Smrg cd $darwin_orig_dir 3807a7b590b3Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808a7b590b3Smrg fi # $darwin_arches 3809a7b590b3Smrg } # !$opt_dry_run 3810a7b590b3Smrg ;; 3811a7b590b3Smrg *) 3812a7b590b3Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813a7b590b3Smrg ;; 3814a7b590b3Smrg esac 38153e51e026Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816a7b590b3Smrg done 3817943345d3Smrg 3818a7b590b3Smrg func_extract_archives_result="$my_oldobjs" 3819a7b590b3Smrg} 3820943345d3Smrg 3821943345d3Smrg 38223e51e026Smrg# func_emit_wrapper [arg=no] 38233e51e026Smrg# 38243e51e026Smrg# Emit a libtool wrapper script on stdout. 38253e51e026Smrg# Don't directly open a file because we may want to 38263e51e026Smrg# incorporate the script contents within a cygwin/mingw 38273e51e026Smrg# wrapper executable. Must ONLY be called from within 38283e51e026Smrg# func_mode_link because it depends on a number of variables 38293e51e026Smrg# set therein. 3830a7b590b3Smrg# 38313e51e026Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 38323e51e026Smrg# variable will take. If 'yes', then the emitted script 38333e51e026Smrg# will assume that the directory in which it is stored is 38343e51e026Smrg# the $objdir directory. This is a cygwin/mingw-specific 38353e51e026Smrg# behavior. 38363e51e026Smrgfunc_emit_wrapper () 3837a7b590b3Smrg{ 38383e51e026Smrg func_emit_wrapper_arg1=${1-no} 3839943345d3Smrg 3840a7b590b3Smrg $ECHO "\ 3841a7b590b3Smrg#! $SHELL 3842943345d3Smrg 3843a7b590b3Smrg# $output - temporary wrapper script for $objdir/$outputname 3844a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845a7b590b3Smrg# 3846a7b590b3Smrg# The $output program cannot be directly executed until all the libtool 3847a7b590b3Smrg# libraries that it depends on are installed. 3848a7b590b3Smrg# 3849a7b590b3Smrg# This wrapper script should never be moved out of the build directory. 3850a7b590b3Smrg# If it is, it will not operate correctly. 3851943345d3Smrg 3852a7b590b3Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3853a7b590b3Smrg# metacharacters that are still active within double-quoted strings. 3854a7b590b3Smrgsed_quote_subst='$sed_quote_subst' 3855943345d3Smrg 3856a7b590b3Smrg# Be Bourne compatible 3857a7b590b3Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858a7b590b3Smrg emulate sh 3859a7b590b3Smrg NULLCMD=: 3860a7b590b3Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861a7b590b3Smrg # is contrary to our usage. Disable this feature. 3862a7b590b3Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863a7b590b3Smrg setopt NO_GLOB_SUBST 3864a7b590b3Smrgelse 3865a7b590b3Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866a7b590b3Smrgfi 3867a7b590b3SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868a7b590b3SmrgDUALCASE=1; export DUALCASE # for MKS sh 3869943345d3Smrg 3870a7b590b3Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871a7b590b3Smrg# if CDPATH is set. 3872a7b590b3Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873943345d3Smrg 3874a7b590b3Smrgrelink_command=\"$relink_command\" 3875943345d3Smrg 3876a7b590b3Smrg# This environment variable determines our operation mode. 3877a7b590b3Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878a7b590b3Smrg # install mode needs the following variables: 3879a7b590b3Smrg generated_by_libtool_version='$macro_version' 3880a7b590b3Smrg notinst_deplibs='$notinst_deplibs' 3881a7b590b3Smrgelse 3882a7b590b3Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883a7b590b3Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 38843e51e026Smrg file=\"\$0\"" 38853e51e026Smrg 38863e51e026Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 38873e51e026Smrg $ECHO "\ 38883e51e026Smrg 38893e51e026Smrg# A function that is used when there is no print builtin or printf. 38903e51e026Smrgfunc_fallback_echo () 38913e51e026Smrg{ 38923e51e026Smrg eval 'cat <<_LTECHO_EOF 38933e51e026Smrg\$1 38943e51e026Smrg_LTECHO_EOF' 38953e51e026Smrg} 38963e51e026Smrg ECHO=\"$qECHO\" 38973e51e026Smrg fi 38983e51e026Smrg 38993e51e026Smrg# Very basic option parsing. These options are (a) specific to 39003e51e026Smrg# the libtool wrapper, (b) are identical between the wrapper 39013e51e026Smrg# /script/ and the wrapper /executable/ which is used only on 39023e51e026Smrg# windows platforms, and (c) all begin with the string "--lt-" 39033e51e026Smrg# (application programs are unlikely to have options which match 39043e51e026Smrg# this pattern). 39053e51e026Smrg# 39063e51e026Smrg# There are only two supported options: --lt-debug and 39073e51e026Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 39083e51e026Smrg# 39093e51e026Smrg# The first argument to this parsing function should be the 39103e51e026Smrg# script's $0 value, followed by "$@". 39113e51e026Smrglt_option_debug= 39123e51e026Smrgfunc_parse_lt_options () 39133e51e026Smrg{ 39143e51e026Smrg lt_script_arg0=\$0 39153e51e026Smrg shift 39163e51e026Smrg for lt_opt 39173e51e026Smrg do 39183e51e026Smrg case \"\$lt_opt\" in 39193e51e026Smrg --lt-debug) lt_option_debug=1 ;; 39203e51e026Smrg --lt-dump-script) 39213e51e026Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 39223e51e026Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 39233e51e026Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 39243e51e026Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 39253e51e026Smrg exit 0 39263e51e026Smrg ;; 39273e51e026Smrg --lt-*) 39283e51e026Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 39293e51e026Smrg exit 1 39303e51e026Smrg ;; 39313e51e026Smrg esac 39323e51e026Smrg done 39333e51e026Smrg 39343e51e026Smrg # Print the debug banner immediately: 39353e51e026Smrg if test -n \"\$lt_option_debug\"; then 39363e51e026Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 39373e51e026Smrg fi 39383e51e026Smrg} 39393e51e026Smrg 39403e51e026Smrg# Used when --lt-debug. Prints its arguments to stdout 39413e51e026Smrg# (redirection is the responsibility of the caller) 39423e51e026Smrgfunc_lt_dump_args () 39433e51e026Smrg{ 39443e51e026Smrg lt_dump_args_N=1; 39453e51e026Smrg for lt_arg 39463e51e026Smrg do 39473e51e026Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 39483e51e026Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 39493e51e026Smrg done 39503e51e026Smrg} 39513e51e026Smrg 39523e51e026Smrg# Core function for launching the target application 39533e51e026Smrgfunc_exec_program_core () 39543e51e026Smrg{ 3955a7b590b3Smrg" 39563e51e026Smrg case $host in 39573e51e026Smrg # Backslashes separate directories on plain windows 39583e51e026Smrg *-*-mingw | *-*-os2* | *-cegcc*) 39593e51e026Smrg $ECHO "\ 39603e51e026Smrg if test -n \"\$lt_option_debug\"; then 39613e51e026Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 39623e51e026Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 39633e51e026Smrg fi 39643e51e026Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 39653e51e026Smrg" 39663e51e026Smrg ;; 39673e51e026Smrg 39683e51e026Smrg *) 39693e51e026Smrg $ECHO "\ 39703e51e026Smrg if test -n \"\$lt_option_debug\"; then 39713e51e026Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 39723e51e026Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 39733e51e026Smrg fi 39743e51e026Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 39753e51e026Smrg" 39763e51e026Smrg ;; 39773e51e026Smrg esac 39783e51e026Smrg $ECHO "\ 39793e51e026Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 39803e51e026Smrg exit 1 39813e51e026Smrg} 39823e51e026Smrg 39833e51e026Smrg# A function to encapsulate launching the target application 39843e51e026Smrg# Strips options in the --lt-* namespace from \$@ and 39853e51e026Smrg# launches target application with the remaining arguments. 39863e51e026Smrgfunc_exec_program () 39873e51e026Smrg{ 39883e51e026Smrg case \" \$* \" in 39893e51e026Smrg *\\ --lt-*) 39903e51e026Smrg for lt_wr_arg 39913e51e026Smrg do 39923e51e026Smrg case \$lt_wr_arg in 39933e51e026Smrg --lt-*) ;; 39943e51e026Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 39953e51e026Smrg esac 39963e51e026Smrg shift 39973e51e026Smrg done ;; 39983e51e026Smrg esac 39993e51e026Smrg func_exec_program_core \${1+\"\$@\"} 40003e51e026Smrg} 40013e51e026Smrg 40023e51e026Smrg # Parse options 40033e51e026Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004943345d3Smrg 4005a7b590b3Smrg # Find the directory that this script lives in. 40063e51e026Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007a7b590b3Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008943345d3Smrg 4009a7b590b3Smrg # Follow symbolic links until we get to the real thisdir. 40103e51e026Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011a7b590b3Smrg while test -n \"\$file\"; do 40123e51e026Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013943345d3Smrg 4014a7b590b3Smrg # If there was a directory component, then change thisdir. 4015a7b590b3Smrg if test \"x\$destdir\" != \"x\$file\"; then 4016a7b590b3Smrg case \"\$destdir\" in 4017a7b590b3Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018a7b590b3Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 4019943345d3Smrg esac 4020a7b590b3Smrg fi 4021943345d3Smrg 40223e51e026Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 40233e51e026Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024a7b590b3Smrg done 4025943345d3Smrg 4026a7b590b3Smrg # Usually 'no', except on cygwin/mingw when embedded into 4027a7b590b3Smrg # the cwrapper. 40283e51e026Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029a7b590b3Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030a7b590b3Smrg # special case for '.' 4031a7b590b3Smrg if test \"\$thisdir\" = \".\"; then 4032a7b590b3Smrg thisdir=\`pwd\` 4033a7b590b3Smrg fi 4034a7b590b3Smrg # remove .libs from thisdir 4035a7b590b3Smrg case \"\$thisdir\" in 40363e51e026Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037a7b590b3Smrg $objdir ) thisdir=. ;; 4038a7b590b3Smrg esac 4039a7b590b3Smrg fi 4040a7b590b3Smrg 4041a7b590b3Smrg # Try to get the absolute directory name. 4042a7b590b3Smrg absdir=\`cd \"\$thisdir\" && pwd\` 4043a7b590b3Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044a7b590b3Smrg" 4045a7b590b3Smrg 4046a7b590b3Smrg if test "$fast_install" = yes; then 4047a7b590b3Smrg $ECHO "\ 4048a7b590b3Smrg program=lt-'$outputname'$exeext 4049a7b590b3Smrg progdir=\"\$thisdir/$objdir\" 4050a7b590b3Smrg 4051a7b590b3Smrg if test ! -f \"\$progdir/\$program\" || 4052a7b590b3Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053a7b590b3Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054a7b590b3Smrg 4055a7b590b3Smrg file=\"\$\$-\$program\" 4056a7b590b3Smrg 4057a7b590b3Smrg if test ! -d \"\$progdir\"; then 4058a7b590b3Smrg $MKDIR \"\$progdir\" 4059a7b590b3Smrg else 4060a7b590b3Smrg $RM \"\$progdir/\$file\" 4061a7b590b3Smrg fi" 4062a7b590b3Smrg 4063a7b590b3Smrg $ECHO "\ 4064a7b590b3Smrg 4065a7b590b3Smrg # relink executable if necessary 4066a7b590b3Smrg if test -n \"\$relink_command\"; then 4067a7b590b3Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068a7b590b3Smrg else 4069a7b590b3Smrg $ECHO \"\$relink_command_output\" >&2 4070a7b590b3Smrg $RM \"\$progdir/\$file\" 4071a7b590b3Smrg exit 1 4072943345d3Smrg fi 4073a7b590b3Smrg fi 4074943345d3Smrg 4075a7b590b3Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076a7b590b3Smrg { $RM \"\$progdir/\$program\"; 4077a7b590b3Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078a7b590b3Smrg $RM \"\$progdir/\$file\" 4079a7b590b3Smrg fi" 4080a7b590b3Smrg else 4081a7b590b3Smrg $ECHO "\ 4082a7b590b3Smrg program='$outputname' 4083a7b590b3Smrg progdir=\"\$thisdir/$objdir\" 4084a7b590b3Smrg" 4085943345d3Smrg fi 4086943345d3Smrg 4087a7b590b3Smrg $ECHO "\ 4088943345d3Smrg 4089a7b590b3Smrg if test -f \"\$progdir/\$program\"; then" 4090943345d3Smrg 40913e51e026Smrg # fixup the dll searchpath if we need to. 40923e51e026Smrg # 40933e51e026Smrg # Fix the DLL searchpath if we need to. Do this before prepending 40943e51e026Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 40953e51e026Smrg # libraries must come first. 40963e51e026Smrg if test -n "$dllsearchpath"; then 40973e51e026Smrg $ECHO "\ 40983e51e026Smrg # Add the dll search path components to the executable PATH 40993e51e026Smrg PATH=$dllsearchpath:\$PATH 41003e51e026Smrg" 41013e51e026Smrg fi 41023e51e026Smrg 4103a7b590b3Smrg # Export our shlibpath_var if we have one. 4104a7b590b3Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105a7b590b3Smrg $ECHO "\ 4106a7b590b3Smrg # Add our own library path to $shlibpath_var 4107a7b590b3Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108a7b590b3Smrg 4109a7b590b3Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110a7b590b3Smrg # The second colon is a workaround for a bug in BeOS R4 sed 41113e51e026Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112943345d3Smrg 4113a7b590b3Smrg export $shlibpath_var 4114a7b590b3Smrg" 4115943345d3Smrg fi 4116943345d3Smrg 4117a7b590b3Smrg $ECHO "\ 4118a7b590b3Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119a7b590b3Smrg # Run the actual program with our arguments. 41203e51e026Smrg func_exec_program \${1+\"\$@\"} 4121a7b590b3Smrg fi 4122a7b590b3Smrg else 4123a7b590b3Smrg # The program doesn't exist. 4124a7b590b3Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125a7b590b3Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 41263e51e026Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127a7b590b3Smrg exit 1 4128a7b590b3Smrg fi 4129a7b590b3Smrgfi\ 4130a7b590b3Smrg" 4131a7b590b3Smrg} 4132943345d3Smrg 4133943345d3Smrg 4134a7b590b3Smrg# func_emit_cwrapperexe_src 4135a7b590b3Smrg# emit the source code for a wrapper executable on stdout 4136a7b590b3Smrg# Must ONLY be called from within func_mode_link because 4137a7b590b3Smrg# it depends on a number of variable set therein. 4138a7b590b3Smrgfunc_emit_cwrapperexe_src () 4139a7b590b3Smrg{ 4140a7b590b3Smrg cat <<EOF 4141943345d3Smrg 4142a7b590b3Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143a7b590b3Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144943345d3Smrg 4145a7b590b3Smrg The $output program cannot be directly executed until all the libtool 4146a7b590b3Smrg libraries that it depends on are installed. 4147943345d3Smrg 4148a7b590b3Smrg This wrapper executable should never be moved out of the build directory. 4149a7b590b3Smrg If it is, it will not operate correctly. 4150a7b590b3Smrg*/ 4151a7b590b3SmrgEOF 4152a7b590b3Smrg cat <<"EOF" 41533e51e026Smrg#ifdef _MSC_VER 41543e51e026Smrg# define _CRT_SECURE_NO_DEPRECATE 1 41553e51e026Smrg#endif 4156a7b590b3Smrg#include <stdio.h> 4157a7b590b3Smrg#include <stdlib.h> 4158a7b590b3Smrg#ifdef _MSC_VER 4159a7b590b3Smrg# include <direct.h> 4160a7b590b3Smrg# include <process.h> 4161a7b590b3Smrg# include <io.h> 4162a7b590b3Smrg#else 4163a7b590b3Smrg# include <unistd.h> 4164a7b590b3Smrg# include <stdint.h> 4165a7b590b3Smrg# ifdef __CYGWIN__ 4166a7b590b3Smrg# include <io.h> 4167a7b590b3Smrg# endif 4168a7b590b3Smrg#endif 4169a7b590b3Smrg#include <malloc.h> 4170a7b590b3Smrg#include <stdarg.h> 4171a7b590b3Smrg#include <assert.h> 4172a7b590b3Smrg#include <string.h> 4173a7b590b3Smrg#include <ctype.h> 4174a7b590b3Smrg#include <errno.h> 4175a7b590b3Smrg#include <fcntl.h> 4176a7b590b3Smrg#include <sys/stat.h> 4177943345d3Smrg 41783e51e026Smrg/* declarations of non-ANSI functions */ 41793e51e026Smrg#if defined(__MINGW32__) 41803e51e026Smrg# ifdef __STRICT_ANSI__ 41813e51e026Smrgint _putenv (const char *); 41823e51e026Smrg# endif 41833e51e026Smrg#elif defined(__CYGWIN__) 41843e51e026Smrg# ifdef __STRICT_ANSI__ 41853e51e026Smrgchar *realpath (const char *, char *); 41863e51e026Smrgint putenv (char *); 41873e51e026Smrgint setenv (const char *, const char *, int); 41883e51e026Smrg# endif 41893e51e026Smrg/* #elif defined (other platforms) ... */ 41903e51e026Smrg#endif 41913e51e026Smrg 41923e51e026Smrg/* portability defines, excluding path handling macros */ 41933e51e026Smrg#if defined(_MSC_VER) 41943e51e026Smrg# define setmode _setmode 41953e51e026Smrg# define stat _stat 41963e51e026Smrg# define chmod _chmod 41973e51e026Smrg# define getcwd _getcwd 41983e51e026Smrg# define putenv _putenv 41993e51e026Smrg# define S_IXUSR _S_IEXEC 42003e51e026Smrg# ifndef _INTPTR_T_DEFINED 42013e51e026Smrg# define _INTPTR_T_DEFINED 42023e51e026Smrg# define intptr_t int 42033e51e026Smrg# endif 42043e51e026Smrg#elif defined(__MINGW32__) 42053e51e026Smrg# define setmode _setmode 42063e51e026Smrg# define stat _stat 42073e51e026Smrg# define chmod _chmod 42083e51e026Smrg# define getcwd _getcwd 42093e51e026Smrg# define putenv _putenv 42103e51e026Smrg#elif defined(__CYGWIN__) 42113e51e026Smrg# define HAVE_SETENV 42123e51e026Smrg# define FOPEN_WB "wb" 42133e51e026Smrg/* #elif defined (other platforms) ... */ 42143e51e026Smrg#endif 42153e51e026Smrg 4216a7b590b3Smrg#if defined(PATH_MAX) 4217a7b590b3Smrg# define LT_PATHMAX PATH_MAX 4218a7b590b3Smrg#elif defined(MAXPATHLEN) 4219a7b590b3Smrg# define LT_PATHMAX MAXPATHLEN 4220a7b590b3Smrg#else 4221a7b590b3Smrg# define LT_PATHMAX 1024 4222a7b590b3Smrg#endif 4223943345d3Smrg 4224a7b590b3Smrg#ifndef S_IXOTH 4225a7b590b3Smrg# define S_IXOTH 0 4226a7b590b3Smrg#endif 4227a7b590b3Smrg#ifndef S_IXGRP 4228a7b590b3Smrg# define S_IXGRP 0 4229a7b590b3Smrg#endif 4230943345d3Smrg 42313e51e026Smrg/* path handling portability macros */ 4232a7b590b3Smrg#ifndef DIR_SEPARATOR 4233a7b590b3Smrg# define DIR_SEPARATOR '/' 4234a7b590b3Smrg# define PATH_SEPARATOR ':' 4235a7b590b3Smrg#endif 4236943345d3Smrg 4237a7b590b3Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238a7b590b3Smrg defined (__OS2__) 4239a7b590b3Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240a7b590b3Smrg# define FOPEN_WB "wb" 4241a7b590b3Smrg# ifndef DIR_SEPARATOR_2 4242a7b590b3Smrg# define DIR_SEPARATOR_2 '\\' 4243a7b590b3Smrg# endif 4244a7b590b3Smrg# ifndef PATH_SEPARATOR_2 4245a7b590b3Smrg# define PATH_SEPARATOR_2 ';' 4246a7b590b3Smrg# endif 4247a7b590b3Smrg#endif 4248943345d3Smrg 4249a7b590b3Smrg#ifndef DIR_SEPARATOR_2 4250a7b590b3Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251a7b590b3Smrg#else /* DIR_SEPARATOR_2 */ 4252a7b590b3Smrg# define IS_DIR_SEPARATOR(ch) \ 4253a7b590b3Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254a7b590b3Smrg#endif /* DIR_SEPARATOR_2 */ 4255943345d3Smrg 4256a7b590b3Smrg#ifndef PATH_SEPARATOR_2 4257a7b590b3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258a7b590b3Smrg#else /* PATH_SEPARATOR_2 */ 4259a7b590b3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260a7b590b3Smrg#endif /* PATH_SEPARATOR_2 */ 4261943345d3Smrg 4262a7b590b3Smrg#ifndef FOPEN_WB 4263a7b590b3Smrg# define FOPEN_WB "w" 4264a7b590b3Smrg#endif 4265a7b590b3Smrg#ifndef _O_BINARY 4266a7b590b3Smrg# define _O_BINARY 0 4267a7b590b3Smrg#endif 4268943345d3Smrg 4269a7b590b3Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270a7b590b3Smrg#define XFREE(stale) do { \ 4271a7b590b3Smrg if (stale) { free ((void *) stale); stale = 0; } \ 4272a7b590b3Smrg} while (0) 4273943345d3Smrg 42743e51e026Smrg#if defined(LT_DEBUGWRAPPER) 42753e51e026Smrgstatic int lt_debug = 1; 4276a7b590b3Smrg#else 42773e51e026Smrgstatic int lt_debug = 0; 4278a7b590b3Smrg#endif 4279943345d3Smrg 42803e51e026Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281943345d3Smrg 4282a7b590b3Smrgvoid *xmalloc (size_t num); 4283a7b590b3Smrgchar *xstrdup (const char *string); 4284a7b590b3Smrgconst char *base_name (const char *name); 4285a7b590b3Smrgchar *find_executable (const char *wrapper); 4286a7b590b3Smrgchar *chase_symlinks (const char *pathspec); 4287a7b590b3Smrgint make_executable (const char *path); 4288a7b590b3Smrgint check_executable (const char *path); 4289a7b590b3Smrgchar *strendzap (char *str, const char *pat); 42903e51e026Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 42913e51e026Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 42923e51e026Smrgstatic const char *nonnull (const char *s); 42933e51e026Smrgstatic const char *nonempty (const char *s); 4294a7b590b3Smrgvoid lt_setenv (const char *name, const char *value); 4295a7b590b3Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296a7b590b3Smrgvoid lt_update_exe_path (const char *name, const char *value); 4297a7b590b3Smrgvoid lt_update_lib_path (const char *name, const char *value); 42983e51e026Smrgchar **prepare_spawn (char **argv); 42993e51e026Smrgvoid lt_dump_script (FILE *f); 4300a7b590b3SmrgEOF 4301a7b590b3Smrg 4302a7b590b3Smrg cat <<EOF 43033e51e026Smrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304a7b590b3Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305a7b590b3SmrgEOF 4306943345d3Smrg 4307a7b590b3Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 43083e51e026Smrg func_to_host_path "$temp_rpath" 4309a7b590b3Smrg cat <<EOF 43103e51e026Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311a7b590b3SmrgEOF 4312a7b590b3Smrg else 4313a7b590b3Smrg cat <<"EOF" 4314a7b590b3Smrgconst char * LIB_PATH_VALUE = ""; 4315a7b590b3SmrgEOF 4316943345d3Smrg fi 4317943345d3Smrg 4318a7b590b3Smrg if test -n "$dllsearchpath"; then 43193e51e026Smrg func_to_host_path "$dllsearchpath:" 4320a7b590b3Smrg cat <<EOF 4321a7b590b3Smrgconst char * EXE_PATH_VARNAME = "PATH"; 43223e51e026Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323943345d3SmrgEOF 4324943345d3Smrg else 4325a7b590b3Smrg cat <<"EOF" 4326a7b590b3Smrgconst char * EXE_PATH_VARNAME = ""; 4327a7b590b3Smrgconst char * EXE_PATH_VALUE = ""; 4328a7b590b3SmrgEOF 4329943345d3Smrg fi 4330a7b590b3Smrg 4331a7b590b3Smrg if test "$fast_install" = yes; then 4332a7b590b3Smrg cat <<EOF 4333a7b590b3Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334a7b590b3SmrgEOF 4335943345d3Smrg else 4336a7b590b3Smrg cat <<EOF 4337a7b590b3Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338a7b590b3SmrgEOF 4339943345d3Smrg fi 4340943345d3Smrg 4341943345d3Smrg 4342a7b590b3Smrg cat <<"EOF" 4343943345d3Smrg 4344a7b590b3Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345943345d3Smrg 4346a7b590b3Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347a7b590b3Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 43483e51e026Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349943345d3Smrg 4350a7b590b3Smrgint 4351a7b590b3Smrgmain (int argc, char *argv[]) 4352a7b590b3Smrg{ 4353a7b590b3Smrg char **newargz; 4354a7b590b3Smrg int newargc; 4355a7b590b3Smrg char *tmp_pathspec; 4356a7b590b3Smrg char *actual_cwrapper_path; 4357a7b590b3Smrg char *actual_cwrapper_name; 4358a7b590b3Smrg char *target_name; 4359a7b590b3Smrg char *lt_argv_zero; 4360a7b590b3Smrg intptr_t rval = 127; 4361943345d3Smrg 4362a7b590b3Smrg int i; 4363943345d3Smrg 4364a7b590b3Smrg program_name = (char *) xstrdup (base_name (argv[0])); 43653e51e026Smrg newargz = XMALLOC (char *, argc + 1); 4366943345d3Smrg 43673e51e026Smrg /* very simple arg parsing; don't want to rely on getopt 43683e51e026Smrg * also, copy all non cwrapper options to newargz, except 43693e51e026Smrg * argz[0], which is handled differently 43703e51e026Smrg */ 43713e51e026Smrg newargc=0; 4372a7b590b3Smrg for (i = 1; i < argc; i++) 4373a7b590b3Smrg { 4374a7b590b3Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375a7b590b3Smrg { 4376a7b590b3SmrgEOF 4377a7b590b3Smrg case "$host" in 4378a7b590b3Smrg *mingw* | *cygwin* ) 4379a7b590b3Smrg # make stdout use "unix" line endings 4380a7b590b3Smrg echo " setmode(1,_O_BINARY);" 4381a7b590b3Smrg ;; 4382a7b590b3Smrg esac 4383943345d3Smrg 4384a7b590b3Smrg cat <<"EOF" 43853e51e026Smrg lt_dump_script (stdout); 4386a7b590b3Smrg return 0; 4387a7b590b3Smrg } 43883e51e026Smrg if (strcmp (argv[i], debug_opt) == 0) 43893e51e026Smrg { 43903e51e026Smrg lt_debug = 1; 43913e51e026Smrg continue; 43923e51e026Smrg } 43933e51e026Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 43943e51e026Smrg { 43953e51e026Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 43963e51e026Smrg namespace, but it is not one of the ones we know about and 43973e51e026Smrg have already dealt with, above (inluding dump-script), then 43983e51e026Smrg report an error. Otherwise, targets might begin to believe 43993e51e026Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 44003e51e026Smrg namespace. The first time any user complains about this, we'll 44013e51e026Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 44023e51e026Smrg or a configure.ac-settable value. 44033e51e026Smrg */ 44043e51e026Smrg lt_fatal (__FILE__, __LINE__, 44053e51e026Smrg "unrecognized %s option: '%s'", 44063e51e026Smrg ltwrapper_option_prefix, argv[i]); 44073e51e026Smrg } 44083e51e026Smrg /* otherwise ... */ 44093e51e026Smrg newargz[++newargc] = xstrdup (argv[i]); 4410a7b590b3Smrg } 44113e51e026Smrg newargz[++newargc] = NULL; 44123e51e026Smrg 44133e51e026SmrgEOF 44143e51e026Smrg cat <<EOF 44153e51e026Smrg /* The GNU banner must be the first non-error debug message */ 44163e51e026Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 44173e51e026SmrgEOF 44183e51e026Smrg cat <<"EOF" 44193e51e026Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 44203e51e026Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421943345d3Smrg 4422a7b590b3Smrg tmp_pathspec = find_executable (argv[0]); 4423a7b590b3Smrg if (tmp_pathspec == NULL) 44243e51e026Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 44253e51e026Smrg lt_debugprintf (__FILE__, __LINE__, 44263e51e026Smrg "(main) found exe (before symlink chase) at: %s\n", 44273e51e026Smrg tmp_pathspec); 4428a7b590b3Smrg 4429a7b590b3Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 44303e51e026Smrg lt_debugprintf (__FILE__, __LINE__, 44313e51e026Smrg "(main) found exe (after symlink chase) at: %s\n", 44323e51e026Smrg actual_cwrapper_path); 4433a7b590b3Smrg XFREE (tmp_pathspec); 4434a7b590b3Smrg 44353e51e026Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436a7b590b3Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437a7b590b3Smrg 4438a7b590b3Smrg /* wrapper name transforms */ 4439a7b590b3Smrg strendzap (actual_cwrapper_name, ".exe"); 4440a7b590b3Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441a7b590b3Smrg XFREE (actual_cwrapper_name); 4442a7b590b3Smrg actual_cwrapper_name = tmp_pathspec; 4443a7b590b3Smrg tmp_pathspec = 0; 4444a7b590b3Smrg 4445a7b590b3Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446a7b590b3Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447a7b590b3Smrg strendzap (target_name, ".exe"); 4448a7b590b3Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449a7b590b3Smrg XFREE (target_name); 4450a7b590b3Smrg target_name = tmp_pathspec; 4451a7b590b3Smrg tmp_pathspec = 0; 4452a7b590b3Smrg 44533e51e026Smrg lt_debugprintf (__FILE__, __LINE__, 44543e51e026Smrg "(main) libtool target name: %s\n", 44553e51e026Smrg target_name); 4456a7b590b3SmrgEOF 4457943345d3Smrg 4458a7b590b3Smrg cat <<EOF 4459a7b590b3Smrg newargz[0] = 4460a7b590b3Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461a7b590b3Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462a7b590b3Smrg strcpy (newargz[0], actual_cwrapper_path); 4463a7b590b3Smrg strcat (newargz[0], "$objdir"); 4464a7b590b3Smrg strcat (newargz[0], "/"); 4465a7b590b3SmrgEOF 4466943345d3Smrg 4467a7b590b3Smrg cat <<"EOF" 4468a7b590b3Smrg /* stop here, and copy so we don't have to do this twice */ 4469a7b590b3Smrg tmp_pathspec = xstrdup (newargz[0]); 4470943345d3Smrg 4471a7b590b3Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472a7b590b3Smrg strcat (newargz[0], actual_cwrapper_name); 4473943345d3Smrg 4474a7b590b3Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475a7b590b3Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476a7b590b3Smrg XFREE (tmp_pathspec); 4477a7b590b3Smrg tmp_pathspec = NULL; 4478a7b590b3SmrgEOF 4479943345d3Smrg 4480a7b590b3Smrg case $host_os in 4481a7b590b3Smrg mingw*) 4482a7b590b3Smrg cat <<"EOF" 4483a7b590b3Smrg { 4484a7b590b3Smrg char* p; 4485a7b590b3Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486a7b590b3Smrg { 4487a7b590b3Smrg *p = '/'; 4488a7b590b3Smrg } 4489a7b590b3Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490a7b590b3Smrg { 4491a7b590b3Smrg *p = '/'; 4492a7b590b3Smrg } 4493a7b590b3Smrg } 4494a7b590b3SmrgEOF 4495a7b590b3Smrg ;; 4496a7b590b3Smrg esac 4497943345d3Smrg 4498a7b590b3Smrg cat <<"EOF" 4499a7b590b3Smrg XFREE (target_name); 4500a7b590b3Smrg XFREE (actual_cwrapper_path); 4501a7b590b3Smrg XFREE (actual_cwrapper_name); 4502943345d3Smrg 4503a7b590b3Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504a7b590b3Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 45053e51e026Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 45063e51e026Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 45073e51e026Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 45083e51e026Smrg libraries must come first. */ 4509a7b590b3Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 45103e51e026Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511943345d3Smrg 45123e51e026Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 45133e51e026Smrg nonnull (lt_argv_zero)); 4514a7b590b3Smrg for (i = 0; i < newargc; i++) 4515a7b590b3Smrg { 45163e51e026Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 45173e51e026Smrg i, nonnull (newargz[i])); 4518a7b590b3Smrg } 4519943345d3Smrg 4520a7b590b3SmrgEOF 4521943345d3Smrg 4522a7b590b3Smrg case $host_os in 4523a7b590b3Smrg mingw*) 4524a7b590b3Smrg cat <<"EOF" 4525a7b590b3Smrg /* execv doesn't actually work on mingw as expected on unix */ 45263e51e026Smrg newargz = prepare_spawn (newargz); 4527a7b590b3Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528a7b590b3Smrg if (rval == -1) 4529a7b590b3Smrg { 4530a7b590b3Smrg /* failed to start process */ 45313e51e026Smrg lt_debugprintf (__FILE__, __LINE__, 45323e51e026Smrg "(main) failed to launch target \"%s\": %s\n", 45333e51e026Smrg lt_argv_zero, nonnull (strerror (errno))); 4534a7b590b3Smrg return 127; 4535a7b590b3Smrg } 4536a7b590b3Smrg return rval; 4537a7b590b3SmrgEOF 4538a7b590b3Smrg ;; 4539a7b590b3Smrg *) 4540a7b590b3Smrg cat <<"EOF" 4541a7b590b3Smrg execv (lt_argv_zero, newargz); 4542a7b590b3Smrg return rval; /* =127, but avoids unused variable warning */ 4543a7b590b3SmrgEOF 4544a7b590b3Smrg ;; 4545a7b590b3Smrg esac 4546943345d3Smrg 4547a7b590b3Smrg cat <<"EOF" 4548a7b590b3Smrg} 4549943345d3Smrg 4550a7b590b3Smrgvoid * 4551a7b590b3Smrgxmalloc (size_t num) 4552a7b590b3Smrg{ 4553a7b590b3Smrg void *p = (void *) malloc (num); 4554a7b590b3Smrg if (!p) 45553e51e026Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556943345d3Smrg 4557a7b590b3Smrg return p; 4558a7b590b3Smrg} 4559943345d3Smrg 4560a7b590b3Smrgchar * 4561a7b590b3Smrgxstrdup (const char *string) 4562a7b590b3Smrg{ 4563a7b590b3Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564a7b590b3Smrg string) : NULL; 4565a7b590b3Smrg} 4566943345d3Smrg 4567a7b590b3Smrgconst char * 4568a7b590b3Smrgbase_name (const char *name) 4569a7b590b3Smrg{ 4570a7b590b3Smrg const char *base; 4571943345d3Smrg 4572a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573a7b590b3Smrg /* Skip over the disk name in MSDOS pathnames. */ 4574a7b590b3Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575a7b590b3Smrg name += 2; 4576a7b590b3Smrg#endif 4577943345d3Smrg 4578a7b590b3Smrg for (base = name; *name; name++) 4579a7b590b3Smrg if (IS_DIR_SEPARATOR (*name)) 4580a7b590b3Smrg base = name + 1; 4581a7b590b3Smrg return base; 4582a7b590b3Smrg} 4583943345d3Smrg 4584a7b590b3Smrgint 4585a7b590b3Smrgcheck_executable (const char *path) 4586a7b590b3Smrg{ 4587a7b590b3Smrg struct stat st; 4588943345d3Smrg 45893e51e026Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 45903e51e026Smrg nonempty (path)); 4591a7b590b3Smrg if ((!path) || (!*path)) 4592a7b590b3Smrg return 0; 4593943345d3Smrg 4594a7b590b3Smrg if ((stat (path, &st) >= 0) 4595a7b590b3Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596a7b590b3Smrg return 1; 4597a7b590b3Smrg else 4598a7b590b3Smrg return 0; 4599a7b590b3Smrg} 4600943345d3Smrg 4601a7b590b3Smrgint 4602a7b590b3Smrgmake_executable (const char *path) 4603a7b590b3Smrg{ 4604a7b590b3Smrg int rval = 0; 4605a7b590b3Smrg struct stat st; 4606943345d3Smrg 46073e51e026Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 46083e51e026Smrg nonempty (path)); 4609a7b590b3Smrg if ((!path) || (!*path)) 4610a7b590b3Smrg return 0; 4611943345d3Smrg 4612a7b590b3Smrg if (stat (path, &st) >= 0) 4613a7b590b3Smrg { 4614a7b590b3Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615a7b590b3Smrg } 4616a7b590b3Smrg return rval; 4617a7b590b3Smrg} 4618943345d3Smrg 4619a7b590b3Smrg/* Searches for the full path of the wrapper. Returns 4620a7b590b3Smrg newly allocated full path name if found, NULL otherwise 4621a7b590b3Smrg Does not chase symlinks, even on platforms that support them. 4622a7b590b3Smrg*/ 4623a7b590b3Smrgchar * 4624a7b590b3Smrgfind_executable (const char *wrapper) 4625a7b590b3Smrg{ 4626a7b590b3Smrg int has_slash = 0; 4627a7b590b3Smrg const char *p; 4628a7b590b3Smrg const char *p_next; 4629a7b590b3Smrg /* static buffer for getcwd */ 4630a7b590b3Smrg char tmp[LT_PATHMAX + 1]; 4631a7b590b3Smrg int tmp_len; 4632a7b590b3Smrg char *concat_name; 4633943345d3Smrg 46343e51e026Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 46353e51e026Smrg nonempty (wrapper)); 4636943345d3Smrg 4637a7b590b3Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638a7b590b3Smrg return NULL; 4639943345d3Smrg 4640a7b590b3Smrg /* Absolute path? */ 4641a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642a7b590b3Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643a7b590b3Smrg { 4644a7b590b3Smrg concat_name = xstrdup (wrapper); 4645a7b590b3Smrg if (check_executable (concat_name)) 4646a7b590b3Smrg return concat_name; 4647a7b590b3Smrg XFREE (concat_name); 4648a7b590b3Smrg } 4649a7b590b3Smrg else 4650a7b590b3Smrg { 4651a7b590b3Smrg#endif 4652a7b590b3Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653a7b590b3Smrg { 4654a7b590b3Smrg concat_name = xstrdup (wrapper); 4655a7b590b3Smrg if (check_executable (concat_name)) 4656a7b590b3Smrg return concat_name; 4657a7b590b3Smrg XFREE (concat_name); 4658a7b590b3Smrg } 4659a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660a7b590b3Smrg } 4661a7b590b3Smrg#endif 4662943345d3Smrg 4663a7b590b3Smrg for (p = wrapper; *p; p++) 4664a7b590b3Smrg if (*p == '/') 4665a7b590b3Smrg { 4666a7b590b3Smrg has_slash = 1; 4667a7b590b3Smrg break; 4668a7b590b3Smrg } 4669a7b590b3Smrg if (!has_slash) 4670a7b590b3Smrg { 4671a7b590b3Smrg /* no slashes; search PATH */ 4672a7b590b3Smrg const char *path = getenv ("PATH"); 4673a7b590b3Smrg if (path != NULL) 4674a7b590b3Smrg { 4675a7b590b3Smrg for (p = path; *p; p = p_next) 4676a7b590b3Smrg { 4677a7b590b3Smrg const char *q; 4678a7b590b3Smrg size_t p_len; 4679a7b590b3Smrg for (q = p; *q; q++) 4680a7b590b3Smrg if (IS_PATH_SEPARATOR (*q)) 4681a7b590b3Smrg break; 4682a7b590b3Smrg p_len = q - p; 4683a7b590b3Smrg p_next = (*q == '\0' ? q : q + 1); 4684a7b590b3Smrg if (p_len == 0) 4685a7b590b3Smrg { 4686a7b590b3Smrg /* empty path: current directory */ 4687a7b590b3Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 46883e51e026Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 46893e51e026Smrg nonnull (strerror (errno))); 4690a7b590b3Smrg tmp_len = strlen (tmp); 4691a7b590b3Smrg concat_name = 4692a7b590b3Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693a7b590b3Smrg memcpy (concat_name, tmp, tmp_len); 4694a7b590b3Smrg concat_name[tmp_len] = '/'; 4695a7b590b3Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4696a7b590b3Smrg } 4697a7b590b3Smrg else 4698a7b590b3Smrg { 4699a7b590b3Smrg concat_name = 4700a7b590b3Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701a7b590b3Smrg memcpy (concat_name, p, p_len); 4702a7b590b3Smrg concat_name[p_len] = '/'; 4703a7b590b3Smrg strcpy (concat_name + p_len + 1, wrapper); 4704a7b590b3Smrg } 4705a7b590b3Smrg if (check_executable (concat_name)) 4706a7b590b3Smrg return concat_name; 4707a7b590b3Smrg XFREE (concat_name); 4708a7b590b3Smrg } 4709a7b590b3Smrg } 4710a7b590b3Smrg /* not found in PATH; assume curdir */ 4711a7b590b3Smrg } 4712a7b590b3Smrg /* Relative path | not found in path: prepend cwd */ 4713a7b590b3Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 47143e51e026Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 47153e51e026Smrg nonnull (strerror (errno))); 4716a7b590b3Smrg tmp_len = strlen (tmp); 4717a7b590b3Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718a7b590b3Smrg memcpy (concat_name, tmp, tmp_len); 4719a7b590b3Smrg concat_name[tmp_len] = '/'; 4720a7b590b3Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4721943345d3Smrg 4722a7b590b3Smrg if (check_executable (concat_name)) 4723a7b590b3Smrg return concat_name; 4724a7b590b3Smrg XFREE (concat_name); 4725a7b590b3Smrg return NULL; 4726a7b590b3Smrg} 4727943345d3Smrg 4728a7b590b3Smrgchar * 4729a7b590b3Smrgchase_symlinks (const char *pathspec) 4730a7b590b3Smrg{ 4731a7b590b3Smrg#ifndef S_ISLNK 4732a7b590b3Smrg return xstrdup (pathspec); 4733a7b590b3Smrg#else 4734a7b590b3Smrg char buf[LT_PATHMAX]; 4735a7b590b3Smrg struct stat s; 4736a7b590b3Smrg char *tmp_pathspec = xstrdup (pathspec); 4737a7b590b3Smrg char *p; 4738a7b590b3Smrg int has_symlinks = 0; 4739a7b590b3Smrg while (strlen (tmp_pathspec) && !has_symlinks) 4740a7b590b3Smrg { 47413e51e026Smrg lt_debugprintf (__FILE__, __LINE__, 47423e51e026Smrg "checking path component for symlinks: %s\n", 47433e51e026Smrg tmp_pathspec); 4744a7b590b3Smrg if (lstat (tmp_pathspec, &s) == 0) 4745a7b590b3Smrg { 4746a7b590b3Smrg if (S_ISLNK (s.st_mode) != 0) 4747a7b590b3Smrg { 4748a7b590b3Smrg has_symlinks = 1; 4749a7b590b3Smrg break; 4750a7b590b3Smrg } 4751943345d3Smrg 4752a7b590b3Smrg /* search backwards for last DIR_SEPARATOR */ 4753a7b590b3Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754a7b590b3Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755a7b590b3Smrg p--; 4756a7b590b3Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757a7b590b3Smrg { 4758a7b590b3Smrg /* no more DIR_SEPARATORS left */ 4759a7b590b3Smrg break; 4760a7b590b3Smrg } 4761a7b590b3Smrg *p = '\0'; 4762a7b590b3Smrg } 4763a7b590b3Smrg else 4764a7b590b3Smrg { 47653e51e026Smrg lt_fatal (__FILE__, __LINE__, 47663e51e026Smrg "error accessing file \"%s\": %s", 47673e51e026Smrg tmp_pathspec, nonnull (strerror (errno))); 4768a7b590b3Smrg } 4769a7b590b3Smrg } 4770a7b590b3Smrg XFREE (tmp_pathspec); 4771943345d3Smrg 4772a7b590b3Smrg if (!has_symlinks) 4773a7b590b3Smrg { 4774a7b590b3Smrg return xstrdup (pathspec); 4775a7b590b3Smrg } 4776943345d3Smrg 4777a7b590b3Smrg tmp_pathspec = realpath (pathspec, buf); 4778a7b590b3Smrg if (tmp_pathspec == 0) 4779a7b590b3Smrg { 47803e51e026Smrg lt_fatal (__FILE__, __LINE__, 47813e51e026Smrg "could not follow symlinks for %s", pathspec); 4782a7b590b3Smrg } 4783a7b590b3Smrg return xstrdup (tmp_pathspec); 4784a7b590b3Smrg#endif 4785a7b590b3Smrg} 4786943345d3Smrg 4787a7b590b3Smrgchar * 4788a7b590b3Smrgstrendzap (char *str, const char *pat) 4789a7b590b3Smrg{ 4790a7b590b3Smrg size_t len, patlen; 4791943345d3Smrg 4792a7b590b3Smrg assert (str != NULL); 4793a7b590b3Smrg assert (pat != NULL); 4794943345d3Smrg 4795a7b590b3Smrg len = strlen (str); 4796a7b590b3Smrg patlen = strlen (pat); 4797943345d3Smrg 4798a7b590b3Smrg if (patlen <= len) 4799a7b590b3Smrg { 4800a7b590b3Smrg str += len - patlen; 4801a7b590b3Smrg if (strcmp (str, pat) == 0) 4802a7b590b3Smrg *str = '\0'; 4803a7b590b3Smrg } 4804a7b590b3Smrg return str; 4805a7b590b3Smrg} 4806943345d3Smrg 48073e51e026Smrgvoid 48083e51e026Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 48093e51e026Smrg{ 48103e51e026Smrg va_list args; 48113e51e026Smrg if (lt_debug) 48123e51e026Smrg { 48133e51e026Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 48143e51e026Smrg va_start (args, fmt); 48153e51e026Smrg (void) vfprintf (stderr, fmt, args); 48163e51e026Smrg va_end (args); 48173e51e026Smrg } 48183e51e026Smrg} 48193e51e026Smrg 4820a7b590b3Smrgstatic void 48213e51e026Smrglt_error_core (int exit_status, const char *file, 48223e51e026Smrg int line, const char *mode, 4823a7b590b3Smrg const char *message, va_list ap) 4824a7b590b3Smrg{ 48253e51e026Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826a7b590b3Smrg vfprintf (stderr, message, ap); 4827a7b590b3Smrg fprintf (stderr, ".\n"); 4828943345d3Smrg 4829a7b590b3Smrg if (exit_status >= 0) 4830a7b590b3Smrg exit (exit_status); 4831a7b590b3Smrg} 4832943345d3Smrg 4833a7b590b3Smrgvoid 48343e51e026Smrglt_fatal (const char *file, int line, const char *message, ...) 4835a7b590b3Smrg{ 4836a7b590b3Smrg va_list ap; 4837a7b590b3Smrg va_start (ap, message); 48383e51e026Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839a7b590b3Smrg va_end (ap); 4840a7b590b3Smrg} 4841943345d3Smrg 48423e51e026Smrgstatic const char * 48433e51e026Smrgnonnull (const char *s) 48443e51e026Smrg{ 48453e51e026Smrg return s ? s : "(null)"; 48463e51e026Smrg} 48473e51e026Smrg 48483e51e026Smrgstatic const char * 48493e51e026Smrgnonempty (const char *s) 48503e51e026Smrg{ 48513e51e026Smrg return (s && !*s) ? "(empty)" : nonnull (s); 48523e51e026Smrg} 48533e51e026Smrg 4854a7b590b3Smrgvoid 4855a7b590b3Smrglt_setenv (const char *name, const char *value) 4856a7b590b3Smrg{ 48573e51e026Smrg lt_debugprintf (__FILE__, __LINE__, 48583e51e026Smrg "(lt_setenv) setting '%s' to '%s'\n", 48593e51e026Smrg nonnull (name), nonnull (value)); 4860a7b590b3Smrg { 4861a7b590b3Smrg#ifdef HAVE_SETENV 4862a7b590b3Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863a7b590b3Smrg char *str = xstrdup (value); 4864a7b590b3Smrg setenv (name, str, 1); 4865a7b590b3Smrg#else 4866a7b590b3Smrg int len = strlen (name) + 1 + strlen (value) + 1; 4867a7b590b3Smrg char *str = XMALLOC (char, len); 4868a7b590b3Smrg sprintf (str, "%s=%s", name, value); 4869a7b590b3Smrg if (putenv (str) != EXIT_SUCCESS) 4870a7b590b3Smrg { 4871a7b590b3Smrg XFREE (str); 4872a7b590b3Smrg } 4873a7b590b3Smrg#endif 4874a7b590b3Smrg } 4875a7b590b3Smrg} 4876943345d3Smrg 4877a7b590b3Smrgchar * 4878a7b590b3Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879a7b590b3Smrg{ 4880a7b590b3Smrg char *new_value; 4881a7b590b3Smrg if (orig_value && *orig_value) 4882a7b590b3Smrg { 4883a7b590b3Smrg int orig_value_len = strlen (orig_value); 4884a7b590b3Smrg int add_len = strlen (add); 4885a7b590b3Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886a7b590b3Smrg if (to_end) 4887a7b590b3Smrg { 4888a7b590b3Smrg strcpy (new_value, orig_value); 4889a7b590b3Smrg strcpy (new_value + orig_value_len, add); 4890a7b590b3Smrg } 4891a7b590b3Smrg else 4892a7b590b3Smrg { 4893a7b590b3Smrg strcpy (new_value, add); 4894a7b590b3Smrg strcpy (new_value + add_len, orig_value); 4895a7b590b3Smrg } 4896a7b590b3Smrg } 4897a7b590b3Smrg else 4898a7b590b3Smrg { 4899a7b590b3Smrg new_value = xstrdup (add); 4900a7b590b3Smrg } 4901a7b590b3Smrg return new_value; 4902a7b590b3Smrg} 4903943345d3Smrg 4904a7b590b3Smrgvoid 4905a7b590b3Smrglt_update_exe_path (const char *name, const char *value) 4906a7b590b3Smrg{ 49073e51e026Smrg lt_debugprintf (__FILE__, __LINE__, 49083e51e026Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 49093e51e026Smrg nonnull (name), nonnull (value)); 4910943345d3Smrg 4911a7b590b3Smrg if (name && *name && value && *value) 4912a7b590b3Smrg { 4913a7b590b3Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914a7b590b3Smrg /* some systems can't cope with a ':'-terminated path #' */ 4915a7b590b3Smrg int len = strlen (new_value); 4916a7b590b3Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917a7b590b3Smrg { 4918a7b590b3Smrg new_value[len-1] = '\0'; 4919a7b590b3Smrg } 4920a7b590b3Smrg lt_setenv (name, new_value); 4921a7b590b3Smrg XFREE (new_value); 4922a7b590b3Smrg } 4923a7b590b3Smrg} 4924943345d3Smrg 4925a7b590b3Smrgvoid 4926a7b590b3Smrglt_update_lib_path (const char *name, const char *value) 4927a7b590b3Smrg{ 49283e51e026Smrg lt_debugprintf (__FILE__, __LINE__, 49293e51e026Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 49303e51e026Smrg nonnull (name), nonnull (value)); 4931943345d3Smrg 4932a7b590b3Smrg if (name && *name && value && *value) 4933a7b590b3Smrg { 4934a7b590b3Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935a7b590b3Smrg lt_setenv (name, new_value); 4936a7b590b3Smrg XFREE (new_value); 4937a7b590b3Smrg } 4938a7b590b3Smrg} 4939943345d3Smrg 49403e51e026SmrgEOF 49413e51e026Smrg case $host_os in 49423e51e026Smrg mingw*) 49433e51e026Smrg cat <<"EOF" 49443e51e026Smrg 49453e51e026Smrg/* Prepares an argument vector before calling spawn(). 49463e51e026Smrg Note that spawn() does not by itself call the command interpreter 49473e51e026Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 49483e51e026Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 49493e51e026Smrg GetVersionEx(&v); 49503e51e026Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 49513e51e026Smrg }) ? "cmd.exe" : "command.com"). 49523e51e026Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 49533e51e026Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 49543e51e026Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 49553e51e026Smrg special way: 49563e51e026Smrg - Space and tab are interpreted as delimiters. They are not treated as 49573e51e026Smrg delimiters if they are surrounded by double quotes: "...". 49583e51e026Smrg - Unescaped double quotes are removed from the input. Their only effect is 49593e51e026Smrg that within double quotes, space and tab are treated like normal 49603e51e026Smrg characters. 49613e51e026Smrg - Backslashes not followed by double quotes are not special. 49623e51e026Smrg - But 2*n+1 backslashes followed by a double quote become 49633e51e026Smrg n backslashes followed by a double quote (n >= 0): 49643e51e026Smrg \" -> " 49653e51e026Smrg \\\" -> \" 49663e51e026Smrg \\\\\" -> \\" 49673e51e026Smrg */ 49683e51e026Smrg#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" 49693e51e026Smrg#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" 49703e51e026Smrgchar ** 49713e51e026Smrgprepare_spawn (char **argv) 49723e51e026Smrg{ 49733e51e026Smrg size_t argc; 49743e51e026Smrg char **new_argv; 49753e51e026Smrg size_t i; 49763e51e026Smrg 49773e51e026Smrg /* Count number of arguments. */ 49783e51e026Smrg for (argc = 0; argv[argc] != NULL; argc++) 49793e51e026Smrg ; 49803e51e026Smrg 49813e51e026Smrg /* Allocate new argument vector. */ 49823e51e026Smrg new_argv = XMALLOC (char *, argc + 1); 49833e51e026Smrg 49843e51e026Smrg /* Put quoted arguments into the new argument vector. */ 49853e51e026Smrg for (i = 0; i < argc; i++) 49863e51e026Smrg { 49873e51e026Smrg const char *string = argv[i]; 49883e51e026Smrg 49893e51e026Smrg if (string[0] == '\0') 49903e51e026Smrg new_argv[i] = xstrdup ("\"\""); 49913e51e026Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 49923e51e026Smrg { 49933e51e026Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 49943e51e026Smrg size_t length; 49953e51e026Smrg unsigned int backslashes; 49963e51e026Smrg const char *s; 49973e51e026Smrg char *quoted_string; 49983e51e026Smrg char *p; 49993e51e026Smrg 50003e51e026Smrg length = 0; 50013e51e026Smrg backslashes = 0; 50023e51e026Smrg if (quote_around) 50033e51e026Smrg length++; 50043e51e026Smrg for (s = string; *s != '\0'; s++) 50053e51e026Smrg { 50063e51e026Smrg char c = *s; 50073e51e026Smrg if (c == '"') 50083e51e026Smrg length += backslashes + 1; 50093e51e026Smrg length++; 50103e51e026Smrg if (c == '\\') 50113e51e026Smrg backslashes++; 50123e51e026Smrg else 50133e51e026Smrg backslashes = 0; 50143e51e026Smrg } 50153e51e026Smrg if (quote_around) 50163e51e026Smrg length += backslashes + 1; 50173e51e026Smrg 50183e51e026Smrg quoted_string = XMALLOC (char, length + 1); 50193e51e026Smrg 50203e51e026Smrg p = quoted_string; 50213e51e026Smrg backslashes = 0; 50223e51e026Smrg if (quote_around) 50233e51e026Smrg *p++ = '"'; 50243e51e026Smrg for (s = string; *s != '\0'; s++) 50253e51e026Smrg { 50263e51e026Smrg char c = *s; 50273e51e026Smrg if (c == '"') 50283e51e026Smrg { 50293e51e026Smrg unsigned int j; 50303e51e026Smrg for (j = backslashes + 1; j > 0; j--) 50313e51e026Smrg *p++ = '\\'; 50323e51e026Smrg } 50333e51e026Smrg *p++ = c; 50343e51e026Smrg if (c == '\\') 50353e51e026Smrg backslashes++; 50363e51e026Smrg else 50373e51e026Smrg backslashes = 0; 50383e51e026Smrg } 50393e51e026Smrg if (quote_around) 50403e51e026Smrg { 50413e51e026Smrg unsigned int j; 50423e51e026Smrg for (j = backslashes; j > 0; j--) 50433e51e026Smrg *p++ = '\\'; 50443e51e026Smrg *p++ = '"'; 50453e51e026Smrg } 50463e51e026Smrg *p = '\0'; 50473e51e026Smrg 50483e51e026Smrg new_argv[i] = quoted_string; 50493e51e026Smrg } 50503e51e026Smrg else 50513e51e026Smrg new_argv[i] = (char *) string; 50523e51e026Smrg } 50533e51e026Smrg new_argv[argc] = NULL; 50543e51e026Smrg 50553e51e026Smrg return new_argv; 50563e51e026Smrg} 50573e51e026SmrgEOF 50583e51e026Smrg ;; 50593e51e026Smrg esac 5060943345d3Smrg 50613e51e026Smrg cat <<"EOF" 50623e51e026Smrgvoid lt_dump_script (FILE* f) 50633e51e026Smrg{ 50643e51e026SmrgEOF 50653e51e026Smrg func_emit_wrapper yes | 50663e51e026Smrg $SED -n -e ' 50673e51e026Smrgs/^\(.\{79\}\)\(..*\)/\1\ 50683e51e026Smrg\2/ 50693e51e026Smrgh 50703e51e026Smrgs/\([\\"]\)/\\\1/g 50713e51e026Smrgs/$/\\n/ 50723e51e026Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 50733e51e026Smrgg 50743e51e026SmrgD' 50753e51e026Smrg cat <<"EOF" 50763e51e026Smrg} 5077a7b590b3SmrgEOF 5078a7b590b3Smrg} 5079a7b590b3Smrg# end: func_emit_cwrapperexe_src 5080943345d3Smrg 50813e51e026Smrg# func_win32_import_lib_p ARG 50823e51e026Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 50833e51e026Smrgfunc_win32_import_lib_p () 50843e51e026Smrg{ 50853e51e026Smrg $opt_debug 50863e51e026Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 50873e51e026Smrg *import*) : ;; 50883e51e026Smrg *) false ;; 50893e51e026Smrg esac 50903e51e026Smrg} 50913e51e026Smrg 5092a7b590b3Smrg# func_mode_link arg... 5093a7b590b3Smrgfunc_mode_link () 5094a7b590b3Smrg{ 5095a7b590b3Smrg $opt_debug 5096a7b590b3Smrg case $host in 5097a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098a7b590b3Smrg # It is impossible to link a dll without this setting, and 5099a7b590b3Smrg # we shouldn't force the makefile maintainer to figure out 5100a7b590b3Smrg # which system we are compiling for in order to pass an extra 5101a7b590b3Smrg # flag for every libtool invocation. 5102a7b590b3Smrg # allow_undefined=no 5103943345d3Smrg 5104a7b590b3Smrg # FIXME: Unfortunately, there are problems with the above when trying 5105a7b590b3Smrg # to make a dll which has undefined symbols, in which case not 5106a7b590b3Smrg # even a static library is built. For now, we need to specify 5107a7b590b3Smrg # -no-undefined on the libtool link line when we can be certain 5108a7b590b3Smrg # that all symbols are satisfied, otherwise we get a static library. 5109a7b590b3Smrg allow_undefined=yes 5110a7b590b3Smrg ;; 5111a7b590b3Smrg *) 5112a7b590b3Smrg allow_undefined=yes 5113a7b590b3Smrg ;; 5114a7b590b3Smrg esac 5115a7b590b3Smrg libtool_args=$nonopt 5116a7b590b3Smrg base_compile="$nonopt $@" 5117a7b590b3Smrg compile_command=$nonopt 5118a7b590b3Smrg finalize_command=$nonopt 5119943345d3Smrg 5120a7b590b3Smrg compile_rpath= 5121a7b590b3Smrg finalize_rpath= 5122a7b590b3Smrg compile_shlibpath= 5123a7b590b3Smrg finalize_shlibpath= 5124a7b590b3Smrg convenience= 5125a7b590b3Smrg old_convenience= 5126a7b590b3Smrg deplibs= 5127a7b590b3Smrg old_deplibs= 5128a7b590b3Smrg compiler_flags= 5129a7b590b3Smrg linker_flags= 5130a7b590b3Smrg dllsearchpath= 5131a7b590b3Smrg lib_search_path=`pwd` 5132a7b590b3Smrg inst_prefix_dir= 5133a7b590b3Smrg new_inherited_linker_flags= 5134943345d3Smrg 5135a7b590b3Smrg avoid_version=no 51363e51e026Smrg bindir= 5137a7b590b3Smrg dlfiles= 5138a7b590b3Smrg dlprefiles= 5139a7b590b3Smrg dlself=no 5140a7b590b3Smrg export_dynamic=no 5141a7b590b3Smrg export_symbols= 5142a7b590b3Smrg export_symbols_regex= 5143a7b590b3Smrg generated= 5144a7b590b3Smrg libobjs= 5145a7b590b3Smrg ltlibs= 5146a7b590b3Smrg module=no 5147a7b590b3Smrg no_install=no 5148a7b590b3Smrg objs= 5149a7b590b3Smrg non_pic_objects= 5150a7b590b3Smrg precious_files_regex= 5151a7b590b3Smrg prefer_static_libs=no 5152a7b590b3Smrg preload=no 5153a7b590b3Smrg prev= 5154a7b590b3Smrg prevarg= 5155a7b590b3Smrg release= 5156a7b590b3Smrg rpath= 5157a7b590b3Smrg xrpath= 5158a7b590b3Smrg perm_rpath= 5159a7b590b3Smrg temp_rpath= 5160a7b590b3Smrg thread_safe=no 5161a7b590b3Smrg vinfo= 5162a7b590b3Smrg vinfo_number=no 5163a7b590b3Smrg weak_libs= 5164a7b590b3Smrg single_module="${wl}-single_module" 5165a7b590b3Smrg func_infer_tag $base_compile 5166a7b590b3Smrg 5167a7b590b3Smrg # We need to know -static, to get the right output filenames. 5168a7b590b3Smrg for arg 5169a7b590b3Smrg do 5170a7b590b3Smrg case $arg in 5171a7b590b3Smrg -shared) 5172a7b590b3Smrg test "$build_libtool_libs" != yes && \ 5173a7b590b3Smrg func_fatal_configuration "can not build a shared library" 5174a7b590b3Smrg build_old_libs=no 5175a7b590b3Smrg break 5176a7b590b3Smrg ;; 5177a7b590b3Smrg -all-static | -static | -static-libtool-libs) 5178a7b590b3Smrg case $arg in 5179a7b590b3Smrg -all-static) 5180a7b590b3Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181a7b590b3Smrg func_warning "complete static linking is impossible in this configuration" 5182a7b590b3Smrg fi 5183a7b590b3Smrg if test -n "$link_static_flag"; then 5184a7b590b3Smrg dlopen_self=$dlopen_self_static 5185a7b590b3Smrg fi 5186a7b590b3Smrg prefer_static_libs=yes 5187a7b590b3Smrg ;; 5188a7b590b3Smrg -static) 5189a7b590b3Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190a7b590b3Smrg dlopen_self=$dlopen_self_static 5191a7b590b3Smrg fi 5192a7b590b3Smrg prefer_static_libs=built 5193a7b590b3Smrg ;; 5194a7b590b3Smrg -static-libtool-libs) 5195a7b590b3Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196a7b590b3Smrg dlopen_self=$dlopen_self_static 5197943345d3Smrg fi 5198a7b590b3Smrg prefer_static_libs=yes 5199a7b590b3Smrg ;; 5200a7b590b3Smrg esac 5201a7b590b3Smrg build_libtool_libs=no 5202a7b590b3Smrg build_old_libs=yes 5203a7b590b3Smrg break 5204a7b590b3Smrg ;; 5205a7b590b3Smrg esac 5206a7b590b3Smrg done 5207943345d3Smrg 5208a7b590b3Smrg # See if our shared archives depend on static archives. 5209a7b590b3Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210943345d3Smrg 5211a7b590b3Smrg # Go through the arguments, transforming them on the way. 5212a7b590b3Smrg while test "$#" -gt 0; do 5213a7b590b3Smrg arg="$1" 5214a7b590b3Smrg shift 5215a7b590b3Smrg func_quote_for_eval "$arg" 5216a7b590b3Smrg qarg=$func_quote_for_eval_unquoted_result 5217a7b590b3Smrg func_append libtool_args " $func_quote_for_eval_result" 5218943345d3Smrg 5219a7b590b3Smrg # If the previous option needs an argument, assign it. 5220a7b590b3Smrg if test -n "$prev"; then 5221a7b590b3Smrg case $prev in 5222a7b590b3Smrg output) 5223a7b590b3Smrg func_append compile_command " @OUTPUT@" 5224a7b590b3Smrg func_append finalize_command " @OUTPUT@" 5225a7b590b3Smrg ;; 5226a7b590b3Smrg esac 5227943345d3Smrg 5228a7b590b3Smrg case $prev in 52293e51e026Smrg bindir) 52303e51e026Smrg bindir="$arg" 52313e51e026Smrg prev= 52323e51e026Smrg continue 52333e51e026Smrg ;; 5234a7b590b3Smrg dlfiles|dlprefiles) 5235a7b590b3Smrg if test "$preload" = no; then 5236a7b590b3Smrg # Add the symbol object into the linking commands. 5237a7b590b3Smrg func_append compile_command " @SYMFILE@" 5238a7b590b3Smrg func_append finalize_command " @SYMFILE@" 5239a7b590b3Smrg preload=yes 5240a7b590b3Smrg fi 5241a7b590b3Smrg case $arg in 5242a7b590b3Smrg *.la | *.lo) ;; # We handle these cases below. 5243a7b590b3Smrg force) 5244a7b590b3Smrg if test "$dlself" = no; then 5245a7b590b3Smrg dlself=needless 5246a7b590b3Smrg export_dynamic=yes 5247a7b590b3Smrg fi 5248a7b590b3Smrg prev= 5249a7b590b3Smrg continue 5250a7b590b3Smrg ;; 5251a7b590b3Smrg self) 5252a7b590b3Smrg if test "$prev" = dlprefiles; then 5253a7b590b3Smrg dlself=yes 5254a7b590b3Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255a7b590b3Smrg dlself=yes 5256943345d3Smrg else 5257a7b590b3Smrg dlself=needless 5258a7b590b3Smrg export_dynamic=yes 5259943345d3Smrg fi 5260a7b590b3Smrg prev= 5261a7b590b3Smrg continue 5262a7b590b3Smrg ;; 5263a7b590b3Smrg *) 5264a7b590b3Smrg if test "$prev" = dlfiles; then 52653e51e026Smrg func_append dlfiles " $arg" 5266943345d3Smrg else 52673e51e026Smrg func_append dlprefiles " $arg" 5268943345d3Smrg fi 5269a7b590b3Smrg prev= 5270a7b590b3Smrg continue 5271a7b590b3Smrg ;; 5272a7b590b3Smrg esac 5273a7b590b3Smrg ;; 5274a7b590b3Smrg expsyms) 5275a7b590b3Smrg export_symbols="$arg" 5276a7b590b3Smrg test -f "$arg" \ 5277a7b590b3Smrg || func_fatal_error "symbol file \`$arg' does not exist" 5278a7b590b3Smrg prev= 5279a7b590b3Smrg continue 5280a7b590b3Smrg ;; 5281a7b590b3Smrg expsyms_regex) 5282a7b590b3Smrg export_symbols_regex="$arg" 5283a7b590b3Smrg prev= 5284a7b590b3Smrg continue 5285a7b590b3Smrg ;; 5286a7b590b3Smrg framework) 5287943345d3Smrg case $host in 5288a7b590b3Smrg *-*-darwin*) 5289a7b590b3Smrg case "$deplibs " in 5290a7b590b3Smrg *" $qarg.ltframework "*) ;; 52913e51e026Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292a7b590b3Smrg ;; 5293a7b590b3Smrg esac 5294a7b590b3Smrg ;; 5295943345d3Smrg esac 5296a7b590b3Smrg prev= 5297a7b590b3Smrg continue 5298943345d3Smrg ;; 5299a7b590b3Smrg inst_prefix) 5300a7b590b3Smrg inst_prefix_dir="$arg" 5301a7b590b3Smrg prev= 5302a7b590b3Smrg continue 5303943345d3Smrg ;; 5304a7b590b3Smrg objectlist) 5305a7b590b3Smrg if test -f "$arg"; then 5306a7b590b3Smrg save_arg=$arg 5307a7b590b3Smrg moreargs= 5308a7b590b3Smrg for fil in `cat "$save_arg"` 5309a7b590b3Smrg do 53103e51e026Smrg# func_append moreargs " $fil" 5311a7b590b3Smrg arg=$fil 5312a7b590b3Smrg # A libtool-controlled object. 5313943345d3Smrg 5314a7b590b3Smrg # Check to see that this really is a libtool object. 5315a7b590b3Smrg if func_lalib_unsafe_p "$arg"; then 5316a7b590b3Smrg pic_object= 5317a7b590b3Smrg non_pic_object= 5318943345d3Smrg 5319a7b590b3Smrg # Read the .lo file 5320a7b590b3Smrg func_source "$arg" 5321943345d3Smrg 5322a7b590b3Smrg if test -z "$pic_object" || 5323a7b590b3Smrg test -z "$non_pic_object" || 5324a7b590b3Smrg test "$pic_object" = none && 5325a7b590b3Smrg test "$non_pic_object" = none; then 5326a7b590b3Smrg func_fatal_error "cannot find name of object for \`$arg'" 5327a7b590b3Smrg fi 5328943345d3Smrg 5329a7b590b3Smrg # Extract subdirectory from the argument. 5330a7b590b3Smrg func_dirname "$arg" "/" "" 5331a7b590b3Smrg xdir="$func_dirname_result" 5332943345d3Smrg 5333a7b590b3Smrg if test "$pic_object" != none; then 5334a7b590b3Smrg # Prepend the subdirectory the object is found in. 5335a7b590b3Smrg pic_object="$xdir$pic_object" 5336943345d3Smrg 5337a7b590b3Smrg if test "$prev" = dlfiles; then 5338a7b590b3Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 53393e51e026Smrg func_append dlfiles " $pic_object" 5340a7b590b3Smrg prev= 5341a7b590b3Smrg continue 5342a7b590b3Smrg else 5343a7b590b3Smrg # If libtool objects are unsupported, then we need to preload. 5344a7b590b3Smrg prev=dlprefiles 5345a7b590b3Smrg fi 5346a7b590b3Smrg fi 5347943345d3Smrg 5348a7b590b3Smrg # CHECK ME: I think I busted this. -Ossama 5349a7b590b3Smrg if test "$prev" = dlprefiles; then 5350a7b590b3Smrg # Preload the old-style object. 53513e51e026Smrg func_append dlprefiles " $pic_object" 5352a7b590b3Smrg prev= 5353a7b590b3Smrg fi 5354943345d3Smrg 5355a7b590b3Smrg # A PIC object. 5356a7b590b3Smrg func_append libobjs " $pic_object" 5357a7b590b3Smrg arg="$pic_object" 5358a7b590b3Smrg fi 5359943345d3Smrg 5360a7b590b3Smrg # Non-PIC object. 5361a7b590b3Smrg if test "$non_pic_object" != none; then 5362a7b590b3Smrg # Prepend the subdirectory the object is found in. 5363a7b590b3Smrg non_pic_object="$xdir$non_pic_object" 5364943345d3Smrg 5365a7b590b3Smrg # A standard non-PIC object 5366a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 5367a7b590b3Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5368a7b590b3Smrg arg="$non_pic_object" 5369a7b590b3Smrg fi 5370a7b590b3Smrg else 5371a7b590b3Smrg # If the PIC object exists, use it instead. 5372a7b590b3Smrg # $xdir was prepended to $pic_object above. 5373a7b590b3Smrg non_pic_object="$pic_object" 5374a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 5375a7b590b3Smrg fi 5376a7b590b3Smrg else 5377a7b590b3Smrg # Only an error if not doing a dry-run. 5378a7b590b3Smrg if $opt_dry_run; then 5379a7b590b3Smrg # Extract subdirectory from the argument. 5380a7b590b3Smrg func_dirname "$arg" "/" "" 5381a7b590b3Smrg xdir="$func_dirname_result" 5382a7b590b3Smrg 5383a7b590b3Smrg func_lo2o "$arg" 5384a7b590b3Smrg pic_object=$xdir$objdir/$func_lo2o_result 5385a7b590b3Smrg non_pic_object=$xdir$func_lo2o_result 5386a7b590b3Smrg func_append libobjs " $pic_object" 5387a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 5388a7b590b3Smrg else 5389a7b590b3Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5390a7b590b3Smrg fi 5391a7b590b3Smrg fi 5392a7b590b3Smrg done 5393943345d3Smrg else 5394a7b590b3Smrg func_fatal_error "link input file \`$arg' does not exist" 5395943345d3Smrg fi 5396a7b590b3Smrg arg=$save_arg 5397a7b590b3Smrg prev= 5398a7b590b3Smrg continue 5399a7b590b3Smrg ;; 5400a7b590b3Smrg precious_regex) 5401a7b590b3Smrg precious_files_regex="$arg" 5402a7b590b3Smrg prev= 5403a7b590b3Smrg continue 5404a7b590b3Smrg ;; 5405a7b590b3Smrg release) 5406a7b590b3Smrg release="-$arg" 5407a7b590b3Smrg prev= 5408a7b590b3Smrg continue 5409a7b590b3Smrg ;; 5410a7b590b3Smrg rpath | xrpath) 5411a7b590b3Smrg # We need an absolute path. 5412a7b590b3Smrg case $arg in 5413a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414a7b590b3Smrg *) 5415a7b590b3Smrg func_fatal_error "only absolute run-paths are allowed" 5416a7b590b3Smrg ;; 5417a7b590b3Smrg esac 5418a7b590b3Smrg if test "$prev" = rpath; then 5419a7b590b3Smrg case "$rpath " in 5420a7b590b3Smrg *" $arg "*) ;; 54213e51e026Smrg *) func_append rpath " $arg" ;; 5422a7b590b3Smrg esac 5423943345d3Smrg else 5424a7b590b3Smrg case "$xrpath " in 5425a7b590b3Smrg *" $arg "*) ;; 54263e51e026Smrg *) func_append xrpath " $arg" ;; 5427a7b590b3Smrg esac 5428943345d3Smrg fi 5429a7b590b3Smrg prev= 5430a7b590b3Smrg continue 5431a7b590b3Smrg ;; 5432a7b590b3Smrg shrext) 5433a7b590b3Smrg shrext_cmds="$arg" 5434a7b590b3Smrg prev= 5435a7b590b3Smrg continue 5436a7b590b3Smrg ;; 5437a7b590b3Smrg weak) 54383e51e026Smrg func_append weak_libs " $arg" 5439a7b590b3Smrg prev= 5440a7b590b3Smrg continue 5441a7b590b3Smrg ;; 5442a7b590b3Smrg xcclinker) 54433e51e026Smrg func_append linker_flags " $qarg" 54443e51e026Smrg func_append compiler_flags " $qarg" 5445a7b590b3Smrg prev= 5446a7b590b3Smrg func_append compile_command " $qarg" 5447a7b590b3Smrg func_append finalize_command " $qarg" 5448a7b590b3Smrg continue 5449a7b590b3Smrg ;; 5450a7b590b3Smrg xcompiler) 54513e51e026Smrg func_append compiler_flags " $qarg" 5452a7b590b3Smrg prev= 5453a7b590b3Smrg func_append compile_command " $qarg" 5454a7b590b3Smrg func_append finalize_command " $qarg" 5455a7b590b3Smrg continue 5456a7b590b3Smrg ;; 5457a7b590b3Smrg xlinker) 54583e51e026Smrg func_append linker_flags " $qarg" 54593e51e026Smrg func_append compiler_flags " $wl$qarg" 5460a7b590b3Smrg prev= 5461a7b590b3Smrg func_append compile_command " $wl$qarg" 5462a7b590b3Smrg func_append finalize_command " $wl$qarg" 5463a7b590b3Smrg continue 5464a7b590b3Smrg ;; 5465a7b590b3Smrg *) 5466a7b590b3Smrg eval "$prev=\"\$arg\"" 5467a7b590b3Smrg prev= 5468a7b590b3Smrg continue 5469a7b590b3Smrg ;; 5470943345d3Smrg esac 5471a7b590b3Smrg fi # test -n "$prev" 5472943345d3Smrg 5473a7b590b3Smrg prevarg="$arg" 5474943345d3Smrg 5475a7b590b3Smrg case $arg in 5476a7b590b3Smrg -all-static) 5477a7b590b3Smrg if test -n "$link_static_flag"; then 5478a7b590b3Smrg # See comment for -static flag below, for more details. 5479a7b590b3Smrg func_append compile_command " $link_static_flag" 5480a7b590b3Smrg func_append finalize_command " $link_static_flag" 5481a7b590b3Smrg fi 5482a7b590b3Smrg continue 5483a7b590b3Smrg ;; 5484943345d3Smrg 5485a7b590b3Smrg -allow-undefined) 5486a7b590b3Smrg # FIXME: remove this flag sometime in the future. 5487a7b590b3Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488a7b590b3Smrg ;; 5489943345d3Smrg 5490a7b590b3Smrg -avoid-version) 5491a7b590b3Smrg avoid_version=yes 5492a7b590b3Smrg continue 5493a7b590b3Smrg ;; 5494943345d3Smrg 54953e51e026Smrg -bindir) 54963e51e026Smrg prev=bindir 54973e51e026Smrg continue 54983e51e026Smrg ;; 54993e51e026Smrg 5500a7b590b3Smrg -dlopen) 5501a7b590b3Smrg prev=dlfiles 5502a7b590b3Smrg continue 5503a7b590b3Smrg ;; 5504943345d3Smrg 5505a7b590b3Smrg -dlpreopen) 5506a7b590b3Smrg prev=dlprefiles 5507a7b590b3Smrg continue 5508a7b590b3Smrg ;; 5509943345d3Smrg 5510a7b590b3Smrg -export-dynamic) 5511a7b590b3Smrg export_dynamic=yes 5512a7b590b3Smrg continue 5513a7b590b3Smrg ;; 5514943345d3Smrg 5515a7b590b3Smrg -export-symbols | -export-symbols-regex) 5516a7b590b3Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517a7b590b3Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518a7b590b3Smrg fi 5519a7b590b3Smrg if test "X$arg" = "X-export-symbols"; then 5520a7b590b3Smrg prev=expsyms 5521a7b590b3Smrg else 5522a7b590b3Smrg prev=expsyms_regex 5523a7b590b3Smrg fi 5524a7b590b3Smrg continue 5525a7b590b3Smrg ;; 5526943345d3Smrg 5527a7b590b3Smrg -framework) 5528a7b590b3Smrg prev=framework 5529a7b590b3Smrg continue 5530a7b590b3Smrg ;; 5531943345d3Smrg 5532a7b590b3Smrg -inst-prefix-dir) 5533a7b590b3Smrg prev=inst_prefix 5534a7b590b3Smrg continue 5535a7b590b3Smrg ;; 5536943345d3Smrg 5537a7b590b3Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538a7b590b3Smrg # so, if we see these flags be careful not to treat them like -L 5539a7b590b3Smrg -L[A-Z][A-Z]*:*) 5540a7b590b3Smrg case $with_gcc/$host in 5541a7b590b3Smrg no/*-*-irix* | /*-*-irix*) 5542a7b590b3Smrg func_append compile_command " $arg" 5543a7b590b3Smrg func_append finalize_command " $arg" 5544a7b590b3Smrg ;; 5545a7b590b3Smrg esac 5546a7b590b3Smrg continue 5547a7b590b3Smrg ;; 5548943345d3Smrg 5549a7b590b3Smrg -L*) 55503e51e026Smrg func_stripname "-L" '' "$arg" 55513e51e026Smrg if test -z "$func_stripname_result"; then 5552a7b590b3Smrg if test "$#" -gt 0; then 5553a7b590b3Smrg func_fatal_error "require no space between \`-L' and \`$1'" 5554a7b590b3Smrg else 5555a7b590b3Smrg func_fatal_error "need path for \`-L' option" 5556a7b590b3Smrg fi 5557a7b590b3Smrg fi 55583e51e026Smrg func_resolve_sysroot "$func_stripname_result" 55593e51e026Smrg dir=$func_resolve_sysroot_result 5560a7b590b3Smrg # We need an absolute path. 5561a7b590b3Smrg case $dir in 5562a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563a7b590b3Smrg *) 5564a7b590b3Smrg absdir=`cd "$dir" && pwd` 5565a7b590b3Smrg test -z "$absdir" && \ 5566a7b590b3Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567a7b590b3Smrg dir="$absdir" 5568a7b590b3Smrg ;; 5569a7b590b3Smrg esac 5570a7b590b3Smrg case "$deplibs " in 55713e51e026Smrg *" -L$dir "* | *" $arg "*) 55723e51e026Smrg # Will only happen for absolute or sysroot arguments 55733e51e026Smrg ;; 5574a7b590b3Smrg *) 55753e51e026Smrg # Preserve sysroot, but never include relative directories 55763e51e026Smrg case $dir in 55773e51e026Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 55783e51e026Smrg *) func_append deplibs " -L$dir" ;; 55793e51e026Smrg esac 55803e51e026Smrg func_append lib_search_path " $dir" 5581a7b590b3Smrg ;; 5582a7b590b3Smrg esac 5583a7b590b3Smrg case $host in 5584a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 55853e51e026Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586a7b590b3Smrg case :$dllsearchpath: in 5587a7b590b3Smrg *":$dir:"*) ;; 5588a7b590b3Smrg ::) dllsearchpath=$dir;; 55893e51e026Smrg *) func_append dllsearchpath ":$dir";; 5590a7b590b3Smrg esac 5591a7b590b3Smrg case :$dllsearchpath: in 5592a7b590b3Smrg *":$testbindir:"*) ;; 5593a7b590b3Smrg ::) dllsearchpath=$testbindir;; 55943e51e026Smrg *) func_append dllsearchpath ":$testbindir";; 5595a7b590b3Smrg esac 5596a7b590b3Smrg ;; 5597a7b590b3Smrg esac 5598a7b590b3Smrg continue 5599a7b590b3Smrg ;; 5600943345d3Smrg 5601a7b590b3Smrg -l*) 5602a7b590b3Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603a7b590b3Smrg case $host in 56043e51e026Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605a7b590b3Smrg # These systems don't actually have a C or math library (as such) 5606a7b590b3Smrg continue 5607a7b590b3Smrg ;; 5608a7b590b3Smrg *-*-os2*) 5609a7b590b3Smrg # These systems don't actually have a C library (as such) 5610a7b590b3Smrg test "X$arg" = "X-lc" && continue 5611a7b590b3Smrg ;; 5612a7b590b3Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613a7b590b3Smrg # Do not include libc due to us having libc/libc_r. 5614a7b590b3Smrg test "X$arg" = "X-lc" && continue 5615a7b590b3Smrg ;; 5616a7b590b3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 5617a7b590b3Smrg # Rhapsody C and math libraries are in the System framework 56183e51e026Smrg func_append deplibs " System.ltframework" 5619a7b590b3Smrg continue 5620a7b590b3Smrg ;; 5621a7b590b3Smrg *-*-sco3.2v5* | *-*-sco5v6*) 5622a7b590b3Smrg # Causes problems with __ctype 5623a7b590b3Smrg test "X$arg" = "X-lc" && continue 5624a7b590b3Smrg ;; 5625a7b590b3Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626a7b590b3Smrg # Compiler inserts libc in the correct place for threads to work 5627a7b590b3Smrg test "X$arg" = "X-lc" && continue 5628a7b590b3Smrg ;; 5629a7b590b3Smrg esac 5630a7b590b3Smrg elif test "X$arg" = "X-lc_r"; then 5631a7b590b3Smrg case $host in 5632a7b590b3Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633a7b590b3Smrg # Do not include libc_r directly, use -pthread flag. 5634a7b590b3Smrg continue 5635a7b590b3Smrg ;; 5636a7b590b3Smrg esac 5637a7b590b3Smrg fi 56383e51e026Smrg func_append deplibs " $arg" 5639a7b590b3Smrg continue 5640a7b590b3Smrg ;; 5641943345d3Smrg 5642a7b590b3Smrg -module) 5643a7b590b3Smrg module=yes 5644a7b590b3Smrg continue 5645a7b590b3Smrg ;; 5646943345d3Smrg 5647a7b590b3Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648a7b590b3Smrg # classes, name mangling, and exception handling. 5649a7b590b3Smrg # Darwin uses the -arch flag to determine output architecture. 56503e51e026Smrg -model|-arch|-isysroot|--sysroot) 56513e51e026Smrg func_append compiler_flags " $arg" 5652a7b590b3Smrg func_append compile_command " $arg" 5653a7b590b3Smrg func_append finalize_command " $arg" 5654a7b590b3Smrg prev=xcompiler 5655a7b590b3Smrg continue 5656a7b590b3Smrg ;; 5657943345d3Smrg 56583e51e026Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 56593e51e026Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 56603e51e026Smrg func_append compiler_flags " $arg" 5661a7b590b3Smrg func_append compile_command " $arg" 5662a7b590b3Smrg func_append finalize_command " $arg" 5663a7b590b3Smrg case "$new_inherited_linker_flags " in 5664a7b590b3Smrg *" $arg "*) ;; 56653e51e026Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666a7b590b3Smrg esac 5667a7b590b3Smrg continue 5668a7b590b3Smrg ;; 5669943345d3Smrg 5670a7b590b3Smrg -multi_module) 5671a7b590b3Smrg single_module="${wl}-multi_module" 5672a7b590b3Smrg continue 5673a7b590b3Smrg ;; 5674943345d3Smrg 5675a7b590b3Smrg -no-fast-install) 5676a7b590b3Smrg fast_install=no 5677a7b590b3Smrg continue 5678a7b590b3Smrg ;; 5679943345d3Smrg 5680a7b590b3Smrg -no-install) 5681a7b590b3Smrg case $host in 5682a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683a7b590b3Smrg # The PATH hackery in wrapper scripts is required on Windows 5684a7b590b3Smrg # and Darwin in order for the loader to find any dlls it needs. 5685a7b590b3Smrg func_warning "\`-no-install' is ignored for $host" 5686a7b590b3Smrg func_warning "assuming \`-no-fast-install' instead" 5687a7b590b3Smrg fast_install=no 5688a7b590b3Smrg ;; 5689a7b590b3Smrg *) no_install=yes ;; 5690a7b590b3Smrg esac 5691a7b590b3Smrg continue 5692a7b590b3Smrg ;; 5693943345d3Smrg 5694a7b590b3Smrg -no-undefined) 5695a7b590b3Smrg allow_undefined=no 5696a7b590b3Smrg continue 5697a7b590b3Smrg ;; 5698943345d3Smrg 5699a7b590b3Smrg -objectlist) 5700a7b590b3Smrg prev=objectlist 5701a7b590b3Smrg continue 5702a7b590b3Smrg ;; 5703943345d3Smrg 5704a7b590b3Smrg -o) prev=output ;; 5705943345d3Smrg 5706a7b590b3Smrg -precious-files-regex) 5707a7b590b3Smrg prev=precious_regex 5708a7b590b3Smrg continue 5709a7b590b3Smrg ;; 5710943345d3Smrg 5711a7b590b3Smrg -release) 5712a7b590b3Smrg prev=release 5713a7b590b3Smrg continue 5714a7b590b3Smrg ;; 5715943345d3Smrg 5716a7b590b3Smrg -rpath) 5717a7b590b3Smrg prev=rpath 5718a7b590b3Smrg continue 5719a7b590b3Smrg ;; 5720943345d3Smrg 5721a7b590b3Smrg -R) 5722a7b590b3Smrg prev=xrpath 5723a7b590b3Smrg continue 5724a7b590b3Smrg ;; 5725943345d3Smrg 5726a7b590b3Smrg -R*) 5727a7b590b3Smrg func_stripname '-R' '' "$arg" 5728a7b590b3Smrg dir=$func_stripname_result 5729a7b590b3Smrg # We need an absolute path. 5730a7b590b3Smrg case $dir in 5731a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 57323e51e026Smrg =*) 57333e51e026Smrg func_stripname '=' '' "$dir" 57343e51e026Smrg dir=$lt_sysroot$func_stripname_result 57353e51e026Smrg ;; 5736a7b590b3Smrg *) 5737a7b590b3Smrg func_fatal_error "only absolute run-paths are allowed" 5738a7b590b3Smrg ;; 5739a7b590b3Smrg esac 5740a7b590b3Smrg case "$xrpath " in 5741a7b590b3Smrg *" $dir "*) ;; 57423e51e026Smrg *) func_append xrpath " $dir" ;; 5743a7b590b3Smrg esac 5744a7b590b3Smrg continue 5745a7b590b3Smrg ;; 5746943345d3Smrg 5747a7b590b3Smrg -shared) 5748a7b590b3Smrg # The effects of -shared are defined in a previous loop. 5749a7b590b3Smrg continue 5750a7b590b3Smrg ;; 5751943345d3Smrg 5752a7b590b3Smrg -shrext) 5753a7b590b3Smrg prev=shrext 5754a7b590b3Smrg continue 5755a7b590b3Smrg ;; 5756943345d3Smrg 5757a7b590b3Smrg -static | -static-libtool-libs) 5758a7b590b3Smrg # The effects of -static are defined in a previous loop. 5759a7b590b3Smrg # We used to do the same as -all-static on platforms that 5760a7b590b3Smrg # didn't have a PIC flag, but the assumption that the effects 5761a7b590b3Smrg # would be equivalent was wrong. It would break on at least 5762a7b590b3Smrg # Digital Unix and AIX. 5763a7b590b3Smrg continue 5764a7b590b3Smrg ;; 5765943345d3Smrg 5766a7b590b3Smrg -thread-safe) 5767a7b590b3Smrg thread_safe=yes 5768a7b590b3Smrg continue 5769a7b590b3Smrg ;; 5770943345d3Smrg 5771a7b590b3Smrg -version-info) 5772a7b590b3Smrg prev=vinfo 5773a7b590b3Smrg continue 5774a7b590b3Smrg ;; 5775943345d3Smrg 5776a7b590b3Smrg -version-number) 5777a7b590b3Smrg prev=vinfo 5778a7b590b3Smrg vinfo_number=yes 5779a7b590b3Smrg continue 5780a7b590b3Smrg ;; 5781943345d3Smrg 5782a7b590b3Smrg -weak) 5783a7b590b3Smrg prev=weak 5784a7b590b3Smrg continue 5785a7b590b3Smrg ;; 5786943345d3Smrg 5787a7b590b3Smrg -Wc,*) 5788a7b590b3Smrg func_stripname '-Wc,' '' "$arg" 5789a7b590b3Smrg args=$func_stripname_result 5790a7b590b3Smrg arg= 5791a7b590b3Smrg save_ifs="$IFS"; IFS=',' 5792a7b590b3Smrg for flag in $args; do 5793a7b590b3Smrg IFS="$save_ifs" 5794a7b590b3Smrg func_quote_for_eval "$flag" 57953e51e026Smrg func_append arg " $func_quote_for_eval_result" 57963e51e026Smrg func_append compiler_flags " $func_quote_for_eval_result" 5797a7b590b3Smrg done 5798a7b590b3Smrg IFS="$save_ifs" 5799a7b590b3Smrg func_stripname ' ' '' "$arg" 5800a7b590b3Smrg arg=$func_stripname_result 5801a7b590b3Smrg ;; 5802943345d3Smrg 5803a7b590b3Smrg -Wl,*) 5804a7b590b3Smrg func_stripname '-Wl,' '' "$arg" 5805a7b590b3Smrg args=$func_stripname_result 5806a7b590b3Smrg arg= 5807a7b590b3Smrg save_ifs="$IFS"; IFS=',' 5808a7b590b3Smrg for flag in $args; do 5809a7b590b3Smrg IFS="$save_ifs" 5810a7b590b3Smrg func_quote_for_eval "$flag" 58113e51e026Smrg func_append arg " $wl$func_quote_for_eval_result" 58123e51e026Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 58133e51e026Smrg func_append linker_flags " $func_quote_for_eval_result" 5814a7b590b3Smrg done 5815a7b590b3Smrg IFS="$save_ifs" 5816a7b590b3Smrg func_stripname ' ' '' "$arg" 5817a7b590b3Smrg arg=$func_stripname_result 5818a7b590b3Smrg ;; 5819943345d3Smrg 5820a7b590b3Smrg -Xcompiler) 5821a7b590b3Smrg prev=xcompiler 5822a7b590b3Smrg continue 5823a7b590b3Smrg ;; 5824943345d3Smrg 5825a7b590b3Smrg -Xlinker) 5826a7b590b3Smrg prev=xlinker 5827a7b590b3Smrg continue 5828a7b590b3Smrg ;; 5829943345d3Smrg 5830a7b590b3Smrg -XCClinker) 5831a7b590b3Smrg prev=xcclinker 5832a7b590b3Smrg continue 5833a7b590b3Smrg ;; 5834943345d3Smrg 5835a7b590b3Smrg # -msg_* for osf cc 5836a7b590b3Smrg -msg_*) 5837a7b590b3Smrg func_quote_for_eval "$arg" 5838a7b590b3Smrg arg="$func_quote_for_eval_result" 5839a7b590b3Smrg ;; 5840943345d3Smrg 58413e51e026Smrg # Flags to be passed through unchanged, with rationale: 58423e51e026Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 58433e51e026Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 58443e51e026Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 58453e51e026Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 58463e51e026Smrg # -q* compiler args for the IBM compiler 58473e51e026Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 58483e51e026Smrg # -F/path path to uninstalled frameworks, gcc on darwin 58493e51e026Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 58503e51e026Smrg # @file GCC response files 58513e51e026Smrg # -tp=* Portland pgcc target processor selection 58523e51e026Smrg # --sysroot=* for sysroot support 58533e51e026Smrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854a7b590b3Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 58553e51e026Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 58563e51e026Smrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857a7b590b3Smrg func_quote_for_eval "$arg" 5858a7b590b3Smrg arg="$func_quote_for_eval_result" 5859a7b590b3Smrg func_append compile_command " $arg" 5860a7b590b3Smrg func_append finalize_command " $arg" 58613e51e026Smrg func_append compiler_flags " $arg" 5862a7b590b3Smrg continue 5863a7b590b3Smrg ;; 5864943345d3Smrg 5865a7b590b3Smrg # Some other compiler flag. 5866a7b590b3Smrg -* | +*) 5867a7b590b3Smrg func_quote_for_eval "$arg" 5868a7b590b3Smrg arg="$func_quote_for_eval_result" 5869a7b590b3Smrg ;; 5870943345d3Smrg 5871a7b590b3Smrg *.$objext) 5872a7b590b3Smrg # A standard object. 58733e51e026Smrg func_append objs " $arg" 5874a7b590b3Smrg ;; 5875943345d3Smrg 5876a7b590b3Smrg *.lo) 5877a7b590b3Smrg # A libtool-controlled object. 5878943345d3Smrg 5879a7b590b3Smrg # Check to see that this really is a libtool object. 5880a7b590b3Smrg if func_lalib_unsafe_p "$arg"; then 5881a7b590b3Smrg pic_object= 5882a7b590b3Smrg non_pic_object= 5883943345d3Smrg 5884a7b590b3Smrg # Read the .lo file 5885a7b590b3Smrg func_source "$arg" 5886943345d3Smrg 5887a7b590b3Smrg if test -z "$pic_object" || 5888a7b590b3Smrg test -z "$non_pic_object" || 5889a7b590b3Smrg test "$pic_object" = none && 5890a7b590b3Smrg test "$non_pic_object" = none; then 5891a7b590b3Smrg func_fatal_error "cannot find name of object for \`$arg'" 5892a7b590b3Smrg fi 5893943345d3Smrg 5894a7b590b3Smrg # Extract subdirectory from the argument. 5895a7b590b3Smrg func_dirname "$arg" "/" "" 5896a7b590b3Smrg xdir="$func_dirname_result" 5897f67b85aaSmrg 5898a7b590b3Smrg if test "$pic_object" != none; then 5899a7b590b3Smrg # Prepend the subdirectory the object is found in. 5900a7b590b3Smrg pic_object="$xdir$pic_object" 5901943345d3Smrg 5902a7b590b3Smrg if test "$prev" = dlfiles; then 5903a7b590b3Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 59043e51e026Smrg func_append dlfiles " $pic_object" 5905a7b590b3Smrg prev= 5906a7b590b3Smrg continue 5907a7b590b3Smrg else 5908a7b590b3Smrg # If libtool objects are unsupported, then we need to preload. 5909a7b590b3Smrg prev=dlprefiles 5910a7b590b3Smrg fi 5911a7b590b3Smrg fi 5912943345d3Smrg 5913a7b590b3Smrg # CHECK ME: I think I busted this. -Ossama 5914a7b590b3Smrg if test "$prev" = dlprefiles; then 5915a7b590b3Smrg # Preload the old-style object. 59163e51e026Smrg func_append dlprefiles " $pic_object" 5917a7b590b3Smrg prev= 5918a7b590b3Smrg fi 5919943345d3Smrg 5920a7b590b3Smrg # A PIC object. 5921a7b590b3Smrg func_append libobjs " $pic_object" 5922a7b590b3Smrg arg="$pic_object" 5923a7b590b3Smrg fi 5924943345d3Smrg 5925a7b590b3Smrg # Non-PIC object. 5926a7b590b3Smrg if test "$non_pic_object" != none; then 5927a7b590b3Smrg # Prepend the subdirectory the object is found in. 5928a7b590b3Smrg non_pic_object="$xdir$non_pic_object" 5929943345d3Smrg 5930a7b590b3Smrg # A standard non-PIC object 5931a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 5932a7b590b3Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5933a7b590b3Smrg arg="$non_pic_object" 5934a7b590b3Smrg fi 5935a7b590b3Smrg else 5936a7b590b3Smrg # If the PIC object exists, use it instead. 5937a7b590b3Smrg # $xdir was prepended to $pic_object above. 5938a7b590b3Smrg non_pic_object="$pic_object" 5939a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 5940a7b590b3Smrg fi 5941a7b590b3Smrg else 5942a7b590b3Smrg # Only an error if not doing a dry-run. 5943a7b590b3Smrg if $opt_dry_run; then 5944a7b590b3Smrg # Extract subdirectory from the argument. 5945a7b590b3Smrg func_dirname "$arg" "/" "" 5946a7b590b3Smrg xdir="$func_dirname_result" 5947a7b590b3Smrg 5948a7b590b3Smrg func_lo2o "$arg" 5949a7b590b3Smrg pic_object=$xdir$objdir/$func_lo2o_result 5950a7b590b3Smrg non_pic_object=$xdir$func_lo2o_result 5951a7b590b3Smrg func_append libobjs " $pic_object" 5952a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 5953a7b590b3Smrg else 5954a7b590b3Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5955a7b590b3Smrg fi 5956a7b590b3Smrg fi 5957a7b590b3Smrg ;; 5958943345d3Smrg 5959a7b590b3Smrg *.$libext) 5960a7b590b3Smrg # An archive. 59613e51e026Smrg func_append deplibs " $arg" 59623e51e026Smrg func_append old_deplibs " $arg" 5963a7b590b3Smrg continue 5964a7b590b3Smrg ;; 5965a7b590b3Smrg 5966a7b590b3Smrg *.la) 5967a7b590b3Smrg # A libtool-controlled library. 5968a7b590b3Smrg 59693e51e026Smrg func_resolve_sysroot "$arg" 5970a7b590b3Smrg if test "$prev" = dlfiles; then 5971a7b590b3Smrg # This library was specified with -dlopen. 59723e51e026Smrg func_append dlfiles " $func_resolve_sysroot_result" 5973a7b590b3Smrg prev= 5974a7b590b3Smrg elif test "$prev" = dlprefiles; then 5975a7b590b3Smrg # The library was specified with -dlpreopen. 59763e51e026Smrg func_append dlprefiles " $func_resolve_sysroot_result" 5977a7b590b3Smrg prev= 5978a7b590b3Smrg else 59793e51e026Smrg func_append deplibs " $func_resolve_sysroot_result" 5980a7b590b3Smrg fi 5981a7b590b3Smrg continue 5982a7b590b3Smrg ;; 5983a7b590b3Smrg 5984a7b590b3Smrg # Some other compiler argument. 5985a7b590b3Smrg *) 5986a7b590b3Smrg # Unknown arguments in both finalize_command and compile_command need 5987a7b590b3Smrg # to be aesthetically quoted because they are evaled later. 5988a7b590b3Smrg func_quote_for_eval "$arg" 5989a7b590b3Smrg arg="$func_quote_for_eval_result" 5990a7b590b3Smrg ;; 5991a7b590b3Smrg esac # arg 5992a7b590b3Smrg 5993a7b590b3Smrg # Now actually substitute the argument into the commands. 5994a7b590b3Smrg if test -n "$arg"; then 5995a7b590b3Smrg func_append compile_command " $arg" 5996a7b590b3Smrg func_append finalize_command " $arg" 5997a7b590b3Smrg fi 5998a7b590b3Smrg done # argument parsing loop 5999a7b590b3Smrg 6000a7b590b3Smrg test -n "$prev" && \ 6001a7b590b3Smrg func_fatal_help "the \`$prevarg' option requires an argument" 6002a7b590b3Smrg 6003a7b590b3Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004a7b590b3Smrg eval arg=\"$export_dynamic_flag_spec\" 6005a7b590b3Smrg func_append compile_command " $arg" 6006a7b590b3Smrg func_append finalize_command " $arg" 6007a7b590b3Smrg fi 6008a7b590b3Smrg 6009a7b590b3Smrg oldlibs= 6010a7b590b3Smrg # calculate the name of the file, without its directory 6011a7b590b3Smrg func_basename "$output" 6012a7b590b3Smrg outputname="$func_basename_result" 6013a7b590b3Smrg libobjs_save="$libobjs" 6014a7b590b3Smrg 6015a7b590b3Smrg if test -n "$shlibpath_var"; then 6016a7b590b3Smrg # get the directories listed in $shlibpath_var 60173e51e026Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018a7b590b3Smrg else 6019a7b590b3Smrg shlib_search_path= 6020a7b590b3Smrg fi 6021a7b590b3Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022a7b590b3Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023a7b590b3Smrg 6024a7b590b3Smrg func_dirname "$output" "/" "" 6025a7b590b3Smrg output_objdir="$func_dirname_result$objdir" 60263e51e026Smrg func_to_tool_file "$output_objdir/" 60273e51e026Smrg tool_output_objdir=$func_to_tool_file_result 6028a7b590b3Smrg # Create the object directory. 6029a7b590b3Smrg func_mkdir_p "$output_objdir" 6030a7b590b3Smrg 6031a7b590b3Smrg # Determine the type of output 6032a7b590b3Smrg case $output in 6033a7b590b3Smrg "") 6034a7b590b3Smrg func_fatal_help "you must specify an output file" 6035a7b590b3Smrg ;; 6036a7b590b3Smrg *.$libext) linkmode=oldlib ;; 6037a7b590b3Smrg *.lo | *.$objext) linkmode=obj ;; 6038a7b590b3Smrg *.la) linkmode=lib ;; 6039a7b590b3Smrg *) linkmode=prog ;; # Anything else should be a program. 6040a7b590b3Smrg esac 6041a7b590b3Smrg 6042a7b590b3Smrg specialdeplibs= 6043a7b590b3Smrg 6044a7b590b3Smrg libs= 6045a7b590b3Smrg # Find all interdependent deplibs by searching for libraries 6046a7b590b3Smrg # that are linked more than once (e.g. -la -lb -la) 6047a7b590b3Smrg for deplib in $deplibs; do 60483e51e026Smrg if $opt_preserve_dup_deps ; then 6049a7b590b3Smrg case "$libs " in 60503e51e026Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051a7b590b3Smrg esac 6052a7b590b3Smrg fi 60533e51e026Smrg func_append libs " $deplib" 6054a7b590b3Smrg done 6055a7b590b3Smrg 6056a7b590b3Smrg if test "$linkmode" = lib; then 6057a7b590b3Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058a7b590b3Smrg 6059a7b590b3Smrg # Compute libraries that are listed more than once in $predeps 6060a7b590b3Smrg # $postdeps and mark them as special (i.e., whose duplicates are 6061a7b590b3Smrg # not to be eliminated). 6062a7b590b3Smrg pre_post_deps= 6063a7b590b3Smrg if $opt_duplicate_compiler_generated_deps; then 6064a7b590b3Smrg for pre_post_dep in $predeps $postdeps; do 6065a7b590b3Smrg case "$pre_post_deps " in 60663e51e026Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067a7b590b3Smrg esac 60683e51e026Smrg func_append pre_post_deps " $pre_post_dep" 6069a7b590b3Smrg done 6070a7b590b3Smrg fi 6071a7b590b3Smrg pre_post_deps= 6072a7b590b3Smrg fi 6073a7b590b3Smrg 6074a7b590b3Smrg deplibs= 6075a7b590b3Smrg newdependency_libs= 6076a7b590b3Smrg newlib_search_path= 6077a7b590b3Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078a7b590b3Smrg notinst_deplibs= # not-installed libtool libraries 6079a7b590b3Smrg notinst_path= # paths that contain not-installed libtool libraries 6080a7b590b3Smrg 6081a7b590b3Smrg case $linkmode in 6082a7b590b3Smrg lib) 6083a7b590b3Smrg passes="conv dlpreopen link" 6084a7b590b3Smrg for file in $dlfiles $dlprefiles; do 6085a7b590b3Smrg case $file in 6086a7b590b3Smrg *.la) ;; 6087a7b590b3Smrg *) 6088a7b590b3Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089a7b590b3Smrg ;; 6090a7b590b3Smrg esac 6091a7b590b3Smrg done 6092a7b590b3Smrg ;; 6093a7b590b3Smrg prog) 6094a7b590b3Smrg compile_deplibs= 6095a7b590b3Smrg finalize_deplibs= 6096a7b590b3Smrg alldeplibs=no 6097a7b590b3Smrg newdlfiles= 6098a7b590b3Smrg newdlprefiles= 6099a7b590b3Smrg passes="conv scan dlopen dlpreopen link" 6100a7b590b3Smrg ;; 6101a7b590b3Smrg *) passes="conv" 6102a7b590b3Smrg ;; 6103a7b590b3Smrg esac 6104a7b590b3Smrg 6105a7b590b3Smrg for pass in $passes; do 6106a7b590b3Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107a7b590b3Smrg # so that -L comes before libs that need it for instance... 6108a7b590b3Smrg if test "$linkmode,$pass" = "lib,link"; then 6109a7b590b3Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110a7b590b3Smrg ## order, and fix it there properly 6111a7b590b3Smrg tmp_deplibs= 6112a7b590b3Smrg for deplib in $deplibs; do 6113a7b590b3Smrg tmp_deplibs="$deplib $tmp_deplibs" 6114a7b590b3Smrg done 6115a7b590b3Smrg deplibs="$tmp_deplibs" 6116a7b590b3Smrg fi 6117a7b590b3Smrg 6118a7b590b3Smrg if test "$linkmode,$pass" = "lib,link" || 6119a7b590b3Smrg test "$linkmode,$pass" = "prog,scan"; then 6120a7b590b3Smrg libs="$deplibs" 6121a7b590b3Smrg deplibs= 6122a7b590b3Smrg fi 6123a7b590b3Smrg if test "$linkmode" = prog; then 6124a7b590b3Smrg case $pass in 6125a7b590b3Smrg dlopen) libs="$dlfiles" ;; 6126a7b590b3Smrg dlpreopen) libs="$dlprefiles" ;; 6127a7b590b3Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128a7b590b3Smrg esac 6129a7b590b3Smrg fi 6130a7b590b3Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131a7b590b3Smrg # Collect and forward deplibs of preopened libtool libs 6132a7b590b3Smrg for lib in $dlprefiles; do 6133a7b590b3Smrg # Ignore non-libtool-libs 6134a7b590b3Smrg dependency_libs= 61353e51e026Smrg func_resolve_sysroot "$lib" 6136a7b590b3Smrg case $lib in 61373e51e026Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 6138a7b590b3Smrg esac 6139a7b590b3Smrg 6140a7b590b3Smrg # Collect preopened libtool deplibs, except any this library 6141a7b590b3Smrg # has declared as weak libs 6142a7b590b3Smrg for deplib in $dependency_libs; do 61433e51e026Smrg func_basename "$deplib" 61443e51e026Smrg deplib_base=$func_basename_result 6145a7b590b3Smrg case " $weak_libs " in 6146a7b590b3Smrg *" $deplib_base "*) ;; 61473e51e026Smrg *) func_append deplibs " $deplib" ;; 6148a7b590b3Smrg esac 6149a7b590b3Smrg done 6150a7b590b3Smrg done 6151a7b590b3Smrg libs="$dlprefiles" 6152a7b590b3Smrg fi 6153a7b590b3Smrg if test "$pass" = dlopen; then 6154a7b590b3Smrg # Collect dlpreopened libraries 6155a7b590b3Smrg save_deplibs="$deplibs" 6156a7b590b3Smrg deplibs= 6157a7b590b3Smrg fi 6158a7b590b3Smrg 6159a7b590b3Smrg for deplib in $libs; do 6160a7b590b3Smrg lib= 6161a7b590b3Smrg found=no 6162a7b590b3Smrg case $deplib in 61633e51e026Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 61643e51e026Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 6166a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 6167a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6168a7b590b3Smrg else 61693e51e026Smrg func_append compiler_flags " $deplib" 6170a7b590b3Smrg if test "$linkmode" = lib ; then 6171a7b590b3Smrg case "$new_inherited_linker_flags " in 6172a7b590b3Smrg *" $deplib "*) ;; 61733e51e026Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6174a7b590b3Smrg esac 6175a7b590b3Smrg fi 6176a7b590b3Smrg fi 6177a7b590b3Smrg continue 6178a7b590b3Smrg ;; 6179a7b590b3Smrg -l*) 6180a7b590b3Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 6181a7b590b3Smrg func_warning "\`-l' is ignored for archives/objects" 6182a7b590b3Smrg continue 6183a7b590b3Smrg fi 6184a7b590b3Smrg func_stripname '-l' '' "$deplib" 6185a7b590b3Smrg name=$func_stripname_result 6186a7b590b3Smrg if test "$linkmode" = lib; then 6187a7b590b3Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188a7b590b3Smrg else 6189a7b590b3Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190a7b590b3Smrg fi 6191a7b590b3Smrg for searchdir in $searchdirs; do 6192a7b590b3Smrg for search_ext in .la $std_shrext .so .a; do 6193a7b590b3Smrg # Search the libtool library 6194a7b590b3Smrg lib="$searchdir/lib${name}${search_ext}" 6195a7b590b3Smrg if test -f "$lib"; then 6196a7b590b3Smrg if test "$search_ext" = ".la"; then 6197a7b590b3Smrg found=yes 6198a7b590b3Smrg else 6199a7b590b3Smrg found=no 6200a7b590b3Smrg fi 6201a7b590b3Smrg break 2 6202a7b590b3Smrg fi 6203a7b590b3Smrg done 6204a7b590b3Smrg done 6205a7b590b3Smrg if test "$found" != yes; then 6206a7b590b3Smrg # deplib doesn't seem to be a libtool library 6207a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 6208a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 6209a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6210a7b590b3Smrg else 6211a7b590b3Smrg deplibs="$deplib $deplibs" 6212a7b590b3Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213a7b590b3Smrg fi 6214a7b590b3Smrg continue 6215a7b590b3Smrg else # deplib is a libtool library 6216a7b590b3Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217a7b590b3Smrg # We need to do some special things here, and not later. 6218a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219a7b590b3Smrg case " $predeps $postdeps " in 6220a7b590b3Smrg *" $deplib "*) 6221a7b590b3Smrg if func_lalib_p "$lib"; then 6222a7b590b3Smrg library_names= 6223a7b590b3Smrg old_library= 6224a7b590b3Smrg func_source "$lib" 6225a7b590b3Smrg for l in $old_library $library_names; do 6226a7b590b3Smrg ll="$l" 6227a7b590b3Smrg done 6228a7b590b3Smrg if test "X$ll" = "X$old_library" ; then # only static version available 6229a7b590b3Smrg found=no 6230a7b590b3Smrg func_dirname "$lib" "" "." 6231a7b590b3Smrg ladir="$func_dirname_result" 6232a7b590b3Smrg lib=$ladir/$old_library 6233a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 6234a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 6235a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6236a7b590b3Smrg else 6237a7b590b3Smrg deplibs="$deplib $deplibs" 6238a7b590b3Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239a7b590b3Smrg fi 6240a7b590b3Smrg continue 6241a7b590b3Smrg fi 6242a7b590b3Smrg fi 6243a7b590b3Smrg ;; 6244a7b590b3Smrg *) ;; 6245a7b590b3Smrg esac 6246a7b590b3Smrg fi 6247a7b590b3Smrg fi 6248a7b590b3Smrg ;; # -l 6249a7b590b3Smrg *.ltframework) 6250a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 6251a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 6252a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6253a7b590b3Smrg else 6254a7b590b3Smrg deplibs="$deplib $deplibs" 6255a7b590b3Smrg if test "$linkmode" = lib ; then 6256a7b590b3Smrg case "$new_inherited_linker_flags " in 6257a7b590b3Smrg *" $deplib "*) ;; 62583e51e026Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6259a7b590b3Smrg esac 6260a7b590b3Smrg fi 6261a7b590b3Smrg fi 6262a7b590b3Smrg continue 6263a7b590b3Smrg ;; 6264a7b590b3Smrg -L*) 6265a7b590b3Smrg case $linkmode in 6266a7b590b3Smrg lib) 6267a7b590b3Smrg deplibs="$deplib $deplibs" 6268a7b590b3Smrg test "$pass" = conv && continue 6269a7b590b3Smrg newdependency_libs="$deplib $newdependency_libs" 6270a7b590b3Smrg func_stripname '-L' '' "$deplib" 62713e51e026Smrg func_resolve_sysroot "$func_stripname_result" 62723e51e026Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6273a7b590b3Smrg ;; 6274a7b590b3Smrg prog) 6275a7b590b3Smrg if test "$pass" = conv; then 6276a7b590b3Smrg deplibs="$deplib $deplibs" 6277a7b590b3Smrg continue 6278a7b590b3Smrg fi 6279a7b590b3Smrg if test "$pass" = scan; then 6280a7b590b3Smrg deplibs="$deplib $deplibs" 6281a7b590b3Smrg else 6282a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 6283a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6284a7b590b3Smrg fi 6285a7b590b3Smrg func_stripname '-L' '' "$deplib" 62863e51e026Smrg func_resolve_sysroot "$func_stripname_result" 62873e51e026Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6288a7b590b3Smrg ;; 6289a7b590b3Smrg *) 6290a7b590b3Smrg func_warning "\`-L' is ignored for archives/objects" 6291a7b590b3Smrg ;; 6292a7b590b3Smrg esac # linkmode 6293a7b590b3Smrg continue 6294a7b590b3Smrg ;; # -L 6295a7b590b3Smrg -R*) 6296a7b590b3Smrg if test "$pass" = link; then 6297a7b590b3Smrg func_stripname '-R' '' "$deplib" 62983e51e026Smrg func_resolve_sysroot "$func_stripname_result" 62993e51e026Smrg dir=$func_resolve_sysroot_result 6300a7b590b3Smrg # Make sure the xrpath contains only unique directories. 6301a7b590b3Smrg case "$xrpath " in 6302a7b590b3Smrg *" $dir "*) ;; 63033e51e026Smrg *) func_append xrpath " $dir" ;; 6304a7b590b3Smrg esac 6305a7b590b3Smrg fi 6306a7b590b3Smrg deplibs="$deplib $deplibs" 6307a7b590b3Smrg continue 6308a7b590b3Smrg ;; 63093e51e026Smrg *.la) 63103e51e026Smrg func_resolve_sysroot "$deplib" 63113e51e026Smrg lib=$func_resolve_sysroot_result 63123e51e026Smrg ;; 6313a7b590b3Smrg *.$libext) 6314a7b590b3Smrg if test "$pass" = conv; then 6315a7b590b3Smrg deplibs="$deplib $deplibs" 6316a7b590b3Smrg continue 6317a7b590b3Smrg fi 6318a7b590b3Smrg case $linkmode in 6319a7b590b3Smrg lib) 6320a7b590b3Smrg # Linking convenience modules into shared libraries is allowed, 6321a7b590b3Smrg # but linking other static libraries is non-portable. 6322a7b590b3Smrg case " $dlpreconveniencelibs " in 6323a7b590b3Smrg *" $deplib "*) ;; 6324a7b590b3Smrg *) 6325a7b590b3Smrg valid_a_lib=no 6326a7b590b3Smrg case $deplibs_check_method in 6327a7b590b3Smrg match_pattern*) 6328a7b590b3Smrg set dummy $deplibs_check_method; shift 6329a7b590b3Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 63303e51e026Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331a7b590b3Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 6332a7b590b3Smrg valid_a_lib=yes 6333a7b590b3Smrg fi 6334a7b590b3Smrg ;; 6335a7b590b3Smrg pass_all) 6336a7b590b3Smrg valid_a_lib=yes 6337a7b590b3Smrg ;; 6338a7b590b3Smrg esac 6339a7b590b3Smrg if test "$valid_a_lib" != yes; then 63403e51e026Smrg echo 6341a7b590b3Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 63423e51e026Smrg echo "*** I have the capability to make that library automatically link in when" 63433e51e026Smrg echo "*** you link to this library. But I can only do this if you have a" 63443e51e026Smrg echo "*** shared version of the library, which you do not appear to have" 63453e51e026Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 63463e51e026Smrg echo "*** that it is just a static archive that I should not use here." 6347a7b590b3Smrg else 63483e51e026Smrg echo 6349a7b590b3Smrg $ECHO "*** Warning: Linking the shared library $output against the" 6350a7b590b3Smrg $ECHO "*** static library $deplib is not portable!" 6351a7b590b3Smrg deplibs="$deplib $deplibs" 6352a7b590b3Smrg fi 6353a7b590b3Smrg ;; 6354a7b590b3Smrg esac 6355a7b590b3Smrg continue 6356a7b590b3Smrg ;; 6357a7b590b3Smrg prog) 6358a7b590b3Smrg if test "$pass" != link; then 6359a7b590b3Smrg deplibs="$deplib $deplibs" 6360a7b590b3Smrg else 6361a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 6362a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6363a7b590b3Smrg fi 6364a7b590b3Smrg continue 6365a7b590b3Smrg ;; 6366a7b590b3Smrg esac # linkmode 6367a7b590b3Smrg ;; # *.$libext 6368a7b590b3Smrg *.lo | *.$objext) 6369a7b590b3Smrg if test "$pass" = conv; then 6370a7b590b3Smrg deplibs="$deplib $deplibs" 6371a7b590b3Smrg elif test "$linkmode" = prog; then 6372a7b590b3Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373a7b590b3Smrg # If there is no dlopen support or we're linking statically, 6374a7b590b3Smrg # we need to preload. 63753e51e026Smrg func_append newdlprefiles " $deplib" 6376a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 6377a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 6378a7b590b3Smrg else 63793e51e026Smrg func_append newdlfiles " $deplib" 6380a7b590b3Smrg fi 6381a7b590b3Smrg fi 6382a7b590b3Smrg continue 6383a7b590b3Smrg ;; 6384a7b590b3Smrg %DEPLIBS%) 6385a7b590b3Smrg alldeplibs=yes 6386a7b590b3Smrg continue 6387a7b590b3Smrg ;; 6388a7b590b3Smrg esac # case $deplib 6389a7b590b3Smrg 6390a7b590b3Smrg if test "$found" = yes || test -f "$lib"; then : 6391a7b590b3Smrg else 6392a7b590b3Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393a7b590b3Smrg fi 6394a7b590b3Smrg 6395a7b590b3Smrg # Check to see that this really is a libtool archive. 6396a7b590b3Smrg func_lalib_unsafe_p "$lib" \ 6397a7b590b3Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6398a7b590b3Smrg 6399a7b590b3Smrg func_dirname "$lib" "" "." 6400a7b590b3Smrg ladir="$func_dirname_result" 6401a7b590b3Smrg 6402a7b590b3Smrg dlname= 6403a7b590b3Smrg dlopen= 6404a7b590b3Smrg dlpreopen= 6405a7b590b3Smrg libdir= 6406a7b590b3Smrg library_names= 6407a7b590b3Smrg old_library= 6408a7b590b3Smrg inherited_linker_flags= 6409a7b590b3Smrg # If the library was installed with an old release of libtool, 6410a7b590b3Smrg # it will not redefine variables installed, or shouldnotlink 6411a7b590b3Smrg installed=yes 6412a7b590b3Smrg shouldnotlink=no 6413a7b590b3Smrg avoidtemprpath= 6414a7b590b3Smrg 6415a7b590b3Smrg 6416a7b590b3Smrg # Read the .la file 6417a7b590b3Smrg func_source "$lib" 6418a7b590b3Smrg 6419a7b590b3Smrg # Convert "-framework foo" to "foo.ltframework" 6420a7b590b3Smrg if test -n "$inherited_linker_flags"; then 64213e51e026Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422a7b590b3Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423a7b590b3Smrg case " $new_inherited_linker_flags " in 6424a7b590b3Smrg *" $tmp_inherited_linker_flag "*) ;; 64253e51e026Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426a7b590b3Smrg esac 6427a7b590b3Smrg done 6428a7b590b3Smrg fi 64293e51e026Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430a7b590b3Smrg if test "$linkmode,$pass" = "lib,link" || 6431a7b590b3Smrg test "$linkmode,$pass" = "prog,scan" || 6432a7b590b3Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 64333e51e026Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 64343e51e026Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435a7b590b3Smrg fi 6436a7b590b3Smrg 6437a7b590b3Smrg if test "$pass" = conv; then 6438a7b590b3Smrg # Only check for convenience libraries 6439a7b590b3Smrg deplibs="$lib $deplibs" 6440a7b590b3Smrg if test -z "$libdir"; then 6441a7b590b3Smrg if test -z "$old_library"; then 6442a7b590b3Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6443a7b590b3Smrg fi 6444a7b590b3Smrg # It is a libtool convenience library, so add in its objects. 64453e51e026Smrg func_append convenience " $ladir/$objdir/$old_library" 64463e51e026Smrg func_append old_convenience " $ladir/$objdir/$old_library" 6447a7b590b3Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448a7b590b3Smrg func_fatal_error "\`$lib' is not a convenience library" 6449a7b590b3Smrg fi 6450a7b590b3Smrg tmp_libs= 6451a7b590b3Smrg for deplib in $dependency_libs; do 6452a7b590b3Smrg deplibs="$deplib $deplibs" 64533e51e026Smrg if $opt_preserve_dup_deps ; then 6454a7b590b3Smrg case "$tmp_libs " in 64553e51e026Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456a7b590b3Smrg esac 6457a7b590b3Smrg fi 64583e51e026Smrg func_append tmp_libs " $deplib" 6459a7b590b3Smrg done 6460a7b590b3Smrg continue 6461a7b590b3Smrg fi # $pass = conv 6462a7b590b3Smrg 6463a7b590b3Smrg 6464a7b590b3Smrg # Get the name of the library we link against. 6465a7b590b3Smrg linklib= 64663e51e026Smrg if test -n "$old_library" && 64673e51e026Smrg { test "$prefer_static_libs" = yes || 64683e51e026Smrg test "$prefer_static_libs,$installed" = "built,no"; }; then 64693e51e026Smrg linklib=$old_library 64703e51e026Smrg else 64713e51e026Smrg for l in $old_library $library_names; do 64723e51e026Smrg linklib="$l" 64733e51e026Smrg done 64743e51e026Smrg fi 6475a7b590b3Smrg if test -z "$linklib"; then 6476a7b590b3Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6477a7b590b3Smrg fi 6478a7b590b3Smrg 6479a7b590b3Smrg # This library was specified with -dlopen. 6480a7b590b3Smrg if test "$pass" = dlopen; then 6481a7b590b3Smrg if test -z "$libdir"; then 6482a7b590b3Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483a7b590b3Smrg fi 6484a7b590b3Smrg if test -z "$dlname" || 6485a7b590b3Smrg test "$dlopen_support" != yes || 6486a7b590b3Smrg test "$build_libtool_libs" = no; then 6487a7b590b3Smrg # If there is no dlname, no dlopen support or we're linking 6488a7b590b3Smrg # statically, we need to preload. We also need to preload any 6489a7b590b3Smrg # dependent libraries so libltdl's deplib preloader doesn't 6490a7b590b3Smrg # bomb out in the load deplibs phase. 64913e51e026Smrg func_append dlprefiles " $lib $dependency_libs" 6492a7b590b3Smrg else 64933e51e026Smrg func_append newdlfiles " $lib" 6494a7b590b3Smrg fi 6495a7b590b3Smrg continue 6496a7b590b3Smrg fi # $pass = dlopen 6497a7b590b3Smrg 6498a7b590b3Smrg # We need an absolute path. 6499a7b590b3Smrg case $ladir in 6500a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501a7b590b3Smrg *) 6502a7b590b3Smrg abs_ladir=`cd "$ladir" && pwd` 6503a7b590b3Smrg if test -z "$abs_ladir"; then 6504a7b590b3Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 6505a7b590b3Smrg func_warning "passing it literally to the linker, although it might fail" 6506a7b590b3Smrg abs_ladir="$ladir" 6507a7b590b3Smrg fi 6508a7b590b3Smrg ;; 6509a7b590b3Smrg esac 6510a7b590b3Smrg func_basename "$lib" 6511a7b590b3Smrg laname="$func_basename_result" 6512a7b590b3Smrg 6513a7b590b3Smrg # Find the relevant object directory and library name. 6514a7b590b3Smrg if test "X$installed" = Xyes; then 65153e51e026Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516a7b590b3Smrg func_warning "library \`$lib' was moved." 6517a7b590b3Smrg dir="$ladir" 6518a7b590b3Smrg absdir="$abs_ladir" 6519a7b590b3Smrg libdir="$abs_ladir" 6520a7b590b3Smrg else 65213e51e026Smrg dir="$lt_sysroot$libdir" 65223e51e026Smrg absdir="$lt_sysroot$libdir" 6523a7b590b3Smrg fi 6524a7b590b3Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525a7b590b3Smrg else 6526a7b590b3Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527a7b590b3Smrg dir="$ladir" 6528a7b590b3Smrg absdir="$abs_ladir" 6529a7b590b3Smrg # Remove this search path later 65303e51e026Smrg func_append notinst_path " $abs_ladir" 6531a7b590b3Smrg else 6532a7b590b3Smrg dir="$ladir/$objdir" 6533a7b590b3Smrg absdir="$abs_ladir/$objdir" 6534a7b590b3Smrg # Remove this search path later 65353e51e026Smrg func_append notinst_path " $abs_ladir" 6536a7b590b3Smrg fi 6537a7b590b3Smrg fi # $installed = yes 6538a7b590b3Smrg func_stripname 'lib' '.la' "$laname" 6539a7b590b3Smrg name=$func_stripname_result 6540a7b590b3Smrg 6541a7b590b3Smrg # This library was specified with -dlpreopen. 6542a7b590b3Smrg if test "$pass" = dlpreopen; then 6543a7b590b3Smrg if test -z "$libdir" && test "$linkmode" = prog; then 6544a7b590b3Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545a7b590b3Smrg fi 65463e51e026Smrg case "$host" in 65473e51e026Smrg # special handling for platforms with PE-DLLs. 65483e51e026Smrg *cygwin* | *mingw* | *cegcc* ) 65493e51e026Smrg # Linker will automatically link against shared library if both 65503e51e026Smrg # static and shared are present. Therefore, ensure we extract 65513e51e026Smrg # symbols from the import library if a shared library is present 65523e51e026Smrg # (otherwise, the dlopen module name will be incorrect). We do 65533e51e026Smrg # this by putting the import library name into $newdlprefiles. 65543e51e026Smrg # We recover the dlopen module name by 'saving' the la file 65553e51e026Smrg # name in a special purpose variable, and (later) extracting the 65563e51e026Smrg # dlname from the la file. 65573e51e026Smrg if test -n "$dlname"; then 65583e51e026Smrg func_tr_sh "$dir/$linklib" 65593e51e026Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 65603e51e026Smrg func_append newdlprefiles " $dir/$linklib" 65613e51e026Smrg else 65623e51e026Smrg func_append newdlprefiles " $dir/$old_library" 65633e51e026Smrg # Keep a list of preopened convenience libraries to check 65643e51e026Smrg # that they are being used correctly in the link pass. 65653e51e026Smrg test -z "$libdir" && \ 65663e51e026Smrg func_append dlpreconveniencelibs " $dir/$old_library" 65673e51e026Smrg fi 65683e51e026Smrg ;; 65693e51e026Smrg * ) 65703e51e026Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 65713e51e026Smrg # are required to link). 65723e51e026Smrg if test -n "$old_library"; then 65733e51e026Smrg func_append newdlprefiles " $dir/$old_library" 65743e51e026Smrg # Keep a list of preopened convenience libraries to check 65753e51e026Smrg # that they are being used correctly in the link pass. 65763e51e026Smrg test -z "$libdir" && \ 65773e51e026Smrg func_append dlpreconveniencelibs " $dir/$old_library" 65783e51e026Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 65793e51e026Smrg elif test -n "$dlname"; then 65803e51e026Smrg func_append newdlprefiles " $dir/$dlname" 65813e51e026Smrg else 65823e51e026Smrg func_append newdlprefiles " $dir/$linklib" 65833e51e026Smrg fi 65843e51e026Smrg ;; 65853e51e026Smrg esac 6586a7b590b3Smrg fi # $pass = dlpreopen 6587a7b590b3Smrg 6588a7b590b3Smrg if test -z "$libdir"; then 6589a7b590b3Smrg # Link the convenience library 6590a7b590b3Smrg if test "$linkmode" = lib; then 6591a7b590b3Smrg deplibs="$dir/$old_library $deplibs" 6592a7b590b3Smrg elif test "$linkmode,$pass" = "prog,link"; then 6593a7b590b3Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 6594a7b590b3Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595a7b590b3Smrg else 6596a7b590b3Smrg deplibs="$lib $deplibs" # used for prog,scan pass 6597a7b590b3Smrg fi 6598a7b590b3Smrg continue 6599a7b590b3Smrg fi 6600a7b590b3Smrg 6601a7b590b3Smrg 6602a7b590b3Smrg if test "$linkmode" = prog && test "$pass" != link; then 66033e51e026Smrg func_append newlib_search_path " $ladir" 6604a7b590b3Smrg deplibs="$lib $deplibs" 6605a7b590b3Smrg 6606a7b590b3Smrg linkalldeplibs=no 6607a7b590b3Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 6608a7b590b3Smrg test "$build_libtool_libs" = no; then 6609a7b590b3Smrg linkalldeplibs=yes 6610a7b590b3Smrg fi 6611a7b590b3Smrg 6612a7b590b3Smrg tmp_libs= 6613a7b590b3Smrg for deplib in $dependency_libs; do 6614a7b590b3Smrg case $deplib in 6615a7b590b3Smrg -L*) func_stripname '-L' '' "$deplib" 66163e51e026Smrg func_resolve_sysroot "$func_stripname_result" 66173e51e026Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6618a7b590b3Smrg ;; 6619a7b590b3Smrg esac 6620a7b590b3Smrg # Need to link against all dependency_libs? 6621a7b590b3Smrg if test "$linkalldeplibs" = yes; then 6622a7b590b3Smrg deplibs="$deplib $deplibs" 6623a7b590b3Smrg else 6624a7b590b3Smrg # Need to hardcode shared library paths 6625a7b590b3Smrg # or/and link against static libraries 6626a7b590b3Smrg newdependency_libs="$deplib $newdependency_libs" 6627a7b590b3Smrg fi 66283e51e026Smrg if $opt_preserve_dup_deps ; then 6629a7b590b3Smrg case "$tmp_libs " in 66303e51e026Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631a7b590b3Smrg esac 6632a7b590b3Smrg fi 66333e51e026Smrg func_append tmp_libs " $deplib" 6634a7b590b3Smrg done # for deplib 6635a7b590b3Smrg continue 6636a7b590b3Smrg fi # $linkmode = prog... 6637a7b590b3Smrg 6638a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 6639a7b590b3Smrg if test -n "$library_names" && 6640a7b590b3Smrg { { test "$prefer_static_libs" = no || 6641a7b590b3Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6642a7b590b3Smrg test -z "$old_library"; }; then 6643a7b590b3Smrg # We need to hardcode the library path 6644a7b590b3Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645a7b590b3Smrg # Make sure the rpath contains only unique directories. 6646a7b590b3Smrg case "$temp_rpath:" in 6647a7b590b3Smrg *"$absdir:"*) ;; 66483e51e026Smrg *) func_append temp_rpath "$absdir:" ;; 6649a7b590b3Smrg esac 6650a7b590b3Smrg fi 6651a7b590b3Smrg 6652a7b590b3Smrg # Hardcode the library path. 6653a7b590b3Smrg # Skip directories that are in the system default run-time 6654a7b590b3Smrg # search path. 6655a7b590b3Smrg case " $sys_lib_dlsearch_path " in 6656a7b590b3Smrg *" $absdir "*) ;; 6657a7b590b3Smrg *) 6658a7b590b3Smrg case "$compile_rpath " in 6659a7b590b3Smrg *" $absdir "*) ;; 66603e51e026Smrg *) func_append compile_rpath " $absdir" ;; 6661a7b590b3Smrg esac 6662a7b590b3Smrg ;; 6663a7b590b3Smrg esac 6664a7b590b3Smrg case " $sys_lib_dlsearch_path " in 6665a7b590b3Smrg *" $libdir "*) ;; 6666a7b590b3Smrg *) 6667a7b590b3Smrg case "$finalize_rpath " in 6668a7b590b3Smrg *" $libdir "*) ;; 66693e51e026Smrg *) func_append finalize_rpath " $libdir" ;; 6670a7b590b3Smrg esac 6671a7b590b3Smrg ;; 6672a7b590b3Smrg esac 6673a7b590b3Smrg fi # $linkmode,$pass = prog,link... 6674a7b590b3Smrg 6675a7b590b3Smrg if test "$alldeplibs" = yes && 6676a7b590b3Smrg { test "$deplibs_check_method" = pass_all || 6677a7b590b3Smrg { test "$build_libtool_libs" = yes && 6678a7b590b3Smrg test -n "$library_names"; }; }; then 6679a7b590b3Smrg # We only need to search for static libraries 6680a7b590b3Smrg continue 6681a7b590b3Smrg fi 6682a7b590b3Smrg fi 6683a7b590b3Smrg 6684a7b590b3Smrg link_static=no # Whether the deplib will be linked statically 6685a7b590b3Smrg use_static_libs=$prefer_static_libs 6686a7b590b3Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 6687a7b590b3Smrg use_static_libs=no 6688a7b590b3Smrg fi 6689a7b590b3Smrg if test -n "$library_names" && 6690a7b590b3Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691a7b590b3Smrg case $host in 6692a7b590b3Smrg *cygwin* | *mingw* | *cegcc*) 6693a7b590b3Smrg # No point in relinking DLLs because paths are not encoded 66943e51e026Smrg func_append notinst_deplibs " $lib" 6695a7b590b3Smrg need_relink=no 6696a7b590b3Smrg ;; 6697a7b590b3Smrg *) 6698a7b590b3Smrg if test "$installed" = no; then 66993e51e026Smrg func_append notinst_deplibs " $lib" 6700a7b590b3Smrg need_relink=yes 6701a7b590b3Smrg fi 6702a7b590b3Smrg ;; 6703a7b590b3Smrg esac 6704a7b590b3Smrg # This is a shared library 6705a7b590b3Smrg 6706a7b590b3Smrg # Warn about portability, can't link against -module's on some 6707a7b590b3Smrg # systems (darwin). Don't bleat about dlopened modules though! 6708a7b590b3Smrg dlopenmodule="" 6709a7b590b3Smrg for dlpremoduletest in $dlprefiles; do 6710a7b590b3Smrg if test "X$dlpremoduletest" = "X$lib"; then 6711a7b590b3Smrg dlopenmodule="$dlpremoduletest" 6712a7b590b3Smrg break 6713a7b590b3Smrg fi 6714a7b590b3Smrg done 6715a7b590b3Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 67163e51e026Smrg echo 6717a7b590b3Smrg if test "$linkmode" = prog; then 6718a7b590b3Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719a7b590b3Smrg else 6720a7b590b3Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721a7b590b3Smrg fi 6722a7b590b3Smrg $ECHO "*** $linklib is not portable!" 6723a7b590b3Smrg fi 6724a7b590b3Smrg if test "$linkmode" = lib && 6725a7b590b3Smrg test "$hardcode_into_libs" = yes; then 6726a7b590b3Smrg # Hardcode the library path. 6727a7b590b3Smrg # Skip directories that are in the system default run-time 6728a7b590b3Smrg # search path. 6729a7b590b3Smrg case " $sys_lib_dlsearch_path " in 6730a7b590b3Smrg *" $absdir "*) ;; 6731a7b590b3Smrg *) 6732a7b590b3Smrg case "$compile_rpath " in 6733a7b590b3Smrg *" $absdir "*) ;; 67343e51e026Smrg *) func_append compile_rpath " $absdir" ;; 6735a7b590b3Smrg esac 6736a7b590b3Smrg ;; 6737a7b590b3Smrg esac 6738a7b590b3Smrg case " $sys_lib_dlsearch_path " in 6739a7b590b3Smrg *" $libdir "*) ;; 6740a7b590b3Smrg *) 6741a7b590b3Smrg case "$finalize_rpath " in 6742a7b590b3Smrg *" $libdir "*) ;; 67433e51e026Smrg *) func_append finalize_rpath " $libdir" ;; 6744a7b590b3Smrg esac 6745a7b590b3Smrg ;; 6746a7b590b3Smrg esac 6747a7b590b3Smrg fi 6748a7b590b3Smrg 6749a7b590b3Smrg if test -n "$old_archive_from_expsyms_cmds"; then 6750a7b590b3Smrg # figure out the soname 6751a7b590b3Smrg set dummy $library_names 6752a7b590b3Smrg shift 6753a7b590b3Smrg realname="$1" 6754a7b590b3Smrg shift 6755a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6756a7b590b3Smrg # use dlname if we got it. it's perfectly good, no? 6757a7b590b3Smrg if test -n "$dlname"; then 6758a7b590b3Smrg soname="$dlname" 6759a7b590b3Smrg elif test -n "$soname_spec"; then 6760a7b590b3Smrg # bleh windows 6761a7b590b3Smrg case $host in 6762a7b590b3Smrg *cygwin* | mingw* | *cegcc*) 6763a7b590b3Smrg func_arith $current - $age 6764a7b590b3Smrg major=$func_arith_result 6765a7b590b3Smrg versuffix="-$major" 6766a7b590b3Smrg ;; 6767a7b590b3Smrg esac 6768a7b590b3Smrg eval soname=\"$soname_spec\" 6769a7b590b3Smrg else 6770a7b590b3Smrg soname="$realname" 6771a7b590b3Smrg fi 6772a7b590b3Smrg 6773a7b590b3Smrg # Make a new name for the extract_expsyms_cmds to use 6774a7b590b3Smrg soroot="$soname" 6775a7b590b3Smrg func_basename "$soroot" 6776a7b590b3Smrg soname="$func_basename_result" 6777a7b590b3Smrg func_stripname 'lib' '.dll' "$soname" 6778a7b590b3Smrg newlib=libimp-$func_stripname_result.a 6779a7b590b3Smrg 6780a7b590b3Smrg # If the library has no export list, then create one now 6781a7b590b3Smrg if test -f "$output_objdir/$soname-def"; then : 6782a7b590b3Smrg else 6783a7b590b3Smrg func_verbose "extracting exported symbol list from \`$soname'" 6784a7b590b3Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785a7b590b3Smrg fi 6786a7b590b3Smrg 6787a7b590b3Smrg # Create $newlib 6788a7b590b3Smrg if test -f "$output_objdir/$newlib"; then :; else 6789a7b590b3Smrg func_verbose "generating import library for \`$soname'" 6790a7b590b3Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791a7b590b3Smrg fi 6792a7b590b3Smrg # make sure the library variables are pointing to the new library 6793a7b590b3Smrg dir=$output_objdir 6794a7b590b3Smrg linklib=$newlib 6795a7b590b3Smrg fi # test -n "$old_archive_from_expsyms_cmds" 6796a7b590b3Smrg 67973e51e026Smrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798a7b590b3Smrg add_shlibpath= 6799a7b590b3Smrg add_dir= 6800a7b590b3Smrg add= 6801a7b590b3Smrg lib_linked=yes 6802a7b590b3Smrg case $hardcode_action in 6803a7b590b3Smrg immediate | unsupported) 6804a7b590b3Smrg if test "$hardcode_direct" = no; then 6805a7b590b3Smrg add="$dir/$linklib" 6806a7b590b3Smrg case $host in 6807a7b590b3Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808a7b590b3Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809a7b590b3Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810a7b590b3Smrg *-*-unixware7*) add_dir="-L$dir" ;; 6811a7b590b3Smrg *-*-darwin* ) 6812a7b590b3Smrg # if the lib is a (non-dlopened) module then we can not 6813a7b590b3Smrg # link against it, someone is ignoring the earlier warnings 6814a7b590b3Smrg if /usr/bin/file -L $add 2> /dev/null | 6815a7b590b3Smrg $GREP ": [^:]* bundle" >/dev/null ; then 6816a7b590b3Smrg if test "X$dlopenmodule" != "X$lib"; then 6817a7b590b3Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818a7b590b3Smrg if test -z "$old_library" ; then 68193e51e026Smrg echo 68203e51e026Smrg echo "*** And there doesn't seem to be a static archive available" 68213e51e026Smrg echo "*** The link will probably fail, sorry" 6822a7b590b3Smrg else 6823a7b590b3Smrg add="$dir/$old_library" 6824a7b590b3Smrg fi 6825a7b590b3Smrg elif test -n "$old_library"; then 6826a7b590b3Smrg add="$dir/$old_library" 6827a7b590b3Smrg fi 6828a7b590b3Smrg fi 6829a7b590b3Smrg esac 6830a7b590b3Smrg elif test "$hardcode_minus_L" = no; then 6831a7b590b3Smrg case $host in 6832a7b590b3Smrg *-*-sunos*) add_shlibpath="$dir" ;; 6833a7b590b3Smrg esac 6834a7b590b3Smrg add_dir="-L$dir" 6835a7b590b3Smrg add="-l$name" 6836a7b590b3Smrg elif test "$hardcode_shlibpath_var" = no; then 6837a7b590b3Smrg add_shlibpath="$dir" 6838a7b590b3Smrg add="-l$name" 6839a7b590b3Smrg else 6840a7b590b3Smrg lib_linked=no 6841a7b590b3Smrg fi 6842a7b590b3Smrg ;; 6843a7b590b3Smrg relink) 6844a7b590b3Smrg if test "$hardcode_direct" = yes && 6845a7b590b3Smrg test "$hardcode_direct_absolute" = no; then 6846a7b590b3Smrg add="$dir/$linklib" 6847a7b590b3Smrg elif test "$hardcode_minus_L" = yes; then 68483e51e026Smrg add_dir="-L$absdir" 6849a7b590b3Smrg # Try looking first in the location we're being installed to. 6850a7b590b3Smrg if test -n "$inst_prefix_dir"; then 6851a7b590b3Smrg case $libdir in 6852a7b590b3Smrg [\\/]*) 68533e51e026Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6854a7b590b3Smrg ;; 6855a7b590b3Smrg esac 6856a7b590b3Smrg fi 6857a7b590b3Smrg add="-l$name" 6858a7b590b3Smrg elif test "$hardcode_shlibpath_var" = yes; then 6859a7b590b3Smrg add_shlibpath="$dir" 6860a7b590b3Smrg add="-l$name" 6861a7b590b3Smrg else 6862a7b590b3Smrg lib_linked=no 6863a7b590b3Smrg fi 6864a7b590b3Smrg ;; 6865a7b590b3Smrg *) lib_linked=no ;; 6866a7b590b3Smrg esac 6867a7b590b3Smrg 6868a7b590b3Smrg if test "$lib_linked" != yes; then 6869a7b590b3Smrg func_fatal_configuration "unsupported hardcode properties" 6870a7b590b3Smrg fi 6871a7b590b3Smrg 6872a7b590b3Smrg if test -n "$add_shlibpath"; then 6873a7b590b3Smrg case :$compile_shlibpath: in 6874a7b590b3Smrg *":$add_shlibpath:"*) ;; 68753e51e026Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876a7b590b3Smrg esac 6877a7b590b3Smrg fi 6878a7b590b3Smrg if test "$linkmode" = prog; then 6879a7b590b3Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880a7b590b3Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881a7b590b3Smrg else 6882a7b590b3Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883a7b590b3Smrg test -n "$add" && deplibs="$add $deplibs" 6884a7b590b3Smrg if test "$hardcode_direct" != yes && 6885a7b590b3Smrg test "$hardcode_minus_L" != yes && 6886a7b590b3Smrg test "$hardcode_shlibpath_var" = yes; then 6887a7b590b3Smrg case :$finalize_shlibpath: in 6888a7b590b3Smrg *":$libdir:"*) ;; 68893e51e026Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6890a7b590b3Smrg esac 6891a7b590b3Smrg fi 6892a7b590b3Smrg fi 6893a7b590b3Smrg fi 6894a7b590b3Smrg 68953e51e026Smrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896a7b590b3Smrg add_shlibpath= 6897a7b590b3Smrg add_dir= 6898a7b590b3Smrg add= 6899a7b590b3Smrg # Finalize command for both is simple: just hardcode it. 6900a7b590b3Smrg if test "$hardcode_direct" = yes && 6901a7b590b3Smrg test "$hardcode_direct_absolute" = no; then 6902a7b590b3Smrg add="$libdir/$linklib" 6903a7b590b3Smrg elif test "$hardcode_minus_L" = yes; then 6904a7b590b3Smrg add_dir="-L$libdir" 6905a7b590b3Smrg add="-l$name" 6906a7b590b3Smrg elif test "$hardcode_shlibpath_var" = yes; then 6907a7b590b3Smrg case :$finalize_shlibpath: in 6908a7b590b3Smrg *":$libdir:"*) ;; 69093e51e026Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6910a7b590b3Smrg esac 6911a7b590b3Smrg add="-l$name" 6912a7b590b3Smrg elif test "$hardcode_automatic" = yes; then 6913a7b590b3Smrg if test -n "$inst_prefix_dir" && 6914a7b590b3Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915a7b590b3Smrg add="$inst_prefix_dir$libdir/$linklib" 6916a7b590b3Smrg else 6917a7b590b3Smrg add="$libdir/$linklib" 6918a7b590b3Smrg fi 6919a7b590b3Smrg else 6920a7b590b3Smrg # We cannot seem to hardcode it, guess we'll fake it. 6921a7b590b3Smrg add_dir="-L$libdir" 6922a7b590b3Smrg # Try looking first in the location we're being installed to. 6923a7b590b3Smrg if test -n "$inst_prefix_dir"; then 6924a7b590b3Smrg case $libdir in 6925a7b590b3Smrg [\\/]*) 69263e51e026Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6927a7b590b3Smrg ;; 6928a7b590b3Smrg esac 6929a7b590b3Smrg fi 6930a7b590b3Smrg add="-l$name" 6931a7b590b3Smrg fi 6932a7b590b3Smrg 6933a7b590b3Smrg if test "$linkmode" = prog; then 6934a7b590b3Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935a7b590b3Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936a7b590b3Smrg else 6937a7b590b3Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938a7b590b3Smrg test -n "$add" && deplibs="$add $deplibs" 6939a7b590b3Smrg fi 6940a7b590b3Smrg fi 6941a7b590b3Smrg elif test "$linkmode" = prog; then 6942a7b590b3Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6943a7b590b3Smrg # is not unsupported. This is valid on all known static and 6944a7b590b3Smrg # shared platforms. 6945a7b590b3Smrg if test "$hardcode_direct" != unsupported; then 6946a7b590b3Smrg test -n "$old_library" && linklib="$old_library" 6947a7b590b3Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 6948a7b590b3Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949a7b590b3Smrg else 6950a7b590b3Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6951a7b590b3Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952a7b590b3Smrg fi 6953a7b590b3Smrg elif test "$build_libtool_libs" = yes; then 6954a7b590b3Smrg # Not a shared library 6955a7b590b3Smrg if test "$deplibs_check_method" != pass_all; then 6956a7b590b3Smrg # We're trying link a shared library against a static one 6957a7b590b3Smrg # but the system doesn't support it. 6958a7b590b3Smrg 6959a7b590b3Smrg # Just print a warning and add the library to dependency_libs so 6960a7b590b3Smrg # that the program can be linked against the static library. 69613e51e026Smrg echo 6962a7b590b3Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 69633e51e026Smrg echo "*** I have the capability to make that library automatically link in when" 69643e51e026Smrg echo "*** you link to this library. But I can only do this if you have a" 69653e51e026Smrg echo "*** shared version of the library, which you do not appear to have." 6966a7b590b3Smrg if test "$module" = yes; then 69673e51e026Smrg echo "*** But as you try to build a module library, libtool will still create " 69683e51e026Smrg echo "*** a static module, that should work as long as the dlopening application" 69693e51e026Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970a7b590b3Smrg if test -z "$global_symbol_pipe"; then 69713e51e026Smrg echo 69723e51e026Smrg echo "*** However, this would only work if libtool was able to extract symbol" 69733e51e026Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 69743e51e026Smrg echo "*** not find such a program. So, this module is probably useless." 69753e51e026Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976a7b590b3Smrg fi 6977a7b590b3Smrg if test "$build_old_libs" = no; then 6978a7b590b3Smrg build_libtool_libs=module 6979a7b590b3Smrg build_old_libs=yes 6980a7b590b3Smrg else 6981a7b590b3Smrg build_libtool_libs=no 6982a7b590b3Smrg fi 6983a7b590b3Smrg fi 6984a7b590b3Smrg else 6985a7b590b3Smrg deplibs="$dir/$old_library $deplibs" 6986a7b590b3Smrg link_static=yes 6987a7b590b3Smrg fi 6988a7b590b3Smrg fi # link shared/static library? 6989a7b590b3Smrg 6990a7b590b3Smrg if test "$linkmode" = lib; then 6991a7b590b3Smrg if test -n "$dependency_libs" && 6992a7b590b3Smrg { test "$hardcode_into_libs" != yes || 6993a7b590b3Smrg test "$build_old_libs" = yes || 6994a7b590b3Smrg test "$link_static" = yes; }; then 6995a7b590b3Smrg # Extract -R from dependency_libs 6996a7b590b3Smrg temp_deplibs= 6997a7b590b3Smrg for libdir in $dependency_libs; do 6998a7b590b3Smrg case $libdir in 6999a7b590b3Smrg -R*) func_stripname '-R' '' "$libdir" 7000a7b590b3Smrg temp_xrpath=$func_stripname_result 7001a7b590b3Smrg case " $xrpath " in 7002a7b590b3Smrg *" $temp_xrpath "*) ;; 70033e51e026Smrg *) func_append xrpath " $temp_xrpath";; 7004a7b590b3Smrg esac;; 70053e51e026Smrg *) func_append temp_deplibs " $libdir";; 7006a7b590b3Smrg esac 7007a7b590b3Smrg done 7008a7b590b3Smrg dependency_libs="$temp_deplibs" 7009a7b590b3Smrg fi 7010a7b590b3Smrg 70113e51e026Smrg func_append newlib_search_path " $absdir" 7012a7b590b3Smrg # Link against this library 7013a7b590b3Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014a7b590b3Smrg # ... and its dependency_libs 7015a7b590b3Smrg tmp_libs= 7016a7b590b3Smrg for deplib in $dependency_libs; do 7017a7b590b3Smrg newdependency_libs="$deplib $newdependency_libs" 70183e51e026Smrg case $deplib in 70193e51e026Smrg -L*) func_stripname '-L' '' "$deplib" 70203e51e026Smrg func_resolve_sysroot "$func_stripname_result";; 70213e51e026Smrg *) func_resolve_sysroot "$deplib" ;; 70223e51e026Smrg esac 70233e51e026Smrg if $opt_preserve_dup_deps ; then 7024a7b590b3Smrg case "$tmp_libs " in 70253e51e026Smrg *" $func_resolve_sysroot_result "*) 70263e51e026Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027a7b590b3Smrg esac 7028a7b590b3Smrg fi 70293e51e026Smrg func_append tmp_libs " $func_resolve_sysroot_result" 7030a7b590b3Smrg done 7031a7b590b3Smrg 7032a7b590b3Smrg if test "$link_all_deplibs" != no; then 7033a7b590b3Smrg # Add the search paths of all dependency libraries 7034a7b590b3Smrg for deplib in $dependency_libs; do 70353e51e026Smrg path= 7036a7b590b3Smrg case $deplib in 7037a7b590b3Smrg -L*) path="$deplib" ;; 7038a7b590b3Smrg *.la) 70393e51e026Smrg func_resolve_sysroot "$deplib" 70403e51e026Smrg deplib=$func_resolve_sysroot_result 7041a7b590b3Smrg func_dirname "$deplib" "" "." 70423e51e026Smrg dir=$func_dirname_result 7043a7b590b3Smrg # We need an absolute path. 7044a7b590b3Smrg case $dir in 7045a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046a7b590b3Smrg *) 7047a7b590b3Smrg absdir=`cd "$dir" && pwd` 7048a7b590b3Smrg if test -z "$absdir"; then 7049a7b590b3Smrg func_warning "cannot determine absolute directory name of \`$dir'" 7050a7b590b3Smrg absdir="$dir" 7051a7b590b3Smrg fi 7052a7b590b3Smrg ;; 7053a7b590b3Smrg esac 7054a7b590b3Smrg if $GREP "^installed=no" $deplib > /dev/null; then 7055a7b590b3Smrg case $host in 7056a7b590b3Smrg *-*-darwin*) 7057a7b590b3Smrg depdepl= 7058a7b590b3Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059a7b590b3Smrg if test -n "$deplibrary_names" ; then 7060a7b590b3Smrg for tmp in $deplibrary_names ; do 7061a7b590b3Smrg depdepl=$tmp 7062a7b590b3Smrg done 7063a7b590b3Smrg if test -f "$absdir/$objdir/$depdepl" ; then 7064a7b590b3Smrg depdepl="$absdir/$objdir/$depdepl" 7065a7b590b3Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066a7b590b3Smrg if test -z "$darwin_install_name"; then 7067a7b590b3Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068a7b590b3Smrg fi 70693e51e026Smrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 70703e51e026Smrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071a7b590b3Smrg path= 7072a7b590b3Smrg fi 7073a7b590b3Smrg fi 7074a7b590b3Smrg ;; 7075a7b590b3Smrg *) 7076a7b590b3Smrg path="-L$absdir/$objdir" 7077a7b590b3Smrg ;; 7078a7b590b3Smrg esac 7079a7b590b3Smrg else 7080a7b590b3Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081a7b590b3Smrg test -z "$libdir" && \ 7082a7b590b3Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7083a7b590b3Smrg test "$absdir" != "$libdir" && \ 7084a7b590b3Smrg func_warning "\`$deplib' seems to be moved" 7085a7b590b3Smrg 7086a7b590b3Smrg path="-L$absdir" 7087a7b590b3Smrg fi 7088a7b590b3Smrg ;; 7089a7b590b3Smrg esac 7090a7b590b3Smrg case " $deplibs " in 7091a7b590b3Smrg *" $path "*) ;; 7092a7b590b3Smrg *) deplibs="$path $deplibs" ;; 7093a7b590b3Smrg esac 7094a7b590b3Smrg done 7095a7b590b3Smrg fi # link_all_deplibs != no 7096a7b590b3Smrg fi # linkmode = lib 7097a7b590b3Smrg done # for deplib in $libs 7098a7b590b3Smrg if test "$pass" = link; then 7099a7b590b3Smrg if test "$linkmode" = "prog"; then 7100a7b590b3Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101a7b590b3Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102a7b590b3Smrg else 71033e51e026Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104a7b590b3Smrg fi 7105a7b590b3Smrg fi 7106a7b590b3Smrg dependency_libs="$newdependency_libs" 7107a7b590b3Smrg if test "$pass" = dlpreopen; then 7108a7b590b3Smrg # Link the dlpreopened libraries before other libraries 7109a7b590b3Smrg for deplib in $save_deplibs; do 7110a7b590b3Smrg deplibs="$deplib $deplibs" 7111a7b590b3Smrg done 7112a7b590b3Smrg fi 7113a7b590b3Smrg if test "$pass" != dlopen; then 7114a7b590b3Smrg if test "$pass" != conv; then 7115a7b590b3Smrg # Make sure lib_search_path contains only unique directories. 7116a7b590b3Smrg lib_search_path= 7117a7b590b3Smrg for dir in $newlib_search_path; do 7118a7b590b3Smrg case "$lib_search_path " in 7119a7b590b3Smrg *" $dir "*) ;; 71203e51e026Smrg *) func_append lib_search_path " $dir" ;; 7121a7b590b3Smrg esac 7122a7b590b3Smrg done 7123a7b590b3Smrg newlib_search_path= 7124a7b590b3Smrg fi 7125a7b590b3Smrg 7126a7b590b3Smrg if test "$linkmode,$pass" != "prog,link"; then 7127a7b590b3Smrg vars="deplibs" 7128a7b590b3Smrg else 7129a7b590b3Smrg vars="compile_deplibs finalize_deplibs" 7130a7b590b3Smrg fi 7131a7b590b3Smrg for var in $vars dependency_libs; do 7132a7b590b3Smrg # Add libraries to $var in reverse order 7133a7b590b3Smrg eval tmp_libs=\"\$$var\" 7134a7b590b3Smrg new_libs= 7135a7b590b3Smrg for deplib in $tmp_libs; do 7136a7b590b3Smrg # FIXME: Pedantically, this is the right thing to do, so 7137a7b590b3Smrg # that some nasty dependency loop isn't accidentally 7138a7b590b3Smrg # broken: 7139a7b590b3Smrg #new_libs="$deplib $new_libs" 7140a7b590b3Smrg # Pragmatically, this seems to cause very few problems in 7141a7b590b3Smrg # practice: 7142a7b590b3Smrg case $deplib in 7143a7b590b3Smrg -L*) new_libs="$deplib $new_libs" ;; 7144a7b590b3Smrg -R*) ;; 7145a7b590b3Smrg *) 7146a7b590b3Smrg # And here is the reason: when a library appears more 7147a7b590b3Smrg # than once as an explicit dependence of a library, or 7148a7b590b3Smrg # is implicitly linked in more than once by the 7149a7b590b3Smrg # compiler, it is considered special, and multiple 7150a7b590b3Smrg # occurrences thereof are not removed. Compare this 7151a7b590b3Smrg # with having the same library being listed as a 7152a7b590b3Smrg # dependency of multiple other libraries: in this case, 7153a7b590b3Smrg # we know (pedantically, we assume) the library does not 7154a7b590b3Smrg # need to be listed more than once, so we keep only the 7155a7b590b3Smrg # last copy. This is not always right, but it is rare 7156a7b590b3Smrg # enough that we require users that really mean to play 7157a7b590b3Smrg # such unportable linking tricks to link the library 7158a7b590b3Smrg # using -Wl,-lname, so that libtool does not consider it 7159a7b590b3Smrg # for duplicate removal. 7160a7b590b3Smrg case " $specialdeplibs " in 7161a7b590b3Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162a7b590b3Smrg *) 7163a7b590b3Smrg case " $new_libs " in 7164a7b590b3Smrg *" $deplib "*) ;; 7165a7b590b3Smrg *) new_libs="$deplib $new_libs" ;; 7166a7b590b3Smrg esac 7167a7b590b3Smrg ;; 7168a7b590b3Smrg esac 7169a7b590b3Smrg ;; 7170a7b590b3Smrg esac 7171a7b590b3Smrg done 7172a7b590b3Smrg tmp_libs= 7173a7b590b3Smrg for deplib in $new_libs; do 7174a7b590b3Smrg case $deplib in 7175a7b590b3Smrg -L*) 7176a7b590b3Smrg case " $tmp_libs " in 7177a7b590b3Smrg *" $deplib "*) ;; 71783e51e026Smrg *) func_append tmp_libs " $deplib" ;; 7179a7b590b3Smrg esac 7180a7b590b3Smrg ;; 71813e51e026Smrg *) func_append tmp_libs " $deplib" ;; 7182a7b590b3Smrg esac 7183a7b590b3Smrg done 7184a7b590b3Smrg eval $var=\"$tmp_libs\" 7185a7b590b3Smrg done # for var 7186a7b590b3Smrg fi 7187a7b590b3Smrg # Last step: remove runtime libs from dependency_libs 7188a7b590b3Smrg # (they stay in deplibs) 7189a7b590b3Smrg tmp_libs= 7190a7b590b3Smrg for i in $dependency_libs ; do 7191a7b590b3Smrg case " $predeps $postdeps $compiler_lib_search_path " in 7192a7b590b3Smrg *" $i "*) 7193a7b590b3Smrg i="" 7194a7b590b3Smrg ;; 7195a7b590b3Smrg esac 7196a7b590b3Smrg if test -n "$i" ; then 71973e51e026Smrg func_append tmp_libs " $i" 7198a7b590b3Smrg fi 7199a7b590b3Smrg done 7200a7b590b3Smrg dependency_libs=$tmp_libs 7201a7b590b3Smrg done # for pass 7202a7b590b3Smrg if test "$linkmode" = prog; then 7203a7b590b3Smrg dlfiles="$newdlfiles" 7204a7b590b3Smrg fi 7205a7b590b3Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 7206a7b590b3Smrg dlprefiles="$newdlprefiles" 7207a7b590b3Smrg fi 7208a7b590b3Smrg 7209a7b590b3Smrg case $linkmode in 7210a7b590b3Smrg oldlib) 7211a7b590b3Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212a7b590b3Smrg func_warning "\`-dlopen' is ignored for archives" 7213a7b590b3Smrg fi 7214a7b590b3Smrg 7215a7b590b3Smrg case " $deplibs" in 7216a7b590b3Smrg *\ -l* | *\ -L*) 7217a7b590b3Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218a7b590b3Smrg esac 7219a7b590b3Smrg 7220a7b590b3Smrg test -n "$rpath" && \ 7221a7b590b3Smrg func_warning "\`-rpath' is ignored for archives" 7222a7b590b3Smrg 7223a7b590b3Smrg test -n "$xrpath" && \ 7224a7b590b3Smrg func_warning "\`-R' is ignored for archives" 7225a7b590b3Smrg 7226a7b590b3Smrg test -n "$vinfo" && \ 7227a7b590b3Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 7228a7b590b3Smrg 7229a7b590b3Smrg test -n "$release" && \ 7230a7b590b3Smrg func_warning "\`-release' is ignored for archives" 7231a7b590b3Smrg 7232a7b590b3Smrg test -n "$export_symbols$export_symbols_regex" && \ 7233a7b590b3Smrg func_warning "\`-export-symbols' is ignored for archives" 7234a7b590b3Smrg 7235a7b590b3Smrg # Now set the variables for building old libraries. 7236a7b590b3Smrg build_libtool_libs=no 7237a7b590b3Smrg oldlibs="$output" 72383e51e026Smrg func_append objs "$old_deplibs" 7239a7b590b3Smrg ;; 7240a7b590b3Smrg 7241a7b590b3Smrg lib) 7242a7b590b3Smrg # Make sure we only generate libraries of the form `libNAME.la'. 7243a7b590b3Smrg case $outputname in 7244a7b590b3Smrg lib*) 7245a7b590b3Smrg func_stripname 'lib' '.la' "$outputname" 7246a7b590b3Smrg name=$func_stripname_result 7247a7b590b3Smrg eval shared_ext=\"$shrext_cmds\" 7248a7b590b3Smrg eval libname=\"$libname_spec\" 7249a7b590b3Smrg ;; 7250a7b590b3Smrg *) 7251a7b590b3Smrg test "$module" = no && \ 7252a7b590b3Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253a7b590b3Smrg 7254a7b590b3Smrg if test "$need_lib_prefix" != no; then 7255a7b590b3Smrg # Add the "lib" prefix for modules if required 7256a7b590b3Smrg func_stripname '' '.la' "$outputname" 7257a7b590b3Smrg name=$func_stripname_result 7258a7b590b3Smrg eval shared_ext=\"$shrext_cmds\" 7259a7b590b3Smrg eval libname=\"$libname_spec\" 7260a7b590b3Smrg else 7261a7b590b3Smrg func_stripname '' '.la' "$outputname" 7262a7b590b3Smrg libname=$func_stripname_result 7263a7b590b3Smrg fi 7264a7b590b3Smrg ;; 7265a7b590b3Smrg esac 7266a7b590b3Smrg 7267a7b590b3Smrg if test -n "$objs"; then 7268a7b590b3Smrg if test "$deplibs_check_method" != pass_all; then 7269a7b590b3Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270a7b590b3Smrg else 72713e51e026Smrg echo 7272a7b590b3Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273a7b590b3Smrg $ECHO "*** objects $objs is not portable!" 72743e51e026Smrg func_append libobjs " $objs" 7275a7b590b3Smrg fi 7276a7b590b3Smrg fi 7277a7b590b3Smrg 7278a7b590b3Smrg test "$dlself" != no && \ 7279a7b590b3Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7280a7b590b3Smrg 7281a7b590b3Smrg set dummy $rpath 7282a7b590b3Smrg shift 7283a7b590b3Smrg test "$#" -gt 1 && \ 7284a7b590b3Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7285a7b590b3Smrg 7286a7b590b3Smrg install_libdir="$1" 7287a7b590b3Smrg 7288a7b590b3Smrg oldlibs= 7289a7b590b3Smrg if test -z "$rpath"; then 7290a7b590b3Smrg if test "$build_libtool_libs" = yes; then 7291a7b590b3Smrg # Building a libtool convenience library. 7292a7b590b3Smrg # Some compilers have problems with a `.al' extension so 7293a7b590b3Smrg # convenience libraries should have the same extension an 7294a7b590b3Smrg # archive normally would. 7295a7b590b3Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296a7b590b3Smrg build_libtool_libs=convenience 7297a7b590b3Smrg build_old_libs=yes 7298a7b590b3Smrg fi 7299a7b590b3Smrg 7300a7b590b3Smrg test -n "$vinfo" && \ 7301a7b590b3Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302a7b590b3Smrg 7303a7b590b3Smrg test -n "$release" && \ 7304a7b590b3Smrg func_warning "\`-release' is ignored for convenience libraries" 7305a7b590b3Smrg else 7306a7b590b3Smrg 7307a7b590b3Smrg # Parse the version information argument. 7308a7b590b3Smrg save_ifs="$IFS"; IFS=':' 7309a7b590b3Smrg set dummy $vinfo 0 0 0 7310a7b590b3Smrg shift 7311a7b590b3Smrg IFS="$save_ifs" 7312a7b590b3Smrg 7313a7b590b3Smrg test -n "$7" && \ 7314a7b590b3Smrg func_fatal_help "too many parameters to \`-version-info'" 7315a7b590b3Smrg 7316a7b590b3Smrg # convert absolute version numbers to libtool ages 7317a7b590b3Smrg # this retains compatibility with .la files and attempts 7318a7b590b3Smrg # to make the code below a bit more comprehensible 7319a7b590b3Smrg 7320a7b590b3Smrg case $vinfo_number in 7321a7b590b3Smrg yes) 7322a7b590b3Smrg number_major="$1" 7323a7b590b3Smrg number_minor="$2" 7324a7b590b3Smrg number_revision="$3" 7325a7b590b3Smrg # 7326a7b590b3Smrg # There are really only two kinds -- those that 7327a7b590b3Smrg # use the current revision as the major version 7328a7b590b3Smrg # and those that subtract age and use age as 7329a7b590b3Smrg # a minor version. But, then there is irix 7330a7b590b3Smrg # which has an extra 1 added just for fun 7331a7b590b3Smrg # 7332a7b590b3Smrg case $version_type in 73333e51e026Smrg # correct linux to gnu/linux during the next big refactor 7334a7b590b3Smrg darwin|linux|osf|windows|none) 7335a7b590b3Smrg func_arith $number_major + $number_minor 7336a7b590b3Smrg current=$func_arith_result 7337a7b590b3Smrg age="$number_minor" 7338a7b590b3Smrg revision="$number_revision" 7339a7b590b3Smrg ;; 73403e51e026Smrg freebsd-aout|freebsd-elf|qnx|sunos) 7341a7b590b3Smrg current="$number_major" 7342a7b590b3Smrg revision="$number_minor" 7343a7b590b3Smrg age="0" 7344a7b590b3Smrg ;; 7345a7b590b3Smrg irix|nonstopux) 7346a7b590b3Smrg func_arith $number_major + $number_minor 7347a7b590b3Smrg current=$func_arith_result 7348a7b590b3Smrg age="$number_minor" 7349a7b590b3Smrg revision="$number_minor" 7350a7b590b3Smrg lt_irix_increment=no 7351a7b590b3Smrg ;; 7352a7b590b3Smrg esac 7353a7b590b3Smrg ;; 7354a7b590b3Smrg no) 7355a7b590b3Smrg current="$1" 7356a7b590b3Smrg revision="$2" 7357a7b590b3Smrg age="$3" 7358a7b590b3Smrg ;; 7359a7b590b3Smrg esac 7360a7b590b3Smrg 7361a7b590b3Smrg # Check that each of the things are valid numbers. 7362a7b590b3Smrg case $current in 7363a7b590b3Smrg 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]) ;; 7364a7b590b3Smrg *) 7365a7b590b3Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 7366a7b590b3Smrg func_fatal_error "\`$vinfo' is not valid version information" 7367a7b590b3Smrg ;; 7368a7b590b3Smrg esac 7369a7b590b3Smrg 7370a7b590b3Smrg case $revision in 7371a7b590b3Smrg 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]) ;; 7372a7b590b3Smrg *) 7373a7b590b3Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 7374a7b590b3Smrg func_fatal_error "\`$vinfo' is not valid version information" 7375a7b590b3Smrg ;; 7376a7b590b3Smrg esac 7377a7b590b3Smrg 7378a7b590b3Smrg case $age in 7379a7b590b3Smrg 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]) ;; 7380a7b590b3Smrg *) 7381a7b590b3Smrg func_error "AGE \`$age' must be a nonnegative integer" 7382a7b590b3Smrg func_fatal_error "\`$vinfo' is not valid version information" 7383a7b590b3Smrg ;; 7384a7b590b3Smrg esac 7385a7b590b3Smrg 7386a7b590b3Smrg if test "$age" -gt "$current"; then 7387a7b590b3Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388a7b590b3Smrg func_fatal_error "\`$vinfo' is not valid version information" 7389a7b590b3Smrg fi 7390a7b590b3Smrg 7391a7b590b3Smrg # Calculate the version variables. 7392a7b590b3Smrg major= 7393a7b590b3Smrg versuffix= 7394a7b590b3Smrg verstring= 7395a7b590b3Smrg case $version_type in 7396a7b590b3Smrg none) ;; 7397a7b590b3Smrg 7398a7b590b3Smrg darwin) 7399a7b590b3Smrg # Like Linux, but with the current version available in 7400a7b590b3Smrg # verstring for coding it into the library header 7401a7b590b3Smrg func_arith $current - $age 7402a7b590b3Smrg major=.$func_arith_result 7403a7b590b3Smrg versuffix="$major.$age.$revision" 7404a7b590b3Smrg # Darwin ld doesn't like 0 for these options... 7405a7b590b3Smrg func_arith $current + 1 7406a7b590b3Smrg minor_current=$func_arith_result 7407a7b590b3Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408a7b590b3Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409a7b590b3Smrg ;; 7410a7b590b3Smrg 7411a7b590b3Smrg freebsd-aout) 7412a7b590b3Smrg major=".$current" 7413a7b590b3Smrg versuffix=".$current.$revision"; 7414a7b590b3Smrg ;; 7415a7b590b3Smrg 7416a7b590b3Smrg freebsd-elf) 7417a7b590b3Smrg major=".$current" 7418a7b590b3Smrg versuffix=".$current" 7419a7b590b3Smrg ;; 7420a7b590b3Smrg 7421a7b590b3Smrg irix | nonstopux) 7422a7b590b3Smrg if test "X$lt_irix_increment" = "Xno"; then 7423a7b590b3Smrg func_arith $current - $age 7424a7b590b3Smrg else 7425a7b590b3Smrg func_arith $current - $age + 1 7426a7b590b3Smrg fi 7427a7b590b3Smrg major=$func_arith_result 7428a7b590b3Smrg 7429a7b590b3Smrg case $version_type in 7430a7b590b3Smrg nonstopux) verstring_prefix=nonstopux ;; 7431a7b590b3Smrg *) verstring_prefix=sgi ;; 7432a7b590b3Smrg esac 7433a7b590b3Smrg verstring="$verstring_prefix$major.$revision" 7434a7b590b3Smrg 7435a7b590b3Smrg # Add in all the interfaces that we are compatible with. 7436a7b590b3Smrg loop=$revision 7437a7b590b3Smrg while test "$loop" -ne 0; do 7438a7b590b3Smrg func_arith $revision - $loop 7439a7b590b3Smrg iface=$func_arith_result 7440a7b590b3Smrg func_arith $loop - 1 7441a7b590b3Smrg loop=$func_arith_result 7442a7b590b3Smrg verstring="$verstring_prefix$major.$iface:$verstring" 7443a7b590b3Smrg done 7444a7b590b3Smrg 7445a7b590b3Smrg # Before this point, $major must not contain `.'. 7446a7b590b3Smrg major=.$major 7447a7b590b3Smrg versuffix="$major.$revision" 7448a7b590b3Smrg ;; 7449a7b590b3Smrg 74503e51e026Smrg linux) # correct to gnu/linux during the next big refactor 7451a7b590b3Smrg func_arith $current - $age 7452a7b590b3Smrg major=.$func_arith_result 7453a7b590b3Smrg versuffix="$major.$age.$revision" 7454a7b590b3Smrg ;; 7455a7b590b3Smrg 7456a7b590b3Smrg osf) 7457a7b590b3Smrg func_arith $current - $age 7458a7b590b3Smrg major=.$func_arith_result 7459a7b590b3Smrg versuffix=".$current.$age.$revision" 7460a7b590b3Smrg verstring="$current.$age.$revision" 7461a7b590b3Smrg 7462a7b590b3Smrg # Add in all the interfaces that we are compatible with. 7463a7b590b3Smrg loop=$age 7464a7b590b3Smrg while test "$loop" -ne 0; do 7465a7b590b3Smrg func_arith $current - $loop 7466a7b590b3Smrg iface=$func_arith_result 7467a7b590b3Smrg func_arith $loop - 1 7468a7b590b3Smrg loop=$func_arith_result 7469a7b590b3Smrg verstring="$verstring:${iface}.0" 7470a7b590b3Smrg done 7471a7b590b3Smrg 7472a7b590b3Smrg # Make executables depend on our current version. 74733e51e026Smrg func_append verstring ":${current}.0" 7474a7b590b3Smrg ;; 7475a7b590b3Smrg 7476a7b590b3Smrg qnx) 7477a7b590b3Smrg major=".$current" 7478a7b590b3Smrg versuffix=".$current" 7479a7b590b3Smrg ;; 7480a7b590b3Smrg 7481a7b590b3Smrg sunos) 7482a7b590b3Smrg major=".$current" 7483a7b590b3Smrg versuffix=".$current.$revision" 7484a7b590b3Smrg ;; 7485a7b590b3Smrg 7486a7b590b3Smrg windows) 7487a7b590b3Smrg # Use '-' rather than '.', since we only want one 7488a7b590b3Smrg # extension on DOS 8.3 filesystems. 7489a7b590b3Smrg func_arith $current - $age 7490a7b590b3Smrg major=$func_arith_result 7491a7b590b3Smrg versuffix="-$major" 7492a7b590b3Smrg ;; 7493a7b590b3Smrg 7494a7b590b3Smrg *) 7495a7b590b3Smrg func_fatal_configuration "unknown library version type \`$version_type'" 7496a7b590b3Smrg ;; 7497a7b590b3Smrg esac 7498a7b590b3Smrg 7499a7b590b3Smrg # Clear the version info if we defaulted, and they specified a release. 7500a7b590b3Smrg if test -z "$vinfo" && test -n "$release"; then 7501a7b590b3Smrg major= 7502a7b590b3Smrg case $version_type in 7503a7b590b3Smrg darwin) 7504a7b590b3Smrg # we can't check for "0.0" in archive_cmds due to quoting 7505a7b590b3Smrg # problems, so we reset it completely 7506a7b590b3Smrg verstring= 7507a7b590b3Smrg ;; 7508a7b590b3Smrg *) 7509a7b590b3Smrg verstring="0.0" 7510a7b590b3Smrg ;; 7511a7b590b3Smrg esac 7512a7b590b3Smrg if test "$need_version" = no; then 7513a7b590b3Smrg versuffix= 7514a7b590b3Smrg else 7515a7b590b3Smrg versuffix=".0.0" 7516a7b590b3Smrg fi 7517a7b590b3Smrg fi 7518a7b590b3Smrg 7519a7b590b3Smrg # Remove version info from name if versioning should be avoided 7520a7b590b3Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 7521a7b590b3Smrg major= 7522a7b590b3Smrg versuffix= 7523a7b590b3Smrg verstring="" 7524a7b590b3Smrg fi 7525a7b590b3Smrg 7526a7b590b3Smrg # Check to see if the archive will have undefined symbols. 7527a7b590b3Smrg if test "$allow_undefined" = yes; then 7528a7b590b3Smrg if test "$allow_undefined_flag" = unsupported; then 7529a7b590b3Smrg func_warning "undefined symbols not allowed in $host shared libraries" 7530a7b590b3Smrg build_libtool_libs=no 7531a7b590b3Smrg build_old_libs=yes 7532a7b590b3Smrg fi 7533a7b590b3Smrg else 7534a7b590b3Smrg # Don't allow undefined symbols. 7535a7b590b3Smrg allow_undefined_flag="$no_undefined_flag" 7536a7b590b3Smrg fi 7537a7b590b3Smrg 7538a7b590b3Smrg fi 7539a7b590b3Smrg 7540a7b590b3Smrg func_generate_dlsyms "$libname" "$libname" "yes" 75413e51e026Smrg func_append libobjs " $symfileobj" 7542a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 7543a7b590b3Smrg 75443e51e026Smrg if test "$opt_mode" != relink; then 7545a7b590b3Smrg # Remove our outputs, but don't remove object files since they 7546a7b590b3Smrg # may have been created when compiling PIC objects. 7547a7b590b3Smrg removelist= 7548a7b590b3Smrg tempremovelist=`$ECHO "$output_objdir/*"` 7549a7b590b3Smrg for p in $tempremovelist; do 7550a7b590b3Smrg case $p in 7551a7b590b3Smrg *.$objext | *.gcno) 7552a7b590b3Smrg ;; 7553a7b590b3Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554a7b590b3Smrg if test "X$precious_files_regex" != "X"; then 7555a7b590b3Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556a7b590b3Smrg then 7557a7b590b3Smrg continue 7558a7b590b3Smrg fi 7559a7b590b3Smrg fi 75603e51e026Smrg func_append removelist " $p" 7561a7b590b3Smrg ;; 7562a7b590b3Smrg *) ;; 7563a7b590b3Smrg esac 7564a7b590b3Smrg done 7565a7b590b3Smrg test -n "$removelist" && \ 7566a7b590b3Smrg func_show_eval "${RM}r \$removelist" 7567a7b590b3Smrg fi 7568a7b590b3Smrg 7569a7b590b3Smrg # Now set the variables for building old libraries. 7570a7b590b3Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 75713e51e026Smrg func_append oldlibs " $output_objdir/$libname.$libext" 7572a7b590b3Smrg 7573a7b590b3Smrg # Transform .lo files to .o files. 75743e51e026Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575a7b590b3Smrg fi 7576a7b590b3Smrg 7577a7b590b3Smrg # Eliminate all temporary directories. 7578a7b590b3Smrg #for path in $notinst_path; do 75793e51e026Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 75803e51e026Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 75813e51e026Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582a7b590b3Smrg #done 7583a7b590b3Smrg 7584a7b590b3Smrg if test -n "$xrpath"; then 7585a7b590b3Smrg # If the user specified any rpath flags, then add them. 7586a7b590b3Smrg temp_xrpath= 7587a7b590b3Smrg for libdir in $xrpath; do 75883e51e026Smrg func_replace_sysroot "$libdir" 75893e51e026Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7590a7b590b3Smrg case "$finalize_rpath " in 7591a7b590b3Smrg *" $libdir "*) ;; 75923e51e026Smrg *) func_append finalize_rpath " $libdir" ;; 7593a7b590b3Smrg esac 7594a7b590b3Smrg done 7595a7b590b3Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596a7b590b3Smrg dependency_libs="$temp_xrpath $dependency_libs" 7597a7b590b3Smrg fi 7598a7b590b3Smrg fi 7599a7b590b3Smrg 7600a7b590b3Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 7601a7b590b3Smrg old_dlfiles="$dlfiles" 7602a7b590b3Smrg dlfiles= 7603a7b590b3Smrg for lib in $old_dlfiles; do 7604a7b590b3Smrg case " $dlprefiles $dlfiles " in 7605a7b590b3Smrg *" $lib "*) ;; 76063e51e026Smrg *) func_append dlfiles " $lib" ;; 7607a7b590b3Smrg esac 7608a7b590b3Smrg done 7609a7b590b3Smrg 7610a7b590b3Smrg # Make sure dlprefiles contains only unique files 7611a7b590b3Smrg old_dlprefiles="$dlprefiles" 7612a7b590b3Smrg dlprefiles= 7613a7b590b3Smrg for lib in $old_dlprefiles; do 7614a7b590b3Smrg case "$dlprefiles " in 7615a7b590b3Smrg *" $lib "*) ;; 76163e51e026Smrg *) func_append dlprefiles " $lib" ;; 7617a7b590b3Smrg esac 7618a7b590b3Smrg done 7619a7b590b3Smrg 7620a7b590b3Smrg if test "$build_libtool_libs" = yes; then 7621a7b590b3Smrg if test -n "$rpath"; then 7622a7b590b3Smrg case $host in 76233e51e026Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624a7b590b3Smrg # these systems don't actually have a c library (as such)! 7625a7b590b3Smrg ;; 7626a7b590b3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7627a7b590b3Smrg # Rhapsody C library is in the System framework 76283e51e026Smrg func_append deplibs " System.ltframework" 7629a7b590b3Smrg ;; 7630a7b590b3Smrg *-*-netbsd*) 7631a7b590b3Smrg # Don't link with libc until the a.out ld.so is fixed. 7632a7b590b3Smrg ;; 7633a7b590b3Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634a7b590b3Smrg # Do not include libc due to us having libc/libc_r. 7635a7b590b3Smrg ;; 7636a7b590b3Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7637a7b590b3Smrg # Causes problems with __ctype 7638a7b590b3Smrg ;; 7639a7b590b3Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640a7b590b3Smrg # Compiler inserts libc in the correct place for threads to work 7641a7b590b3Smrg ;; 7642a7b590b3Smrg *) 7643a7b590b3Smrg # Add libc to deplibs on all other systems if necessary. 7644a7b590b3Smrg if test "$build_libtool_need_lc" = "yes"; then 76453e51e026Smrg func_append deplibs " -lc" 7646a7b590b3Smrg fi 7647a7b590b3Smrg ;; 7648a7b590b3Smrg esac 7649a7b590b3Smrg fi 7650a7b590b3Smrg 7651a7b590b3Smrg # Transform deplibs into only deplibs that can be linked in shared. 7652a7b590b3Smrg name_save=$name 7653a7b590b3Smrg libname_save=$libname 7654a7b590b3Smrg release_save=$release 7655a7b590b3Smrg versuffix_save=$versuffix 7656a7b590b3Smrg major_save=$major 7657a7b590b3Smrg # I'm not sure if I'm treating the release correctly. I think 7658a7b590b3Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 7659a7b590b3Smrg # add it in twice. Is that correct? 7660a7b590b3Smrg release="" 7661a7b590b3Smrg versuffix="" 7662a7b590b3Smrg major="" 7663a7b590b3Smrg newdeplibs= 7664a7b590b3Smrg droppeddeps=no 7665a7b590b3Smrg case $deplibs_check_method in 7666a7b590b3Smrg pass_all) 7667a7b590b3Smrg # Don't check for shared/static. Everything works. 7668a7b590b3Smrg # This might be a little naive. We might want to check 7669a7b590b3Smrg # whether the library exists or not. But this is on 7670a7b590b3Smrg # osf3 & osf4 and I'm not really sure... Just 7671a7b590b3Smrg # implementing what was already the behavior. 7672a7b590b3Smrg newdeplibs=$deplibs 7673a7b590b3Smrg ;; 7674a7b590b3Smrg test_compile) 7675a7b590b3Smrg # This code stresses the "libraries are programs" paradigm to its 7676a7b590b3Smrg # limits. Maybe even breaks it. We compile a program, linking it 7677a7b590b3Smrg # against the deplibs as a proxy for the library. Then we can check 7678a7b590b3Smrg # whether they linked in statically or dynamically with ldd. 7679a7b590b3Smrg $opt_dry_run || $RM conftest.c 7680a7b590b3Smrg cat > conftest.c <<EOF 7681a7b590b3Smrg int main() { return 0; } 7682a7b590b3SmrgEOF 7683a7b590b3Smrg $opt_dry_run || $RM conftest 7684a7b590b3Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685a7b590b3Smrg ldd_output=`ldd conftest` 7686a7b590b3Smrg for i in $deplibs; do 7687a7b590b3Smrg case $i in 7688a7b590b3Smrg -l*) 7689a7b590b3Smrg func_stripname -l '' "$i" 7690a7b590b3Smrg name=$func_stripname_result 7691a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692a7b590b3Smrg case " $predeps $postdeps " in 7693a7b590b3Smrg *" $i "*) 76943e51e026Smrg func_append newdeplibs " $i" 7695a7b590b3Smrg i="" 7696a7b590b3Smrg ;; 7697a7b590b3Smrg esac 7698a7b590b3Smrg fi 7699a7b590b3Smrg if test -n "$i" ; then 7700a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7701a7b590b3Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702a7b590b3Smrg set dummy $deplib_matches; shift 7703a7b590b3Smrg deplib_match=$1 7704a7b590b3Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77053e51e026Smrg func_append newdeplibs " $i" 7706a7b590b3Smrg else 7707a7b590b3Smrg droppeddeps=yes 77083e51e026Smrg echo 7709a7b590b3Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77103e51e026Smrg echo "*** I have the capability to make that library automatically link in when" 77113e51e026Smrg echo "*** you link to this library. But I can only do this if you have a" 77123e51e026Smrg echo "*** shared version of the library, which I believe you do not have" 77133e51e026Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 77143e51e026Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715a7b590b3Smrg fi 7716a7b590b3Smrg fi 7717a7b590b3Smrg ;; 7718a7b590b3Smrg *) 77193e51e026Smrg func_append newdeplibs " $i" 7720a7b590b3Smrg ;; 7721a7b590b3Smrg esac 7722a7b590b3Smrg done 7723a7b590b3Smrg else 7724a7b590b3Smrg # Error occurred in the first compile. Let's try to salvage 7725a7b590b3Smrg # the situation: Compile a separate program for each library. 7726a7b590b3Smrg for i in $deplibs; do 7727a7b590b3Smrg case $i in 7728a7b590b3Smrg -l*) 7729a7b590b3Smrg func_stripname -l '' "$i" 7730a7b590b3Smrg name=$func_stripname_result 7731a7b590b3Smrg $opt_dry_run || $RM conftest 7732a7b590b3Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733a7b590b3Smrg ldd_output=`ldd conftest` 7734a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735a7b590b3Smrg case " $predeps $postdeps " in 7736a7b590b3Smrg *" $i "*) 77373e51e026Smrg func_append newdeplibs " $i" 7738a7b590b3Smrg i="" 7739a7b590b3Smrg ;; 7740a7b590b3Smrg esac 7741a7b590b3Smrg fi 7742a7b590b3Smrg if test -n "$i" ; then 7743a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7744a7b590b3Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745a7b590b3Smrg set dummy $deplib_matches; shift 7746a7b590b3Smrg deplib_match=$1 7747a7b590b3Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77483e51e026Smrg func_append newdeplibs " $i" 7749a7b590b3Smrg else 7750a7b590b3Smrg droppeddeps=yes 77513e51e026Smrg echo 7752a7b590b3Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77533e51e026Smrg echo "*** I have the capability to make that library automatically link in when" 77543e51e026Smrg echo "*** you link to this library. But I can only do this if you have a" 77553e51e026Smrg echo "*** shared version of the library, which you do not appear to have" 77563e51e026Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 77573e51e026Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758a7b590b3Smrg fi 7759a7b590b3Smrg fi 7760a7b590b3Smrg else 7761a7b590b3Smrg droppeddeps=yes 77623e51e026Smrg echo 7763a7b590b3Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 77643e51e026Smrg echo "*** make it link in! You will probably need to install it or some" 77653e51e026Smrg echo "*** library that it depends on before this library will be fully" 77663e51e026Smrg echo "*** functional. Installing it before continuing would be even better." 7767a7b590b3Smrg fi 7768a7b590b3Smrg ;; 7769a7b590b3Smrg *) 77703e51e026Smrg func_append newdeplibs " $i" 7771a7b590b3Smrg ;; 7772a7b590b3Smrg esac 7773a7b590b3Smrg done 7774a7b590b3Smrg fi 7775a7b590b3Smrg ;; 7776a7b590b3Smrg file_magic*) 7777a7b590b3Smrg set dummy $deplibs_check_method; shift 7778a7b590b3Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779a7b590b3Smrg for a_deplib in $deplibs; do 7780a7b590b3Smrg case $a_deplib in 7781a7b590b3Smrg -l*) 7782a7b590b3Smrg func_stripname -l '' "$a_deplib" 7783a7b590b3Smrg name=$func_stripname_result 7784a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785a7b590b3Smrg case " $predeps $postdeps " in 7786a7b590b3Smrg *" $a_deplib "*) 77873e51e026Smrg func_append newdeplibs " $a_deplib" 7788a7b590b3Smrg a_deplib="" 7789a7b590b3Smrg ;; 7790a7b590b3Smrg esac 7791a7b590b3Smrg fi 7792a7b590b3Smrg if test -n "$a_deplib" ; then 7793a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 77943e51e026Smrg if test -n "$file_magic_glob"; then 77953e51e026Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 77963e51e026Smrg else 77973e51e026Smrg libnameglob=$libname 77983e51e026Smrg fi 77993e51e026Smrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800a7b590b3Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78013e51e026Smrg if test "$want_nocaseglob" = yes; then 78023e51e026Smrg shopt -s nocaseglob 78033e51e026Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78043e51e026Smrg $nocaseglob 78053e51e026Smrg else 78063e51e026Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78073e51e026Smrg fi 7808a7b590b3Smrg for potent_lib in $potential_libs; do 7809a7b590b3Smrg # Follow soft links. 7810a7b590b3Smrg if ls -lLd "$potent_lib" 2>/dev/null | 7811a7b590b3Smrg $GREP " -> " >/dev/null; then 7812a7b590b3Smrg continue 7813a7b590b3Smrg fi 7814a7b590b3Smrg # The statement above tries to avoid entering an 7815a7b590b3Smrg # endless loop below, in case of cyclic links. 7816a7b590b3Smrg # We might still enter an endless loop, since a link 7817a7b590b3Smrg # loop can be closed while we follow links, 7818a7b590b3Smrg # but so what? 7819a7b590b3Smrg potlib="$potent_lib" 7820a7b590b3Smrg while test -h "$potlib" 2>/dev/null; do 7821a7b590b3Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822a7b590b3Smrg case $potliblink in 7823a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 78243e51e026Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825a7b590b3Smrg esac 7826a7b590b3Smrg done 7827a7b590b3Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828a7b590b3Smrg $SED -e 10q | 7829a7b590b3Smrg $EGREP "$file_magic_regex" > /dev/null; then 78303e51e026Smrg func_append newdeplibs " $a_deplib" 7831a7b590b3Smrg a_deplib="" 7832a7b590b3Smrg break 2 7833a7b590b3Smrg fi 7834a7b590b3Smrg done 7835a7b590b3Smrg done 7836a7b590b3Smrg fi 7837a7b590b3Smrg if test -n "$a_deplib" ; then 7838a7b590b3Smrg droppeddeps=yes 78393e51e026Smrg echo 7840a7b590b3Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78413e51e026Smrg echo "*** I have the capability to make that library automatically link in when" 78423e51e026Smrg echo "*** you link to this library. But I can only do this if you have a" 78433e51e026Smrg echo "*** shared version of the library, which you do not appear to have" 78443e51e026Smrg echo "*** because I did check the linker path looking for a file starting" 7845a7b590b3Smrg if test -z "$potlib" ; then 7846a7b590b3Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847a7b590b3Smrg else 7848a7b590b3Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7849a7b590b3Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 7850a7b590b3Smrg fi 7851a7b590b3Smrg fi 7852a7b590b3Smrg ;; 7853a7b590b3Smrg *) 7854a7b590b3Smrg # Add a -L argument. 78553e51e026Smrg func_append newdeplibs " $a_deplib" 7856a7b590b3Smrg ;; 7857a7b590b3Smrg esac 7858a7b590b3Smrg done # Gone through all deplibs. 7859a7b590b3Smrg ;; 7860a7b590b3Smrg match_pattern*) 7861a7b590b3Smrg set dummy $deplibs_check_method; shift 7862a7b590b3Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863a7b590b3Smrg for a_deplib in $deplibs; do 7864a7b590b3Smrg case $a_deplib in 7865a7b590b3Smrg -l*) 7866a7b590b3Smrg func_stripname -l '' "$a_deplib" 7867a7b590b3Smrg name=$func_stripname_result 7868a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869a7b590b3Smrg case " $predeps $postdeps " in 7870a7b590b3Smrg *" $a_deplib "*) 78713e51e026Smrg func_append newdeplibs " $a_deplib" 7872a7b590b3Smrg a_deplib="" 7873a7b590b3Smrg ;; 7874a7b590b3Smrg esac 7875a7b590b3Smrg fi 7876a7b590b3Smrg if test -n "$a_deplib" ; then 7877a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7878a7b590b3Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879a7b590b3Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880a7b590b3Smrg for potent_lib in $potential_libs; do 7881a7b590b3Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 78823e51e026Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883a7b590b3Smrg $EGREP "$match_pattern_regex" > /dev/null; then 78843e51e026Smrg func_append newdeplibs " $a_deplib" 7885a7b590b3Smrg a_deplib="" 7886a7b590b3Smrg break 2 7887a7b590b3Smrg fi 7888a7b590b3Smrg done 7889a7b590b3Smrg done 7890a7b590b3Smrg fi 7891a7b590b3Smrg if test -n "$a_deplib" ; then 7892a7b590b3Smrg droppeddeps=yes 78933e51e026Smrg echo 7894a7b590b3Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78953e51e026Smrg echo "*** I have the capability to make that library automatically link in when" 78963e51e026Smrg echo "*** you link to this library. But I can only do this if you have a" 78973e51e026Smrg echo "*** shared version of the library, which you do not appear to have" 78983e51e026Smrg echo "*** because I did check the linker path looking for a file starting" 7899a7b590b3Smrg if test -z "$potlib" ; then 7900a7b590b3Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901a7b590b3Smrg else 7902a7b590b3Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7903a7b590b3Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904a7b590b3Smrg fi 7905a7b590b3Smrg fi 7906a7b590b3Smrg ;; 7907a7b590b3Smrg *) 7908a7b590b3Smrg # Add a -L argument. 79093e51e026Smrg func_append newdeplibs " $a_deplib" 7910a7b590b3Smrg ;; 7911a7b590b3Smrg esac 7912a7b590b3Smrg done # Gone through all deplibs. 7913a7b590b3Smrg ;; 7914a7b590b3Smrg none | unknown | *) 7915a7b590b3Smrg newdeplibs="" 79163e51e026Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918a7b590b3Smrg for i in $predeps $postdeps ; do 7919a7b590b3Smrg # can't use Xsed below, because $i might contain '/' 79203e51e026Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921a7b590b3Smrg done 7922a7b590b3Smrg fi 79233e51e026Smrg case $tmp_deplibs in 79243e51e026Smrg *[!\ \ ]*) 79253e51e026Smrg echo 7926a7b590b3Smrg if test "X$deplibs_check_method" = "Xnone"; then 79273e51e026Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7928a7b590b3Smrg else 79293e51e026Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 7930a7b590b3Smrg fi 79313e51e026Smrg echo "*** All declared inter-library dependencies are being dropped." 7932a7b590b3Smrg droppeddeps=yes 79333e51e026Smrg ;; 79343e51e026Smrg esac 7935a7b590b3Smrg ;; 7936a7b590b3Smrg esac 7937a7b590b3Smrg versuffix=$versuffix_save 7938a7b590b3Smrg major=$major_save 7939a7b590b3Smrg release=$release_save 7940a7b590b3Smrg libname=$libname_save 7941a7b590b3Smrg name=$name_save 7942a7b590b3Smrg 7943a7b590b3Smrg case $host in 7944a7b590b3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7945a7b590b3Smrg # On Rhapsody replace the C library with the System framework 79463e51e026Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947a7b590b3Smrg ;; 7948a7b590b3Smrg esac 7949a7b590b3Smrg 7950a7b590b3Smrg if test "$droppeddeps" = yes; then 7951a7b590b3Smrg if test "$module" = yes; then 79523e51e026Smrg echo 79533e51e026Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7954a7b590b3Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 79553e51e026Smrg echo "*** a static module, that should work as long as the dlopening" 79563e51e026Smrg echo "*** application is linked with the -dlopen flag." 7957a7b590b3Smrg if test -z "$global_symbol_pipe"; then 79583e51e026Smrg echo 79593e51e026Smrg echo "*** However, this would only work if libtool was able to extract symbol" 79603e51e026Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 79613e51e026Smrg echo "*** not find such a program. So, this module is probably useless." 79623e51e026Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963a7b590b3Smrg fi 7964a7b590b3Smrg if test "$build_old_libs" = no; then 7965a7b590b3Smrg oldlibs="$output_objdir/$libname.$libext" 7966a7b590b3Smrg build_libtool_libs=module 7967a7b590b3Smrg build_old_libs=yes 7968a7b590b3Smrg else 7969a7b590b3Smrg build_libtool_libs=no 7970a7b590b3Smrg fi 7971a7b590b3Smrg else 79723e51e026Smrg echo "*** The inter-library dependencies that have been dropped here will be" 79733e51e026Smrg echo "*** automatically added whenever a program is linked with this library" 79743e51e026Smrg echo "*** or is declared to -dlopen it." 7975a7b590b3Smrg 7976a7b590b3Smrg if test "$allow_undefined" = no; then 79773e51e026Smrg echo 79783e51e026Smrg echo "*** Since this library must not contain undefined symbols," 79793e51e026Smrg echo "*** because either the platform does not support them or" 79803e51e026Smrg echo "*** it was explicitly requested with -no-undefined," 79813e51e026Smrg echo "*** libtool will only create a static version of it." 7982a7b590b3Smrg if test "$build_old_libs" = no; then 7983a7b590b3Smrg oldlibs="$output_objdir/$libname.$libext" 7984a7b590b3Smrg build_libtool_libs=module 7985a7b590b3Smrg build_old_libs=yes 7986a7b590b3Smrg else 7987a7b590b3Smrg build_libtool_libs=no 7988a7b590b3Smrg fi 7989a7b590b3Smrg fi 7990a7b590b3Smrg fi 7991a7b590b3Smrg fi 7992a7b590b3Smrg # Done checking deplibs! 7993a7b590b3Smrg deplibs=$newdeplibs 7994a7b590b3Smrg fi 7995a7b590b3Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996a7b590b3Smrg case $host in 7997a7b590b3Smrg *-*-darwin*) 79983e51e026Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 79993e51e026Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 80003e51e026Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001a7b590b3Smrg ;; 8002a7b590b3Smrg esac 8003a7b590b3Smrg 8004a7b590b3Smrg # move library search paths that coincide with paths to not yet 8005a7b590b3Smrg # installed libraries to the beginning of the library search list 8006a7b590b3Smrg new_libs= 8007a7b590b3Smrg for path in $notinst_path; do 8008a7b590b3Smrg case " $new_libs " in 8009a7b590b3Smrg *" -L$path/$objdir "*) ;; 8010a7b590b3Smrg *) 8011a7b590b3Smrg case " $deplibs " in 8012a7b590b3Smrg *" -L$path/$objdir "*) 80133e51e026Smrg func_append new_libs " -L$path/$objdir" ;; 8014a7b590b3Smrg esac 8015a7b590b3Smrg ;; 8016a7b590b3Smrg esac 8017a7b590b3Smrg done 8018a7b590b3Smrg for deplib in $deplibs; do 8019a7b590b3Smrg case $deplib in 8020a7b590b3Smrg -L*) 8021a7b590b3Smrg case " $new_libs " in 8022a7b590b3Smrg *" $deplib "*) ;; 80233e51e026Smrg *) func_append new_libs " $deplib" ;; 8024a7b590b3Smrg esac 8025a7b590b3Smrg ;; 80263e51e026Smrg *) func_append new_libs " $deplib" ;; 8027a7b590b3Smrg esac 8028a7b590b3Smrg done 8029a7b590b3Smrg deplibs="$new_libs" 8030a7b590b3Smrg 8031a7b590b3Smrg # All the library-specific variables (install_libdir is set above). 8032a7b590b3Smrg library_names= 8033a7b590b3Smrg old_library= 8034a7b590b3Smrg dlname= 8035a7b590b3Smrg 8036a7b590b3Smrg # Test again, we may have decided not to build it any more 8037a7b590b3Smrg if test "$build_libtool_libs" = yes; then 80383e51e026Smrg # Remove ${wl} instances when linking with ld. 80393e51e026Smrg # FIXME: should test the right _cmds variable. 80403e51e026Smrg case $archive_cmds in 80413e51e026Smrg *\$LD\ *) wl= ;; 80423e51e026Smrg esac 8043a7b590b3Smrg if test "$hardcode_into_libs" = yes; then 8044a7b590b3Smrg # Hardcode the library paths 8045a7b590b3Smrg hardcode_libdirs= 8046a7b590b3Smrg dep_rpath= 8047a7b590b3Smrg rpath="$finalize_rpath" 80483e51e026Smrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049a7b590b3Smrg for libdir in $rpath; do 8050a7b590b3Smrg if test -n "$hardcode_libdir_flag_spec"; then 8051a7b590b3Smrg if test -n "$hardcode_libdir_separator"; then 80523e51e026Smrg func_replace_sysroot "$libdir" 80533e51e026Smrg libdir=$func_replace_sysroot_result 8054a7b590b3Smrg if test -z "$hardcode_libdirs"; then 8055a7b590b3Smrg hardcode_libdirs="$libdir" 8056a7b590b3Smrg else 8057a7b590b3Smrg # Just accumulate the unique libdirs. 8058a7b590b3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059a7b590b3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060a7b590b3Smrg ;; 8061a7b590b3Smrg *) 80623e51e026Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063a7b590b3Smrg ;; 8064a7b590b3Smrg esac 8065a7b590b3Smrg fi 8066a7b590b3Smrg else 8067a7b590b3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 80683e51e026Smrg func_append dep_rpath " $flag" 8069a7b590b3Smrg fi 8070a7b590b3Smrg elif test -n "$runpath_var"; then 8071a7b590b3Smrg case "$perm_rpath " in 8072a7b590b3Smrg *" $libdir "*) ;; 80733e51e026Smrg *) func_append perm_rpath " $libdir" ;; 8074a7b590b3Smrg esac 8075a7b590b3Smrg fi 8076a7b590b3Smrg done 8077a7b590b3Smrg # Substitute the hardcoded libdirs into the rpath. 8078a7b590b3Smrg if test -n "$hardcode_libdir_separator" && 8079a7b590b3Smrg test -n "$hardcode_libdirs"; then 8080a7b590b3Smrg libdir="$hardcode_libdirs" 80813e51e026Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082a7b590b3Smrg fi 8083a7b590b3Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084a7b590b3Smrg # We should set the runpath_var. 8085a7b590b3Smrg rpath= 8086a7b590b3Smrg for dir in $perm_rpath; do 80873e51e026Smrg func_append rpath "$dir:" 8088a7b590b3Smrg done 8089a7b590b3Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090a7b590b3Smrg fi 8091a7b590b3Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092a7b590b3Smrg fi 8093943345d3Smrg 8094a7b590b3Smrg shlibpath="$finalize_shlibpath" 80953e51e026Smrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096a7b590b3Smrg if test -n "$shlibpath"; then 8097a7b590b3Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098a7b590b3Smrg fi 8099943345d3Smrg 8100a7b590b3Smrg # Get the real and link names of the library. 8101a7b590b3Smrg eval shared_ext=\"$shrext_cmds\" 8102a7b590b3Smrg eval library_names=\"$library_names_spec\" 8103a7b590b3Smrg set dummy $library_names 8104a7b590b3Smrg shift 8105a7b590b3Smrg realname="$1" 8106a7b590b3Smrg shift 8107943345d3Smrg 8108a7b590b3Smrg if test -n "$soname_spec"; then 8109a7b590b3Smrg eval soname=\"$soname_spec\" 8110a7b590b3Smrg else 8111a7b590b3Smrg soname="$realname" 8112a7b590b3Smrg fi 8113a7b590b3Smrg if test -z "$dlname"; then 8114a7b590b3Smrg dlname=$soname 8115a7b590b3Smrg fi 8116943345d3Smrg 8117a7b590b3Smrg lib="$output_objdir/$realname" 8118a7b590b3Smrg linknames= 8119a7b590b3Smrg for link 8120a7b590b3Smrg do 81213e51e026Smrg func_append linknames " $link" 8122a7b590b3Smrg done 8123943345d3Smrg 8124a7b590b3Smrg # Use standard objects if they are pic 81253e51e026Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 8127943345d3Smrg 8128a7b590b3Smrg delfiles= 8129a7b590b3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130a7b590b3Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131a7b590b3Smrg export_symbols="$output_objdir/$libname.uexp" 81323e51e026Smrg func_append delfiles " $export_symbols" 8133a7b590b3Smrg fi 8134943345d3Smrg 8135a7b590b3Smrg orig_export_symbols= 8136a7b590b3Smrg case $host_os in 8137a7b590b3Smrg cygwin* | mingw* | cegcc*) 8138a7b590b3Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139a7b590b3Smrg # exporting using user supplied symfile 8140a7b590b3Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141a7b590b3Smrg # and it's NOT already a .def file. Must figure out 8142a7b590b3Smrg # which of the given symbols are data symbols and tag 8143a7b590b3Smrg # them as such. So, trigger use of export_symbols_cmds. 8144a7b590b3Smrg # export_symbols gets reassigned inside the "prepare 8145a7b590b3Smrg # the list of exported symbols" if statement, so the 8146a7b590b3Smrg # include_expsyms logic still works. 8147a7b590b3Smrg orig_export_symbols="$export_symbols" 8148a7b590b3Smrg export_symbols= 8149a7b590b3Smrg always_export_symbols=yes 8150a7b590b3Smrg fi 8151a7b590b3Smrg fi 8152a7b590b3Smrg ;; 8153a7b590b3Smrg esac 8154943345d3Smrg 8155a7b590b3Smrg # Prepare the list of exported symbols 8156a7b590b3Smrg if test -z "$export_symbols"; then 8157a7b590b3Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158a7b590b3Smrg func_verbose "generating symbol list for \`$libname.la'" 8159a7b590b3Smrg export_symbols="$output_objdir/$libname.exp" 8160a7b590b3Smrg $opt_dry_run || $RM $export_symbols 8161a7b590b3Smrg cmds=$export_symbols_cmds 8162a7b590b3Smrg save_ifs="$IFS"; IFS='~' 81633e51e026Smrg for cmd1 in $cmds; do 8164a7b590b3Smrg IFS="$save_ifs" 81653e51e026Smrg # Take the normal branch if the nm_file_list_spec branch 81663e51e026Smrg # doesn't work or if tool conversion is not needed. 81673e51e026Smrg case $nm_file_list_spec~$to_tool_file_cmd in 81683e51e026Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 81693e51e026Smrg try_normal_branch=yes 81703e51e026Smrg eval cmd=\"$cmd1\" 81713e51e026Smrg func_len " $cmd" 81723e51e026Smrg len=$func_len_result 81733e51e026Smrg ;; 81743e51e026Smrg *) 81753e51e026Smrg try_normal_branch=no 81763e51e026Smrg ;; 81773e51e026Smrg esac 81783e51e026Smrg if test "$try_normal_branch" = yes \ 81793e51e026Smrg && { test "$len" -lt "$max_cmd_len" \ 81803e51e026Smrg || test "$max_cmd_len" -le -1; } 81813e51e026Smrg then 81823e51e026Smrg func_show_eval "$cmd" 'exit $?' 81833e51e026Smrg skipped_export=false 81843e51e026Smrg elif test -n "$nm_file_list_spec"; then 81853e51e026Smrg func_basename "$output" 81863e51e026Smrg output_la=$func_basename_result 81873e51e026Smrg save_libobjs=$libobjs 81883e51e026Smrg save_output=$output 81893e51e026Smrg output=${output_objdir}/${output_la}.nm 81903e51e026Smrg func_to_tool_file "$output" 81913e51e026Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 81923e51e026Smrg func_append delfiles " $output" 81933e51e026Smrg func_verbose "creating $NM input file list: $output" 81943e51e026Smrg for obj in $save_libobjs; do 81953e51e026Smrg func_to_tool_file "$obj" 81963e51e026Smrg $ECHO "$func_to_tool_file_result" 81973e51e026Smrg done > "$output" 81983e51e026Smrg eval cmd=\"$cmd1\" 8199a7b590b3Smrg func_show_eval "$cmd" 'exit $?' 82003e51e026Smrg output=$save_output 82013e51e026Smrg libobjs=$save_libobjs 8202a7b590b3Smrg skipped_export=false 8203a7b590b3Smrg else 8204a7b590b3Smrg # The command line is too long to execute in one step. 8205a7b590b3Smrg func_verbose "using reloadable object file for export list..." 8206a7b590b3Smrg skipped_export=: 8207a7b590b3Smrg # Break out early, otherwise skipped_export may be 8208a7b590b3Smrg # set to false by a later but shorter cmd. 8209a7b590b3Smrg break 8210a7b590b3Smrg fi 8211a7b590b3Smrg done 8212a7b590b3Smrg IFS="$save_ifs" 8213a7b590b3Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214a7b590b3Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215a7b590b3Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216a7b590b3Smrg fi 8217a7b590b3Smrg fi 8218943345d3Smrg fi 8219943345d3Smrg 8220a7b590b3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221a7b590b3Smrg tmp_export_symbols="$export_symbols" 8222a7b590b3Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 82233e51e026Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224a7b590b3Smrg fi 8225943345d3Smrg 8226a7b590b3Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227a7b590b3Smrg # The given exports_symbols file has to be filtered, so filter it. 8228a7b590b3Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229a7b590b3Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230a7b590b3Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8231a7b590b3Smrg # though. Also, the filter scales superlinearly with the number of 8232a7b590b3Smrg # global variables. join(1) would be nice here, but unfortunately 8233a7b590b3Smrg # isn't a blessed tool. 8234a7b590b3Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 82353e51e026Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236a7b590b3Smrg export_symbols=$output_objdir/$libname.def 8237a7b590b3Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238a7b590b3Smrg fi 8239943345d3Smrg 8240a7b590b3Smrg tmp_deplibs= 8241a7b590b3Smrg for test_deplib in $deplibs; do 8242a7b590b3Smrg case " $convenience " in 8243a7b590b3Smrg *" $test_deplib "*) ;; 8244a7b590b3Smrg *) 82453e51e026Smrg func_append tmp_deplibs " $test_deplib" 8246a7b590b3Smrg ;; 8247a7b590b3Smrg esac 8248a7b590b3Smrg done 8249a7b590b3Smrg deplibs="$tmp_deplibs" 8250943345d3Smrg 8251a7b590b3Smrg if test -n "$convenience"; then 8252a7b590b3Smrg if test -n "$whole_archive_flag_spec" && 8253a7b590b3Smrg test "$compiler_needs_object" = yes && 8254a7b590b3Smrg test -z "$libobjs"; then 8255a7b590b3Smrg # extract the archives, so we have objects to list. 8256a7b590b3Smrg # TODO: could optimize this to just extract one archive. 8257a7b590b3Smrg whole_archive_flag_spec= 8258a7b590b3Smrg fi 8259a7b590b3Smrg if test -n "$whole_archive_flag_spec"; then 8260a7b590b3Smrg save_libobjs=$libobjs 8261a7b590b3Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 8263a7b590b3Smrg else 8264a7b590b3Smrg gentop="$output_objdir/${outputname}x" 82653e51e026Smrg func_append generated " $gentop" 8266943345d3Smrg 8267a7b590b3Smrg func_extract_archives $gentop $convenience 82683e51e026Smrg func_append libobjs " $func_extract_archives_result" 8269a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 8270a7b590b3Smrg fi 8271943345d3Smrg fi 8272943345d3Smrg 8273a7b590b3Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274a7b590b3Smrg eval flag=\"$thread_safe_flag_spec\" 82753e51e026Smrg func_append linker_flags " $flag" 8276943345d3Smrg fi 8277943345d3Smrg 8278a7b590b3Smrg # Make a backup of the uninstalled library when relinking 82793e51e026Smrg if test "$opt_mode" = relink; then 8280a7b590b3Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281a7b590b3Smrg fi 8282943345d3Smrg 8283a7b590b3Smrg # Do each of the archive commands. 8284a7b590b3Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8285a7b590b3Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286a7b590b3Smrg eval test_cmds=\"$module_expsym_cmds\" 8287a7b590b3Smrg cmds=$module_expsym_cmds 8288a7b590b3Smrg else 8289a7b590b3Smrg eval test_cmds=\"$module_cmds\" 8290a7b590b3Smrg cmds=$module_cmds 8291a7b590b3Smrg fi 8292943345d3Smrg else 8293a7b590b3Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294a7b590b3Smrg eval test_cmds=\"$archive_expsym_cmds\" 8295a7b590b3Smrg cmds=$archive_expsym_cmds 8296a7b590b3Smrg else 8297a7b590b3Smrg eval test_cmds=\"$archive_cmds\" 8298a7b590b3Smrg cmds=$archive_cmds 8299a7b590b3Smrg fi 8300943345d3Smrg fi 8301943345d3Smrg 8302a7b590b3Smrg if test "X$skipped_export" != "X:" && 8303a7b590b3Smrg func_len " $test_cmds" && 8304a7b590b3Smrg len=$func_len_result && 8305a7b590b3Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306a7b590b3Smrg : 8307a7b590b3Smrg else 8308a7b590b3Smrg # The command line is too long to link in one step, link piecewise 8309a7b590b3Smrg # or, if using GNU ld and skipped_export is not :, use a linker 8310a7b590b3Smrg # script. 8311943345d3Smrg 8312a7b590b3Smrg # Save the value of $output and $libobjs because we want to 8313a7b590b3Smrg # use them later. If we have whole_archive_flag_spec, we 8314a7b590b3Smrg # want to use save_libobjs as it was before 8315a7b590b3Smrg # whole_archive_flag_spec was expanded, because we can't 8316a7b590b3Smrg # assume the linker understands whole_archive_flag_spec. 8317a7b590b3Smrg # This may have to be revisited, in case too many 8318a7b590b3Smrg # convenience libraries get linked in and end up exceeding 8319a7b590b3Smrg # the spec. 8320a7b590b3Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321a7b590b3Smrg save_libobjs=$libobjs 8322a7b590b3Smrg fi 8323a7b590b3Smrg save_output=$output 83243e51e026Smrg func_basename "$output" 83253e51e026Smrg output_la=$func_basename_result 8326943345d3Smrg 8327a7b590b3Smrg # Clear the reloadable object creation command queue and 8328a7b590b3Smrg # initialize k to one. 8329a7b590b3Smrg test_cmds= 8330a7b590b3Smrg concat_cmds= 8331a7b590b3Smrg objlist= 8332a7b590b3Smrg last_robj= 8333a7b590b3Smrg k=1 8334a7b590b3Smrg 8335a7b590b3Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336a7b590b3Smrg output=${output_objdir}/${output_la}.lnkscript 8337a7b590b3Smrg func_verbose "creating GNU ld script: $output" 83383e51e026Smrg echo 'INPUT (' > $output 8339a7b590b3Smrg for obj in $save_libobjs 8340943345d3Smrg do 83413e51e026Smrg func_to_tool_file "$obj" 83423e51e026Smrg $ECHO "$func_to_tool_file_result" >> $output 8343a7b590b3Smrg done 83443e51e026Smrg echo ')' >> $output 83453e51e026Smrg func_append delfiles " $output" 83463e51e026Smrg func_to_tool_file "$output" 83473e51e026Smrg output=$func_to_tool_file_result 8348a7b590b3Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349a7b590b3Smrg output=${output_objdir}/${output_la}.lnk 8350a7b590b3Smrg func_verbose "creating linker input file list: $output" 8351a7b590b3Smrg : > $output 8352a7b590b3Smrg set x $save_libobjs 8353a7b590b3Smrg shift 8354a7b590b3Smrg firstobj= 8355a7b590b3Smrg if test "$compiler_needs_object" = yes; then 8356a7b590b3Smrg firstobj="$1 " 8357a7b590b3Smrg shift 8358a7b590b3Smrg fi 8359a7b590b3Smrg for obj 8360a7b590b3Smrg do 83613e51e026Smrg func_to_tool_file "$obj" 83623e51e026Smrg $ECHO "$func_to_tool_file_result" >> $output 8363a7b590b3Smrg done 83643e51e026Smrg func_append delfiles " $output" 83653e51e026Smrg func_to_tool_file "$output" 83663e51e026Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367a7b590b3Smrg else 8368a7b590b3Smrg if test -n "$save_libobjs"; then 8369a7b590b3Smrg func_verbose "creating reloadable object files..." 8370a7b590b3Smrg output=$output_objdir/$output_la-${k}.$objext 8371a7b590b3Smrg eval test_cmds=\"$reload_cmds\" 8372a7b590b3Smrg func_len " $test_cmds" 8373a7b590b3Smrg len0=$func_len_result 8374a7b590b3Smrg len=$len0 8375a7b590b3Smrg 8376a7b590b3Smrg # Loop over the list of objects to be linked. 8377a7b590b3Smrg for obj in $save_libobjs 8378a7b590b3Smrg do 8379a7b590b3Smrg func_len " $obj" 8380a7b590b3Smrg func_arith $len + $func_len_result 8381a7b590b3Smrg len=$func_arith_result 8382a7b590b3Smrg if test "X$objlist" = X || 8383a7b590b3Smrg test "$len" -lt "$max_cmd_len"; then 8384a7b590b3Smrg func_append objlist " $obj" 8385a7b590b3Smrg else 8386a7b590b3Smrg # The command $test_cmds is almost too long, add a 8387a7b590b3Smrg # command to the queue. 8388a7b590b3Smrg if test "$k" -eq 1 ; then 8389a7b590b3Smrg # The first file doesn't have a previous command to add. 83903e51e026Smrg reload_objs=$objlist 83913e51e026Smrg eval concat_cmds=\"$reload_cmds\" 8392a7b590b3Smrg else 8393a7b590b3Smrg # All subsequent reloadable object files will link in 8394a7b590b3Smrg # the last one created. 83953e51e026Smrg reload_objs="$objlist $last_robj" 83963e51e026Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397a7b590b3Smrg fi 8398a7b590b3Smrg last_robj=$output_objdir/$output_la-${k}.$objext 8399a7b590b3Smrg func_arith $k + 1 8400a7b590b3Smrg k=$func_arith_result 8401a7b590b3Smrg output=$output_objdir/$output_la-${k}.$objext 84023e51e026Smrg objlist=" $obj" 8403a7b590b3Smrg func_len " $last_robj" 8404a7b590b3Smrg func_arith $len0 + $func_len_result 8405a7b590b3Smrg len=$func_arith_result 8406a7b590b3Smrg fi 8407a7b590b3Smrg done 8408a7b590b3Smrg # Handle the remaining objects by creating one last 8409a7b590b3Smrg # reloadable object file. All subsequent reloadable object 8410a7b590b3Smrg # files will link in the last one created. 8411a7b590b3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 84123e51e026Smrg reload_objs="$objlist $last_robj" 84133e51e026Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414a7b590b3Smrg if test -n "$last_robj"; then 8415a7b590b3Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416a7b590b3Smrg fi 84173e51e026Smrg func_append delfiles " $output" 8418943345d3Smrg 8419a7b590b3Smrg else 8420a7b590b3Smrg output= 8421a7b590b3Smrg fi 8422943345d3Smrg 8423a7b590b3Smrg if ${skipped_export-false}; then 8424a7b590b3Smrg func_verbose "generating symbol list for \`$libname.la'" 8425a7b590b3Smrg export_symbols="$output_objdir/$libname.exp" 8426a7b590b3Smrg $opt_dry_run || $RM $export_symbols 8427a7b590b3Smrg libobjs=$output 8428a7b590b3Smrg # Append the command to create the export file. 8429a7b590b3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430a7b590b3Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431a7b590b3Smrg if test -n "$last_robj"; then 8432a7b590b3Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433a7b590b3Smrg fi 8434943345d3Smrg fi 8435943345d3Smrg 8436a7b590b3Smrg test -n "$save_libobjs" && 8437a7b590b3Smrg func_verbose "creating a temporary reloadable object file: $output" 8438943345d3Smrg 8439a7b590b3Smrg # Loop through the commands generated above and execute them. 8440a7b590b3Smrg save_ifs="$IFS"; IFS='~' 8441a7b590b3Smrg for cmd in $concat_cmds; do 8442a7b590b3Smrg IFS="$save_ifs" 8443a7b590b3Smrg $opt_silent || { 8444a7b590b3Smrg func_quote_for_expand "$cmd" 8445a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 8446a7b590b3Smrg } 8447a7b590b3Smrg $opt_dry_run || eval "$cmd" || { 8448a7b590b3Smrg lt_exit=$? 8449a7b590b3Smrg 8450a7b590b3Smrg # Restore the uninstalled library and exit 84513e51e026Smrg if test "$opt_mode" = relink; then 8452a7b590b3Smrg ( cd "$output_objdir" && \ 8453a7b590b3Smrg $RM "${realname}T" && \ 8454a7b590b3Smrg $MV "${realname}U" "$realname" ) 8455a7b590b3Smrg fi 8456943345d3Smrg 8457a7b590b3Smrg exit $lt_exit 8458a7b590b3Smrg } 8459a7b590b3Smrg done 8460a7b590b3Smrg IFS="$save_ifs" 8461943345d3Smrg 8462a7b590b3Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463a7b590b3Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464a7b590b3Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8465943345d3Smrg fi 8466943345d3Smrg fi 8467943345d3Smrg 8468a7b590b3Smrg if ${skipped_export-false}; then 8469a7b590b3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470a7b590b3Smrg tmp_export_symbols="$export_symbols" 8471a7b590b3Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 84723e51e026Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473a7b590b3Smrg fi 8474943345d3Smrg 8475a7b590b3Smrg if test -n "$orig_export_symbols"; then 8476a7b590b3Smrg # The given exports_symbols file has to be filtered, so filter it. 8477a7b590b3Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478a7b590b3Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479a7b590b3Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8480a7b590b3Smrg # though. Also, the filter scales superlinearly with the number of 8481a7b590b3Smrg # global variables. join(1) would be nice here, but unfortunately 8482a7b590b3Smrg # isn't a blessed tool. 8483a7b590b3Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 84843e51e026Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485a7b590b3Smrg export_symbols=$output_objdir/$libname.def 8486a7b590b3Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487a7b590b3Smrg fi 8488a7b590b3Smrg fi 8489943345d3Smrg 8490a7b590b3Smrg libobjs=$output 8491a7b590b3Smrg # Restore the value of output. 8492a7b590b3Smrg output=$save_output 8493943345d3Smrg 8494a7b590b3Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495a7b590b3Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 8497a7b590b3Smrg fi 8498a7b590b3Smrg # Expand the library linking commands again to reset the 8499a7b590b3Smrg # value of $libobjs for piecewise linking. 8500943345d3Smrg 8501a7b590b3Smrg # Do each of the archive commands. 8502a7b590b3Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8503a7b590b3Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504a7b590b3Smrg cmds=$module_expsym_cmds 8505a7b590b3Smrg else 8506a7b590b3Smrg cmds=$module_cmds 8507943345d3Smrg fi 8508943345d3Smrg else 8509a7b590b3Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510a7b590b3Smrg cmds=$archive_expsym_cmds 8511a7b590b3Smrg else 8512a7b590b3Smrg cmds=$archive_cmds 8513a7b590b3Smrg fi 8514943345d3Smrg fi 8515a7b590b3Smrg fi 8516943345d3Smrg 8517a7b590b3Smrg if test -n "$delfiles"; then 8518a7b590b3Smrg # Append the command to remove temporary files to $cmds. 8519a7b590b3Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 8520a7b590b3Smrg fi 8521943345d3Smrg 8522a7b590b3Smrg # Add any objects from preloaded convenience libraries 8523a7b590b3Smrg if test -n "$dlprefiles"; then 8524a7b590b3Smrg gentop="$output_objdir/${outputname}x" 85253e51e026Smrg func_append generated " $gentop" 8526943345d3Smrg 8527a7b590b3Smrg func_extract_archives $gentop $dlprefiles 85283e51e026Smrg func_append libobjs " $func_extract_archives_result" 8529a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 8530a7b590b3Smrg fi 8531943345d3Smrg 8532a7b590b3Smrg save_ifs="$IFS"; IFS='~' 8533a7b590b3Smrg for cmd in $cmds; do 8534a7b590b3Smrg IFS="$save_ifs" 8535a7b590b3Smrg eval cmd=\"$cmd\" 8536a7b590b3Smrg $opt_silent || { 8537a7b590b3Smrg func_quote_for_expand "$cmd" 8538a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 8539a7b590b3Smrg } 8540a7b590b3Smrg $opt_dry_run || eval "$cmd" || { 8541a7b590b3Smrg lt_exit=$? 8542943345d3Smrg 8543a7b590b3Smrg # Restore the uninstalled library and exit 85443e51e026Smrg if test "$opt_mode" = relink; then 8545a7b590b3Smrg ( cd "$output_objdir" && \ 8546a7b590b3Smrg $RM "${realname}T" && \ 8547a7b590b3Smrg $MV "${realname}U" "$realname" ) 8548a7b590b3Smrg fi 8549943345d3Smrg 8550a7b590b3Smrg exit $lt_exit 8551a7b590b3Smrg } 8552a7b590b3Smrg done 8553a7b590b3Smrg IFS="$save_ifs" 8554943345d3Smrg 8555a7b590b3Smrg # Restore the uninstalled library and exit 85563e51e026Smrg if test "$opt_mode" = relink; then 8557a7b590b3Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558943345d3Smrg 8559a7b590b3Smrg if test -n "$convenience"; then 8560a7b590b3Smrg if test -z "$whole_archive_flag_spec"; then 8561a7b590b3Smrg func_show_eval '${RM}r "$gentop"' 8562a7b590b3Smrg fi 8563a7b590b3Smrg fi 8564943345d3Smrg 8565a7b590b3Smrg exit $EXIT_SUCCESS 8566a7b590b3Smrg fi 8567a7b590b3Smrg 8568a7b590b3Smrg # Create links to the real library. 8569a7b590b3Smrg for linkname in $linknames; do 8570a7b590b3Smrg if test "$realname" != "$linkname"; then 8571a7b590b3Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8572943345d3Smrg fi 8573943345d3Smrg done 8574943345d3Smrg 8575a7b590b3Smrg # If -module or -export-dynamic was specified, set the dlname. 8576a7b590b3Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 8577a7b590b3Smrg # On all known operating systems, these are identical. 8578a7b590b3Smrg dlname="$soname" 8579a7b590b3Smrg fi 8580a7b590b3Smrg fi 8581943345d3Smrg ;; 8582943345d3Smrg 8583a7b590b3Smrg obj) 8584a7b590b3Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585a7b590b3Smrg func_warning "\`-dlopen' is ignored for objects" 8586a7b590b3Smrg fi 8587943345d3Smrg 8588a7b590b3Smrg case " $deplibs" in 8589a7b590b3Smrg *\ -l* | *\ -L*) 8590a7b590b3Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 8591943345d3Smrg esac 8592943345d3Smrg 8593a7b590b3Smrg test -n "$rpath" && \ 8594a7b590b3Smrg func_warning "\`-rpath' is ignored for objects" 8595a7b590b3Smrg 8596a7b590b3Smrg test -n "$xrpath" && \ 8597a7b590b3Smrg func_warning "\`-R' is ignored for objects" 8598943345d3Smrg 8599a7b590b3Smrg test -n "$vinfo" && \ 8600a7b590b3Smrg func_warning "\`-version-info' is ignored for objects" 8601943345d3Smrg 8602a7b590b3Smrg test -n "$release" && \ 8603a7b590b3Smrg func_warning "\`-release' is ignored for objects" 8604a7b590b3Smrg 8605a7b590b3Smrg case $output in 8606a7b590b3Smrg *.lo) 8607a7b590b3Smrg test -n "$objs$old_deplibs" && \ 8608a7b590b3Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609a7b590b3Smrg 8610a7b590b3Smrg libobj=$output 8611a7b590b3Smrg func_lo2o "$libobj" 8612a7b590b3Smrg obj=$func_lo2o_result 8613943345d3Smrg ;; 8614943345d3Smrg *) 8615a7b590b3Smrg libobj= 8616a7b590b3Smrg obj="$output" 8617943345d3Smrg ;; 8618943345d3Smrg esac 8619943345d3Smrg 8620a7b590b3Smrg # Delete the old objects. 8621a7b590b3Smrg $opt_dry_run || $RM $obj $libobj 8622943345d3Smrg 8623a7b590b3Smrg # Objects from convenience libraries. This assumes 8624a7b590b3Smrg # single-version convenience libraries. Whenever we create 8625a7b590b3Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 8626a7b590b3Smrg # the extraction. 8627a7b590b3Smrg reload_conv_objs= 8628a7b590b3Smrg gentop= 8629a7b590b3Smrg # reload_cmds runs $LD directly, so let us get rid of 8630a7b590b3Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 8631a7b590b3Smrg # turning comma into space.. 8632a7b590b3Smrg wl= 8633943345d3Smrg 8634a7b590b3Smrg if test -n "$convenience"; then 8635a7b590b3Smrg if test -n "$whole_archive_flag_spec"; then 8636a7b590b3Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 86373e51e026Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638a7b590b3Smrg else 8639a7b590b3Smrg gentop="$output_objdir/${obj}x" 86403e51e026Smrg func_append generated " $gentop" 8641943345d3Smrg 8642a7b590b3Smrg func_extract_archives $gentop $convenience 8643a7b590b3Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644a7b590b3Smrg fi 8645943345d3Smrg fi 8646943345d3Smrg 86473e51e026Smrg # If we're not building shared, we need to use non_pic_objs 86483e51e026Smrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 86493e51e026Smrg 8650a7b590b3Smrg # Create the old-style object. 86513e51e026Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8652943345d3Smrg 8653a7b590b3Smrg output="$obj" 8654a7b590b3Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8655943345d3Smrg 8656a7b590b3Smrg # Exit if we aren't doing a library object file. 8657a7b590b3Smrg if test -z "$libobj"; then 8658a7b590b3Smrg if test -n "$gentop"; then 8659a7b590b3Smrg func_show_eval '${RM}r "$gentop"' 8660a7b590b3Smrg fi 8661a7b590b3Smrg 8662a7b590b3Smrg exit $EXIT_SUCCESS 8663943345d3Smrg fi 8664a7b590b3Smrg 8665a7b590b3Smrg if test "$build_libtool_libs" != yes; then 8666a7b590b3Smrg if test -n "$gentop"; then 8667a7b590b3Smrg func_show_eval '${RM}r "$gentop"' 8668a7b590b3Smrg fi 8669a7b590b3Smrg 8670a7b590b3Smrg # Create an invalid libtool object if no PIC, so that we don't 8671a7b590b3Smrg # accidentally link it into a program. 8672a7b590b3Smrg # $show "echo timestamp > $libobj" 8673a7b590b3Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674a7b590b3Smrg exit $EXIT_SUCCESS 8675a7b590b3Smrg fi 8676a7b590b3Smrg 8677a7b590b3Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8678a7b590b3Smrg # Only do commands if we really have different PIC objects. 8679a7b590b3Smrg reload_objs="$libobjs $reload_conv_objs" 8680a7b590b3Smrg output="$libobj" 8681a7b590b3Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8682a7b590b3Smrg fi 8683a7b590b3Smrg 8684a7b590b3Smrg if test -n "$gentop"; then 8685a7b590b3Smrg func_show_eval '${RM}r "$gentop"' 8686a7b590b3Smrg fi 8687a7b590b3Smrg 8688a7b590b3Smrg exit $EXIT_SUCCESS 8689943345d3Smrg ;; 8690943345d3Smrg 8691a7b590b3Smrg prog) 8692a7b590b3Smrg case $host in 8693a7b590b3Smrg *cygwin*) func_stripname '' '.exe' "$output" 8694a7b590b3Smrg output=$func_stripname_result.exe;; 8695a7b590b3Smrg esac 8696a7b590b3Smrg test -n "$vinfo" && \ 8697a7b590b3Smrg func_warning "\`-version-info' is ignored for programs" 8698943345d3Smrg 8699a7b590b3Smrg test -n "$release" && \ 8700a7b590b3Smrg func_warning "\`-release' is ignored for programs" 8701943345d3Smrg 8702a7b590b3Smrg test "$preload" = yes \ 8703a7b590b3Smrg && test "$dlopen_support" = unknown \ 8704a7b590b3Smrg && test "$dlopen_self" = unknown \ 8705a7b590b3Smrg && test "$dlopen_self_static" = unknown && \ 8706a7b590b3Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707a7b590b3Smrg 8708a7b590b3Smrg case $host in 8709a7b590b3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 8710a7b590b3Smrg # On Rhapsody replace the C library is the System framework 87113e51e026Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 87123e51e026Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8713943345d3Smrg ;; 8714a7b590b3Smrg esac 8715943345d3Smrg 8716a7b590b3Smrg case $host in 8717a7b590b3Smrg *-*-darwin*) 8718a7b590b3Smrg # Don't allow lazy linking, it breaks C++ global constructors 8719a7b590b3Smrg # But is supposedly fixed on 10.4 or later (yay!). 8720a7b590b3Smrg if test "$tagname" = CXX ; then 8721a7b590b3Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722a7b590b3Smrg 10.[0123]) 87233e51e026Smrg func_append compile_command " ${wl}-bind_at_load" 87243e51e026Smrg func_append finalize_command " ${wl}-bind_at_load" 8725a7b590b3Smrg ;; 8726a7b590b3Smrg esac 8727943345d3Smrg fi 8728a7b590b3Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 87293e51e026Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87303e51e026Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731a7b590b3Smrg ;; 8732a7b590b3Smrg esac 8733943345d3Smrg 8734943345d3Smrg 8735a7b590b3Smrg # move library search paths that coincide with paths to not yet 8736a7b590b3Smrg # installed libraries to the beginning of the library search list 8737a7b590b3Smrg new_libs= 8738a7b590b3Smrg for path in $notinst_path; do 8739a7b590b3Smrg case " $new_libs " in 8740a7b590b3Smrg *" -L$path/$objdir "*) ;; 8741a7b590b3Smrg *) 8742a7b590b3Smrg case " $compile_deplibs " in 8743a7b590b3Smrg *" -L$path/$objdir "*) 87443e51e026Smrg func_append new_libs " -L$path/$objdir" ;; 8745943345d3Smrg esac 8746a7b590b3Smrg ;; 8747a7b590b3Smrg esac 8748a7b590b3Smrg done 8749a7b590b3Smrg for deplib in $compile_deplibs; do 8750a7b590b3Smrg case $deplib in 8751a7b590b3Smrg -L*) 8752a7b590b3Smrg case " $new_libs " in 8753a7b590b3Smrg *" $deplib "*) ;; 87543e51e026Smrg *) func_append new_libs " $deplib" ;; 8755943345d3Smrg esac 8756a7b590b3Smrg ;; 87573e51e026Smrg *) func_append new_libs " $deplib" ;; 8758a7b590b3Smrg esac 8759a7b590b3Smrg done 8760a7b590b3Smrg compile_deplibs="$new_libs" 8761943345d3Smrg 8762943345d3Smrg 87633e51e026Smrg func_append compile_command " $compile_deplibs" 87643e51e026Smrg func_append finalize_command " $finalize_deplibs" 8765943345d3Smrg 8766a7b590b3Smrg if test -n "$rpath$xrpath"; then 8767a7b590b3Smrg # If the user specified any rpath flags, then add them. 8768a7b590b3Smrg for libdir in $rpath $xrpath; do 8769a7b590b3Smrg # This is the magic to use -rpath. 8770a7b590b3Smrg case "$finalize_rpath " in 8771a7b590b3Smrg *" $libdir "*) ;; 87723e51e026Smrg *) func_append finalize_rpath " $libdir" ;; 8773a7b590b3Smrg esac 8774a7b590b3Smrg done 8775a7b590b3Smrg fi 8776943345d3Smrg 8777a7b590b3Smrg # Now hardcode the library paths 8778a7b590b3Smrg rpath= 8779a7b590b3Smrg hardcode_libdirs= 8780a7b590b3Smrg for libdir in $compile_rpath $finalize_rpath; do 8781a7b590b3Smrg if test -n "$hardcode_libdir_flag_spec"; then 8782a7b590b3Smrg if test -n "$hardcode_libdir_separator"; then 8783a7b590b3Smrg if test -z "$hardcode_libdirs"; then 8784a7b590b3Smrg hardcode_libdirs="$libdir" 8785a7b590b3Smrg else 8786a7b590b3Smrg # Just accumulate the unique libdirs. 8787a7b590b3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788a7b590b3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789a7b590b3Smrg ;; 8790a7b590b3Smrg *) 87913e51e026Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792a7b590b3Smrg ;; 8793a7b590b3Smrg esac 8794a7b590b3Smrg fi 8795943345d3Smrg else 8796a7b590b3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 87973e51e026Smrg func_append rpath " $flag" 8798943345d3Smrg fi 8799a7b590b3Smrg elif test -n "$runpath_var"; then 8800a7b590b3Smrg case "$perm_rpath " in 8801a7b590b3Smrg *" $libdir "*) ;; 88023e51e026Smrg *) func_append perm_rpath " $libdir" ;; 8803a7b590b3Smrg esac 8804a7b590b3Smrg fi 8805a7b590b3Smrg case $host in 8806a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807a7b590b3Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808a7b590b3Smrg case :$dllsearchpath: in 8809a7b590b3Smrg *":$libdir:"*) ;; 8810a7b590b3Smrg ::) dllsearchpath=$libdir;; 88113e51e026Smrg *) func_append dllsearchpath ":$libdir";; 8812a7b590b3Smrg esac 8813a7b590b3Smrg case :$dllsearchpath: in 8814a7b590b3Smrg *":$testbindir:"*) ;; 8815a7b590b3Smrg ::) dllsearchpath=$testbindir;; 88163e51e026Smrg *) func_append dllsearchpath ":$testbindir";; 8817a7b590b3Smrg esac 8818a7b590b3Smrg ;; 8819a7b590b3Smrg esac 8820a7b590b3Smrg done 8821a7b590b3Smrg # Substitute the hardcoded libdirs into the rpath. 8822a7b590b3Smrg if test -n "$hardcode_libdir_separator" && 8823a7b590b3Smrg test -n "$hardcode_libdirs"; then 8824a7b590b3Smrg libdir="$hardcode_libdirs" 8825a7b590b3Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8826a7b590b3Smrg fi 8827a7b590b3Smrg compile_rpath="$rpath" 8828943345d3Smrg 8829a7b590b3Smrg rpath= 8830a7b590b3Smrg hardcode_libdirs= 8831a7b590b3Smrg for libdir in $finalize_rpath; do 8832a7b590b3Smrg if test -n "$hardcode_libdir_flag_spec"; then 8833a7b590b3Smrg if test -n "$hardcode_libdir_separator"; then 8834a7b590b3Smrg if test -z "$hardcode_libdirs"; then 8835a7b590b3Smrg hardcode_libdirs="$libdir" 8836a7b590b3Smrg else 8837a7b590b3Smrg # Just accumulate the unique libdirs. 8838a7b590b3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839a7b590b3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840a7b590b3Smrg ;; 8841a7b590b3Smrg *) 88423e51e026Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843a7b590b3Smrg ;; 8844a7b590b3Smrg esac 8845a7b590b3Smrg fi 8846943345d3Smrg else 8847a7b590b3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 88483e51e026Smrg func_append rpath " $flag" 8849943345d3Smrg fi 8850a7b590b3Smrg elif test -n "$runpath_var"; then 8851a7b590b3Smrg case "$finalize_perm_rpath " in 8852a7b590b3Smrg *" $libdir "*) ;; 88533e51e026Smrg *) func_append finalize_perm_rpath " $libdir" ;; 8854a7b590b3Smrg esac 8855943345d3Smrg fi 8856a7b590b3Smrg done 8857a7b590b3Smrg # Substitute the hardcoded libdirs into the rpath. 8858a7b590b3Smrg if test -n "$hardcode_libdir_separator" && 8859a7b590b3Smrg test -n "$hardcode_libdirs"; then 8860a7b590b3Smrg libdir="$hardcode_libdirs" 8861a7b590b3Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8862a7b590b3Smrg fi 8863a7b590b3Smrg finalize_rpath="$rpath" 8864943345d3Smrg 8865a7b590b3Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866a7b590b3Smrg # Transform all the library objects into standard objects. 88673e51e026Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 88683e51e026Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869a7b590b3Smrg fi 8870943345d3Smrg 8871a7b590b3Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8872943345d3Smrg 8873a7b590b3Smrg # template prelinking step 8874a7b590b3Smrg if test -n "$prelink_cmds"; then 8875a7b590b3Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 8876a7b590b3Smrg fi 8877943345d3Smrg 8878a7b590b3Smrg wrappers_required=yes 8879a7b590b3Smrg case $host in 88803e51e026Smrg *cegcc* | *mingw32ce*) 88813e51e026Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 88823e51e026Smrg wrappers_required=no 88833e51e026Smrg ;; 8884a7b590b3Smrg *cygwin* | *mingw* ) 8885a7b590b3Smrg if test "$build_libtool_libs" != yes; then 8886a7b590b3Smrg wrappers_required=no 8887a7b590b3Smrg fi 8888a7b590b3Smrg ;; 8889a7b590b3Smrg *) 8890a7b590b3Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891a7b590b3Smrg wrappers_required=no 8892a7b590b3Smrg fi 8893a7b590b3Smrg ;; 8894a7b590b3Smrg esac 8895a7b590b3Smrg if test "$wrappers_required" = no; then 8896a7b590b3Smrg # Replace the output file specification. 88973e51e026Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898a7b590b3Smrg link_command="$compile_command$compile_rpath" 8899943345d3Smrg 8900a7b590b3Smrg # We have no uninstalled library dependencies, so finalize right now. 8901a7b590b3Smrg exit_status=0 8902a7b590b3Smrg func_show_eval "$link_command" 'exit_status=$?' 8903943345d3Smrg 89043e51e026Smrg if test -n "$postlink_cmds"; then 89053e51e026Smrg func_to_tool_file "$output" 89063e51e026Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89073e51e026Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 89083e51e026Smrg fi 89093e51e026Smrg 8910a7b590b3Smrg # Delete the generated files. 8911a7b590b3Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8912a7b590b3Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913943345d3Smrg fi 8914943345d3Smrg 8915a7b590b3Smrg exit $exit_status 8916a7b590b3Smrg fi 8917943345d3Smrg 8918a7b590b3Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919a7b590b3Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920a7b590b3Smrg fi 8921a7b590b3Smrg if test -n "$finalize_shlibpath"; then 8922a7b590b3Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923a7b590b3Smrg fi 8924943345d3Smrg 8925a7b590b3Smrg compile_var= 8926a7b590b3Smrg finalize_var= 8927a7b590b3Smrg if test -n "$runpath_var"; then 8928a7b590b3Smrg if test -n "$perm_rpath"; then 8929a7b590b3Smrg # We should set the runpath_var. 8930a7b590b3Smrg rpath= 8931a7b590b3Smrg for dir in $perm_rpath; do 89323e51e026Smrg func_append rpath "$dir:" 8933a7b590b3Smrg done 8934a7b590b3Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8935943345d3Smrg fi 8936a7b590b3Smrg if test -n "$finalize_perm_rpath"; then 8937a7b590b3Smrg # We should set the runpath_var. 8938a7b590b3Smrg rpath= 8939a7b590b3Smrg for dir in $finalize_perm_rpath; do 89403e51e026Smrg func_append rpath "$dir:" 8941a7b590b3Smrg done 8942a7b590b3Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943943345d3Smrg fi 8944a7b590b3Smrg fi 8945943345d3Smrg 8946a7b590b3Smrg if test "$no_install" = yes; then 8947a7b590b3Smrg # We don't need to create a wrapper script. 8948a7b590b3Smrg link_command="$compile_var$compile_command$compile_rpath" 8949a7b590b3Smrg # Replace the output file specification. 89503e51e026Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951a7b590b3Smrg # Delete the old output file. 8952a7b590b3Smrg $opt_dry_run || $RM $output 8953a7b590b3Smrg # Link the executable and exit 8954a7b590b3Smrg func_show_eval "$link_command" 'exit $?' 89553e51e026Smrg 89563e51e026Smrg if test -n "$postlink_cmds"; then 89573e51e026Smrg func_to_tool_file "$output" 89583e51e026Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89593e51e026Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 89603e51e026Smrg fi 89613e51e026Smrg 8962943345d3Smrg exit $EXIT_SUCCESS 8963a7b590b3Smrg fi 8964943345d3Smrg 8965a7b590b3Smrg if test "$hardcode_action" = relink; then 8966a7b590b3Smrg # Fast installation is not supported 8967a7b590b3Smrg link_command="$compile_var$compile_command$compile_rpath" 8968a7b590b3Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8969a7b590b3Smrg 8970a7b590b3Smrg func_warning "this platform does not like uninstalled shared libraries" 8971a7b590b3Smrg func_warning "\`$output' will be relinked during installation" 8972a7b590b3Smrg else 8973a7b590b3Smrg if test "$fast_install" != no; then 8974a7b590b3Smrg link_command="$finalize_var$compile_command$finalize_rpath" 8975a7b590b3Smrg if test "$fast_install" = yes; then 89763e51e026Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977a7b590b3Smrg else 8978a7b590b3Smrg # fast_install is set to needless 8979a7b590b3Smrg relink_command= 8980a7b590b3Smrg fi 8981943345d3Smrg else 8982a7b590b3Smrg link_command="$compile_var$compile_command$compile_rpath" 8983a7b590b3Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8984943345d3Smrg fi 8985a7b590b3Smrg fi 8986943345d3Smrg 8987a7b590b3Smrg # Replace the output file specification. 89883e51e026Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8989943345d3Smrg 8990a7b590b3Smrg # Delete the old output files. 8991a7b590b3Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8992943345d3Smrg 8993a7b590b3Smrg func_show_eval "$link_command" 'exit $?' 8994943345d3Smrg 89953e51e026Smrg if test -n "$postlink_cmds"; then 89963e51e026Smrg func_to_tool_file "$output_objdir/$outputname" 89973e51e026Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89983e51e026Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 89993e51e026Smrg fi 90003e51e026Smrg 9001a7b590b3Smrg # Now create the wrapper script. 9002a7b590b3Smrg func_verbose "creating $output" 9003943345d3Smrg 9004a7b590b3Smrg # Quote the relink command for shipping. 9005a7b590b3Smrg if test -n "$relink_command"; then 9006a7b590b3Smrg # Preserve any variables that may affect compiler behavior 9007a7b590b3Smrg for var in $variables_saved_for_relink; do 9008a7b590b3Smrg if eval test -z \"\${$var+set}\"; then 9009a7b590b3Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010a7b590b3Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9011a7b590b3Smrg relink_command="$var=; export $var; $relink_command" 9012943345d3Smrg else 9013a7b590b3Smrg func_quote_for_eval "$var_value" 9014a7b590b3Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015943345d3Smrg fi 9016a7b590b3Smrg done 9017a7b590b3Smrg relink_command="(cd `pwd`; $relink_command)" 90183e51e026Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019a7b590b3Smrg fi 9020a7b590b3Smrg 9021a7b590b3Smrg # Only actually do things if not in dry run mode. 9022a7b590b3Smrg $opt_dry_run || { 9023a7b590b3Smrg # win32 will think the script is a binary if it has 9024a7b590b3Smrg # a .exe suffix, so we strip it off here. 9025a7b590b3Smrg case $output in 9026a7b590b3Smrg *.exe) func_stripname '' '.exe' "$output" 9027a7b590b3Smrg output=$func_stripname_result ;; 9028a7b590b3Smrg esac 9029a7b590b3Smrg # test for cygwin because mv fails w/o .exe extensions 9030a7b590b3Smrg case $host in 9031a7b590b3Smrg *cygwin*) 9032a7b590b3Smrg exeext=.exe 9033a7b590b3Smrg func_stripname '' '.exe' "$outputname" 9034a7b590b3Smrg outputname=$func_stripname_result ;; 9035a7b590b3Smrg *) exeext= ;; 9036943345d3Smrg esac 9037a7b590b3Smrg case $host in 9038a7b590b3Smrg *cygwin* | *mingw* ) 9039a7b590b3Smrg func_dirname_and_basename "$output" "" "." 9040a7b590b3Smrg output_name=$func_basename_result 9041a7b590b3Smrg output_path=$func_dirname_result 9042a7b590b3Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043a7b590b3Smrg cwrapper="$output_path/$output_name.exe" 9044a7b590b3Smrg $RM $cwrappersource $cwrapper 9045a7b590b3Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046a7b590b3Smrg 9047a7b590b3Smrg func_emit_cwrapperexe_src > $cwrappersource 9048a7b590b3Smrg 9049a7b590b3Smrg # The wrapper executable is built using the $host compiler, 9050a7b590b3Smrg # because it contains $host paths and files. If cross- 9051a7b590b3Smrg # compiling, it, like the target executable, must be 9052a7b590b3Smrg # executed on the $host or under an emulation environment. 9053a7b590b3Smrg $opt_dry_run || { 9054a7b590b3Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055a7b590b3Smrg $STRIP $cwrapper 9056a7b590b3Smrg } 9057943345d3Smrg 9058a7b590b3Smrg # Now, create the wrapper script for func_source use: 9059a7b590b3Smrg func_ltwrapper_scriptname $cwrapper 9060a7b590b3Smrg $RM $func_ltwrapper_scriptname_result 9061a7b590b3Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062a7b590b3Smrg $opt_dry_run || { 9063a7b590b3Smrg # note: this script will not be executed, so do not chmod. 9064a7b590b3Smrg if test "x$build" = "x$host" ; then 9065a7b590b3Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066a7b590b3Smrg else 9067a7b590b3Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068a7b590b3Smrg fi 9069a7b590b3Smrg } 9070a7b590b3Smrg ;; 9071a7b590b3Smrg * ) 9072a7b590b3Smrg $RM $output 9073a7b590b3Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9074943345d3Smrg 9075a7b590b3Smrg func_emit_wrapper no > $output 9076a7b590b3Smrg chmod +x $output 9077a7b590b3Smrg ;; 9078a7b590b3Smrg esac 9079a7b590b3Smrg } 9080a7b590b3Smrg exit $EXIT_SUCCESS 9081a7b590b3Smrg ;; 9082a7b590b3Smrg esac 9083943345d3Smrg 9084a7b590b3Smrg # See if we need to build an old-fashioned archive. 9085a7b590b3Smrg for oldlib in $oldlibs; do 9086943345d3Smrg 9087a7b590b3Smrg if test "$build_libtool_libs" = convenience; then 9088a7b590b3Smrg oldobjs="$libobjs_save $symfileobj" 9089a7b590b3Smrg addlibs="$convenience" 9090a7b590b3Smrg build_libtool_libs=no 9091a7b590b3Smrg else 9092a7b590b3Smrg if test "$build_libtool_libs" = module; then 9093a7b590b3Smrg oldobjs="$libobjs_save" 9094a7b590b3Smrg build_libtool_libs=no 9095a7b590b3Smrg else 9096a7b590b3Smrg oldobjs="$old_deplibs $non_pic_objects" 9097a7b590b3Smrg if test "$preload" = yes && test -f "$symfileobj"; then 90983e51e026Smrg func_append oldobjs " $symfileobj" 9099a7b590b3Smrg fi 9100a7b590b3Smrg fi 9101a7b590b3Smrg addlibs="$old_convenience" 9102943345d3Smrg fi 9103943345d3Smrg 9104a7b590b3Smrg if test -n "$addlibs"; then 9105a7b590b3Smrg gentop="$output_objdir/${outputname}x" 91063e51e026Smrg func_append generated " $gentop" 9107943345d3Smrg 9108a7b590b3Smrg func_extract_archives $gentop $addlibs 91093e51e026Smrg func_append oldobjs " $func_extract_archives_result" 9110a7b590b3Smrg fi 9111943345d3Smrg 9112a7b590b3Smrg # Do each command in the archive commands. 9113a7b590b3Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114a7b590b3Smrg cmds=$old_archive_from_new_cmds 9115a7b590b3Smrg else 9116943345d3Smrg 9117a7b590b3Smrg # Add any objects from preloaded convenience libraries 9118a7b590b3Smrg if test -n "$dlprefiles"; then 9119a7b590b3Smrg gentop="$output_objdir/${outputname}x" 91203e51e026Smrg func_append generated " $gentop" 9121943345d3Smrg 9122a7b590b3Smrg func_extract_archives $gentop $dlprefiles 91233e51e026Smrg func_append oldobjs " $func_extract_archives_result" 9124a7b590b3Smrg fi 9125943345d3Smrg 9126a7b590b3Smrg # POSIX demands no paths to be encoded in archives. We have 9127a7b590b3Smrg # to avoid creating archives with duplicate basenames if we 9128a7b590b3Smrg # might have to extract them afterwards, e.g., when creating a 9129a7b590b3Smrg # static archive out of a convenience library, or when linking 9130a7b590b3Smrg # the entirety of a libtool archive into another (currently 9131a7b590b3Smrg # not supported by libtool). 9132a7b590b3Smrg if (for obj in $oldobjs 9133a7b590b3Smrg do 9134a7b590b3Smrg func_basename "$obj" 9135a7b590b3Smrg $ECHO "$func_basename_result" 9136a7b590b3Smrg done | sort | sort -uc >/dev/null 2>&1); then 9137a7b590b3Smrg : 9138a7b590b3Smrg else 91393e51e026Smrg echo "copying selected object files to avoid basename conflicts..." 9140a7b590b3Smrg gentop="$output_objdir/${outputname}x" 91413e51e026Smrg func_append generated " $gentop" 9142a7b590b3Smrg func_mkdir_p "$gentop" 9143a7b590b3Smrg save_oldobjs=$oldobjs 9144a7b590b3Smrg oldobjs= 9145a7b590b3Smrg counter=1 9146a7b590b3Smrg for obj in $save_oldobjs 9147a7b590b3Smrg do 9148a7b590b3Smrg func_basename "$obj" 9149a7b590b3Smrg objbase="$func_basename_result" 9150a7b590b3Smrg case " $oldobjs " in 9151a7b590b3Smrg " ") oldobjs=$obj ;; 9152a7b590b3Smrg *[\ /]"$objbase "*) 9153a7b590b3Smrg while :; do 9154a7b590b3Smrg # Make sure we don't pick an alternate name that also 9155a7b590b3Smrg # overlaps. 9156a7b590b3Smrg newobj=lt$counter-$objbase 9157a7b590b3Smrg func_arith $counter + 1 9158a7b590b3Smrg counter=$func_arith_result 9159a7b590b3Smrg case " $oldobjs " in 9160a7b590b3Smrg *[\ /]"$newobj "*) ;; 9161a7b590b3Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162a7b590b3Smrg esac 9163a7b590b3Smrg done 9164a7b590b3Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 91653e51e026Smrg func_append oldobjs " $gentop/$newobj" 9166a7b590b3Smrg ;; 91673e51e026Smrg *) func_append oldobjs " $obj" ;; 9168a7b590b3Smrg esac 9169943345d3Smrg done 9170943345d3Smrg fi 91713e51e026Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 91723e51e026Smrg tool_oldlib=$func_to_tool_file_result 9173a7b590b3Smrg eval cmds=\"$old_archive_cmds\" 9174943345d3Smrg 9175a7b590b3Smrg func_len " $cmds" 9176a7b590b3Smrg len=$func_len_result 9177a7b590b3Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178a7b590b3Smrg cmds=$old_archive_cmds 91793e51e026Smrg elif test -n "$archiver_list_spec"; then 91803e51e026Smrg func_verbose "using command file archive linking..." 91813e51e026Smrg for obj in $oldobjs 91823e51e026Smrg do 91833e51e026Smrg func_to_tool_file "$obj" 91843e51e026Smrg $ECHO "$func_to_tool_file_result" 91853e51e026Smrg done > $output_objdir/$libname.libcmd 91863e51e026Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 91873e51e026Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 91883e51e026Smrg cmds=$old_archive_cmds 9189a7b590b3Smrg else 9190a7b590b3Smrg # the command line is too long to link in one step, link in parts 9191a7b590b3Smrg func_verbose "using piecewise archive linking..." 9192a7b590b3Smrg save_RANLIB=$RANLIB 9193a7b590b3Smrg RANLIB=: 9194a7b590b3Smrg objlist= 9195a7b590b3Smrg concat_cmds= 9196a7b590b3Smrg save_oldobjs=$oldobjs 9197a7b590b3Smrg oldobjs= 9198a7b590b3Smrg # Is there a better way of finding the last object in the list? 9199a7b590b3Smrg for obj in $save_oldobjs 9200a7b590b3Smrg do 9201a7b590b3Smrg last_oldobj=$obj 9202a7b590b3Smrg done 9203a7b590b3Smrg eval test_cmds=\"$old_archive_cmds\" 9204a7b590b3Smrg func_len " $test_cmds" 9205a7b590b3Smrg len0=$func_len_result 9206a7b590b3Smrg len=$len0 9207a7b590b3Smrg for obj in $save_oldobjs 9208a7b590b3Smrg do 9209a7b590b3Smrg func_len " $obj" 9210a7b590b3Smrg func_arith $len + $func_len_result 9211a7b590b3Smrg len=$func_arith_result 9212a7b590b3Smrg func_append objlist " $obj" 9213a7b590b3Smrg if test "$len" -lt "$max_cmd_len"; then 9214a7b590b3Smrg : 9215a7b590b3Smrg else 9216a7b590b3Smrg # the above command should be used before it gets too long 9217a7b590b3Smrg oldobjs=$objlist 9218a7b590b3Smrg if test "$obj" = "$last_oldobj" ; then 9219a7b590b3Smrg RANLIB=$save_RANLIB 9220a7b590b3Smrg fi 9221a7b590b3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222a7b590b3Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223a7b590b3Smrg objlist= 9224a7b590b3Smrg len=$len0 9225a7b590b3Smrg fi 9226a7b590b3Smrg done 9227a7b590b3Smrg RANLIB=$save_RANLIB 9228a7b590b3Smrg oldobjs=$objlist 9229a7b590b3Smrg if test "X$oldobjs" = "X" ; then 9230a7b590b3Smrg eval cmds=\"\$concat_cmds\" 9231a7b590b3Smrg else 9232a7b590b3Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233a7b590b3Smrg fi 9234a7b590b3Smrg fi 9235a7b590b3Smrg fi 9236a7b590b3Smrg func_execute_cmds "$cmds" 'exit $?' 9237943345d3Smrg done 9238943345d3Smrg 9239a7b590b3Smrg test -n "$generated" && \ 9240a7b590b3Smrg func_show_eval "${RM}r$generated" 9241943345d3Smrg 9242a7b590b3Smrg # Now create the libtool archive. 9243a7b590b3Smrg case $output in 9244a7b590b3Smrg *.la) 9245a7b590b3Smrg old_library= 9246a7b590b3Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9247a7b590b3Smrg func_verbose "creating $output" 9248943345d3Smrg 9249a7b590b3Smrg # Preserve any variables that may affect compiler behavior 9250a7b590b3Smrg for var in $variables_saved_for_relink; do 9251a7b590b3Smrg if eval test -z \"\${$var+set}\"; then 9252a7b590b3Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253a7b590b3Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9254a7b590b3Smrg relink_command="$var=; export $var; $relink_command" 9255943345d3Smrg else 9256a7b590b3Smrg func_quote_for_eval "$var_value" 9257a7b590b3Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9258943345d3Smrg fi 9259a7b590b3Smrg done 9260a7b590b3Smrg # Quote the link command for shipping. 9261a7b590b3Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 92623e51e026Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263a7b590b3Smrg if test "$hardcode_automatic" = yes ; then 9264a7b590b3Smrg relink_command= 9265a7b590b3Smrg fi 9266943345d3Smrg 9267a7b590b3Smrg # Only create the output if not a dry run. 9268a7b590b3Smrg $opt_dry_run || { 9269a7b590b3Smrg for installed in no yes; do 9270a7b590b3Smrg if test "$installed" = yes; then 9271a7b590b3Smrg if test -z "$install_libdir"; then 9272a7b590b3Smrg break 9273a7b590b3Smrg fi 9274a7b590b3Smrg output="$output_objdir/$outputname"i 9275a7b590b3Smrg # Replace all uninstalled libtool libraries with the installed ones 9276a7b590b3Smrg newdependency_libs= 9277a7b590b3Smrg for deplib in $dependency_libs; do 9278a7b590b3Smrg case $deplib in 9279a7b590b3Smrg *.la) 9280a7b590b3Smrg func_basename "$deplib" 9281a7b590b3Smrg name="$func_basename_result" 92823e51e026Smrg func_resolve_sysroot "$deplib" 92833e51e026Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284a7b590b3Smrg test -z "$libdir" && \ 9285a7b590b3Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 92863e51e026Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 92873e51e026Smrg ;; 92883e51e026Smrg -L*) 92893e51e026Smrg func_stripname -L '' "$deplib" 92903e51e026Smrg func_replace_sysroot "$func_stripname_result" 92913e51e026Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9292a7b590b3Smrg ;; 92933e51e026Smrg -R*) 92943e51e026Smrg func_stripname -R '' "$deplib" 92953e51e026Smrg func_replace_sysroot "$func_stripname_result" 92963e51e026Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 92973e51e026Smrg ;; 92983e51e026Smrg *) func_append newdependency_libs " $deplib" ;; 9299a7b590b3Smrg esac 9300a7b590b3Smrg done 9301a7b590b3Smrg dependency_libs="$newdependency_libs" 9302a7b590b3Smrg newdlfiles= 9303a7b590b3Smrg 9304a7b590b3Smrg for lib in $dlfiles; do 9305a7b590b3Smrg case $lib in 9306a7b590b3Smrg *.la) 9307a7b590b3Smrg func_basename "$lib" 9308a7b590b3Smrg name="$func_basename_result" 9309a7b590b3Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310a7b590b3Smrg test -z "$libdir" && \ 9311a7b590b3Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 93123e51e026Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313a7b590b3Smrg ;; 93143e51e026Smrg *) func_append newdlfiles " $lib" ;; 9315a7b590b3Smrg esac 9316a7b590b3Smrg done 9317a7b590b3Smrg dlfiles="$newdlfiles" 9318a7b590b3Smrg newdlprefiles= 9319a7b590b3Smrg for lib in $dlprefiles; do 9320a7b590b3Smrg case $lib in 9321a7b590b3Smrg *.la) 9322a7b590b3Smrg # Only pass preopened files to the pseudo-archive (for 9323a7b590b3Smrg # eventual linking with the app. that links it) if we 9324a7b590b3Smrg # didn't already link the preopened objects directly into 9325a7b590b3Smrg # the library: 9326a7b590b3Smrg func_basename "$lib" 9327a7b590b3Smrg name="$func_basename_result" 9328a7b590b3Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329a7b590b3Smrg test -z "$libdir" && \ 9330a7b590b3Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 93313e51e026Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332a7b590b3Smrg ;; 9333a7b590b3Smrg esac 9334a7b590b3Smrg done 9335a7b590b3Smrg dlprefiles="$newdlprefiles" 9336a7b590b3Smrg else 9337a7b590b3Smrg newdlfiles= 9338a7b590b3Smrg for lib in $dlfiles; do 9339a7b590b3Smrg case $lib in 9340a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341a7b590b3Smrg *) abs=`pwd`"/$lib" ;; 9342a7b590b3Smrg esac 93433e51e026Smrg func_append newdlfiles " $abs" 9344a7b590b3Smrg done 9345a7b590b3Smrg dlfiles="$newdlfiles" 9346a7b590b3Smrg newdlprefiles= 9347a7b590b3Smrg for lib in $dlprefiles; do 9348a7b590b3Smrg case $lib in 9349a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350a7b590b3Smrg *) abs=`pwd`"/$lib" ;; 9351a7b590b3Smrg esac 93523e51e026Smrg func_append newdlprefiles " $abs" 9353a7b590b3Smrg done 9354a7b590b3Smrg dlprefiles="$newdlprefiles" 9355a7b590b3Smrg fi 9356a7b590b3Smrg $RM $output 9357a7b590b3Smrg # place dlname in correct position for cygwin 93583e51e026Smrg # In fact, it would be nice if we could use this code for all target 93593e51e026Smrg # systems that can't hard-code library paths into their executables 93603e51e026Smrg # and that have no shared library path variable independent of PATH, 93613e51e026Smrg # but it turns out we can't easily determine that from inspecting 93623e51e026Smrg # libtool variables, so we have to hard-code the OSs to which it 93633e51e026Smrg # applies here; at the moment, that means platforms that use the PE 93643e51e026Smrg # object format with DLL files. See the long comment at the top of 93653e51e026Smrg # tests/bindir.at for full details. 9366a7b590b3Smrg tdlname=$dlname 9367a7b590b3Smrg case $host,$output,$installed,$module,$dlname in 93683e51e026Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 93693e51e026Smrg # If a -bindir argument was supplied, place the dll there. 93703e51e026Smrg if test "x$bindir" != x ; 93713e51e026Smrg then 93723e51e026Smrg func_relative_path "$install_libdir" "$bindir" 93733e51e026Smrg tdlname=$func_relative_path_result$dlname 93743e51e026Smrg else 93753e51e026Smrg # Otherwise fall back on heuristic. 93763e51e026Smrg tdlname=../bin/$dlname 93773e51e026Smrg fi 93783e51e026Smrg ;; 9379a7b590b3Smrg esac 9380a7b590b3Smrg $ECHO > $output "\ 9381a7b590b3Smrg# $outputname - a libtool library file 9382a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383a7b590b3Smrg# 9384a7b590b3Smrg# Please DO NOT delete this file! 9385a7b590b3Smrg# It is necessary for linking the library. 9386943345d3Smrg 9387a7b590b3Smrg# The name that we can dlopen(3). 9388a7b590b3Smrgdlname='$tdlname' 9389943345d3Smrg 9390a7b590b3Smrg# Names of this library. 9391a7b590b3Smrglibrary_names='$library_names' 9392943345d3Smrg 9393a7b590b3Smrg# The name of the static archive. 9394a7b590b3Smrgold_library='$old_library' 9395943345d3Smrg 9396a7b590b3Smrg# Linker flags that can not go in dependency_libs. 9397a7b590b3Smrginherited_linker_flags='$new_inherited_linker_flags' 9398943345d3Smrg 9399a7b590b3Smrg# Libraries that this one depends upon. 9400a7b590b3Smrgdependency_libs='$dependency_libs' 9401943345d3Smrg 9402a7b590b3Smrg# Names of additional weak libraries provided by this library 9403a7b590b3Smrgweak_library_names='$weak_libs' 9404943345d3Smrg 9405a7b590b3Smrg# Version information for $libname. 9406a7b590b3Smrgcurrent=$current 9407a7b590b3Smrgage=$age 9408a7b590b3Smrgrevision=$revision 9409943345d3Smrg 9410a7b590b3Smrg# Is this an already installed library? 9411a7b590b3Smrginstalled=$installed 9412943345d3Smrg 9413a7b590b3Smrg# Should we warn about portability when linking against -modules? 9414a7b590b3Smrgshouldnotlink=$module 9415943345d3Smrg 9416a7b590b3Smrg# Files to dlopen/dlpreopen 9417a7b590b3Smrgdlopen='$dlfiles' 9418a7b590b3Smrgdlpreopen='$dlprefiles' 9419943345d3Smrg 9420a7b590b3Smrg# Directory that this library needs to be installed in: 9421a7b590b3Smrglibdir='$install_libdir'" 9422a7b590b3Smrg if test "$installed" = no && test "$need_relink" = yes; then 9423a7b590b3Smrg $ECHO >> $output "\ 9424a7b590b3Smrgrelink_command=\"$relink_command\"" 9425a7b590b3Smrg fi 9426a7b590b3Smrg done 9427a7b590b3Smrg } 9428943345d3Smrg 9429a7b590b3Smrg # Do a symbolic link so that the libtool archive can be found in 9430a7b590b3Smrg # LD_LIBRARY_PATH before the program is installed. 9431a7b590b3Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432a7b590b3Smrg ;; 9433a7b590b3Smrg esac 9434a7b590b3Smrg exit $EXIT_SUCCESS 9435a7b590b3Smrg} 9436943345d3Smrg 94373e51e026Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438a7b590b3Smrg func_mode_link ${1+"$@"} 9439f67b85aaSmrg 9440943345d3Smrg 9441a7b590b3Smrg# func_mode_uninstall arg... 9442a7b590b3Smrgfunc_mode_uninstall () 9443a7b590b3Smrg{ 9444a7b590b3Smrg $opt_debug 9445a7b590b3Smrg RM="$nonopt" 9446943345d3Smrg files= 9447943345d3Smrg rmforce= 9448943345d3Smrg exit_status=0 9449943345d3Smrg 9450943345d3Smrg # This variable tells wrapper scripts just to set variables rather 9451943345d3Smrg # than running their programs. 9452943345d3Smrg libtool_install_magic="$magic" 9453943345d3Smrg 9454943345d3Smrg for arg 9455943345d3Smrg do 9456943345d3Smrg case $arg in 94573e51e026Smrg -f) func_append RM " $arg"; rmforce=yes ;; 94583e51e026Smrg -*) func_append RM " $arg" ;; 94593e51e026Smrg *) func_append files " $arg" ;; 9460943345d3Smrg esac 9461943345d3Smrg done 9462943345d3Smrg 9463a7b590b3Smrg test -z "$RM" && \ 9464a7b590b3Smrg func_fatal_help "you must specify an RM program" 9465943345d3Smrg 9466943345d3Smrg rmdirs= 9467943345d3Smrg 9468943345d3Smrg for file in $files; do 9469a7b590b3Smrg func_dirname "$file" "" "." 9470a7b590b3Smrg dir="$func_dirname_result" 9471a7b590b3Smrg if test "X$dir" = X.; then 94723e51e026Smrg odir="$objdir" 9473943345d3Smrg else 94743e51e026Smrg odir="$dir/$objdir" 9475943345d3Smrg fi 9476a7b590b3Smrg func_basename "$file" 9477a7b590b3Smrg name="$func_basename_result" 94783e51e026Smrg test "$opt_mode" = uninstall && odir="$dir" 9479943345d3Smrg 94803e51e026Smrg # Remember odir for removal later, being careful to avoid duplicates 94813e51e026Smrg if test "$opt_mode" = clean; then 9482943345d3Smrg case " $rmdirs " in 94833e51e026Smrg *" $odir "*) ;; 94843e51e026Smrg *) func_append rmdirs " $odir" ;; 9485943345d3Smrg esac 9486943345d3Smrg fi 9487943345d3Smrg 9488943345d3Smrg # Don't error if the file doesn't exist and rm -f was used. 9489a7b590b3Smrg if { test -L "$file"; } >/dev/null 2>&1 || 9490a7b590b3Smrg { test -h "$file"; } >/dev/null 2>&1 || 9491a7b590b3Smrg test -f "$file"; then 9492943345d3Smrg : 9493943345d3Smrg elif test -d "$file"; then 9494943345d3Smrg exit_status=1 9495943345d3Smrg continue 9496943345d3Smrg elif test "$rmforce" = yes; then 9497943345d3Smrg continue 9498943345d3Smrg fi 9499943345d3Smrg 9500943345d3Smrg rmfiles="$file" 9501943345d3Smrg 9502943345d3Smrg case $name in 9503943345d3Smrg *.la) 9504943345d3Smrg # Possibly a libtool archive, so verify it. 9505a7b590b3Smrg if func_lalib_p "$file"; then 9506a7b590b3Smrg func_source $dir/$name 9507943345d3Smrg 9508943345d3Smrg # Delete the libtool libraries and symlinks. 9509943345d3Smrg for n in $library_names; do 95103e51e026Smrg func_append rmfiles " $odir/$n" 9511943345d3Smrg done 95123e51e026Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9513943345d3Smrg 95143e51e026Smrg case "$opt_mode" in 9515943345d3Smrg clean) 95163e51e026Smrg case " $library_names " in 9517943345d3Smrg *" $dlname "*) ;; 95183e51e026Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9519943345d3Smrg esac 95203e51e026Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9521943345d3Smrg ;; 9522943345d3Smrg uninstall) 9523943345d3Smrg if test -n "$library_names"; then 9524943345d3Smrg # Do each command in the postuninstall commands. 9525a7b590b3Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9526943345d3Smrg fi 9527943345d3Smrg 9528943345d3Smrg if test -n "$old_library"; then 9529943345d3Smrg # Do each command in the old_postuninstall commands. 9530a7b590b3Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9531943345d3Smrg fi 9532943345d3Smrg # FIXME: should reinstall the best remaining shared library. 9533943345d3Smrg ;; 9534943345d3Smrg esac 9535943345d3Smrg fi 9536943345d3Smrg ;; 9537943345d3Smrg 9538943345d3Smrg *.lo) 9539943345d3Smrg # Possibly a libtool object, so verify it. 9540a7b590b3Smrg if func_lalib_p "$file"; then 9541943345d3Smrg 9542943345d3Smrg # Read the .lo file 9543a7b590b3Smrg func_source $dir/$name 9544943345d3Smrg 9545943345d3Smrg # Add PIC object to the list of files to remove. 9546a7b590b3Smrg if test -n "$pic_object" && 9547a7b590b3Smrg test "$pic_object" != none; then 95483e51e026Smrg func_append rmfiles " $dir/$pic_object" 9549943345d3Smrg fi 9550943345d3Smrg 9551943345d3Smrg # Add non-PIC object to the list of files to remove. 9552a7b590b3Smrg if test -n "$non_pic_object" && 9553a7b590b3Smrg test "$non_pic_object" != none; then 95543e51e026Smrg func_append rmfiles " $dir/$non_pic_object" 9555943345d3Smrg fi 9556943345d3Smrg fi 9557943345d3Smrg ;; 9558943345d3Smrg 9559943345d3Smrg *) 95603e51e026Smrg if test "$opt_mode" = clean ; then 9561943345d3Smrg noexename=$name 9562943345d3Smrg case $file in 9563943345d3Smrg *.exe) 9564a7b590b3Smrg func_stripname '' '.exe' "$file" 9565a7b590b3Smrg file=$func_stripname_result 9566a7b590b3Smrg func_stripname '' '.exe' "$name" 9567a7b590b3Smrg noexename=$func_stripname_result 9568943345d3Smrg # $file with .exe has already been added to rmfiles, 9569943345d3Smrg # add $file without .exe 95703e51e026Smrg func_append rmfiles " $file" 9571943345d3Smrg ;; 9572943345d3Smrg esac 9573943345d3Smrg # Do a test to see if this is a libtool program. 9574a7b590b3Smrg if func_ltwrapper_p "$file"; then 9575a7b590b3Smrg if func_ltwrapper_executable_p "$file"; then 9576a7b590b3Smrg func_ltwrapper_scriptname "$file" 9577a7b590b3Smrg relink_command= 9578a7b590b3Smrg func_source $func_ltwrapper_scriptname_result 95793e51e026Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9580a7b590b3Smrg else 9581a7b590b3Smrg relink_command= 9582a7b590b3Smrg func_source $dir/$noexename 9583a7b590b3Smrg fi 9584943345d3Smrg 9585943345d3Smrg # note $name still contains .exe if it was in $file originally 9586943345d3Smrg # as does the version of $file that was added into $rmfiles 95873e51e026Smrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9588943345d3Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 95893e51e026Smrg func_append rmfiles " $odir/lt-$name" 9590943345d3Smrg fi 9591943345d3Smrg if test "X$noexename" != "X$name" ; then 95923e51e026Smrg func_append rmfiles " $odir/lt-${noexename}.c" 9593943345d3Smrg fi 9594943345d3Smrg fi 9595943345d3Smrg fi 9596943345d3Smrg ;; 9597943345d3Smrg esac 9598a7b590b3Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9599943345d3Smrg done 9600943345d3Smrg 9601943345d3Smrg # Try to remove the ${objdir}s in the directories where we deleted files 9602943345d3Smrg for dir in $rmdirs; do 9603943345d3Smrg if test -d "$dir"; then 9604a7b590b3Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9605943345d3Smrg fi 9606943345d3Smrg done 9607943345d3Smrg 9608943345d3Smrg exit $exit_status 9609a7b590b3Smrg} 9610943345d3Smrg 96113e51e026Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612a7b590b3Smrg func_mode_uninstall ${1+"$@"} 9613943345d3Smrg 96143e51e026Smrgtest -z "$opt_mode" && { 9615a7b590b3Smrg help="$generic_help" 9616a7b590b3Smrg func_fatal_help "you must specify a MODE" 9617a7b590b3Smrg} 9618a7b590b3Smrg 9619a7b590b3Smrgtest -z "$exec_cmd" && \ 96203e51e026Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 9621943345d3Smrg 9622943345d3Smrgif test -n "$exec_cmd"; then 9623a7b590b3Smrg eval exec "$exec_cmd" 9624943345d3Smrg exit $EXIT_FAILURE 9625943345d3Smrgfi 9626943345d3Smrg 9627a7b590b3Smrgexit $exit_status 9628943345d3Smrg 9629943345d3Smrg 9630943345d3Smrg# The TAGs below are defined such that we never get into a situation 9631943345d3Smrg# in which we disable both kinds of libraries. Given conflicting 9632943345d3Smrg# choices, we go for a static library, that is the most portable, 9633943345d3Smrg# since we can't tell whether shared libraries were disabled because 9634943345d3Smrg# the user asked for that or because the platform doesn't support 9635943345d3Smrg# them. This is particularly important on AIX, because we don't 9636943345d3Smrg# support having both static and shared libraries enabled at the same 9637943345d3Smrg# time on that platform, so we default to a shared-only configuration. 9638943345d3Smrg# If a disable-shared tag is given, we'll fallback to a static-only 9639943345d3Smrg# configuration. But we'll never go from static-only to shared-only. 9640943345d3Smrg 9641943345d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642a7b590b3Smrgbuild_libtool_libs=no 9643a7b590b3Smrgbuild_old_libs=yes 9644943345d3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 9645943345d3Smrg 9646943345d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647a7b590b3Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9648943345d3Smrg# ### END LIBTOOL TAG CONFIG: disable-static 9649943345d3Smrg 9650943345d3Smrg# Local Variables: 9651943345d3Smrg# mode:shell-script 9652943345d3Smrg# sh-indentation:2 9653943345d3Smrg# End: 9654a7b590b3Smrg# vi:sw=2 9655a7b590b3Smrg 9656