ltmain.sh revision a73423d7
1b3e38ee4Smrg 2a73423d7Smrg# libtool (GNU libtool) 2.4.2 3b3e38ee4Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4b3e38ee4Smrg 5a73423d7Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 6a73423d7Smrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7b3e38ee4Smrg# This is free software; see the source for copying conditions. There is NO 8b3e38ee4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9b3e38ee4Smrg 10b3e38ee4Smrg# GNU Libtool is free software; you can redistribute it and/or modify 1150806d53Smrg# it under the terms of the GNU General Public License as published by 1250806d53Smrg# the Free Software Foundation; either version 2 of the License, or 1350806d53Smrg# (at your option) any later version. 1450806d53Smrg# 15b3e38ee4Smrg# As a special exception to the GNU General Public License, 16b3e38ee4Smrg# if you distribute this file as part of a program or library that 17b3e38ee4Smrg# is built using GNU Libtool, you may include this file under the 18b3e38ee4Smrg# same distribution terms that you use for the rest of that program. 19b3e38ee4Smrg# 20b3e38ee4Smrg# GNU Libtool is distributed in the hope that it will be useful, but 2150806d53Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 2250806d53Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 2350806d53Smrg# General Public License for more details. 2450806d53Smrg# 2550806d53Smrg# You should have received a copy of the GNU General Public License 26b3e38ee4Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 27b3e38ee4Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28b3e38ee4Smrg# or obtained by writing to the Free Software Foundation, Inc., 29b3e38ee4Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30a18ebfb2Smrg 31b3e38ee4Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 32b3e38ee4Smrg# 33b3e38ee4Smrg# Provide generalized library-building support services. 34b3e38ee4Smrg# 35a73423d7Smrg# --config show all configuration variables 36a73423d7Smrg# --debug enable verbose shell tracing 37a73423d7Smrg# -n, --dry-run display commands without modifying any files 38a73423d7Smrg# --features display basic configuration information and exit 39a73423d7Smrg# --mode=MODE use operation mode MODE 40a73423d7Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 41a73423d7Smrg# --quiet, --silent don't print informational messages 42a73423d7Smrg# --no-quiet, --no-silent 43a73423d7Smrg# print informational messages (default) 44a73423d7Smrg# --no-warn don't display warning messages 45a73423d7Smrg# --tag=TAG use configuration variables from tag TAG 46a73423d7Smrg# -v, --verbose print more informational messages than default 47a73423d7Smrg# --no-verbose don't print the extra informational messages 48a73423d7Smrg# --version print version information 49a73423d7Smrg# -h, --help, --help-all print short, long, or detailed help message 50b3e38ee4Smrg# 51b3e38ee4Smrg# MODE must be one of the following: 52b3e38ee4Smrg# 53a73423d7Smrg# clean remove files from the build directory 54a73423d7Smrg# compile compile a source file into a libtool object 55a73423d7Smrg# execute automatically set library path, then run a program 56a73423d7Smrg# finish complete the installation of libtool libraries 57a73423d7Smrg# install install libraries or executables 58a73423d7Smrg# link create a library or an executable 59a73423d7Smrg# uninstall remove libraries from an installed directory 60b3e38ee4Smrg# 61a73423d7Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 62a73423d7Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63b3e38ee4Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64b3e38ee4Smrg# 65b3e38ee4Smrg# When reporting a bug, please describe a test case to reproduce it and 66b3e38ee4Smrg# include the following information: 67b3e38ee4Smrg# 68a73423d7Smrg# host-triplet: $host 69a73423d7Smrg# shell: $SHELL 70a73423d7Smrg# compiler: $LTCC 71a73423d7Smrg# compiler flags: $LTCFLAGS 72a73423d7Smrg# linker: $LD (gnu? $with_gnu_ld) 73a73423d7Smrg# $progname: (GNU libtool) 2.4.2 74a73423d7Smrg# automake: $automake_version 75a73423d7Smrg# autoconf: $autoconf_version 76b3e38ee4Smrg# 77b3e38ee4Smrg# Report bugs to <bug-libtool@gnu.org>. 78a73423d7Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 79a73423d7Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 8050806d53Smrg 81a73423d7SmrgPROGRAM=libtool 8250806d53SmrgPACKAGE=libtool 83a73423d7SmrgVERSION=2.4.2 84b3e38ee4SmrgTIMESTAMP="" 85a73423d7Smrgpackage_revision=1.3337 8650806d53Smrg 87b3e38ee4Smrg# Be Bourne compatible 8850806d53Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8950806d53Smrg emulate sh 9050806d53Smrg NULLCMD=: 9150806d53Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 9250806d53Smrg # is contrary to our usage. Disable this feature. 9350806d53Smrg alias -g '${1+"$@"}'='"$@"' 9450806d53Smrg setopt NO_GLOB_SUBST 9550806d53Smrgelse 9650806d53Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 9750806d53Smrgfi 987965d9acSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 997965d9acSmrgDUALCASE=1; export DUALCASE # for MKS sh 10050806d53Smrg 101a73423d7Smrg# A function that is used when there is no print builtin or printf. 102a73423d7Smrgfunc_fallback_echo () 103a73423d7Smrg{ 104a73423d7Smrg eval 'cat <<_LTECHO_EOF 105a73423d7Smrg$1 106a73423d7Smrg_LTECHO_EOF' 107a73423d7Smrg} 108a73423d7Smrg 109b3e38ee4Smrg# NLS nuisances: We save the old values to restore during execute mode. 110b3e38ee4Smrglt_user_locale= 111b3e38ee4Smrglt_safe_locale= 1127965d9acSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 11350806d53Smrgdo 11450806d53Smrg eval "if test \"\${$lt_var+set}\" = set; then 115b3e38ee4Smrg save_$lt_var=\$$lt_var 116b3e38ee4Smrg $lt_var=C 1177965d9acSmrg export $lt_var 118b3e38ee4Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119b3e38ee4Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1207965d9acSmrg fi" 12150806d53Smrgdone 122a73423d7SmrgLC_ALL=C 123a73423d7SmrgLANGUAGE=C 124a73423d7Smrgexport LANGUAGE LC_ALL 12550806d53Smrg 126b3e38ee4Smrg$lt_unset CDPATH 127b3e38ee4Smrg 128b3e38ee4Smrg 129a73423d7Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 130a73423d7Smrg# is ksh but when the shell is invoked as "sh" and the current value of 131a73423d7Smrg# the _XPG environment variable is not equal to 1 (one), the special 132a73423d7Smrg# positional parameter $0, within a function call, is the name of the 133a73423d7Smrg# function. 134a73423d7Smrgprogpath="$0" 135b3e38ee4Smrg 136b3e38ee4Smrg 137b3e38ee4Smrg 138b3e38ee4Smrg: ${CP="cp -f"} 139a73423d7Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140b3e38ee4Smrg: ${MAKE="make"} 141b3e38ee4Smrg: ${MKDIR="mkdir"} 142b3e38ee4Smrg: ${MV="mv -f"} 143b3e38ee4Smrg: ${RM="rm -f"} 144b3e38ee4Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145b3e38ee4Smrg: ${Xsed="$SED -e 1s/^X//"} 146b3e38ee4Smrg 147b3e38ee4Smrg# Global variables: 148b3e38ee4SmrgEXIT_SUCCESS=0 149b3e38ee4SmrgEXIT_FAILURE=1 150b3e38ee4SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151b3e38ee4SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152b3e38ee4Smrg 153b3e38ee4Smrgexit_status=$EXIT_SUCCESS 1547965d9acSmrg 15550806d53Smrg# Make sure IFS has a sensible default 15650806d53Smrglt_nl=' 15750806d53Smrg' 15850806d53SmrgIFS=" $lt_nl" 15950806d53Smrg 160b3e38ee4Smrgdirname="s,/[^/]*$,," 161b3e38ee4Smrgbasename="s,^.*/,," 162b3e38ee4Smrg 163a73423d7Smrg# func_dirname file append nondir_replacement 164a73423d7Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 165a73423d7Smrg# otherwise set result to NONDIR_REPLACEMENT. 166a73423d7Smrgfunc_dirname () 167a73423d7Smrg{ 168a73423d7Smrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 169a73423d7Smrg if test "X$func_dirname_result" = "X${1}"; then 170a73423d7Smrg func_dirname_result="${3}" 171a73423d7Smrg else 172a73423d7Smrg func_dirname_result="$func_dirname_result${2}" 173a73423d7Smrg fi 174a73423d7Smrg} # func_dirname may be replaced by extended shell implementation 175a73423d7Smrg 176a73423d7Smrg 177a73423d7Smrg# func_basename file 178a73423d7Smrgfunc_basename () 179a73423d7Smrg{ 180a73423d7Smrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 181a73423d7Smrg} # func_basename may be replaced by extended shell implementation 182a73423d7Smrg 183a73423d7Smrg 184b3e38ee4Smrg# func_dirname_and_basename file append nondir_replacement 185b3e38ee4Smrg# perform func_basename and func_dirname in a single function 186b3e38ee4Smrg# call: 187b3e38ee4Smrg# dirname: Compute the dirname of FILE. If nonempty, 188b3e38ee4Smrg# add APPEND to the result, otherwise set result 189b3e38ee4Smrg# to NONDIR_REPLACEMENT. 190b3e38ee4Smrg# value returned in "$func_dirname_result" 191b3e38ee4Smrg# basename: Compute filename of FILE. 192b3e38ee4Smrg# value retuned in "$func_basename_result" 193b3e38ee4Smrg# Implementation must be kept synchronized with func_dirname 194b3e38ee4Smrg# and func_basename. For efficiency, we do not delegate to 195b3e38ee4Smrg# those functions but instead duplicate the functionality here. 196b3e38ee4Smrgfunc_dirname_and_basename () 197b3e38ee4Smrg{ 198a73423d7Smrg # Extract subdirectory from the argument. 199a73423d7Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 200a73423d7Smrg if test "X$func_dirname_result" = "X${1}"; then 201a73423d7Smrg func_dirname_result="${3}" 202a73423d7Smrg else 203a73423d7Smrg func_dirname_result="$func_dirname_result${2}" 204a73423d7Smrg fi 205a73423d7Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 206a73423d7Smrg} # func_dirname_and_basename may be replaced by extended shell implementation 207a73423d7Smrg 208a73423d7Smrg 209a73423d7Smrg# func_stripname prefix suffix name 210a73423d7Smrg# strip PREFIX and SUFFIX off of NAME. 211a73423d7Smrg# PREFIX and SUFFIX must not contain globbing or regex special 212a73423d7Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 213a73423d7Smrg# dot (in which case that matches only a dot). 214a73423d7Smrg# func_strip_suffix prefix name 215a73423d7Smrgfunc_stripname () 216a73423d7Smrg{ 217a73423d7Smrg case ${2} in 218a73423d7Smrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 219a73423d7Smrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 220a73423d7Smrg esac 221a73423d7Smrg} # func_stripname may be replaced by extended shell implementation 222a73423d7Smrg 223a73423d7Smrg 224a73423d7Smrg# These SED scripts presuppose an absolute path with a trailing slash. 225a73423d7Smrgpathcar='s,^/\([^/]*\).*$,\1,' 226a73423d7Smrgpathcdr='s,^/[^/]*,,' 227a73423d7Smrgremovedotparts=':dotsl 228a73423d7Smrg s@/\./@/@g 229a73423d7Smrg t dotsl 230a73423d7Smrg s,/\.$,/,' 231a73423d7Smrgcollapseslashes='s@/\{1,\}@/@g' 232a73423d7Smrgfinalslash='s,/*$,/,' 233a73423d7Smrg 234a73423d7Smrg# func_normal_abspath PATH 235a73423d7Smrg# Remove doubled-up and trailing slashes, "." path components, 236a73423d7Smrg# and cancel out any ".." path components in PATH after making 237a73423d7Smrg# it an absolute path. 238a73423d7Smrg# value returned in "$func_normal_abspath_result" 239a73423d7Smrgfunc_normal_abspath () 240a73423d7Smrg{ 241a73423d7Smrg # Start from root dir and reassemble the path. 242a73423d7Smrg func_normal_abspath_result= 243a73423d7Smrg func_normal_abspath_tpath=$1 244a73423d7Smrg func_normal_abspath_altnamespace= 245a73423d7Smrg case $func_normal_abspath_tpath in 246a73423d7Smrg "") 247a73423d7Smrg # Empty path, that just means $cwd. 248a73423d7Smrg func_stripname '' '/' "`pwd`" 249a73423d7Smrg func_normal_abspath_result=$func_stripname_result 250a73423d7Smrg return 251a73423d7Smrg ;; 252a73423d7Smrg # The next three entries are used to spot a run of precisely 253a73423d7Smrg # two leading slashes without using negated character classes; 254a73423d7Smrg # we take advantage of case's first-match behaviour. 255a73423d7Smrg ///*) 256a73423d7Smrg # Unusual form of absolute path, do nothing. 257a73423d7Smrg ;; 258a73423d7Smrg //*) 259a73423d7Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 260a73423d7Smrg # and for example Cygwin uses it to access remote file shares 261a73423d7Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 262a73423d7Smrg func_normal_abspath_altnamespace=/ 263a73423d7Smrg ;; 264a73423d7Smrg /*) 265a73423d7Smrg # Absolute path, do nothing. 266a73423d7Smrg ;; 267a73423d7Smrg *) 268a73423d7Smrg # Relative path, prepend $cwd. 269a73423d7Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 270a73423d7Smrg ;; 271a73423d7Smrg esac 272a73423d7Smrg # Cancel out all the simple stuff to save iterations. We also want 273a73423d7Smrg # the path to end with a slash for ease of parsing, so make sure 274a73423d7Smrg # there is one (and only one) here. 275a73423d7Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 276a73423d7Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 277a73423d7Smrg while :; do 278a73423d7Smrg # Processed it all yet? 279a73423d7Smrg if test "$func_normal_abspath_tpath" = / ; then 280a73423d7Smrg # If we ascended to the root using ".." the result may be empty now. 281a73423d7Smrg if test -z "$func_normal_abspath_result" ; then 282a73423d7Smrg func_normal_abspath_result=/ 283a73423d7Smrg fi 284a73423d7Smrg break 285a73423d7Smrg fi 286a73423d7Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 287a73423d7Smrg -e "$pathcar"` 288a73423d7Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 289a73423d7Smrg -e "$pathcdr"` 290a73423d7Smrg # Figure out what to do with it 291a73423d7Smrg case $func_normal_abspath_tcomponent in 292a73423d7Smrg "") 293a73423d7Smrg # Trailing empty path component, ignore it. 294a73423d7Smrg ;; 295a73423d7Smrg ..) 296a73423d7Smrg # Parent dir; strip last assembled component from result. 297a73423d7Smrg func_dirname "$func_normal_abspath_result" 298a73423d7Smrg func_normal_abspath_result=$func_dirname_result 299a73423d7Smrg ;; 300a73423d7Smrg *) 301a73423d7Smrg # Actual path component, append it. 302a73423d7Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 303a73423d7Smrg ;; 304a73423d7Smrg esac 305a73423d7Smrg done 306a73423d7Smrg # Restore leading double-slash if one was found on entry. 307a73423d7Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308b3e38ee4Smrg} 309af1a9c97Smrg 310a73423d7Smrg# func_relative_path SRCDIR DSTDIR 311a73423d7Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 312a73423d7Smrg# slash if non-empty, suitable for immediately appending a filename 313a73423d7Smrg# without needing to append a separator. 314a73423d7Smrg# value returned in "$func_relative_path_result" 315a73423d7Smrgfunc_relative_path () 316a73423d7Smrg{ 317a73423d7Smrg func_relative_path_result= 318a73423d7Smrg func_normal_abspath "$1" 319a73423d7Smrg func_relative_path_tlibdir=$func_normal_abspath_result 320a73423d7Smrg func_normal_abspath "$2" 321a73423d7Smrg func_relative_path_tbindir=$func_normal_abspath_result 322a73423d7Smrg 323a73423d7Smrg # Ascend the tree starting from libdir 324a73423d7Smrg while :; do 325a73423d7Smrg # check if we have found a prefix of bindir 326a73423d7Smrg case $func_relative_path_tbindir in 327a73423d7Smrg $func_relative_path_tlibdir) 328a73423d7Smrg # found an exact match 329a73423d7Smrg func_relative_path_tcancelled= 330a73423d7Smrg break 331a73423d7Smrg ;; 332a73423d7Smrg $func_relative_path_tlibdir*) 333a73423d7Smrg # found a matching prefix 334a73423d7Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 335a73423d7Smrg func_relative_path_tcancelled=$func_stripname_result 336a73423d7Smrg if test -z "$func_relative_path_result"; then 337a73423d7Smrg func_relative_path_result=. 338a73423d7Smrg fi 339a73423d7Smrg break 340a73423d7Smrg ;; 341a73423d7Smrg *) 342a73423d7Smrg func_dirname $func_relative_path_tlibdir 343a73423d7Smrg func_relative_path_tlibdir=${func_dirname_result} 344a73423d7Smrg if test "x$func_relative_path_tlibdir" = x ; then 345a73423d7Smrg # Have to descend all the way to the root! 346a73423d7Smrg func_relative_path_result=../$func_relative_path_result 347a73423d7Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 348a73423d7Smrg break 349a73423d7Smrg fi 350a73423d7Smrg func_relative_path_result=../$func_relative_path_result 351a73423d7Smrg ;; 352a73423d7Smrg esac 353a73423d7Smrg done 354b3e38ee4Smrg 355a73423d7Smrg # Now calculate path; take care to avoid doubling-up slashes. 356a73423d7Smrg func_stripname '' '/' "$func_relative_path_result" 357a73423d7Smrg func_relative_path_result=$func_stripname_result 358a73423d7Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 359a73423d7Smrg if test "x$func_stripname_result" != x ; then 360a73423d7Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 361a73423d7Smrg fi 362a73423d7Smrg 363a73423d7Smrg # Normalisation. If bindir is libdir, return empty string, 364a73423d7Smrg # else relative path ending with a slash; either way, target 365a73423d7Smrg # file name can be directly appended. 366a73423d7Smrg if test ! -z "$func_relative_path_result"; then 367a73423d7Smrg func_stripname './' '' "$func_relative_path_result/" 368a73423d7Smrg func_relative_path_result=$func_stripname_result 369a73423d7Smrg fi 370a73423d7Smrg} 371b3e38ee4Smrg 372b3e38ee4Smrg# The name of this program: 373b3e38ee4Smrgfunc_dirname_and_basename "$progpath" 374b3e38ee4Smrgprogname=$func_basename_result 375b3e38ee4Smrg 376b3e38ee4Smrg# Make sure we have an absolute path for reexecution: 377b3e38ee4Smrgcase $progpath in 378b3e38ee4Smrg [\\/]*|[A-Za-z]:\\*) ;; 379b3e38ee4Smrg *[\\/]*) 380b3e38ee4Smrg progdir=$func_dirname_result 381b3e38ee4Smrg progdir=`cd "$progdir" && pwd` 382b3e38ee4Smrg progpath="$progdir/$progname" 383b3e38ee4Smrg ;; 384b3e38ee4Smrg *) 385b3e38ee4Smrg save_IFS="$IFS" 386a73423d7Smrg IFS=${PATH_SEPARATOR-:} 387b3e38ee4Smrg for progdir in $PATH; do 388b3e38ee4Smrg IFS="$save_IFS" 389b3e38ee4Smrg test -x "$progdir/$progname" && break 390b3e38ee4Smrg done 391b3e38ee4Smrg IFS="$save_IFS" 392b3e38ee4Smrg test -n "$progdir" || progdir=`pwd` 393b3e38ee4Smrg progpath="$progdir/$progname" 394b3e38ee4Smrg ;; 395b3e38ee4Smrgesac 396b3e38ee4Smrg 397b3e38ee4Smrg# Sed substitution that helps us do robust quoting. It backslashifies 398b3e38ee4Smrg# metacharacters that are still active within double-quoted strings. 399b3e38ee4SmrgXsed="${SED}"' -e 1s/^X//' 400b3e38ee4Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401b3e38ee4Smrg 402b3e38ee4Smrg# Same as above, but do not quote variable references. 403b3e38ee4Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404b3e38ee4Smrg 405a73423d7Smrg# Sed substitution that turns a string into a regex matching for the 406a73423d7Smrg# string literally. 407a73423d7Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 408a73423d7Smrg 409a73423d7Smrg# Sed substitution that converts a w32 file name or path 410a73423d7Smrg# which contains forward slashes, into one that contains 411a73423d7Smrg# (escaped) backslashes. A very naive implementation. 412a73423d7Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 413a73423d7Smrg 414b3e38ee4Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 415b3e38ee4Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416b3e38ee4Smrg# in input to double_quote_subst, that '$' was protected from expansion. 417b3e38ee4Smrg# Since each input `\' is now two `\'s, look for any number of runs of 418b3e38ee4Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419b3e38ee4Smrgbs='\\' 420b3e38ee4Smrgbs2='\\\\' 421b3e38ee4Smrgbs4='\\\\\\\\' 422b3e38ee4Smrgdollar='\$' 423b3e38ee4Smrgsed_double_backslash="\ 424b3e38ee4Smrg s/$bs4/&\\ 425b3e38ee4Smrg/g 426b3e38ee4Smrg s/^$bs2$dollar/$bs&/ 427b3e38ee4Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428b3e38ee4Smrg s/\n//g" 429b3e38ee4Smrg 430b3e38ee4Smrg# Standard options: 431b3e38ee4Smrgopt_dry_run=false 432b3e38ee4Smrgopt_help=false 433b3e38ee4Smrgopt_quiet=false 434b3e38ee4Smrgopt_verbose=false 435b3e38ee4Smrgopt_warning=: 436b3e38ee4Smrg 437b3e38ee4Smrg# func_echo arg... 438b3e38ee4Smrg# Echo program name prefixed message, along with the current mode 439b3e38ee4Smrg# name if it has been set yet. 440b3e38ee4Smrgfunc_echo () 441b3e38ee4Smrg{ 442a73423d7Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443b3e38ee4Smrg} 444b3e38ee4Smrg 445b3e38ee4Smrg# func_verbose arg... 446b3e38ee4Smrg# Echo program name prefixed message in verbose mode only. 447b3e38ee4Smrgfunc_verbose () 448b3e38ee4Smrg{ 449b3e38ee4Smrg $opt_verbose && func_echo ${1+"$@"} 450b3e38ee4Smrg 451b3e38ee4Smrg # A bug in bash halts the script if the last line of a function 452b3e38ee4Smrg # fails when set -e is in force, so we need another command to 453b3e38ee4Smrg # work around that: 454b3e38ee4Smrg : 455b3e38ee4Smrg} 456b3e38ee4Smrg 457a73423d7Smrg# func_echo_all arg... 458a73423d7Smrg# Invoke $ECHO with all args, space-separated. 459a73423d7Smrgfunc_echo_all () 460a73423d7Smrg{ 461a73423d7Smrg $ECHO "$*" 462a73423d7Smrg} 463a73423d7Smrg 464b3e38ee4Smrg# func_error arg... 465b3e38ee4Smrg# Echo program name prefixed message to standard error. 466b3e38ee4Smrgfunc_error () 467b3e38ee4Smrg{ 468a73423d7Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469b3e38ee4Smrg} 470b3e38ee4Smrg 471b3e38ee4Smrg# func_warning arg... 472b3e38ee4Smrg# Echo program name prefixed warning message to standard error. 473b3e38ee4Smrgfunc_warning () 474b3e38ee4Smrg{ 475a73423d7Smrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476b3e38ee4Smrg 477b3e38ee4Smrg # bash bug again: 478b3e38ee4Smrg : 479b3e38ee4Smrg} 480b3e38ee4Smrg 481b3e38ee4Smrg# func_fatal_error arg... 482b3e38ee4Smrg# Echo program name prefixed message to standard error, and exit. 483b3e38ee4Smrgfunc_fatal_error () 484b3e38ee4Smrg{ 485b3e38ee4Smrg func_error ${1+"$@"} 486b3e38ee4Smrg exit $EXIT_FAILURE 487b3e38ee4Smrg} 488b3e38ee4Smrg 489b3e38ee4Smrg# func_fatal_help arg... 490b3e38ee4Smrg# Echo program name prefixed message to standard error, followed by 491b3e38ee4Smrg# a help hint, and exit. 492b3e38ee4Smrgfunc_fatal_help () 493b3e38ee4Smrg{ 494b3e38ee4Smrg func_error ${1+"$@"} 495b3e38ee4Smrg func_fatal_error "$help" 496b3e38ee4Smrg} 497b3e38ee4Smrghelp="Try \`$progname --help' for more information." ## default 498b3e38ee4Smrg 499b3e38ee4Smrg 500b3e38ee4Smrg# func_grep expression filename 501b3e38ee4Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502b3e38ee4Smrgfunc_grep () 503b3e38ee4Smrg{ 504b3e38ee4Smrg $GREP "$1" "$2" >/dev/null 2>&1 505b3e38ee4Smrg} 506b3e38ee4Smrg 507b3e38ee4Smrg 508b3e38ee4Smrg# func_mkdir_p directory-path 509b3e38ee4Smrg# Make sure the entire path to DIRECTORY-PATH is available. 510b3e38ee4Smrgfunc_mkdir_p () 511b3e38ee4Smrg{ 512b3e38ee4Smrg my_directory_path="$1" 513b3e38ee4Smrg my_dir_list= 514b3e38ee4Smrg 515b3e38ee4Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516b3e38ee4Smrg 517b3e38ee4Smrg # Protect directory names starting with `-' 518b3e38ee4Smrg case $my_directory_path in 519b3e38ee4Smrg -*) my_directory_path="./$my_directory_path" ;; 520b3e38ee4Smrg esac 521b3e38ee4Smrg 522b3e38ee4Smrg # While some portion of DIR does not yet exist... 523b3e38ee4Smrg while test ! -d "$my_directory_path"; do 524b3e38ee4Smrg # ...make a list in topmost first order. Use a colon delimited 525b3e38ee4Smrg # list incase some portion of path contains whitespace. 526b3e38ee4Smrg my_dir_list="$my_directory_path:$my_dir_list" 527b3e38ee4Smrg 528b3e38ee4Smrg # If the last portion added has no slash in it, the list is done 529b3e38ee4Smrg case $my_directory_path in */*) ;; *) break ;; esac 530b3e38ee4Smrg 531b3e38ee4Smrg # ...otherwise throw away the child directory and loop 532a73423d7Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533b3e38ee4Smrg done 534a73423d7Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535b3e38ee4Smrg 536b3e38ee4Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 537b3e38ee4Smrg for my_dir in $my_dir_list; do 538b3e38ee4Smrg IFS="$save_mkdir_p_IFS" 539b3e38ee4Smrg # mkdir can fail with a `File exist' error if two processes 540b3e38ee4Smrg # try to create one of the directories concurrently. Don't 541b3e38ee4Smrg # stop in that case! 542b3e38ee4Smrg $MKDIR "$my_dir" 2>/dev/null || : 543b3e38ee4Smrg done 544b3e38ee4Smrg IFS="$save_mkdir_p_IFS" 545b3e38ee4Smrg 546b3e38ee4Smrg # Bail out if we (or some other process) failed to create a directory. 547b3e38ee4Smrg test -d "$my_directory_path" || \ 548b3e38ee4Smrg func_fatal_error "Failed to create \`$1'" 549b3e38ee4Smrg fi 550b3e38ee4Smrg} 55150806d53Smrg 55250806d53Smrg 55350806d53Smrg# func_mktempdir [string] 55450806d53Smrg# Make a temporary directory that won't clash with other running 55550806d53Smrg# libtool processes, and avoids race conditions if possible. If 55650806d53Smrg# given, STRING is the basename for that directory. 55750806d53Smrgfunc_mktempdir () 55850806d53Smrg{ 55950806d53Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 56050806d53Smrg 561b3e38ee4Smrg if test "$opt_dry_run" = ":"; then 56250806d53Smrg # Return a directory name, but don't create it in dry-run mode 56350806d53Smrg my_tmpdir="${my_template}-$$" 56450806d53Smrg else 56550806d53Smrg 56650806d53Smrg # If mktemp works, use that first and foremost 56750806d53Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 56850806d53Smrg 56950806d53Smrg if test ! -d "$my_tmpdir"; then 570b3e38ee4Smrg # Failing that, at least try and use $RANDOM to avoid a race 571b3e38ee4Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 57250806d53Smrg 573b3e38ee4Smrg save_mktempdir_umask=`umask` 574b3e38ee4Smrg umask 0077 575b3e38ee4Smrg $MKDIR "$my_tmpdir" 576b3e38ee4Smrg umask $save_mktempdir_umask 57750806d53Smrg fi 57850806d53Smrg 57950806d53Smrg # If we're not in dry-run mode, bomb out on failure 580b3e38ee4Smrg test -d "$my_tmpdir" || \ 581b3e38ee4Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 58250806d53Smrg fi 58350806d53Smrg 584a73423d7Smrg $ECHO "$my_tmpdir" 58550806d53Smrg} 58650806d53Smrg 58750806d53Smrg 588b3e38ee4Smrg# func_quote_for_eval arg 589b3e38ee4Smrg# Aesthetically quote ARG to be evaled later. 590b3e38ee4Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591b3e38ee4Smrg# is double-quoted, suitable for a subsequent eval, whereas 592b3e38ee4Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593b3e38ee4Smrg# which are still active within double quotes backslashified. 594b3e38ee4Smrgfunc_quote_for_eval () 59550806d53Smrg{ 596b3e38ee4Smrg case $1 in 597b3e38ee4Smrg *[\\\`\"\$]*) 598a73423d7Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599b3e38ee4Smrg *) 600b3e38ee4Smrg func_quote_for_eval_unquoted_result="$1" ;; 601b3e38ee4Smrg esac 602b3e38ee4Smrg 603b3e38ee4Smrg case $func_quote_for_eval_unquoted_result in 604b3e38ee4Smrg # Double-quote args containing shell metacharacters to delay 605b3e38ee4Smrg # word splitting, command substitution and and variable 606b3e38ee4Smrg # expansion for a subsequent eval. 607b3e38ee4Smrg # Many Bourne shells cannot handle close brackets correctly 608b3e38ee4Smrg # in scan sets, so we specify it separately. 609b3e38ee4Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610b3e38ee4Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611b3e38ee4Smrg ;; 612b3e38ee4Smrg *) 613b3e38ee4Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 61450806d53Smrg esac 61550806d53Smrg} 61650806d53Smrg 61750806d53Smrg 618b3e38ee4Smrg# func_quote_for_expand arg 619b3e38ee4Smrg# Aesthetically quote ARG to be evaled later; same as above, 620b3e38ee4Smrg# but do not quote variable references. 621b3e38ee4Smrgfunc_quote_for_expand () 62250806d53Smrg{ 623b3e38ee4Smrg case $1 in 624b3e38ee4Smrg *[\\\`\"]*) 625a73423d7Smrg my_arg=`$ECHO "$1" | $SED \ 626b3e38ee4Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 62750806d53Smrg *) 628b3e38ee4Smrg my_arg="$1" ;; 629b3e38ee4Smrg esac 630b3e38ee4Smrg 631b3e38ee4Smrg case $my_arg in 632b3e38ee4Smrg # Double-quote args containing shell metacharacters to delay 633b3e38ee4Smrg # word splitting and command substitution for a subsequent eval. 634b3e38ee4Smrg # Many Bourne shells cannot handle close brackets correctly 635b3e38ee4Smrg # in scan sets, so we specify it separately. 636b3e38ee4Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637b3e38ee4Smrg my_arg="\"$my_arg\"" 638b3e38ee4Smrg ;; 639b3e38ee4Smrg esac 640b3e38ee4Smrg 641b3e38ee4Smrg func_quote_for_expand_result="$my_arg" 64250806d53Smrg} 64350806d53Smrg 64450806d53Smrg 645b3e38ee4Smrg# func_show_eval cmd [fail_exp] 646b3e38ee4Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647b3e38ee4Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648b3e38ee4Smrg# is given, then evaluate it. 649b3e38ee4Smrgfunc_show_eval () 65050806d53Smrg{ 651b3e38ee4Smrg my_cmd="$1" 652b3e38ee4Smrg my_fail_exp="${2-:}" 653af1a9c97Smrg 654b3e38ee4Smrg ${opt_silent-false} || { 655b3e38ee4Smrg func_quote_for_expand "$my_cmd" 656b3e38ee4Smrg eval "func_echo $func_quote_for_expand_result" 657b3e38ee4Smrg } 658b3e38ee4Smrg 659b3e38ee4Smrg if ${opt_dry_run-false}; then :; else 660b3e38ee4Smrg eval "$my_cmd" 661b3e38ee4Smrg my_status=$? 662b3e38ee4Smrg if test "$my_status" -eq 0; then :; else 663b3e38ee4Smrg eval "(exit $my_status); $my_fail_exp" 664b3e38ee4Smrg fi 66550806d53Smrg fi 66650806d53Smrg} 66750806d53Smrg 668b3e38ee4Smrg 669b3e38ee4Smrg# func_show_eval_locale cmd [fail_exp] 670b3e38ee4Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671b3e38ee4Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672b3e38ee4Smrg# is given, then evaluate it. Use the saved locale for evaluation. 673b3e38ee4Smrgfunc_show_eval_locale () 67450806d53Smrg{ 675b3e38ee4Smrg my_cmd="$1" 676b3e38ee4Smrg my_fail_exp="${2-:}" 677b3e38ee4Smrg 678b3e38ee4Smrg ${opt_silent-false} || { 679b3e38ee4Smrg func_quote_for_expand "$my_cmd" 680b3e38ee4Smrg eval "func_echo $func_quote_for_expand_result" 681b3e38ee4Smrg } 682b3e38ee4Smrg 683b3e38ee4Smrg if ${opt_dry_run-false}; then :; else 684b3e38ee4Smrg eval "$lt_user_locale 685b3e38ee4Smrg $my_cmd" 686b3e38ee4Smrg my_status=$? 687b3e38ee4Smrg eval "$lt_safe_locale" 688b3e38ee4Smrg if test "$my_status" -eq 0; then :; else 689b3e38ee4Smrg eval "(exit $my_status); $my_fail_exp" 690b3e38ee4Smrg fi 69150806d53Smrg fi 692b3e38ee4Smrg} 69350806d53Smrg 694a73423d7Smrg# func_tr_sh 695a73423d7Smrg# Turn $1 into a string suitable for a shell variable name. 696a73423d7Smrg# Result is stored in $func_tr_sh_result. All characters 697a73423d7Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 698a73423d7Smrg# if $1 begins with a digit, a '_' is prepended as well. 699a73423d7Smrgfunc_tr_sh () 700a73423d7Smrg{ 701a73423d7Smrg case $1 in 702a73423d7Smrg [0-9]* | *[!a-zA-Z0-9_]*) 703a73423d7Smrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 704a73423d7Smrg ;; 705a73423d7Smrg * ) 706a73423d7Smrg func_tr_sh_result=$1 707a73423d7Smrg ;; 708a73423d7Smrg esac 709a73423d7Smrg} 710b3e38ee4Smrg 711b3e38ee4Smrg 712b3e38ee4Smrg# func_version 713b3e38ee4Smrg# Echo version message to standard output and exit. 714b3e38ee4Smrgfunc_version () 715b3e38ee4Smrg{ 716a73423d7Smrg $opt_debug 717a73423d7Smrg 718a73423d7Smrg $SED -n '/(C)/!b go 719a73423d7Smrg :more 720a73423d7Smrg /\./!{ 721a73423d7Smrg N 722a73423d7Smrg s/\n# / / 723a73423d7Smrg b more 724a73423d7Smrg } 725a73423d7Smrg :go 726a73423d7Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 727b3e38ee4Smrg s/^# // 728b3e38ee4Smrg s/^# *$// 729b3e38ee4Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730b3e38ee4Smrg p 731b3e38ee4Smrg }' < "$progpath" 732b3e38ee4Smrg exit $? 733b3e38ee4Smrg} 734b3e38ee4Smrg 735b3e38ee4Smrg# func_usage 736b3e38ee4Smrg# Echo short help message to standard output and exit. 737b3e38ee4Smrgfunc_usage () 738b3e38ee4Smrg{ 739a73423d7Smrg $opt_debug 740a73423d7Smrg 741a73423d7Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 742b3e38ee4Smrg s/^# // 743b3e38ee4Smrg s/^# *$// 744b3e38ee4Smrg s/\$progname/'$progname'/ 745b3e38ee4Smrg p 746b3e38ee4Smrg }' < "$progpath" 747a73423d7Smrg echo 748b3e38ee4Smrg $ECHO "run \`$progname --help | more' for full usage" 749b3e38ee4Smrg exit $? 750b3e38ee4Smrg} 751b3e38ee4Smrg 752a73423d7Smrg# func_help [NOEXIT] 753a73423d7Smrg# Echo long help message to standard output and exit, 754a73423d7Smrg# unless 'noexit' is passed as argument. 755b3e38ee4Smrgfunc_help () 756b3e38ee4Smrg{ 757a73423d7Smrg $opt_debug 758a73423d7Smrg 759b3e38ee4Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 760a73423d7Smrg :print 761b3e38ee4Smrg s/^# // 762b3e38ee4Smrg s/^# *$// 763b3e38ee4Smrg s*\$progname*'$progname'* 764b3e38ee4Smrg s*\$host*'"$host"'* 765b3e38ee4Smrg s*\$SHELL*'"$SHELL"'* 766b3e38ee4Smrg s*\$LTCC*'"$LTCC"'* 767b3e38ee4Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 768b3e38ee4Smrg s*\$LD*'"$LD"'* 769b3e38ee4Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 770a73423d7Smrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 771a73423d7Smrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772b3e38ee4Smrg p 773a73423d7Smrg d 774a73423d7Smrg } 775a73423d7Smrg /^# .* home page:/b print 776a73423d7Smrg /^# General help using/b print 777a73423d7Smrg ' < "$progpath" 778a73423d7Smrg ret=$? 779a73423d7Smrg if test -z "$1"; then 780a73423d7Smrg exit $ret 781a73423d7Smrg fi 782b3e38ee4Smrg} 783b3e38ee4Smrg 784b3e38ee4Smrg# func_missing_arg argname 785b3e38ee4Smrg# Echo program name prefixed message to standard error and set global 786b3e38ee4Smrg# exit_cmd. 787b3e38ee4Smrgfunc_missing_arg () 788b3e38ee4Smrg{ 789a73423d7Smrg $opt_debug 790a73423d7Smrg 791a73423d7Smrg func_error "missing argument for $1." 792b3e38ee4Smrg exit_cmd=exit 79350806d53Smrg} 79450806d53Smrg 795af1a9c97Smrg 796a73423d7Smrg# func_split_short_opt shortopt 797a73423d7Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 798a73423d7Smrg# variables after splitting SHORTOPT after the 2nd character. 799a73423d7Smrgfunc_split_short_opt () 800a73423d7Smrg{ 801a73423d7Smrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 802a73423d7Smrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803af1a9c97Smrg 804a73423d7Smrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 805a73423d7Smrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 806a73423d7Smrg} # func_split_short_opt may be replaced by extended shell implementation 807a73423d7Smrg 808a73423d7Smrg 809a73423d7Smrg# func_split_long_opt longopt 810a73423d7Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 811a73423d7Smrg# variables after splitting LONGOPT at the `=' sign. 812a73423d7Smrgfunc_split_long_opt () 813a73423d7Smrg{ 814a73423d7Smrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 815a73423d7Smrg my_sed_long_arg='1s/^--[^=]*=//' 816a73423d7Smrg 817a73423d7Smrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 818a73423d7Smrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 819a73423d7Smrg} # func_split_long_opt may be replaced by extended shell implementation 820a73423d7Smrg 821a73423d7Smrgexit_cmd=: 822b3e38ee4Smrg 823b3e38ee4Smrg 824b3e38ee4Smrg 82550806d53Smrg 82650806d53Smrg 827b3e38ee4Smrgmagic="%%%MAGIC variable%%%" 828b3e38ee4Smrgmagic_exe="%%%MAGIC EXE variable%%%" 82950806d53Smrg 830b3e38ee4Smrg# Global variables. 831b3e38ee4Smrgnonopt= 832b3e38ee4Smrgpreserve_args= 833b3e38ee4Smrglo2o="s/\\.lo\$/.${objext}/" 834b3e38ee4Smrgo2lo="s/\\.${objext}\$/.lo/" 835b3e38ee4Smrgextracted_archives= 836b3e38ee4Smrgextracted_serial=0 837af1a9c97Smrg 838b3e38ee4Smrg# If this variable is set in any of the actions, the command in it 839b3e38ee4Smrg# will be execed at the end. This prevents here-documents from being 840b3e38ee4Smrg# left over by shells. 841b3e38ee4Smrgexec_cmd= 842b3e38ee4Smrg 843a73423d7Smrg# func_append var value 844a73423d7Smrg# Append VALUE to the end of shell variable VAR. 845a73423d7Smrgfunc_append () 846a73423d7Smrg{ 847a73423d7Smrg eval "${1}=\$${1}\${2}" 848a73423d7Smrg} # func_append may be replaced by extended shell implementation 849a73423d7Smrg 850a73423d7Smrg# func_append_quoted var value 851a73423d7Smrg# Quote VALUE and append to the end of shell variable VAR, separated 852a73423d7Smrg# by a space. 853a73423d7Smrgfunc_append_quoted () 854a73423d7Smrg{ 855a73423d7Smrg func_quote_for_eval "${2}" 856a73423d7Smrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 857a73423d7Smrg} # func_append_quoted may be replaced by extended shell implementation 858a73423d7Smrg 859a73423d7Smrg 860a73423d7Smrg# func_arith arithmetic-term... 861a73423d7Smrgfunc_arith () 862a73423d7Smrg{ 863a73423d7Smrg func_arith_result=`expr "${@}"` 864a73423d7Smrg} # func_arith may be replaced by extended shell implementation 865a73423d7Smrg 866a73423d7Smrg 867a73423d7Smrg# func_len string 868a73423d7Smrg# STRING may not start with a hyphen. 869a73423d7Smrgfunc_len () 870a73423d7Smrg{ 871a73423d7Smrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 872a73423d7Smrg} # func_len may be replaced by extended shell implementation 873a73423d7Smrg 874a73423d7Smrg 875a73423d7Smrg# func_lo2o object 876a73423d7Smrgfunc_lo2o () 877a73423d7Smrg{ 878a73423d7Smrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 879a73423d7Smrg} # func_lo2o may be replaced by extended shell implementation 880a73423d7Smrg 881a73423d7Smrg 882a73423d7Smrg# func_xform libobj-or-source 883a73423d7Smrgfunc_xform () 884a73423d7Smrg{ 885a73423d7Smrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 886a73423d7Smrg} # func_xform may be replaced by extended shell implementation 887a73423d7Smrg 888a73423d7Smrg 889b3e38ee4Smrg# func_fatal_configuration arg... 890b3e38ee4Smrg# Echo program name prefixed message to standard error, followed by 891b3e38ee4Smrg# a configuration failure hint, and exit. 892b3e38ee4Smrgfunc_fatal_configuration () 893b3e38ee4Smrg{ 894b3e38ee4Smrg func_error ${1+"$@"} 895b3e38ee4Smrg func_error "See the $PACKAGE documentation for more information." 896b3e38ee4Smrg func_fatal_error "Fatal configuration error." 897b3e38ee4Smrg} 8987965d9acSmrg 899af1a9c97Smrg 900b3e38ee4Smrg# func_config 901b3e38ee4Smrg# Display the configuration for all the tags in this script. 902b3e38ee4Smrgfunc_config () 903b3e38ee4Smrg{ 904b3e38ee4Smrg re_begincf='^# ### BEGIN LIBTOOL' 905b3e38ee4Smrg re_endcf='^# ### END LIBTOOL' 906b3e38ee4Smrg 907b3e38ee4Smrg # Default configuration. 908b3e38ee4Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 90950806d53Smrg 91050806d53Smrg # Now print the configurations for the tags. 91150806d53Smrg for tagname in $taglist; do 912b3e38ee4Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 91350806d53Smrg done 914a18ebfb2Smrg 915b3e38ee4Smrg exit $? 916b3e38ee4Smrg} 917a18ebfb2Smrg 918b3e38ee4Smrg# func_features 919b3e38ee4Smrg# Display the features supported by this script. 920b3e38ee4Smrgfunc_features () 921b3e38ee4Smrg{ 922a73423d7Smrg echo "host: $host" 92350806d53Smrg if test "$build_libtool_libs" = yes; then 924a73423d7Smrg echo "enable shared libraries" 92550806d53Smrg else 926a73423d7Smrg echo "disable shared libraries" 92750806d53Smrg fi 92850806d53Smrg if test "$build_old_libs" = yes; then 929a73423d7Smrg echo "enable static libraries" 93050806d53Smrg else 931a73423d7Smrg echo "disable static libraries" 93250806d53Smrg fi 933b3e38ee4Smrg 93450806d53Smrg exit $? 935b3e38ee4Smrg} 93650806d53Smrg 937b3e38ee4Smrg# func_enable_tag tagname 938b3e38ee4Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939b3e38ee4Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940b3e38ee4Smrg# variable here. 941b3e38ee4Smrgfunc_enable_tag () 942b3e38ee4Smrg{ 943b3e38ee4Smrg # Global variable: 944b3e38ee4Smrg tagname="$1" 94550806d53Smrg 946b3e38ee4Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947b3e38ee4Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948b3e38ee4Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 949af1a9c97Smrg 950b3e38ee4Smrg # Validate tagname. 951b3e38ee4Smrg case $tagname in 952b3e38ee4Smrg *[!-_A-Za-z0-9,/]*) 953b3e38ee4Smrg func_fatal_error "invalid tag name: $tagname" 954b3e38ee4Smrg ;; 955b3e38ee4Smrg esac 95650806d53Smrg 957b3e38ee4Smrg # Don't test for the "default" C tag, as we know it's 958b3e38ee4Smrg # there but not specially marked. 959b3e38ee4Smrg case $tagname in 960b3e38ee4Smrg CC) ;; 961b3e38ee4Smrg *) 962b3e38ee4Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963b3e38ee4Smrg taglist="$taglist $tagname" 964b3e38ee4Smrg 965b3e38ee4Smrg # Evaluate the configuration. Be careful to quote the path 966b3e38ee4Smrg # and the sed script, to avoid splitting on whitespace, but 967b3e38ee4Smrg # also don't use non-portable quotes within backquotes within 968b3e38ee4Smrg # quotes we have to do it in 2 steps: 969b3e38ee4Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970b3e38ee4Smrg eval "$extractedcf" 971b3e38ee4Smrg else 972b3e38ee4Smrg func_error "ignoring unknown tag $tagname" 973b3e38ee4Smrg fi 974b3e38ee4Smrg ;; 975b3e38ee4Smrg esac 976b3e38ee4Smrg} 977b3e38ee4Smrg 978a73423d7Smrg# func_check_version_match 979a73423d7Smrg# Ensure that we are using m4 macros, and libtool script from the same 980a73423d7Smrg# release of libtool. 981a73423d7Smrgfunc_check_version_match () 982b3e38ee4Smrg{ 983a73423d7Smrg if test "$package_revision" != "$macro_revision"; then 984a73423d7Smrg if test "$VERSION" != "$macro_version"; then 985a73423d7Smrg if test -z "$macro_version"; then 986a73423d7Smrg cat >&2 <<_LT_EOF 987a73423d7Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 988a73423d7Smrg$progname: definition of this LT_INIT comes from an older release. 989a73423d7Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 990a73423d7Smrg$progname: and run autoconf again. 991a73423d7Smrg_LT_EOF 992a73423d7Smrg else 993a73423d7Smrg cat >&2 <<_LT_EOF 994a73423d7Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 995a73423d7Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 996a73423d7Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 997a73423d7Smrg$progname: and run autoconf again. 998a73423d7Smrg_LT_EOF 999a73423d7Smrg fi 1000a73423d7Smrg else 1001a73423d7Smrg cat >&2 <<_LT_EOF 1002a73423d7Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1003a73423d7Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1004a73423d7Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1005a73423d7Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 1006a73423d7Smrg_LT_EOF 1007a73423d7Smrg fi 1008a73423d7Smrg 1009a73423d7Smrg exit $EXIT_MISMATCH 1010a73423d7Smrg fi 1011a73423d7Smrg} 1012a73423d7Smrg 1013a73423d7Smrg 1014a73423d7Smrg# Shorthand for --mode=foo, only valid as the first argument 1015a73423d7Smrgcase $1 in 1016a73423d7Smrgclean|clea|cle|cl) 1017a73423d7Smrg shift; set dummy --mode clean ${1+"$@"}; shift 1018a73423d7Smrg ;; 1019a73423d7Smrgcompile|compil|compi|comp|com|co|c) 1020a73423d7Smrg shift; set dummy --mode compile ${1+"$@"}; shift 1021a73423d7Smrg ;; 1022a73423d7Smrgexecute|execut|execu|exec|exe|ex|e) 1023a73423d7Smrg shift; set dummy --mode execute ${1+"$@"}; shift 1024a73423d7Smrg ;; 1025a73423d7Smrgfinish|finis|fini|fin|fi|f) 1026a73423d7Smrg shift; set dummy --mode finish ${1+"$@"}; shift 1027a73423d7Smrg ;; 1028a73423d7Smrginstall|instal|insta|inst|ins|in|i) 1029a73423d7Smrg shift; set dummy --mode install ${1+"$@"}; shift 1030a73423d7Smrg ;; 1031a73423d7Smrglink|lin|li|l) 1032a73423d7Smrg shift; set dummy --mode link ${1+"$@"}; shift 1033a73423d7Smrg ;; 1034a73423d7Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 1035a73423d7Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 1036a73423d7Smrg ;; 1037a73423d7Smrgesac 1038a73423d7Smrg 1039a73423d7Smrg 1040a73423d7Smrg 1041a73423d7Smrg# Option defaults: 1042a73423d7Smrgopt_debug=: 1043a73423d7Smrgopt_dry_run=false 1044a73423d7Smrgopt_config=false 1045a73423d7Smrgopt_preserve_dup_deps=false 1046a73423d7Smrgopt_features=false 1047a73423d7Smrgopt_finish=false 1048a73423d7Smrgopt_help=false 1049a73423d7Smrgopt_help_all=false 1050a73423d7Smrgopt_silent=: 1051a73423d7Smrgopt_warning=: 1052a73423d7Smrgopt_verbose=: 1053a73423d7Smrgopt_silent=false 1054a73423d7Smrgopt_verbose=false 1055a18ebfb2Smrg 105650806d53Smrg 1057a73423d7Smrg# Parse options once, thoroughly. This comes as soon as possible in the 1058a73423d7Smrg# script to make things like `--version' happen as quickly as we can. 1059a73423d7Smrg{ 1060a73423d7Smrg # this just eases exit handling 1061a73423d7Smrg while test $# -gt 0; do 1062b3e38ee4Smrg opt="$1" 1063b3e38ee4Smrg shift 1064b3e38ee4Smrg case $opt in 1065a73423d7Smrg --debug|-x) opt_debug='set -x' 1066b3e38ee4Smrg func_echo "enabling shell trace mode" 1067b3e38ee4Smrg $opt_debug 1068b3e38ee4Smrg ;; 1069a73423d7Smrg --dry-run|--dryrun|-n) 1070a73423d7Smrg opt_dry_run=: 1071b3e38ee4Smrg ;; 1072a73423d7Smrg --config) 1073a73423d7Smrg opt_config=: 1074a73423d7Smrgfunc_config 1075a73423d7Smrg ;; 1076a73423d7Smrg --dlopen|-dlopen) 1077a73423d7Smrg optarg="$1" 1078a73423d7Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 1079a73423d7Smrg}$optarg" 1080b3e38ee4Smrg shift 1081b3e38ee4Smrg ;; 1082b3e38ee4Smrg --preserve-dup-deps) 1083a73423d7Smrg opt_preserve_dup_deps=: 1084b3e38ee4Smrg ;; 1085a73423d7Smrg --features) 1086a73423d7Smrg opt_features=: 1087a73423d7Smrgfunc_features 1088a73423d7Smrg ;; 1089a73423d7Smrg --finish) 1090a73423d7Smrg opt_finish=: 1091a73423d7Smrgset dummy --mode finish ${1+"$@"}; shift 1092a73423d7Smrg ;; 1093a73423d7Smrg --help) 1094a73423d7Smrg opt_help=: 1095a73423d7Smrg ;; 1096a73423d7Smrg --help-all) 1097a73423d7Smrg opt_help_all=: 1098a73423d7Smrgopt_help=': help-all' 1099a73423d7Smrg ;; 1100a73423d7Smrg --mode) 1101a73423d7Smrg test $# = 0 && func_missing_arg $opt && break 1102a73423d7Smrg optarg="$1" 1103a73423d7Smrg opt_mode="$optarg" 1104a73423d7Smrgcase $optarg in 1105a73423d7Smrg # Valid mode arguments: 1106a73423d7Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 1107a73423d7Smrg 1108a73423d7Smrg # Catch anything else as an error 1109a73423d7Smrg *) func_error "invalid argument for $opt" 1110a73423d7Smrg exit_cmd=exit 1111a73423d7Smrg break 1112a73423d7Smrg ;; 1113a73423d7Smrgesac 1114a73423d7Smrg shift 1115a73423d7Smrg ;; 1116a73423d7Smrg --no-silent|--no-quiet) 1117b3e38ee4Smrg opt_silent=false 1118a73423d7Smrgfunc_append preserve_args " $opt" 1119b3e38ee4Smrg ;; 1120a73423d7Smrg --no-warning|--no-warn) 1121a73423d7Smrg opt_warning=false 1122a73423d7Smrgfunc_append preserve_args " $opt" 1123a73423d7Smrg ;; 1124a73423d7Smrg --no-verbose) 1125a73423d7Smrg opt_verbose=false 1126a73423d7Smrgfunc_append preserve_args " $opt" 1127a73423d7Smrg ;; 1128a73423d7Smrg --silent|--quiet) 1129a73423d7Smrg opt_silent=: 1130a73423d7Smrgfunc_append preserve_args " $opt" 1131a73423d7Smrg opt_verbose=false 1132a73423d7Smrg ;; 1133a73423d7Smrg --verbose|-v) 1134a73423d7Smrg opt_verbose=: 1135a73423d7Smrgfunc_append preserve_args " $opt" 1136a73423d7Smrgopt_silent=false 1137a73423d7Smrg ;; 1138a73423d7Smrg --tag) 1139a73423d7Smrg test $# = 0 && func_missing_arg $opt && break 1140a73423d7Smrg optarg="$1" 1141a73423d7Smrg opt_tag="$optarg" 1142a73423d7Smrgfunc_append preserve_args " $opt $optarg" 1143a73423d7Smrgfunc_enable_tag "$optarg" 1144b3e38ee4Smrg shift 1145b3e38ee4Smrg ;; 1146b3e38ee4Smrg 1147a73423d7Smrg -\?|-h) func_usage ;; 1148a73423d7Smrg --help) func_help ;; 1149a73423d7Smrg --version) func_version ;; 1150a73423d7Smrg 1151b3e38ee4Smrg # Separate optargs to long options: 1152a73423d7Smrg --*=*) 1153a73423d7Smrg func_split_long_opt "$opt" 1154a73423d7Smrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155b3e38ee4Smrg shift 1156b3e38ee4Smrg ;; 1157b3e38ee4Smrg 1158a73423d7Smrg # Separate non-argument short options: 1159a73423d7Smrg -\?*|-h*|-n*|-v*) 1160a73423d7Smrg func_split_short_opt "$opt" 1161a73423d7Smrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 1162a73423d7Smrg shift 1163b3e38ee4Smrg ;; 1164a73423d7Smrg 1165a73423d7Smrg --) break ;; 1166a73423d7Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 1167a73423d7Smrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168b3e38ee4Smrg esac 1169b3e38ee4Smrg done 1170b3e38ee4Smrg 1171a73423d7Smrg # Validate options: 1172a73423d7Smrg 1173a73423d7Smrg # save first non-option argument 1174a73423d7Smrg if test "$#" -gt 0; then 1175a73423d7Smrg nonopt="$opt" 1176a73423d7Smrg shift 1177a73423d7Smrg fi 1178a73423d7Smrg 1179a73423d7Smrg # preserve --debug 1180a73423d7Smrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181b3e38ee4Smrg 1182b3e38ee4Smrg case $host in 1183b3e38ee4Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 1184b3e38ee4Smrg # don't eliminate duplications in $postdeps and $predeps 1185b3e38ee4Smrg opt_duplicate_compiler_generated_deps=: 1186a18ebfb2Smrg ;; 1187a18ebfb2Smrg *) 1188a73423d7Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189b3e38ee4Smrg ;; 1190b3e38ee4Smrg esac 1191af1a9c97Smrg 1192a73423d7Smrg $opt_help || { 1193a73423d7Smrg # Sanity checks first: 1194a73423d7Smrg func_check_version_match 1195b3e38ee4Smrg 1196a73423d7Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1197a73423d7Smrg func_fatal_configuration "not configured to build any kind of library" 1198b3e38ee4Smrg fi 1199b3e38ee4Smrg 1200a73423d7Smrg # Darwin sucks 1201a73423d7Smrg eval std_shrext=\"$shrext_cmds\" 1202b3e38ee4Smrg 1203a73423d7Smrg # Only execute mode is allowed to have -dlopen flags. 1204a73423d7Smrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 1205a73423d7Smrg func_error "unrecognized option \`-dlopen'" 1206a73423d7Smrg $ECHO "$help" 1>&2 1207a73423d7Smrg exit $EXIT_FAILURE 1208a73423d7Smrg fi 120950806d53Smrg 1210a73423d7Smrg # Change the help message to a mode-specific one. 1211a73423d7Smrg generic_help="$help" 1212a73423d7Smrg help="Try \`$progname --help --mode=$opt_mode' for more information." 1213a73423d7Smrg } 1214b3e38ee4Smrg 1215b3e38ee4Smrg 1216a73423d7Smrg # Bail if the options were screwed 1217a73423d7Smrg $exit_cmd $EXIT_FAILURE 1218a73423d7Smrg} 1219b3e38ee4Smrg 1220b3e38ee4Smrg 122150806d53Smrg 122250806d53Smrg 1223a73423d7Smrg## ----------- ## 1224a73423d7Smrg## Main. ## 1225a73423d7Smrg## ----------- ## 122650806d53Smrg 1227b3e38ee4Smrg# func_lalib_p file 1228b3e38ee4Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229b3e38ee4Smrg# This function is only a basic sanity check; it will hardly flush out 1230b3e38ee4Smrg# determined imposters. 1231b3e38ee4Smrgfunc_lalib_p () 1232b3e38ee4Smrg{ 1233b3e38ee4Smrg test -f "$1" && 1234b3e38ee4Smrg $SED -e 4q "$1" 2>/dev/null \ 1235b3e38ee4Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236b3e38ee4Smrg} 123750806d53Smrg 1238b3e38ee4Smrg# func_lalib_unsafe_p file 1239b3e38ee4Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240b3e38ee4Smrg# This function implements the same check as func_lalib_p without 1241b3e38ee4Smrg# resorting to external programs. To this end, it redirects stdin and 1242b3e38ee4Smrg# closes it afterwards, without saving the original file descriptor. 1243b3e38ee4Smrg# As a safety measure, use it only where a negative result would be 1244b3e38ee4Smrg# fatal anyway. Works if `file' does not exist. 1245b3e38ee4Smrgfunc_lalib_unsafe_p () 1246b3e38ee4Smrg{ 1247b3e38ee4Smrg lalib_p=no 1248b3e38ee4Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249b3e38ee4Smrg for lalib_p_l in 1 2 3 4 1250b3e38ee4Smrg do 1251b3e38ee4Smrg read lalib_p_line 1252b3e38ee4Smrg case "$lalib_p_line" in 1253b3e38ee4Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254b3e38ee4Smrg esac 1255b3e38ee4Smrg done 1256b3e38ee4Smrg exec 0<&5 5<&- 1257b3e38ee4Smrg fi 1258b3e38ee4Smrg test "$lalib_p" = yes 1259b3e38ee4Smrg} 126050806d53Smrg 1261b3e38ee4Smrg# func_ltwrapper_script_p file 1262b3e38ee4Smrg# True iff FILE is a libtool wrapper script 1263b3e38ee4Smrg# This function is only a basic sanity check; it will hardly flush out 1264b3e38ee4Smrg# determined imposters. 1265b3e38ee4Smrgfunc_ltwrapper_script_p () 1266b3e38ee4Smrg{ 1267b3e38ee4Smrg func_lalib_p "$1" 1268b3e38ee4Smrg} 126950806d53Smrg 1270b3e38ee4Smrg# func_ltwrapper_executable_p file 1271b3e38ee4Smrg# True iff FILE is a libtool wrapper executable 1272b3e38ee4Smrg# This function is only a basic sanity check; it will hardly flush out 1273b3e38ee4Smrg# determined imposters. 1274b3e38ee4Smrgfunc_ltwrapper_executable_p () 1275b3e38ee4Smrg{ 1276b3e38ee4Smrg func_ltwrapper_exec_suffix= 1277b3e38ee4Smrg case $1 in 1278b3e38ee4Smrg *.exe) ;; 1279b3e38ee4Smrg *) func_ltwrapper_exec_suffix=.exe ;; 1280b3e38ee4Smrg esac 1281b3e38ee4Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282b3e38ee4Smrg} 1283af1a9c97Smrg 1284b3e38ee4Smrg# func_ltwrapper_scriptname file 1285b3e38ee4Smrg# Assumes file is an ltwrapper_executable 1286b3e38ee4Smrg# uses $file to determine the appropriate filename for a 1287b3e38ee4Smrg# temporary ltwrapper_script. 1288b3e38ee4Smrgfunc_ltwrapper_scriptname () 1289b3e38ee4Smrg{ 1290a73423d7Smrg func_dirname_and_basename "$1" "" "." 1291a73423d7Smrg func_stripname '' '.exe' "$func_basename_result" 1292a73423d7Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293b3e38ee4Smrg} 1294b3e38ee4Smrg 1295b3e38ee4Smrg# func_ltwrapper_p file 1296b3e38ee4Smrg# True iff FILE is a libtool wrapper script or wrapper executable 1297b3e38ee4Smrg# This function is only a basic sanity check; it will hardly flush out 1298b3e38ee4Smrg# determined imposters. 1299b3e38ee4Smrgfunc_ltwrapper_p () 1300b3e38ee4Smrg{ 1301b3e38ee4Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302b3e38ee4Smrg} 1303b3e38ee4Smrg 1304b3e38ee4Smrg 1305b3e38ee4Smrg# func_execute_cmds commands fail_cmd 1306b3e38ee4Smrg# Execute tilde-delimited COMMANDS. 1307b3e38ee4Smrg# If FAIL_CMD is given, eval that upon failure. 1308b3e38ee4Smrg# FAIL_CMD may read-access the current command in variable CMD! 1309b3e38ee4Smrgfunc_execute_cmds () 1310b3e38ee4Smrg{ 1311b3e38ee4Smrg $opt_debug 1312b3e38ee4Smrg save_ifs=$IFS; IFS='~' 1313b3e38ee4Smrg for cmd in $1; do 1314b3e38ee4Smrg IFS=$save_ifs 1315b3e38ee4Smrg eval cmd=\"$cmd\" 1316b3e38ee4Smrg func_show_eval "$cmd" "${2-:}" 1317b3e38ee4Smrg done 1318b3e38ee4Smrg IFS=$save_ifs 1319b3e38ee4Smrg} 1320b3e38ee4Smrg 1321b3e38ee4Smrg 1322b3e38ee4Smrg# func_source file 1323b3e38ee4Smrg# Source FILE, adding directory component if necessary. 1324b3e38ee4Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325b3e38ee4Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326b3e38ee4Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327b3e38ee4Smrg# `FILE.' does not work on cygwin managed mounts. 1328b3e38ee4Smrgfunc_source () 1329b3e38ee4Smrg{ 1330b3e38ee4Smrg $opt_debug 1331b3e38ee4Smrg case $1 in 1332b3e38ee4Smrg */* | *\\*) . "$1" ;; 1333b3e38ee4Smrg *) . "./$1" ;; 1334b3e38ee4Smrg esac 1335b3e38ee4Smrg} 1336b3e38ee4Smrg 1337b3e38ee4Smrg 1338a73423d7Smrg# func_resolve_sysroot PATH 1339a73423d7Smrg# Replace a leading = in PATH with a sysroot. Store the result into 1340a73423d7Smrg# func_resolve_sysroot_result 1341a73423d7Smrgfunc_resolve_sysroot () 1342a73423d7Smrg{ 1343a73423d7Smrg func_resolve_sysroot_result=$1 1344a73423d7Smrg case $func_resolve_sysroot_result in 1345a73423d7Smrg =*) 1346a73423d7Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 1347a73423d7Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1348a73423d7Smrg ;; 1349a73423d7Smrg esac 1350a73423d7Smrg} 1351a73423d7Smrg 1352a73423d7Smrg# func_replace_sysroot PATH 1353a73423d7Smrg# If PATH begins with the sysroot, replace it with = and 1354a73423d7Smrg# store the result into func_replace_sysroot_result. 1355a73423d7Smrgfunc_replace_sysroot () 1356a73423d7Smrg{ 1357a73423d7Smrg case "$lt_sysroot:$1" in 1358a73423d7Smrg ?*:"$lt_sysroot"*) 1359a73423d7Smrg func_stripname "$lt_sysroot" '' "$1" 1360a73423d7Smrg func_replace_sysroot_result="=$func_stripname_result" 1361a73423d7Smrg ;; 1362a73423d7Smrg *) 1363a73423d7Smrg # Including no sysroot. 1364a73423d7Smrg func_replace_sysroot_result=$1 1365a73423d7Smrg ;; 1366a73423d7Smrg esac 1367a73423d7Smrg} 1368a73423d7Smrg 1369b3e38ee4Smrg# func_infer_tag arg 1370b3e38ee4Smrg# Infer tagged configuration to use if any are available and 1371b3e38ee4Smrg# if one wasn't chosen via the "--tag" command line option. 1372b3e38ee4Smrg# Only attempt this if the compiler in the base compile 1373b3e38ee4Smrg# command doesn't match the default compiler. 1374b3e38ee4Smrg# arg is usually of the form 'gcc ...' 1375b3e38ee4Smrgfunc_infer_tag () 1376b3e38ee4Smrg{ 1377b3e38ee4Smrg $opt_debug 1378b3e38ee4Smrg if test -n "$available_tags" && test -z "$tagname"; then 1379b3e38ee4Smrg CC_quoted= 1380b3e38ee4Smrg for arg in $CC; do 1381a73423d7Smrg func_append_quoted CC_quoted "$arg" 1382b3e38ee4Smrg done 1383a73423d7Smrg CC_expanded=`func_echo_all $CC` 1384a73423d7Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385b3e38ee4Smrg case $@ in 1386b3e38ee4Smrg # Blanks in the command may have been stripped by the calling shell, 1387b3e38ee4Smrg # but not from the CC environment variable when configure was run. 1388a73423d7Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1389a73423d7Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390b3e38ee4Smrg # Blanks at the start of $base_compile will cause this to fail 1391b3e38ee4Smrg # if we don't check for them as well. 1392b3e38ee4Smrg *) 1393b3e38ee4Smrg for z in $available_tags; do 1394b3e38ee4Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395b3e38ee4Smrg # Evaluate the configuration. 1396b3e38ee4Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397b3e38ee4Smrg CC_quoted= 1398b3e38ee4Smrg for arg in $CC; do 1399b3e38ee4Smrg # Double-quote args containing other shell metacharacters. 1400a73423d7Smrg func_append_quoted CC_quoted "$arg" 1401b3e38ee4Smrg done 1402a73423d7Smrg CC_expanded=`func_echo_all $CC` 1403a73423d7Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404b3e38ee4Smrg case "$@ " in 1405a73423d7Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1406a73423d7Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407b3e38ee4Smrg # The compiler in the base compile command matches 1408b3e38ee4Smrg # the one in the tagged configuration. 1409b3e38ee4Smrg # Assume this is the tagged configuration we want. 1410b3e38ee4Smrg tagname=$z 1411b3e38ee4Smrg break 1412b3e38ee4Smrg ;; 1413b3e38ee4Smrg esac 1414b3e38ee4Smrg fi 1415b3e38ee4Smrg done 1416b3e38ee4Smrg # If $tagname still isn't set, then no tagged configuration 1417b3e38ee4Smrg # was found and let the user know that the "--tag" command 1418b3e38ee4Smrg # line option must be used. 1419b3e38ee4Smrg if test -z "$tagname"; then 1420b3e38ee4Smrg func_echo "unable to infer tagged configuration" 1421b3e38ee4Smrg func_fatal_error "specify a tag with \`--tag'" 1422b3e38ee4Smrg# else 1423b3e38ee4Smrg# func_verbose "using $tagname tagged configuration" 1424b3e38ee4Smrg fi 1425b3e38ee4Smrg ;; 1426b3e38ee4Smrg esac 1427b3e38ee4Smrg fi 1428b3e38ee4Smrg} 1429b3e38ee4Smrg 1430b3e38ee4Smrg 1431b3e38ee4Smrg 1432b3e38ee4Smrg# func_write_libtool_object output_name pic_name nonpic_name 1433b3e38ee4Smrg# Create a libtool object file (analogous to a ".la" file), 1434b3e38ee4Smrg# but don't create it if we're doing a dry run. 1435b3e38ee4Smrgfunc_write_libtool_object () 1436b3e38ee4Smrg{ 1437b3e38ee4Smrg write_libobj=${1} 1438b3e38ee4Smrg if test "$build_libtool_libs" = yes; then 1439b3e38ee4Smrg write_lobj=\'${2}\' 1440b3e38ee4Smrg else 1441b3e38ee4Smrg write_lobj=none 1442b3e38ee4Smrg fi 1443b3e38ee4Smrg 1444b3e38ee4Smrg if test "$build_old_libs" = yes; then 1445b3e38ee4Smrg write_oldobj=\'${3}\' 1446b3e38ee4Smrg else 1447b3e38ee4Smrg write_oldobj=none 1448b3e38ee4Smrg fi 1449b3e38ee4Smrg 1450b3e38ee4Smrg $opt_dry_run || { 1451b3e38ee4Smrg cat >${write_libobj}T <<EOF 1452b3e38ee4Smrg# $write_libobj - a libtool object file 1453b3e38ee4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454b3e38ee4Smrg# 1455b3e38ee4Smrg# Please DO NOT delete this file! 1456b3e38ee4Smrg# It is necessary for linking the library. 1457b3e38ee4Smrg 1458b3e38ee4Smrg# Name of the PIC object. 1459b3e38ee4Smrgpic_object=$write_lobj 1460b3e38ee4Smrg 1461b3e38ee4Smrg# Name of the non-PIC object 1462b3e38ee4Smrgnon_pic_object=$write_oldobj 1463b3e38ee4Smrg 1464b3e38ee4SmrgEOF 1465b3e38ee4Smrg $MV "${write_libobj}T" "${write_libobj}" 1466b3e38ee4Smrg } 1467b3e38ee4Smrg} 1468b3e38ee4Smrg 1469a73423d7Smrg 1470a73423d7Smrg################################################## 1471a73423d7Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1472a73423d7Smrg################################################## 1473a73423d7Smrg 1474a73423d7Smrg# func_convert_core_file_wine_to_w32 ARG 1475a73423d7Smrg# Helper function used by file name conversion functions when $build is *nix, 1476a73423d7Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1477a73423d7Smrg# correctly configured wine environment available, with the winepath program 1478a73423d7Smrg# in $build's $PATH. 1479a73423d7Smrg# 1480a73423d7Smrg# ARG is the $build file name to be converted to w32 format. 1481a73423d7Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1482a73423d7Smrg# be empty on error (or when ARG is empty) 1483a73423d7Smrgfunc_convert_core_file_wine_to_w32 () 1484a73423d7Smrg{ 1485a73423d7Smrg $opt_debug 1486a73423d7Smrg func_convert_core_file_wine_to_w32_result="$1" 1487a73423d7Smrg if test -n "$1"; then 1488a73423d7Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 1489a73423d7Smrg # are forced to check the contents of stdout. On the other hand, if the 1490a73423d7Smrg # command is not found, the shell will set an exit code of 127 and print 1491a73423d7Smrg # *an error message* to stdout. So we must check for both error code of 1492a73423d7Smrg # zero AND non-empty stdout, which explains the odd construction: 1493a73423d7Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 1494a73423d7Smrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1495a73423d7Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 1496a73423d7Smrg $SED -e "$lt_sed_naive_backslashify"` 1497a73423d7Smrg else 1498a73423d7Smrg func_convert_core_file_wine_to_w32_result= 1499a73423d7Smrg fi 1500a73423d7Smrg fi 1501a73423d7Smrg} 1502a73423d7Smrg# end: func_convert_core_file_wine_to_w32 1503a73423d7Smrg 1504a73423d7Smrg 1505a73423d7Smrg# func_convert_core_path_wine_to_w32 ARG 1506a73423d7Smrg# Helper function used by path conversion functions when $build is *nix, and 1507a73423d7Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1508a73423d7Smrg# configured wine environment available, with the winepath program in $build's 1509a73423d7Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 1510a73423d7Smrg# 1511a73423d7Smrg# ARG is path to be converted from $build format to win32. 1512a73423d7Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 1513a73423d7Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 1514a73423d7Smrg# are convertible, then the result may be empty. 1515a73423d7Smrgfunc_convert_core_path_wine_to_w32 () 1516a73423d7Smrg{ 1517a73423d7Smrg $opt_debug 1518a73423d7Smrg # unfortunately, winepath doesn't convert paths, only file names 1519a73423d7Smrg func_convert_core_path_wine_to_w32_result="" 1520a73423d7Smrg if test -n "$1"; then 1521a73423d7Smrg oldIFS=$IFS 1522a73423d7Smrg IFS=: 1523a73423d7Smrg for func_convert_core_path_wine_to_w32_f in $1; do 1524a73423d7Smrg IFS=$oldIFS 1525a73423d7Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 1526a73423d7Smrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1527a73423d7Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 1528a73423d7Smrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1529a73423d7Smrg else 1530a73423d7Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1531a73423d7Smrg fi 1532a73423d7Smrg fi 1533a73423d7Smrg done 1534a73423d7Smrg IFS=$oldIFS 1535a73423d7Smrg fi 1536a73423d7Smrg} 1537a73423d7Smrg# end: func_convert_core_path_wine_to_w32 1538a73423d7Smrg 1539a73423d7Smrg 1540a73423d7Smrg# func_cygpath ARGS... 1541a73423d7Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1542a73423d7Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1543a73423d7Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1544a73423d7Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 1545a73423d7Smrg# file name or path is assumed to be in w32 format, as previously converted 1546a73423d7Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1547a73423d7Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 1548a73423d7Smrg# Cygwin format). Returns an empty string on error. 1549a73423d7Smrg# 1550a73423d7Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 1551a73423d7Smrg# be converted. 1552a73423d7Smrg# 1553a73423d7Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1554a73423d7Smrg# environment variable; do not put it in $PATH. 1555a73423d7Smrgfunc_cygpath () 1556a73423d7Smrg{ 1557a73423d7Smrg $opt_debug 1558a73423d7Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1559a73423d7Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1560a73423d7Smrg if test "$?" -ne 0; then 1561a73423d7Smrg # on failure, ensure result is empty 1562a73423d7Smrg func_cygpath_result= 1563a73423d7Smrg fi 1564a73423d7Smrg else 1565a73423d7Smrg func_cygpath_result= 1566a73423d7Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1567a73423d7Smrg fi 1568a73423d7Smrg} 1569a73423d7Smrg#end: func_cygpath 1570a73423d7Smrg 1571a73423d7Smrg 1572a73423d7Smrg# func_convert_core_msys_to_w32 ARG 1573a73423d7Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 1574a73423d7Smrg# result in func_convert_core_msys_to_w32_result. 1575a73423d7Smrgfunc_convert_core_msys_to_w32 () 1576a73423d7Smrg{ 1577a73423d7Smrg $opt_debug 1578a73423d7Smrg # awkward: cmd appends spaces to result 1579a73423d7Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 1580a73423d7Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1581a73423d7Smrg} 1582a73423d7Smrg#end: func_convert_core_msys_to_w32 1583a73423d7Smrg 1584a73423d7Smrg 1585a73423d7Smrg# func_convert_file_check ARG1 ARG2 1586a73423d7Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 1587a73423d7Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 1588a73423d7Smrg# func_to_host_file_result to ARG1). 1589a73423d7Smrgfunc_convert_file_check () 1590a73423d7Smrg{ 1591a73423d7Smrg $opt_debug 1592a73423d7Smrg if test -z "$2" && test -n "$1" ; then 1593a73423d7Smrg func_error "Could not determine host file name corresponding to" 1594a73423d7Smrg func_error " \`$1'" 1595a73423d7Smrg func_error "Continuing, but uninstalled executables may not work." 1596a73423d7Smrg # Fallback: 1597a73423d7Smrg func_to_host_file_result="$1" 1598a73423d7Smrg fi 1599a73423d7Smrg} 1600a73423d7Smrg# end func_convert_file_check 1601a73423d7Smrg 1602a73423d7Smrg 1603a73423d7Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1604a73423d7Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 1605a73423d7Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1606a73423d7Smrg# func_to_host_file_result to a simplistic fallback value (see below). 1607a73423d7Smrgfunc_convert_path_check () 1608a73423d7Smrg{ 1609a73423d7Smrg $opt_debug 1610a73423d7Smrg if test -z "$4" && test -n "$3"; then 1611a73423d7Smrg func_error "Could not determine the host path corresponding to" 1612a73423d7Smrg func_error " \`$3'" 1613a73423d7Smrg func_error "Continuing, but uninstalled executables may not work." 1614a73423d7Smrg # Fallback. This is a deliberately simplistic "conversion" and 1615a73423d7Smrg # should not be "improved". See libtool.info. 1616a73423d7Smrg if test "x$1" != "x$2"; then 1617a73423d7Smrg lt_replace_pathsep_chars="s|$1|$2|g" 1618a73423d7Smrg func_to_host_path_result=`echo "$3" | 1619a73423d7Smrg $SED -e "$lt_replace_pathsep_chars"` 1620a73423d7Smrg else 1621a73423d7Smrg func_to_host_path_result="$3" 1622a73423d7Smrg fi 1623a73423d7Smrg fi 1624a73423d7Smrg} 1625a73423d7Smrg# end func_convert_path_check 1626a73423d7Smrg 1627a73423d7Smrg 1628a73423d7Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1629a73423d7Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1630a73423d7Smrg# and appending REPL if ORIG matches BACKPAT. 1631a73423d7Smrgfunc_convert_path_front_back_pathsep () 1632a73423d7Smrg{ 1633a73423d7Smrg $opt_debug 1634a73423d7Smrg case $4 in 1635a73423d7Smrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1636a73423d7Smrg ;; 1637a73423d7Smrg esac 1638a73423d7Smrg case $4 in 1639a73423d7Smrg $2 ) func_append func_to_host_path_result "$3" 1640a73423d7Smrg ;; 1641a73423d7Smrg esac 1642a73423d7Smrg} 1643a73423d7Smrg# end func_convert_path_front_back_pathsep 1644a73423d7Smrg 1645a73423d7Smrg 1646a73423d7Smrg################################################## 1647a73423d7Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 1648a73423d7Smrg################################################## 1649a73423d7Smrg# invoked via `$to_host_file_cmd ARG' 1650a73423d7Smrg# 1651a73423d7Smrg# In each case, ARG is the path to be converted from $build to $host format. 1652a73423d7Smrg# Result will be available in $func_to_host_file_result. 1653a73423d7Smrg 1654a73423d7Smrg 1655a73423d7Smrg# func_to_host_file ARG 1656a73423d7Smrg# Converts the file name ARG from $build format to $host format. Return result 1657a73423d7Smrg# in func_to_host_file_result. 1658a73423d7Smrgfunc_to_host_file () 1659a73423d7Smrg{ 1660a73423d7Smrg $opt_debug 1661a73423d7Smrg $to_host_file_cmd "$1" 1662a73423d7Smrg} 1663a73423d7Smrg# end func_to_host_file 1664a73423d7Smrg 1665a73423d7Smrg 1666a73423d7Smrg# func_to_tool_file ARG LAZY 1667a73423d7Smrg# converts the file name ARG from $build format to toolchain format. Return 1668a73423d7Smrg# result in func_to_tool_file_result. If the conversion in use is listed 1669a73423d7Smrg# in (the comma separated) LAZY, no conversion takes place. 1670a73423d7Smrgfunc_to_tool_file () 1671a73423d7Smrg{ 1672a73423d7Smrg $opt_debug 1673a73423d7Smrg case ,$2, in 1674a73423d7Smrg *,"$to_tool_file_cmd",*) 1675a73423d7Smrg func_to_tool_file_result=$1 1676a73423d7Smrg ;; 1677a73423d7Smrg *) 1678a73423d7Smrg $to_tool_file_cmd "$1" 1679a73423d7Smrg func_to_tool_file_result=$func_to_host_file_result 1680a73423d7Smrg ;; 1681a73423d7Smrg esac 1682a73423d7Smrg} 1683a73423d7Smrg# end func_to_tool_file 1684a73423d7Smrg 1685a73423d7Smrg 1686a73423d7Smrg# func_convert_file_noop ARG 1687a73423d7Smrg# Copy ARG to func_to_host_file_result. 1688a73423d7Smrgfunc_convert_file_noop () 1689a73423d7Smrg{ 1690a73423d7Smrg func_to_host_file_result="$1" 1691a73423d7Smrg} 1692a73423d7Smrg# end func_convert_file_noop 1693a73423d7Smrg 1694a73423d7Smrg 1695a73423d7Smrg# func_convert_file_msys_to_w32 ARG 1696a73423d7Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1697a73423d7Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 1698a73423d7Smrg# func_to_host_file_result. 1699a73423d7Smrgfunc_convert_file_msys_to_w32 () 1700a73423d7Smrg{ 1701a73423d7Smrg $opt_debug 1702a73423d7Smrg func_to_host_file_result="$1" 1703a73423d7Smrg if test -n "$1"; then 1704a73423d7Smrg func_convert_core_msys_to_w32 "$1" 1705a73423d7Smrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1706a73423d7Smrg fi 1707a73423d7Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1708a73423d7Smrg} 1709a73423d7Smrg# end func_convert_file_msys_to_w32 1710a73423d7Smrg 1711a73423d7Smrg 1712a73423d7Smrg# func_convert_file_cygwin_to_w32 ARG 1713a73423d7Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 1714a73423d7Smrg# func_to_host_file_result. 1715a73423d7Smrgfunc_convert_file_cygwin_to_w32 () 1716a73423d7Smrg{ 1717a73423d7Smrg $opt_debug 1718a73423d7Smrg func_to_host_file_result="$1" 1719a73423d7Smrg if test -n "$1"; then 1720a73423d7Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1721a73423d7Smrg # LT_CYGPATH in this case. 1722a73423d7Smrg func_to_host_file_result=`cygpath -m "$1"` 1723a73423d7Smrg fi 1724a73423d7Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1725a73423d7Smrg} 1726a73423d7Smrg# end func_convert_file_cygwin_to_w32 1727a73423d7Smrg 1728a73423d7Smrg 1729a73423d7Smrg# func_convert_file_nix_to_w32 ARG 1730a73423d7Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 1731a73423d7Smrg# and a working winepath. Returns result in func_to_host_file_result. 1732a73423d7Smrgfunc_convert_file_nix_to_w32 () 1733a73423d7Smrg{ 1734a73423d7Smrg $opt_debug 1735a73423d7Smrg func_to_host_file_result="$1" 1736a73423d7Smrg if test -n "$1"; then 1737a73423d7Smrg func_convert_core_file_wine_to_w32 "$1" 1738a73423d7Smrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1739a73423d7Smrg fi 1740a73423d7Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1741a73423d7Smrg} 1742a73423d7Smrg# end func_convert_file_nix_to_w32 1743a73423d7Smrg 1744a73423d7Smrg 1745a73423d7Smrg# func_convert_file_msys_to_cygwin ARG 1746a73423d7Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1747a73423d7Smrg# Returns result in func_to_host_file_result. 1748a73423d7Smrgfunc_convert_file_msys_to_cygwin () 1749a73423d7Smrg{ 1750a73423d7Smrg $opt_debug 1751a73423d7Smrg func_to_host_file_result="$1" 1752a73423d7Smrg if test -n "$1"; then 1753a73423d7Smrg func_convert_core_msys_to_w32 "$1" 1754a73423d7Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 1755a73423d7Smrg func_to_host_file_result="$func_cygpath_result" 1756a73423d7Smrg fi 1757a73423d7Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1758a73423d7Smrg} 1759a73423d7Smrg# end func_convert_file_msys_to_cygwin 1760a73423d7Smrg 1761a73423d7Smrg 1762a73423d7Smrg# func_convert_file_nix_to_cygwin ARG 1763a73423d7Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1764a73423d7Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1765a73423d7Smrg# in func_to_host_file_result. 1766a73423d7Smrgfunc_convert_file_nix_to_cygwin () 1767a73423d7Smrg{ 1768a73423d7Smrg $opt_debug 1769a73423d7Smrg func_to_host_file_result="$1" 1770a73423d7Smrg if test -n "$1"; then 1771a73423d7Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1772a73423d7Smrg func_convert_core_file_wine_to_w32 "$1" 1773a73423d7Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 1774a73423d7Smrg func_to_host_file_result="$func_cygpath_result" 1775a73423d7Smrg fi 1776a73423d7Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1777a73423d7Smrg} 1778a73423d7Smrg# end func_convert_file_nix_to_cygwin 1779a73423d7Smrg 1780a73423d7Smrg 1781a73423d7Smrg############################################# 1782a73423d7Smrg# $build to $host PATH CONVERSION FUNCTIONS # 1783a73423d7Smrg############################################# 1784a73423d7Smrg# invoked via `$to_host_path_cmd ARG' 1785a73423d7Smrg# 1786a73423d7Smrg# In each case, ARG is the path to be converted from $build to $host format. 1787a73423d7Smrg# The result will be available in $func_to_host_path_result. 1788a73423d7Smrg# 1789a73423d7Smrg# Path separators are also converted from $build format to $host format. If 1790a73423d7Smrg# ARG begins or ends with a path separator character, it is preserved (but 1791a73423d7Smrg# converted to $host format) on output. 1792a73423d7Smrg# 1793a73423d7Smrg# All path conversion functions are named using the following convention: 1794a73423d7Smrg# file name conversion function : func_convert_file_X_to_Y () 1795a73423d7Smrg# path conversion function : func_convert_path_X_to_Y () 1796a73423d7Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 1797a73423d7Smrg# same. If conversion functions are added for new $build/$host combinations, 1798a73423d7Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1799a73423d7Smrg# will break. 1800a73423d7Smrg 1801a73423d7Smrg 1802a73423d7Smrg# func_init_to_host_path_cmd 1803a73423d7Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1804a73423d7Smrg# appropriate value, based on the value of $to_host_file_cmd. 1805a73423d7Smrgto_host_path_cmd= 1806a73423d7Smrgfunc_init_to_host_path_cmd () 1807a73423d7Smrg{ 1808a73423d7Smrg $opt_debug 1809a73423d7Smrg if test -z "$to_host_path_cmd"; then 1810a73423d7Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 1811a73423d7Smrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 1812a73423d7Smrg fi 1813a73423d7Smrg} 1814a73423d7Smrg 1815a73423d7Smrg 1816a73423d7Smrg# func_to_host_path ARG 1817a73423d7Smrg# Converts the path ARG from $build format to $host format. Return result 1818a73423d7Smrg# in func_to_host_path_result. 1819a73423d7Smrgfunc_to_host_path () 1820a73423d7Smrg{ 1821a73423d7Smrg $opt_debug 1822a73423d7Smrg func_init_to_host_path_cmd 1823a73423d7Smrg $to_host_path_cmd "$1" 1824a73423d7Smrg} 1825a73423d7Smrg# end func_to_host_path 1826a73423d7Smrg 1827a73423d7Smrg 1828a73423d7Smrg# func_convert_path_noop ARG 1829a73423d7Smrg# Copy ARG to func_to_host_path_result. 1830a73423d7Smrgfunc_convert_path_noop () 1831a73423d7Smrg{ 1832a73423d7Smrg func_to_host_path_result="$1" 1833a73423d7Smrg} 1834a73423d7Smrg# end func_convert_path_noop 1835a73423d7Smrg 1836a73423d7Smrg 1837a73423d7Smrg# func_convert_path_msys_to_w32 ARG 1838a73423d7Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1839a73423d7Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 1840a73423d7Smrg# func_to_host_path_result. 1841a73423d7Smrgfunc_convert_path_msys_to_w32 () 1842a73423d7Smrg{ 1843a73423d7Smrg $opt_debug 1844a73423d7Smrg func_to_host_path_result="$1" 1845a73423d7Smrg if test -n "$1"; then 1846a73423d7Smrg # Remove leading and trailing path separator characters from ARG. MSYS 1847a73423d7Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1848a73423d7Smrg # and winepath ignores them completely. 1849a73423d7Smrg func_stripname : : "$1" 1850a73423d7Smrg func_to_host_path_tmp1=$func_stripname_result 1851a73423d7Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1852a73423d7Smrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1853a73423d7Smrg func_convert_path_check : ";" \ 1854a73423d7Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1855a73423d7Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1856a73423d7Smrg fi 1857a73423d7Smrg} 1858a73423d7Smrg# end func_convert_path_msys_to_w32 1859a73423d7Smrg 1860a73423d7Smrg 1861a73423d7Smrg# func_convert_path_cygwin_to_w32 ARG 1862a73423d7Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 1863a73423d7Smrg# func_to_host_file_result. 1864a73423d7Smrgfunc_convert_path_cygwin_to_w32 () 1865a73423d7Smrg{ 1866a73423d7Smrg $opt_debug 1867a73423d7Smrg func_to_host_path_result="$1" 1868a73423d7Smrg if test -n "$1"; then 1869a73423d7Smrg # See func_convert_path_msys_to_w32: 1870a73423d7Smrg func_stripname : : "$1" 1871a73423d7Smrg func_to_host_path_tmp1=$func_stripname_result 1872a73423d7Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1873a73423d7Smrg func_convert_path_check : ";" \ 1874a73423d7Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1875a73423d7Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1876a73423d7Smrg fi 1877a73423d7Smrg} 1878a73423d7Smrg# end func_convert_path_cygwin_to_w32 1879a73423d7Smrg 1880a73423d7Smrg 1881a73423d7Smrg# func_convert_path_nix_to_w32 ARG 1882a73423d7Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 1883a73423d7Smrg# a working winepath. Returns result in func_to_host_file_result. 1884a73423d7Smrgfunc_convert_path_nix_to_w32 () 1885a73423d7Smrg{ 1886a73423d7Smrg $opt_debug 1887a73423d7Smrg func_to_host_path_result="$1" 1888a73423d7Smrg if test -n "$1"; then 1889a73423d7Smrg # See func_convert_path_msys_to_w32: 1890a73423d7Smrg func_stripname : : "$1" 1891a73423d7Smrg func_to_host_path_tmp1=$func_stripname_result 1892a73423d7Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1893a73423d7Smrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1894a73423d7Smrg func_convert_path_check : ";" \ 1895a73423d7Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1896a73423d7Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1897a73423d7Smrg fi 1898a73423d7Smrg} 1899a73423d7Smrg# end func_convert_path_nix_to_w32 1900a73423d7Smrg 1901a73423d7Smrg 1902a73423d7Smrg# func_convert_path_msys_to_cygwin ARG 1903a73423d7Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1904a73423d7Smrg# Returns result in func_to_host_file_result. 1905a73423d7Smrgfunc_convert_path_msys_to_cygwin () 1906a73423d7Smrg{ 1907a73423d7Smrg $opt_debug 1908a73423d7Smrg func_to_host_path_result="$1" 1909a73423d7Smrg if test -n "$1"; then 1910a73423d7Smrg # See func_convert_path_msys_to_w32: 1911a73423d7Smrg func_stripname : : "$1" 1912a73423d7Smrg func_to_host_path_tmp1=$func_stripname_result 1913a73423d7Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1914a73423d7Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 1915a73423d7Smrg func_to_host_path_result="$func_cygpath_result" 1916a73423d7Smrg func_convert_path_check : : \ 1917a73423d7Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1918a73423d7Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1919a73423d7Smrg fi 1920a73423d7Smrg} 1921a73423d7Smrg# end func_convert_path_msys_to_cygwin 1922a73423d7Smrg 1923a73423d7Smrg 1924a73423d7Smrg# func_convert_path_nix_to_cygwin ARG 1925a73423d7Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1926a73423d7Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1927a73423d7Smrg# func_to_host_file_result. 1928a73423d7Smrgfunc_convert_path_nix_to_cygwin () 1929a73423d7Smrg{ 1930a73423d7Smrg $opt_debug 1931a73423d7Smrg func_to_host_path_result="$1" 1932a73423d7Smrg if test -n "$1"; then 1933a73423d7Smrg # Remove leading and trailing path separator characters from 1934a73423d7Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 1935a73423d7Smrg # into '.;' and ';.', and winepath ignores them completely. 1936a73423d7Smrg func_stripname : : "$1" 1937a73423d7Smrg func_to_host_path_tmp1=$func_stripname_result 1938a73423d7Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1939a73423d7Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 1940a73423d7Smrg func_to_host_path_result="$func_cygpath_result" 1941a73423d7Smrg func_convert_path_check : : \ 1942a73423d7Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1943a73423d7Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1944a73423d7Smrg fi 1945a73423d7Smrg} 1946a73423d7Smrg# end func_convert_path_nix_to_cygwin 1947a73423d7Smrg 1948a73423d7Smrg 1949b3e38ee4Smrg# func_mode_compile arg... 1950b3e38ee4Smrgfunc_mode_compile () 1951b3e38ee4Smrg{ 1952b3e38ee4Smrg $opt_debug 1953b3e38ee4Smrg # Get the compilation command and the source file. 1954b3e38ee4Smrg base_compile= 1955b3e38ee4Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956b3e38ee4Smrg suppress_opt=yes 1957b3e38ee4Smrg suppress_output= 1958b3e38ee4Smrg arg_mode=normal 1959b3e38ee4Smrg libobj= 1960b3e38ee4Smrg later= 1961b3e38ee4Smrg pie_flag= 1962b3e38ee4Smrg 1963b3e38ee4Smrg for arg 1964b3e38ee4Smrg do 1965b3e38ee4Smrg case $arg_mode in 1966b3e38ee4Smrg arg ) 1967b3e38ee4Smrg # do not "continue". Instead, add this to base_compile 1968b3e38ee4Smrg lastarg="$arg" 1969b3e38ee4Smrg arg_mode=normal 1970b3e38ee4Smrg ;; 1971b3e38ee4Smrg 1972b3e38ee4Smrg target ) 1973b3e38ee4Smrg libobj="$arg" 1974b3e38ee4Smrg arg_mode=normal 1975b3e38ee4Smrg continue 1976b3e38ee4Smrg ;; 1977b3e38ee4Smrg 1978b3e38ee4Smrg normal ) 1979b3e38ee4Smrg # Accept any command-line options. 1980b3e38ee4Smrg case $arg in 1981b3e38ee4Smrg -o) 1982b3e38ee4Smrg test -n "$libobj" && \ 1983b3e38ee4Smrg func_fatal_error "you cannot specify \`-o' more than once" 1984b3e38ee4Smrg arg_mode=target 1985b3e38ee4Smrg continue 1986b3e38ee4Smrg ;; 1987b3e38ee4Smrg 1988b3e38ee4Smrg -pie | -fpie | -fPIE) 1989a73423d7Smrg func_append pie_flag " $arg" 1990b3e38ee4Smrg continue 1991b3e38ee4Smrg ;; 1992b3e38ee4Smrg 1993b3e38ee4Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1994a73423d7Smrg func_append later " $arg" 1995b3e38ee4Smrg continue 1996b3e38ee4Smrg ;; 1997b3e38ee4Smrg 1998b3e38ee4Smrg -no-suppress) 199950806d53Smrg suppress_opt=no 200050806d53Smrg continue 200150806d53Smrg ;; 200250806d53Smrg 200350806d53Smrg -Xcompiler) 200450806d53Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 200550806d53Smrg continue # The current "srcfile" will either be retained or 200650806d53Smrg ;; # replaced later. I would guess that would be a bug. 200750806d53Smrg 200850806d53Smrg -Wc,*) 2009b3e38ee4Smrg func_stripname '-Wc,' '' "$arg" 2010b3e38ee4Smrg args=$func_stripname_result 201150806d53Smrg lastarg= 201250806d53Smrg save_ifs="$IFS"; IFS=',' 2013b3e38ee4Smrg for arg in $args; do 201450806d53Smrg IFS="$save_ifs" 2015a73423d7Smrg func_append_quoted lastarg "$arg" 201650806d53Smrg done 201750806d53Smrg IFS="$save_ifs" 2018b3e38ee4Smrg func_stripname ' ' '' "$lastarg" 2019b3e38ee4Smrg lastarg=$func_stripname_result 202050806d53Smrg 202150806d53Smrg # Add the arguments to base_compile. 2022a73423d7Smrg func_append base_compile " $lastarg" 202350806d53Smrg continue 202450806d53Smrg ;; 202550806d53Smrg 2026b3e38ee4Smrg *) 202750806d53Smrg # Accept the current argument as the source file. 202850806d53Smrg # The previous "srcfile" becomes the current argument. 202950806d53Smrg # 203050806d53Smrg lastarg="$srcfile" 203150806d53Smrg srcfile="$arg" 203250806d53Smrg ;; 203350806d53Smrg esac # case $arg 203450806d53Smrg ;; 203550806d53Smrg esac # case $arg_mode 203650806d53Smrg 203750806d53Smrg # Aesthetically quote the previous argument. 2038a73423d7Smrg func_append_quoted base_compile "$lastarg" 203950806d53Smrg done # for arg 204050806d53Smrg 204150806d53Smrg case $arg_mode in 204250806d53Smrg arg) 2043b3e38ee4Smrg func_fatal_error "you must specify an argument for -Xcompile" 204450806d53Smrg ;; 204550806d53Smrg target) 2046b3e38ee4Smrg func_fatal_error "you must specify a target with \`-o'" 204750806d53Smrg ;; 204850806d53Smrg *) 204950806d53Smrg # Get the name of the library object. 2050b3e38ee4Smrg test -z "$libobj" && { 2051b3e38ee4Smrg func_basename "$srcfile" 2052b3e38ee4Smrg libobj="$func_basename_result" 2053b3e38ee4Smrg } 205450806d53Smrg ;; 205550806d53Smrg esac 205650806d53Smrg 205750806d53Smrg # Recognize several different file suffixes. 205850806d53Smrg # If the user specifies -o file.o, it is replaced with file.lo 205950806d53Smrg case $libobj in 2060b3e38ee4Smrg *.[cCFSifmso] | \ 2061b3e38ee4Smrg *.ada | *.adb | *.ads | *.asm | \ 2062b3e38ee4Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063a73423d7Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064b3e38ee4Smrg func_xform "$libobj" 2065b3e38ee4Smrg libobj=$func_xform_result 2066b3e38ee4Smrg ;; 206750806d53Smrg esac 206850806d53Smrg 206950806d53Smrg case $libobj in 2070b3e38ee4Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 207150806d53Smrg *) 2072b3e38ee4Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 207350806d53Smrg ;; 207450806d53Smrg esac 207550806d53Smrg 207650806d53Smrg func_infer_tag $base_compile 207750806d53Smrg 207850806d53Smrg for arg in $later; do 207950806d53Smrg case $arg in 2080b3e38ee4Smrg -shared) 2081b3e38ee4Smrg test "$build_libtool_libs" != yes && \ 2082b3e38ee4Smrg func_fatal_configuration "can not build a shared library" 2083b3e38ee4Smrg build_old_libs=no 2084b3e38ee4Smrg continue 2085b3e38ee4Smrg ;; 2086b3e38ee4Smrg 208750806d53Smrg -static) 2088b3e38ee4Smrg build_libtool_libs=no 208950806d53Smrg build_old_libs=yes 209050806d53Smrg continue 209150806d53Smrg ;; 209250806d53Smrg 209350806d53Smrg -prefer-pic) 209450806d53Smrg pic_mode=yes 209550806d53Smrg continue 209650806d53Smrg ;; 209750806d53Smrg 209850806d53Smrg -prefer-non-pic) 209950806d53Smrg pic_mode=no 210050806d53Smrg continue 210150806d53Smrg ;; 210250806d53Smrg esac 210350806d53Smrg done 210450806d53Smrg 2105b3e38ee4Smrg func_quote_for_eval "$libobj" 2106b3e38ee4Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107b3e38ee4Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108b3e38ee4Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109b3e38ee4Smrg func_dirname_and_basename "$obj" "/" "" 2110b3e38ee4Smrg objname="$func_basename_result" 2111b3e38ee4Smrg xdir="$func_dirname_result" 211250806d53Smrg lobj=${xdir}$objdir/$objname 211350806d53Smrg 2114b3e38ee4Smrg test -z "$base_compile" && \ 2115b3e38ee4Smrg func_fatal_help "you must specify a compilation command" 211650806d53Smrg 211750806d53Smrg # Delete any leftover library objects. 211850806d53Smrg if test "$build_old_libs" = yes; then 211950806d53Smrg removelist="$obj $lobj $libobj ${libobj}T" 212050806d53Smrg else 212150806d53Smrg removelist="$lobj $libobj ${libobj}T" 212250806d53Smrg fi 212350806d53Smrg 212450806d53Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 212550806d53Smrg case $host_os in 2126b3e38ee4Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 212750806d53Smrg pic_mode=default 212850806d53Smrg ;; 212950806d53Smrg esac 213050806d53Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 213150806d53Smrg # non-PIC code in shared libraries is not supported 213250806d53Smrg pic_mode=default 213350806d53Smrg fi 213450806d53Smrg 213550806d53Smrg # Calculate the filename of the output object if compiler does 213650806d53Smrg # not support -o with -c 213750806d53Smrg if test "$compiler_c_o" = no; then 2138a73423d7Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 213950806d53Smrg lockfile="$output_obj.lock" 214050806d53Smrg else 214150806d53Smrg output_obj= 214250806d53Smrg need_locks=no 214350806d53Smrg lockfile= 214450806d53Smrg fi 214550806d53Smrg 214650806d53Smrg # Lock this critical section if it is needed 214750806d53Smrg # We use this script file to make the link, it avoids creating a new file 214850806d53Smrg if test "$need_locks" = yes; then 2149b3e38ee4Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150b3e38ee4Smrg func_echo "Waiting for $lockfile to be removed" 215150806d53Smrg sleep 2 215250806d53Smrg done 215350806d53Smrg elif test "$need_locks" = warn; then 215450806d53Smrg if test -f "$lockfile"; then 2155b3e38ee4Smrg $ECHO "\ 215650806d53Smrg*** ERROR, $lockfile exists and contains: 215750806d53Smrg`cat $lockfile 2>/dev/null` 215850806d53Smrg 215950806d53SmrgThis indicates that another process is trying to use the same 216050806d53Smrgtemporary object file, and libtool could not work around it because 216150806d53Smrgyour compiler does not support \`-c' and \`-o' together. If you 216250806d53Smrgrepeat this compilation, it may succeed, by chance, but you had better 216350806d53Smrgavoid parallel builds (make -j) in this platform, or get a better 216450806d53Smrgcompiler." 216550806d53Smrg 2166b3e38ee4Smrg $opt_dry_run || $RM $removelist 216750806d53Smrg exit $EXIT_FAILURE 216850806d53Smrg fi 2169a73423d7Smrg func_append removelist " $output_obj" 2170b3e38ee4Smrg $ECHO "$srcfile" > "$lockfile" 217150806d53Smrg fi 217250806d53Smrg 2173b3e38ee4Smrg $opt_dry_run || $RM $removelist 2174a73423d7Smrg func_append removelist " $lockfile" 2175b3e38ee4Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176b3e38ee4Smrg 2177a73423d7Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2178a73423d7Smrg srcfile=$func_to_tool_file_result 2179b3e38ee4Smrg func_quote_for_eval "$srcfile" 2180b3e38ee4Smrg qsrcfile=$func_quote_for_eval_result 218150806d53Smrg 218250806d53Smrg # Only build a PIC object if we are building libtool libraries. 218350806d53Smrg if test "$build_libtool_libs" = yes; then 218450806d53Smrg # Without this assignment, base_compile gets emptied. 218550806d53Smrg fbsd_hideous_sh_bug=$base_compile 218650806d53Smrg 218750806d53Smrg if test "$pic_mode" != no; then 218850806d53Smrg command="$base_compile $qsrcfile $pic_flag" 218950806d53Smrg else 219050806d53Smrg # Don't build PIC code 219150806d53Smrg command="$base_compile $qsrcfile" 219250806d53Smrg fi 219350806d53Smrg 2194b3e38ee4Smrg func_mkdir_p "$xdir$objdir" 219550806d53Smrg 219650806d53Smrg if test -z "$output_obj"; then 219750806d53Smrg # Place PIC objects in $objdir 2198a73423d7Smrg func_append command " -o $lobj" 219950806d53Smrg fi 220050806d53Smrg 2201b3e38ee4Smrg func_show_eval_locale "$command" \ 2202b3e38ee4Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 220350806d53Smrg 220450806d53Smrg if test "$need_locks" = warn && 220550806d53Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206b3e38ee4Smrg $ECHO "\ 220750806d53Smrg*** ERROR, $lockfile contains: 220850806d53Smrg`cat $lockfile 2>/dev/null` 220950806d53Smrg 221050806d53Smrgbut it should contain: 221150806d53Smrg$srcfile 221250806d53Smrg 221350806d53SmrgThis indicates that another process is trying to use the same 221450806d53Smrgtemporary object file, and libtool could not work around it because 221550806d53Smrgyour compiler does not support \`-c' and \`-o' together. If you 221650806d53Smrgrepeat this compilation, it may succeed, by chance, but you had better 221750806d53Smrgavoid parallel builds (make -j) in this platform, or get a better 221850806d53Smrgcompiler." 221950806d53Smrg 2220b3e38ee4Smrg $opt_dry_run || $RM $removelist 222150806d53Smrg exit $EXIT_FAILURE 222250806d53Smrg fi 222350806d53Smrg 222450806d53Smrg # Just move the object if needed, then go on to compile the next one 222550806d53Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226b3e38ee4Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227b3e38ee4Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 222850806d53Smrg fi 222950806d53Smrg 223050806d53Smrg # Allow error messages only from the first compilation. 223150806d53Smrg if test "$suppress_opt" = yes; then 2232b3e38ee4Smrg suppress_output=' >/dev/null 2>&1' 223350806d53Smrg fi 223450806d53Smrg fi 223550806d53Smrg 223650806d53Smrg # Only build a position-dependent object if we build old libraries. 223750806d53Smrg if test "$build_old_libs" = yes; then 223850806d53Smrg if test "$pic_mode" != yes; then 223950806d53Smrg # Don't build PIC code 2240b3e38ee4Smrg command="$base_compile $qsrcfile$pie_flag" 224150806d53Smrg else 224250806d53Smrg command="$base_compile $qsrcfile $pic_flag" 224350806d53Smrg fi 224450806d53Smrg if test "$compiler_c_o" = yes; then 2245a73423d7Smrg func_append command " -o $obj" 224650806d53Smrg fi 224750806d53Smrg 224850806d53Smrg # Suppress compiler output if we already did a PIC compilation. 2249a73423d7Smrg func_append command "$suppress_output" 2250b3e38ee4Smrg func_show_eval_locale "$command" \ 2251b3e38ee4Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 225250806d53Smrg 225350806d53Smrg if test "$need_locks" = warn && 225450806d53Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255b3e38ee4Smrg $ECHO "\ 225650806d53Smrg*** ERROR, $lockfile contains: 225750806d53Smrg`cat $lockfile 2>/dev/null` 225850806d53Smrg 225950806d53Smrgbut it should contain: 226050806d53Smrg$srcfile 226150806d53Smrg 226250806d53SmrgThis indicates that another process is trying to use the same 226350806d53Smrgtemporary object file, and libtool could not work around it because 226450806d53Smrgyour compiler does not support \`-c' and \`-o' together. If you 226550806d53Smrgrepeat this compilation, it may succeed, by chance, but you had better 226650806d53Smrgavoid parallel builds (make -j) in this platform, or get a better 226750806d53Smrgcompiler." 226850806d53Smrg 2269b3e38ee4Smrg $opt_dry_run || $RM $removelist 227050806d53Smrg exit $EXIT_FAILURE 227150806d53Smrg fi 227250806d53Smrg 227350806d53Smrg # Just move the object if needed 227450806d53Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275b3e38ee4Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276b3e38ee4Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 227750806d53Smrg fi 227850806d53Smrg fi 227950806d53Smrg 2280b3e38ee4Smrg $opt_dry_run || { 2281b3e38ee4Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 228250806d53Smrg 2283b3e38ee4Smrg # Unlock the critical section if it was locked 2284b3e38ee4Smrg if test "$need_locks" != no; then 2285b3e38ee4Smrg removelist=$lockfile 2286b3e38ee4Smrg $RM "$lockfile" 2287b3e38ee4Smrg fi 2288b3e38ee4Smrg } 228950806d53Smrg 229050806d53Smrg exit $EXIT_SUCCESS 2291b3e38ee4Smrg} 229250806d53Smrg 2293b3e38ee4Smrg$opt_help || { 2294a73423d7Smrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295b3e38ee4Smrg} 229650806d53Smrg 2297b3e38ee4Smrgfunc_mode_help () 2298b3e38ee4Smrg{ 2299b3e38ee4Smrg # We need to display help for each of the modes. 2300a73423d7Smrg case $opt_mode in 2301b3e38ee4Smrg "") 2302b3e38ee4Smrg # Generic help is extracted from the usage comments 2303b3e38ee4Smrg # at the start of this file. 2304b3e38ee4Smrg func_help 2305b3e38ee4Smrg ;; 230650806d53Smrg 2307b3e38ee4Smrg clean) 2308b3e38ee4Smrg $ECHO \ 2309b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 231050806d53Smrg 2311b3e38ee4SmrgRemove files from the build directory. 231250806d53Smrg 2313b3e38ee4SmrgRM is the name of the program to use to delete files associated with each FILE 2314b3e38ee4Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315b3e38ee4Smrgto RM. 231650806d53Smrg 2317b3e38ee4SmrgIf FILE is a libtool library, object or program, all the files associated 2318b3e38ee4Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319b3e38ee4Smrg ;; 232050806d53Smrg 2321b3e38ee4Smrg compile) 2322b3e38ee4Smrg $ECHO \ 2323b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 232450806d53Smrg 2325b3e38ee4SmrgCompile a source file into a libtool library object. 232650806d53Smrg 2327b3e38ee4SmrgThis mode accepts the following additional options: 232850806d53Smrg 2329b3e38ee4Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330b3e38ee4Smrg -no-suppress do not suppress compiler output for multiple passes 2331a73423d7Smrg -prefer-pic try to build PIC objects only 2332a73423d7Smrg -prefer-non-pic try to build non-PIC objects only 2333b3e38ee4Smrg -shared do not build a \`.o' file suitable for static linking 2334b3e38ee4Smrg -static only build a \`.o' file suitable for static linking 2335a73423d7Smrg -Wc,FLAG pass FLAG directly to the compiler 233650806d53Smrg 2337b3e38ee4SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338b3e38ee4Smrgfrom the given SOURCEFILE. 233950806d53Smrg 2340b3e38ee4SmrgThe output file name is determined by removing the directory component from 2341b3e38ee4SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342b3e38ee4Smrglibrary object suffix, \`.lo'." 2343b3e38ee4Smrg ;; 234450806d53Smrg 2345b3e38ee4Smrg execute) 2346b3e38ee4Smrg $ECHO \ 2347b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 234850806d53Smrg 2349b3e38ee4SmrgAutomatically set library path, then run a program. 235050806d53Smrg 2351b3e38ee4SmrgThis mode accepts the following additional options: 235250806d53Smrg 2353b3e38ee4Smrg -dlopen FILE add the directory containing FILE to the library path 235450806d53Smrg 2355b3e38ee4SmrgThis mode sets the library path environment variable according to \`-dlopen' 2356b3e38ee4Smrgflags. 235750806d53Smrg 2358b3e38ee4SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359b3e38ee4Smrginto their corresponding uninstalled binary, and any of their required library 2360b3e38ee4Smrgdirectories are added to the library path. 236150806d53Smrg 2362b3e38ee4SmrgThen, COMMAND is executed, with ARGS as arguments." 2363b3e38ee4Smrg ;; 236450806d53Smrg 2365b3e38ee4Smrg finish) 2366b3e38ee4Smrg $ECHO \ 2367b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 236850806d53Smrg 2369b3e38ee4SmrgComplete the installation of libtool libraries. 237050806d53Smrg 2371b3e38ee4SmrgEach LIBDIR is a directory that contains libtool libraries. 237250806d53Smrg 2373b3e38ee4SmrgThe commands that this mode executes may require superuser privileges. Use 2374b3e38ee4Smrgthe \`--dry-run' option if you just want to see what would be executed." 2375b3e38ee4Smrg ;; 237650806d53Smrg 2377b3e38ee4Smrg install) 2378b3e38ee4Smrg $ECHO \ 2379b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 238050806d53Smrg 2381b3e38ee4SmrgInstall executables or libraries. 238250806d53Smrg 2383b3e38ee4SmrgINSTALL-COMMAND is the installation command. The first component should be 2384b3e38ee4Smrgeither the \`install' or \`cp' program. 238550806d53Smrg 2386b3e38ee4SmrgThe following components of INSTALL-COMMAND are treated specially: 238750806d53Smrg 2388a73423d7Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 238950806d53Smrg 2390b3e38ee4SmrgThe rest of the components are interpreted as arguments to that command (only 2391b3e38ee4SmrgBSD-compatible install options are recognized)." 2392b3e38ee4Smrg ;; 239350806d53Smrg 2394b3e38ee4Smrg link) 2395b3e38ee4Smrg $ECHO \ 2396b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 239750806d53Smrg 2398b3e38ee4SmrgLink object files or libraries together to form another library, or to 2399b3e38ee4Smrgcreate an executable program. 240050806d53Smrg 2401b3e38ee4SmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402b3e38ee4Smrga program from several object files. 240350806d53Smrg 2404b3e38ee4SmrgThe following components of LINK-COMMAND are treated specially: 240550806d53Smrg 2406b3e38ee4Smrg -all-static do not do any dynamic linking at all 2407b3e38ee4Smrg -avoid-version do not add a version suffix if possible 2408a73423d7Smrg -bindir BINDIR specify path to binaries directory (for systems where 2409a73423d7Smrg libraries must be found in the PATH setting at runtime) 2410b3e38ee4Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411b3e38ee4Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412b3e38ee4Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413b3e38ee4Smrg -export-symbols SYMFILE 2414b3e38ee4Smrg try to export only the symbols listed in SYMFILE 2415b3e38ee4Smrg -export-symbols-regex REGEX 2416b3e38ee4Smrg try to export only the symbols matching REGEX 2417b3e38ee4Smrg -LLIBDIR search LIBDIR for required installed libraries 2418b3e38ee4Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419b3e38ee4Smrg -module build a library that can dlopened 2420b3e38ee4Smrg -no-fast-install disable the fast-install mode 2421b3e38ee4Smrg -no-install link a not-installable executable 2422b3e38ee4Smrg -no-undefined declare that a library does not refer to external symbols 2423b3e38ee4Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424b3e38ee4Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425b3e38ee4Smrg -precious-files-regex REGEX 2426b3e38ee4Smrg don't remove output files matching REGEX 2427b3e38ee4Smrg -release RELEASE specify package release information 2428b3e38ee4Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429b3e38ee4Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430b3e38ee4Smrg -shared only do dynamic linking of libtool libraries 2431b3e38ee4Smrg -shrext SUFFIX override the standard shared library file extension 2432b3e38ee4Smrg -static do not do any dynamic linking of uninstalled libtool libraries 2433b3e38ee4Smrg -static-libtool-libs 2434b3e38ee4Smrg do not do any dynamic linking of libtool libraries 2435b3e38ee4Smrg -version-info CURRENT[:REVISION[:AGE]] 2436b3e38ee4Smrg specify library version info [each variable defaults to 0] 2437b3e38ee4Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 2438a73423d7Smrg -Wc,FLAG 2439a73423d7Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2440a73423d7Smrg -Wl,FLAG 2441a73423d7Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 2442a73423d7Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 244350806d53Smrg 2444b3e38ee4SmrgAll other options (arguments beginning with \`-') are ignored. 244550806d53Smrg 2446b3e38ee4SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447b3e38ee4Smrgtreated as uninstalled libtool libraries, other files are standard or library 2448b3e38ee4Smrgobject files. 244950806d53Smrg 2450b3e38ee4SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451b3e38ee4Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452b3e38ee4Smrgrequired, except when creating a convenience library. 245350806d53Smrg 2454b3e38ee4SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455b3e38ee4Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 245650806d53Smrg 2457b3e38ee4SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458b3e38ee4Smrgis created, otherwise an executable program is created." 2459a18ebfb2Smrg ;; 246050806d53Smrg 2461b3e38ee4Smrg uninstall) 2462b3e38ee4Smrg $ECHO \ 2463b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 246450806d53Smrg 2465b3e38ee4SmrgRemove libraries from an installation directory. 246650806d53Smrg 2467b3e38ee4SmrgRM is the name of the program to use to delete files associated with each FILE 2468b3e38ee4Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469b3e38ee4Smrgto RM. 2470af1a9c97Smrg 2471b3e38ee4SmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472b3e38ee4SmrgOtherwise, only FILE itself is deleted using RM." 2473b3e38ee4Smrg ;; 2474af1a9c97Smrg 2475b3e38ee4Smrg *) 2476a73423d7Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477b3e38ee4Smrg ;; 2478b3e38ee4Smrg esac 2479af1a9c97Smrg 2480a73423d7Smrg echo 2481b3e38ee4Smrg $ECHO "Try \`$progname --help' for more information about other modes." 2482b3e38ee4Smrg} 2483af1a9c97Smrg 2484a73423d7Smrg# Now that we've collected a possible --mode arg, show help if necessary 2485a73423d7Smrgif $opt_help; then 2486a73423d7Smrg if test "$opt_help" = :; then 2487a73423d7Smrg func_mode_help 2488a73423d7Smrg else 2489a73423d7Smrg { 2490a73423d7Smrg func_help noexit 2491a73423d7Smrg for opt_mode in compile link execute install finish uninstall clean; do 2492a73423d7Smrg func_mode_help 2493a73423d7Smrg done 2494a73423d7Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2495a73423d7Smrg { 2496a73423d7Smrg func_help noexit 2497a73423d7Smrg for opt_mode in compile link execute install finish uninstall clean; do 2498a73423d7Smrg echo 2499a73423d7Smrg func_mode_help 2500a73423d7Smrg done 2501a73423d7Smrg } | 2502a73423d7Smrg sed '1d 2503a73423d7Smrg /^When reporting/,/^Report/{ 2504a73423d7Smrg H 2505a73423d7Smrg d 2506a73423d7Smrg } 2507a73423d7Smrg $x 2508a73423d7Smrg /information about other modes/d 2509a73423d7Smrg /more detailed .*MODE/d 2510a73423d7Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2511a73423d7Smrg fi 2512a73423d7Smrg exit $? 2513a73423d7Smrgfi 2514af1a9c97Smrg 2515af1a9c97Smrg 2516b3e38ee4Smrg# func_mode_execute arg... 2517b3e38ee4Smrgfunc_mode_execute () 2518b3e38ee4Smrg{ 2519b3e38ee4Smrg $opt_debug 2520b3e38ee4Smrg # The first argument is the command name. 2521b3e38ee4Smrg cmd="$nonopt" 2522b3e38ee4Smrg test -z "$cmd" && \ 2523b3e38ee4Smrg func_fatal_help "you must specify a COMMAND" 2524a18ebfb2Smrg 2525b3e38ee4Smrg # Handle -dlopen flags immediately. 2526a73423d7Smrg for file in $opt_dlopen; do 2527b3e38ee4Smrg test -f "$file" \ 2528b3e38ee4Smrg || func_fatal_help "\`$file' is not a file" 2529a18ebfb2Smrg 2530b3e38ee4Smrg dir= 2531b3e38ee4Smrg case $file in 2532b3e38ee4Smrg *.la) 2533a73423d7Smrg func_resolve_sysroot "$file" 2534a73423d7Smrg file=$func_resolve_sysroot_result 2535a73423d7Smrg 2536b3e38ee4Smrg # Check to see that this really is a libtool archive. 2537b3e38ee4Smrg func_lalib_unsafe_p "$file" \ 2538b3e38ee4Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2539a18ebfb2Smrg 2540b3e38ee4Smrg # Read the libtool library. 2541b3e38ee4Smrg dlname= 2542b3e38ee4Smrg library_names= 2543b3e38ee4Smrg func_source "$file" 254450806d53Smrg 2545b3e38ee4Smrg # Skip this library if it cannot be dlopened. 2546b3e38ee4Smrg if test -z "$dlname"; then 2547b3e38ee4Smrg # Warn if it was a shared library. 2548b3e38ee4Smrg test -n "$library_names" && \ 2549b3e38ee4Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550b3e38ee4Smrg continue 2551b3e38ee4Smrg fi 255250806d53Smrg 2553b3e38ee4Smrg func_dirname "$file" "" "." 2554b3e38ee4Smrg dir="$func_dirname_result" 255550806d53Smrg 2556b3e38ee4Smrg if test -f "$dir/$objdir/$dlname"; then 2557a73423d7Smrg func_append dir "/$objdir" 2558b3e38ee4Smrg else 2559b3e38ee4Smrg if test ! -f "$dir/$dlname"; then 2560b3e38ee4Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561b3e38ee4Smrg fi 2562b3e38ee4Smrg fi 2563a18ebfb2Smrg ;; 256450806d53Smrg 2565b3e38ee4Smrg *.lo) 2566b3e38ee4Smrg # Just add the directory containing the .lo file. 2567b3e38ee4Smrg func_dirname "$file" "" "." 2568b3e38ee4Smrg dir="$func_dirname_result" 2569a18ebfb2Smrg ;; 257050806d53Smrg 2571b3e38ee4Smrg *) 2572b3e38ee4Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573a18ebfb2Smrg continue 2574a18ebfb2Smrg ;; 2575b3e38ee4Smrg esac 257650806d53Smrg 2577b3e38ee4Smrg # Get the absolute pathname. 2578b3e38ee4Smrg absdir=`cd "$dir" && pwd` 2579b3e38ee4Smrg test -n "$absdir" && dir="$absdir" 2580af1a9c97Smrg 2581b3e38ee4Smrg # Now add the directory to shlibpath_var. 2582b3e38ee4Smrg if eval "test -z \"\$$shlibpath_var\""; then 2583b3e38ee4Smrg eval "$shlibpath_var=\"\$dir\"" 2584b3e38ee4Smrg else 2585b3e38ee4Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586b3e38ee4Smrg fi 2587b3e38ee4Smrg done 2588af1a9c97Smrg 2589b3e38ee4Smrg # This variable tells wrapper scripts just to set shlibpath_var 2590b3e38ee4Smrg # rather than running their programs. 2591b3e38ee4Smrg libtool_execute_magic="$magic" 2592af1a9c97Smrg 2593b3e38ee4Smrg # Check if any of the arguments is a wrapper script. 2594b3e38ee4Smrg args= 2595b3e38ee4Smrg for file 2596b3e38ee4Smrg do 2597b3e38ee4Smrg case $file in 2598a73423d7Smrg -* | *.la | *.lo ) ;; 2599b3e38ee4Smrg *) 2600b3e38ee4Smrg # Do a test to see if this is really a libtool program. 2601b3e38ee4Smrg if func_ltwrapper_script_p "$file"; then 2602b3e38ee4Smrg func_source "$file" 2603b3e38ee4Smrg # Transform arg to wrapped name. 2604b3e38ee4Smrg file="$progdir/$program" 2605b3e38ee4Smrg elif func_ltwrapper_executable_p "$file"; then 2606b3e38ee4Smrg func_ltwrapper_scriptname "$file" 2607b3e38ee4Smrg func_source "$func_ltwrapper_scriptname_result" 2608b3e38ee4Smrg # Transform arg to wrapped name. 2609b3e38ee4Smrg file="$progdir/$program" 2610b3e38ee4Smrg fi 2611b3e38ee4Smrg ;; 2612b3e38ee4Smrg esac 2613b3e38ee4Smrg # Quote arguments (to preserve shell metacharacters). 2614a73423d7Smrg func_append_quoted args "$file" 2615b3e38ee4Smrg done 2616af1a9c97Smrg 2617b3e38ee4Smrg if test "X$opt_dry_run" = Xfalse; then 2618b3e38ee4Smrg if test -n "$shlibpath_var"; then 2619b3e38ee4Smrg # Export the shlibpath_var. 2620b3e38ee4Smrg eval "export $shlibpath_var" 2621b3e38ee4Smrg fi 2622af1a9c97Smrg 2623b3e38ee4Smrg # Restore saved environment variables 2624b3e38ee4Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625b3e38ee4Smrg do 2626b3e38ee4Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627b3e38ee4Smrg $lt_var=\$save_$lt_var; export $lt_var 2628a18ebfb2Smrg else 2629b3e38ee4Smrg $lt_unset $lt_var 2630b3e38ee4Smrg fi" 2631b3e38ee4Smrg done 2632af1a9c97Smrg 2633b3e38ee4Smrg # Now prepare to actually exec the command. 2634b3e38ee4Smrg exec_cmd="\$cmd$args" 2635b3e38ee4Smrg else 2636b3e38ee4Smrg # Display what would be done. 2637b3e38ee4Smrg if test -n "$shlibpath_var"; then 2638b3e38ee4Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 2639a73423d7Smrg echo "export $shlibpath_var" 2640b3e38ee4Smrg fi 2641b3e38ee4Smrg $ECHO "$cmd$args" 2642b3e38ee4Smrg exit $EXIT_SUCCESS 2643b3e38ee4Smrg fi 2644b3e38ee4Smrg} 2645af1a9c97Smrg 2646a73423d7Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647af1a9c97Smrg 2648a18ebfb2Smrg 2649b3e38ee4Smrg# func_mode_finish arg... 2650b3e38ee4Smrgfunc_mode_finish () 2651b3e38ee4Smrg{ 2652b3e38ee4Smrg $opt_debug 2653a73423d7Smrg libs= 2654a73423d7Smrg libdirs= 2655b3e38ee4Smrg admincmds= 265650806d53Smrg 2657a73423d7Smrg for opt in "$nonopt" ${1+"$@"} 2658a73423d7Smrg do 2659a73423d7Smrg if test -d "$opt"; then 2660a73423d7Smrg func_append libdirs " $opt" 2661a73423d7Smrg 2662a73423d7Smrg elif test -f "$opt"; then 2663a73423d7Smrg if func_lalib_unsafe_p "$opt"; then 2664a73423d7Smrg func_append libs " $opt" 2665a73423d7Smrg else 2666a73423d7Smrg func_warning "\`$opt' is not a valid libtool archive" 2667a73423d7Smrg fi 2668a73423d7Smrg 2669a73423d7Smrg else 2670a73423d7Smrg func_fatal_error "invalid argument \`$opt'" 2671a73423d7Smrg fi 2672a73423d7Smrg done 2673a73423d7Smrg 2674a73423d7Smrg if test -n "$libs"; then 2675a73423d7Smrg if test -n "$lt_sysroot"; then 2676a73423d7Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2677a73423d7Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2678a73423d7Smrg else 2679a73423d7Smrg sysroot_cmd= 2680a73423d7Smrg fi 2681a73423d7Smrg 2682a73423d7Smrg # Remove sysroot references 2683a73423d7Smrg if $opt_dry_run; then 2684a73423d7Smrg for lib in $libs; do 2685a73423d7Smrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2686a73423d7Smrg done 2687a73423d7Smrg else 2688a73423d7Smrg tmpdir=`func_mktempdir` 2689a73423d7Smrg for lib in $libs; do 2690a73423d7Smrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2691a73423d7Smrg > $tmpdir/tmp-la 2692a73423d7Smrg mv -f $tmpdir/tmp-la $lib 2693a73423d7Smrg done 2694a73423d7Smrg ${RM}r "$tmpdir" 2695a73423d7Smrg fi 2696a73423d7Smrg fi 269750806d53Smrg 2698a73423d7Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699b3e38ee4Smrg for libdir in $libdirs; do 2700b3e38ee4Smrg if test -n "$finish_cmds"; then 2701b3e38ee4Smrg # Do each command in the finish commands. 2702b3e38ee4Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703b3e38ee4Smrg'"$cmd"'"' 2704a18ebfb2Smrg fi 2705b3e38ee4Smrg if test -n "$finish_eval"; then 2706b3e38ee4Smrg # Do the single finish_eval. 2707b3e38ee4Smrg eval cmds=\"$finish_eval\" 2708a73423d7Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709b3e38ee4Smrg $cmds" 2710b3e38ee4Smrg fi 2711b3e38ee4Smrg done 2712b3e38ee4Smrg fi 271350806d53Smrg 2714b3e38ee4Smrg # Exit here if they wanted silent mode. 2715b3e38ee4Smrg $opt_silent && exit $EXIT_SUCCESS 271650806d53Smrg 2717a73423d7Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2718a73423d7Smrg echo "----------------------------------------------------------------------" 2719a73423d7Smrg echo "Libraries have been installed in:" 2720a73423d7Smrg for libdir in $libdirs; do 2721a73423d7Smrg $ECHO " $libdir" 2722a73423d7Smrg done 2723a73423d7Smrg echo 2724a73423d7Smrg echo "If you ever happen to want to link against installed libraries" 2725a73423d7Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 2726a73423d7Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2727a73423d7Smrg echo "flag during linking and do at least one of the following:" 2728a73423d7Smrg if test -n "$shlibpath_var"; then 2729a73423d7Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2730a73423d7Smrg echo " during execution" 2731a73423d7Smrg fi 2732a73423d7Smrg if test -n "$runpath_var"; then 2733a73423d7Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 2734a73423d7Smrg echo " during linking" 2735a73423d7Smrg fi 2736a73423d7Smrg if test -n "$hardcode_libdir_flag_spec"; then 2737a73423d7Smrg libdir=LIBDIR 2738a73423d7Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2739b3e38ee4Smrg 2740a73423d7Smrg $ECHO " - use the \`$flag' linker flag" 2741a73423d7Smrg fi 2742a73423d7Smrg if test -n "$admincmds"; then 2743a73423d7Smrg $ECHO " - have your system administrator run these commands:$admincmds" 2744a73423d7Smrg fi 2745a73423d7Smrg if test -f /etc/ld.so.conf; then 2746a73423d7Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2747a73423d7Smrg fi 2748a73423d7Smrg echo 2749b3e38ee4Smrg 2750a73423d7Smrg echo "See any operating system documentation about shared libraries for" 2751a73423d7Smrg case $host in 2752a73423d7Smrg solaris2.[6789]|solaris2.1[0-9]) 2753a73423d7Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2754a73423d7Smrg echo "pages." 2755a73423d7Smrg ;; 2756a73423d7Smrg *) 2757a73423d7Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 2758a73423d7Smrg ;; 2759a73423d7Smrg esac 2760a73423d7Smrg echo "----------------------------------------------------------------------" 2761a73423d7Smrg fi 2762b3e38ee4Smrg exit $EXIT_SUCCESS 2763b3e38ee4Smrg} 2764b3e38ee4Smrg 2765a73423d7Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766b3e38ee4Smrg 2767b3e38ee4Smrg 2768b3e38ee4Smrg# func_mode_install arg... 2769b3e38ee4Smrgfunc_mode_install () 2770b3e38ee4Smrg{ 2771b3e38ee4Smrg $opt_debug 2772b3e38ee4Smrg # There may be an optional sh(1) argument at the beginning of 2773b3e38ee4Smrg # install_prog (especially on Windows NT). 2774b3e38ee4Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775b3e38ee4Smrg # Allow the use of GNU shtool's install command. 2776a73423d7Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777b3e38ee4Smrg # Aesthetically quote it. 2778b3e38ee4Smrg func_quote_for_eval "$nonopt" 2779b3e38ee4Smrg install_prog="$func_quote_for_eval_result " 2780b3e38ee4Smrg arg=$1 2781b3e38ee4Smrg shift 2782b3e38ee4Smrg else 2783b3e38ee4Smrg install_prog= 2784b3e38ee4Smrg arg=$nonopt 2785b3e38ee4Smrg fi 2786b3e38ee4Smrg 2787b3e38ee4Smrg # The real first argument should be the name of the installation program. 2788b3e38ee4Smrg # Aesthetically quote it. 2789b3e38ee4Smrg func_quote_for_eval "$arg" 2790a73423d7Smrg func_append install_prog "$func_quote_for_eval_result" 2791a73423d7Smrg install_shared_prog=$install_prog 2792a73423d7Smrg case " $install_prog " in 2793a73423d7Smrg *[\\\ /]cp\ *) install_cp=: ;; 2794a73423d7Smrg *) install_cp=false ;; 2795a73423d7Smrg esac 2796b3e38ee4Smrg 2797b3e38ee4Smrg # We need to accept at least all the BSD install flags. 2798b3e38ee4Smrg dest= 2799b3e38ee4Smrg files= 2800b3e38ee4Smrg opts= 2801b3e38ee4Smrg prev= 2802b3e38ee4Smrg install_type= 2803b3e38ee4Smrg isdir=no 2804b3e38ee4Smrg stripme= 2805a73423d7Smrg no_mode=: 2806b3e38ee4Smrg for arg 2807b3e38ee4Smrg do 2808a73423d7Smrg arg2= 2809b3e38ee4Smrg if test -n "$dest"; then 2810a73423d7Smrg func_append files " $dest" 2811b3e38ee4Smrg dest=$arg 2812b3e38ee4Smrg continue 2813b3e38ee4Smrg fi 2814b3e38ee4Smrg 2815b3e38ee4Smrg case $arg in 2816b3e38ee4Smrg -d) isdir=yes ;; 2817b3e38ee4Smrg -f) 2818a73423d7Smrg if $install_cp; then :; else 2819a73423d7Smrg prev=$arg 2820a73423d7Smrg fi 2821b3e38ee4Smrg ;; 2822b3e38ee4Smrg -g | -m | -o) 2823b3e38ee4Smrg prev=$arg 2824b3e38ee4Smrg ;; 2825b3e38ee4Smrg -s) 2826b3e38ee4Smrg stripme=" -s" 2827b3e38ee4Smrg continue 2828b3e38ee4Smrg ;; 2829b3e38ee4Smrg -*) 2830b3e38ee4Smrg ;; 2831b3e38ee4Smrg *) 2832b3e38ee4Smrg # If the previous option needed an argument, then skip it. 2833b3e38ee4Smrg if test -n "$prev"; then 2834a73423d7Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 2835a73423d7Smrg arg2=$install_override_mode 2836a73423d7Smrg no_mode=false 2837a73423d7Smrg fi 2838a18ebfb2Smrg prev= 2839af1a9c97Smrg else 2840b3e38ee4Smrg dest=$arg 2841b3e38ee4Smrg continue 284250806d53Smrg fi 2843a18ebfb2Smrg ;; 2844b3e38ee4Smrg esac 284550806d53Smrg 2846b3e38ee4Smrg # Aesthetically quote the argument. 2847b3e38ee4Smrg func_quote_for_eval "$arg" 2848a73423d7Smrg func_append install_prog " $func_quote_for_eval_result" 2849a73423d7Smrg if test -n "$arg2"; then 2850a73423d7Smrg func_quote_for_eval "$arg2" 2851a73423d7Smrg fi 2852a73423d7Smrg func_append install_shared_prog " $func_quote_for_eval_result" 2853b3e38ee4Smrg done 285450806d53Smrg 2855b3e38ee4Smrg test -z "$install_prog" && \ 2856b3e38ee4Smrg func_fatal_help "you must specify an install program" 285750806d53Smrg 2858b3e38ee4Smrg test -n "$prev" && \ 2859b3e38ee4Smrg func_fatal_help "the \`$prev' option requires an argument" 2860af1a9c97Smrg 2861a73423d7Smrg if test -n "$install_override_mode" && $no_mode; then 2862a73423d7Smrg if $install_cp; then :; else 2863a73423d7Smrg func_quote_for_eval "$install_override_mode" 2864a73423d7Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 2865a73423d7Smrg fi 2866a73423d7Smrg fi 2867a73423d7Smrg 2868b3e38ee4Smrg if test -z "$files"; then 2869b3e38ee4Smrg if test -z "$dest"; then 2870b3e38ee4Smrg func_fatal_help "no file or destination specified" 2871b3e38ee4Smrg else 2872b3e38ee4Smrg func_fatal_help "you must specify a destination" 2873b3e38ee4Smrg fi 2874a18ebfb2Smrg fi 2875af1a9c97Smrg 2876b3e38ee4Smrg # Strip any trailing slash from the destination. 2877b3e38ee4Smrg func_stripname '' '/' "$dest" 2878b3e38ee4Smrg dest=$func_stripname_result 2879af1a9c97Smrg 2880b3e38ee4Smrg # Check to see that the destination is a directory. 2881b3e38ee4Smrg test -d "$dest" && isdir=yes 2882b3e38ee4Smrg if test "$isdir" = yes; then 2883b3e38ee4Smrg destdir="$dest" 2884b3e38ee4Smrg destname= 2885a18ebfb2Smrg else 2886b3e38ee4Smrg func_dirname_and_basename "$dest" "" "." 2887b3e38ee4Smrg destdir="$func_dirname_result" 2888b3e38ee4Smrg destname="$func_basename_result" 2889af1a9c97Smrg 2890b3e38ee4Smrg # Not a directory, so check to see that there is only one file specified. 2891b3e38ee4Smrg set dummy $files; shift 2892b3e38ee4Smrg test "$#" -gt 1 && \ 2893b3e38ee4Smrg func_fatal_help "\`$dest' is not a directory" 2894af1a9c97Smrg fi 2895b3e38ee4Smrg case $destdir in 2896b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2897a18ebfb2Smrg *) 2898b3e38ee4Smrg for file in $files; do 2899b3e38ee4Smrg case $file in 2900b3e38ee4Smrg *.lo) ;; 2901b3e38ee4Smrg *) 2902b3e38ee4Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903b3e38ee4Smrg ;; 2904b3e38ee4Smrg esac 2905b3e38ee4Smrg done 2906a18ebfb2Smrg ;; 2907a18ebfb2Smrg esac 290850806d53Smrg 2909b3e38ee4Smrg # This variable tells wrapper scripts just to set variables rather 2910b3e38ee4Smrg # than running their programs. 2911b3e38ee4Smrg libtool_install_magic="$magic" 291250806d53Smrg 2913b3e38ee4Smrg staticlibs= 2914b3e38ee4Smrg future_libdirs= 2915b3e38ee4Smrg current_libdirs= 2916b3e38ee4Smrg for file in $files; do 291750806d53Smrg 2918b3e38ee4Smrg # Do each installation. 2919b3e38ee4Smrg case $file in 2920b3e38ee4Smrg *.$libext) 2921b3e38ee4Smrg # Do the static libraries later. 2922a73423d7Smrg func_append staticlibs " $file" 2923b3e38ee4Smrg ;; 2924b3e38ee4Smrg 2925b3e38ee4Smrg *.la) 2926a73423d7Smrg func_resolve_sysroot "$file" 2927a73423d7Smrg file=$func_resolve_sysroot_result 2928a73423d7Smrg 2929b3e38ee4Smrg # Check to see that this really is a libtool archive. 2930b3e38ee4Smrg func_lalib_unsafe_p "$file" \ 2931b3e38ee4Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932b3e38ee4Smrg 2933b3e38ee4Smrg library_names= 2934b3e38ee4Smrg old_library= 2935b3e38ee4Smrg relink_command= 2936b3e38ee4Smrg func_source "$file" 2937b3e38ee4Smrg 2938b3e38ee4Smrg # Add the libdir to current_libdirs if it is the destination. 2939b3e38ee4Smrg if test "X$destdir" = "X$libdir"; then 2940b3e38ee4Smrg case "$current_libdirs " in 2941b3e38ee4Smrg *" $libdir "*) ;; 2942a73423d7Smrg *) func_append current_libdirs " $libdir" ;; 2943af1a9c97Smrg esac 2944b3e38ee4Smrg else 2945b3e38ee4Smrg # Note the libdir as a future libdir. 2946b3e38ee4Smrg case "$future_libdirs " in 2947b3e38ee4Smrg *" $libdir "*) ;; 2948a73423d7Smrg *) func_append future_libdirs " $libdir" ;; 2949b3e38ee4Smrg esac 2950b3e38ee4Smrg fi 2951af1a9c97Smrg 2952b3e38ee4Smrg func_dirname "$file" "/" "" 2953b3e38ee4Smrg dir="$func_dirname_result" 2954a73423d7Smrg func_append dir "$objdir" 2955b3e38ee4Smrg 2956b3e38ee4Smrg if test -n "$relink_command"; then 2957b3e38ee4Smrg # Determine the prefix the user has applied to our future dir. 2958a73423d7Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959b3e38ee4Smrg 2960b3e38ee4Smrg # Don't allow the user to place us outside of our expected 2961b3e38ee4Smrg # location b/c this prevents finding dependent libraries that 2962b3e38ee4Smrg # are installed to the same prefix. 2963b3e38ee4Smrg # At present, this check doesn't affect windows .dll's that 2964b3e38ee4Smrg # are installed into $libdir/../bin (currently, that works fine) 2965b3e38ee4Smrg # but it's something to keep an eye on. 2966b3e38ee4Smrg test "$inst_prefix_dir" = "$destdir" && \ 2967b3e38ee4Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968b3e38ee4Smrg 2969b3e38ee4Smrg if test -n "$inst_prefix_dir"; then 2970b3e38ee4Smrg # Stick the inst_prefix_dir data into the link command. 2971a73423d7Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972b3e38ee4Smrg else 2973a73423d7Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974b3e38ee4Smrg fi 2975b3e38ee4Smrg 2976b3e38ee4Smrg func_warning "relinking \`$file'" 2977b3e38ee4Smrg func_show_eval "$relink_command" \ 2978b3e38ee4Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979b3e38ee4Smrg fi 2980b3e38ee4Smrg 2981b3e38ee4Smrg # See the names of the shared library. 2982b3e38ee4Smrg set dummy $library_names; shift 2983b3e38ee4Smrg if test -n "$1"; then 2984b3e38ee4Smrg realname="$1" 2985b3e38ee4Smrg shift 2986b3e38ee4Smrg 2987b3e38ee4Smrg srcname="$realname" 2988b3e38ee4Smrg test -n "$relink_command" && srcname="$realname"T 2989b3e38ee4Smrg 2990b3e38ee4Smrg # Install the shared library and build the symlinks. 2991a73423d7Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992b3e38ee4Smrg 'exit $?' 2993b3e38ee4Smrg tstripme="$stripme" 2994b3e38ee4Smrg case $host_os in 2995b3e38ee4Smrg cygwin* | mingw* | pw32* | cegcc*) 2996b3e38ee4Smrg case $realname in 2997b3e38ee4Smrg *.dll.a) 2998b3e38ee4Smrg tstripme="" 2999b3e38ee4Smrg ;; 3000b3e38ee4Smrg esac 3001af1a9c97Smrg ;; 3002af1a9c97Smrg esac 3003b3e38ee4Smrg if test -n "$tstripme" && test -n "$striplib"; then 3004b3e38ee4Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005a18ebfb2Smrg fi 3006b3e38ee4Smrg 3007b3e38ee4Smrg if test "$#" -gt 0; then 3008b3e38ee4Smrg # Delete the old symlinks, and create new ones. 3009b3e38ee4Smrg # Try `ln -sf' first, because the `ln' binary might depend on 3010b3e38ee4Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011b3e38ee4Smrg # so we also need to try rm && ln -s. 3012b3e38ee4Smrg for linkname 3013b3e38ee4Smrg do 3014b3e38ee4Smrg test "$linkname" != "$realname" \ 3015b3e38ee4Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016a18ebfb2Smrg done 3017a18ebfb2Smrg fi 301850806d53Smrg 3019b3e38ee4Smrg # Do each command in the postinstall commands. 3020b3e38ee4Smrg lib="$destdir/$realname" 3021b3e38ee4Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 3022a18ebfb2Smrg fi 302350806d53Smrg 3024b3e38ee4Smrg # Install the pseudo-library for information purposes. 3025b3e38ee4Smrg func_basename "$file" 3026b3e38ee4Smrg name="$func_basename_result" 3027b3e38ee4Smrg instname="$dir/$name"i 3028b3e38ee4Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 302950806d53Smrg 3030b3e38ee4Smrg # Maybe install the static library, too. 3031a73423d7Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032b3e38ee4Smrg ;; 303350806d53Smrg 3034b3e38ee4Smrg *.lo) 3035b3e38ee4Smrg # Install (i.e. copy) a libtool object. 303650806d53Smrg 3037b3e38ee4Smrg # Figure out destination file name, if it wasn't already specified. 3038b3e38ee4Smrg if test -n "$destname"; then 3039b3e38ee4Smrg destfile="$destdir/$destname" 3040b3e38ee4Smrg else 3041b3e38ee4Smrg func_basename "$file" 3042b3e38ee4Smrg destfile="$func_basename_result" 3043b3e38ee4Smrg destfile="$destdir/$destfile" 3044a18ebfb2Smrg fi 304550806d53Smrg 3046b3e38ee4Smrg # Deduce the name of the destination old-style object file. 3047b3e38ee4Smrg case $destfile in 3048b3e38ee4Smrg *.lo) 3049b3e38ee4Smrg func_lo2o "$destfile" 3050b3e38ee4Smrg staticdest=$func_lo2o_result 3051b3e38ee4Smrg ;; 3052b3e38ee4Smrg *.$objext) 3053b3e38ee4Smrg staticdest="$destfile" 3054b3e38ee4Smrg destfile= 3055b3e38ee4Smrg ;; 3056b3e38ee4Smrg *) 3057b3e38ee4Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058b3e38ee4Smrg ;; 3059b3e38ee4Smrg esac 306050806d53Smrg 3061b3e38ee4Smrg # Install the libtool object if requested. 3062b3e38ee4Smrg test -n "$destfile" && \ 3063b3e38ee4Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 306450806d53Smrg 3065b3e38ee4Smrg # Install the old object if enabled. 3066b3e38ee4Smrg if test "$build_old_libs" = yes; then 3067b3e38ee4Smrg # Deduce the name of the old-style object file. 3068b3e38ee4Smrg func_lo2o "$file" 3069b3e38ee4Smrg staticobj=$func_lo2o_result 3070b3e38ee4Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 307150806d53Smrg fi 3072b3e38ee4Smrg exit $EXIT_SUCCESS 3073b3e38ee4Smrg ;; 307450806d53Smrg 3075b3e38ee4Smrg *) 3076b3e38ee4Smrg # Figure out destination file name, if it wasn't already specified. 3077b3e38ee4Smrg if test -n "$destname"; then 3078b3e38ee4Smrg destfile="$destdir/$destname" 3079b3e38ee4Smrg else 3080b3e38ee4Smrg func_basename "$file" 3081b3e38ee4Smrg destfile="$func_basename_result" 3082b3e38ee4Smrg destfile="$destdir/$destfile" 3083b3e38ee4Smrg fi 308450806d53Smrg 3085b3e38ee4Smrg # If the file is missing, and there is a .exe on the end, strip it 3086b3e38ee4Smrg # because it is most likely a libtool script we actually want to 3087b3e38ee4Smrg # install 3088b3e38ee4Smrg stripped_ext="" 3089b3e38ee4Smrg case $file in 3090b3e38ee4Smrg *.exe) 3091b3e38ee4Smrg if test ! -f "$file"; then 3092b3e38ee4Smrg func_stripname '' '.exe' "$file" 3093b3e38ee4Smrg file=$func_stripname_result 3094b3e38ee4Smrg stripped_ext=".exe" 3095b3e38ee4Smrg fi 3096b3e38ee4Smrg ;; 3097b3e38ee4Smrg esac 3098b3e38ee4Smrg 3099b3e38ee4Smrg # Do a test to see if this is really a libtool program. 3100b3e38ee4Smrg case $host in 3101b3e38ee4Smrg *cygwin* | *mingw*) 3102b3e38ee4Smrg if func_ltwrapper_executable_p "$file"; then 3103b3e38ee4Smrg func_ltwrapper_scriptname "$file" 3104b3e38ee4Smrg wrapper=$func_ltwrapper_scriptname_result 3105b3e38ee4Smrg else 3106b3e38ee4Smrg func_stripname '' '.exe' "$file" 3107b3e38ee4Smrg wrapper=$func_stripname_result 3108b3e38ee4Smrg fi 3109b3e38ee4Smrg ;; 3110a18ebfb2Smrg *) 3111b3e38ee4Smrg wrapper=$file 3112b3e38ee4Smrg ;; 3113b3e38ee4Smrg esac 3114b3e38ee4Smrg if func_ltwrapper_script_p "$wrapper"; then 3115b3e38ee4Smrg notinst_deplibs= 3116b3e38ee4Smrg relink_command= 3117b3e38ee4Smrg 3118b3e38ee4Smrg func_source "$wrapper" 3119b3e38ee4Smrg 3120b3e38ee4Smrg # Check the variables that should have been set. 3121b3e38ee4Smrg test -z "$generated_by_libtool_version" && \ 3122b3e38ee4Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123b3e38ee4Smrg 3124b3e38ee4Smrg finalize=yes 3125b3e38ee4Smrg for lib in $notinst_deplibs; do 3126b3e38ee4Smrg # Check to see that each library is installed. 3127b3e38ee4Smrg libdir= 3128b3e38ee4Smrg if test -f "$lib"; then 3129b3e38ee4Smrg func_source "$lib" 3130b3e38ee4Smrg fi 3131a73423d7Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132b3e38ee4Smrg if test -n "$libdir" && test ! -f "$libfile"; then 3133b3e38ee4Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 3134b3e38ee4Smrg finalize=no 3135b3e38ee4Smrg fi 3136b3e38ee4Smrg done 3137b3e38ee4Smrg 3138b3e38ee4Smrg relink_command= 3139b3e38ee4Smrg func_source "$wrapper" 3140b3e38ee4Smrg 3141b3e38ee4Smrg outputname= 3142b3e38ee4Smrg if test "$fast_install" = no && test -n "$relink_command"; then 3143b3e38ee4Smrg $opt_dry_run || { 3144b3e38ee4Smrg if test "$finalize" = yes; then 3145b3e38ee4Smrg tmpdir=`func_mktempdir` 3146b3e38ee4Smrg func_basename "$file$stripped_ext" 3147b3e38ee4Smrg file="$func_basename_result" 3148b3e38ee4Smrg outputname="$tmpdir/$file" 3149b3e38ee4Smrg # Replace the output file specification. 3150a73423d7Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151b3e38ee4Smrg 3152b3e38ee4Smrg $opt_silent || { 3153b3e38ee4Smrg func_quote_for_expand "$relink_command" 3154b3e38ee4Smrg eval "func_echo $func_quote_for_expand_result" 3155b3e38ee4Smrg } 3156b3e38ee4Smrg if eval "$relink_command"; then : 3157b3e38ee4Smrg else 3158b3e38ee4Smrg func_error "error: relink \`$file' with the above command before installing it" 3159b3e38ee4Smrg $opt_dry_run || ${RM}r "$tmpdir" 3160b3e38ee4Smrg continue 3161b3e38ee4Smrg fi 3162b3e38ee4Smrg file="$outputname" 3163b3e38ee4Smrg else 3164b3e38ee4Smrg func_warning "cannot relink \`$file'" 3165b3e38ee4Smrg fi 3166b3e38ee4Smrg } 3167b3e38ee4Smrg else 3168b3e38ee4Smrg # Install the binary that we compiled earlier. 3169a73423d7Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170a18ebfb2Smrg fi 3171b3e38ee4Smrg fi 3172b3e38ee4Smrg 3173b3e38ee4Smrg # remove .exe since cygwin /usr/bin/install will append another 3174b3e38ee4Smrg # one anyway 3175b3e38ee4Smrg case $install_prog,$host in 3176b3e38ee4Smrg */usr/bin/install*,*cygwin*) 3177b3e38ee4Smrg case $file:$destfile in 3178b3e38ee4Smrg *.exe:*.exe) 3179b3e38ee4Smrg # this is ok 3180b3e38ee4Smrg ;; 3181b3e38ee4Smrg *.exe:*) 3182b3e38ee4Smrg destfile=$destfile.exe 3183b3e38ee4Smrg ;; 3184b3e38ee4Smrg *:*.exe) 3185b3e38ee4Smrg func_stripname '' '.exe' "$destfile" 3186b3e38ee4Smrg destfile=$func_stripname_result 3187b3e38ee4Smrg ;; 3188b3e38ee4Smrg esac 3189a18ebfb2Smrg ;; 3190a18ebfb2Smrg esac 3191b3e38ee4Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192b3e38ee4Smrg $opt_dry_run || if test -n "$outputname"; then 3193b3e38ee4Smrg ${RM}r "$tmpdir" 3194b3e38ee4Smrg fi 3195b3e38ee4Smrg ;; 3196b3e38ee4Smrg esac 3197b3e38ee4Smrg done 319850806d53Smrg 3199b3e38ee4Smrg for file in $staticlibs; do 3200b3e38ee4Smrg func_basename "$file" 3201b3e38ee4Smrg name="$func_basename_result" 3202b3e38ee4Smrg 3203b3e38ee4Smrg # Set up the ranlib parameters. 3204b3e38ee4Smrg oldlib="$destdir/$name" 3205a73423d7Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206a73423d7Smrg tool_oldlib=$func_to_tool_file_result 3207b3e38ee4Smrg 3208b3e38ee4Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209b3e38ee4Smrg 3210b3e38ee4Smrg if test -n "$stripme" && test -n "$old_striplib"; then 3211a73423d7Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212b3e38ee4Smrg fi 3213b3e38ee4Smrg 3214b3e38ee4Smrg # Do each command in the postinstall commands. 3215b3e38ee4Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216b3e38ee4Smrg done 3217b3e38ee4Smrg 3218b3e38ee4Smrg test -n "$future_libdirs" && \ 3219b3e38ee4Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3220b3e38ee4Smrg 3221b3e38ee4Smrg if test -n "$current_libdirs"; then 3222b3e38ee4Smrg # Maybe just do a dry run. 3223b3e38ee4Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224b3e38ee4Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225b3e38ee4Smrg else 3226b3e38ee4Smrg exit $EXIT_SUCCESS 3227b3e38ee4Smrg fi 3228b3e38ee4Smrg} 3229b3e38ee4Smrg 3230a73423d7Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231b3e38ee4Smrg 3232b3e38ee4Smrg 3233b3e38ee4Smrg# func_generate_dlsyms outputname originator pic_p 3234b3e38ee4Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235b3e38ee4Smrg# a dlpreopen symbol table. 3236b3e38ee4Smrgfunc_generate_dlsyms () 3237b3e38ee4Smrg{ 3238b3e38ee4Smrg $opt_debug 3239b3e38ee4Smrg my_outputname="$1" 3240b3e38ee4Smrg my_originator="$2" 3241b3e38ee4Smrg my_pic_p="${3-no}" 3242b3e38ee4Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243b3e38ee4Smrg my_dlsyms= 3244b3e38ee4Smrg 3245b3e38ee4Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246b3e38ee4Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247b3e38ee4Smrg my_dlsyms="${my_outputname}S.c" 3248b3e38ee4Smrg else 3249b3e38ee4Smrg func_error "not configured to extract global symbols from dlpreopened files" 3250b3e38ee4Smrg fi 3251b3e38ee4Smrg fi 3252b3e38ee4Smrg 3253b3e38ee4Smrg if test -n "$my_dlsyms"; then 3254b3e38ee4Smrg case $my_dlsyms in 3255b3e38ee4Smrg "") ;; 3256b3e38ee4Smrg *.c) 3257b3e38ee4Smrg # Discover the nlist of each of the dlfiles. 3258b3e38ee4Smrg nlist="$output_objdir/${my_outputname}.nm" 3259b3e38ee4Smrg 3260b3e38ee4Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261b3e38ee4Smrg 3262b3e38ee4Smrg # Parse the name list into a source file. 3263b3e38ee4Smrg func_verbose "creating $output_objdir/$my_dlsyms" 3264b3e38ee4Smrg 3265b3e38ee4Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266b3e38ee4Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267b3e38ee4Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268b3e38ee4Smrg 3269b3e38ee4Smrg#ifdef __cplusplus 3270b3e38ee4Smrgextern \"C\" { 3271b3e38ee4Smrg#endif 3272b3e38ee4Smrg 3273a73423d7Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3274a73423d7Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3275a73423d7Smrg#endif 3276a73423d7Smrg 3277a73423d7Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3278a73423d7Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3279a73423d7Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 3280a73423d7Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 3281a73423d7Smrg# define LT_DLSYM_CONST 3282a73423d7Smrg#elif defined(__osf__) 3283a73423d7Smrg/* This system does not cope well with relocations in const data. */ 3284a73423d7Smrg# define LT_DLSYM_CONST 3285a73423d7Smrg#else 3286a73423d7Smrg# define LT_DLSYM_CONST const 3287a73423d7Smrg#endif 3288a73423d7Smrg 3289b3e38ee4Smrg/* External symbol declarations for the compiler. */\ 3290b3e38ee4Smrg" 3291b3e38ee4Smrg 3292b3e38ee4Smrg if test "$dlself" = yes; then 3293b3e38ee4Smrg func_verbose "generating symbol list for \`$output'" 3294b3e38ee4Smrg 3295b3e38ee4Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296b3e38ee4Smrg 3297b3e38ee4Smrg # Add our own program objects to the symbol list. 3298a73423d7Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299b3e38ee4Smrg for progfile in $progfiles; do 3300a73423d7Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 3301a73423d7Smrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3302a73423d7Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303b3e38ee4Smrg done 3304b3e38ee4Smrg 3305b3e38ee4Smrg if test -n "$exclude_expsyms"; then 3306b3e38ee4Smrg $opt_dry_run || { 3307b3e38ee4Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308b3e38ee4Smrg eval '$MV "$nlist"T "$nlist"' 3309b3e38ee4Smrg } 3310a18ebfb2Smrg fi 3311b3e38ee4Smrg 3312b3e38ee4Smrg if test -n "$export_symbols_regex"; then 3313b3e38ee4Smrg $opt_dry_run || { 3314b3e38ee4Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315b3e38ee4Smrg eval '$MV "$nlist"T "$nlist"' 3316b3e38ee4Smrg } 3317b3e38ee4Smrg fi 3318b3e38ee4Smrg 3319b3e38ee4Smrg # Prepare the list of exported symbols 3320b3e38ee4Smrg if test -z "$export_symbols"; then 3321b3e38ee4Smrg export_symbols="$output_objdir/$outputname.exp" 3322b3e38ee4Smrg $opt_dry_run || { 3323b3e38ee4Smrg $RM $export_symbols 3324b3e38ee4Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325b3e38ee4Smrg case $host in 3326b3e38ee4Smrg *cygwin* | *mingw* | *cegcc* ) 3327b3e38ee4Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328b3e38ee4Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329b3e38ee4Smrg ;; 3330b3e38ee4Smrg esac 3331b3e38ee4Smrg } 3332a18ebfb2Smrg else 3333b3e38ee4Smrg $opt_dry_run || { 3334b3e38ee4Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335b3e38ee4Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336b3e38ee4Smrg eval '$MV "$nlist"T "$nlist"' 3337b3e38ee4Smrg case $host in 3338a73423d7Smrg *cygwin* | *mingw* | *cegcc* ) 3339b3e38ee4Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340b3e38ee4Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341b3e38ee4Smrg ;; 3342b3e38ee4Smrg esac 3343b3e38ee4Smrg } 3344a18ebfb2Smrg fi 3345b3e38ee4Smrg fi 334650806d53Smrg 3347b3e38ee4Smrg for dlprefile in $dlprefiles; do 3348b3e38ee4Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349b3e38ee4Smrg func_basename "$dlprefile" 3350b3e38ee4Smrg name="$func_basename_result" 3351a73423d7Smrg case $host in 3352a73423d7Smrg *cygwin* | *mingw* | *cegcc* ) 3353a73423d7Smrg # if an import library, we need to obtain dlname 3354a73423d7Smrg if func_win32_import_lib_p "$dlprefile"; then 3355a73423d7Smrg func_tr_sh "$dlprefile" 3356a73423d7Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 3357a73423d7Smrg dlprefile_dlbasename="" 3358a73423d7Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3359a73423d7Smrg # Use subshell, to avoid clobbering current variable values 3360a73423d7Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 3361a73423d7Smrg if test -n "$dlprefile_dlname" ; then 3362a73423d7Smrg func_basename "$dlprefile_dlname" 3363a73423d7Smrg dlprefile_dlbasename="$func_basename_result" 3364a73423d7Smrg else 3365a73423d7Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 3366a73423d7Smrg $sharedlib_from_linklib_cmd "$dlprefile" 3367a73423d7Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 3368a73423d7Smrg fi 3369a73423d7Smrg fi 3370a73423d7Smrg $opt_dry_run || { 3371a73423d7Smrg if test -n "$dlprefile_dlbasename" ; then 3372a73423d7Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3373a73423d7Smrg else 3374a73423d7Smrg func_warning "Could not compute DLL name from $name" 3375a73423d7Smrg eval '$ECHO ": $name " >> "$nlist"' 3376a73423d7Smrg fi 3377a73423d7Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3378a73423d7Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3379a73423d7Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3380a73423d7Smrg } 3381a73423d7Smrg else # not an import lib 3382a73423d7Smrg $opt_dry_run || { 3383a73423d7Smrg eval '$ECHO ": $name " >> "$nlist"' 3384a73423d7Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3385a73423d7Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3386a73423d7Smrg } 3387a73423d7Smrg fi 3388a73423d7Smrg ;; 3389a73423d7Smrg *) 3390a73423d7Smrg $opt_dry_run || { 3391a73423d7Smrg eval '$ECHO ": $name " >> "$nlist"' 3392a73423d7Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3393a73423d7Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3394a73423d7Smrg } 3395a73423d7Smrg ;; 3396a73423d7Smrg esac 3397b3e38ee4Smrg done 3398b3e38ee4Smrg 3399b3e38ee4Smrg $opt_dry_run || { 3400b3e38ee4Smrg # Make sure we have at least an empty file. 3401b3e38ee4Smrg test -f "$nlist" || : > "$nlist" 3402b3e38ee4Smrg 3403b3e38ee4Smrg if test -n "$exclude_expsyms"; then 3404b3e38ee4Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405b3e38ee4Smrg $MV "$nlist"T "$nlist" 3406a18ebfb2Smrg fi 3407b3e38ee4Smrg 3408b3e38ee4Smrg # Try sorting and uniquifying the output. 3409b3e38ee4Smrg if $GREP -v "^: " < "$nlist" | 3410b3e38ee4Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411b3e38ee4Smrg sort -k 3 3412b3e38ee4Smrg else 3413b3e38ee4Smrg sort +2 3414b3e38ee4Smrg fi | 3415b3e38ee4Smrg uniq > "$nlist"S; then 3416b3e38ee4Smrg : 3417a18ebfb2Smrg else 3418b3e38ee4Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 3419a18ebfb2Smrg fi 342050806d53Smrg 3421b3e38ee4Smrg if test -f "$nlist"S; then 3422b3e38ee4Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423a18ebfb2Smrg else 3424a73423d7Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425a18ebfb2Smrg fi 342650806d53Smrg 3427a73423d7Smrg echo >> "$output_objdir/$my_dlsyms" "\ 342850806d53Smrg 3429b3e38ee4Smrg/* The mapping between symbol names and symbols. */ 3430b3e38ee4Smrgtypedef struct { 3431b3e38ee4Smrg const char *name; 3432b3e38ee4Smrg void *address; 3433b3e38ee4Smrg} lt_dlsymlist; 3434a73423d7Smrgextern LT_DLSYM_CONST lt_dlsymlist 3435b3e38ee4Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 3436a73423d7SmrgLT_DLSYM_CONST lt_dlsymlist 3437b3e38ee4Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 3438b3e38ee4Smrg{\ 3439b3e38ee4Smrg { \"$my_originator\", (void *) 0 }," 344050806d53Smrg 3441b3e38ee4Smrg case $need_lib_prefix in 3442b3e38ee4Smrg no) 3443b3e38ee4Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444b3e38ee4Smrg ;; 3445b3e38ee4Smrg *) 3446b3e38ee4Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447b3e38ee4Smrg ;; 3448b3e38ee4Smrg esac 3449a73423d7Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3450b3e38ee4Smrg {0, (void *) 0} 3451b3e38ee4Smrg}; 345250806d53Smrg 3453b3e38ee4Smrg/* This works around a problem in FreeBSD linker */ 3454b3e38ee4Smrg#ifdef FREEBSD_WORKAROUND 3455b3e38ee4Smrgstatic const void *lt_preloaded_setup() { 3456b3e38ee4Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457b3e38ee4Smrg} 3458b3e38ee4Smrg#endif 3459b3e38ee4Smrg 3460b3e38ee4Smrg#ifdef __cplusplus 3461b3e38ee4Smrg} 3462b3e38ee4Smrg#endif\ 3463b3e38ee4Smrg" 3464b3e38ee4Smrg } # !$opt_dry_run 3465b3e38ee4Smrg 3466b3e38ee4Smrg pic_flag_for_symtable= 3467b3e38ee4Smrg case "$compile_command " in 3468b3e38ee4Smrg *" -static "*) ;; 3469b3e38ee4Smrg *) 3470b3e38ee4Smrg case $host in 3471b3e38ee4Smrg # compiling the symbol table file with pic_flag works around 3472b3e38ee4Smrg # a FreeBSD bug that causes programs to crash when -lm is 3473b3e38ee4Smrg # linked before any other PIC object. But we must not use 3474b3e38ee4Smrg # pic_flag when linking with -static. The problem exists in 3475b3e38ee4Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476a73423d7Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477b3e38ee4Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478b3e38ee4Smrg *-*-hpux*) 3479b3e38ee4Smrg pic_flag_for_symtable=" $pic_flag" ;; 3480b3e38ee4Smrg *) 3481b3e38ee4Smrg if test "X$my_pic_p" != Xno; then 3482b3e38ee4Smrg pic_flag_for_symtable=" $pic_flag" 3483a18ebfb2Smrg fi 3484b3e38ee4Smrg ;; 3485b3e38ee4Smrg esac 3486b3e38ee4Smrg ;; 3487b3e38ee4Smrg esac 3488b3e38ee4Smrg symtab_cflags= 3489b3e38ee4Smrg for arg in $LTCFLAGS; do 3490b3e38ee4Smrg case $arg in 3491b3e38ee4Smrg -pie | -fpie | -fPIE) ;; 3492a73423d7Smrg *) func_append symtab_cflags " $arg" ;; 3493b3e38ee4Smrg esac 3494b3e38ee4Smrg done 349550806d53Smrg 3496b3e38ee4Smrg # Now compile the dynamic symbol file. 3497b3e38ee4Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498af1a9c97Smrg 3499b3e38ee4Smrg # Clean up the generated files. 3500b3e38ee4Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 350150806d53Smrg 3502b3e38ee4Smrg # Transform the symbol file into the correct name. 3503b3e38ee4Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504b3e38ee4Smrg case $host in 3505b3e38ee4Smrg *cygwin* | *mingw* | *cegcc* ) 3506b3e38ee4Smrg if test -f "$output_objdir/$my_outputname.def"; then 3507a73423d7Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3508a73423d7Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509b3e38ee4Smrg else 3510a73423d7Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3511a73423d7Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512a18ebfb2Smrg fi 3513b3e38ee4Smrg ;; 3514b3e38ee4Smrg *) 3515a73423d7Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3516a73423d7Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517b3e38ee4Smrg ;; 3518b3e38ee4Smrg esac 3519b3e38ee4Smrg ;; 3520b3e38ee4Smrg *) 3521b3e38ee4Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522b3e38ee4Smrg ;; 3523b3e38ee4Smrg esac 3524b3e38ee4Smrg else 3525b3e38ee4Smrg # We keep going just in case the user didn't refer to 3526b3e38ee4Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527b3e38ee4Smrg # really was required. 352850806d53Smrg 3529b3e38ee4Smrg # Nullify the symbol file. 3530a73423d7Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3531a73423d7Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532b3e38ee4Smrg fi 3533b3e38ee4Smrg} 3534af1a9c97Smrg 3535b3e38ee4Smrg# func_win32_libid arg 3536b3e38ee4Smrg# return the library type of file 'arg' 3537b3e38ee4Smrg# 3538b3e38ee4Smrg# Need a lot of goo to handle *both* DLLs and import libs 3539b3e38ee4Smrg# Has to be a shell function in order to 'eat' the argument 3540b3e38ee4Smrg# that is supplied when $file_magic_command is called. 3541a73423d7Smrg# Despite the name, also deal with 64 bit binaries. 3542b3e38ee4Smrgfunc_win32_libid () 3543b3e38ee4Smrg{ 3544b3e38ee4Smrg $opt_debug 3545b3e38ee4Smrg win32_libid_type="unknown" 3546b3e38ee4Smrg win32_fileres=`file -L $1 2>/dev/null` 3547b3e38ee4Smrg case $win32_fileres in 3548b3e38ee4Smrg *ar\ archive\ import\ library*) # definitely import 3549b3e38ee4Smrg win32_libid_type="x86 archive import" 3550b3e38ee4Smrg ;; 3551b3e38ee4Smrg *ar\ archive*) # could be an import, or static 3552a73423d7Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553b3e38ee4Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3554a73423d7Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 3555a73423d7Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3556a73423d7Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557b3e38ee4Smrg $SED -n -e ' 3558b3e38ee4Smrg 1,100{ 3559b3e38ee4Smrg / I /{ 3560b3e38ee4Smrg s,.*,import, 3561b3e38ee4Smrg p 3562b3e38ee4Smrg q 3563b3e38ee4Smrg } 3564b3e38ee4Smrg }'` 3565b3e38ee4Smrg case $win32_nmres in 3566b3e38ee4Smrg import*) win32_libid_type="x86 archive import";; 3567b3e38ee4Smrg *) win32_libid_type="x86 archive static";; 3568b3e38ee4Smrg esac 3569b3e38ee4Smrg fi 3570b3e38ee4Smrg ;; 3571b3e38ee4Smrg *DLL*) 3572b3e38ee4Smrg win32_libid_type="x86 DLL" 3573b3e38ee4Smrg ;; 3574b3e38ee4Smrg *executable*) # but shell scripts are "executable" too... 3575b3e38ee4Smrg case $win32_fileres in 3576b3e38ee4Smrg *MS\ Windows\ PE\ Intel*) 3577b3e38ee4Smrg win32_libid_type="x86 DLL" 3578b3e38ee4Smrg ;; 3579b3e38ee4Smrg esac 3580b3e38ee4Smrg ;; 3581b3e38ee4Smrg esac 3582b3e38ee4Smrg $ECHO "$win32_libid_type" 3583b3e38ee4Smrg} 3584af1a9c97Smrg 3585a73423d7Smrg# func_cygming_dll_for_implib ARG 3586a73423d7Smrg# 3587a73423d7Smrg# Platform-specific function to extract the 3588a73423d7Smrg# name of the DLL associated with the specified 3589a73423d7Smrg# import library ARG. 3590a73423d7Smrg# Invoked by eval'ing the libtool variable 3591a73423d7Smrg# $sharedlib_from_linklib_cmd 3592a73423d7Smrg# Result is available in the variable 3593a73423d7Smrg# $sharedlib_from_linklib_result 3594a73423d7Smrgfunc_cygming_dll_for_implib () 3595a73423d7Smrg{ 3596a73423d7Smrg $opt_debug 3597a73423d7Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3598a73423d7Smrg} 3599a73423d7Smrg 3600a73423d7Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3601a73423d7Smrg# 3602a73423d7Smrg# The is the core of a fallback implementation of a 3603a73423d7Smrg# platform-specific function to extract the name of the 3604a73423d7Smrg# DLL associated with the specified import library LIBNAME. 3605a73423d7Smrg# 3606a73423d7Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 3607a73423d7Smrg# on the platform and compiler that created the implib. 3608a73423d7Smrg# 3609a73423d7Smrg# Echos the name of the DLL associated with the 3610a73423d7Smrg# specified import library. 3611a73423d7Smrgfunc_cygming_dll_for_implib_fallback_core () 3612a73423d7Smrg{ 3613a73423d7Smrg $opt_debug 3614a73423d7Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3615a73423d7Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3616a73423d7Smrg $SED '/^Contents of section '"$match_literal"':/{ 3617a73423d7Smrg # Place marker at beginning of archive member dllname section 3618a73423d7Smrg s/.*/====MARK====/ 3619a73423d7Smrg p 3620a73423d7Smrg d 3621a73423d7Smrg } 3622a73423d7Smrg # These lines can sometimes be longer than 43 characters, but 3623a73423d7Smrg # are always uninteresting 3624a73423d7Smrg /:[ ]*file format pe[i]\{,1\}-/d 3625a73423d7Smrg /^In archive [^:]*:/d 3626a73423d7Smrg # Ensure marker is printed 3627a73423d7Smrg /^====MARK====/p 3628a73423d7Smrg # Remove all lines with less than 43 characters 3629a73423d7Smrg /^.\{43\}/!d 3630a73423d7Smrg # From remaining lines, remove first 43 characters 3631a73423d7Smrg s/^.\{43\}//' | 3632a73423d7Smrg $SED -n ' 3633a73423d7Smrg # Join marker and all lines until next marker into a single line 3634a73423d7Smrg /^====MARK====/ b para 3635a73423d7Smrg H 3636a73423d7Smrg $ b para 3637a73423d7Smrg b 3638a73423d7Smrg :para 3639a73423d7Smrg x 3640a73423d7Smrg s/\n//g 3641a73423d7Smrg # Remove the marker 3642a73423d7Smrg s/^====MARK====// 3643a73423d7Smrg # Remove trailing dots and whitespace 3644a73423d7Smrg s/[\. \t]*$// 3645a73423d7Smrg # Print 3646a73423d7Smrg /./p' | 3647a73423d7Smrg # we now have a list, one entry per line, of the stringified 3648a73423d7Smrg # contents of the appropriate section of all members of the 3649a73423d7Smrg # archive which possess that section. Heuristic: eliminate 3650a73423d7Smrg # all those which have a first or second character that is 3651a73423d7Smrg # a '.' (that is, objdump's representation of an unprintable 3652a73423d7Smrg # character.) This should work for all archives with less than 3653a73423d7Smrg # 0x302f exports -- but will fail for DLLs whose name actually 3654a73423d7Smrg # begins with a literal '.' or a single character followed by 3655a73423d7Smrg # a '.'. 3656a73423d7Smrg # 3657a73423d7Smrg # Of those that remain, print the first one. 3658a73423d7Smrg $SED -e '/^\./d;/^.\./d;q' 3659a73423d7Smrg} 3660a73423d7Smrg 3661a73423d7Smrg# func_cygming_gnu_implib_p ARG 3662a73423d7Smrg# This predicate returns with zero status (TRUE) if 3663a73423d7Smrg# ARG is a GNU/binutils-style import library. Returns 3664a73423d7Smrg# with nonzero status (FALSE) otherwise. 3665a73423d7Smrgfunc_cygming_gnu_implib_p () 3666a73423d7Smrg{ 3667a73423d7Smrg $opt_debug 3668a73423d7Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3669a73423d7Smrg 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)$'` 3670a73423d7Smrg test -n "$func_cygming_gnu_implib_tmp" 3671a73423d7Smrg} 3672a73423d7Smrg 3673a73423d7Smrg# func_cygming_ms_implib_p ARG 3674a73423d7Smrg# This predicate returns with zero status (TRUE) if 3675a73423d7Smrg# ARG is an MS-style import library. Returns 3676a73423d7Smrg# with nonzero status (FALSE) otherwise. 3677a73423d7Smrgfunc_cygming_ms_implib_p () 3678a73423d7Smrg{ 3679a73423d7Smrg $opt_debug 3680a73423d7Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3681a73423d7Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 3682a73423d7Smrg test -n "$func_cygming_ms_implib_tmp" 3683a73423d7Smrg} 3684a73423d7Smrg 3685a73423d7Smrg# func_cygming_dll_for_implib_fallback ARG 3686a73423d7Smrg# Platform-specific function to extract the 3687a73423d7Smrg# name of the DLL associated with the specified 3688a73423d7Smrg# import library ARG. 3689a73423d7Smrg# 3690a73423d7Smrg# This fallback implementation is for use when $DLLTOOL 3691a73423d7Smrg# does not support the --identify-strict option. 3692a73423d7Smrg# Invoked by eval'ing the libtool variable 3693a73423d7Smrg# $sharedlib_from_linklib_cmd 3694a73423d7Smrg# Result is available in the variable 3695a73423d7Smrg# $sharedlib_from_linklib_result 3696a73423d7Smrgfunc_cygming_dll_for_implib_fallback () 3697a73423d7Smrg{ 3698a73423d7Smrg $opt_debug 3699a73423d7Smrg if func_cygming_gnu_implib_p "$1" ; then 3700a73423d7Smrg # binutils import library 3701a73423d7Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 3702a73423d7Smrg elif func_cygming_ms_implib_p "$1" ; then 3703a73423d7Smrg # ms-generated import library 3704a73423d7Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3705a73423d7Smrg else 3706a73423d7Smrg # unknown 3707a73423d7Smrg sharedlib_from_linklib_result="" 3708a73423d7Smrg fi 3709a73423d7Smrg} 3710af1a9c97Smrg 3711af1a9c97Smrg 3712b3e38ee4Smrg# func_extract_an_archive dir oldlib 3713b3e38ee4Smrgfunc_extract_an_archive () 3714b3e38ee4Smrg{ 3715b3e38ee4Smrg $opt_debug 3716b3e38ee4Smrg f_ex_an_ar_dir="$1"; shift 3717b3e38ee4Smrg f_ex_an_ar_oldlib="$1" 3718a73423d7Smrg if test "$lock_old_archive_extraction" = yes; then 3719a73423d7Smrg lockfile=$f_ex_an_ar_oldlib.lock 3720a73423d7Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3721a73423d7Smrg func_echo "Waiting for $lockfile to be removed" 3722a73423d7Smrg sleep 2 3723a73423d7Smrg done 3724a73423d7Smrg fi 3725a73423d7Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3726a73423d7Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 3727a73423d7Smrg if test "$lock_old_archive_extraction" = yes; then 3728a73423d7Smrg $opt_dry_run || rm -f "$lockfile" 3729a73423d7Smrg fi 3730b3e38ee4Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731b3e38ee4Smrg : 3732b3e38ee4Smrg else 3733b3e38ee4Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734b3e38ee4Smrg fi 3735b3e38ee4Smrg} 373650806d53Smrg 373750806d53Smrg 3738b3e38ee4Smrg# func_extract_archives gentop oldlib ... 3739b3e38ee4Smrgfunc_extract_archives () 3740b3e38ee4Smrg{ 3741b3e38ee4Smrg $opt_debug 3742b3e38ee4Smrg my_gentop="$1"; shift 3743b3e38ee4Smrg my_oldlibs=${1+"$@"} 3744b3e38ee4Smrg my_oldobjs="" 3745b3e38ee4Smrg my_xlib="" 3746b3e38ee4Smrg my_xabs="" 3747b3e38ee4Smrg my_xdir="" 374850806d53Smrg 3749b3e38ee4Smrg for my_xlib in $my_oldlibs; do 3750b3e38ee4Smrg # Extract the objects. 3751b3e38ee4Smrg case $my_xlib in 3752b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753b3e38ee4Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754b3e38ee4Smrg esac 3755b3e38ee4Smrg func_basename "$my_xlib" 3756b3e38ee4Smrg my_xlib="$func_basename_result" 3757b3e38ee4Smrg my_xlib_u=$my_xlib 3758b3e38ee4Smrg while :; do 3759b3e38ee4Smrg case " $extracted_archives " in 3760b3e38ee4Smrg *" $my_xlib_u "*) 3761b3e38ee4Smrg func_arith $extracted_serial + 1 3762b3e38ee4Smrg extracted_serial=$func_arith_result 3763b3e38ee4Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764b3e38ee4Smrg *) break ;; 3765b3e38ee4Smrg esac 3766b3e38ee4Smrg done 3767b3e38ee4Smrg extracted_archives="$extracted_archives $my_xlib_u" 3768b3e38ee4Smrg my_xdir="$my_gentop/$my_xlib_u" 376950806d53Smrg 3770b3e38ee4Smrg func_mkdir_p "$my_xdir" 3771af1a9c97Smrg 3772b3e38ee4Smrg case $host in 3773b3e38ee4Smrg *-darwin*) 3774b3e38ee4Smrg func_verbose "Extracting $my_xabs" 3775b3e38ee4Smrg # Do not bother doing anything if just a dry run 3776b3e38ee4Smrg $opt_dry_run || { 3777b3e38ee4Smrg darwin_orig_dir=`pwd` 3778b3e38ee4Smrg cd $my_xdir || exit $? 3779b3e38ee4Smrg darwin_archive=$my_xabs 3780b3e38ee4Smrg darwin_curdir=`pwd` 3781b3e38ee4Smrg darwin_base_archive=`basename "$darwin_archive"` 3782b3e38ee4Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783b3e38ee4Smrg if test -n "$darwin_arches"; then 3784b3e38ee4Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785b3e38ee4Smrg darwin_arch= 3786b3e38ee4Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787b3e38ee4Smrg for darwin_arch in $darwin_arches ; do 3788b3e38ee4Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789b3e38ee4Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790b3e38ee4Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791b3e38ee4Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792b3e38ee4Smrg cd "$darwin_curdir" 3793b3e38ee4Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794b3e38ee4Smrg done # $darwin_arches 3795b3e38ee4Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796b3e38ee4Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797b3e38ee4Smrg darwin_file= 3798b3e38ee4Smrg darwin_files= 3799b3e38ee4Smrg for darwin_file in $darwin_filelist; do 3800a73423d7Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801b3e38ee4Smrg $LIPO -create -output "$darwin_file" $darwin_files 3802b3e38ee4Smrg done # $darwin_filelist 3803b3e38ee4Smrg $RM -rf unfat-$$ 3804b3e38ee4Smrg cd "$darwin_orig_dir" 3805a18ebfb2Smrg else 3806b3e38ee4Smrg cd $darwin_orig_dir 3807b3e38ee4Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808b3e38ee4Smrg fi # $darwin_arches 3809b3e38ee4Smrg } # !$opt_dry_run 3810b3e38ee4Smrg ;; 3811b3e38ee4Smrg *) 3812b3e38ee4Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813b3e38ee4Smrg ;; 3814b3e38ee4Smrg esac 3815a73423d7Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816b3e38ee4Smrg done 381750806d53Smrg 3818b3e38ee4Smrg func_extract_archives_result="$my_oldobjs" 3819b3e38ee4Smrg} 382050806d53Smrg 382150806d53Smrg 3822a73423d7Smrg# func_emit_wrapper [arg=no] 3823a73423d7Smrg# 3824a73423d7Smrg# Emit a libtool wrapper script on stdout. 3825a73423d7Smrg# Don't directly open a file because we may want to 3826a73423d7Smrg# incorporate the script contents within a cygwin/mingw 3827a73423d7Smrg# wrapper executable. Must ONLY be called from within 3828a73423d7Smrg# func_mode_link because it depends on a number of variables 3829a73423d7Smrg# set therein. 3830b3e38ee4Smrg# 3831a73423d7Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3832a73423d7Smrg# variable will take. If 'yes', then the emitted script 3833a73423d7Smrg# will assume that the directory in which it is stored is 3834a73423d7Smrg# the $objdir directory. This is a cygwin/mingw-specific 3835a73423d7Smrg# behavior. 3836a73423d7Smrgfunc_emit_wrapper () 3837b3e38ee4Smrg{ 3838a73423d7Smrg func_emit_wrapper_arg1=${1-no} 3839a18ebfb2Smrg 3840b3e38ee4Smrg $ECHO "\ 3841b3e38ee4Smrg#! $SHELL 384250806d53Smrg 3843b3e38ee4Smrg# $output - temporary wrapper script for $objdir/$outputname 3844b3e38ee4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845b3e38ee4Smrg# 3846b3e38ee4Smrg# The $output program cannot be directly executed until all the libtool 3847b3e38ee4Smrg# libraries that it depends on are installed. 3848b3e38ee4Smrg# 3849b3e38ee4Smrg# This wrapper script should never be moved out of the build directory. 3850b3e38ee4Smrg# If it is, it will not operate correctly. 385150806d53Smrg 3852b3e38ee4Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3853b3e38ee4Smrg# metacharacters that are still active within double-quoted strings. 3854b3e38ee4Smrgsed_quote_subst='$sed_quote_subst' 385550806d53Smrg 3856b3e38ee4Smrg# Be Bourne compatible 3857b3e38ee4Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858b3e38ee4Smrg emulate sh 3859b3e38ee4Smrg NULLCMD=: 3860b3e38ee4Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861b3e38ee4Smrg # is contrary to our usage. Disable this feature. 3862b3e38ee4Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863b3e38ee4Smrg setopt NO_GLOB_SUBST 3864b3e38ee4Smrgelse 3865b3e38ee4Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866b3e38ee4Smrgfi 3867b3e38ee4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868b3e38ee4SmrgDUALCASE=1; export DUALCASE # for MKS sh 386950806d53Smrg 3870b3e38ee4Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871b3e38ee4Smrg# if CDPATH is set. 3872b3e38ee4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 387350806d53Smrg 3874b3e38ee4Smrgrelink_command=\"$relink_command\" 387550806d53Smrg 3876b3e38ee4Smrg# This environment variable determines our operation mode. 3877b3e38ee4Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878b3e38ee4Smrg # install mode needs the following variables: 3879b3e38ee4Smrg generated_by_libtool_version='$macro_version' 3880b3e38ee4Smrg notinst_deplibs='$notinst_deplibs' 3881b3e38ee4Smrgelse 3882b3e38ee4Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883b3e38ee4Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 3884a73423d7Smrg file=\"\$0\"" 3885a73423d7Smrg 3886a73423d7Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3887a73423d7Smrg $ECHO "\ 3888a73423d7Smrg 3889a73423d7Smrg# A function that is used when there is no print builtin or printf. 3890a73423d7Smrgfunc_fallback_echo () 3891a73423d7Smrg{ 3892a73423d7Smrg eval 'cat <<_LTECHO_EOF 3893a73423d7Smrg\$1 3894a73423d7Smrg_LTECHO_EOF' 3895a73423d7Smrg} 3896a73423d7Smrg ECHO=\"$qECHO\" 3897a73423d7Smrg fi 3898a73423d7Smrg 3899a73423d7Smrg# Very basic option parsing. These options are (a) specific to 3900a73423d7Smrg# the libtool wrapper, (b) are identical between the wrapper 3901a73423d7Smrg# /script/ and the wrapper /executable/ which is used only on 3902a73423d7Smrg# windows platforms, and (c) all begin with the string "--lt-" 3903a73423d7Smrg# (application programs are unlikely to have options which match 3904a73423d7Smrg# this pattern). 3905a73423d7Smrg# 3906a73423d7Smrg# There are only two supported options: --lt-debug and 3907a73423d7Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 3908a73423d7Smrg# 3909a73423d7Smrg# The first argument to this parsing function should be the 3910a73423d7Smrg# script's $0 value, followed by "$@". 3911a73423d7Smrglt_option_debug= 3912a73423d7Smrgfunc_parse_lt_options () 3913a73423d7Smrg{ 3914a73423d7Smrg lt_script_arg0=\$0 3915a73423d7Smrg shift 3916a73423d7Smrg for lt_opt 3917a73423d7Smrg do 3918a73423d7Smrg case \"\$lt_opt\" in 3919a73423d7Smrg --lt-debug) lt_option_debug=1 ;; 3920a73423d7Smrg --lt-dump-script) 3921a73423d7Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3922a73423d7Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3923a73423d7Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3924a73423d7Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 3925a73423d7Smrg exit 0 3926a73423d7Smrg ;; 3927a73423d7Smrg --lt-*) 3928a73423d7Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3929a73423d7Smrg exit 1 3930a73423d7Smrg ;; 3931a73423d7Smrg esac 3932a73423d7Smrg done 3933a73423d7Smrg 3934a73423d7Smrg # Print the debug banner immediately: 3935a73423d7Smrg if test -n \"\$lt_option_debug\"; then 3936a73423d7Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3937a73423d7Smrg fi 3938a73423d7Smrg} 3939a73423d7Smrg 3940a73423d7Smrg# Used when --lt-debug. Prints its arguments to stdout 3941a73423d7Smrg# (redirection is the responsibility of the caller) 3942a73423d7Smrgfunc_lt_dump_args () 3943a73423d7Smrg{ 3944a73423d7Smrg lt_dump_args_N=1; 3945a73423d7Smrg for lt_arg 3946a73423d7Smrg do 3947a73423d7Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3948a73423d7Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3949a73423d7Smrg done 3950a73423d7Smrg} 3951a73423d7Smrg 3952a73423d7Smrg# Core function for launching the target application 3953a73423d7Smrgfunc_exec_program_core () 3954a73423d7Smrg{ 3955b3e38ee4Smrg" 3956a73423d7Smrg case $host in 3957a73423d7Smrg # Backslashes separate directories on plain windows 3958a73423d7Smrg *-*-mingw | *-*-os2* | *-cegcc*) 3959a73423d7Smrg $ECHO "\ 3960a73423d7Smrg if test -n \"\$lt_option_debug\"; then 3961a73423d7Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3962a73423d7Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3963a73423d7Smrg fi 3964a73423d7Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3965a73423d7Smrg" 3966a73423d7Smrg ;; 3967a73423d7Smrg 3968a73423d7Smrg *) 3969a73423d7Smrg $ECHO "\ 3970a73423d7Smrg if test -n \"\$lt_option_debug\"; then 3971a73423d7Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3972a73423d7Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3973a73423d7Smrg fi 3974a73423d7Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 3975a73423d7Smrg" 3976a73423d7Smrg ;; 3977a73423d7Smrg esac 3978a73423d7Smrg $ECHO "\ 3979a73423d7Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3980a73423d7Smrg exit 1 3981a73423d7Smrg} 3982a73423d7Smrg 3983a73423d7Smrg# A function to encapsulate launching the target application 3984a73423d7Smrg# Strips options in the --lt-* namespace from \$@ and 3985a73423d7Smrg# launches target application with the remaining arguments. 3986a73423d7Smrgfunc_exec_program () 3987a73423d7Smrg{ 3988a73423d7Smrg case \" \$* \" in 3989a73423d7Smrg *\\ --lt-*) 3990a73423d7Smrg for lt_wr_arg 3991a73423d7Smrg do 3992a73423d7Smrg case \$lt_wr_arg in 3993a73423d7Smrg --lt-*) ;; 3994a73423d7Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995a73423d7Smrg esac 3996a73423d7Smrg shift 3997a73423d7Smrg done ;; 3998a73423d7Smrg esac 3999a73423d7Smrg func_exec_program_core \${1+\"\$@\"} 4000a73423d7Smrg} 4001a73423d7Smrg 4002a73423d7Smrg # Parse options 4003a73423d7Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 400450806d53Smrg 4005b3e38ee4Smrg # Find the directory that this script lives in. 4006a73423d7Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007b3e38ee4Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 400850806d53Smrg 4009b3e38ee4Smrg # Follow symbolic links until we get to the real thisdir. 4010a73423d7Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011b3e38ee4Smrg while test -n \"\$file\"; do 4012a73423d7Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 401350806d53Smrg 4014b3e38ee4Smrg # If there was a directory component, then change thisdir. 4015b3e38ee4Smrg if test \"x\$destdir\" != \"x\$file\"; then 4016b3e38ee4Smrg case \"\$destdir\" in 4017b3e38ee4Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018b3e38ee4Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 4019a18ebfb2Smrg esac 4020b3e38ee4Smrg fi 402150806d53Smrg 4022a73423d7Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4023a73423d7Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024b3e38ee4Smrg done 402550806d53Smrg 4026b3e38ee4Smrg # Usually 'no', except on cygwin/mingw when embedded into 4027b3e38ee4Smrg # the cwrapper. 4028a73423d7Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029b3e38ee4Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030b3e38ee4Smrg # special case for '.' 4031b3e38ee4Smrg if test \"\$thisdir\" = \".\"; then 4032b3e38ee4Smrg thisdir=\`pwd\` 4033b3e38ee4Smrg fi 4034b3e38ee4Smrg # remove .libs from thisdir 4035b3e38ee4Smrg case \"\$thisdir\" in 4036a73423d7Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037b3e38ee4Smrg $objdir ) thisdir=. ;; 4038b3e38ee4Smrg esac 4039b3e38ee4Smrg fi 4040b3e38ee4Smrg 4041b3e38ee4Smrg # Try to get the absolute directory name. 4042b3e38ee4Smrg absdir=\`cd \"\$thisdir\" && pwd\` 4043b3e38ee4Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044b3e38ee4Smrg" 4045b3e38ee4Smrg 4046b3e38ee4Smrg if test "$fast_install" = yes; then 4047b3e38ee4Smrg $ECHO "\ 4048b3e38ee4Smrg program=lt-'$outputname'$exeext 4049b3e38ee4Smrg progdir=\"\$thisdir/$objdir\" 4050b3e38ee4Smrg 4051b3e38ee4Smrg if test ! -f \"\$progdir/\$program\" || 4052b3e38ee4Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053b3e38ee4Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054b3e38ee4Smrg 4055b3e38ee4Smrg file=\"\$\$-\$program\" 4056b3e38ee4Smrg 4057b3e38ee4Smrg if test ! -d \"\$progdir\"; then 4058b3e38ee4Smrg $MKDIR \"\$progdir\" 4059b3e38ee4Smrg else 4060b3e38ee4Smrg $RM \"\$progdir/\$file\" 4061b3e38ee4Smrg fi" 4062b3e38ee4Smrg 4063b3e38ee4Smrg $ECHO "\ 4064b3e38ee4Smrg 4065b3e38ee4Smrg # relink executable if necessary 4066b3e38ee4Smrg if test -n \"\$relink_command\"; then 4067b3e38ee4Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068b3e38ee4Smrg else 4069b3e38ee4Smrg $ECHO \"\$relink_command_output\" >&2 4070b3e38ee4Smrg $RM \"\$progdir/\$file\" 4071b3e38ee4Smrg exit 1 4072a18ebfb2Smrg fi 4073b3e38ee4Smrg fi 407450806d53Smrg 4075b3e38ee4Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076b3e38ee4Smrg { $RM \"\$progdir/\$program\"; 4077b3e38ee4Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078b3e38ee4Smrg $RM \"\$progdir/\$file\" 4079b3e38ee4Smrg fi" 4080b3e38ee4Smrg else 4081b3e38ee4Smrg $ECHO "\ 4082b3e38ee4Smrg program='$outputname' 4083b3e38ee4Smrg progdir=\"\$thisdir/$objdir\" 4084b3e38ee4Smrg" 4085a18ebfb2Smrg fi 408650806d53Smrg 4087b3e38ee4Smrg $ECHO "\ 408850806d53Smrg 4089b3e38ee4Smrg if test -f \"\$progdir/\$program\"; then" 409050806d53Smrg 4091a73423d7Smrg # fixup the dll searchpath if we need to. 4092a73423d7Smrg # 4093a73423d7Smrg # Fix the DLL searchpath if we need to. Do this before prepending 4094a73423d7Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 4095a73423d7Smrg # libraries must come first. 4096a73423d7Smrg if test -n "$dllsearchpath"; then 4097a73423d7Smrg $ECHO "\ 4098a73423d7Smrg # Add the dll search path components to the executable PATH 4099a73423d7Smrg PATH=$dllsearchpath:\$PATH 4100a73423d7Smrg" 4101a73423d7Smrg fi 4102a73423d7Smrg 4103b3e38ee4Smrg # Export our shlibpath_var if we have one. 4104b3e38ee4Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105b3e38ee4Smrg $ECHO "\ 4106b3e38ee4Smrg # Add our own library path to $shlibpath_var 4107b3e38ee4Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108b3e38ee4Smrg 4109b3e38ee4Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110b3e38ee4Smrg # The second colon is a workaround for a bug in BeOS R4 sed 4111a73423d7Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 411250806d53Smrg 4113b3e38ee4Smrg export $shlibpath_var 4114b3e38ee4Smrg" 4115a18ebfb2Smrg fi 411650806d53Smrg 4117b3e38ee4Smrg $ECHO "\ 4118b3e38ee4Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119b3e38ee4Smrg # Run the actual program with our arguments. 4120a73423d7Smrg func_exec_program \${1+\"\$@\"} 4121b3e38ee4Smrg fi 4122b3e38ee4Smrg else 4123b3e38ee4Smrg # The program doesn't exist. 4124b3e38ee4Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125b3e38ee4Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4126a73423d7Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127b3e38ee4Smrg exit 1 4128b3e38ee4Smrg fi 4129b3e38ee4Smrgfi\ 4130b3e38ee4Smrg" 4131b3e38ee4Smrg} 413250806d53Smrg 4133af1a9c97Smrg 4134b3e38ee4Smrg# func_emit_cwrapperexe_src 4135b3e38ee4Smrg# emit the source code for a wrapper executable on stdout 4136b3e38ee4Smrg# Must ONLY be called from within func_mode_link because 4137b3e38ee4Smrg# it depends on a number of variable set therein. 4138b3e38ee4Smrgfunc_emit_cwrapperexe_src () 4139b3e38ee4Smrg{ 4140b3e38ee4Smrg cat <<EOF 414150806d53Smrg 4142b3e38ee4Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143b3e38ee4Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 414450806d53Smrg 4145b3e38ee4Smrg The $output program cannot be directly executed until all the libtool 4146b3e38ee4Smrg libraries that it depends on are installed. 414750806d53Smrg 4148b3e38ee4Smrg This wrapper executable should never be moved out of the build directory. 4149b3e38ee4Smrg If it is, it will not operate correctly. 4150b3e38ee4Smrg*/ 4151b3e38ee4SmrgEOF 4152b3e38ee4Smrg cat <<"EOF" 4153a73423d7Smrg#ifdef _MSC_VER 4154a73423d7Smrg# define _CRT_SECURE_NO_DEPRECATE 1 4155a73423d7Smrg#endif 4156b3e38ee4Smrg#include <stdio.h> 4157b3e38ee4Smrg#include <stdlib.h> 4158b3e38ee4Smrg#ifdef _MSC_VER 4159b3e38ee4Smrg# include <direct.h> 4160b3e38ee4Smrg# include <process.h> 4161b3e38ee4Smrg# include <io.h> 4162b3e38ee4Smrg#else 4163b3e38ee4Smrg# include <unistd.h> 4164b3e38ee4Smrg# include <stdint.h> 4165b3e38ee4Smrg# ifdef __CYGWIN__ 4166b3e38ee4Smrg# include <io.h> 4167b3e38ee4Smrg# endif 4168b3e38ee4Smrg#endif 4169b3e38ee4Smrg#include <malloc.h> 4170b3e38ee4Smrg#include <stdarg.h> 4171b3e38ee4Smrg#include <assert.h> 4172b3e38ee4Smrg#include <string.h> 4173b3e38ee4Smrg#include <ctype.h> 4174b3e38ee4Smrg#include <errno.h> 4175b3e38ee4Smrg#include <fcntl.h> 4176b3e38ee4Smrg#include <sys/stat.h> 417750806d53Smrg 4178a73423d7Smrg/* declarations of non-ANSI functions */ 4179a73423d7Smrg#if defined(__MINGW32__) 4180a73423d7Smrg# ifdef __STRICT_ANSI__ 4181a73423d7Smrgint _putenv (const char *); 4182a73423d7Smrg# endif 4183a73423d7Smrg#elif defined(__CYGWIN__) 4184a73423d7Smrg# ifdef __STRICT_ANSI__ 4185a73423d7Smrgchar *realpath (const char *, char *); 4186a73423d7Smrgint putenv (char *); 4187a73423d7Smrgint setenv (const char *, const char *, int); 4188a73423d7Smrg# endif 4189a73423d7Smrg/* #elif defined (other platforms) ... */ 4190a73423d7Smrg#endif 4191a73423d7Smrg 4192a73423d7Smrg/* portability defines, excluding path handling macros */ 4193a73423d7Smrg#if defined(_MSC_VER) 4194a73423d7Smrg# define setmode _setmode 4195a73423d7Smrg# define stat _stat 4196a73423d7Smrg# define chmod _chmod 4197a73423d7Smrg# define getcwd _getcwd 4198a73423d7Smrg# define putenv _putenv 4199a73423d7Smrg# define S_IXUSR _S_IEXEC 4200a73423d7Smrg# ifndef _INTPTR_T_DEFINED 4201a73423d7Smrg# define _INTPTR_T_DEFINED 4202a73423d7Smrg# define intptr_t int 4203a73423d7Smrg# endif 4204a73423d7Smrg#elif defined(__MINGW32__) 4205a73423d7Smrg# define setmode _setmode 4206a73423d7Smrg# define stat _stat 4207a73423d7Smrg# define chmod _chmod 4208a73423d7Smrg# define getcwd _getcwd 4209a73423d7Smrg# define putenv _putenv 4210a73423d7Smrg#elif defined(__CYGWIN__) 4211a73423d7Smrg# define HAVE_SETENV 4212a73423d7Smrg# define FOPEN_WB "wb" 4213a73423d7Smrg/* #elif defined (other platforms) ... */ 4214a73423d7Smrg#endif 4215a73423d7Smrg 4216b3e38ee4Smrg#if defined(PATH_MAX) 4217b3e38ee4Smrg# define LT_PATHMAX PATH_MAX 4218b3e38ee4Smrg#elif defined(MAXPATHLEN) 4219b3e38ee4Smrg# define LT_PATHMAX MAXPATHLEN 4220b3e38ee4Smrg#else 4221b3e38ee4Smrg# define LT_PATHMAX 1024 4222b3e38ee4Smrg#endif 422350806d53Smrg 4224b3e38ee4Smrg#ifndef S_IXOTH 4225b3e38ee4Smrg# define S_IXOTH 0 4226b3e38ee4Smrg#endif 4227b3e38ee4Smrg#ifndef S_IXGRP 4228b3e38ee4Smrg# define S_IXGRP 0 4229b3e38ee4Smrg#endif 423050806d53Smrg 4231a73423d7Smrg/* path handling portability macros */ 4232b3e38ee4Smrg#ifndef DIR_SEPARATOR 4233b3e38ee4Smrg# define DIR_SEPARATOR '/' 4234b3e38ee4Smrg# define PATH_SEPARATOR ':' 4235b3e38ee4Smrg#endif 423650806d53Smrg 4237b3e38ee4Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238b3e38ee4Smrg defined (__OS2__) 4239b3e38ee4Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240b3e38ee4Smrg# define FOPEN_WB "wb" 4241b3e38ee4Smrg# ifndef DIR_SEPARATOR_2 4242b3e38ee4Smrg# define DIR_SEPARATOR_2 '\\' 4243b3e38ee4Smrg# endif 4244b3e38ee4Smrg# ifndef PATH_SEPARATOR_2 4245b3e38ee4Smrg# define PATH_SEPARATOR_2 ';' 4246b3e38ee4Smrg# endif 4247b3e38ee4Smrg#endif 424850806d53Smrg 4249b3e38ee4Smrg#ifndef DIR_SEPARATOR_2 4250b3e38ee4Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251b3e38ee4Smrg#else /* DIR_SEPARATOR_2 */ 4252b3e38ee4Smrg# define IS_DIR_SEPARATOR(ch) \ 4253b3e38ee4Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254b3e38ee4Smrg#endif /* DIR_SEPARATOR_2 */ 425550806d53Smrg 4256b3e38ee4Smrg#ifndef PATH_SEPARATOR_2 4257b3e38ee4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258b3e38ee4Smrg#else /* PATH_SEPARATOR_2 */ 4259b3e38ee4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260b3e38ee4Smrg#endif /* PATH_SEPARATOR_2 */ 426150806d53Smrg 4262b3e38ee4Smrg#ifndef FOPEN_WB 4263b3e38ee4Smrg# define FOPEN_WB "w" 4264b3e38ee4Smrg#endif 4265b3e38ee4Smrg#ifndef _O_BINARY 4266b3e38ee4Smrg# define _O_BINARY 0 4267b3e38ee4Smrg#endif 426850806d53Smrg 4269b3e38ee4Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270b3e38ee4Smrg#define XFREE(stale) do { \ 4271b3e38ee4Smrg if (stale) { free ((void *) stale); stale = 0; } \ 4272b3e38ee4Smrg} while (0) 427350806d53Smrg 4274a73423d7Smrg#if defined(LT_DEBUGWRAPPER) 4275a73423d7Smrgstatic int lt_debug = 1; 4276b3e38ee4Smrg#else 4277a73423d7Smrgstatic int lt_debug = 0; 4278b3e38ee4Smrg#endif 427950806d53Smrg 4280a73423d7Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 428150806d53Smrg 4282b3e38ee4Smrgvoid *xmalloc (size_t num); 4283b3e38ee4Smrgchar *xstrdup (const char *string); 4284b3e38ee4Smrgconst char *base_name (const char *name); 4285b3e38ee4Smrgchar *find_executable (const char *wrapper); 4286b3e38ee4Smrgchar *chase_symlinks (const char *pathspec); 4287b3e38ee4Smrgint make_executable (const char *path); 4288b3e38ee4Smrgint check_executable (const char *path); 4289b3e38ee4Smrgchar *strendzap (char *str, const char *pat); 4290a73423d7Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4291a73423d7Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 4292a73423d7Smrgstatic const char *nonnull (const char *s); 4293a73423d7Smrgstatic const char *nonempty (const char *s); 4294b3e38ee4Smrgvoid lt_setenv (const char *name, const char *value); 4295b3e38ee4Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296b3e38ee4Smrgvoid lt_update_exe_path (const char *name, const char *value); 4297b3e38ee4Smrgvoid lt_update_lib_path (const char *name, const char *value); 4298a73423d7Smrgchar **prepare_spawn (char **argv); 4299a73423d7Smrgvoid lt_dump_script (FILE *f); 4300b3e38ee4SmrgEOF 4301b3e38ee4Smrg 4302b3e38ee4Smrg cat <<EOF 4303a73423d7Smrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304b3e38ee4Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305b3e38ee4SmrgEOF 430650806d53Smrg 4307b3e38ee4Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4308a73423d7Smrg func_to_host_path "$temp_rpath" 4309b3e38ee4Smrg cat <<EOF 4310a73423d7Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311b3e38ee4SmrgEOF 4312b3e38ee4Smrg else 4313b3e38ee4Smrg cat <<"EOF" 4314b3e38ee4Smrgconst char * LIB_PATH_VALUE = ""; 4315b3e38ee4SmrgEOF 4316a18ebfb2Smrg fi 431750806d53Smrg 4318b3e38ee4Smrg if test -n "$dllsearchpath"; then 4319a73423d7Smrg func_to_host_path "$dllsearchpath:" 4320b3e38ee4Smrg cat <<EOF 4321b3e38ee4Smrgconst char * EXE_PATH_VARNAME = "PATH"; 4322a73423d7Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323a18ebfb2SmrgEOF 4324a18ebfb2Smrg else 4325b3e38ee4Smrg cat <<"EOF" 4326b3e38ee4Smrgconst char * EXE_PATH_VARNAME = ""; 4327b3e38ee4Smrgconst char * EXE_PATH_VALUE = ""; 4328b3e38ee4SmrgEOF 4329a18ebfb2Smrg fi 4330b3e38ee4Smrg 4331b3e38ee4Smrg if test "$fast_install" = yes; then 4332b3e38ee4Smrg cat <<EOF 4333b3e38ee4Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334b3e38ee4SmrgEOF 4335a18ebfb2Smrg else 4336b3e38ee4Smrg cat <<EOF 4337b3e38ee4Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338b3e38ee4SmrgEOF 4339a18ebfb2Smrg fi 434050806d53Smrg 434150806d53Smrg 4342b3e38ee4Smrg cat <<"EOF" 434350806d53Smrg 4344b3e38ee4Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 434550806d53Smrg 4346b3e38ee4Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347b3e38ee4Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4348a73423d7Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 434950806d53Smrg 4350b3e38ee4Smrgint 4351b3e38ee4Smrgmain (int argc, char *argv[]) 4352b3e38ee4Smrg{ 4353b3e38ee4Smrg char **newargz; 4354b3e38ee4Smrg int newargc; 4355b3e38ee4Smrg char *tmp_pathspec; 4356b3e38ee4Smrg char *actual_cwrapper_path; 4357b3e38ee4Smrg char *actual_cwrapper_name; 4358b3e38ee4Smrg char *target_name; 4359b3e38ee4Smrg char *lt_argv_zero; 4360b3e38ee4Smrg intptr_t rval = 127; 436150806d53Smrg 4362b3e38ee4Smrg int i; 436350806d53Smrg 4364b3e38ee4Smrg program_name = (char *) xstrdup (base_name (argv[0])); 4365a73423d7Smrg newargz = XMALLOC (char *, argc + 1); 436650806d53Smrg 4367a73423d7Smrg /* very simple arg parsing; don't want to rely on getopt 4368a73423d7Smrg * also, copy all non cwrapper options to newargz, except 4369a73423d7Smrg * argz[0], which is handled differently 4370a73423d7Smrg */ 4371a73423d7Smrg newargc=0; 4372b3e38ee4Smrg for (i = 1; i < argc; i++) 4373b3e38ee4Smrg { 4374b3e38ee4Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375b3e38ee4Smrg { 4376b3e38ee4SmrgEOF 4377b3e38ee4Smrg case "$host" in 4378b3e38ee4Smrg *mingw* | *cygwin* ) 4379b3e38ee4Smrg # make stdout use "unix" line endings 4380b3e38ee4Smrg echo " setmode(1,_O_BINARY);" 4381b3e38ee4Smrg ;; 4382b3e38ee4Smrg esac 438350806d53Smrg 4384b3e38ee4Smrg cat <<"EOF" 4385a73423d7Smrg lt_dump_script (stdout); 4386b3e38ee4Smrg return 0; 4387b3e38ee4Smrg } 4388a73423d7Smrg if (strcmp (argv[i], debug_opt) == 0) 4389a73423d7Smrg { 4390a73423d7Smrg lt_debug = 1; 4391a73423d7Smrg continue; 4392a73423d7Smrg } 4393a73423d7Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4394a73423d7Smrg { 4395a73423d7Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4396a73423d7Smrg namespace, but it is not one of the ones we know about and 4397a73423d7Smrg have already dealt with, above (inluding dump-script), then 4398a73423d7Smrg report an error. Otherwise, targets might begin to believe 4399a73423d7Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4400a73423d7Smrg namespace. The first time any user complains about this, we'll 4401a73423d7Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4402a73423d7Smrg or a configure.ac-settable value. 4403a73423d7Smrg */ 4404a73423d7Smrg lt_fatal (__FILE__, __LINE__, 4405a73423d7Smrg "unrecognized %s option: '%s'", 4406a73423d7Smrg ltwrapper_option_prefix, argv[i]); 4407a73423d7Smrg } 4408a73423d7Smrg /* otherwise ... */ 4409a73423d7Smrg newargz[++newargc] = xstrdup (argv[i]); 4410b3e38ee4Smrg } 4411a73423d7Smrg newargz[++newargc] = NULL; 4412a73423d7Smrg 4413a73423d7SmrgEOF 4414a73423d7Smrg cat <<EOF 4415a73423d7Smrg /* The GNU banner must be the first non-error debug message */ 4416a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4417a73423d7SmrgEOF 4418a73423d7Smrg cat <<"EOF" 4419a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4420a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 442150806d53Smrg 4422b3e38ee4Smrg tmp_pathspec = find_executable (argv[0]); 4423b3e38ee4Smrg if (tmp_pathspec == NULL) 4424a73423d7Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4425a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, 4426a73423d7Smrg "(main) found exe (before symlink chase) at: %s\n", 4427a73423d7Smrg tmp_pathspec); 4428b3e38ee4Smrg 4429b3e38ee4Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4430a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, 4431a73423d7Smrg "(main) found exe (after symlink chase) at: %s\n", 4432a73423d7Smrg actual_cwrapper_path); 4433b3e38ee4Smrg XFREE (tmp_pathspec); 4434b3e38ee4Smrg 4435a73423d7Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436b3e38ee4Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437b3e38ee4Smrg 4438b3e38ee4Smrg /* wrapper name transforms */ 4439b3e38ee4Smrg strendzap (actual_cwrapper_name, ".exe"); 4440b3e38ee4Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441b3e38ee4Smrg XFREE (actual_cwrapper_name); 4442b3e38ee4Smrg actual_cwrapper_name = tmp_pathspec; 4443b3e38ee4Smrg tmp_pathspec = 0; 4444b3e38ee4Smrg 4445b3e38ee4Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446b3e38ee4Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447b3e38ee4Smrg strendzap (target_name, ".exe"); 4448b3e38ee4Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449b3e38ee4Smrg XFREE (target_name); 4450b3e38ee4Smrg target_name = tmp_pathspec; 4451b3e38ee4Smrg tmp_pathspec = 0; 4452b3e38ee4Smrg 4453a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, 4454a73423d7Smrg "(main) libtool target name: %s\n", 4455a73423d7Smrg target_name); 4456b3e38ee4SmrgEOF 445750806d53Smrg 4458b3e38ee4Smrg cat <<EOF 4459b3e38ee4Smrg newargz[0] = 4460b3e38ee4Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461b3e38ee4Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462b3e38ee4Smrg strcpy (newargz[0], actual_cwrapper_path); 4463b3e38ee4Smrg strcat (newargz[0], "$objdir"); 4464b3e38ee4Smrg strcat (newargz[0], "/"); 4465b3e38ee4SmrgEOF 446650806d53Smrg 4467b3e38ee4Smrg cat <<"EOF" 4468b3e38ee4Smrg /* stop here, and copy so we don't have to do this twice */ 4469b3e38ee4Smrg tmp_pathspec = xstrdup (newargz[0]); 447050806d53Smrg 4471b3e38ee4Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472b3e38ee4Smrg strcat (newargz[0], actual_cwrapper_name); 447350806d53Smrg 4474b3e38ee4Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475b3e38ee4Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476b3e38ee4Smrg XFREE (tmp_pathspec); 4477b3e38ee4Smrg tmp_pathspec = NULL; 4478b3e38ee4SmrgEOF 447950806d53Smrg 4480b3e38ee4Smrg case $host_os in 4481b3e38ee4Smrg mingw*) 4482b3e38ee4Smrg cat <<"EOF" 4483b3e38ee4Smrg { 4484b3e38ee4Smrg char* p; 4485b3e38ee4Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486b3e38ee4Smrg { 4487b3e38ee4Smrg *p = '/'; 4488b3e38ee4Smrg } 4489b3e38ee4Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490b3e38ee4Smrg { 4491b3e38ee4Smrg *p = '/'; 4492b3e38ee4Smrg } 4493b3e38ee4Smrg } 4494b3e38ee4SmrgEOF 4495b3e38ee4Smrg ;; 4496b3e38ee4Smrg esac 449750806d53Smrg 4498b3e38ee4Smrg cat <<"EOF" 4499b3e38ee4Smrg XFREE (target_name); 4500b3e38ee4Smrg XFREE (actual_cwrapper_path); 4501b3e38ee4Smrg XFREE (actual_cwrapper_name); 450250806d53Smrg 4503b3e38ee4Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504b3e38ee4Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4505a73423d7Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4506a73423d7Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4507a73423d7Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 4508a73423d7Smrg libraries must come first. */ 4509b3e38ee4Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4510a73423d7Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 451150806d53Smrg 4512a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4513a73423d7Smrg nonnull (lt_argv_zero)); 4514b3e38ee4Smrg for (i = 0; i < newargc; i++) 4515b3e38ee4Smrg { 4516a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4517a73423d7Smrg i, nonnull (newargz[i])); 4518b3e38ee4Smrg } 451950806d53Smrg 4520b3e38ee4SmrgEOF 452150806d53Smrg 4522b3e38ee4Smrg case $host_os in 4523b3e38ee4Smrg mingw*) 4524b3e38ee4Smrg cat <<"EOF" 4525b3e38ee4Smrg /* execv doesn't actually work on mingw as expected on unix */ 4526a73423d7Smrg newargz = prepare_spawn (newargz); 4527b3e38ee4Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528b3e38ee4Smrg if (rval == -1) 4529b3e38ee4Smrg { 4530b3e38ee4Smrg /* failed to start process */ 4531a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, 4532a73423d7Smrg "(main) failed to launch target \"%s\": %s\n", 4533a73423d7Smrg lt_argv_zero, nonnull (strerror (errno))); 4534b3e38ee4Smrg return 127; 4535b3e38ee4Smrg } 4536b3e38ee4Smrg return rval; 4537b3e38ee4SmrgEOF 4538b3e38ee4Smrg ;; 4539b3e38ee4Smrg *) 4540b3e38ee4Smrg cat <<"EOF" 4541b3e38ee4Smrg execv (lt_argv_zero, newargz); 4542b3e38ee4Smrg return rval; /* =127, but avoids unused variable warning */ 4543b3e38ee4SmrgEOF 4544b3e38ee4Smrg ;; 4545b3e38ee4Smrg esac 454650806d53Smrg 4547b3e38ee4Smrg cat <<"EOF" 4548b3e38ee4Smrg} 454950806d53Smrg 4550b3e38ee4Smrgvoid * 4551b3e38ee4Smrgxmalloc (size_t num) 4552b3e38ee4Smrg{ 4553b3e38ee4Smrg void *p = (void *) malloc (num); 4554b3e38ee4Smrg if (!p) 4555a73423d7Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 455650806d53Smrg 4557b3e38ee4Smrg return p; 4558b3e38ee4Smrg} 455950806d53Smrg 4560b3e38ee4Smrgchar * 4561b3e38ee4Smrgxstrdup (const char *string) 4562b3e38ee4Smrg{ 4563b3e38ee4Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564b3e38ee4Smrg string) : NULL; 4565b3e38ee4Smrg} 456650806d53Smrg 4567b3e38ee4Smrgconst char * 4568b3e38ee4Smrgbase_name (const char *name) 4569b3e38ee4Smrg{ 4570b3e38ee4Smrg const char *base; 4571a18ebfb2Smrg 4572b3e38ee4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573b3e38ee4Smrg /* Skip over the disk name in MSDOS pathnames. */ 4574b3e38ee4Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575b3e38ee4Smrg name += 2; 4576b3e38ee4Smrg#endif 4577a18ebfb2Smrg 4578b3e38ee4Smrg for (base = name; *name; name++) 4579b3e38ee4Smrg if (IS_DIR_SEPARATOR (*name)) 4580b3e38ee4Smrg base = name + 1; 4581b3e38ee4Smrg return base; 4582b3e38ee4Smrg} 4583a18ebfb2Smrg 4584b3e38ee4Smrgint 4585b3e38ee4Smrgcheck_executable (const char *path) 4586b3e38ee4Smrg{ 4587b3e38ee4Smrg struct stat st; 4588a18ebfb2Smrg 4589a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4590a73423d7Smrg nonempty (path)); 4591b3e38ee4Smrg if ((!path) || (!*path)) 4592b3e38ee4Smrg return 0; 4593a18ebfb2Smrg 4594b3e38ee4Smrg if ((stat (path, &st) >= 0) 4595b3e38ee4Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596b3e38ee4Smrg return 1; 4597b3e38ee4Smrg else 4598b3e38ee4Smrg return 0; 4599b3e38ee4Smrg} 460050806d53Smrg 4601b3e38ee4Smrgint 4602b3e38ee4Smrgmake_executable (const char *path) 4603b3e38ee4Smrg{ 4604b3e38ee4Smrg int rval = 0; 4605b3e38ee4Smrg struct stat st; 460650806d53Smrg 4607a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4608a73423d7Smrg nonempty (path)); 4609b3e38ee4Smrg if ((!path) || (!*path)) 4610b3e38ee4Smrg return 0; 461150806d53Smrg 4612b3e38ee4Smrg if (stat (path, &st) >= 0) 4613b3e38ee4Smrg { 4614b3e38ee4Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615b3e38ee4Smrg } 4616b3e38ee4Smrg return rval; 4617b3e38ee4Smrg} 4618a18ebfb2Smrg 4619b3e38ee4Smrg/* Searches for the full path of the wrapper. Returns 4620b3e38ee4Smrg newly allocated full path name if found, NULL otherwise 4621b3e38ee4Smrg Does not chase symlinks, even on platforms that support them. 4622b3e38ee4Smrg*/ 4623b3e38ee4Smrgchar * 4624b3e38ee4Smrgfind_executable (const char *wrapper) 4625b3e38ee4Smrg{ 4626b3e38ee4Smrg int has_slash = 0; 4627b3e38ee4Smrg const char *p; 4628b3e38ee4Smrg const char *p_next; 4629b3e38ee4Smrg /* static buffer for getcwd */ 4630b3e38ee4Smrg char tmp[LT_PATHMAX + 1]; 4631b3e38ee4Smrg int tmp_len; 4632b3e38ee4Smrg char *concat_name; 4633a18ebfb2Smrg 4634a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4635a73423d7Smrg nonempty (wrapper)); 4636a18ebfb2Smrg 4637b3e38ee4Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638b3e38ee4Smrg return NULL; 4639a18ebfb2Smrg 4640b3e38ee4Smrg /* Absolute path? */ 4641b3e38ee4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642b3e38ee4Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643b3e38ee4Smrg { 4644b3e38ee4Smrg concat_name = xstrdup (wrapper); 4645b3e38ee4Smrg if (check_executable (concat_name)) 4646b3e38ee4Smrg return concat_name; 4647b3e38ee4Smrg XFREE (concat_name); 4648b3e38ee4Smrg } 4649b3e38ee4Smrg else 4650b3e38ee4Smrg { 4651b3e38ee4Smrg#endif 4652b3e38ee4Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653b3e38ee4Smrg { 4654b3e38ee4Smrg concat_name = xstrdup (wrapper); 4655b3e38ee4Smrg if (check_executable (concat_name)) 4656b3e38ee4Smrg return concat_name; 4657b3e38ee4Smrg XFREE (concat_name); 4658b3e38ee4Smrg } 4659b3e38ee4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660b3e38ee4Smrg } 4661b3e38ee4Smrg#endif 466250806d53Smrg 4663b3e38ee4Smrg for (p = wrapper; *p; p++) 4664b3e38ee4Smrg if (*p == '/') 4665b3e38ee4Smrg { 4666b3e38ee4Smrg has_slash = 1; 4667b3e38ee4Smrg break; 4668b3e38ee4Smrg } 4669b3e38ee4Smrg if (!has_slash) 4670b3e38ee4Smrg { 4671b3e38ee4Smrg /* no slashes; search PATH */ 4672b3e38ee4Smrg const char *path = getenv ("PATH"); 4673b3e38ee4Smrg if (path != NULL) 4674b3e38ee4Smrg { 4675b3e38ee4Smrg for (p = path; *p; p = p_next) 4676b3e38ee4Smrg { 4677b3e38ee4Smrg const char *q; 4678b3e38ee4Smrg size_t p_len; 4679b3e38ee4Smrg for (q = p; *q; q++) 4680b3e38ee4Smrg if (IS_PATH_SEPARATOR (*q)) 4681b3e38ee4Smrg break; 4682b3e38ee4Smrg p_len = q - p; 4683b3e38ee4Smrg p_next = (*q == '\0' ? q : q + 1); 4684b3e38ee4Smrg if (p_len == 0) 4685b3e38ee4Smrg { 4686b3e38ee4Smrg /* empty path: current directory */ 4687b3e38ee4Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 4688a73423d7Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4689a73423d7Smrg nonnull (strerror (errno))); 4690b3e38ee4Smrg tmp_len = strlen (tmp); 4691b3e38ee4Smrg concat_name = 4692b3e38ee4Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693b3e38ee4Smrg memcpy (concat_name, tmp, tmp_len); 4694b3e38ee4Smrg concat_name[tmp_len] = '/'; 4695b3e38ee4Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4696b3e38ee4Smrg } 4697b3e38ee4Smrg else 4698b3e38ee4Smrg { 4699b3e38ee4Smrg concat_name = 4700b3e38ee4Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701b3e38ee4Smrg memcpy (concat_name, p, p_len); 4702b3e38ee4Smrg concat_name[p_len] = '/'; 4703b3e38ee4Smrg strcpy (concat_name + p_len + 1, wrapper); 4704b3e38ee4Smrg } 4705b3e38ee4Smrg if (check_executable (concat_name)) 4706b3e38ee4Smrg return concat_name; 4707b3e38ee4Smrg XFREE (concat_name); 4708b3e38ee4Smrg } 4709b3e38ee4Smrg } 4710b3e38ee4Smrg /* not found in PATH; assume curdir */ 4711b3e38ee4Smrg } 4712b3e38ee4Smrg /* Relative path | not found in path: prepend cwd */ 4713b3e38ee4Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 4714a73423d7Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4715a73423d7Smrg nonnull (strerror (errno))); 4716b3e38ee4Smrg tmp_len = strlen (tmp); 4717b3e38ee4Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718b3e38ee4Smrg memcpy (concat_name, tmp, tmp_len); 4719b3e38ee4Smrg concat_name[tmp_len] = '/'; 4720b3e38ee4Smrg strcpy (concat_name + tmp_len + 1, wrapper); 472150806d53Smrg 4722b3e38ee4Smrg if (check_executable (concat_name)) 4723b3e38ee4Smrg return concat_name; 4724b3e38ee4Smrg XFREE (concat_name); 4725b3e38ee4Smrg return NULL; 4726b3e38ee4Smrg} 472750806d53Smrg 4728b3e38ee4Smrgchar * 4729b3e38ee4Smrgchase_symlinks (const char *pathspec) 4730b3e38ee4Smrg{ 4731b3e38ee4Smrg#ifndef S_ISLNK 4732b3e38ee4Smrg return xstrdup (pathspec); 4733b3e38ee4Smrg#else 4734b3e38ee4Smrg char buf[LT_PATHMAX]; 4735b3e38ee4Smrg struct stat s; 4736b3e38ee4Smrg char *tmp_pathspec = xstrdup (pathspec); 4737b3e38ee4Smrg char *p; 4738b3e38ee4Smrg int has_symlinks = 0; 4739b3e38ee4Smrg while (strlen (tmp_pathspec) && !has_symlinks) 4740b3e38ee4Smrg { 4741a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, 4742a73423d7Smrg "checking path component for symlinks: %s\n", 4743a73423d7Smrg tmp_pathspec); 4744b3e38ee4Smrg if (lstat (tmp_pathspec, &s) == 0) 4745b3e38ee4Smrg { 4746b3e38ee4Smrg if (S_ISLNK (s.st_mode) != 0) 4747b3e38ee4Smrg { 4748b3e38ee4Smrg has_symlinks = 1; 4749b3e38ee4Smrg break; 4750b3e38ee4Smrg } 475150806d53Smrg 4752b3e38ee4Smrg /* search backwards for last DIR_SEPARATOR */ 4753b3e38ee4Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754b3e38ee4Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755b3e38ee4Smrg p--; 4756b3e38ee4Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757b3e38ee4Smrg { 4758b3e38ee4Smrg /* no more DIR_SEPARATORS left */ 4759b3e38ee4Smrg break; 4760b3e38ee4Smrg } 4761b3e38ee4Smrg *p = '\0'; 4762b3e38ee4Smrg } 4763b3e38ee4Smrg else 4764b3e38ee4Smrg { 4765a73423d7Smrg lt_fatal (__FILE__, __LINE__, 4766a73423d7Smrg "error accessing file \"%s\": %s", 4767a73423d7Smrg tmp_pathspec, nonnull (strerror (errno))); 4768b3e38ee4Smrg } 4769b3e38ee4Smrg } 4770b3e38ee4Smrg XFREE (tmp_pathspec); 477150806d53Smrg 4772b3e38ee4Smrg if (!has_symlinks) 4773b3e38ee4Smrg { 4774b3e38ee4Smrg return xstrdup (pathspec); 4775b3e38ee4Smrg } 477650806d53Smrg 4777b3e38ee4Smrg tmp_pathspec = realpath (pathspec, buf); 4778b3e38ee4Smrg if (tmp_pathspec == 0) 4779b3e38ee4Smrg { 4780a73423d7Smrg lt_fatal (__FILE__, __LINE__, 4781a73423d7Smrg "could not follow symlinks for %s", pathspec); 4782b3e38ee4Smrg } 4783b3e38ee4Smrg return xstrdup (tmp_pathspec); 4784b3e38ee4Smrg#endif 4785b3e38ee4Smrg} 478650806d53Smrg 4787b3e38ee4Smrgchar * 4788b3e38ee4Smrgstrendzap (char *str, const char *pat) 4789b3e38ee4Smrg{ 4790b3e38ee4Smrg size_t len, patlen; 479150806d53Smrg 4792b3e38ee4Smrg assert (str != NULL); 4793b3e38ee4Smrg assert (pat != NULL); 479450806d53Smrg 4795b3e38ee4Smrg len = strlen (str); 4796b3e38ee4Smrg patlen = strlen (pat); 479750806d53Smrg 4798b3e38ee4Smrg if (patlen <= len) 4799b3e38ee4Smrg { 4800b3e38ee4Smrg str += len - patlen; 4801b3e38ee4Smrg if (strcmp (str, pat) == 0) 4802b3e38ee4Smrg *str = '\0'; 4803b3e38ee4Smrg } 4804b3e38ee4Smrg return str; 4805b3e38ee4Smrg} 480650806d53Smrg 4807a73423d7Smrgvoid 4808a73423d7Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 4809a73423d7Smrg{ 4810a73423d7Smrg va_list args; 4811a73423d7Smrg if (lt_debug) 4812a73423d7Smrg { 4813a73423d7Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4814a73423d7Smrg va_start (args, fmt); 4815a73423d7Smrg (void) vfprintf (stderr, fmt, args); 4816a73423d7Smrg va_end (args); 4817a73423d7Smrg } 4818a73423d7Smrg} 4819a73423d7Smrg 4820b3e38ee4Smrgstatic void 4821a73423d7Smrglt_error_core (int exit_status, const char *file, 4822a73423d7Smrg int line, const char *mode, 4823b3e38ee4Smrg const char *message, va_list ap) 4824b3e38ee4Smrg{ 4825a73423d7Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826b3e38ee4Smrg vfprintf (stderr, message, ap); 4827b3e38ee4Smrg fprintf (stderr, ".\n"); 482850806d53Smrg 4829b3e38ee4Smrg if (exit_status >= 0) 4830b3e38ee4Smrg exit (exit_status); 4831b3e38ee4Smrg} 483250806d53Smrg 4833b3e38ee4Smrgvoid 4834a73423d7Smrglt_fatal (const char *file, int line, const char *message, ...) 4835b3e38ee4Smrg{ 4836b3e38ee4Smrg va_list ap; 4837b3e38ee4Smrg va_start (ap, message); 4838a73423d7Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839b3e38ee4Smrg va_end (ap); 4840b3e38ee4Smrg} 4841af1a9c97Smrg 4842a73423d7Smrgstatic const char * 4843a73423d7Smrgnonnull (const char *s) 4844a73423d7Smrg{ 4845a73423d7Smrg return s ? s : "(null)"; 4846a73423d7Smrg} 4847a73423d7Smrg 4848a73423d7Smrgstatic const char * 4849a73423d7Smrgnonempty (const char *s) 4850a73423d7Smrg{ 4851a73423d7Smrg return (s && !*s) ? "(empty)" : nonnull (s); 4852a73423d7Smrg} 4853a73423d7Smrg 4854b3e38ee4Smrgvoid 4855b3e38ee4Smrglt_setenv (const char *name, const char *value) 4856b3e38ee4Smrg{ 4857a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, 4858a73423d7Smrg "(lt_setenv) setting '%s' to '%s'\n", 4859a73423d7Smrg nonnull (name), nonnull (value)); 4860b3e38ee4Smrg { 4861b3e38ee4Smrg#ifdef HAVE_SETENV 4862b3e38ee4Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863b3e38ee4Smrg char *str = xstrdup (value); 4864b3e38ee4Smrg setenv (name, str, 1); 4865b3e38ee4Smrg#else 4866b3e38ee4Smrg int len = strlen (name) + 1 + strlen (value) + 1; 4867b3e38ee4Smrg char *str = XMALLOC (char, len); 4868b3e38ee4Smrg sprintf (str, "%s=%s", name, value); 4869b3e38ee4Smrg if (putenv (str) != EXIT_SUCCESS) 4870b3e38ee4Smrg { 4871b3e38ee4Smrg XFREE (str); 4872b3e38ee4Smrg } 4873b3e38ee4Smrg#endif 4874b3e38ee4Smrg } 4875b3e38ee4Smrg} 487650806d53Smrg 4877b3e38ee4Smrgchar * 4878b3e38ee4Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879b3e38ee4Smrg{ 4880b3e38ee4Smrg char *new_value; 4881b3e38ee4Smrg if (orig_value && *orig_value) 4882b3e38ee4Smrg { 4883b3e38ee4Smrg int orig_value_len = strlen (orig_value); 4884b3e38ee4Smrg int add_len = strlen (add); 4885b3e38ee4Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886b3e38ee4Smrg if (to_end) 4887b3e38ee4Smrg { 4888b3e38ee4Smrg strcpy (new_value, orig_value); 4889b3e38ee4Smrg strcpy (new_value + orig_value_len, add); 4890b3e38ee4Smrg } 4891b3e38ee4Smrg else 4892b3e38ee4Smrg { 4893b3e38ee4Smrg strcpy (new_value, add); 4894b3e38ee4Smrg strcpy (new_value + add_len, orig_value); 4895b3e38ee4Smrg } 4896b3e38ee4Smrg } 4897b3e38ee4Smrg else 4898b3e38ee4Smrg { 4899b3e38ee4Smrg new_value = xstrdup (add); 4900b3e38ee4Smrg } 4901b3e38ee4Smrg return new_value; 4902b3e38ee4Smrg} 490350806d53Smrg 4904b3e38ee4Smrgvoid 4905b3e38ee4Smrglt_update_exe_path (const char *name, const char *value) 4906b3e38ee4Smrg{ 4907a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, 4908a73423d7Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4909a73423d7Smrg nonnull (name), nonnull (value)); 491050806d53Smrg 4911b3e38ee4Smrg if (name && *name && value && *value) 4912b3e38ee4Smrg { 4913b3e38ee4Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914b3e38ee4Smrg /* some systems can't cope with a ':'-terminated path #' */ 4915b3e38ee4Smrg int len = strlen (new_value); 4916b3e38ee4Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917b3e38ee4Smrg { 4918b3e38ee4Smrg new_value[len-1] = '\0'; 4919b3e38ee4Smrg } 4920b3e38ee4Smrg lt_setenv (name, new_value); 4921b3e38ee4Smrg XFREE (new_value); 4922b3e38ee4Smrg } 4923b3e38ee4Smrg} 492450806d53Smrg 4925b3e38ee4Smrgvoid 4926b3e38ee4Smrglt_update_lib_path (const char *name, const char *value) 4927b3e38ee4Smrg{ 4928a73423d7Smrg lt_debugprintf (__FILE__, __LINE__, 4929a73423d7Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4930a73423d7Smrg nonnull (name), nonnull (value)); 493150806d53Smrg 4932b3e38ee4Smrg if (name && *name && value && *value) 4933b3e38ee4Smrg { 4934b3e38ee4Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935b3e38ee4Smrg lt_setenv (name, new_value); 4936b3e38ee4Smrg XFREE (new_value); 4937b3e38ee4Smrg } 4938b3e38ee4Smrg} 493950806d53Smrg 4940a73423d7SmrgEOF 4941a73423d7Smrg case $host_os in 4942a73423d7Smrg mingw*) 4943a73423d7Smrg cat <<"EOF" 4944a73423d7Smrg 4945a73423d7Smrg/* Prepares an argument vector before calling spawn(). 4946a73423d7Smrg Note that spawn() does not by itself call the command interpreter 4947a73423d7Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4948a73423d7Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4949a73423d7Smrg GetVersionEx(&v); 4950a73423d7Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4951a73423d7Smrg }) ? "cmd.exe" : "command.com"). 4952a73423d7Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 4953a73423d7Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4954a73423d7Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4955a73423d7Smrg special way: 4956a73423d7Smrg - Space and tab are interpreted as delimiters. They are not treated as 4957a73423d7Smrg delimiters if they are surrounded by double quotes: "...". 4958a73423d7Smrg - Unescaped double quotes are removed from the input. Their only effect is 4959a73423d7Smrg that within double quotes, space and tab are treated like normal 4960a73423d7Smrg characters. 4961a73423d7Smrg - Backslashes not followed by double quotes are not special. 4962a73423d7Smrg - But 2*n+1 backslashes followed by a double quote become 4963a73423d7Smrg n backslashes followed by a double quote (n >= 0): 4964a73423d7Smrg \" -> " 4965a73423d7Smrg \\\" -> \" 4966a73423d7Smrg \\\\\" -> \\" 4967a73423d7Smrg */ 4968a73423d7Smrg#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" 4969a73423d7Smrg#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" 4970a73423d7Smrgchar ** 4971a73423d7Smrgprepare_spawn (char **argv) 4972a73423d7Smrg{ 4973a73423d7Smrg size_t argc; 4974a73423d7Smrg char **new_argv; 4975a73423d7Smrg size_t i; 4976a73423d7Smrg 4977a73423d7Smrg /* Count number of arguments. */ 4978a73423d7Smrg for (argc = 0; argv[argc] != NULL; argc++) 4979a73423d7Smrg ; 4980a73423d7Smrg 4981a73423d7Smrg /* Allocate new argument vector. */ 4982a73423d7Smrg new_argv = XMALLOC (char *, argc + 1); 4983a73423d7Smrg 4984a73423d7Smrg /* Put quoted arguments into the new argument vector. */ 4985a73423d7Smrg for (i = 0; i < argc; i++) 4986a73423d7Smrg { 4987a73423d7Smrg const char *string = argv[i]; 4988a73423d7Smrg 4989a73423d7Smrg if (string[0] == '\0') 4990a73423d7Smrg new_argv[i] = xstrdup ("\"\""); 4991a73423d7Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4992a73423d7Smrg { 4993a73423d7Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4994a73423d7Smrg size_t length; 4995a73423d7Smrg unsigned int backslashes; 4996a73423d7Smrg const char *s; 4997a73423d7Smrg char *quoted_string; 4998a73423d7Smrg char *p; 4999a73423d7Smrg 5000a73423d7Smrg length = 0; 5001a73423d7Smrg backslashes = 0; 5002a73423d7Smrg if (quote_around) 5003a73423d7Smrg length++; 5004a73423d7Smrg for (s = string; *s != '\0'; s++) 5005a73423d7Smrg { 5006a73423d7Smrg char c = *s; 5007a73423d7Smrg if (c == '"') 5008a73423d7Smrg length += backslashes + 1; 5009a73423d7Smrg length++; 5010a73423d7Smrg if (c == '\\') 5011a73423d7Smrg backslashes++; 5012a73423d7Smrg else 5013a73423d7Smrg backslashes = 0; 5014a73423d7Smrg } 5015a73423d7Smrg if (quote_around) 5016a73423d7Smrg length += backslashes + 1; 5017a73423d7Smrg 5018a73423d7Smrg quoted_string = XMALLOC (char, length + 1); 5019a73423d7Smrg 5020a73423d7Smrg p = quoted_string; 5021a73423d7Smrg backslashes = 0; 5022a73423d7Smrg if (quote_around) 5023a73423d7Smrg *p++ = '"'; 5024a73423d7Smrg for (s = string; *s != '\0'; s++) 5025a73423d7Smrg { 5026a73423d7Smrg char c = *s; 5027a73423d7Smrg if (c == '"') 5028a73423d7Smrg { 5029a73423d7Smrg unsigned int j; 5030a73423d7Smrg for (j = backslashes + 1; j > 0; j--) 5031a73423d7Smrg *p++ = '\\'; 5032a73423d7Smrg } 5033a73423d7Smrg *p++ = c; 5034a73423d7Smrg if (c == '\\') 5035a73423d7Smrg backslashes++; 5036a73423d7Smrg else 5037a73423d7Smrg backslashes = 0; 5038a73423d7Smrg } 5039a73423d7Smrg if (quote_around) 5040a73423d7Smrg { 5041a73423d7Smrg unsigned int j; 5042a73423d7Smrg for (j = backslashes; j > 0; j--) 5043a73423d7Smrg *p++ = '\\'; 5044a73423d7Smrg *p++ = '"'; 5045a73423d7Smrg } 5046a73423d7Smrg *p = '\0'; 5047a73423d7Smrg 5048a73423d7Smrg new_argv[i] = quoted_string; 5049a73423d7Smrg } 5050a73423d7Smrg else 5051a73423d7Smrg new_argv[i] = (char *) string; 5052a73423d7Smrg } 5053a73423d7Smrg new_argv[argc] = NULL; 5054a73423d7Smrg 5055a73423d7Smrg return new_argv; 5056a73423d7Smrg} 5057a73423d7SmrgEOF 5058a73423d7Smrg ;; 5059a73423d7Smrg esac 506050806d53Smrg 5061a73423d7Smrg cat <<"EOF" 5062a73423d7Smrgvoid lt_dump_script (FILE* f) 5063a73423d7Smrg{ 5064a73423d7SmrgEOF 5065a73423d7Smrg func_emit_wrapper yes | 5066a73423d7Smrg $SED -n -e ' 5067a73423d7Smrgs/^\(.\{79\}\)\(..*\)/\1\ 5068a73423d7Smrg\2/ 5069a73423d7Smrgh 5070a73423d7Smrgs/\([\\"]\)/\\\1/g 5071a73423d7Smrgs/$/\\n/ 5072a73423d7Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 5073a73423d7Smrgg 5074a73423d7SmrgD' 5075a73423d7Smrg cat <<"EOF" 5076a73423d7Smrg} 5077b3e38ee4SmrgEOF 5078b3e38ee4Smrg} 5079b3e38ee4Smrg# end: func_emit_cwrapperexe_src 508050806d53Smrg 5081a73423d7Smrg# func_win32_import_lib_p ARG 5082a73423d7Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 5083a73423d7Smrgfunc_win32_import_lib_p () 5084a73423d7Smrg{ 5085a73423d7Smrg $opt_debug 5086a73423d7Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5087a73423d7Smrg *import*) : ;; 5088a73423d7Smrg *) false ;; 5089a73423d7Smrg esac 5090a73423d7Smrg} 5091a73423d7Smrg 5092b3e38ee4Smrg# func_mode_link arg... 5093b3e38ee4Smrgfunc_mode_link () 5094b3e38ee4Smrg{ 5095b3e38ee4Smrg $opt_debug 5096b3e38ee4Smrg case $host in 5097b3e38ee4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098b3e38ee4Smrg # It is impossible to link a dll without this setting, and 5099b3e38ee4Smrg # we shouldn't force the makefile maintainer to figure out 5100b3e38ee4Smrg # which system we are compiling for in order to pass an extra 5101b3e38ee4Smrg # flag for every libtool invocation. 5102b3e38ee4Smrg # allow_undefined=no 510350806d53Smrg 5104b3e38ee4Smrg # FIXME: Unfortunately, there are problems with the above when trying 5105b3e38ee4Smrg # to make a dll which has undefined symbols, in which case not 5106b3e38ee4Smrg # even a static library is built. For now, we need to specify 5107b3e38ee4Smrg # -no-undefined on the libtool link line when we can be certain 5108b3e38ee4Smrg # that all symbols are satisfied, otherwise we get a static library. 5109b3e38ee4Smrg allow_undefined=yes 5110b3e38ee4Smrg ;; 5111b3e38ee4Smrg *) 5112b3e38ee4Smrg allow_undefined=yes 5113b3e38ee4Smrg ;; 5114b3e38ee4Smrg esac 5115b3e38ee4Smrg libtool_args=$nonopt 5116b3e38ee4Smrg base_compile="$nonopt $@" 5117b3e38ee4Smrg compile_command=$nonopt 5118b3e38ee4Smrg finalize_command=$nonopt 511950806d53Smrg 5120b3e38ee4Smrg compile_rpath= 5121b3e38ee4Smrg finalize_rpath= 5122b3e38ee4Smrg compile_shlibpath= 5123b3e38ee4Smrg finalize_shlibpath= 5124b3e38ee4Smrg convenience= 5125b3e38ee4Smrg old_convenience= 5126b3e38ee4Smrg deplibs= 5127b3e38ee4Smrg old_deplibs= 5128b3e38ee4Smrg compiler_flags= 5129b3e38ee4Smrg linker_flags= 5130b3e38ee4Smrg dllsearchpath= 5131b3e38ee4Smrg lib_search_path=`pwd` 5132b3e38ee4Smrg inst_prefix_dir= 5133b3e38ee4Smrg new_inherited_linker_flags= 513450806d53Smrg 5135b3e38ee4Smrg avoid_version=no 5136a73423d7Smrg bindir= 5137b3e38ee4Smrg dlfiles= 5138b3e38ee4Smrg dlprefiles= 5139b3e38ee4Smrg dlself=no 5140b3e38ee4Smrg export_dynamic=no 5141b3e38ee4Smrg export_symbols= 5142b3e38ee4Smrg export_symbols_regex= 5143b3e38ee4Smrg generated= 5144b3e38ee4Smrg libobjs= 5145b3e38ee4Smrg ltlibs= 5146b3e38ee4Smrg module=no 5147b3e38ee4Smrg no_install=no 5148b3e38ee4Smrg objs= 5149b3e38ee4Smrg non_pic_objects= 5150b3e38ee4Smrg precious_files_regex= 5151b3e38ee4Smrg prefer_static_libs=no 5152b3e38ee4Smrg preload=no 5153b3e38ee4Smrg prev= 5154b3e38ee4Smrg prevarg= 5155b3e38ee4Smrg release= 5156b3e38ee4Smrg rpath= 5157b3e38ee4Smrg xrpath= 5158b3e38ee4Smrg perm_rpath= 5159b3e38ee4Smrg temp_rpath= 5160b3e38ee4Smrg thread_safe=no 5161b3e38ee4Smrg vinfo= 5162b3e38ee4Smrg vinfo_number=no 5163b3e38ee4Smrg weak_libs= 5164b3e38ee4Smrg single_module="${wl}-single_module" 5165b3e38ee4Smrg func_infer_tag $base_compile 5166b3e38ee4Smrg 5167b3e38ee4Smrg # We need to know -static, to get the right output filenames. 5168b3e38ee4Smrg for arg 5169b3e38ee4Smrg do 5170b3e38ee4Smrg case $arg in 5171b3e38ee4Smrg -shared) 5172b3e38ee4Smrg test "$build_libtool_libs" != yes && \ 5173b3e38ee4Smrg func_fatal_configuration "can not build a shared library" 5174b3e38ee4Smrg build_old_libs=no 5175b3e38ee4Smrg break 5176b3e38ee4Smrg ;; 5177b3e38ee4Smrg -all-static | -static | -static-libtool-libs) 5178b3e38ee4Smrg case $arg in 5179b3e38ee4Smrg -all-static) 5180b3e38ee4Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181b3e38ee4Smrg func_warning "complete static linking is impossible in this configuration" 5182b3e38ee4Smrg fi 5183b3e38ee4Smrg if test -n "$link_static_flag"; then 5184b3e38ee4Smrg dlopen_self=$dlopen_self_static 5185b3e38ee4Smrg fi 5186b3e38ee4Smrg prefer_static_libs=yes 5187b3e38ee4Smrg ;; 5188b3e38ee4Smrg -static) 5189b3e38ee4Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190b3e38ee4Smrg dlopen_self=$dlopen_self_static 5191b3e38ee4Smrg fi 5192b3e38ee4Smrg prefer_static_libs=built 5193b3e38ee4Smrg ;; 5194b3e38ee4Smrg -static-libtool-libs) 5195b3e38ee4Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196b3e38ee4Smrg dlopen_self=$dlopen_self_static 5197a18ebfb2Smrg fi 5198b3e38ee4Smrg prefer_static_libs=yes 5199b3e38ee4Smrg ;; 5200b3e38ee4Smrg esac 5201b3e38ee4Smrg build_libtool_libs=no 5202b3e38ee4Smrg build_old_libs=yes 5203b3e38ee4Smrg break 5204b3e38ee4Smrg ;; 5205b3e38ee4Smrg esac 5206b3e38ee4Smrg done 520750806d53Smrg 5208b3e38ee4Smrg # See if our shared archives depend on static archives. 5209b3e38ee4Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 521050806d53Smrg 5211b3e38ee4Smrg # Go through the arguments, transforming them on the way. 5212b3e38ee4Smrg while test "$#" -gt 0; do 5213b3e38ee4Smrg arg="$1" 5214b3e38ee4Smrg shift 5215b3e38ee4Smrg func_quote_for_eval "$arg" 5216b3e38ee4Smrg qarg=$func_quote_for_eval_unquoted_result 5217b3e38ee4Smrg func_append libtool_args " $func_quote_for_eval_result" 521850806d53Smrg 5219b3e38ee4Smrg # If the previous option needs an argument, assign it. 5220b3e38ee4Smrg if test -n "$prev"; then 5221b3e38ee4Smrg case $prev in 5222b3e38ee4Smrg output) 5223b3e38ee4Smrg func_append compile_command " @OUTPUT@" 5224b3e38ee4Smrg func_append finalize_command " @OUTPUT@" 5225b3e38ee4Smrg ;; 5226b3e38ee4Smrg esac 522750806d53Smrg 5228b3e38ee4Smrg case $prev in 5229a73423d7Smrg bindir) 5230a73423d7Smrg bindir="$arg" 5231a73423d7Smrg prev= 5232a73423d7Smrg continue 5233a73423d7Smrg ;; 5234b3e38ee4Smrg dlfiles|dlprefiles) 5235b3e38ee4Smrg if test "$preload" = no; then 5236b3e38ee4Smrg # Add the symbol object into the linking commands. 5237b3e38ee4Smrg func_append compile_command " @SYMFILE@" 5238b3e38ee4Smrg func_append finalize_command " @SYMFILE@" 5239b3e38ee4Smrg preload=yes 5240b3e38ee4Smrg fi 5241b3e38ee4Smrg case $arg in 5242b3e38ee4Smrg *.la | *.lo) ;; # We handle these cases below. 5243b3e38ee4Smrg force) 5244b3e38ee4Smrg if test "$dlself" = no; then 5245b3e38ee4Smrg dlself=needless 5246b3e38ee4Smrg export_dynamic=yes 5247b3e38ee4Smrg fi 5248b3e38ee4Smrg prev= 5249b3e38ee4Smrg continue 5250b3e38ee4Smrg ;; 5251b3e38ee4Smrg self) 5252b3e38ee4Smrg if test "$prev" = dlprefiles; then 5253b3e38ee4Smrg dlself=yes 5254b3e38ee4Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255b3e38ee4Smrg dlself=yes 5256a18ebfb2Smrg else 5257b3e38ee4Smrg dlself=needless 5258b3e38ee4Smrg export_dynamic=yes 5259a18ebfb2Smrg fi 5260b3e38ee4Smrg prev= 5261b3e38ee4Smrg continue 5262b3e38ee4Smrg ;; 5263b3e38ee4Smrg *) 5264b3e38ee4Smrg if test "$prev" = dlfiles; then 5265a73423d7Smrg func_append dlfiles " $arg" 5266a18ebfb2Smrg else 5267a73423d7Smrg func_append dlprefiles " $arg" 5268a18ebfb2Smrg fi 5269b3e38ee4Smrg prev= 5270b3e38ee4Smrg continue 5271b3e38ee4Smrg ;; 5272b3e38ee4Smrg esac 5273b3e38ee4Smrg ;; 5274b3e38ee4Smrg expsyms) 5275b3e38ee4Smrg export_symbols="$arg" 5276b3e38ee4Smrg test -f "$arg" \ 5277b3e38ee4Smrg || func_fatal_error "symbol file \`$arg' does not exist" 5278b3e38ee4Smrg prev= 5279b3e38ee4Smrg continue 5280b3e38ee4Smrg ;; 5281b3e38ee4Smrg expsyms_regex) 5282b3e38ee4Smrg export_symbols_regex="$arg" 5283b3e38ee4Smrg prev= 5284b3e38ee4Smrg continue 5285b3e38ee4Smrg ;; 5286b3e38ee4Smrg framework) 5287a18ebfb2Smrg case $host in 5288b3e38ee4Smrg *-*-darwin*) 5289b3e38ee4Smrg case "$deplibs " in 5290b3e38ee4Smrg *" $qarg.ltframework "*) ;; 5291a73423d7Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292b3e38ee4Smrg ;; 5293b3e38ee4Smrg esac 5294b3e38ee4Smrg ;; 5295a18ebfb2Smrg esac 5296b3e38ee4Smrg prev= 5297b3e38ee4Smrg continue 5298a18ebfb2Smrg ;; 5299b3e38ee4Smrg inst_prefix) 5300b3e38ee4Smrg inst_prefix_dir="$arg" 5301b3e38ee4Smrg prev= 5302b3e38ee4Smrg continue 5303a18ebfb2Smrg ;; 5304b3e38ee4Smrg objectlist) 5305b3e38ee4Smrg if test -f "$arg"; then 5306b3e38ee4Smrg save_arg=$arg 5307b3e38ee4Smrg moreargs= 5308b3e38ee4Smrg for fil in `cat "$save_arg"` 5309b3e38ee4Smrg do 5310a73423d7Smrg# func_append moreargs " $fil" 5311b3e38ee4Smrg arg=$fil 5312b3e38ee4Smrg # A libtool-controlled object. 5313af1a9c97Smrg 5314b3e38ee4Smrg # Check to see that this really is a libtool object. 5315b3e38ee4Smrg if func_lalib_unsafe_p "$arg"; then 5316b3e38ee4Smrg pic_object= 5317b3e38ee4Smrg non_pic_object= 5318af1a9c97Smrg 5319b3e38ee4Smrg # Read the .lo file 5320b3e38ee4Smrg func_source "$arg" 5321af1a9c97Smrg 5322b3e38ee4Smrg if test -z "$pic_object" || 5323b3e38ee4Smrg test -z "$non_pic_object" || 5324b3e38ee4Smrg test "$pic_object" = none && 5325b3e38ee4Smrg test "$non_pic_object" = none; then 5326b3e38ee4Smrg func_fatal_error "cannot find name of object for \`$arg'" 5327b3e38ee4Smrg fi 5328af1a9c97Smrg 5329b3e38ee4Smrg # Extract subdirectory from the argument. 5330b3e38ee4Smrg func_dirname "$arg" "/" "" 5331b3e38ee4Smrg xdir="$func_dirname_result" 5332af1a9c97Smrg 5333b3e38ee4Smrg if test "$pic_object" != none; then 5334b3e38ee4Smrg # Prepend the subdirectory the object is found in. 5335b3e38ee4Smrg pic_object="$xdir$pic_object" 5336af1a9c97Smrg 5337b3e38ee4Smrg if test "$prev" = dlfiles; then 5338b3e38ee4Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5339a73423d7Smrg func_append dlfiles " $pic_object" 5340b3e38ee4Smrg prev= 5341b3e38ee4Smrg continue 5342b3e38ee4Smrg else 5343b3e38ee4Smrg # If libtool objects are unsupported, then we need to preload. 5344b3e38ee4Smrg prev=dlprefiles 5345b3e38ee4Smrg fi 5346b3e38ee4Smrg fi 5347af1a9c97Smrg 5348b3e38ee4Smrg # CHECK ME: I think I busted this. -Ossama 5349b3e38ee4Smrg if test "$prev" = dlprefiles; then 5350b3e38ee4Smrg # Preload the old-style object. 5351a73423d7Smrg func_append dlprefiles " $pic_object" 5352b3e38ee4Smrg prev= 5353b3e38ee4Smrg fi 5354af1a9c97Smrg 5355b3e38ee4Smrg # A PIC object. 5356b3e38ee4Smrg func_append libobjs " $pic_object" 5357b3e38ee4Smrg arg="$pic_object" 5358b3e38ee4Smrg fi 5359af1a9c97Smrg 5360b3e38ee4Smrg # Non-PIC object. 5361b3e38ee4Smrg if test "$non_pic_object" != none; then 5362b3e38ee4Smrg # Prepend the subdirectory the object is found in. 5363b3e38ee4Smrg non_pic_object="$xdir$non_pic_object" 5364af1a9c97Smrg 5365b3e38ee4Smrg # A standard non-PIC object 5366b3e38ee4Smrg func_append non_pic_objects " $non_pic_object" 5367b3e38ee4Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5368b3e38ee4Smrg arg="$non_pic_object" 5369b3e38ee4Smrg fi 5370b3e38ee4Smrg else 5371b3e38ee4Smrg # If the PIC object exists, use it instead. 5372b3e38ee4Smrg # $xdir was prepended to $pic_object above. 5373b3e38ee4Smrg non_pic_object="$pic_object" 5374b3e38ee4Smrg func_append non_pic_objects " $non_pic_object" 5375b3e38ee4Smrg fi 5376b3e38ee4Smrg else 5377b3e38ee4Smrg # Only an error if not doing a dry-run. 5378b3e38ee4Smrg if $opt_dry_run; then 5379b3e38ee4Smrg # Extract subdirectory from the argument. 5380b3e38ee4Smrg func_dirname "$arg" "/" "" 5381b3e38ee4Smrg xdir="$func_dirname_result" 5382b3e38ee4Smrg 5383b3e38ee4Smrg func_lo2o "$arg" 5384b3e38ee4Smrg pic_object=$xdir$objdir/$func_lo2o_result 5385b3e38ee4Smrg non_pic_object=$xdir$func_lo2o_result 5386b3e38ee4Smrg func_append libobjs " $pic_object" 5387b3e38ee4Smrg func_append non_pic_objects " $non_pic_object" 5388b3e38ee4Smrg else 5389b3e38ee4Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5390b3e38ee4Smrg fi 5391b3e38ee4Smrg fi 5392b3e38ee4Smrg done 5393a18ebfb2Smrg else 5394b3e38ee4Smrg func_fatal_error "link input file \`$arg' does not exist" 5395a18ebfb2Smrg fi 5396b3e38ee4Smrg arg=$save_arg 5397b3e38ee4Smrg prev= 5398b3e38ee4Smrg continue 5399b3e38ee4Smrg ;; 5400b3e38ee4Smrg precious_regex) 5401b3e38ee4Smrg precious_files_regex="$arg" 5402b3e38ee4Smrg prev= 5403b3e38ee4Smrg continue 5404b3e38ee4Smrg ;; 5405b3e38ee4Smrg release) 5406b3e38ee4Smrg release="-$arg" 5407b3e38ee4Smrg prev= 5408b3e38ee4Smrg continue 5409b3e38ee4Smrg ;; 5410b3e38ee4Smrg rpath | xrpath) 5411b3e38ee4Smrg # We need an absolute path. 5412b3e38ee4Smrg case $arg in 5413b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414b3e38ee4Smrg *) 5415b3e38ee4Smrg func_fatal_error "only absolute run-paths are allowed" 5416b3e38ee4Smrg ;; 5417b3e38ee4Smrg esac 5418b3e38ee4Smrg if test "$prev" = rpath; then 5419b3e38ee4Smrg case "$rpath " in 5420b3e38ee4Smrg *" $arg "*) ;; 5421a73423d7Smrg *) func_append rpath " $arg" ;; 5422b3e38ee4Smrg esac 5423a18ebfb2Smrg else 5424b3e38ee4Smrg case "$xrpath " in 5425b3e38ee4Smrg *" $arg "*) ;; 5426a73423d7Smrg *) func_append xrpath " $arg" ;; 5427b3e38ee4Smrg esac 5428a18ebfb2Smrg fi 5429b3e38ee4Smrg prev= 5430b3e38ee4Smrg continue 5431b3e38ee4Smrg ;; 5432b3e38ee4Smrg shrext) 5433b3e38ee4Smrg shrext_cmds="$arg" 5434b3e38ee4Smrg prev= 5435b3e38ee4Smrg continue 5436b3e38ee4Smrg ;; 5437b3e38ee4Smrg weak) 5438a73423d7Smrg func_append weak_libs " $arg" 5439b3e38ee4Smrg prev= 5440b3e38ee4Smrg continue 5441b3e38ee4Smrg ;; 5442b3e38ee4Smrg xcclinker) 5443a73423d7Smrg func_append linker_flags " $qarg" 5444a73423d7Smrg func_append compiler_flags " $qarg" 5445b3e38ee4Smrg prev= 5446b3e38ee4Smrg func_append compile_command " $qarg" 5447b3e38ee4Smrg func_append finalize_command " $qarg" 5448b3e38ee4Smrg continue 5449b3e38ee4Smrg ;; 5450b3e38ee4Smrg xcompiler) 5451a73423d7Smrg func_append compiler_flags " $qarg" 5452b3e38ee4Smrg prev= 5453b3e38ee4Smrg func_append compile_command " $qarg" 5454b3e38ee4Smrg func_append finalize_command " $qarg" 5455b3e38ee4Smrg continue 5456b3e38ee4Smrg ;; 5457b3e38ee4Smrg xlinker) 5458a73423d7Smrg func_append linker_flags " $qarg" 5459a73423d7Smrg func_append compiler_flags " $wl$qarg" 5460b3e38ee4Smrg prev= 5461b3e38ee4Smrg func_append compile_command " $wl$qarg" 5462b3e38ee4Smrg func_append finalize_command " $wl$qarg" 5463b3e38ee4Smrg continue 5464b3e38ee4Smrg ;; 5465b3e38ee4Smrg *) 5466b3e38ee4Smrg eval "$prev=\"\$arg\"" 5467b3e38ee4Smrg prev= 5468b3e38ee4Smrg continue 5469b3e38ee4Smrg ;; 5470af1a9c97Smrg esac 5471b3e38ee4Smrg fi # test -n "$prev" 5472af1a9c97Smrg 5473b3e38ee4Smrg prevarg="$arg" 5474af1a9c97Smrg 5475b3e38ee4Smrg case $arg in 5476b3e38ee4Smrg -all-static) 5477b3e38ee4Smrg if test -n "$link_static_flag"; then 5478b3e38ee4Smrg # See comment for -static flag below, for more details. 5479b3e38ee4Smrg func_append compile_command " $link_static_flag" 5480b3e38ee4Smrg func_append finalize_command " $link_static_flag" 5481b3e38ee4Smrg fi 5482b3e38ee4Smrg continue 5483b3e38ee4Smrg ;; 5484af1a9c97Smrg 5485b3e38ee4Smrg -allow-undefined) 5486b3e38ee4Smrg # FIXME: remove this flag sometime in the future. 5487b3e38ee4Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488b3e38ee4Smrg ;; 5489af1a9c97Smrg 5490b3e38ee4Smrg -avoid-version) 5491b3e38ee4Smrg avoid_version=yes 5492b3e38ee4Smrg continue 5493b3e38ee4Smrg ;; 5494af1a9c97Smrg 5495a73423d7Smrg -bindir) 5496a73423d7Smrg prev=bindir 5497a73423d7Smrg continue 5498a73423d7Smrg ;; 5499a73423d7Smrg 5500b3e38ee4Smrg -dlopen) 5501b3e38ee4Smrg prev=dlfiles 5502b3e38ee4Smrg continue 5503b3e38ee4Smrg ;; 5504af1a9c97Smrg 5505b3e38ee4Smrg -dlpreopen) 5506b3e38ee4Smrg prev=dlprefiles 5507b3e38ee4Smrg continue 5508b3e38ee4Smrg ;; 5509af1a9c97Smrg 5510b3e38ee4Smrg -export-dynamic) 5511b3e38ee4Smrg export_dynamic=yes 5512b3e38ee4Smrg continue 5513b3e38ee4Smrg ;; 5514af1a9c97Smrg 5515b3e38ee4Smrg -export-symbols | -export-symbols-regex) 5516b3e38ee4Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517b3e38ee4Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518b3e38ee4Smrg fi 5519b3e38ee4Smrg if test "X$arg" = "X-export-symbols"; then 5520b3e38ee4Smrg prev=expsyms 5521b3e38ee4Smrg else 5522b3e38ee4Smrg prev=expsyms_regex 5523b3e38ee4Smrg fi 5524b3e38ee4Smrg continue 5525b3e38ee4Smrg ;; 5526af1a9c97Smrg 5527b3e38ee4Smrg -framework) 5528b3e38ee4Smrg prev=framework 5529b3e38ee4Smrg continue 5530b3e38ee4Smrg ;; 5531af1a9c97Smrg 5532b3e38ee4Smrg -inst-prefix-dir) 5533b3e38ee4Smrg prev=inst_prefix 5534b3e38ee4Smrg continue 5535b3e38ee4Smrg ;; 5536af1a9c97Smrg 5537b3e38ee4Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538b3e38ee4Smrg # so, if we see these flags be careful not to treat them like -L 5539b3e38ee4Smrg -L[A-Z][A-Z]*:*) 5540b3e38ee4Smrg case $with_gcc/$host in 5541b3e38ee4Smrg no/*-*-irix* | /*-*-irix*) 5542b3e38ee4Smrg func_append compile_command " $arg" 5543b3e38ee4Smrg func_append finalize_command " $arg" 5544b3e38ee4Smrg ;; 5545b3e38ee4Smrg esac 5546b3e38ee4Smrg continue 5547b3e38ee4Smrg ;; 5548af1a9c97Smrg 5549b3e38ee4Smrg -L*) 5550a73423d7Smrg func_stripname "-L" '' "$arg" 5551a73423d7Smrg if test -z "$func_stripname_result"; then 5552b3e38ee4Smrg if test "$#" -gt 0; then 5553b3e38ee4Smrg func_fatal_error "require no space between \`-L' and \`$1'" 5554b3e38ee4Smrg else 5555b3e38ee4Smrg func_fatal_error "need path for \`-L' option" 5556b3e38ee4Smrg fi 5557b3e38ee4Smrg fi 5558a73423d7Smrg func_resolve_sysroot "$func_stripname_result" 5559a73423d7Smrg dir=$func_resolve_sysroot_result 5560b3e38ee4Smrg # We need an absolute path. 5561b3e38ee4Smrg case $dir in 5562b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563b3e38ee4Smrg *) 5564b3e38ee4Smrg absdir=`cd "$dir" && pwd` 5565b3e38ee4Smrg test -z "$absdir" && \ 5566b3e38ee4Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567b3e38ee4Smrg dir="$absdir" 5568b3e38ee4Smrg ;; 5569b3e38ee4Smrg esac 5570b3e38ee4Smrg case "$deplibs " in 5571a73423d7Smrg *" -L$dir "* | *" $arg "*) 5572a73423d7Smrg # Will only happen for absolute or sysroot arguments 5573a73423d7Smrg ;; 5574b3e38ee4Smrg *) 5575a73423d7Smrg # Preserve sysroot, but never include relative directories 5576a73423d7Smrg case $dir in 5577a73423d7Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5578a73423d7Smrg *) func_append deplibs " -L$dir" ;; 5579a73423d7Smrg esac 5580a73423d7Smrg func_append lib_search_path " $dir" 5581b3e38ee4Smrg ;; 5582b3e38ee4Smrg esac 5583b3e38ee4Smrg case $host in 5584b3e38ee4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5585a73423d7Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586b3e38ee4Smrg case :$dllsearchpath: in 5587b3e38ee4Smrg *":$dir:"*) ;; 5588b3e38ee4Smrg ::) dllsearchpath=$dir;; 5589a73423d7Smrg *) func_append dllsearchpath ":$dir";; 5590b3e38ee4Smrg esac 5591b3e38ee4Smrg case :$dllsearchpath: in 5592b3e38ee4Smrg *":$testbindir:"*) ;; 5593b3e38ee4Smrg ::) dllsearchpath=$testbindir;; 5594a73423d7Smrg *) func_append dllsearchpath ":$testbindir";; 5595b3e38ee4Smrg esac 5596b3e38ee4Smrg ;; 5597b3e38ee4Smrg esac 5598b3e38ee4Smrg continue 5599b3e38ee4Smrg ;; 5600af1a9c97Smrg 5601b3e38ee4Smrg -l*) 5602b3e38ee4Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603b3e38ee4Smrg case $host in 5604a73423d7Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605b3e38ee4Smrg # These systems don't actually have a C or math library (as such) 5606b3e38ee4Smrg continue 5607b3e38ee4Smrg ;; 5608b3e38ee4Smrg *-*-os2*) 5609b3e38ee4Smrg # These systems don't actually have a C library (as such) 5610b3e38ee4Smrg test "X$arg" = "X-lc" && continue 5611b3e38ee4Smrg ;; 5612b3e38ee4Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613b3e38ee4Smrg # Do not include libc due to us having libc/libc_r. 5614b3e38ee4Smrg test "X$arg" = "X-lc" && continue 5615b3e38ee4Smrg ;; 5616b3e38ee4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 5617b3e38ee4Smrg # Rhapsody C and math libraries are in the System framework 5618a73423d7Smrg func_append deplibs " System.ltframework" 5619b3e38ee4Smrg continue 5620b3e38ee4Smrg ;; 5621b3e38ee4Smrg *-*-sco3.2v5* | *-*-sco5v6*) 5622b3e38ee4Smrg # Causes problems with __ctype 5623b3e38ee4Smrg test "X$arg" = "X-lc" && continue 5624b3e38ee4Smrg ;; 5625b3e38ee4Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626b3e38ee4Smrg # Compiler inserts libc in the correct place for threads to work 5627b3e38ee4Smrg test "X$arg" = "X-lc" && continue 5628b3e38ee4Smrg ;; 5629b3e38ee4Smrg esac 5630b3e38ee4Smrg elif test "X$arg" = "X-lc_r"; then 5631b3e38ee4Smrg case $host in 5632b3e38ee4Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633b3e38ee4Smrg # Do not include libc_r directly, use -pthread flag. 5634b3e38ee4Smrg continue 5635b3e38ee4Smrg ;; 5636b3e38ee4Smrg esac 5637b3e38ee4Smrg fi 5638a73423d7Smrg func_append deplibs " $arg" 5639b3e38ee4Smrg continue 5640b3e38ee4Smrg ;; 5641af1a9c97Smrg 5642b3e38ee4Smrg -module) 5643b3e38ee4Smrg module=yes 5644b3e38ee4Smrg continue 5645b3e38ee4Smrg ;; 5646af1a9c97Smrg 5647b3e38ee4Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648b3e38ee4Smrg # classes, name mangling, and exception handling. 5649b3e38ee4Smrg # Darwin uses the -arch flag to determine output architecture. 5650a73423d7Smrg -model|-arch|-isysroot|--sysroot) 5651a73423d7Smrg func_append compiler_flags " $arg" 5652b3e38ee4Smrg func_append compile_command " $arg" 5653b3e38ee4Smrg func_append finalize_command " $arg" 5654b3e38ee4Smrg prev=xcompiler 5655b3e38ee4Smrg continue 5656b3e38ee4Smrg ;; 5657af1a9c97Smrg 5658a73423d7Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659a73423d7Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 5660a73423d7Smrg func_append compiler_flags " $arg" 5661b3e38ee4Smrg func_append compile_command " $arg" 5662b3e38ee4Smrg func_append finalize_command " $arg" 5663b3e38ee4Smrg case "$new_inherited_linker_flags " in 5664b3e38ee4Smrg *" $arg "*) ;; 5665a73423d7Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666b3e38ee4Smrg esac 5667b3e38ee4Smrg continue 5668b3e38ee4Smrg ;; 5669af1a9c97Smrg 5670b3e38ee4Smrg -multi_module) 5671b3e38ee4Smrg single_module="${wl}-multi_module" 5672b3e38ee4Smrg continue 5673b3e38ee4Smrg ;; 5674af1a9c97Smrg 5675b3e38ee4Smrg -no-fast-install) 5676b3e38ee4Smrg fast_install=no 5677b3e38ee4Smrg continue 5678b3e38ee4Smrg ;; 5679af1a9c97Smrg 5680b3e38ee4Smrg -no-install) 5681b3e38ee4Smrg case $host in 5682b3e38ee4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683b3e38ee4Smrg # The PATH hackery in wrapper scripts is required on Windows 5684b3e38ee4Smrg # and Darwin in order for the loader to find any dlls it needs. 5685b3e38ee4Smrg func_warning "\`-no-install' is ignored for $host" 5686b3e38ee4Smrg func_warning "assuming \`-no-fast-install' instead" 5687b3e38ee4Smrg fast_install=no 5688b3e38ee4Smrg ;; 5689b3e38ee4Smrg *) no_install=yes ;; 5690b3e38ee4Smrg esac 5691b3e38ee4Smrg continue 5692b3e38ee4Smrg ;; 5693af1a9c97Smrg 5694b3e38ee4Smrg -no-undefined) 5695b3e38ee4Smrg allow_undefined=no 5696b3e38ee4Smrg continue 5697b3e38ee4Smrg ;; 5698af1a9c97Smrg 5699b3e38ee4Smrg -objectlist) 5700b3e38ee4Smrg prev=objectlist 5701b3e38ee4Smrg continue 5702b3e38ee4Smrg ;; 5703af1a9c97Smrg 5704b3e38ee4Smrg -o) prev=output ;; 5705af1a9c97Smrg 5706b3e38ee4Smrg -precious-files-regex) 5707b3e38ee4Smrg prev=precious_regex 5708b3e38ee4Smrg continue 5709b3e38ee4Smrg ;; 5710af1a9c97Smrg 5711b3e38ee4Smrg -release) 5712b3e38ee4Smrg prev=release 5713b3e38ee4Smrg continue 5714b3e38ee4Smrg ;; 5715af1a9c97Smrg 5716b3e38ee4Smrg -rpath) 5717b3e38ee4Smrg prev=rpath 5718b3e38ee4Smrg continue 5719b3e38ee4Smrg ;; 5720af1a9c97Smrg 5721b3e38ee4Smrg -R) 5722b3e38ee4Smrg prev=xrpath 5723b3e38ee4Smrg continue 5724b3e38ee4Smrg ;; 5725af1a9c97Smrg 5726b3e38ee4Smrg -R*) 5727b3e38ee4Smrg func_stripname '-R' '' "$arg" 5728b3e38ee4Smrg dir=$func_stripname_result 5729b3e38ee4Smrg # We need an absolute path. 5730b3e38ee4Smrg case $dir in 5731b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5732a73423d7Smrg =*) 5733a73423d7Smrg func_stripname '=' '' "$dir" 5734a73423d7Smrg dir=$lt_sysroot$func_stripname_result 5735a73423d7Smrg ;; 5736b3e38ee4Smrg *) 5737b3e38ee4Smrg func_fatal_error "only absolute run-paths are allowed" 5738b3e38ee4Smrg ;; 5739b3e38ee4Smrg esac 5740b3e38ee4Smrg case "$xrpath " in 5741b3e38ee4Smrg *" $dir "*) ;; 5742a73423d7Smrg *) func_append xrpath " $dir" ;; 5743b3e38ee4Smrg esac 5744b3e38ee4Smrg continue 5745b3e38ee4Smrg ;; 5746af1a9c97Smrg 5747b3e38ee4Smrg -shared) 5748b3e38ee4Smrg # The effects of -shared are defined in a previous loop. 5749b3e38ee4Smrg continue 5750b3e38ee4Smrg ;; 5751af1a9c97Smrg 5752b3e38ee4Smrg -shrext) 5753b3e38ee4Smrg prev=shrext 5754b3e38ee4Smrg continue 5755b3e38ee4Smrg ;; 5756af1a9c97Smrg 5757b3e38ee4Smrg -static | -static-libtool-libs) 5758b3e38ee4Smrg # The effects of -static are defined in a previous loop. 5759b3e38ee4Smrg # We used to do the same as -all-static on platforms that 5760b3e38ee4Smrg # didn't have a PIC flag, but the assumption that the effects 5761b3e38ee4Smrg # would be equivalent was wrong. It would break on at least 5762b3e38ee4Smrg # Digital Unix and AIX. 5763b3e38ee4Smrg continue 5764b3e38ee4Smrg ;; 5765af1a9c97Smrg 5766b3e38ee4Smrg -thread-safe) 5767b3e38ee4Smrg thread_safe=yes 5768b3e38ee4Smrg continue 5769b3e38ee4Smrg ;; 5770af1a9c97Smrg 5771b3e38ee4Smrg -version-info) 5772b3e38ee4Smrg prev=vinfo 5773b3e38ee4Smrg continue 5774b3e38ee4Smrg ;; 5775af1a9c97Smrg 5776b3e38ee4Smrg -version-number) 5777b3e38ee4Smrg prev=vinfo 5778b3e38ee4Smrg vinfo_number=yes 5779b3e38ee4Smrg continue 5780b3e38ee4Smrg ;; 5781af1a9c97Smrg 5782b3e38ee4Smrg -weak) 5783b3e38ee4Smrg prev=weak 5784b3e38ee4Smrg continue 5785b3e38ee4Smrg ;; 578650806d53Smrg 5787b3e38ee4Smrg -Wc,*) 5788b3e38ee4Smrg func_stripname '-Wc,' '' "$arg" 5789b3e38ee4Smrg args=$func_stripname_result 5790b3e38ee4Smrg arg= 5791b3e38ee4Smrg save_ifs="$IFS"; IFS=',' 5792b3e38ee4Smrg for flag in $args; do 5793b3e38ee4Smrg IFS="$save_ifs" 5794b3e38ee4Smrg func_quote_for_eval "$flag" 5795a73423d7Smrg func_append arg " $func_quote_for_eval_result" 5796a73423d7Smrg func_append compiler_flags " $func_quote_for_eval_result" 5797b3e38ee4Smrg done 5798b3e38ee4Smrg IFS="$save_ifs" 5799b3e38ee4Smrg func_stripname ' ' '' "$arg" 5800b3e38ee4Smrg arg=$func_stripname_result 5801b3e38ee4Smrg ;; 5802a18ebfb2Smrg 5803b3e38ee4Smrg -Wl,*) 5804b3e38ee4Smrg func_stripname '-Wl,' '' "$arg" 5805b3e38ee4Smrg args=$func_stripname_result 5806b3e38ee4Smrg arg= 5807b3e38ee4Smrg save_ifs="$IFS"; IFS=',' 5808b3e38ee4Smrg for flag in $args; do 5809b3e38ee4Smrg IFS="$save_ifs" 5810b3e38ee4Smrg func_quote_for_eval "$flag" 5811a73423d7Smrg func_append arg " $wl$func_quote_for_eval_result" 5812a73423d7Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 5813a73423d7Smrg func_append linker_flags " $func_quote_for_eval_result" 5814b3e38ee4Smrg done 5815b3e38ee4Smrg IFS="$save_ifs" 5816b3e38ee4Smrg func_stripname ' ' '' "$arg" 5817b3e38ee4Smrg arg=$func_stripname_result 5818b3e38ee4Smrg ;; 5819a18ebfb2Smrg 5820b3e38ee4Smrg -Xcompiler) 5821b3e38ee4Smrg prev=xcompiler 5822b3e38ee4Smrg continue 5823b3e38ee4Smrg ;; 5824a18ebfb2Smrg 5825b3e38ee4Smrg -Xlinker) 5826b3e38ee4Smrg prev=xlinker 5827b3e38ee4Smrg continue 5828b3e38ee4Smrg ;; 5829a18ebfb2Smrg 5830b3e38ee4Smrg -XCClinker) 5831b3e38ee4Smrg prev=xcclinker 5832b3e38ee4Smrg continue 5833b3e38ee4Smrg ;; 5834a18ebfb2Smrg 5835b3e38ee4Smrg # -msg_* for osf cc 5836b3e38ee4Smrg -msg_*) 5837b3e38ee4Smrg func_quote_for_eval "$arg" 5838b3e38ee4Smrg arg="$func_quote_for_eval_result" 5839b3e38ee4Smrg ;; 5840a18ebfb2Smrg 5841a73423d7Smrg # Flags to be passed through unchanged, with rationale: 5842a73423d7Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5843a73423d7Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 5844a73423d7Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5845a73423d7Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 5846a73423d7Smrg # -q* compiler args for the IBM compiler 5847a73423d7Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5848a73423d7Smrg # -F/path path to uninstalled frameworks, gcc on darwin 5849a73423d7Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5850a73423d7Smrg # @file GCC response files 5851a73423d7Smrg # -tp=* Portland pgcc target processor selection 5852a73423d7Smrg # --sysroot=* for sysroot support 5853a73423d7Smrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854b3e38ee4Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5855a73423d7Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 5856a73423d7Smrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857b3e38ee4Smrg func_quote_for_eval "$arg" 5858b3e38ee4Smrg arg="$func_quote_for_eval_result" 5859b3e38ee4Smrg func_append compile_command " $arg" 5860b3e38ee4Smrg func_append finalize_command " $arg" 5861a73423d7Smrg func_append compiler_flags " $arg" 5862b3e38ee4Smrg continue 5863b3e38ee4Smrg ;; 5864a18ebfb2Smrg 5865b3e38ee4Smrg # Some other compiler flag. 5866b3e38ee4Smrg -* | +*) 5867b3e38ee4Smrg func_quote_for_eval "$arg" 5868b3e38ee4Smrg arg="$func_quote_for_eval_result" 5869b3e38ee4Smrg ;; 5870a18ebfb2Smrg 5871b3e38ee4Smrg *.$objext) 5872b3e38ee4Smrg # A standard object. 5873a73423d7Smrg func_append objs " $arg" 5874b3e38ee4Smrg ;; 5875a18ebfb2Smrg 5876b3e38ee4Smrg *.lo) 5877b3e38ee4Smrg # A libtool-controlled object. 5878a18ebfb2Smrg 5879b3e38ee4Smrg # Check to see that this really is a libtool object. 5880b3e38ee4Smrg if func_lalib_unsafe_p "$arg"; then 5881b3e38ee4Smrg pic_object= 5882b3e38ee4Smrg non_pic_object= 5883a18ebfb2Smrg 5884b3e38ee4Smrg # Read the .lo file 5885b3e38ee4Smrg func_source "$arg" 5886a18ebfb2Smrg 5887b3e38ee4Smrg if test -z "$pic_object" || 5888b3e38ee4Smrg test -z "$non_pic_object" || 5889b3e38ee4Smrg test "$pic_object" = none && 5890b3e38ee4Smrg test "$non_pic_object" = none; then 5891b3e38ee4Smrg func_fatal_error "cannot find name of object for \`$arg'" 5892b3e38ee4Smrg fi 5893a18ebfb2Smrg 5894b3e38ee4Smrg # Extract subdirectory from the argument. 5895b3e38ee4Smrg func_dirname "$arg" "/" "" 5896b3e38ee4Smrg xdir="$func_dirname_result" 5897a18ebfb2Smrg 5898b3e38ee4Smrg if test "$pic_object" != none; then 5899b3e38ee4Smrg # Prepend the subdirectory the object is found in. 5900b3e38ee4Smrg pic_object="$xdir$pic_object" 5901a18ebfb2Smrg 5902b3e38ee4Smrg if test "$prev" = dlfiles; then 5903b3e38ee4Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5904a73423d7Smrg func_append dlfiles " $pic_object" 5905b3e38ee4Smrg prev= 5906b3e38ee4Smrg continue 5907b3e38ee4Smrg else 5908b3e38ee4Smrg # If libtool objects are unsupported, then we need to preload. 5909b3e38ee4Smrg prev=dlprefiles 5910b3e38ee4Smrg fi 5911b3e38ee4Smrg fi 5912a18ebfb2Smrg 5913b3e38ee4Smrg # CHECK ME: I think I busted this. -Ossama 5914b3e38ee4Smrg if test "$prev" = dlprefiles; then 5915b3e38ee4Smrg # Preload the old-style object. 5916a73423d7Smrg func_append dlprefiles " $pic_object" 5917b3e38ee4Smrg prev= 5918b3e38ee4Smrg fi 591950806d53Smrg 5920b3e38ee4Smrg # A PIC object. 5921b3e38ee4Smrg func_append libobjs " $pic_object" 5922b3e38ee4Smrg arg="$pic_object" 5923b3e38ee4Smrg fi 592450806d53Smrg 5925b3e38ee4Smrg # Non-PIC object. 5926b3e38ee4Smrg if test "$non_pic_object" != none; then 5927b3e38ee4Smrg # Prepend the subdirectory the object is found in. 5928b3e38ee4Smrg non_pic_object="$xdir$non_pic_object" 592950806d53Smrg 5930b3e38ee4Smrg # A standard non-PIC object 5931b3e38ee4Smrg func_append non_pic_objects " $non_pic_object" 5932b3e38ee4Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5933b3e38ee4Smrg arg="$non_pic_object" 5934b3e38ee4Smrg fi 5935b3e38ee4Smrg else 5936b3e38ee4Smrg # If the PIC object exists, use it instead. 5937b3e38ee4Smrg # $xdir was prepended to $pic_object above. 5938b3e38ee4Smrg non_pic_object="$pic_object" 5939b3e38ee4Smrg func_append non_pic_objects " $non_pic_object" 5940b3e38ee4Smrg fi 5941b3e38ee4Smrg else 5942b3e38ee4Smrg # Only an error if not doing a dry-run. 5943b3e38ee4Smrg if $opt_dry_run; then 5944b3e38ee4Smrg # Extract subdirectory from the argument. 5945b3e38ee4Smrg func_dirname "$arg" "/" "" 5946b3e38ee4Smrg xdir="$func_dirname_result" 5947b3e38ee4Smrg 5948b3e38ee4Smrg func_lo2o "$arg" 5949b3e38ee4Smrg pic_object=$xdir$objdir/$func_lo2o_result 5950b3e38ee4Smrg non_pic_object=$xdir$func_lo2o_result 5951b3e38ee4Smrg func_append libobjs " $pic_object" 5952b3e38ee4Smrg func_append non_pic_objects " $non_pic_object" 5953b3e38ee4Smrg else 5954b3e38ee4Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5955b3e38ee4Smrg fi 5956b3e38ee4Smrg fi 5957b3e38ee4Smrg ;; 595850806d53Smrg 5959b3e38ee4Smrg *.$libext) 5960b3e38ee4Smrg # An archive. 5961a73423d7Smrg func_append deplibs " $arg" 5962a73423d7Smrg func_append old_deplibs " $arg" 5963b3e38ee4Smrg continue 5964b3e38ee4Smrg ;; 5965b3e38ee4Smrg 5966b3e38ee4Smrg *.la) 5967b3e38ee4Smrg # A libtool-controlled library. 5968b3e38ee4Smrg 5969a73423d7Smrg func_resolve_sysroot "$arg" 5970b3e38ee4Smrg if test "$prev" = dlfiles; then 5971b3e38ee4Smrg # This library was specified with -dlopen. 5972a73423d7Smrg func_append dlfiles " $func_resolve_sysroot_result" 5973b3e38ee4Smrg prev= 5974b3e38ee4Smrg elif test "$prev" = dlprefiles; then 5975b3e38ee4Smrg # The library was specified with -dlpreopen. 5976a73423d7Smrg func_append dlprefiles " $func_resolve_sysroot_result" 5977b3e38ee4Smrg prev= 5978b3e38ee4Smrg else 5979a73423d7Smrg func_append deplibs " $func_resolve_sysroot_result" 5980b3e38ee4Smrg fi 5981b3e38ee4Smrg continue 5982b3e38ee4Smrg ;; 5983b3e38ee4Smrg 5984b3e38ee4Smrg # Some other compiler argument. 5985b3e38ee4Smrg *) 5986b3e38ee4Smrg # Unknown arguments in both finalize_command and compile_command need 5987b3e38ee4Smrg # to be aesthetically quoted because they are evaled later. 5988b3e38ee4Smrg func_quote_for_eval "$arg" 5989b3e38ee4Smrg arg="$func_quote_for_eval_result" 5990b3e38ee4Smrg ;; 5991b3e38ee4Smrg esac # arg 5992b3e38ee4Smrg 5993b3e38ee4Smrg # Now actually substitute the argument into the commands. 5994b3e38ee4Smrg if test -n "$arg"; then 5995b3e38ee4Smrg func_append compile_command " $arg" 5996b3e38ee4Smrg func_append finalize_command " $arg" 5997b3e38ee4Smrg fi 5998b3e38ee4Smrg done # argument parsing loop 5999b3e38ee4Smrg 6000b3e38ee4Smrg test -n "$prev" && \ 6001b3e38ee4Smrg func_fatal_help "the \`$prevarg' option requires an argument" 6002b3e38ee4Smrg 6003b3e38ee4Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004b3e38ee4Smrg eval arg=\"$export_dynamic_flag_spec\" 6005b3e38ee4Smrg func_append compile_command " $arg" 6006b3e38ee4Smrg func_append finalize_command " $arg" 6007b3e38ee4Smrg fi 6008b3e38ee4Smrg 6009b3e38ee4Smrg oldlibs= 6010b3e38ee4Smrg # calculate the name of the file, without its directory 6011b3e38ee4Smrg func_basename "$output" 6012b3e38ee4Smrg outputname="$func_basename_result" 6013b3e38ee4Smrg libobjs_save="$libobjs" 6014b3e38ee4Smrg 6015b3e38ee4Smrg if test -n "$shlibpath_var"; then 6016b3e38ee4Smrg # get the directories listed in $shlibpath_var 6017a73423d7Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018b3e38ee4Smrg else 6019b3e38ee4Smrg shlib_search_path= 6020b3e38ee4Smrg fi 6021b3e38ee4Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022b3e38ee4Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023b3e38ee4Smrg 6024b3e38ee4Smrg func_dirname "$output" "/" "" 6025b3e38ee4Smrg output_objdir="$func_dirname_result$objdir" 6026a73423d7Smrg func_to_tool_file "$output_objdir/" 6027a73423d7Smrg tool_output_objdir=$func_to_tool_file_result 6028b3e38ee4Smrg # Create the object directory. 6029b3e38ee4Smrg func_mkdir_p "$output_objdir" 6030b3e38ee4Smrg 6031b3e38ee4Smrg # Determine the type of output 6032b3e38ee4Smrg case $output in 6033b3e38ee4Smrg "") 6034b3e38ee4Smrg func_fatal_help "you must specify an output file" 6035b3e38ee4Smrg ;; 6036b3e38ee4Smrg *.$libext) linkmode=oldlib ;; 6037b3e38ee4Smrg *.lo | *.$objext) linkmode=obj ;; 6038b3e38ee4Smrg *.la) linkmode=lib ;; 6039b3e38ee4Smrg *) linkmode=prog ;; # Anything else should be a program. 6040b3e38ee4Smrg esac 6041b3e38ee4Smrg 6042b3e38ee4Smrg specialdeplibs= 6043b3e38ee4Smrg 6044b3e38ee4Smrg libs= 6045b3e38ee4Smrg # Find all interdependent deplibs by searching for libraries 6046b3e38ee4Smrg # that are linked more than once (e.g. -la -lb -la) 6047b3e38ee4Smrg for deplib in $deplibs; do 6048a73423d7Smrg if $opt_preserve_dup_deps ; then 6049b3e38ee4Smrg case "$libs " in 6050a73423d7Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051b3e38ee4Smrg esac 6052b3e38ee4Smrg fi 6053a73423d7Smrg func_append libs " $deplib" 6054b3e38ee4Smrg done 6055b3e38ee4Smrg 6056b3e38ee4Smrg if test "$linkmode" = lib; then 6057b3e38ee4Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058b3e38ee4Smrg 6059b3e38ee4Smrg # Compute libraries that are listed more than once in $predeps 6060b3e38ee4Smrg # $postdeps and mark them as special (i.e., whose duplicates are 6061b3e38ee4Smrg # not to be eliminated). 6062b3e38ee4Smrg pre_post_deps= 6063b3e38ee4Smrg if $opt_duplicate_compiler_generated_deps; then 6064b3e38ee4Smrg for pre_post_dep in $predeps $postdeps; do 6065b3e38ee4Smrg case "$pre_post_deps " in 6066a73423d7Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067b3e38ee4Smrg esac 6068a73423d7Smrg func_append pre_post_deps " $pre_post_dep" 6069b3e38ee4Smrg done 6070b3e38ee4Smrg fi 6071b3e38ee4Smrg pre_post_deps= 6072b3e38ee4Smrg fi 6073b3e38ee4Smrg 6074b3e38ee4Smrg deplibs= 6075b3e38ee4Smrg newdependency_libs= 6076b3e38ee4Smrg newlib_search_path= 6077b3e38ee4Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078b3e38ee4Smrg notinst_deplibs= # not-installed libtool libraries 6079b3e38ee4Smrg notinst_path= # paths that contain not-installed libtool libraries 6080b3e38ee4Smrg 6081b3e38ee4Smrg case $linkmode in 6082b3e38ee4Smrg lib) 6083b3e38ee4Smrg passes="conv dlpreopen link" 6084b3e38ee4Smrg for file in $dlfiles $dlprefiles; do 6085b3e38ee4Smrg case $file in 6086b3e38ee4Smrg *.la) ;; 6087b3e38ee4Smrg *) 6088b3e38ee4Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089b3e38ee4Smrg ;; 6090b3e38ee4Smrg esac 6091b3e38ee4Smrg done 6092b3e38ee4Smrg ;; 6093b3e38ee4Smrg prog) 6094b3e38ee4Smrg compile_deplibs= 6095b3e38ee4Smrg finalize_deplibs= 6096b3e38ee4Smrg alldeplibs=no 6097b3e38ee4Smrg newdlfiles= 6098b3e38ee4Smrg newdlprefiles= 6099b3e38ee4Smrg passes="conv scan dlopen dlpreopen link" 6100b3e38ee4Smrg ;; 6101b3e38ee4Smrg *) passes="conv" 6102b3e38ee4Smrg ;; 6103b3e38ee4Smrg esac 6104b3e38ee4Smrg 6105b3e38ee4Smrg for pass in $passes; do 6106b3e38ee4Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107b3e38ee4Smrg # so that -L comes before libs that need it for instance... 6108b3e38ee4Smrg if test "$linkmode,$pass" = "lib,link"; then 6109b3e38ee4Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110b3e38ee4Smrg ## order, and fix it there properly 6111b3e38ee4Smrg tmp_deplibs= 6112b3e38ee4Smrg for deplib in $deplibs; do 6113b3e38ee4Smrg tmp_deplibs="$deplib $tmp_deplibs" 6114b3e38ee4Smrg done 6115b3e38ee4Smrg deplibs="$tmp_deplibs" 6116b3e38ee4Smrg fi 6117b3e38ee4Smrg 6118b3e38ee4Smrg if test "$linkmode,$pass" = "lib,link" || 6119b3e38ee4Smrg test "$linkmode,$pass" = "prog,scan"; then 6120b3e38ee4Smrg libs="$deplibs" 6121b3e38ee4Smrg deplibs= 6122b3e38ee4Smrg fi 6123b3e38ee4Smrg if test "$linkmode" = prog; then 6124b3e38ee4Smrg case $pass in 6125b3e38ee4Smrg dlopen) libs="$dlfiles" ;; 6126b3e38ee4Smrg dlpreopen) libs="$dlprefiles" ;; 6127b3e38ee4Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128b3e38ee4Smrg esac 6129b3e38ee4Smrg fi 6130b3e38ee4Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131b3e38ee4Smrg # Collect and forward deplibs of preopened libtool libs 6132b3e38ee4Smrg for lib in $dlprefiles; do 6133b3e38ee4Smrg # Ignore non-libtool-libs 6134b3e38ee4Smrg dependency_libs= 6135a73423d7Smrg func_resolve_sysroot "$lib" 6136b3e38ee4Smrg case $lib in 6137a73423d7Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 6138b3e38ee4Smrg esac 6139b3e38ee4Smrg 6140b3e38ee4Smrg # Collect preopened libtool deplibs, except any this library 6141b3e38ee4Smrg # has declared as weak libs 6142b3e38ee4Smrg for deplib in $dependency_libs; do 6143a73423d7Smrg func_basename "$deplib" 6144a73423d7Smrg deplib_base=$func_basename_result 6145b3e38ee4Smrg case " $weak_libs " in 6146b3e38ee4Smrg *" $deplib_base "*) ;; 6147a73423d7Smrg *) func_append deplibs " $deplib" ;; 6148b3e38ee4Smrg esac 6149b3e38ee4Smrg done 6150b3e38ee4Smrg done 6151b3e38ee4Smrg libs="$dlprefiles" 6152b3e38ee4Smrg fi 6153b3e38ee4Smrg if test "$pass" = dlopen; then 6154b3e38ee4Smrg # Collect dlpreopened libraries 6155b3e38ee4Smrg save_deplibs="$deplibs" 6156b3e38ee4Smrg deplibs= 6157b3e38ee4Smrg fi 6158b3e38ee4Smrg 6159b3e38ee4Smrg for deplib in $libs; do 6160b3e38ee4Smrg lib= 6161b3e38ee4Smrg found=no 6162b3e38ee4Smrg case $deplib in 6163a73423d7Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6164a73423d7Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165b3e38ee4Smrg if test "$linkmode,$pass" = "prog,link"; then 6166b3e38ee4Smrg compile_deplibs="$deplib $compile_deplibs" 6167b3e38ee4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6168b3e38ee4Smrg else 6169a73423d7Smrg func_append compiler_flags " $deplib" 6170b3e38ee4Smrg if test "$linkmode" = lib ; then 6171b3e38ee4Smrg case "$new_inherited_linker_flags " in 6172b3e38ee4Smrg *" $deplib "*) ;; 6173a73423d7Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6174b3e38ee4Smrg esac 6175b3e38ee4Smrg fi 6176b3e38ee4Smrg fi 6177b3e38ee4Smrg continue 6178b3e38ee4Smrg ;; 6179b3e38ee4Smrg -l*) 6180b3e38ee4Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 6181b3e38ee4Smrg func_warning "\`-l' is ignored for archives/objects" 6182b3e38ee4Smrg continue 6183b3e38ee4Smrg fi 6184b3e38ee4Smrg func_stripname '-l' '' "$deplib" 6185b3e38ee4Smrg name=$func_stripname_result 6186b3e38ee4Smrg if test "$linkmode" = lib; then 6187b3e38ee4Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188b3e38ee4Smrg else 6189b3e38ee4Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190b3e38ee4Smrg fi 6191b3e38ee4Smrg for searchdir in $searchdirs; do 6192b3e38ee4Smrg for search_ext in .la $std_shrext .so .a; do 6193b3e38ee4Smrg # Search the libtool library 6194b3e38ee4Smrg lib="$searchdir/lib${name}${search_ext}" 6195b3e38ee4Smrg if test -f "$lib"; then 6196b3e38ee4Smrg if test "$search_ext" = ".la"; then 6197b3e38ee4Smrg found=yes 6198b3e38ee4Smrg else 6199b3e38ee4Smrg found=no 6200b3e38ee4Smrg fi 6201b3e38ee4Smrg break 2 6202b3e38ee4Smrg fi 6203b3e38ee4Smrg done 6204b3e38ee4Smrg done 6205b3e38ee4Smrg if test "$found" != yes; then 6206b3e38ee4Smrg # deplib doesn't seem to be a libtool library 6207b3e38ee4Smrg if test "$linkmode,$pass" = "prog,link"; then 6208b3e38ee4Smrg compile_deplibs="$deplib $compile_deplibs" 6209b3e38ee4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6210b3e38ee4Smrg else 6211b3e38ee4Smrg deplibs="$deplib $deplibs" 6212b3e38ee4Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213b3e38ee4Smrg fi 6214b3e38ee4Smrg continue 6215b3e38ee4Smrg else # deplib is a libtool library 6216b3e38ee4Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217b3e38ee4Smrg # We need to do some special things here, and not later. 6218b3e38ee4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219b3e38ee4Smrg case " $predeps $postdeps " in 6220b3e38ee4Smrg *" $deplib "*) 6221b3e38ee4Smrg if func_lalib_p "$lib"; then 6222b3e38ee4Smrg library_names= 6223b3e38ee4Smrg old_library= 6224b3e38ee4Smrg func_source "$lib" 6225b3e38ee4Smrg for l in $old_library $library_names; do 6226b3e38ee4Smrg ll="$l" 6227b3e38ee4Smrg done 6228b3e38ee4Smrg if test "X$ll" = "X$old_library" ; then # only static version available 6229b3e38ee4Smrg found=no 6230b3e38ee4Smrg func_dirname "$lib" "" "." 6231b3e38ee4Smrg ladir="$func_dirname_result" 6232b3e38ee4Smrg lib=$ladir/$old_library 6233b3e38ee4Smrg if test "$linkmode,$pass" = "prog,link"; then 6234b3e38ee4Smrg compile_deplibs="$deplib $compile_deplibs" 6235b3e38ee4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6236b3e38ee4Smrg else 6237b3e38ee4Smrg deplibs="$deplib $deplibs" 6238b3e38ee4Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239b3e38ee4Smrg fi 6240b3e38ee4Smrg continue 6241b3e38ee4Smrg fi 6242b3e38ee4Smrg fi 6243b3e38ee4Smrg ;; 6244b3e38ee4Smrg *) ;; 6245b3e38ee4Smrg esac 6246b3e38ee4Smrg fi 6247b3e38ee4Smrg fi 6248b3e38ee4Smrg ;; # -l 6249b3e38ee4Smrg *.ltframework) 6250b3e38ee4Smrg if test "$linkmode,$pass" = "prog,link"; then 6251b3e38ee4Smrg compile_deplibs="$deplib $compile_deplibs" 6252b3e38ee4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6253b3e38ee4Smrg else 6254b3e38ee4Smrg deplibs="$deplib $deplibs" 6255b3e38ee4Smrg if test "$linkmode" = lib ; then 6256b3e38ee4Smrg case "$new_inherited_linker_flags " in 6257b3e38ee4Smrg *" $deplib "*) ;; 6258a73423d7Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6259b3e38ee4Smrg esac 6260b3e38ee4Smrg fi 6261b3e38ee4Smrg fi 6262b3e38ee4Smrg continue 6263b3e38ee4Smrg ;; 6264b3e38ee4Smrg -L*) 6265b3e38ee4Smrg case $linkmode in 6266b3e38ee4Smrg lib) 6267b3e38ee4Smrg deplibs="$deplib $deplibs" 6268b3e38ee4Smrg test "$pass" = conv && continue 6269b3e38ee4Smrg newdependency_libs="$deplib $newdependency_libs" 6270b3e38ee4Smrg func_stripname '-L' '' "$deplib" 6271a73423d7Smrg func_resolve_sysroot "$func_stripname_result" 6272a73423d7Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6273b3e38ee4Smrg ;; 6274b3e38ee4Smrg prog) 6275b3e38ee4Smrg if test "$pass" = conv; then 6276b3e38ee4Smrg deplibs="$deplib $deplibs" 6277b3e38ee4Smrg continue 6278b3e38ee4Smrg fi 6279b3e38ee4Smrg if test "$pass" = scan; then 6280b3e38ee4Smrg deplibs="$deplib $deplibs" 6281b3e38ee4Smrg else 6282b3e38ee4Smrg compile_deplibs="$deplib $compile_deplibs" 6283b3e38ee4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6284b3e38ee4Smrg fi 6285b3e38ee4Smrg func_stripname '-L' '' "$deplib" 6286a73423d7Smrg func_resolve_sysroot "$func_stripname_result" 6287a73423d7Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6288b3e38ee4Smrg ;; 6289b3e38ee4Smrg *) 6290b3e38ee4Smrg func_warning "\`-L' is ignored for archives/objects" 6291b3e38ee4Smrg ;; 6292b3e38ee4Smrg esac # linkmode 6293b3e38ee4Smrg continue 6294b3e38ee4Smrg ;; # -L 6295b3e38ee4Smrg -R*) 6296b3e38ee4Smrg if test "$pass" = link; then 6297b3e38ee4Smrg func_stripname '-R' '' "$deplib" 6298a73423d7Smrg func_resolve_sysroot "$func_stripname_result" 6299a73423d7Smrg dir=$func_resolve_sysroot_result 6300b3e38ee4Smrg # Make sure the xrpath contains only unique directories. 6301b3e38ee4Smrg case "$xrpath " in 6302b3e38ee4Smrg *" $dir "*) ;; 6303a73423d7Smrg *) func_append xrpath " $dir" ;; 6304b3e38ee4Smrg esac 6305b3e38ee4Smrg fi 6306b3e38ee4Smrg deplibs="$deplib $deplibs" 6307b3e38ee4Smrg continue 6308b3e38ee4Smrg ;; 6309a73423d7Smrg *.la) 6310a73423d7Smrg func_resolve_sysroot "$deplib" 6311a73423d7Smrg lib=$func_resolve_sysroot_result 6312a73423d7Smrg ;; 6313b3e38ee4Smrg *.$libext) 6314b3e38ee4Smrg if test "$pass" = conv; then 6315b3e38ee4Smrg deplibs="$deplib $deplibs" 6316b3e38ee4Smrg continue 6317b3e38ee4Smrg fi 6318b3e38ee4Smrg case $linkmode in 6319b3e38ee4Smrg lib) 6320b3e38ee4Smrg # Linking convenience modules into shared libraries is allowed, 6321b3e38ee4Smrg # but linking other static libraries is non-portable. 6322b3e38ee4Smrg case " $dlpreconveniencelibs " in 6323b3e38ee4Smrg *" $deplib "*) ;; 6324b3e38ee4Smrg *) 6325b3e38ee4Smrg valid_a_lib=no 6326b3e38ee4Smrg case $deplibs_check_method in 6327b3e38ee4Smrg match_pattern*) 6328b3e38ee4Smrg set dummy $deplibs_check_method; shift 6329b3e38ee4Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6330a73423d7Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331b3e38ee4Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 6332b3e38ee4Smrg valid_a_lib=yes 6333b3e38ee4Smrg fi 6334b3e38ee4Smrg ;; 6335b3e38ee4Smrg pass_all) 6336b3e38ee4Smrg valid_a_lib=yes 6337b3e38ee4Smrg ;; 6338b3e38ee4Smrg esac 6339b3e38ee4Smrg if test "$valid_a_lib" != yes; then 6340a73423d7Smrg echo 6341b3e38ee4Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6342a73423d7Smrg echo "*** I have the capability to make that library automatically link in when" 6343a73423d7Smrg echo "*** you link to this library. But I can only do this if you have a" 6344a73423d7Smrg echo "*** shared version of the library, which you do not appear to have" 6345a73423d7Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 6346a73423d7Smrg echo "*** that it is just a static archive that I should not use here." 6347b3e38ee4Smrg else 6348a73423d7Smrg echo 6349b3e38ee4Smrg $ECHO "*** Warning: Linking the shared library $output against the" 6350b3e38ee4Smrg $ECHO "*** static library $deplib is not portable!" 6351b3e38ee4Smrg deplibs="$deplib $deplibs" 6352b3e38ee4Smrg fi 6353b3e38ee4Smrg ;; 6354b3e38ee4Smrg esac 6355b3e38ee4Smrg continue 6356b3e38ee4Smrg ;; 6357b3e38ee4Smrg prog) 6358b3e38ee4Smrg if test "$pass" != link; then 6359b3e38ee4Smrg deplibs="$deplib $deplibs" 6360b3e38ee4Smrg else 6361b3e38ee4Smrg compile_deplibs="$deplib $compile_deplibs" 6362b3e38ee4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6363b3e38ee4Smrg fi 6364b3e38ee4Smrg continue 6365b3e38ee4Smrg ;; 6366b3e38ee4Smrg esac # linkmode 6367b3e38ee4Smrg ;; # *.$libext 6368b3e38ee4Smrg *.lo | *.$objext) 6369b3e38ee4Smrg if test "$pass" = conv; then 6370b3e38ee4Smrg deplibs="$deplib $deplibs" 6371b3e38ee4Smrg elif test "$linkmode" = prog; then 6372b3e38ee4Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373b3e38ee4Smrg # If there is no dlopen support or we're linking statically, 6374b3e38ee4Smrg # we need to preload. 6375a73423d7Smrg func_append newdlprefiles " $deplib" 6376b3e38ee4Smrg compile_deplibs="$deplib $compile_deplibs" 6377b3e38ee4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6378b3e38ee4Smrg else 6379a73423d7Smrg func_append newdlfiles " $deplib" 6380b3e38ee4Smrg fi 6381b3e38ee4Smrg fi 6382b3e38ee4Smrg continue 6383b3e38ee4Smrg ;; 6384b3e38ee4Smrg %DEPLIBS%) 6385b3e38ee4Smrg alldeplibs=yes 6386b3e38ee4Smrg continue 6387b3e38ee4Smrg ;; 6388b3e38ee4Smrg esac # case $deplib 6389b3e38ee4Smrg 6390b3e38ee4Smrg if test "$found" = yes || test -f "$lib"; then : 6391b3e38ee4Smrg else 6392b3e38ee4Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393b3e38ee4Smrg fi 6394b3e38ee4Smrg 6395b3e38ee4Smrg # Check to see that this really is a libtool archive. 6396b3e38ee4Smrg func_lalib_unsafe_p "$lib" \ 6397b3e38ee4Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6398b3e38ee4Smrg 6399b3e38ee4Smrg func_dirname "$lib" "" "." 6400b3e38ee4Smrg ladir="$func_dirname_result" 6401b3e38ee4Smrg 6402b3e38ee4Smrg dlname= 6403b3e38ee4Smrg dlopen= 6404b3e38ee4Smrg dlpreopen= 6405b3e38ee4Smrg libdir= 6406b3e38ee4Smrg library_names= 6407b3e38ee4Smrg old_library= 6408b3e38ee4Smrg inherited_linker_flags= 6409b3e38ee4Smrg # If the library was installed with an old release of libtool, 6410b3e38ee4Smrg # it will not redefine variables installed, or shouldnotlink 6411b3e38ee4Smrg installed=yes 6412b3e38ee4Smrg shouldnotlink=no 6413b3e38ee4Smrg avoidtemprpath= 6414b3e38ee4Smrg 6415b3e38ee4Smrg 6416b3e38ee4Smrg # Read the .la file 6417b3e38ee4Smrg func_source "$lib" 6418b3e38ee4Smrg 6419b3e38ee4Smrg # Convert "-framework foo" to "foo.ltframework" 6420b3e38ee4Smrg if test -n "$inherited_linker_flags"; then 6421a73423d7Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422b3e38ee4Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423b3e38ee4Smrg case " $new_inherited_linker_flags " in 6424b3e38ee4Smrg *" $tmp_inherited_linker_flag "*) ;; 6425a73423d7Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426b3e38ee4Smrg esac 6427b3e38ee4Smrg done 6428b3e38ee4Smrg fi 6429a73423d7Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430b3e38ee4Smrg if test "$linkmode,$pass" = "lib,link" || 6431b3e38ee4Smrg test "$linkmode,$pass" = "prog,scan" || 6432b3e38ee4Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6433a73423d7Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 6434a73423d7Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435b3e38ee4Smrg fi 6436b3e38ee4Smrg 6437b3e38ee4Smrg if test "$pass" = conv; then 6438b3e38ee4Smrg # Only check for convenience libraries 6439b3e38ee4Smrg deplibs="$lib $deplibs" 6440b3e38ee4Smrg if test -z "$libdir"; then 6441b3e38ee4Smrg if test -z "$old_library"; then 6442b3e38ee4Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6443b3e38ee4Smrg fi 6444b3e38ee4Smrg # It is a libtool convenience library, so add in its objects. 6445a73423d7Smrg func_append convenience " $ladir/$objdir/$old_library" 6446a73423d7Smrg func_append old_convenience " $ladir/$objdir/$old_library" 6447b3e38ee4Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448b3e38ee4Smrg func_fatal_error "\`$lib' is not a convenience library" 6449b3e38ee4Smrg fi 6450b3e38ee4Smrg tmp_libs= 6451b3e38ee4Smrg for deplib in $dependency_libs; do 6452b3e38ee4Smrg deplibs="$deplib $deplibs" 6453a73423d7Smrg if $opt_preserve_dup_deps ; then 6454b3e38ee4Smrg case "$tmp_libs " in 6455a73423d7Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456b3e38ee4Smrg esac 6457b3e38ee4Smrg fi 6458a73423d7Smrg func_append tmp_libs " $deplib" 6459b3e38ee4Smrg done 6460b3e38ee4Smrg continue 6461b3e38ee4Smrg fi # $pass = conv 6462b3e38ee4Smrg 6463b3e38ee4Smrg 6464b3e38ee4Smrg # Get the name of the library we link against. 6465b3e38ee4Smrg linklib= 6466a73423d7Smrg if test -n "$old_library" && 6467a73423d7Smrg { test "$prefer_static_libs" = yes || 6468a73423d7Smrg test "$prefer_static_libs,$installed" = "built,no"; }; then 6469a73423d7Smrg linklib=$old_library 6470a73423d7Smrg else 6471a73423d7Smrg for l in $old_library $library_names; do 6472a73423d7Smrg linklib="$l" 6473a73423d7Smrg done 6474a73423d7Smrg fi 6475b3e38ee4Smrg if test -z "$linklib"; then 6476b3e38ee4Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6477b3e38ee4Smrg fi 6478b3e38ee4Smrg 6479b3e38ee4Smrg # This library was specified with -dlopen. 6480b3e38ee4Smrg if test "$pass" = dlopen; then 6481b3e38ee4Smrg if test -z "$libdir"; then 6482b3e38ee4Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483b3e38ee4Smrg fi 6484b3e38ee4Smrg if test -z "$dlname" || 6485b3e38ee4Smrg test "$dlopen_support" != yes || 6486b3e38ee4Smrg test "$build_libtool_libs" = no; then 6487b3e38ee4Smrg # If there is no dlname, no dlopen support or we're linking 6488b3e38ee4Smrg # statically, we need to preload. We also need to preload any 6489b3e38ee4Smrg # dependent libraries so libltdl's deplib preloader doesn't 6490b3e38ee4Smrg # bomb out in the load deplibs phase. 6491a73423d7Smrg func_append dlprefiles " $lib $dependency_libs" 6492b3e38ee4Smrg else 6493a73423d7Smrg func_append newdlfiles " $lib" 6494b3e38ee4Smrg fi 6495b3e38ee4Smrg continue 6496b3e38ee4Smrg fi # $pass = dlopen 6497b3e38ee4Smrg 6498b3e38ee4Smrg # We need an absolute path. 6499b3e38ee4Smrg case $ladir in 6500b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501b3e38ee4Smrg *) 6502b3e38ee4Smrg abs_ladir=`cd "$ladir" && pwd` 6503b3e38ee4Smrg if test -z "$abs_ladir"; then 6504b3e38ee4Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 6505b3e38ee4Smrg func_warning "passing it literally to the linker, although it might fail" 6506b3e38ee4Smrg abs_ladir="$ladir" 6507b3e38ee4Smrg fi 6508b3e38ee4Smrg ;; 6509b3e38ee4Smrg esac 6510b3e38ee4Smrg func_basename "$lib" 6511b3e38ee4Smrg laname="$func_basename_result" 6512b3e38ee4Smrg 6513b3e38ee4Smrg # Find the relevant object directory and library name. 6514b3e38ee4Smrg if test "X$installed" = Xyes; then 6515a73423d7Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516b3e38ee4Smrg func_warning "library \`$lib' was moved." 6517b3e38ee4Smrg dir="$ladir" 6518b3e38ee4Smrg absdir="$abs_ladir" 6519b3e38ee4Smrg libdir="$abs_ladir" 6520b3e38ee4Smrg else 6521a73423d7Smrg dir="$lt_sysroot$libdir" 6522a73423d7Smrg absdir="$lt_sysroot$libdir" 6523b3e38ee4Smrg fi 6524b3e38ee4Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525b3e38ee4Smrg else 6526b3e38ee4Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527b3e38ee4Smrg dir="$ladir" 6528b3e38ee4Smrg absdir="$abs_ladir" 6529b3e38ee4Smrg # Remove this search path later 6530a73423d7Smrg func_append notinst_path " $abs_ladir" 6531b3e38ee4Smrg else 6532b3e38ee4Smrg dir="$ladir/$objdir" 6533b3e38ee4Smrg absdir="$abs_ladir/$objdir" 6534b3e38ee4Smrg # Remove this search path later 6535a73423d7Smrg func_append notinst_path " $abs_ladir" 6536b3e38ee4Smrg fi 6537b3e38ee4Smrg fi # $installed = yes 6538b3e38ee4Smrg func_stripname 'lib' '.la' "$laname" 6539b3e38ee4Smrg name=$func_stripname_result 6540b3e38ee4Smrg 6541b3e38ee4Smrg # This library was specified with -dlpreopen. 6542b3e38ee4Smrg if test "$pass" = dlpreopen; then 6543b3e38ee4Smrg if test -z "$libdir" && test "$linkmode" = prog; then 6544b3e38ee4Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545b3e38ee4Smrg fi 6546a73423d7Smrg case "$host" in 6547a73423d7Smrg # special handling for platforms with PE-DLLs. 6548a73423d7Smrg *cygwin* | *mingw* | *cegcc* ) 6549a73423d7Smrg # Linker will automatically link against shared library if both 6550a73423d7Smrg # static and shared are present. Therefore, ensure we extract 6551a73423d7Smrg # symbols from the import library if a shared library is present 6552a73423d7Smrg # (otherwise, the dlopen module name will be incorrect). We do 6553a73423d7Smrg # this by putting the import library name into $newdlprefiles. 6554a73423d7Smrg # We recover the dlopen module name by 'saving' the la file 6555a73423d7Smrg # name in a special purpose variable, and (later) extracting the 6556a73423d7Smrg # dlname from the la file. 6557a73423d7Smrg if test -n "$dlname"; then 6558a73423d7Smrg func_tr_sh "$dir/$linklib" 6559a73423d7Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6560a73423d7Smrg func_append newdlprefiles " $dir/$linklib" 6561a73423d7Smrg else 6562a73423d7Smrg func_append newdlprefiles " $dir/$old_library" 6563a73423d7Smrg # Keep a list of preopened convenience libraries to check 6564a73423d7Smrg # that they are being used correctly in the link pass. 6565a73423d7Smrg test -z "$libdir" && \ 6566a73423d7Smrg func_append dlpreconveniencelibs " $dir/$old_library" 6567a73423d7Smrg fi 6568a73423d7Smrg ;; 6569a73423d7Smrg * ) 6570a73423d7Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 6571a73423d7Smrg # are required to link). 6572a73423d7Smrg if test -n "$old_library"; then 6573a73423d7Smrg func_append newdlprefiles " $dir/$old_library" 6574a73423d7Smrg # Keep a list of preopened convenience libraries to check 6575a73423d7Smrg # that they are being used correctly in the link pass. 6576a73423d7Smrg test -z "$libdir" && \ 6577a73423d7Smrg func_append dlpreconveniencelibs " $dir/$old_library" 6578a73423d7Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 6579a73423d7Smrg elif test -n "$dlname"; then 6580a73423d7Smrg func_append newdlprefiles " $dir/$dlname" 6581a73423d7Smrg else 6582a73423d7Smrg func_append newdlprefiles " $dir/$linklib" 6583a73423d7Smrg fi 6584a73423d7Smrg ;; 6585a73423d7Smrg esac 6586b3e38ee4Smrg fi # $pass = dlpreopen 6587b3e38ee4Smrg 6588b3e38ee4Smrg if test -z "$libdir"; then 6589b3e38ee4Smrg # Link the convenience library 6590b3e38ee4Smrg if test "$linkmode" = lib; then 6591b3e38ee4Smrg deplibs="$dir/$old_library $deplibs" 6592b3e38ee4Smrg elif test "$linkmode,$pass" = "prog,link"; then 6593b3e38ee4Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 6594b3e38ee4Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595b3e38ee4Smrg else 6596b3e38ee4Smrg deplibs="$lib $deplibs" # used for prog,scan pass 6597b3e38ee4Smrg fi 6598b3e38ee4Smrg continue 6599b3e38ee4Smrg fi 6600b3e38ee4Smrg 6601b3e38ee4Smrg 6602b3e38ee4Smrg if test "$linkmode" = prog && test "$pass" != link; then 6603a73423d7Smrg func_append newlib_search_path " $ladir" 6604b3e38ee4Smrg deplibs="$lib $deplibs" 6605b3e38ee4Smrg 6606b3e38ee4Smrg linkalldeplibs=no 6607b3e38ee4Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 6608b3e38ee4Smrg test "$build_libtool_libs" = no; then 6609b3e38ee4Smrg linkalldeplibs=yes 6610b3e38ee4Smrg fi 6611b3e38ee4Smrg 6612b3e38ee4Smrg tmp_libs= 6613b3e38ee4Smrg for deplib in $dependency_libs; do 6614b3e38ee4Smrg case $deplib in 6615b3e38ee4Smrg -L*) func_stripname '-L' '' "$deplib" 6616a73423d7Smrg func_resolve_sysroot "$func_stripname_result" 6617a73423d7Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6618b3e38ee4Smrg ;; 6619b3e38ee4Smrg esac 6620b3e38ee4Smrg # Need to link against all dependency_libs? 6621b3e38ee4Smrg if test "$linkalldeplibs" = yes; then 6622b3e38ee4Smrg deplibs="$deplib $deplibs" 6623b3e38ee4Smrg else 6624b3e38ee4Smrg # Need to hardcode shared library paths 6625b3e38ee4Smrg # or/and link against static libraries 6626b3e38ee4Smrg newdependency_libs="$deplib $newdependency_libs" 6627b3e38ee4Smrg fi 6628a73423d7Smrg if $opt_preserve_dup_deps ; then 6629b3e38ee4Smrg case "$tmp_libs " in 6630a73423d7Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631b3e38ee4Smrg esac 6632b3e38ee4Smrg fi 6633a73423d7Smrg func_append tmp_libs " $deplib" 6634b3e38ee4Smrg done # for deplib 6635b3e38ee4Smrg continue 6636b3e38ee4Smrg fi # $linkmode = prog... 6637b3e38ee4Smrg 6638b3e38ee4Smrg if test "$linkmode,$pass" = "prog,link"; then 6639b3e38ee4Smrg if test -n "$library_names" && 6640b3e38ee4Smrg { { test "$prefer_static_libs" = no || 6641b3e38ee4Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6642b3e38ee4Smrg test -z "$old_library"; }; then 6643b3e38ee4Smrg # We need to hardcode the library path 6644b3e38ee4Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645b3e38ee4Smrg # Make sure the rpath contains only unique directories. 6646b3e38ee4Smrg case "$temp_rpath:" in 6647b3e38ee4Smrg *"$absdir:"*) ;; 6648a73423d7Smrg *) func_append temp_rpath "$absdir:" ;; 6649b3e38ee4Smrg esac 6650b3e38ee4Smrg fi 6651b3e38ee4Smrg 6652b3e38ee4Smrg # Hardcode the library path. 6653b3e38ee4Smrg # Skip directories that are in the system default run-time 6654b3e38ee4Smrg # search path. 6655b3e38ee4Smrg case " $sys_lib_dlsearch_path " in 6656b3e38ee4Smrg *" $absdir "*) ;; 6657b3e38ee4Smrg *) 6658b3e38ee4Smrg case "$compile_rpath " in 6659b3e38ee4Smrg *" $absdir "*) ;; 6660a73423d7Smrg *) func_append compile_rpath " $absdir" ;; 6661b3e38ee4Smrg esac 6662b3e38ee4Smrg ;; 6663b3e38ee4Smrg esac 6664b3e38ee4Smrg case " $sys_lib_dlsearch_path " in 6665b3e38ee4Smrg *" $libdir "*) ;; 6666b3e38ee4Smrg *) 6667b3e38ee4Smrg case "$finalize_rpath " in 6668b3e38ee4Smrg *" $libdir "*) ;; 6669a73423d7Smrg *) func_append finalize_rpath " $libdir" ;; 6670b3e38ee4Smrg esac 6671b3e38ee4Smrg ;; 6672b3e38ee4Smrg esac 6673b3e38ee4Smrg fi # $linkmode,$pass = prog,link... 6674b3e38ee4Smrg 6675b3e38ee4Smrg if test "$alldeplibs" = yes && 6676b3e38ee4Smrg { test "$deplibs_check_method" = pass_all || 6677b3e38ee4Smrg { test "$build_libtool_libs" = yes && 6678b3e38ee4Smrg test -n "$library_names"; }; }; then 6679b3e38ee4Smrg # We only need to search for static libraries 6680b3e38ee4Smrg continue 6681b3e38ee4Smrg fi 6682b3e38ee4Smrg fi 6683b3e38ee4Smrg 6684b3e38ee4Smrg link_static=no # Whether the deplib will be linked statically 6685b3e38ee4Smrg use_static_libs=$prefer_static_libs 6686b3e38ee4Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 6687b3e38ee4Smrg use_static_libs=no 6688b3e38ee4Smrg fi 6689b3e38ee4Smrg if test -n "$library_names" && 6690b3e38ee4Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691b3e38ee4Smrg case $host in 6692b3e38ee4Smrg *cygwin* | *mingw* | *cegcc*) 6693b3e38ee4Smrg # No point in relinking DLLs because paths are not encoded 6694a73423d7Smrg func_append notinst_deplibs " $lib" 6695b3e38ee4Smrg need_relink=no 6696b3e38ee4Smrg ;; 6697b3e38ee4Smrg *) 6698b3e38ee4Smrg if test "$installed" = no; then 6699a73423d7Smrg func_append notinst_deplibs " $lib" 6700b3e38ee4Smrg need_relink=yes 6701b3e38ee4Smrg fi 6702b3e38ee4Smrg ;; 6703b3e38ee4Smrg esac 6704b3e38ee4Smrg # This is a shared library 6705b3e38ee4Smrg 6706b3e38ee4Smrg # Warn about portability, can't link against -module's on some 6707b3e38ee4Smrg # systems (darwin). Don't bleat about dlopened modules though! 6708b3e38ee4Smrg dlopenmodule="" 6709b3e38ee4Smrg for dlpremoduletest in $dlprefiles; do 6710b3e38ee4Smrg if test "X$dlpremoduletest" = "X$lib"; then 6711b3e38ee4Smrg dlopenmodule="$dlpremoduletest" 6712b3e38ee4Smrg break 6713b3e38ee4Smrg fi 6714b3e38ee4Smrg done 6715b3e38ee4Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6716a73423d7Smrg echo 6717b3e38ee4Smrg if test "$linkmode" = prog; then 6718b3e38ee4Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719b3e38ee4Smrg else 6720b3e38ee4Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721b3e38ee4Smrg fi 6722b3e38ee4Smrg $ECHO "*** $linklib is not portable!" 6723b3e38ee4Smrg fi 6724b3e38ee4Smrg if test "$linkmode" = lib && 6725b3e38ee4Smrg test "$hardcode_into_libs" = yes; then 6726b3e38ee4Smrg # Hardcode the library path. 6727b3e38ee4Smrg # Skip directories that are in the system default run-time 6728b3e38ee4Smrg # search path. 6729b3e38ee4Smrg case " $sys_lib_dlsearch_path " in 6730b3e38ee4Smrg *" $absdir "*) ;; 6731b3e38ee4Smrg *) 6732b3e38ee4Smrg case "$compile_rpath " in 6733b3e38ee4Smrg *" $absdir "*) ;; 6734a73423d7Smrg *) func_append compile_rpath " $absdir" ;; 6735b3e38ee4Smrg esac 6736b3e38ee4Smrg ;; 6737b3e38ee4Smrg esac 6738b3e38ee4Smrg case " $sys_lib_dlsearch_path " in 6739b3e38ee4Smrg *" $libdir "*) ;; 6740b3e38ee4Smrg *) 6741b3e38ee4Smrg case "$finalize_rpath " in 6742b3e38ee4Smrg *" $libdir "*) ;; 6743a73423d7Smrg *) func_append finalize_rpath " $libdir" ;; 6744b3e38ee4Smrg esac 6745b3e38ee4Smrg ;; 6746b3e38ee4Smrg esac 6747b3e38ee4Smrg fi 6748b3e38ee4Smrg 6749b3e38ee4Smrg if test -n "$old_archive_from_expsyms_cmds"; then 6750b3e38ee4Smrg # figure out the soname 6751b3e38ee4Smrg set dummy $library_names 6752b3e38ee4Smrg shift 6753b3e38ee4Smrg realname="$1" 6754b3e38ee4Smrg shift 6755b3e38ee4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6756b3e38ee4Smrg # use dlname if we got it. it's perfectly good, no? 6757b3e38ee4Smrg if test -n "$dlname"; then 6758b3e38ee4Smrg soname="$dlname" 6759b3e38ee4Smrg elif test -n "$soname_spec"; then 6760b3e38ee4Smrg # bleh windows 6761b3e38ee4Smrg case $host in 6762b3e38ee4Smrg *cygwin* | mingw* | *cegcc*) 6763b3e38ee4Smrg func_arith $current - $age 6764b3e38ee4Smrg major=$func_arith_result 6765b3e38ee4Smrg versuffix="-$major" 6766b3e38ee4Smrg ;; 6767b3e38ee4Smrg esac 6768b3e38ee4Smrg eval soname=\"$soname_spec\" 6769b3e38ee4Smrg else 6770b3e38ee4Smrg soname="$realname" 6771b3e38ee4Smrg fi 6772b3e38ee4Smrg 6773b3e38ee4Smrg # Make a new name for the extract_expsyms_cmds to use 6774b3e38ee4Smrg soroot="$soname" 6775b3e38ee4Smrg func_basename "$soroot" 6776b3e38ee4Smrg soname="$func_basename_result" 6777b3e38ee4Smrg func_stripname 'lib' '.dll' "$soname" 6778b3e38ee4Smrg newlib=libimp-$func_stripname_result.a 6779b3e38ee4Smrg 6780b3e38ee4Smrg # If the library has no export list, then create one now 6781b3e38ee4Smrg if test -f "$output_objdir/$soname-def"; then : 6782b3e38ee4Smrg else 6783b3e38ee4Smrg func_verbose "extracting exported symbol list from \`$soname'" 6784b3e38ee4Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785b3e38ee4Smrg fi 6786b3e38ee4Smrg 6787b3e38ee4Smrg # Create $newlib 6788b3e38ee4Smrg if test -f "$output_objdir/$newlib"; then :; else 6789b3e38ee4Smrg func_verbose "generating import library for \`$soname'" 6790b3e38ee4Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791b3e38ee4Smrg fi 6792b3e38ee4Smrg # make sure the library variables are pointing to the new library 6793b3e38ee4Smrg dir=$output_objdir 6794b3e38ee4Smrg linklib=$newlib 6795b3e38ee4Smrg fi # test -n "$old_archive_from_expsyms_cmds" 6796b3e38ee4Smrg 6797a73423d7Smrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798b3e38ee4Smrg add_shlibpath= 6799b3e38ee4Smrg add_dir= 6800b3e38ee4Smrg add= 6801b3e38ee4Smrg lib_linked=yes 6802b3e38ee4Smrg case $hardcode_action in 6803b3e38ee4Smrg immediate | unsupported) 6804b3e38ee4Smrg if test "$hardcode_direct" = no; then 6805b3e38ee4Smrg add="$dir/$linklib" 6806b3e38ee4Smrg case $host in 6807b3e38ee4Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808b3e38ee4Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809b3e38ee4Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810b3e38ee4Smrg *-*-unixware7*) add_dir="-L$dir" ;; 6811b3e38ee4Smrg *-*-darwin* ) 6812b3e38ee4Smrg # if the lib is a (non-dlopened) module then we can not 6813b3e38ee4Smrg # link against it, someone is ignoring the earlier warnings 6814b3e38ee4Smrg if /usr/bin/file -L $add 2> /dev/null | 6815b3e38ee4Smrg $GREP ": [^:]* bundle" >/dev/null ; then 6816b3e38ee4Smrg if test "X$dlopenmodule" != "X$lib"; then 6817b3e38ee4Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818b3e38ee4Smrg if test -z "$old_library" ; then 6819a73423d7Smrg echo 6820a73423d7Smrg echo "*** And there doesn't seem to be a static archive available" 6821a73423d7Smrg echo "*** The link will probably fail, sorry" 6822b3e38ee4Smrg else 6823b3e38ee4Smrg add="$dir/$old_library" 6824b3e38ee4Smrg fi 6825b3e38ee4Smrg elif test -n "$old_library"; then 6826b3e38ee4Smrg add="$dir/$old_library" 6827b3e38ee4Smrg fi 6828b3e38ee4Smrg fi 6829b3e38ee4Smrg esac 6830b3e38ee4Smrg elif test "$hardcode_minus_L" = no; then 6831b3e38ee4Smrg case $host in 6832b3e38ee4Smrg *-*-sunos*) add_shlibpath="$dir" ;; 6833b3e38ee4Smrg esac 6834b3e38ee4Smrg add_dir="-L$dir" 6835b3e38ee4Smrg add="-l$name" 6836b3e38ee4Smrg elif test "$hardcode_shlibpath_var" = no; then 6837b3e38ee4Smrg add_shlibpath="$dir" 6838b3e38ee4Smrg add="-l$name" 6839b3e38ee4Smrg else 6840b3e38ee4Smrg lib_linked=no 6841b3e38ee4Smrg fi 6842b3e38ee4Smrg ;; 6843b3e38ee4Smrg relink) 6844b3e38ee4Smrg if test "$hardcode_direct" = yes && 6845b3e38ee4Smrg test "$hardcode_direct_absolute" = no; then 6846b3e38ee4Smrg add="$dir/$linklib" 6847b3e38ee4Smrg elif test "$hardcode_minus_L" = yes; then 6848a73423d7Smrg add_dir="-L$absdir" 6849b3e38ee4Smrg # Try looking first in the location we're being installed to. 6850b3e38ee4Smrg if test -n "$inst_prefix_dir"; then 6851b3e38ee4Smrg case $libdir in 6852b3e38ee4Smrg [\\/]*) 6853a73423d7Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6854b3e38ee4Smrg ;; 6855b3e38ee4Smrg esac 6856b3e38ee4Smrg fi 6857b3e38ee4Smrg add="-l$name" 6858b3e38ee4Smrg elif test "$hardcode_shlibpath_var" = yes; then 6859b3e38ee4Smrg add_shlibpath="$dir" 6860b3e38ee4Smrg add="-l$name" 6861b3e38ee4Smrg else 6862b3e38ee4Smrg lib_linked=no 6863b3e38ee4Smrg fi 6864b3e38ee4Smrg ;; 6865b3e38ee4Smrg *) lib_linked=no ;; 6866b3e38ee4Smrg esac 6867b3e38ee4Smrg 6868b3e38ee4Smrg if test "$lib_linked" != yes; then 6869b3e38ee4Smrg func_fatal_configuration "unsupported hardcode properties" 6870b3e38ee4Smrg fi 6871b3e38ee4Smrg 6872b3e38ee4Smrg if test -n "$add_shlibpath"; then 6873b3e38ee4Smrg case :$compile_shlibpath: in 6874b3e38ee4Smrg *":$add_shlibpath:"*) ;; 6875a73423d7Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876b3e38ee4Smrg esac 6877b3e38ee4Smrg fi 6878b3e38ee4Smrg if test "$linkmode" = prog; then 6879b3e38ee4Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880b3e38ee4Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881b3e38ee4Smrg else 6882b3e38ee4Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883b3e38ee4Smrg test -n "$add" && deplibs="$add $deplibs" 6884b3e38ee4Smrg if test "$hardcode_direct" != yes && 6885b3e38ee4Smrg test "$hardcode_minus_L" != yes && 6886b3e38ee4Smrg test "$hardcode_shlibpath_var" = yes; then 6887b3e38ee4Smrg case :$finalize_shlibpath: in 6888b3e38ee4Smrg *":$libdir:"*) ;; 6889a73423d7Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6890b3e38ee4Smrg esac 6891b3e38ee4Smrg fi 6892b3e38ee4Smrg fi 6893b3e38ee4Smrg fi 6894b3e38ee4Smrg 6895a73423d7Smrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896b3e38ee4Smrg add_shlibpath= 6897b3e38ee4Smrg add_dir= 6898b3e38ee4Smrg add= 6899b3e38ee4Smrg # Finalize command for both is simple: just hardcode it. 6900b3e38ee4Smrg if test "$hardcode_direct" = yes && 6901b3e38ee4Smrg test "$hardcode_direct_absolute" = no; then 6902b3e38ee4Smrg add="$libdir/$linklib" 6903b3e38ee4Smrg elif test "$hardcode_minus_L" = yes; then 6904b3e38ee4Smrg add_dir="-L$libdir" 6905b3e38ee4Smrg add="-l$name" 6906b3e38ee4Smrg elif test "$hardcode_shlibpath_var" = yes; then 6907b3e38ee4Smrg case :$finalize_shlibpath: in 6908b3e38ee4Smrg *":$libdir:"*) ;; 6909a73423d7Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6910b3e38ee4Smrg esac 6911b3e38ee4Smrg add="-l$name" 6912b3e38ee4Smrg elif test "$hardcode_automatic" = yes; then 6913b3e38ee4Smrg if test -n "$inst_prefix_dir" && 6914b3e38ee4Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915b3e38ee4Smrg add="$inst_prefix_dir$libdir/$linklib" 6916b3e38ee4Smrg else 6917b3e38ee4Smrg add="$libdir/$linklib" 6918b3e38ee4Smrg fi 6919b3e38ee4Smrg else 6920b3e38ee4Smrg # We cannot seem to hardcode it, guess we'll fake it. 6921b3e38ee4Smrg add_dir="-L$libdir" 6922b3e38ee4Smrg # Try looking first in the location we're being installed to. 6923b3e38ee4Smrg if test -n "$inst_prefix_dir"; then 6924b3e38ee4Smrg case $libdir in 6925b3e38ee4Smrg [\\/]*) 6926a73423d7Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6927b3e38ee4Smrg ;; 6928b3e38ee4Smrg esac 6929b3e38ee4Smrg fi 6930b3e38ee4Smrg add="-l$name" 6931b3e38ee4Smrg fi 6932b3e38ee4Smrg 6933b3e38ee4Smrg if test "$linkmode" = prog; then 6934b3e38ee4Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935b3e38ee4Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936b3e38ee4Smrg else 6937b3e38ee4Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938b3e38ee4Smrg test -n "$add" && deplibs="$add $deplibs" 6939b3e38ee4Smrg fi 6940b3e38ee4Smrg fi 6941b3e38ee4Smrg elif test "$linkmode" = prog; then 6942b3e38ee4Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6943b3e38ee4Smrg # is not unsupported. This is valid on all known static and 6944b3e38ee4Smrg # shared platforms. 6945b3e38ee4Smrg if test "$hardcode_direct" != unsupported; then 6946b3e38ee4Smrg test -n "$old_library" && linklib="$old_library" 6947b3e38ee4Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 6948b3e38ee4Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949b3e38ee4Smrg else 6950b3e38ee4Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6951b3e38ee4Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952b3e38ee4Smrg fi 6953b3e38ee4Smrg elif test "$build_libtool_libs" = yes; then 6954b3e38ee4Smrg # Not a shared library 6955b3e38ee4Smrg if test "$deplibs_check_method" != pass_all; then 6956b3e38ee4Smrg # We're trying link a shared library against a static one 6957b3e38ee4Smrg # but the system doesn't support it. 6958b3e38ee4Smrg 6959b3e38ee4Smrg # Just print a warning and add the library to dependency_libs so 6960b3e38ee4Smrg # that the program can be linked against the static library. 6961a73423d7Smrg echo 6962b3e38ee4Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 6963a73423d7Smrg echo "*** I have the capability to make that library automatically link in when" 6964a73423d7Smrg echo "*** you link to this library. But I can only do this if you have a" 6965a73423d7Smrg echo "*** shared version of the library, which you do not appear to have." 6966b3e38ee4Smrg if test "$module" = yes; then 6967a73423d7Smrg echo "*** But as you try to build a module library, libtool will still create " 6968a73423d7Smrg echo "*** a static module, that should work as long as the dlopening application" 6969a73423d7Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970b3e38ee4Smrg if test -z "$global_symbol_pipe"; then 6971a73423d7Smrg echo 6972a73423d7Smrg echo "*** However, this would only work if libtool was able to extract symbol" 6973a73423d7Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6974a73423d7Smrg echo "*** not find such a program. So, this module is probably useless." 6975a73423d7Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976b3e38ee4Smrg fi 6977b3e38ee4Smrg if test "$build_old_libs" = no; then 6978b3e38ee4Smrg build_libtool_libs=module 6979b3e38ee4Smrg build_old_libs=yes 6980b3e38ee4Smrg else 6981b3e38ee4Smrg build_libtool_libs=no 6982b3e38ee4Smrg fi 6983b3e38ee4Smrg fi 6984b3e38ee4Smrg else 6985b3e38ee4Smrg deplibs="$dir/$old_library $deplibs" 6986b3e38ee4Smrg link_static=yes 6987b3e38ee4Smrg fi 6988b3e38ee4Smrg fi # link shared/static library? 6989b3e38ee4Smrg 6990b3e38ee4Smrg if test "$linkmode" = lib; then 6991b3e38ee4Smrg if test -n "$dependency_libs" && 6992b3e38ee4Smrg { test "$hardcode_into_libs" != yes || 6993b3e38ee4Smrg test "$build_old_libs" = yes || 6994b3e38ee4Smrg test "$link_static" = yes; }; then 6995b3e38ee4Smrg # Extract -R from dependency_libs 6996b3e38ee4Smrg temp_deplibs= 6997b3e38ee4Smrg for libdir in $dependency_libs; do 6998b3e38ee4Smrg case $libdir in 6999b3e38ee4Smrg -R*) func_stripname '-R' '' "$libdir" 7000b3e38ee4Smrg temp_xrpath=$func_stripname_result 7001b3e38ee4Smrg case " $xrpath " in 7002b3e38ee4Smrg *" $temp_xrpath "*) ;; 7003a73423d7Smrg *) func_append xrpath " $temp_xrpath";; 7004b3e38ee4Smrg esac;; 7005a73423d7Smrg *) func_append temp_deplibs " $libdir";; 7006b3e38ee4Smrg esac 7007b3e38ee4Smrg done 7008b3e38ee4Smrg dependency_libs="$temp_deplibs" 7009b3e38ee4Smrg fi 7010b3e38ee4Smrg 7011a73423d7Smrg func_append newlib_search_path " $absdir" 7012b3e38ee4Smrg # Link against this library 7013b3e38ee4Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014b3e38ee4Smrg # ... and its dependency_libs 7015b3e38ee4Smrg tmp_libs= 7016b3e38ee4Smrg for deplib in $dependency_libs; do 7017b3e38ee4Smrg newdependency_libs="$deplib $newdependency_libs" 7018a73423d7Smrg case $deplib in 7019a73423d7Smrg -L*) func_stripname '-L' '' "$deplib" 7020a73423d7Smrg func_resolve_sysroot "$func_stripname_result";; 7021a73423d7Smrg *) func_resolve_sysroot "$deplib" ;; 7022a73423d7Smrg esac 7023a73423d7Smrg if $opt_preserve_dup_deps ; then 7024b3e38ee4Smrg case "$tmp_libs " in 7025a73423d7Smrg *" $func_resolve_sysroot_result "*) 7026a73423d7Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027b3e38ee4Smrg esac 7028b3e38ee4Smrg fi 7029a73423d7Smrg func_append tmp_libs " $func_resolve_sysroot_result" 7030b3e38ee4Smrg done 7031b3e38ee4Smrg 7032b3e38ee4Smrg if test "$link_all_deplibs" != no; then 7033b3e38ee4Smrg # Add the search paths of all dependency libraries 7034b3e38ee4Smrg for deplib in $dependency_libs; do 7035a73423d7Smrg path= 7036b3e38ee4Smrg case $deplib in 7037b3e38ee4Smrg -L*) path="$deplib" ;; 7038b3e38ee4Smrg *.la) 7039a73423d7Smrg func_resolve_sysroot "$deplib" 7040a73423d7Smrg deplib=$func_resolve_sysroot_result 7041b3e38ee4Smrg func_dirname "$deplib" "" "." 7042a73423d7Smrg dir=$func_dirname_result 7043b3e38ee4Smrg # We need an absolute path. 7044b3e38ee4Smrg case $dir in 7045b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046b3e38ee4Smrg *) 7047b3e38ee4Smrg absdir=`cd "$dir" && pwd` 7048b3e38ee4Smrg if test -z "$absdir"; then 7049b3e38ee4Smrg func_warning "cannot determine absolute directory name of \`$dir'" 7050b3e38ee4Smrg absdir="$dir" 7051b3e38ee4Smrg fi 7052b3e38ee4Smrg ;; 7053b3e38ee4Smrg esac 7054b3e38ee4Smrg if $GREP "^installed=no" $deplib > /dev/null; then 7055b3e38ee4Smrg case $host in 7056b3e38ee4Smrg *-*-darwin*) 7057b3e38ee4Smrg depdepl= 7058b3e38ee4Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059b3e38ee4Smrg if test -n "$deplibrary_names" ; then 7060b3e38ee4Smrg for tmp in $deplibrary_names ; do 7061b3e38ee4Smrg depdepl=$tmp 7062b3e38ee4Smrg done 7063b3e38ee4Smrg if test -f "$absdir/$objdir/$depdepl" ; then 7064b3e38ee4Smrg depdepl="$absdir/$objdir/$depdepl" 7065b3e38ee4Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066b3e38ee4Smrg if test -z "$darwin_install_name"; then 7067b3e38ee4Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068b3e38ee4Smrg fi 7069a73423d7Smrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 7070a73423d7Smrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071b3e38ee4Smrg path= 7072b3e38ee4Smrg fi 7073b3e38ee4Smrg fi 7074b3e38ee4Smrg ;; 7075b3e38ee4Smrg *) 7076b3e38ee4Smrg path="-L$absdir/$objdir" 7077b3e38ee4Smrg ;; 7078b3e38ee4Smrg esac 7079b3e38ee4Smrg else 7080b3e38ee4Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081b3e38ee4Smrg test -z "$libdir" && \ 7082b3e38ee4Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7083b3e38ee4Smrg test "$absdir" != "$libdir" && \ 7084b3e38ee4Smrg func_warning "\`$deplib' seems to be moved" 7085b3e38ee4Smrg 7086b3e38ee4Smrg path="-L$absdir" 7087b3e38ee4Smrg fi 7088b3e38ee4Smrg ;; 7089b3e38ee4Smrg esac 7090b3e38ee4Smrg case " $deplibs " in 7091b3e38ee4Smrg *" $path "*) ;; 7092b3e38ee4Smrg *) deplibs="$path $deplibs" ;; 7093b3e38ee4Smrg esac 7094b3e38ee4Smrg done 7095b3e38ee4Smrg fi # link_all_deplibs != no 7096b3e38ee4Smrg fi # linkmode = lib 7097b3e38ee4Smrg done # for deplib in $libs 7098b3e38ee4Smrg if test "$pass" = link; then 7099b3e38ee4Smrg if test "$linkmode" = "prog"; then 7100b3e38ee4Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101b3e38ee4Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102b3e38ee4Smrg else 7103a73423d7Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104b3e38ee4Smrg fi 7105b3e38ee4Smrg fi 7106b3e38ee4Smrg dependency_libs="$newdependency_libs" 7107b3e38ee4Smrg if test "$pass" = dlpreopen; then 7108b3e38ee4Smrg # Link the dlpreopened libraries before other libraries 7109b3e38ee4Smrg for deplib in $save_deplibs; do 7110b3e38ee4Smrg deplibs="$deplib $deplibs" 7111b3e38ee4Smrg done 7112b3e38ee4Smrg fi 7113b3e38ee4Smrg if test "$pass" != dlopen; then 7114b3e38ee4Smrg if test "$pass" != conv; then 7115b3e38ee4Smrg # Make sure lib_search_path contains only unique directories. 7116b3e38ee4Smrg lib_search_path= 7117b3e38ee4Smrg for dir in $newlib_search_path; do 7118b3e38ee4Smrg case "$lib_search_path " in 7119b3e38ee4Smrg *" $dir "*) ;; 7120a73423d7Smrg *) func_append lib_search_path " $dir" ;; 7121b3e38ee4Smrg esac 7122b3e38ee4Smrg done 7123b3e38ee4Smrg newlib_search_path= 7124b3e38ee4Smrg fi 7125b3e38ee4Smrg 7126b3e38ee4Smrg if test "$linkmode,$pass" != "prog,link"; then 7127b3e38ee4Smrg vars="deplibs" 7128b3e38ee4Smrg else 7129b3e38ee4Smrg vars="compile_deplibs finalize_deplibs" 7130b3e38ee4Smrg fi 7131b3e38ee4Smrg for var in $vars dependency_libs; do 7132b3e38ee4Smrg # Add libraries to $var in reverse order 7133b3e38ee4Smrg eval tmp_libs=\"\$$var\" 7134b3e38ee4Smrg new_libs= 7135b3e38ee4Smrg for deplib in $tmp_libs; do 7136b3e38ee4Smrg # FIXME: Pedantically, this is the right thing to do, so 7137b3e38ee4Smrg # that some nasty dependency loop isn't accidentally 7138b3e38ee4Smrg # broken: 7139b3e38ee4Smrg #new_libs="$deplib $new_libs" 7140b3e38ee4Smrg # Pragmatically, this seems to cause very few problems in 7141b3e38ee4Smrg # practice: 7142b3e38ee4Smrg case $deplib in 7143b3e38ee4Smrg -L*) new_libs="$deplib $new_libs" ;; 7144b3e38ee4Smrg -R*) ;; 7145b3e38ee4Smrg *) 7146b3e38ee4Smrg # And here is the reason: when a library appears more 7147b3e38ee4Smrg # than once as an explicit dependence of a library, or 7148b3e38ee4Smrg # is implicitly linked in more than once by the 7149b3e38ee4Smrg # compiler, it is considered special, and multiple 7150b3e38ee4Smrg # occurrences thereof are not removed. Compare this 7151b3e38ee4Smrg # with having the same library being listed as a 7152b3e38ee4Smrg # dependency of multiple other libraries: in this case, 7153b3e38ee4Smrg # we know (pedantically, we assume) the library does not 7154b3e38ee4Smrg # need to be listed more than once, so we keep only the 7155b3e38ee4Smrg # last copy. This is not always right, but it is rare 7156b3e38ee4Smrg # enough that we require users that really mean to play 7157b3e38ee4Smrg # such unportable linking tricks to link the library 7158b3e38ee4Smrg # using -Wl,-lname, so that libtool does not consider it 7159b3e38ee4Smrg # for duplicate removal. 7160b3e38ee4Smrg case " $specialdeplibs " in 7161b3e38ee4Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162b3e38ee4Smrg *) 7163b3e38ee4Smrg case " $new_libs " in 7164b3e38ee4Smrg *" $deplib "*) ;; 7165b3e38ee4Smrg *) new_libs="$deplib $new_libs" ;; 7166b3e38ee4Smrg esac 7167b3e38ee4Smrg ;; 7168b3e38ee4Smrg esac 7169b3e38ee4Smrg ;; 7170b3e38ee4Smrg esac 7171b3e38ee4Smrg done 7172b3e38ee4Smrg tmp_libs= 7173b3e38ee4Smrg for deplib in $new_libs; do 7174b3e38ee4Smrg case $deplib in 7175b3e38ee4Smrg -L*) 7176b3e38ee4Smrg case " $tmp_libs " in 7177b3e38ee4Smrg *" $deplib "*) ;; 7178a73423d7Smrg *) func_append tmp_libs " $deplib" ;; 7179b3e38ee4Smrg esac 7180b3e38ee4Smrg ;; 7181a73423d7Smrg *) func_append tmp_libs " $deplib" ;; 7182b3e38ee4Smrg esac 7183b3e38ee4Smrg done 7184b3e38ee4Smrg eval $var=\"$tmp_libs\" 7185b3e38ee4Smrg done # for var 7186b3e38ee4Smrg fi 7187b3e38ee4Smrg # Last step: remove runtime libs from dependency_libs 7188b3e38ee4Smrg # (they stay in deplibs) 7189b3e38ee4Smrg tmp_libs= 7190b3e38ee4Smrg for i in $dependency_libs ; do 7191b3e38ee4Smrg case " $predeps $postdeps $compiler_lib_search_path " in 7192b3e38ee4Smrg *" $i "*) 7193b3e38ee4Smrg i="" 7194b3e38ee4Smrg ;; 7195b3e38ee4Smrg esac 7196b3e38ee4Smrg if test -n "$i" ; then 7197a73423d7Smrg func_append tmp_libs " $i" 7198b3e38ee4Smrg fi 7199b3e38ee4Smrg done 7200b3e38ee4Smrg dependency_libs=$tmp_libs 7201b3e38ee4Smrg done # for pass 7202b3e38ee4Smrg if test "$linkmode" = prog; then 7203b3e38ee4Smrg dlfiles="$newdlfiles" 7204b3e38ee4Smrg fi 7205b3e38ee4Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 7206b3e38ee4Smrg dlprefiles="$newdlprefiles" 7207b3e38ee4Smrg fi 7208b3e38ee4Smrg 7209b3e38ee4Smrg case $linkmode in 7210b3e38ee4Smrg oldlib) 7211b3e38ee4Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212b3e38ee4Smrg func_warning "\`-dlopen' is ignored for archives" 7213b3e38ee4Smrg fi 7214b3e38ee4Smrg 7215b3e38ee4Smrg case " $deplibs" in 7216b3e38ee4Smrg *\ -l* | *\ -L*) 7217b3e38ee4Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218b3e38ee4Smrg esac 7219b3e38ee4Smrg 7220b3e38ee4Smrg test -n "$rpath" && \ 7221b3e38ee4Smrg func_warning "\`-rpath' is ignored for archives" 7222b3e38ee4Smrg 7223b3e38ee4Smrg test -n "$xrpath" && \ 7224b3e38ee4Smrg func_warning "\`-R' is ignored for archives" 7225b3e38ee4Smrg 7226b3e38ee4Smrg test -n "$vinfo" && \ 7227b3e38ee4Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 7228b3e38ee4Smrg 7229b3e38ee4Smrg test -n "$release" && \ 7230b3e38ee4Smrg func_warning "\`-release' is ignored for archives" 7231b3e38ee4Smrg 7232b3e38ee4Smrg test -n "$export_symbols$export_symbols_regex" && \ 7233b3e38ee4Smrg func_warning "\`-export-symbols' is ignored for archives" 7234b3e38ee4Smrg 7235b3e38ee4Smrg # Now set the variables for building old libraries. 7236b3e38ee4Smrg build_libtool_libs=no 7237b3e38ee4Smrg oldlibs="$output" 7238a73423d7Smrg func_append objs "$old_deplibs" 7239b3e38ee4Smrg ;; 7240b3e38ee4Smrg 7241b3e38ee4Smrg lib) 7242b3e38ee4Smrg # Make sure we only generate libraries of the form `libNAME.la'. 7243b3e38ee4Smrg case $outputname in 7244b3e38ee4Smrg lib*) 7245b3e38ee4Smrg func_stripname 'lib' '.la' "$outputname" 7246b3e38ee4Smrg name=$func_stripname_result 7247b3e38ee4Smrg eval shared_ext=\"$shrext_cmds\" 7248b3e38ee4Smrg eval libname=\"$libname_spec\" 7249b3e38ee4Smrg ;; 7250b3e38ee4Smrg *) 7251b3e38ee4Smrg test "$module" = no && \ 7252b3e38ee4Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253b3e38ee4Smrg 7254b3e38ee4Smrg if test "$need_lib_prefix" != no; then 7255b3e38ee4Smrg # Add the "lib" prefix for modules if required 7256b3e38ee4Smrg func_stripname '' '.la' "$outputname" 7257b3e38ee4Smrg name=$func_stripname_result 7258b3e38ee4Smrg eval shared_ext=\"$shrext_cmds\" 7259b3e38ee4Smrg eval libname=\"$libname_spec\" 7260b3e38ee4Smrg else 7261b3e38ee4Smrg func_stripname '' '.la' "$outputname" 7262b3e38ee4Smrg libname=$func_stripname_result 7263b3e38ee4Smrg fi 7264b3e38ee4Smrg ;; 7265b3e38ee4Smrg esac 7266b3e38ee4Smrg 7267b3e38ee4Smrg if test -n "$objs"; then 7268b3e38ee4Smrg if test "$deplibs_check_method" != pass_all; then 7269b3e38ee4Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270b3e38ee4Smrg else 7271a73423d7Smrg echo 7272b3e38ee4Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273b3e38ee4Smrg $ECHO "*** objects $objs is not portable!" 7274a73423d7Smrg func_append libobjs " $objs" 7275b3e38ee4Smrg fi 7276b3e38ee4Smrg fi 7277b3e38ee4Smrg 7278b3e38ee4Smrg test "$dlself" != no && \ 7279b3e38ee4Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7280b3e38ee4Smrg 7281b3e38ee4Smrg set dummy $rpath 7282b3e38ee4Smrg shift 7283b3e38ee4Smrg test "$#" -gt 1 && \ 7284b3e38ee4Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7285b3e38ee4Smrg 7286b3e38ee4Smrg install_libdir="$1" 7287b3e38ee4Smrg 7288b3e38ee4Smrg oldlibs= 7289b3e38ee4Smrg if test -z "$rpath"; then 7290b3e38ee4Smrg if test "$build_libtool_libs" = yes; then 7291b3e38ee4Smrg # Building a libtool convenience library. 7292b3e38ee4Smrg # Some compilers have problems with a `.al' extension so 7293b3e38ee4Smrg # convenience libraries should have the same extension an 7294b3e38ee4Smrg # archive normally would. 7295b3e38ee4Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296b3e38ee4Smrg build_libtool_libs=convenience 7297b3e38ee4Smrg build_old_libs=yes 7298b3e38ee4Smrg fi 7299b3e38ee4Smrg 7300b3e38ee4Smrg test -n "$vinfo" && \ 7301b3e38ee4Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302b3e38ee4Smrg 7303b3e38ee4Smrg test -n "$release" && \ 7304b3e38ee4Smrg func_warning "\`-release' is ignored for convenience libraries" 7305b3e38ee4Smrg else 7306b3e38ee4Smrg 7307b3e38ee4Smrg # Parse the version information argument. 7308b3e38ee4Smrg save_ifs="$IFS"; IFS=':' 7309b3e38ee4Smrg set dummy $vinfo 0 0 0 7310b3e38ee4Smrg shift 7311b3e38ee4Smrg IFS="$save_ifs" 7312b3e38ee4Smrg 7313b3e38ee4Smrg test -n "$7" && \ 7314b3e38ee4Smrg func_fatal_help "too many parameters to \`-version-info'" 7315b3e38ee4Smrg 7316b3e38ee4Smrg # convert absolute version numbers to libtool ages 7317b3e38ee4Smrg # this retains compatibility with .la files and attempts 7318b3e38ee4Smrg # to make the code below a bit more comprehensible 7319b3e38ee4Smrg 7320b3e38ee4Smrg case $vinfo_number in 7321b3e38ee4Smrg yes) 7322b3e38ee4Smrg number_major="$1" 7323b3e38ee4Smrg number_minor="$2" 7324b3e38ee4Smrg number_revision="$3" 7325b3e38ee4Smrg # 7326b3e38ee4Smrg # There are really only two kinds -- those that 7327b3e38ee4Smrg # use the current revision as the major version 7328b3e38ee4Smrg # and those that subtract age and use age as 7329b3e38ee4Smrg # a minor version. But, then there is irix 7330b3e38ee4Smrg # which has an extra 1 added just for fun 7331b3e38ee4Smrg # 7332b3e38ee4Smrg case $version_type in 7333a73423d7Smrg # correct linux to gnu/linux during the next big refactor 7334b3e38ee4Smrg darwin|linux|osf|windows|none) 7335b3e38ee4Smrg func_arith $number_major + $number_minor 7336b3e38ee4Smrg current=$func_arith_result 7337b3e38ee4Smrg age="$number_minor" 7338b3e38ee4Smrg revision="$number_revision" 7339b3e38ee4Smrg ;; 7340a73423d7Smrg freebsd-aout|freebsd-elf|qnx|sunos) 7341b3e38ee4Smrg current="$number_major" 7342b3e38ee4Smrg revision="$number_minor" 7343b3e38ee4Smrg age="0" 7344b3e38ee4Smrg ;; 7345b3e38ee4Smrg irix|nonstopux) 7346b3e38ee4Smrg func_arith $number_major + $number_minor 7347b3e38ee4Smrg current=$func_arith_result 7348b3e38ee4Smrg age="$number_minor" 7349b3e38ee4Smrg revision="$number_minor" 7350b3e38ee4Smrg lt_irix_increment=no 7351b3e38ee4Smrg ;; 7352b3e38ee4Smrg esac 7353b3e38ee4Smrg ;; 7354b3e38ee4Smrg no) 7355b3e38ee4Smrg current="$1" 7356b3e38ee4Smrg revision="$2" 7357b3e38ee4Smrg age="$3" 7358b3e38ee4Smrg ;; 7359b3e38ee4Smrg esac 7360b3e38ee4Smrg 7361b3e38ee4Smrg # Check that each of the things are valid numbers. 7362b3e38ee4Smrg case $current in 7363b3e38ee4Smrg 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]) ;; 7364b3e38ee4Smrg *) 7365b3e38ee4Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 7366b3e38ee4Smrg func_fatal_error "\`$vinfo' is not valid version information" 7367b3e38ee4Smrg ;; 7368b3e38ee4Smrg esac 7369b3e38ee4Smrg 7370b3e38ee4Smrg case $revision in 7371b3e38ee4Smrg 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]) ;; 7372b3e38ee4Smrg *) 7373b3e38ee4Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 7374b3e38ee4Smrg func_fatal_error "\`$vinfo' is not valid version information" 7375b3e38ee4Smrg ;; 7376b3e38ee4Smrg esac 7377b3e38ee4Smrg 7378b3e38ee4Smrg case $age in 7379b3e38ee4Smrg 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]) ;; 7380b3e38ee4Smrg *) 7381b3e38ee4Smrg func_error "AGE \`$age' must be a nonnegative integer" 7382b3e38ee4Smrg func_fatal_error "\`$vinfo' is not valid version information" 7383b3e38ee4Smrg ;; 7384b3e38ee4Smrg esac 7385b3e38ee4Smrg 7386b3e38ee4Smrg if test "$age" -gt "$current"; then 7387b3e38ee4Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388b3e38ee4Smrg func_fatal_error "\`$vinfo' is not valid version information" 7389b3e38ee4Smrg fi 7390b3e38ee4Smrg 7391b3e38ee4Smrg # Calculate the version variables. 7392b3e38ee4Smrg major= 7393b3e38ee4Smrg versuffix= 7394b3e38ee4Smrg verstring= 7395b3e38ee4Smrg case $version_type in 7396b3e38ee4Smrg none) ;; 7397b3e38ee4Smrg 7398b3e38ee4Smrg darwin) 7399b3e38ee4Smrg # Like Linux, but with the current version available in 7400b3e38ee4Smrg # verstring for coding it into the library header 7401b3e38ee4Smrg func_arith $current - $age 7402b3e38ee4Smrg major=.$func_arith_result 7403b3e38ee4Smrg versuffix="$major.$age.$revision" 7404b3e38ee4Smrg # Darwin ld doesn't like 0 for these options... 7405b3e38ee4Smrg func_arith $current + 1 7406b3e38ee4Smrg minor_current=$func_arith_result 7407b3e38ee4Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408b3e38ee4Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409b3e38ee4Smrg ;; 7410b3e38ee4Smrg 7411b3e38ee4Smrg freebsd-aout) 7412b3e38ee4Smrg major=".$current" 7413b3e38ee4Smrg versuffix=".$current.$revision"; 7414b3e38ee4Smrg ;; 7415b3e38ee4Smrg 7416b3e38ee4Smrg freebsd-elf) 7417b3e38ee4Smrg major=".$current" 7418b3e38ee4Smrg versuffix=".$current" 7419b3e38ee4Smrg ;; 7420b3e38ee4Smrg 7421b3e38ee4Smrg irix | nonstopux) 7422b3e38ee4Smrg if test "X$lt_irix_increment" = "Xno"; then 7423b3e38ee4Smrg func_arith $current - $age 7424b3e38ee4Smrg else 7425b3e38ee4Smrg func_arith $current - $age + 1 7426b3e38ee4Smrg fi 7427b3e38ee4Smrg major=$func_arith_result 7428b3e38ee4Smrg 7429b3e38ee4Smrg case $version_type in 7430b3e38ee4Smrg nonstopux) verstring_prefix=nonstopux ;; 7431b3e38ee4Smrg *) verstring_prefix=sgi ;; 7432b3e38ee4Smrg esac 7433b3e38ee4Smrg verstring="$verstring_prefix$major.$revision" 7434b3e38ee4Smrg 7435b3e38ee4Smrg # Add in all the interfaces that we are compatible with. 7436b3e38ee4Smrg loop=$revision 7437b3e38ee4Smrg while test "$loop" -ne 0; do 7438b3e38ee4Smrg func_arith $revision - $loop 7439b3e38ee4Smrg iface=$func_arith_result 7440b3e38ee4Smrg func_arith $loop - 1 7441b3e38ee4Smrg loop=$func_arith_result 7442b3e38ee4Smrg verstring="$verstring_prefix$major.$iface:$verstring" 7443b3e38ee4Smrg done 7444b3e38ee4Smrg 7445b3e38ee4Smrg # Before this point, $major must not contain `.'. 7446b3e38ee4Smrg major=.$major 7447b3e38ee4Smrg versuffix="$major.$revision" 7448b3e38ee4Smrg ;; 7449b3e38ee4Smrg 7450a73423d7Smrg linux) # correct to gnu/linux during the next big refactor 7451b3e38ee4Smrg func_arith $current - $age 7452b3e38ee4Smrg major=.$func_arith_result 7453b3e38ee4Smrg versuffix="$major.$age.$revision" 7454b3e38ee4Smrg ;; 7455b3e38ee4Smrg 7456b3e38ee4Smrg osf) 7457b3e38ee4Smrg func_arith $current - $age 7458b3e38ee4Smrg major=.$func_arith_result 7459b3e38ee4Smrg versuffix=".$current.$age.$revision" 7460b3e38ee4Smrg verstring="$current.$age.$revision" 7461b3e38ee4Smrg 7462b3e38ee4Smrg # Add in all the interfaces that we are compatible with. 7463b3e38ee4Smrg loop=$age 7464b3e38ee4Smrg while test "$loop" -ne 0; do 7465b3e38ee4Smrg func_arith $current - $loop 7466b3e38ee4Smrg iface=$func_arith_result 7467b3e38ee4Smrg func_arith $loop - 1 7468b3e38ee4Smrg loop=$func_arith_result 7469b3e38ee4Smrg verstring="$verstring:${iface}.0" 7470b3e38ee4Smrg done 7471b3e38ee4Smrg 7472b3e38ee4Smrg # Make executables depend on our current version. 7473a73423d7Smrg func_append verstring ":${current}.0" 7474b3e38ee4Smrg ;; 7475b3e38ee4Smrg 7476b3e38ee4Smrg qnx) 7477b3e38ee4Smrg major=".$current" 7478b3e38ee4Smrg versuffix=".$current" 7479b3e38ee4Smrg ;; 7480b3e38ee4Smrg 7481b3e38ee4Smrg sunos) 7482b3e38ee4Smrg major=".$current" 7483b3e38ee4Smrg versuffix=".$current.$revision" 7484b3e38ee4Smrg ;; 7485b3e38ee4Smrg 7486b3e38ee4Smrg windows) 7487b3e38ee4Smrg # Use '-' rather than '.', since we only want one 7488b3e38ee4Smrg # extension on DOS 8.3 filesystems. 7489b3e38ee4Smrg func_arith $current - $age 7490b3e38ee4Smrg major=$func_arith_result 7491b3e38ee4Smrg versuffix="-$major" 7492b3e38ee4Smrg ;; 7493b3e38ee4Smrg 7494b3e38ee4Smrg *) 7495b3e38ee4Smrg func_fatal_configuration "unknown library version type \`$version_type'" 7496b3e38ee4Smrg ;; 7497b3e38ee4Smrg esac 7498b3e38ee4Smrg 7499b3e38ee4Smrg # Clear the version info if we defaulted, and they specified a release. 7500b3e38ee4Smrg if test -z "$vinfo" && test -n "$release"; then 7501b3e38ee4Smrg major= 7502b3e38ee4Smrg case $version_type in 7503b3e38ee4Smrg darwin) 7504b3e38ee4Smrg # we can't check for "0.0" in archive_cmds due to quoting 7505b3e38ee4Smrg # problems, so we reset it completely 7506b3e38ee4Smrg verstring= 7507b3e38ee4Smrg ;; 7508b3e38ee4Smrg *) 7509b3e38ee4Smrg verstring="0.0" 7510b3e38ee4Smrg ;; 7511b3e38ee4Smrg esac 7512b3e38ee4Smrg if test "$need_version" = no; then 7513b3e38ee4Smrg versuffix= 7514b3e38ee4Smrg else 7515b3e38ee4Smrg versuffix=".0.0" 7516b3e38ee4Smrg fi 7517b3e38ee4Smrg fi 7518b3e38ee4Smrg 7519b3e38ee4Smrg # Remove version info from name if versioning should be avoided 7520b3e38ee4Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 7521b3e38ee4Smrg major= 7522b3e38ee4Smrg versuffix= 7523b3e38ee4Smrg verstring="" 7524b3e38ee4Smrg fi 7525b3e38ee4Smrg 7526b3e38ee4Smrg # Check to see if the archive will have undefined symbols. 7527b3e38ee4Smrg if test "$allow_undefined" = yes; then 7528b3e38ee4Smrg if test "$allow_undefined_flag" = unsupported; then 7529b3e38ee4Smrg func_warning "undefined symbols not allowed in $host shared libraries" 7530b3e38ee4Smrg build_libtool_libs=no 7531b3e38ee4Smrg build_old_libs=yes 7532b3e38ee4Smrg fi 7533b3e38ee4Smrg else 7534b3e38ee4Smrg # Don't allow undefined symbols. 7535b3e38ee4Smrg allow_undefined_flag="$no_undefined_flag" 7536b3e38ee4Smrg fi 7537b3e38ee4Smrg 7538b3e38ee4Smrg fi 7539b3e38ee4Smrg 7540b3e38ee4Smrg func_generate_dlsyms "$libname" "$libname" "yes" 7541a73423d7Smrg func_append libobjs " $symfileobj" 7542b3e38ee4Smrg test "X$libobjs" = "X " && libobjs= 7543b3e38ee4Smrg 7544a73423d7Smrg if test "$opt_mode" != relink; then 7545b3e38ee4Smrg # Remove our outputs, but don't remove object files since they 7546b3e38ee4Smrg # may have been created when compiling PIC objects. 7547b3e38ee4Smrg removelist= 7548b3e38ee4Smrg tempremovelist=`$ECHO "$output_objdir/*"` 7549b3e38ee4Smrg for p in $tempremovelist; do 7550b3e38ee4Smrg case $p in 7551b3e38ee4Smrg *.$objext | *.gcno) 7552b3e38ee4Smrg ;; 7553b3e38ee4Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554b3e38ee4Smrg if test "X$precious_files_regex" != "X"; then 7555b3e38ee4Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556b3e38ee4Smrg then 7557b3e38ee4Smrg continue 7558b3e38ee4Smrg fi 7559b3e38ee4Smrg fi 7560a73423d7Smrg func_append removelist " $p" 7561b3e38ee4Smrg ;; 7562b3e38ee4Smrg *) ;; 7563b3e38ee4Smrg esac 7564b3e38ee4Smrg done 7565b3e38ee4Smrg test -n "$removelist" && \ 7566b3e38ee4Smrg func_show_eval "${RM}r \$removelist" 7567b3e38ee4Smrg fi 7568b3e38ee4Smrg 7569b3e38ee4Smrg # Now set the variables for building old libraries. 7570b3e38ee4Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7571a73423d7Smrg func_append oldlibs " $output_objdir/$libname.$libext" 7572b3e38ee4Smrg 7573b3e38ee4Smrg # Transform .lo files to .o files. 7574a73423d7Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575b3e38ee4Smrg fi 7576b3e38ee4Smrg 7577b3e38ee4Smrg # Eliminate all temporary directories. 7578b3e38ee4Smrg #for path in $notinst_path; do 7579a73423d7Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7580a73423d7Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7581a73423d7Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582b3e38ee4Smrg #done 7583b3e38ee4Smrg 7584b3e38ee4Smrg if test -n "$xrpath"; then 7585b3e38ee4Smrg # If the user specified any rpath flags, then add them. 7586b3e38ee4Smrg temp_xrpath= 7587b3e38ee4Smrg for libdir in $xrpath; do 7588a73423d7Smrg func_replace_sysroot "$libdir" 7589a73423d7Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7590b3e38ee4Smrg case "$finalize_rpath " in 7591b3e38ee4Smrg *" $libdir "*) ;; 7592a73423d7Smrg *) func_append finalize_rpath " $libdir" ;; 7593b3e38ee4Smrg esac 7594b3e38ee4Smrg done 7595b3e38ee4Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596b3e38ee4Smrg dependency_libs="$temp_xrpath $dependency_libs" 7597b3e38ee4Smrg fi 7598b3e38ee4Smrg fi 7599b3e38ee4Smrg 7600b3e38ee4Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 7601b3e38ee4Smrg old_dlfiles="$dlfiles" 7602b3e38ee4Smrg dlfiles= 7603b3e38ee4Smrg for lib in $old_dlfiles; do 7604b3e38ee4Smrg case " $dlprefiles $dlfiles " in 7605b3e38ee4Smrg *" $lib "*) ;; 7606a73423d7Smrg *) func_append dlfiles " $lib" ;; 7607b3e38ee4Smrg esac 7608b3e38ee4Smrg done 7609b3e38ee4Smrg 7610b3e38ee4Smrg # Make sure dlprefiles contains only unique files 7611b3e38ee4Smrg old_dlprefiles="$dlprefiles" 7612b3e38ee4Smrg dlprefiles= 7613b3e38ee4Smrg for lib in $old_dlprefiles; do 7614b3e38ee4Smrg case "$dlprefiles " in 7615b3e38ee4Smrg *" $lib "*) ;; 7616a73423d7Smrg *) func_append dlprefiles " $lib" ;; 7617b3e38ee4Smrg esac 7618b3e38ee4Smrg done 7619b3e38ee4Smrg 7620b3e38ee4Smrg if test "$build_libtool_libs" = yes; then 7621b3e38ee4Smrg if test -n "$rpath"; then 7622b3e38ee4Smrg case $host in 7623a73423d7Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624b3e38ee4Smrg # these systems don't actually have a c library (as such)! 7625b3e38ee4Smrg ;; 7626b3e38ee4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7627b3e38ee4Smrg # Rhapsody C library is in the System framework 7628a73423d7Smrg func_append deplibs " System.ltframework" 7629b3e38ee4Smrg ;; 7630b3e38ee4Smrg *-*-netbsd*) 7631b3e38ee4Smrg # Don't link with libc until the a.out ld.so is fixed. 7632b3e38ee4Smrg ;; 7633b3e38ee4Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634b3e38ee4Smrg # Do not include libc due to us having libc/libc_r. 7635b3e38ee4Smrg ;; 7636b3e38ee4Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7637b3e38ee4Smrg # Causes problems with __ctype 7638b3e38ee4Smrg ;; 7639b3e38ee4Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640b3e38ee4Smrg # Compiler inserts libc in the correct place for threads to work 7641b3e38ee4Smrg ;; 7642b3e38ee4Smrg *) 7643b3e38ee4Smrg # Add libc to deplibs on all other systems if necessary. 7644b3e38ee4Smrg if test "$build_libtool_need_lc" = "yes"; then 7645a73423d7Smrg func_append deplibs " -lc" 7646b3e38ee4Smrg fi 7647b3e38ee4Smrg ;; 7648b3e38ee4Smrg esac 7649b3e38ee4Smrg fi 7650b3e38ee4Smrg 7651b3e38ee4Smrg # Transform deplibs into only deplibs that can be linked in shared. 7652b3e38ee4Smrg name_save=$name 7653b3e38ee4Smrg libname_save=$libname 7654b3e38ee4Smrg release_save=$release 7655b3e38ee4Smrg versuffix_save=$versuffix 7656b3e38ee4Smrg major_save=$major 7657b3e38ee4Smrg # I'm not sure if I'm treating the release correctly. I think 7658b3e38ee4Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 7659b3e38ee4Smrg # add it in twice. Is that correct? 7660b3e38ee4Smrg release="" 7661b3e38ee4Smrg versuffix="" 7662b3e38ee4Smrg major="" 7663b3e38ee4Smrg newdeplibs= 7664b3e38ee4Smrg droppeddeps=no 7665b3e38ee4Smrg case $deplibs_check_method in 7666b3e38ee4Smrg pass_all) 7667b3e38ee4Smrg # Don't check for shared/static. Everything works. 7668b3e38ee4Smrg # This might be a little naive. We might want to check 7669b3e38ee4Smrg # whether the library exists or not. But this is on 7670b3e38ee4Smrg # osf3 & osf4 and I'm not really sure... Just 7671b3e38ee4Smrg # implementing what was already the behavior. 7672b3e38ee4Smrg newdeplibs=$deplibs 7673b3e38ee4Smrg ;; 7674b3e38ee4Smrg test_compile) 7675b3e38ee4Smrg # This code stresses the "libraries are programs" paradigm to its 7676b3e38ee4Smrg # limits. Maybe even breaks it. We compile a program, linking it 7677b3e38ee4Smrg # against the deplibs as a proxy for the library. Then we can check 7678b3e38ee4Smrg # whether they linked in statically or dynamically with ldd. 7679b3e38ee4Smrg $opt_dry_run || $RM conftest.c 7680b3e38ee4Smrg cat > conftest.c <<EOF 7681b3e38ee4Smrg int main() { return 0; } 7682b3e38ee4SmrgEOF 7683b3e38ee4Smrg $opt_dry_run || $RM conftest 7684b3e38ee4Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685b3e38ee4Smrg ldd_output=`ldd conftest` 7686b3e38ee4Smrg for i in $deplibs; do 7687b3e38ee4Smrg case $i in 7688b3e38ee4Smrg -l*) 7689b3e38ee4Smrg func_stripname -l '' "$i" 7690b3e38ee4Smrg name=$func_stripname_result 7691b3e38ee4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692b3e38ee4Smrg case " $predeps $postdeps " in 7693b3e38ee4Smrg *" $i "*) 7694a73423d7Smrg func_append newdeplibs " $i" 7695b3e38ee4Smrg i="" 7696b3e38ee4Smrg ;; 7697b3e38ee4Smrg esac 7698b3e38ee4Smrg fi 7699b3e38ee4Smrg if test -n "$i" ; then 7700b3e38ee4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7701b3e38ee4Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702b3e38ee4Smrg set dummy $deplib_matches; shift 7703b3e38ee4Smrg deplib_match=$1 7704b3e38ee4Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7705a73423d7Smrg func_append newdeplibs " $i" 7706b3e38ee4Smrg else 7707b3e38ee4Smrg droppeddeps=yes 7708a73423d7Smrg echo 7709b3e38ee4Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7710a73423d7Smrg echo "*** I have the capability to make that library automatically link in when" 7711a73423d7Smrg echo "*** you link to this library. But I can only do this if you have a" 7712a73423d7Smrg echo "*** shared version of the library, which I believe you do not have" 7713a73423d7Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 7714a73423d7Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715b3e38ee4Smrg fi 7716b3e38ee4Smrg fi 7717b3e38ee4Smrg ;; 7718b3e38ee4Smrg *) 7719a73423d7Smrg func_append newdeplibs " $i" 7720b3e38ee4Smrg ;; 7721b3e38ee4Smrg esac 7722b3e38ee4Smrg done 7723b3e38ee4Smrg else 7724b3e38ee4Smrg # Error occurred in the first compile. Let's try to salvage 7725b3e38ee4Smrg # the situation: Compile a separate program for each library. 7726b3e38ee4Smrg for i in $deplibs; do 7727b3e38ee4Smrg case $i in 7728b3e38ee4Smrg -l*) 7729b3e38ee4Smrg func_stripname -l '' "$i" 7730b3e38ee4Smrg name=$func_stripname_result 7731b3e38ee4Smrg $opt_dry_run || $RM conftest 7732b3e38ee4Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733b3e38ee4Smrg ldd_output=`ldd conftest` 7734b3e38ee4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735b3e38ee4Smrg case " $predeps $postdeps " in 7736b3e38ee4Smrg *" $i "*) 7737a73423d7Smrg func_append newdeplibs " $i" 7738b3e38ee4Smrg i="" 7739b3e38ee4Smrg ;; 7740b3e38ee4Smrg esac 7741b3e38ee4Smrg fi 7742b3e38ee4Smrg if test -n "$i" ; then 7743b3e38ee4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7744b3e38ee4Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745b3e38ee4Smrg set dummy $deplib_matches; shift 7746b3e38ee4Smrg deplib_match=$1 7747b3e38ee4Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7748a73423d7Smrg func_append newdeplibs " $i" 7749b3e38ee4Smrg else 7750b3e38ee4Smrg droppeddeps=yes 7751a73423d7Smrg echo 7752b3e38ee4Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7753a73423d7Smrg echo "*** I have the capability to make that library automatically link in when" 7754a73423d7Smrg echo "*** you link to this library. But I can only do this if you have a" 7755a73423d7Smrg echo "*** shared version of the library, which you do not appear to have" 7756a73423d7Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 7757a73423d7Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758b3e38ee4Smrg fi 7759b3e38ee4Smrg fi 7760b3e38ee4Smrg else 7761b3e38ee4Smrg droppeddeps=yes 7762a73423d7Smrg echo 7763b3e38ee4Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7764a73423d7Smrg echo "*** make it link in! You will probably need to install it or some" 7765a73423d7Smrg echo "*** library that it depends on before this library will be fully" 7766a73423d7Smrg echo "*** functional. Installing it before continuing would be even better." 7767b3e38ee4Smrg fi 7768b3e38ee4Smrg ;; 7769b3e38ee4Smrg *) 7770a73423d7Smrg func_append newdeplibs " $i" 7771b3e38ee4Smrg ;; 7772b3e38ee4Smrg esac 7773b3e38ee4Smrg done 7774b3e38ee4Smrg fi 7775b3e38ee4Smrg ;; 7776b3e38ee4Smrg file_magic*) 7777b3e38ee4Smrg set dummy $deplibs_check_method; shift 7778b3e38ee4Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779b3e38ee4Smrg for a_deplib in $deplibs; do 7780b3e38ee4Smrg case $a_deplib in 7781b3e38ee4Smrg -l*) 7782b3e38ee4Smrg func_stripname -l '' "$a_deplib" 7783b3e38ee4Smrg name=$func_stripname_result 7784b3e38ee4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785b3e38ee4Smrg case " $predeps $postdeps " in 7786b3e38ee4Smrg *" $a_deplib "*) 7787a73423d7Smrg func_append newdeplibs " $a_deplib" 7788b3e38ee4Smrg a_deplib="" 7789b3e38ee4Smrg ;; 7790b3e38ee4Smrg esac 7791b3e38ee4Smrg fi 7792b3e38ee4Smrg if test -n "$a_deplib" ; then 7793b3e38ee4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7794a73423d7Smrg if test -n "$file_magic_glob"; then 7795a73423d7Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7796a73423d7Smrg else 7797a73423d7Smrg libnameglob=$libname 7798a73423d7Smrg fi 7799a73423d7Smrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800b3e38ee4Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7801a73423d7Smrg if test "$want_nocaseglob" = yes; then 7802a73423d7Smrg shopt -s nocaseglob 7803a73423d7Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7804a73423d7Smrg $nocaseglob 7805a73423d7Smrg else 7806a73423d7Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7807a73423d7Smrg fi 7808b3e38ee4Smrg for potent_lib in $potential_libs; do 7809b3e38ee4Smrg # Follow soft links. 7810b3e38ee4Smrg if ls -lLd "$potent_lib" 2>/dev/null | 7811b3e38ee4Smrg $GREP " -> " >/dev/null; then 7812b3e38ee4Smrg continue 7813b3e38ee4Smrg fi 7814b3e38ee4Smrg # The statement above tries to avoid entering an 7815b3e38ee4Smrg # endless loop below, in case of cyclic links. 7816b3e38ee4Smrg # We might still enter an endless loop, since a link 7817b3e38ee4Smrg # loop can be closed while we follow links, 7818b3e38ee4Smrg # but so what? 7819b3e38ee4Smrg potlib="$potent_lib" 7820b3e38ee4Smrg while test -h "$potlib" 2>/dev/null; do 7821b3e38ee4Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822b3e38ee4Smrg case $potliblink in 7823b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 7824a73423d7Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825b3e38ee4Smrg esac 7826b3e38ee4Smrg done 7827b3e38ee4Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828b3e38ee4Smrg $SED -e 10q | 7829b3e38ee4Smrg $EGREP "$file_magic_regex" > /dev/null; then 7830a73423d7Smrg func_append newdeplibs " $a_deplib" 7831b3e38ee4Smrg a_deplib="" 7832b3e38ee4Smrg break 2 7833b3e38ee4Smrg fi 7834b3e38ee4Smrg done 7835b3e38ee4Smrg done 7836b3e38ee4Smrg fi 7837b3e38ee4Smrg if test -n "$a_deplib" ; then 7838b3e38ee4Smrg droppeddeps=yes 7839a73423d7Smrg echo 7840b3e38ee4Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7841a73423d7Smrg echo "*** I have the capability to make that library automatically link in when" 7842a73423d7Smrg echo "*** you link to this library. But I can only do this if you have a" 7843a73423d7Smrg echo "*** shared version of the library, which you do not appear to have" 7844a73423d7Smrg echo "*** because I did check the linker path looking for a file starting" 7845b3e38ee4Smrg if test -z "$potlib" ; then 7846b3e38ee4Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847b3e38ee4Smrg else 7848b3e38ee4Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7849b3e38ee4Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 7850b3e38ee4Smrg fi 7851b3e38ee4Smrg fi 7852b3e38ee4Smrg ;; 7853b3e38ee4Smrg *) 7854b3e38ee4Smrg # Add a -L argument. 7855a73423d7Smrg func_append newdeplibs " $a_deplib" 7856b3e38ee4Smrg ;; 7857b3e38ee4Smrg esac 7858b3e38ee4Smrg done # Gone through all deplibs. 7859b3e38ee4Smrg ;; 7860b3e38ee4Smrg match_pattern*) 7861b3e38ee4Smrg set dummy $deplibs_check_method; shift 7862b3e38ee4Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863b3e38ee4Smrg for a_deplib in $deplibs; do 7864b3e38ee4Smrg case $a_deplib in 7865b3e38ee4Smrg -l*) 7866b3e38ee4Smrg func_stripname -l '' "$a_deplib" 7867b3e38ee4Smrg name=$func_stripname_result 7868b3e38ee4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869b3e38ee4Smrg case " $predeps $postdeps " in 7870b3e38ee4Smrg *" $a_deplib "*) 7871a73423d7Smrg func_append newdeplibs " $a_deplib" 7872b3e38ee4Smrg a_deplib="" 7873b3e38ee4Smrg ;; 7874b3e38ee4Smrg esac 7875b3e38ee4Smrg fi 7876b3e38ee4Smrg if test -n "$a_deplib" ; then 7877b3e38ee4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7878b3e38ee4Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879b3e38ee4Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880b3e38ee4Smrg for potent_lib in $potential_libs; do 7881b3e38ee4Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 7882a73423d7Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883b3e38ee4Smrg $EGREP "$match_pattern_regex" > /dev/null; then 7884a73423d7Smrg func_append newdeplibs " $a_deplib" 7885b3e38ee4Smrg a_deplib="" 7886b3e38ee4Smrg break 2 7887b3e38ee4Smrg fi 7888b3e38ee4Smrg done 7889b3e38ee4Smrg done 7890b3e38ee4Smrg fi 7891b3e38ee4Smrg if test -n "$a_deplib" ; then 7892b3e38ee4Smrg droppeddeps=yes 7893a73423d7Smrg echo 7894b3e38ee4Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7895a73423d7Smrg echo "*** I have the capability to make that library automatically link in when" 7896a73423d7Smrg echo "*** you link to this library. But I can only do this if you have a" 7897a73423d7Smrg echo "*** shared version of the library, which you do not appear to have" 7898a73423d7Smrg echo "*** because I did check the linker path looking for a file starting" 7899b3e38ee4Smrg if test -z "$potlib" ; then 7900b3e38ee4Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901b3e38ee4Smrg else 7902b3e38ee4Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7903b3e38ee4Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904b3e38ee4Smrg fi 7905b3e38ee4Smrg fi 7906b3e38ee4Smrg ;; 7907b3e38ee4Smrg *) 7908b3e38ee4Smrg # Add a -L argument. 7909a73423d7Smrg func_append newdeplibs " $a_deplib" 7910b3e38ee4Smrg ;; 7911b3e38ee4Smrg esac 7912b3e38ee4Smrg done # Gone through all deplibs. 7913b3e38ee4Smrg ;; 7914b3e38ee4Smrg none | unknown | *) 7915b3e38ee4Smrg newdeplibs="" 7916a73423d7Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917b3e38ee4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918b3e38ee4Smrg for i in $predeps $postdeps ; do 7919b3e38ee4Smrg # can't use Xsed below, because $i might contain '/' 7920a73423d7Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921b3e38ee4Smrg done 7922b3e38ee4Smrg fi 7923a73423d7Smrg case $tmp_deplibs in 7924a73423d7Smrg *[!\ \ ]*) 7925a73423d7Smrg echo 7926b3e38ee4Smrg if test "X$deplibs_check_method" = "Xnone"; then 7927a73423d7Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7928b3e38ee4Smrg else 7929a73423d7Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 7930b3e38ee4Smrg fi 7931a73423d7Smrg echo "*** All declared inter-library dependencies are being dropped." 7932b3e38ee4Smrg droppeddeps=yes 7933a73423d7Smrg ;; 7934a73423d7Smrg esac 7935b3e38ee4Smrg ;; 7936b3e38ee4Smrg esac 7937b3e38ee4Smrg versuffix=$versuffix_save 7938b3e38ee4Smrg major=$major_save 7939b3e38ee4Smrg release=$release_save 7940b3e38ee4Smrg libname=$libname_save 7941b3e38ee4Smrg name=$name_save 7942b3e38ee4Smrg 7943b3e38ee4Smrg case $host in 7944b3e38ee4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7945b3e38ee4Smrg # On Rhapsody replace the C library with the System framework 7946a73423d7Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947b3e38ee4Smrg ;; 7948b3e38ee4Smrg esac 7949b3e38ee4Smrg 7950b3e38ee4Smrg if test "$droppeddeps" = yes; then 7951b3e38ee4Smrg if test "$module" = yes; then 7952a73423d7Smrg echo 7953a73423d7Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7954b3e38ee4Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7955a73423d7Smrg echo "*** a static module, that should work as long as the dlopening" 7956a73423d7Smrg echo "*** application is linked with the -dlopen flag." 7957b3e38ee4Smrg if test -z "$global_symbol_pipe"; then 7958a73423d7Smrg echo 7959a73423d7Smrg echo "*** However, this would only work if libtool was able to extract symbol" 7960a73423d7Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7961a73423d7Smrg echo "*** not find such a program. So, this module is probably useless." 7962a73423d7Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963b3e38ee4Smrg fi 7964b3e38ee4Smrg if test "$build_old_libs" = no; then 7965b3e38ee4Smrg oldlibs="$output_objdir/$libname.$libext" 7966b3e38ee4Smrg build_libtool_libs=module 7967b3e38ee4Smrg build_old_libs=yes 7968b3e38ee4Smrg else 7969b3e38ee4Smrg build_libtool_libs=no 7970b3e38ee4Smrg fi 7971b3e38ee4Smrg else 7972a73423d7Smrg echo "*** The inter-library dependencies that have been dropped here will be" 7973a73423d7Smrg echo "*** automatically added whenever a program is linked with this library" 7974a73423d7Smrg echo "*** or is declared to -dlopen it." 7975b3e38ee4Smrg 7976b3e38ee4Smrg if test "$allow_undefined" = no; then 7977a73423d7Smrg echo 7978a73423d7Smrg echo "*** Since this library must not contain undefined symbols," 7979a73423d7Smrg echo "*** because either the platform does not support them or" 7980a73423d7Smrg echo "*** it was explicitly requested with -no-undefined," 7981a73423d7Smrg echo "*** libtool will only create a static version of it." 7982b3e38ee4Smrg if test "$build_old_libs" = no; then 7983b3e38ee4Smrg oldlibs="$output_objdir/$libname.$libext" 7984b3e38ee4Smrg build_libtool_libs=module 7985b3e38ee4Smrg build_old_libs=yes 7986b3e38ee4Smrg else 7987b3e38ee4Smrg build_libtool_libs=no 7988b3e38ee4Smrg fi 7989b3e38ee4Smrg fi 7990b3e38ee4Smrg fi 7991b3e38ee4Smrg fi 7992b3e38ee4Smrg # Done checking deplibs! 7993b3e38ee4Smrg deplibs=$newdeplibs 7994b3e38ee4Smrg fi 7995b3e38ee4Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996b3e38ee4Smrg case $host in 7997b3e38ee4Smrg *-*-darwin*) 7998a73423d7Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7999a73423d7Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8000a73423d7Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001b3e38ee4Smrg ;; 8002b3e38ee4Smrg esac 8003b3e38ee4Smrg 8004b3e38ee4Smrg # move library search paths that coincide with paths to not yet 8005b3e38ee4Smrg # installed libraries to the beginning of the library search list 8006b3e38ee4Smrg new_libs= 8007b3e38ee4Smrg for path in $notinst_path; do 8008b3e38ee4Smrg case " $new_libs " in 8009b3e38ee4Smrg *" -L$path/$objdir "*) ;; 8010b3e38ee4Smrg *) 8011b3e38ee4Smrg case " $deplibs " in 8012b3e38ee4Smrg *" -L$path/$objdir "*) 8013a73423d7Smrg func_append new_libs " -L$path/$objdir" ;; 8014b3e38ee4Smrg esac 8015b3e38ee4Smrg ;; 8016b3e38ee4Smrg esac 8017b3e38ee4Smrg done 8018b3e38ee4Smrg for deplib in $deplibs; do 8019b3e38ee4Smrg case $deplib in 8020b3e38ee4Smrg -L*) 8021b3e38ee4Smrg case " $new_libs " in 8022b3e38ee4Smrg *" $deplib "*) ;; 8023a73423d7Smrg *) func_append new_libs " $deplib" ;; 8024b3e38ee4Smrg esac 8025b3e38ee4Smrg ;; 8026a73423d7Smrg *) func_append new_libs " $deplib" ;; 8027b3e38ee4Smrg esac 8028b3e38ee4Smrg done 8029b3e38ee4Smrg deplibs="$new_libs" 8030b3e38ee4Smrg 8031b3e38ee4Smrg # All the library-specific variables (install_libdir is set above). 8032b3e38ee4Smrg library_names= 8033b3e38ee4Smrg old_library= 8034b3e38ee4Smrg dlname= 8035b3e38ee4Smrg 8036b3e38ee4Smrg # Test again, we may have decided not to build it any more 8037b3e38ee4Smrg if test "$build_libtool_libs" = yes; then 8038a73423d7Smrg # Remove ${wl} instances when linking with ld. 8039a73423d7Smrg # FIXME: should test the right _cmds variable. 8040a73423d7Smrg case $archive_cmds in 8041a73423d7Smrg *\$LD\ *) wl= ;; 8042a73423d7Smrg esac 8043b3e38ee4Smrg if test "$hardcode_into_libs" = yes; then 8044b3e38ee4Smrg # Hardcode the library paths 8045b3e38ee4Smrg hardcode_libdirs= 8046b3e38ee4Smrg dep_rpath= 8047b3e38ee4Smrg rpath="$finalize_rpath" 8048a73423d7Smrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049b3e38ee4Smrg for libdir in $rpath; do 8050b3e38ee4Smrg if test -n "$hardcode_libdir_flag_spec"; then 8051b3e38ee4Smrg if test -n "$hardcode_libdir_separator"; then 8052a73423d7Smrg func_replace_sysroot "$libdir" 8053a73423d7Smrg libdir=$func_replace_sysroot_result 8054b3e38ee4Smrg if test -z "$hardcode_libdirs"; then 8055b3e38ee4Smrg hardcode_libdirs="$libdir" 8056b3e38ee4Smrg else 8057b3e38ee4Smrg # Just accumulate the unique libdirs. 8058b3e38ee4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059b3e38ee4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060b3e38ee4Smrg ;; 8061b3e38ee4Smrg *) 8062a73423d7Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063b3e38ee4Smrg ;; 8064b3e38ee4Smrg esac 8065b3e38ee4Smrg fi 8066b3e38ee4Smrg else 8067b3e38ee4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8068a73423d7Smrg func_append dep_rpath " $flag" 8069b3e38ee4Smrg fi 8070b3e38ee4Smrg elif test -n "$runpath_var"; then 8071b3e38ee4Smrg case "$perm_rpath " in 8072b3e38ee4Smrg *" $libdir "*) ;; 8073a73423d7Smrg *) func_append perm_rpath " $libdir" ;; 8074b3e38ee4Smrg esac 8075b3e38ee4Smrg fi 8076b3e38ee4Smrg done 8077b3e38ee4Smrg # Substitute the hardcoded libdirs into the rpath. 8078b3e38ee4Smrg if test -n "$hardcode_libdir_separator" && 8079b3e38ee4Smrg test -n "$hardcode_libdirs"; then 8080b3e38ee4Smrg libdir="$hardcode_libdirs" 8081a73423d7Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082b3e38ee4Smrg fi 8083b3e38ee4Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084b3e38ee4Smrg # We should set the runpath_var. 8085b3e38ee4Smrg rpath= 8086b3e38ee4Smrg for dir in $perm_rpath; do 8087a73423d7Smrg func_append rpath "$dir:" 8088b3e38ee4Smrg done 8089b3e38ee4Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090b3e38ee4Smrg fi 8091b3e38ee4Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092b3e38ee4Smrg fi 809350806d53Smrg 8094b3e38ee4Smrg shlibpath="$finalize_shlibpath" 8095a73423d7Smrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096b3e38ee4Smrg if test -n "$shlibpath"; then 8097b3e38ee4Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098b3e38ee4Smrg fi 809950806d53Smrg 8100b3e38ee4Smrg # Get the real and link names of the library. 8101b3e38ee4Smrg eval shared_ext=\"$shrext_cmds\" 8102b3e38ee4Smrg eval library_names=\"$library_names_spec\" 8103b3e38ee4Smrg set dummy $library_names 8104b3e38ee4Smrg shift 8105b3e38ee4Smrg realname="$1" 8106b3e38ee4Smrg shift 810750806d53Smrg 8108b3e38ee4Smrg if test -n "$soname_spec"; then 8109b3e38ee4Smrg eval soname=\"$soname_spec\" 8110b3e38ee4Smrg else 8111b3e38ee4Smrg soname="$realname" 8112b3e38ee4Smrg fi 8113b3e38ee4Smrg if test -z "$dlname"; then 8114b3e38ee4Smrg dlname=$soname 8115b3e38ee4Smrg fi 811650806d53Smrg 8117b3e38ee4Smrg lib="$output_objdir/$realname" 8118b3e38ee4Smrg linknames= 8119b3e38ee4Smrg for link 8120b3e38ee4Smrg do 8121a73423d7Smrg func_append linknames " $link" 8122b3e38ee4Smrg done 812350806d53Smrg 8124b3e38ee4Smrg # Use standard objects if they are pic 8125a73423d7Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126b3e38ee4Smrg test "X$libobjs" = "X " && libobjs= 812750806d53Smrg 8128b3e38ee4Smrg delfiles= 8129b3e38ee4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130b3e38ee4Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131b3e38ee4Smrg export_symbols="$output_objdir/$libname.uexp" 8132a73423d7Smrg func_append delfiles " $export_symbols" 8133b3e38ee4Smrg fi 813450806d53Smrg 8135b3e38ee4Smrg orig_export_symbols= 8136b3e38ee4Smrg case $host_os in 8137b3e38ee4Smrg cygwin* | mingw* | cegcc*) 8138b3e38ee4Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139b3e38ee4Smrg # exporting using user supplied symfile 8140b3e38ee4Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141b3e38ee4Smrg # and it's NOT already a .def file. Must figure out 8142b3e38ee4Smrg # which of the given symbols are data symbols and tag 8143b3e38ee4Smrg # them as such. So, trigger use of export_symbols_cmds. 8144b3e38ee4Smrg # export_symbols gets reassigned inside the "prepare 8145b3e38ee4Smrg # the list of exported symbols" if statement, so the 8146b3e38ee4Smrg # include_expsyms logic still works. 8147b3e38ee4Smrg orig_export_symbols="$export_symbols" 8148b3e38ee4Smrg export_symbols= 8149b3e38ee4Smrg always_export_symbols=yes 8150b3e38ee4Smrg fi 8151b3e38ee4Smrg fi 8152b3e38ee4Smrg ;; 8153b3e38ee4Smrg esac 815450806d53Smrg 8155b3e38ee4Smrg # Prepare the list of exported symbols 8156b3e38ee4Smrg if test -z "$export_symbols"; then 8157b3e38ee4Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158b3e38ee4Smrg func_verbose "generating symbol list for \`$libname.la'" 8159b3e38ee4Smrg export_symbols="$output_objdir/$libname.exp" 8160b3e38ee4Smrg $opt_dry_run || $RM $export_symbols 8161b3e38ee4Smrg cmds=$export_symbols_cmds 8162b3e38ee4Smrg save_ifs="$IFS"; IFS='~' 8163a73423d7Smrg for cmd1 in $cmds; do 8164b3e38ee4Smrg IFS="$save_ifs" 8165a73423d7Smrg # Take the normal branch if the nm_file_list_spec branch 8166a73423d7Smrg # doesn't work or if tool conversion is not needed. 8167a73423d7Smrg case $nm_file_list_spec~$to_tool_file_cmd in 8168a73423d7Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8169a73423d7Smrg try_normal_branch=yes 8170a73423d7Smrg eval cmd=\"$cmd1\" 8171a73423d7Smrg func_len " $cmd" 8172a73423d7Smrg len=$func_len_result 8173a73423d7Smrg ;; 8174a73423d7Smrg *) 8175a73423d7Smrg try_normal_branch=no 8176a73423d7Smrg ;; 8177a73423d7Smrg esac 8178a73423d7Smrg if test "$try_normal_branch" = yes \ 8179a73423d7Smrg && { test "$len" -lt "$max_cmd_len" \ 8180a73423d7Smrg || test "$max_cmd_len" -le -1; } 8181a73423d7Smrg then 8182a73423d7Smrg func_show_eval "$cmd" 'exit $?' 8183a73423d7Smrg skipped_export=false 8184a73423d7Smrg elif test -n "$nm_file_list_spec"; then 8185a73423d7Smrg func_basename "$output" 8186a73423d7Smrg output_la=$func_basename_result 8187a73423d7Smrg save_libobjs=$libobjs 8188a73423d7Smrg save_output=$output 8189a73423d7Smrg output=${output_objdir}/${output_la}.nm 8190a73423d7Smrg func_to_tool_file "$output" 8191a73423d7Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 8192a73423d7Smrg func_append delfiles " $output" 8193a73423d7Smrg func_verbose "creating $NM input file list: $output" 8194a73423d7Smrg for obj in $save_libobjs; do 8195a73423d7Smrg func_to_tool_file "$obj" 8196a73423d7Smrg $ECHO "$func_to_tool_file_result" 8197a73423d7Smrg done > "$output" 8198a73423d7Smrg eval cmd=\"$cmd1\" 8199b3e38ee4Smrg func_show_eval "$cmd" 'exit $?' 8200a73423d7Smrg output=$save_output 8201a73423d7Smrg libobjs=$save_libobjs 8202b3e38ee4Smrg skipped_export=false 8203b3e38ee4Smrg else 8204b3e38ee4Smrg # The command line is too long to execute in one step. 8205b3e38ee4Smrg func_verbose "using reloadable object file for export list..." 8206b3e38ee4Smrg skipped_export=: 8207b3e38ee4Smrg # Break out early, otherwise skipped_export may be 8208b3e38ee4Smrg # set to false by a later but shorter cmd. 8209b3e38ee4Smrg break 8210b3e38ee4Smrg fi 8211b3e38ee4Smrg done 8212b3e38ee4Smrg IFS="$save_ifs" 8213b3e38ee4Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214b3e38ee4Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215b3e38ee4Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216b3e38ee4Smrg fi 8217b3e38ee4Smrg fi 821850806d53Smrg fi 821950806d53Smrg 8220b3e38ee4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221b3e38ee4Smrg tmp_export_symbols="$export_symbols" 8222b3e38ee4Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8223a73423d7Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224b3e38ee4Smrg fi 822550806d53Smrg 8226b3e38ee4Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227b3e38ee4Smrg # The given exports_symbols file has to be filtered, so filter it. 8228b3e38ee4Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229b3e38ee4Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230b3e38ee4Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8231b3e38ee4Smrg # though. Also, the filter scales superlinearly with the number of 8232b3e38ee4Smrg # global variables. join(1) would be nice here, but unfortunately 8233b3e38ee4Smrg # isn't a blessed tool. 8234b3e38ee4Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8235a73423d7Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236b3e38ee4Smrg export_symbols=$output_objdir/$libname.def 8237b3e38ee4Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238b3e38ee4Smrg fi 823950806d53Smrg 8240b3e38ee4Smrg tmp_deplibs= 8241b3e38ee4Smrg for test_deplib in $deplibs; do 8242b3e38ee4Smrg case " $convenience " in 8243b3e38ee4Smrg *" $test_deplib "*) ;; 8244b3e38ee4Smrg *) 8245a73423d7Smrg func_append tmp_deplibs " $test_deplib" 8246b3e38ee4Smrg ;; 8247b3e38ee4Smrg esac 8248b3e38ee4Smrg done 8249b3e38ee4Smrg deplibs="$tmp_deplibs" 825050806d53Smrg 8251b3e38ee4Smrg if test -n "$convenience"; then 8252b3e38ee4Smrg if test -n "$whole_archive_flag_spec" && 8253b3e38ee4Smrg test "$compiler_needs_object" = yes && 8254b3e38ee4Smrg test -z "$libobjs"; then 8255b3e38ee4Smrg # extract the archives, so we have objects to list. 8256b3e38ee4Smrg # TODO: could optimize this to just extract one archive. 8257b3e38ee4Smrg whole_archive_flag_spec= 8258b3e38ee4Smrg fi 8259b3e38ee4Smrg if test -n "$whole_archive_flag_spec"; then 8260b3e38ee4Smrg save_libobjs=$libobjs 8261b3e38ee4Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262b3e38ee4Smrg test "X$libobjs" = "X " && libobjs= 8263b3e38ee4Smrg else 8264b3e38ee4Smrg gentop="$output_objdir/${outputname}x" 8265a73423d7Smrg func_append generated " $gentop" 826650806d53Smrg 8267b3e38ee4Smrg func_extract_archives $gentop $convenience 8268a73423d7Smrg func_append libobjs " $func_extract_archives_result" 8269b3e38ee4Smrg test "X$libobjs" = "X " && libobjs= 8270b3e38ee4Smrg fi 8271a18ebfb2Smrg fi 827250806d53Smrg 8273b3e38ee4Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274b3e38ee4Smrg eval flag=\"$thread_safe_flag_spec\" 8275a73423d7Smrg func_append linker_flags " $flag" 8276a18ebfb2Smrg fi 8277af1a9c97Smrg 8278b3e38ee4Smrg # Make a backup of the uninstalled library when relinking 8279a73423d7Smrg if test "$opt_mode" = relink; then 8280b3e38ee4Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281b3e38ee4Smrg fi 828250806d53Smrg 8283b3e38ee4Smrg # Do each of the archive commands. 8284b3e38ee4Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8285b3e38ee4Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286b3e38ee4Smrg eval test_cmds=\"$module_expsym_cmds\" 8287b3e38ee4Smrg cmds=$module_expsym_cmds 8288b3e38ee4Smrg else 8289b3e38ee4Smrg eval test_cmds=\"$module_cmds\" 8290b3e38ee4Smrg cmds=$module_cmds 8291b3e38ee4Smrg fi 8292a18ebfb2Smrg else 8293b3e38ee4Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294b3e38ee4Smrg eval test_cmds=\"$archive_expsym_cmds\" 8295b3e38ee4Smrg cmds=$archive_expsym_cmds 8296b3e38ee4Smrg else 8297b3e38ee4Smrg eval test_cmds=\"$archive_cmds\" 8298b3e38ee4Smrg cmds=$archive_cmds 8299b3e38ee4Smrg fi 8300a18ebfb2Smrg fi 830150806d53Smrg 8302b3e38ee4Smrg if test "X$skipped_export" != "X:" && 8303b3e38ee4Smrg func_len " $test_cmds" && 8304b3e38ee4Smrg len=$func_len_result && 8305b3e38ee4Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306b3e38ee4Smrg : 8307b3e38ee4Smrg else 8308b3e38ee4Smrg # The command line is too long to link in one step, link piecewise 8309b3e38ee4Smrg # or, if using GNU ld and skipped_export is not :, use a linker 8310b3e38ee4Smrg # script. 831150806d53Smrg 8312b3e38ee4Smrg # Save the value of $output and $libobjs because we want to 8313b3e38ee4Smrg # use them later. If we have whole_archive_flag_spec, we 8314b3e38ee4Smrg # want to use save_libobjs as it was before 8315b3e38ee4Smrg # whole_archive_flag_spec was expanded, because we can't 8316b3e38ee4Smrg # assume the linker understands whole_archive_flag_spec. 8317b3e38ee4Smrg # This may have to be revisited, in case too many 8318b3e38ee4Smrg # convenience libraries get linked in and end up exceeding 8319b3e38ee4Smrg # the spec. 8320b3e38ee4Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321b3e38ee4Smrg save_libobjs=$libobjs 8322b3e38ee4Smrg fi 8323b3e38ee4Smrg save_output=$output 8324a73423d7Smrg func_basename "$output" 8325a73423d7Smrg output_la=$func_basename_result 832650806d53Smrg 8327b3e38ee4Smrg # Clear the reloadable object creation command queue and 8328b3e38ee4Smrg # initialize k to one. 8329b3e38ee4Smrg test_cmds= 8330b3e38ee4Smrg concat_cmds= 8331b3e38ee4Smrg objlist= 8332b3e38ee4Smrg last_robj= 8333b3e38ee4Smrg k=1 8334b3e38ee4Smrg 8335b3e38ee4Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336b3e38ee4Smrg output=${output_objdir}/${output_la}.lnkscript 8337b3e38ee4Smrg func_verbose "creating GNU ld script: $output" 8338a73423d7Smrg echo 'INPUT (' > $output 8339b3e38ee4Smrg for obj in $save_libobjs 8340a18ebfb2Smrg do 8341a73423d7Smrg func_to_tool_file "$obj" 8342a73423d7Smrg $ECHO "$func_to_tool_file_result" >> $output 8343b3e38ee4Smrg done 8344a73423d7Smrg echo ')' >> $output 8345a73423d7Smrg func_append delfiles " $output" 8346a73423d7Smrg func_to_tool_file "$output" 8347a73423d7Smrg output=$func_to_tool_file_result 8348b3e38ee4Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349b3e38ee4Smrg output=${output_objdir}/${output_la}.lnk 8350b3e38ee4Smrg func_verbose "creating linker input file list: $output" 8351b3e38ee4Smrg : > $output 8352b3e38ee4Smrg set x $save_libobjs 8353b3e38ee4Smrg shift 8354b3e38ee4Smrg firstobj= 8355b3e38ee4Smrg if test "$compiler_needs_object" = yes; then 8356b3e38ee4Smrg firstobj="$1 " 8357b3e38ee4Smrg shift 8358b3e38ee4Smrg fi 8359b3e38ee4Smrg for obj 8360b3e38ee4Smrg do 8361a73423d7Smrg func_to_tool_file "$obj" 8362a73423d7Smrg $ECHO "$func_to_tool_file_result" >> $output 8363b3e38ee4Smrg done 8364a73423d7Smrg func_append delfiles " $output" 8365a73423d7Smrg func_to_tool_file "$output" 8366a73423d7Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367b3e38ee4Smrg else 8368b3e38ee4Smrg if test -n "$save_libobjs"; then 8369b3e38ee4Smrg func_verbose "creating reloadable object files..." 8370b3e38ee4Smrg output=$output_objdir/$output_la-${k}.$objext 8371b3e38ee4Smrg eval test_cmds=\"$reload_cmds\" 8372b3e38ee4Smrg func_len " $test_cmds" 8373b3e38ee4Smrg len0=$func_len_result 8374b3e38ee4Smrg len=$len0 8375b3e38ee4Smrg 8376b3e38ee4Smrg # Loop over the list of objects to be linked. 8377b3e38ee4Smrg for obj in $save_libobjs 8378b3e38ee4Smrg do 8379b3e38ee4Smrg func_len " $obj" 8380b3e38ee4Smrg func_arith $len + $func_len_result 8381b3e38ee4Smrg len=$func_arith_result 8382b3e38ee4Smrg if test "X$objlist" = X || 8383b3e38ee4Smrg test "$len" -lt "$max_cmd_len"; then 8384b3e38ee4Smrg func_append objlist " $obj" 8385b3e38ee4Smrg else 8386b3e38ee4Smrg # The command $test_cmds is almost too long, add a 8387b3e38ee4Smrg # command to the queue. 8388b3e38ee4Smrg if test "$k" -eq 1 ; then 8389b3e38ee4Smrg # The first file doesn't have a previous command to add. 8390a73423d7Smrg reload_objs=$objlist 8391a73423d7Smrg eval concat_cmds=\"$reload_cmds\" 8392b3e38ee4Smrg else 8393b3e38ee4Smrg # All subsequent reloadable object files will link in 8394b3e38ee4Smrg # the last one created. 8395a73423d7Smrg reload_objs="$objlist $last_robj" 8396a73423d7Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397b3e38ee4Smrg fi 8398b3e38ee4Smrg last_robj=$output_objdir/$output_la-${k}.$objext 8399b3e38ee4Smrg func_arith $k + 1 8400b3e38ee4Smrg k=$func_arith_result 8401b3e38ee4Smrg output=$output_objdir/$output_la-${k}.$objext 8402a73423d7Smrg objlist=" $obj" 8403b3e38ee4Smrg func_len " $last_robj" 8404b3e38ee4Smrg func_arith $len0 + $func_len_result 8405b3e38ee4Smrg len=$func_arith_result 8406b3e38ee4Smrg fi 8407b3e38ee4Smrg done 8408b3e38ee4Smrg # Handle the remaining objects by creating one last 8409b3e38ee4Smrg # reloadable object file. All subsequent reloadable object 8410b3e38ee4Smrg # files will link in the last one created. 8411b3e38ee4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8412a73423d7Smrg reload_objs="$objlist $last_robj" 8413a73423d7Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414b3e38ee4Smrg if test -n "$last_robj"; then 8415b3e38ee4Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416b3e38ee4Smrg fi 8417a73423d7Smrg func_append delfiles " $output" 841850806d53Smrg 8419b3e38ee4Smrg else 8420b3e38ee4Smrg output= 8421b3e38ee4Smrg fi 842250806d53Smrg 8423b3e38ee4Smrg if ${skipped_export-false}; then 8424b3e38ee4Smrg func_verbose "generating symbol list for \`$libname.la'" 8425b3e38ee4Smrg export_symbols="$output_objdir/$libname.exp" 8426b3e38ee4Smrg $opt_dry_run || $RM $export_symbols 8427b3e38ee4Smrg libobjs=$output 8428b3e38ee4Smrg # Append the command to create the export file. 8429b3e38ee4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430b3e38ee4Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431b3e38ee4Smrg if test -n "$last_robj"; then 8432b3e38ee4Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433b3e38ee4Smrg fi 8434af1a9c97Smrg fi 843550806d53Smrg 8436b3e38ee4Smrg test -n "$save_libobjs" && 8437b3e38ee4Smrg func_verbose "creating a temporary reloadable object file: $output" 843850806d53Smrg 8439b3e38ee4Smrg # Loop through the commands generated above and execute them. 8440b3e38ee4Smrg save_ifs="$IFS"; IFS='~' 8441b3e38ee4Smrg for cmd in $concat_cmds; do 8442b3e38ee4Smrg IFS="$save_ifs" 8443b3e38ee4Smrg $opt_silent || { 8444b3e38ee4Smrg func_quote_for_expand "$cmd" 8445b3e38ee4Smrg eval "func_echo $func_quote_for_expand_result" 8446b3e38ee4Smrg } 8447b3e38ee4Smrg $opt_dry_run || eval "$cmd" || { 8448b3e38ee4Smrg lt_exit=$? 8449b3e38ee4Smrg 8450b3e38ee4Smrg # Restore the uninstalled library and exit 8451a73423d7Smrg if test "$opt_mode" = relink; then 8452b3e38ee4Smrg ( cd "$output_objdir" && \ 8453b3e38ee4Smrg $RM "${realname}T" && \ 8454b3e38ee4Smrg $MV "${realname}U" "$realname" ) 8455b3e38ee4Smrg fi 845650806d53Smrg 8457b3e38ee4Smrg exit $lt_exit 8458b3e38ee4Smrg } 8459b3e38ee4Smrg done 8460b3e38ee4Smrg IFS="$save_ifs" 8461a18ebfb2Smrg 8462b3e38ee4Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463b3e38ee4Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464b3e38ee4Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 846550806d53Smrg fi 846650806d53Smrg fi 846750806d53Smrg 8468b3e38ee4Smrg if ${skipped_export-false}; then 8469b3e38ee4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470b3e38ee4Smrg tmp_export_symbols="$export_symbols" 8471b3e38ee4Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8472a73423d7Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473b3e38ee4Smrg fi 8474af1a9c97Smrg 8475b3e38ee4Smrg if test -n "$orig_export_symbols"; then 8476b3e38ee4Smrg # The given exports_symbols file has to be filtered, so filter it. 8477b3e38ee4Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478b3e38ee4Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479b3e38ee4Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8480b3e38ee4Smrg # though. Also, the filter scales superlinearly with the number of 8481b3e38ee4Smrg # global variables. join(1) would be nice here, but unfortunately 8482b3e38ee4Smrg # isn't a blessed tool. 8483b3e38ee4Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8484a73423d7Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485b3e38ee4Smrg export_symbols=$output_objdir/$libname.def 8486b3e38ee4Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487b3e38ee4Smrg fi 8488b3e38ee4Smrg fi 848950806d53Smrg 8490b3e38ee4Smrg libobjs=$output 8491b3e38ee4Smrg # Restore the value of output. 8492b3e38ee4Smrg output=$save_output 849350806d53Smrg 8494b3e38ee4Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495b3e38ee4Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496b3e38ee4Smrg test "X$libobjs" = "X " && libobjs= 8497b3e38ee4Smrg fi 8498b3e38ee4Smrg # Expand the library linking commands again to reset the 8499b3e38ee4Smrg # value of $libobjs for piecewise linking. 850050806d53Smrg 8501b3e38ee4Smrg # Do each of the archive commands. 8502b3e38ee4Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8503b3e38ee4Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504b3e38ee4Smrg cmds=$module_expsym_cmds 8505b3e38ee4Smrg else 8506b3e38ee4Smrg cmds=$module_cmds 8507a18ebfb2Smrg fi 8508a18ebfb2Smrg else 8509b3e38ee4Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510b3e38ee4Smrg cmds=$archive_expsym_cmds 8511b3e38ee4Smrg else 8512b3e38ee4Smrg cmds=$archive_cmds 8513b3e38ee4Smrg fi 8514a18ebfb2Smrg fi 8515b3e38ee4Smrg fi 851650806d53Smrg 8517b3e38ee4Smrg if test -n "$delfiles"; then 8518b3e38ee4Smrg # Append the command to remove temporary files to $cmds. 8519b3e38ee4Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 8520b3e38ee4Smrg fi 852150806d53Smrg 8522b3e38ee4Smrg # Add any objects from preloaded convenience libraries 8523b3e38ee4Smrg if test -n "$dlprefiles"; then 8524b3e38ee4Smrg gentop="$output_objdir/${outputname}x" 8525a73423d7Smrg func_append generated " $gentop" 852650806d53Smrg 8527b3e38ee4Smrg func_extract_archives $gentop $dlprefiles 8528a73423d7Smrg func_append libobjs " $func_extract_archives_result" 8529b3e38ee4Smrg test "X$libobjs" = "X " && libobjs= 8530b3e38ee4Smrg fi 853150806d53Smrg 8532b3e38ee4Smrg save_ifs="$IFS"; IFS='~' 8533b3e38ee4Smrg for cmd in $cmds; do 8534b3e38ee4Smrg IFS="$save_ifs" 8535b3e38ee4Smrg eval cmd=\"$cmd\" 8536b3e38ee4Smrg $opt_silent || { 8537b3e38ee4Smrg func_quote_for_expand "$cmd" 8538b3e38ee4Smrg eval "func_echo $func_quote_for_expand_result" 8539b3e38ee4Smrg } 8540b3e38ee4Smrg $opt_dry_run || eval "$cmd" || { 8541b3e38ee4Smrg lt_exit=$? 8542af1a9c97Smrg 8543b3e38ee4Smrg # Restore the uninstalled library and exit 8544a73423d7Smrg if test "$opt_mode" = relink; then 8545b3e38ee4Smrg ( cd "$output_objdir" && \ 8546b3e38ee4Smrg $RM "${realname}T" && \ 8547b3e38ee4Smrg $MV "${realname}U" "$realname" ) 8548b3e38ee4Smrg fi 8549af1a9c97Smrg 8550b3e38ee4Smrg exit $lt_exit 8551b3e38ee4Smrg } 8552b3e38ee4Smrg done 8553b3e38ee4Smrg IFS="$save_ifs" 8554af1a9c97Smrg 8555b3e38ee4Smrg # Restore the uninstalled library and exit 8556a73423d7Smrg if test "$opt_mode" = relink; then 8557b3e38ee4Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558af1a9c97Smrg 8559b3e38ee4Smrg if test -n "$convenience"; then 8560b3e38ee4Smrg if test -z "$whole_archive_flag_spec"; then 8561b3e38ee4Smrg func_show_eval '${RM}r "$gentop"' 8562b3e38ee4Smrg fi 8563b3e38ee4Smrg fi 8564af1a9c97Smrg 8565b3e38ee4Smrg exit $EXIT_SUCCESS 8566b3e38ee4Smrg fi 8567b3e38ee4Smrg 8568b3e38ee4Smrg # Create links to the real library. 8569b3e38ee4Smrg for linkname in $linknames; do 8570b3e38ee4Smrg if test "$realname" != "$linkname"; then 8571b3e38ee4Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8572a18ebfb2Smrg fi 8573a18ebfb2Smrg done 8574af1a9c97Smrg 8575b3e38ee4Smrg # If -module or -export-dynamic was specified, set the dlname. 8576b3e38ee4Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 8577b3e38ee4Smrg # On all known operating systems, these are identical. 8578b3e38ee4Smrg dlname="$soname" 8579b3e38ee4Smrg fi 8580b3e38ee4Smrg fi 858150806d53Smrg ;; 858250806d53Smrg 8583b3e38ee4Smrg obj) 8584b3e38ee4Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585b3e38ee4Smrg func_warning "\`-dlopen' is ignored for objects" 8586b3e38ee4Smrg fi 8587a18ebfb2Smrg 8588b3e38ee4Smrg case " $deplibs" in 8589b3e38ee4Smrg *\ -l* | *\ -L*) 8590b3e38ee4Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 8591af1a9c97Smrg esac 859250806d53Smrg 8593b3e38ee4Smrg test -n "$rpath" && \ 8594b3e38ee4Smrg func_warning "\`-rpath' is ignored for objects" 8595b3e38ee4Smrg 8596b3e38ee4Smrg test -n "$xrpath" && \ 8597b3e38ee4Smrg func_warning "\`-R' is ignored for objects" 859850806d53Smrg 8599b3e38ee4Smrg test -n "$vinfo" && \ 8600b3e38ee4Smrg func_warning "\`-version-info' is ignored for objects" 8601af1a9c97Smrg 8602b3e38ee4Smrg test -n "$release" && \ 8603b3e38ee4Smrg func_warning "\`-release' is ignored for objects" 8604b3e38ee4Smrg 8605b3e38ee4Smrg case $output in 8606b3e38ee4Smrg *.lo) 8607b3e38ee4Smrg test -n "$objs$old_deplibs" && \ 8608b3e38ee4Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609b3e38ee4Smrg 8610b3e38ee4Smrg libobj=$output 8611b3e38ee4Smrg func_lo2o "$libobj" 8612b3e38ee4Smrg obj=$func_lo2o_result 8613a18ebfb2Smrg ;; 8614a18ebfb2Smrg *) 8615b3e38ee4Smrg libobj= 8616b3e38ee4Smrg obj="$output" 861750806d53Smrg ;; 8618af1a9c97Smrg esac 861950806d53Smrg 8620b3e38ee4Smrg # Delete the old objects. 8621b3e38ee4Smrg $opt_dry_run || $RM $obj $libobj 862250806d53Smrg 8623b3e38ee4Smrg # Objects from convenience libraries. This assumes 8624b3e38ee4Smrg # single-version convenience libraries. Whenever we create 8625b3e38ee4Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 8626b3e38ee4Smrg # the extraction. 8627b3e38ee4Smrg reload_conv_objs= 8628b3e38ee4Smrg gentop= 8629b3e38ee4Smrg # reload_cmds runs $LD directly, so let us get rid of 8630b3e38ee4Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 8631b3e38ee4Smrg # turning comma into space.. 8632b3e38ee4Smrg wl= 863350806d53Smrg 8634b3e38ee4Smrg if test -n "$convenience"; then 8635b3e38ee4Smrg if test -n "$whole_archive_flag_spec"; then 8636b3e38ee4Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 8637a73423d7Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638b3e38ee4Smrg else 8639b3e38ee4Smrg gentop="$output_objdir/${obj}x" 8640a73423d7Smrg func_append generated " $gentop" 8641a18ebfb2Smrg 8642b3e38ee4Smrg func_extract_archives $gentop $convenience 8643b3e38ee4Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644b3e38ee4Smrg fi 8645a18ebfb2Smrg fi 8646a18ebfb2Smrg 8647a73423d7Smrg # If we're not building shared, we need to use non_pic_objs 8648a73423d7Smrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8649a73423d7Smrg 8650b3e38ee4Smrg # Create the old-style object. 8651a73423d7Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8652a18ebfb2Smrg 8653b3e38ee4Smrg output="$obj" 8654b3e38ee4Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8655a18ebfb2Smrg 8656b3e38ee4Smrg # Exit if we aren't doing a library object file. 8657b3e38ee4Smrg if test -z "$libobj"; then 8658b3e38ee4Smrg if test -n "$gentop"; then 8659b3e38ee4Smrg func_show_eval '${RM}r "$gentop"' 8660b3e38ee4Smrg fi 8661b3e38ee4Smrg 8662b3e38ee4Smrg exit $EXIT_SUCCESS 8663a18ebfb2Smrg fi 8664b3e38ee4Smrg 8665b3e38ee4Smrg if test "$build_libtool_libs" != yes; then 8666b3e38ee4Smrg if test -n "$gentop"; then 8667b3e38ee4Smrg func_show_eval '${RM}r "$gentop"' 8668b3e38ee4Smrg fi 8669b3e38ee4Smrg 8670b3e38ee4Smrg # Create an invalid libtool object if no PIC, so that we don't 8671b3e38ee4Smrg # accidentally link it into a program. 8672b3e38ee4Smrg # $show "echo timestamp > $libobj" 8673b3e38ee4Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674b3e38ee4Smrg exit $EXIT_SUCCESS 8675b3e38ee4Smrg fi 8676b3e38ee4Smrg 8677b3e38ee4Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8678b3e38ee4Smrg # Only do commands if we really have different PIC objects. 8679b3e38ee4Smrg reload_objs="$libobjs $reload_conv_objs" 8680b3e38ee4Smrg output="$libobj" 8681b3e38ee4Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8682b3e38ee4Smrg fi 8683b3e38ee4Smrg 8684b3e38ee4Smrg if test -n "$gentop"; then 8685b3e38ee4Smrg func_show_eval '${RM}r "$gentop"' 8686b3e38ee4Smrg fi 8687b3e38ee4Smrg 8688b3e38ee4Smrg exit $EXIT_SUCCESS 8689a18ebfb2Smrg ;; 869050806d53Smrg 8691b3e38ee4Smrg prog) 8692b3e38ee4Smrg case $host in 8693b3e38ee4Smrg *cygwin*) func_stripname '' '.exe' "$output" 8694b3e38ee4Smrg output=$func_stripname_result.exe;; 8695b3e38ee4Smrg esac 8696b3e38ee4Smrg test -n "$vinfo" && \ 8697b3e38ee4Smrg func_warning "\`-version-info' is ignored for programs" 869850806d53Smrg 8699b3e38ee4Smrg test -n "$release" && \ 8700b3e38ee4Smrg func_warning "\`-release' is ignored for programs" 870150806d53Smrg 8702b3e38ee4Smrg test "$preload" = yes \ 8703b3e38ee4Smrg && test "$dlopen_support" = unknown \ 8704b3e38ee4Smrg && test "$dlopen_self" = unknown \ 8705b3e38ee4Smrg && test "$dlopen_self_static" = unknown && \ 8706b3e38ee4Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707b3e38ee4Smrg 8708b3e38ee4Smrg case $host in 8709b3e38ee4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 8710b3e38ee4Smrg # On Rhapsody replace the C library is the System framework 8711a73423d7Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8712a73423d7Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8713a18ebfb2Smrg ;; 8714b3e38ee4Smrg esac 8715a18ebfb2Smrg 8716b3e38ee4Smrg case $host in 8717b3e38ee4Smrg *-*-darwin*) 8718b3e38ee4Smrg # Don't allow lazy linking, it breaks C++ global constructors 8719b3e38ee4Smrg # But is supposedly fixed on 10.4 or later (yay!). 8720b3e38ee4Smrg if test "$tagname" = CXX ; then 8721b3e38ee4Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722b3e38ee4Smrg 10.[0123]) 8723a73423d7Smrg func_append compile_command " ${wl}-bind_at_load" 8724a73423d7Smrg func_append finalize_command " ${wl}-bind_at_load" 8725b3e38ee4Smrg ;; 8726b3e38ee4Smrg esac 8727a18ebfb2Smrg fi 8728b3e38ee4Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8729a73423d7Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8730a73423d7Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731b3e38ee4Smrg ;; 8732b3e38ee4Smrg esac 8733a18ebfb2Smrg 8734a18ebfb2Smrg 8735b3e38ee4Smrg # move library search paths that coincide with paths to not yet 8736b3e38ee4Smrg # installed libraries to the beginning of the library search list 8737b3e38ee4Smrg new_libs= 8738b3e38ee4Smrg for path in $notinst_path; do 8739b3e38ee4Smrg case " $new_libs " in 8740b3e38ee4Smrg *" -L$path/$objdir "*) ;; 8741b3e38ee4Smrg *) 8742b3e38ee4Smrg case " $compile_deplibs " in 8743b3e38ee4Smrg *" -L$path/$objdir "*) 8744a73423d7Smrg func_append new_libs " -L$path/$objdir" ;; 8745af1a9c97Smrg esac 8746b3e38ee4Smrg ;; 8747b3e38ee4Smrg esac 8748b3e38ee4Smrg done 8749b3e38ee4Smrg for deplib in $compile_deplibs; do 8750b3e38ee4Smrg case $deplib in 8751b3e38ee4Smrg -L*) 8752b3e38ee4Smrg case " $new_libs " in 8753b3e38ee4Smrg *" $deplib "*) ;; 8754a73423d7Smrg *) func_append new_libs " $deplib" ;; 8755af1a9c97Smrg esac 8756b3e38ee4Smrg ;; 8757a73423d7Smrg *) func_append new_libs " $deplib" ;; 8758b3e38ee4Smrg esac 8759b3e38ee4Smrg done 8760b3e38ee4Smrg compile_deplibs="$new_libs" 876150806d53Smrg 8762a18ebfb2Smrg 8763a73423d7Smrg func_append compile_command " $compile_deplibs" 8764a73423d7Smrg func_append finalize_command " $finalize_deplibs" 8765a18ebfb2Smrg 8766b3e38ee4Smrg if test -n "$rpath$xrpath"; then 8767b3e38ee4Smrg # If the user specified any rpath flags, then add them. 8768b3e38ee4Smrg for libdir in $rpath $xrpath; do 8769b3e38ee4Smrg # This is the magic to use -rpath. 8770b3e38ee4Smrg case "$finalize_rpath " in 8771b3e38ee4Smrg *" $libdir "*) ;; 8772a73423d7Smrg *) func_append finalize_rpath " $libdir" ;; 8773b3e38ee4Smrg esac 8774b3e38ee4Smrg done 8775b3e38ee4Smrg fi 8776a18ebfb2Smrg 8777b3e38ee4Smrg # Now hardcode the library paths 8778b3e38ee4Smrg rpath= 8779b3e38ee4Smrg hardcode_libdirs= 8780b3e38ee4Smrg for libdir in $compile_rpath $finalize_rpath; do 8781b3e38ee4Smrg if test -n "$hardcode_libdir_flag_spec"; then 8782b3e38ee4Smrg if test -n "$hardcode_libdir_separator"; then 8783b3e38ee4Smrg if test -z "$hardcode_libdirs"; then 8784b3e38ee4Smrg hardcode_libdirs="$libdir" 8785b3e38ee4Smrg else 8786b3e38ee4Smrg # Just accumulate the unique libdirs. 8787b3e38ee4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788b3e38ee4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789b3e38ee4Smrg ;; 8790b3e38ee4Smrg *) 8791a73423d7Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792b3e38ee4Smrg ;; 8793b3e38ee4Smrg esac 8794b3e38ee4Smrg fi 8795a18ebfb2Smrg else 8796b3e38ee4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8797a73423d7Smrg func_append rpath " $flag" 8798a18ebfb2Smrg fi 8799b3e38ee4Smrg elif test -n "$runpath_var"; then 8800b3e38ee4Smrg case "$perm_rpath " in 8801b3e38ee4Smrg *" $libdir "*) ;; 8802a73423d7Smrg *) func_append perm_rpath " $libdir" ;; 8803b3e38ee4Smrg esac 8804b3e38ee4Smrg fi 8805b3e38ee4Smrg case $host in 8806b3e38ee4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807b3e38ee4Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808b3e38ee4Smrg case :$dllsearchpath: in 8809b3e38ee4Smrg *":$libdir:"*) ;; 8810b3e38ee4Smrg ::) dllsearchpath=$libdir;; 8811a73423d7Smrg *) func_append dllsearchpath ":$libdir";; 8812b3e38ee4Smrg esac 8813b3e38ee4Smrg case :$dllsearchpath: in 8814b3e38ee4Smrg *":$testbindir:"*) ;; 8815b3e38ee4Smrg ::) dllsearchpath=$testbindir;; 8816a73423d7Smrg *) func_append dllsearchpath ":$testbindir";; 8817b3e38ee4Smrg esac 8818b3e38ee4Smrg ;; 8819b3e38ee4Smrg esac 8820b3e38ee4Smrg done 8821b3e38ee4Smrg # Substitute the hardcoded libdirs into the rpath. 8822b3e38ee4Smrg if test -n "$hardcode_libdir_separator" && 8823b3e38ee4Smrg test -n "$hardcode_libdirs"; then 8824b3e38ee4Smrg libdir="$hardcode_libdirs" 8825b3e38ee4Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8826b3e38ee4Smrg fi 8827b3e38ee4Smrg compile_rpath="$rpath" 8828a18ebfb2Smrg 8829b3e38ee4Smrg rpath= 8830b3e38ee4Smrg hardcode_libdirs= 8831b3e38ee4Smrg for libdir in $finalize_rpath; do 8832b3e38ee4Smrg if test -n "$hardcode_libdir_flag_spec"; then 8833b3e38ee4Smrg if test -n "$hardcode_libdir_separator"; then 8834b3e38ee4Smrg if test -z "$hardcode_libdirs"; then 8835b3e38ee4Smrg hardcode_libdirs="$libdir" 8836b3e38ee4Smrg else 8837b3e38ee4Smrg # Just accumulate the unique libdirs. 8838b3e38ee4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839b3e38ee4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840b3e38ee4Smrg ;; 8841b3e38ee4Smrg *) 8842a73423d7Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843b3e38ee4Smrg ;; 8844b3e38ee4Smrg esac 8845b3e38ee4Smrg fi 884650806d53Smrg else 8847b3e38ee4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8848a73423d7Smrg func_append rpath " $flag" 884950806d53Smrg fi 8850b3e38ee4Smrg elif test -n "$runpath_var"; then 8851b3e38ee4Smrg case "$finalize_perm_rpath " in 8852b3e38ee4Smrg *" $libdir "*) ;; 8853a73423d7Smrg *) func_append finalize_perm_rpath " $libdir" ;; 8854b3e38ee4Smrg esac 885550806d53Smrg fi 8856b3e38ee4Smrg done 8857b3e38ee4Smrg # Substitute the hardcoded libdirs into the rpath. 8858b3e38ee4Smrg if test -n "$hardcode_libdir_separator" && 8859b3e38ee4Smrg test -n "$hardcode_libdirs"; then 8860b3e38ee4Smrg libdir="$hardcode_libdirs" 8861b3e38ee4Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8862b3e38ee4Smrg fi 8863b3e38ee4Smrg finalize_rpath="$rpath" 886450806d53Smrg 8865b3e38ee4Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866b3e38ee4Smrg # Transform all the library objects into standard objects. 8867a73423d7Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8868a73423d7Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869b3e38ee4Smrg fi 887050806d53Smrg 8871b3e38ee4Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 887250806d53Smrg 8873b3e38ee4Smrg # template prelinking step 8874b3e38ee4Smrg if test -n "$prelink_cmds"; then 8875b3e38ee4Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 8876b3e38ee4Smrg fi 887750806d53Smrg 8878b3e38ee4Smrg wrappers_required=yes 8879b3e38ee4Smrg case $host in 8880a73423d7Smrg *cegcc* | *mingw32ce*) 8881a73423d7Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8882a73423d7Smrg wrappers_required=no 8883a73423d7Smrg ;; 8884b3e38ee4Smrg *cygwin* | *mingw* ) 8885b3e38ee4Smrg if test "$build_libtool_libs" != yes; then 8886b3e38ee4Smrg wrappers_required=no 8887b3e38ee4Smrg fi 8888b3e38ee4Smrg ;; 8889b3e38ee4Smrg *) 8890b3e38ee4Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891b3e38ee4Smrg wrappers_required=no 8892b3e38ee4Smrg fi 8893b3e38ee4Smrg ;; 8894b3e38ee4Smrg esac 8895b3e38ee4Smrg if test "$wrappers_required" = no; then 8896b3e38ee4Smrg # Replace the output file specification. 8897a73423d7Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898b3e38ee4Smrg link_command="$compile_command$compile_rpath" 889950806d53Smrg 8900b3e38ee4Smrg # We have no uninstalled library dependencies, so finalize right now. 8901b3e38ee4Smrg exit_status=0 8902b3e38ee4Smrg func_show_eval "$link_command" 'exit_status=$?' 890350806d53Smrg 8904a73423d7Smrg if test -n "$postlink_cmds"; then 8905a73423d7Smrg func_to_tool_file "$output" 8906a73423d7Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8907a73423d7Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8908a73423d7Smrg fi 8909a73423d7Smrg 8910b3e38ee4Smrg # Delete the generated files. 8911b3e38ee4Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8912b3e38ee4Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 891350806d53Smrg fi 891450806d53Smrg 8915b3e38ee4Smrg exit $exit_status 8916b3e38ee4Smrg fi 891750806d53Smrg 8918b3e38ee4Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919b3e38ee4Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920b3e38ee4Smrg fi 8921b3e38ee4Smrg if test -n "$finalize_shlibpath"; then 8922b3e38ee4Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923b3e38ee4Smrg fi 8924a18ebfb2Smrg 8925b3e38ee4Smrg compile_var= 8926b3e38ee4Smrg finalize_var= 8927b3e38ee4Smrg if test -n "$runpath_var"; then 8928b3e38ee4Smrg if test -n "$perm_rpath"; then 8929b3e38ee4Smrg # We should set the runpath_var. 8930b3e38ee4Smrg rpath= 8931b3e38ee4Smrg for dir in $perm_rpath; do 8932a73423d7Smrg func_append rpath "$dir:" 8933b3e38ee4Smrg done 8934b3e38ee4Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 893550806d53Smrg fi 8936b3e38ee4Smrg if test -n "$finalize_perm_rpath"; then 8937b3e38ee4Smrg # We should set the runpath_var. 8938b3e38ee4Smrg rpath= 8939b3e38ee4Smrg for dir in $finalize_perm_rpath; do 8940a73423d7Smrg func_append rpath "$dir:" 8941b3e38ee4Smrg done 8942b3e38ee4Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 894350806d53Smrg fi 8944b3e38ee4Smrg fi 894550806d53Smrg 8946b3e38ee4Smrg if test "$no_install" = yes; then 8947b3e38ee4Smrg # We don't need to create a wrapper script. 8948b3e38ee4Smrg link_command="$compile_var$compile_command$compile_rpath" 8949b3e38ee4Smrg # Replace the output file specification. 8950a73423d7Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951b3e38ee4Smrg # Delete the old output file. 8952b3e38ee4Smrg $opt_dry_run || $RM $output 8953b3e38ee4Smrg # Link the executable and exit 8954b3e38ee4Smrg func_show_eval "$link_command" 'exit $?' 8955a73423d7Smrg 8956a73423d7Smrg if test -n "$postlink_cmds"; then 8957a73423d7Smrg func_to_tool_file "$output" 8958a73423d7Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8959a73423d7Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8960a73423d7Smrg fi 8961a73423d7Smrg 8962a18ebfb2Smrg exit $EXIT_SUCCESS 8963b3e38ee4Smrg fi 8964af1a9c97Smrg 8965b3e38ee4Smrg if test "$hardcode_action" = relink; then 8966b3e38ee4Smrg # Fast installation is not supported 8967b3e38ee4Smrg link_command="$compile_var$compile_command$compile_rpath" 8968b3e38ee4Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8969b3e38ee4Smrg 8970b3e38ee4Smrg func_warning "this platform does not like uninstalled shared libraries" 8971b3e38ee4Smrg func_warning "\`$output' will be relinked during installation" 8972b3e38ee4Smrg else 8973b3e38ee4Smrg if test "$fast_install" != no; then 8974b3e38ee4Smrg link_command="$finalize_var$compile_command$finalize_rpath" 8975b3e38ee4Smrg if test "$fast_install" = yes; then 8976a73423d7Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977b3e38ee4Smrg else 8978b3e38ee4Smrg # fast_install is set to needless 8979b3e38ee4Smrg relink_command= 8980b3e38ee4Smrg fi 898150806d53Smrg else 8982b3e38ee4Smrg link_command="$compile_var$compile_command$compile_rpath" 8983b3e38ee4Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 898450806d53Smrg fi 8985b3e38ee4Smrg fi 898650806d53Smrg 8987b3e38ee4Smrg # Replace the output file specification. 8988a73423d7Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 898950806d53Smrg 8990b3e38ee4Smrg # Delete the old output files. 8991b3e38ee4Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 899250806d53Smrg 8993b3e38ee4Smrg func_show_eval "$link_command" 'exit $?' 8994a18ebfb2Smrg 8995a73423d7Smrg if test -n "$postlink_cmds"; then 8996a73423d7Smrg func_to_tool_file "$output_objdir/$outputname" 8997a73423d7Smrg 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'` 8998a73423d7Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8999a73423d7Smrg fi 9000a73423d7Smrg 9001b3e38ee4Smrg # Now create the wrapper script. 9002b3e38ee4Smrg func_verbose "creating $output" 9003a18ebfb2Smrg 9004b3e38ee4Smrg # Quote the relink command for shipping. 9005b3e38ee4Smrg if test -n "$relink_command"; then 9006b3e38ee4Smrg # Preserve any variables that may affect compiler behavior 9007b3e38ee4Smrg for var in $variables_saved_for_relink; do 9008b3e38ee4Smrg if eval test -z \"\${$var+set}\"; then 9009b3e38ee4Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010b3e38ee4Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9011b3e38ee4Smrg relink_command="$var=; export $var; $relink_command" 901250806d53Smrg else 9013b3e38ee4Smrg func_quote_for_eval "$var_value" 9014b3e38ee4Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 901550806d53Smrg fi 9016b3e38ee4Smrg done 9017b3e38ee4Smrg relink_command="(cd `pwd`; $relink_command)" 9018a73423d7Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019b3e38ee4Smrg fi 9020b3e38ee4Smrg 9021b3e38ee4Smrg # Only actually do things if not in dry run mode. 9022b3e38ee4Smrg $opt_dry_run || { 9023b3e38ee4Smrg # win32 will think the script is a binary if it has 9024b3e38ee4Smrg # a .exe suffix, so we strip it off here. 9025b3e38ee4Smrg case $output in 9026b3e38ee4Smrg *.exe) func_stripname '' '.exe' "$output" 9027b3e38ee4Smrg output=$func_stripname_result ;; 9028b3e38ee4Smrg esac 9029b3e38ee4Smrg # test for cygwin because mv fails w/o .exe extensions 9030b3e38ee4Smrg case $host in 9031b3e38ee4Smrg *cygwin*) 9032b3e38ee4Smrg exeext=.exe 9033b3e38ee4Smrg func_stripname '' '.exe' "$outputname" 9034b3e38ee4Smrg outputname=$func_stripname_result ;; 9035b3e38ee4Smrg *) exeext= ;; 903650806d53Smrg esac 9037b3e38ee4Smrg case $host in 9038b3e38ee4Smrg *cygwin* | *mingw* ) 9039b3e38ee4Smrg func_dirname_and_basename "$output" "" "." 9040b3e38ee4Smrg output_name=$func_basename_result 9041b3e38ee4Smrg output_path=$func_dirname_result 9042b3e38ee4Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043b3e38ee4Smrg cwrapper="$output_path/$output_name.exe" 9044b3e38ee4Smrg $RM $cwrappersource $cwrapper 9045b3e38ee4Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046b3e38ee4Smrg 9047b3e38ee4Smrg func_emit_cwrapperexe_src > $cwrappersource 9048b3e38ee4Smrg 9049b3e38ee4Smrg # The wrapper executable is built using the $host compiler, 9050b3e38ee4Smrg # because it contains $host paths and files. If cross- 9051b3e38ee4Smrg # compiling, it, like the target executable, must be 9052b3e38ee4Smrg # executed on the $host or under an emulation environment. 9053b3e38ee4Smrg $opt_dry_run || { 9054b3e38ee4Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055b3e38ee4Smrg $STRIP $cwrapper 9056b3e38ee4Smrg } 905750806d53Smrg 9058b3e38ee4Smrg # Now, create the wrapper script for func_source use: 9059b3e38ee4Smrg func_ltwrapper_scriptname $cwrapper 9060b3e38ee4Smrg $RM $func_ltwrapper_scriptname_result 9061b3e38ee4Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062b3e38ee4Smrg $opt_dry_run || { 9063b3e38ee4Smrg # note: this script will not be executed, so do not chmod. 9064b3e38ee4Smrg if test "x$build" = "x$host" ; then 9065b3e38ee4Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066b3e38ee4Smrg else 9067b3e38ee4Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068b3e38ee4Smrg fi 9069b3e38ee4Smrg } 9070b3e38ee4Smrg ;; 9071b3e38ee4Smrg * ) 9072b3e38ee4Smrg $RM $output 9073b3e38ee4Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 907450806d53Smrg 9075b3e38ee4Smrg func_emit_wrapper no > $output 9076b3e38ee4Smrg chmod +x $output 9077b3e38ee4Smrg ;; 9078b3e38ee4Smrg esac 9079b3e38ee4Smrg } 9080b3e38ee4Smrg exit $EXIT_SUCCESS 9081b3e38ee4Smrg ;; 9082b3e38ee4Smrg esac 908350806d53Smrg 9084b3e38ee4Smrg # See if we need to build an old-fashioned archive. 9085b3e38ee4Smrg for oldlib in $oldlibs; do 908650806d53Smrg 9087b3e38ee4Smrg if test "$build_libtool_libs" = convenience; then 9088b3e38ee4Smrg oldobjs="$libobjs_save $symfileobj" 9089b3e38ee4Smrg addlibs="$convenience" 9090b3e38ee4Smrg build_libtool_libs=no 9091b3e38ee4Smrg else 9092b3e38ee4Smrg if test "$build_libtool_libs" = module; then 9093b3e38ee4Smrg oldobjs="$libobjs_save" 9094b3e38ee4Smrg build_libtool_libs=no 9095b3e38ee4Smrg else 9096b3e38ee4Smrg oldobjs="$old_deplibs $non_pic_objects" 9097b3e38ee4Smrg if test "$preload" = yes && test -f "$symfileobj"; then 9098a73423d7Smrg func_append oldobjs " $symfileobj" 9099b3e38ee4Smrg fi 9100b3e38ee4Smrg fi 9101b3e38ee4Smrg addlibs="$old_convenience" 910250806d53Smrg fi 910350806d53Smrg 9104b3e38ee4Smrg if test -n "$addlibs"; then 9105b3e38ee4Smrg gentop="$output_objdir/${outputname}x" 9106a73423d7Smrg func_append generated " $gentop" 910750806d53Smrg 9108b3e38ee4Smrg func_extract_archives $gentop $addlibs 9109a73423d7Smrg func_append oldobjs " $func_extract_archives_result" 9110b3e38ee4Smrg fi 911150806d53Smrg 9112b3e38ee4Smrg # Do each command in the archive commands. 9113b3e38ee4Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114b3e38ee4Smrg cmds=$old_archive_from_new_cmds 9115b3e38ee4Smrg else 911650806d53Smrg 9117b3e38ee4Smrg # Add any objects from preloaded convenience libraries 9118b3e38ee4Smrg if test -n "$dlprefiles"; then 9119b3e38ee4Smrg gentop="$output_objdir/${outputname}x" 9120a73423d7Smrg func_append generated " $gentop" 912150806d53Smrg 9122b3e38ee4Smrg func_extract_archives $gentop $dlprefiles 9123a73423d7Smrg func_append oldobjs " $func_extract_archives_result" 9124b3e38ee4Smrg fi 912550806d53Smrg 9126b3e38ee4Smrg # POSIX demands no paths to be encoded in archives. We have 9127b3e38ee4Smrg # to avoid creating archives with duplicate basenames if we 9128b3e38ee4Smrg # might have to extract them afterwards, e.g., when creating a 9129b3e38ee4Smrg # static archive out of a convenience library, or when linking 9130b3e38ee4Smrg # the entirety of a libtool archive into another (currently 9131b3e38ee4Smrg # not supported by libtool). 9132b3e38ee4Smrg if (for obj in $oldobjs 9133b3e38ee4Smrg do 9134b3e38ee4Smrg func_basename "$obj" 9135b3e38ee4Smrg $ECHO "$func_basename_result" 9136b3e38ee4Smrg done | sort | sort -uc >/dev/null 2>&1); then 9137b3e38ee4Smrg : 9138b3e38ee4Smrg else 9139a73423d7Smrg echo "copying selected object files to avoid basename conflicts..." 9140b3e38ee4Smrg gentop="$output_objdir/${outputname}x" 9141a73423d7Smrg func_append generated " $gentop" 9142b3e38ee4Smrg func_mkdir_p "$gentop" 9143b3e38ee4Smrg save_oldobjs=$oldobjs 9144b3e38ee4Smrg oldobjs= 9145b3e38ee4Smrg counter=1 9146b3e38ee4Smrg for obj in $save_oldobjs 9147b3e38ee4Smrg do 9148b3e38ee4Smrg func_basename "$obj" 9149b3e38ee4Smrg objbase="$func_basename_result" 9150b3e38ee4Smrg case " $oldobjs " in 9151b3e38ee4Smrg " ") oldobjs=$obj ;; 9152b3e38ee4Smrg *[\ /]"$objbase "*) 9153b3e38ee4Smrg while :; do 9154b3e38ee4Smrg # Make sure we don't pick an alternate name that also 9155b3e38ee4Smrg # overlaps. 9156b3e38ee4Smrg newobj=lt$counter-$objbase 9157b3e38ee4Smrg func_arith $counter + 1 9158b3e38ee4Smrg counter=$func_arith_result 9159b3e38ee4Smrg case " $oldobjs " in 9160b3e38ee4Smrg *[\ /]"$newobj "*) ;; 9161b3e38ee4Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162b3e38ee4Smrg esac 9163b3e38ee4Smrg done 9164b3e38ee4Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9165a73423d7Smrg func_append oldobjs " $gentop/$newobj" 9166b3e38ee4Smrg ;; 9167a73423d7Smrg *) func_append oldobjs " $obj" ;; 9168b3e38ee4Smrg esac 916950806d53Smrg done 9170af1a9c97Smrg fi 9171a73423d7Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9172a73423d7Smrg tool_oldlib=$func_to_tool_file_result 9173b3e38ee4Smrg eval cmds=\"$old_archive_cmds\" 9174a18ebfb2Smrg 9175b3e38ee4Smrg func_len " $cmds" 9176b3e38ee4Smrg len=$func_len_result 9177b3e38ee4Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178b3e38ee4Smrg cmds=$old_archive_cmds 9179a73423d7Smrg elif test -n "$archiver_list_spec"; then 9180a73423d7Smrg func_verbose "using command file archive linking..." 9181a73423d7Smrg for obj in $oldobjs 9182a73423d7Smrg do 9183a73423d7Smrg func_to_tool_file "$obj" 9184a73423d7Smrg $ECHO "$func_to_tool_file_result" 9185a73423d7Smrg done > $output_objdir/$libname.libcmd 9186a73423d7Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 9187a73423d7Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9188a73423d7Smrg cmds=$old_archive_cmds 9189b3e38ee4Smrg else 9190b3e38ee4Smrg # the command line is too long to link in one step, link in parts 9191b3e38ee4Smrg func_verbose "using piecewise archive linking..." 9192b3e38ee4Smrg save_RANLIB=$RANLIB 9193b3e38ee4Smrg RANLIB=: 9194b3e38ee4Smrg objlist= 9195b3e38ee4Smrg concat_cmds= 9196b3e38ee4Smrg save_oldobjs=$oldobjs 9197b3e38ee4Smrg oldobjs= 9198b3e38ee4Smrg # Is there a better way of finding the last object in the list? 9199b3e38ee4Smrg for obj in $save_oldobjs 9200b3e38ee4Smrg do 9201b3e38ee4Smrg last_oldobj=$obj 9202b3e38ee4Smrg done 9203b3e38ee4Smrg eval test_cmds=\"$old_archive_cmds\" 9204b3e38ee4Smrg func_len " $test_cmds" 9205b3e38ee4Smrg len0=$func_len_result 9206b3e38ee4Smrg len=$len0 9207b3e38ee4Smrg for obj in $save_oldobjs 9208b3e38ee4Smrg do 9209b3e38ee4Smrg func_len " $obj" 9210b3e38ee4Smrg func_arith $len + $func_len_result 9211b3e38ee4Smrg len=$func_arith_result 9212b3e38ee4Smrg func_append objlist " $obj" 9213b3e38ee4Smrg if test "$len" -lt "$max_cmd_len"; then 9214b3e38ee4Smrg : 9215b3e38ee4Smrg else 9216b3e38ee4Smrg # the above command should be used before it gets too long 9217b3e38ee4Smrg oldobjs=$objlist 9218b3e38ee4Smrg if test "$obj" = "$last_oldobj" ; then 9219b3e38ee4Smrg RANLIB=$save_RANLIB 9220b3e38ee4Smrg fi 9221b3e38ee4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222b3e38ee4Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223b3e38ee4Smrg objlist= 9224b3e38ee4Smrg len=$len0 9225b3e38ee4Smrg fi 9226b3e38ee4Smrg done 9227b3e38ee4Smrg RANLIB=$save_RANLIB 9228b3e38ee4Smrg oldobjs=$objlist 9229b3e38ee4Smrg if test "X$oldobjs" = "X" ; then 9230b3e38ee4Smrg eval cmds=\"\$concat_cmds\" 9231b3e38ee4Smrg else 9232b3e38ee4Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233b3e38ee4Smrg fi 9234b3e38ee4Smrg fi 9235b3e38ee4Smrg fi 9236b3e38ee4Smrg func_execute_cmds "$cmds" 'exit $?' 923750806d53Smrg done 923850806d53Smrg 9239b3e38ee4Smrg test -n "$generated" && \ 9240b3e38ee4Smrg func_show_eval "${RM}r$generated" 924150806d53Smrg 9242b3e38ee4Smrg # Now create the libtool archive. 9243b3e38ee4Smrg case $output in 9244b3e38ee4Smrg *.la) 9245b3e38ee4Smrg old_library= 9246b3e38ee4Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9247b3e38ee4Smrg func_verbose "creating $output" 9248af1a9c97Smrg 9249b3e38ee4Smrg # Preserve any variables that may affect compiler behavior 9250b3e38ee4Smrg for var in $variables_saved_for_relink; do 9251b3e38ee4Smrg if eval test -z \"\${$var+set}\"; then 9252b3e38ee4Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253b3e38ee4Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9254b3e38ee4Smrg relink_command="$var=; export $var; $relink_command" 9255a18ebfb2Smrg else 9256b3e38ee4Smrg func_quote_for_eval "$var_value" 9257b3e38ee4Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9258a18ebfb2Smrg fi 9259b3e38ee4Smrg done 9260b3e38ee4Smrg # Quote the link command for shipping. 9261b3e38ee4Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9262a73423d7Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263b3e38ee4Smrg if test "$hardcode_automatic" = yes ; then 9264b3e38ee4Smrg relink_command= 9265b3e38ee4Smrg fi 926650806d53Smrg 9267b3e38ee4Smrg # Only create the output if not a dry run. 9268b3e38ee4Smrg $opt_dry_run || { 9269b3e38ee4Smrg for installed in no yes; do 9270b3e38ee4Smrg if test "$installed" = yes; then 9271b3e38ee4Smrg if test -z "$install_libdir"; then 9272b3e38ee4Smrg break 9273b3e38ee4Smrg fi 9274b3e38ee4Smrg output="$output_objdir/$outputname"i 9275b3e38ee4Smrg # Replace all uninstalled libtool libraries with the installed ones 9276b3e38ee4Smrg newdependency_libs= 9277b3e38ee4Smrg for deplib in $dependency_libs; do 9278b3e38ee4Smrg case $deplib in 9279b3e38ee4Smrg *.la) 9280b3e38ee4Smrg func_basename "$deplib" 9281b3e38ee4Smrg name="$func_basename_result" 9282a73423d7Smrg func_resolve_sysroot "$deplib" 9283a73423d7Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284b3e38ee4Smrg test -z "$libdir" && \ 9285b3e38ee4Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 9286a73423d7Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9287a73423d7Smrg ;; 9288a73423d7Smrg -L*) 9289a73423d7Smrg func_stripname -L '' "$deplib" 9290a73423d7Smrg func_replace_sysroot "$func_stripname_result" 9291a73423d7Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9292b3e38ee4Smrg ;; 9293a73423d7Smrg -R*) 9294a73423d7Smrg func_stripname -R '' "$deplib" 9295a73423d7Smrg func_replace_sysroot "$func_stripname_result" 9296a73423d7Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 9297a73423d7Smrg ;; 9298a73423d7Smrg *) func_append newdependency_libs " $deplib" ;; 9299b3e38ee4Smrg esac 9300b3e38ee4Smrg done 9301b3e38ee4Smrg dependency_libs="$newdependency_libs" 9302b3e38ee4Smrg newdlfiles= 9303b3e38ee4Smrg 9304b3e38ee4Smrg for lib in $dlfiles; do 9305b3e38ee4Smrg case $lib in 9306b3e38ee4Smrg *.la) 9307b3e38ee4Smrg func_basename "$lib" 9308b3e38ee4Smrg name="$func_basename_result" 9309b3e38ee4Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310b3e38ee4Smrg test -z "$libdir" && \ 9311b3e38ee4Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 9312a73423d7Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313b3e38ee4Smrg ;; 9314a73423d7Smrg *) func_append newdlfiles " $lib" ;; 9315b3e38ee4Smrg esac 9316b3e38ee4Smrg done 9317b3e38ee4Smrg dlfiles="$newdlfiles" 9318b3e38ee4Smrg newdlprefiles= 9319b3e38ee4Smrg for lib in $dlprefiles; do 9320b3e38ee4Smrg case $lib in 9321b3e38ee4Smrg *.la) 9322b3e38ee4Smrg # Only pass preopened files to the pseudo-archive (for 9323b3e38ee4Smrg # eventual linking with the app. that links it) if we 9324b3e38ee4Smrg # didn't already link the preopened objects directly into 9325b3e38ee4Smrg # the library: 9326b3e38ee4Smrg func_basename "$lib" 9327b3e38ee4Smrg name="$func_basename_result" 9328b3e38ee4Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329b3e38ee4Smrg test -z "$libdir" && \ 9330b3e38ee4Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 9331a73423d7Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332b3e38ee4Smrg ;; 9333b3e38ee4Smrg esac 9334b3e38ee4Smrg done 9335b3e38ee4Smrg dlprefiles="$newdlprefiles" 9336b3e38ee4Smrg else 9337b3e38ee4Smrg newdlfiles= 9338b3e38ee4Smrg for lib in $dlfiles; do 9339b3e38ee4Smrg case $lib in 9340b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341b3e38ee4Smrg *) abs=`pwd`"/$lib" ;; 9342b3e38ee4Smrg esac 9343a73423d7Smrg func_append newdlfiles " $abs" 9344b3e38ee4Smrg done 9345b3e38ee4Smrg dlfiles="$newdlfiles" 9346b3e38ee4Smrg newdlprefiles= 9347b3e38ee4Smrg for lib in $dlprefiles; do 9348b3e38ee4Smrg case $lib in 9349b3e38ee4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350b3e38ee4Smrg *) abs=`pwd`"/$lib" ;; 9351b3e38ee4Smrg esac 9352a73423d7Smrg func_append newdlprefiles " $abs" 9353b3e38ee4Smrg done 9354b3e38ee4Smrg dlprefiles="$newdlprefiles" 9355b3e38ee4Smrg fi 9356b3e38ee4Smrg $RM $output 9357b3e38ee4Smrg # place dlname in correct position for cygwin 9358a73423d7Smrg # In fact, it would be nice if we could use this code for all target 9359a73423d7Smrg # systems that can't hard-code library paths into their executables 9360a73423d7Smrg # and that have no shared library path variable independent of PATH, 9361a73423d7Smrg # but it turns out we can't easily determine that from inspecting 9362a73423d7Smrg # libtool variables, so we have to hard-code the OSs to which it 9363a73423d7Smrg # applies here; at the moment, that means platforms that use the PE 9364a73423d7Smrg # object format with DLL files. See the long comment at the top of 9365a73423d7Smrg # tests/bindir.at for full details. 9366b3e38ee4Smrg tdlname=$dlname 9367b3e38ee4Smrg case $host,$output,$installed,$module,$dlname in 9368a73423d7Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9369a73423d7Smrg # If a -bindir argument was supplied, place the dll there. 9370a73423d7Smrg if test "x$bindir" != x ; 9371a73423d7Smrg then 9372a73423d7Smrg func_relative_path "$install_libdir" "$bindir" 9373a73423d7Smrg tdlname=$func_relative_path_result$dlname 9374a73423d7Smrg else 9375a73423d7Smrg # Otherwise fall back on heuristic. 9376a73423d7Smrg tdlname=../bin/$dlname 9377a73423d7Smrg fi 9378a73423d7Smrg ;; 9379b3e38ee4Smrg esac 9380b3e38ee4Smrg $ECHO > $output "\ 9381b3e38ee4Smrg# $outputname - a libtool library file 9382b3e38ee4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383b3e38ee4Smrg# 9384b3e38ee4Smrg# Please DO NOT delete this file! 9385b3e38ee4Smrg# It is necessary for linking the library. 938650806d53Smrg 9387b3e38ee4Smrg# The name that we can dlopen(3). 9388b3e38ee4Smrgdlname='$tdlname' 938950806d53Smrg 9390b3e38ee4Smrg# Names of this library. 9391b3e38ee4Smrglibrary_names='$library_names' 939250806d53Smrg 9393b3e38ee4Smrg# The name of the static archive. 9394b3e38ee4Smrgold_library='$old_library' 939550806d53Smrg 9396b3e38ee4Smrg# Linker flags that can not go in dependency_libs. 9397b3e38ee4Smrginherited_linker_flags='$new_inherited_linker_flags' 939850806d53Smrg 9399b3e38ee4Smrg# Libraries that this one depends upon. 9400b3e38ee4Smrgdependency_libs='$dependency_libs' 940150806d53Smrg 9402b3e38ee4Smrg# Names of additional weak libraries provided by this library 9403b3e38ee4Smrgweak_library_names='$weak_libs' 940450806d53Smrg 9405b3e38ee4Smrg# Version information for $libname. 9406b3e38ee4Smrgcurrent=$current 9407b3e38ee4Smrgage=$age 9408b3e38ee4Smrgrevision=$revision 940950806d53Smrg 9410b3e38ee4Smrg# Is this an already installed library? 9411b3e38ee4Smrginstalled=$installed 941250806d53Smrg 9413b3e38ee4Smrg# Should we warn about portability when linking against -modules? 9414b3e38ee4Smrgshouldnotlink=$module 941550806d53Smrg 9416b3e38ee4Smrg# Files to dlopen/dlpreopen 9417b3e38ee4Smrgdlopen='$dlfiles' 9418b3e38ee4Smrgdlpreopen='$dlprefiles' 941950806d53Smrg 9420b3e38ee4Smrg# Directory that this library needs to be installed in: 9421b3e38ee4Smrglibdir='$install_libdir'" 9422b3e38ee4Smrg if test "$installed" = no && test "$need_relink" = yes; then 9423b3e38ee4Smrg $ECHO >> $output "\ 9424b3e38ee4Smrgrelink_command=\"$relink_command\"" 9425b3e38ee4Smrg fi 9426b3e38ee4Smrg done 9427b3e38ee4Smrg } 942850806d53Smrg 9429b3e38ee4Smrg # Do a symbolic link so that the libtool archive can be found in 9430b3e38ee4Smrg # LD_LIBRARY_PATH before the program is installed. 9431b3e38ee4Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432b3e38ee4Smrg ;; 9433b3e38ee4Smrg esac 9434b3e38ee4Smrg exit $EXIT_SUCCESS 9435b3e38ee4Smrg} 9436a18ebfb2Smrg 9437a73423d7Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438b3e38ee4Smrg func_mode_link ${1+"$@"} 943950806d53Smrg 944050806d53Smrg 9441b3e38ee4Smrg# func_mode_uninstall arg... 9442b3e38ee4Smrgfunc_mode_uninstall () 9443b3e38ee4Smrg{ 9444b3e38ee4Smrg $opt_debug 9445b3e38ee4Smrg RM="$nonopt" 944650806d53Smrg files= 944750806d53Smrg rmforce= 944850806d53Smrg exit_status=0 944950806d53Smrg 945050806d53Smrg # This variable tells wrapper scripts just to set variables rather 945150806d53Smrg # than running their programs. 945250806d53Smrg libtool_install_magic="$magic" 945350806d53Smrg 945450806d53Smrg for arg 945550806d53Smrg do 945650806d53Smrg case $arg in 9457a73423d7Smrg -f) func_append RM " $arg"; rmforce=yes ;; 9458a73423d7Smrg -*) func_append RM " $arg" ;; 9459a73423d7Smrg *) func_append files " $arg" ;; 946050806d53Smrg esac 946150806d53Smrg done 946250806d53Smrg 9463b3e38ee4Smrg test -z "$RM" && \ 9464b3e38ee4Smrg func_fatal_help "you must specify an RM program" 946550806d53Smrg 946650806d53Smrg rmdirs= 946750806d53Smrg 946850806d53Smrg for file in $files; do 9469b3e38ee4Smrg func_dirname "$file" "" "." 9470b3e38ee4Smrg dir="$func_dirname_result" 9471b3e38ee4Smrg if test "X$dir" = X.; then 9472a73423d7Smrg odir="$objdir" 947350806d53Smrg else 9474a73423d7Smrg odir="$dir/$objdir" 947550806d53Smrg fi 9476b3e38ee4Smrg func_basename "$file" 9477b3e38ee4Smrg name="$func_basename_result" 9478a73423d7Smrg test "$opt_mode" = uninstall && odir="$dir" 947950806d53Smrg 9480a73423d7Smrg # Remember odir for removal later, being careful to avoid duplicates 9481a73423d7Smrg if test "$opt_mode" = clean; then 948250806d53Smrg case " $rmdirs " in 9483a73423d7Smrg *" $odir "*) ;; 9484a73423d7Smrg *) func_append rmdirs " $odir" ;; 948550806d53Smrg esac 948650806d53Smrg fi 948750806d53Smrg 948850806d53Smrg # Don't error if the file doesn't exist and rm -f was used. 9489b3e38ee4Smrg if { test -L "$file"; } >/dev/null 2>&1 || 9490b3e38ee4Smrg { test -h "$file"; } >/dev/null 2>&1 || 9491b3e38ee4Smrg test -f "$file"; then 949250806d53Smrg : 949350806d53Smrg elif test -d "$file"; then 949450806d53Smrg exit_status=1 949550806d53Smrg continue 949650806d53Smrg elif test "$rmforce" = yes; then 949750806d53Smrg continue 949850806d53Smrg fi 949950806d53Smrg 950050806d53Smrg rmfiles="$file" 950150806d53Smrg 950250806d53Smrg case $name in 950350806d53Smrg *.la) 950450806d53Smrg # Possibly a libtool archive, so verify it. 9505b3e38ee4Smrg if func_lalib_p "$file"; then 9506b3e38ee4Smrg func_source $dir/$name 950750806d53Smrg 950850806d53Smrg # Delete the libtool libraries and symlinks. 950950806d53Smrg for n in $library_names; do 9510a73423d7Smrg func_append rmfiles " $odir/$n" 951150806d53Smrg done 9512a73423d7Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 951350806d53Smrg 9514a73423d7Smrg case "$opt_mode" in 951550806d53Smrg clean) 9516a73423d7Smrg case " $library_names " in 951750806d53Smrg *" $dlname "*) ;; 9518a73423d7Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 951950806d53Smrg esac 9520a73423d7Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 952150806d53Smrg ;; 952250806d53Smrg uninstall) 952350806d53Smrg if test -n "$library_names"; then 952450806d53Smrg # Do each command in the postuninstall commands. 9525b3e38ee4Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 952650806d53Smrg fi 952750806d53Smrg 952850806d53Smrg if test -n "$old_library"; then 952950806d53Smrg # Do each command in the old_postuninstall commands. 9530b3e38ee4Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 953150806d53Smrg fi 953250806d53Smrg # FIXME: should reinstall the best remaining shared library. 953350806d53Smrg ;; 953450806d53Smrg esac 953550806d53Smrg fi 953650806d53Smrg ;; 953750806d53Smrg 953850806d53Smrg *.lo) 953950806d53Smrg # Possibly a libtool object, so verify it. 9540b3e38ee4Smrg if func_lalib_p "$file"; then 954150806d53Smrg 954250806d53Smrg # Read the .lo file 9543b3e38ee4Smrg func_source $dir/$name 954450806d53Smrg 954550806d53Smrg # Add PIC object to the list of files to remove. 9546b3e38ee4Smrg if test -n "$pic_object" && 9547b3e38ee4Smrg test "$pic_object" != none; then 9548a73423d7Smrg func_append rmfiles " $dir/$pic_object" 954950806d53Smrg fi 955050806d53Smrg 955150806d53Smrg # Add non-PIC object to the list of files to remove. 9552b3e38ee4Smrg if test -n "$non_pic_object" && 9553b3e38ee4Smrg test "$non_pic_object" != none; then 9554a73423d7Smrg func_append rmfiles " $dir/$non_pic_object" 955550806d53Smrg fi 955650806d53Smrg fi 955750806d53Smrg ;; 955850806d53Smrg 955950806d53Smrg *) 9560a73423d7Smrg if test "$opt_mode" = clean ; then 956150806d53Smrg noexename=$name 956250806d53Smrg case $file in 956350806d53Smrg *.exe) 9564b3e38ee4Smrg func_stripname '' '.exe' "$file" 9565b3e38ee4Smrg file=$func_stripname_result 9566b3e38ee4Smrg func_stripname '' '.exe' "$name" 9567b3e38ee4Smrg noexename=$func_stripname_result 956850806d53Smrg # $file with .exe has already been added to rmfiles, 956950806d53Smrg # add $file without .exe 9570a73423d7Smrg func_append rmfiles " $file" 957150806d53Smrg ;; 957250806d53Smrg esac 957350806d53Smrg # Do a test to see if this is a libtool program. 9574b3e38ee4Smrg if func_ltwrapper_p "$file"; then 9575b3e38ee4Smrg if func_ltwrapper_executable_p "$file"; then 9576b3e38ee4Smrg func_ltwrapper_scriptname "$file" 9577b3e38ee4Smrg relink_command= 9578b3e38ee4Smrg func_source $func_ltwrapper_scriptname_result 9579a73423d7Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9580b3e38ee4Smrg else 9581b3e38ee4Smrg relink_command= 9582b3e38ee4Smrg func_source $dir/$noexename 9583b3e38ee4Smrg fi 958450806d53Smrg 958550806d53Smrg # note $name still contains .exe if it was in $file originally 958650806d53Smrg # as does the version of $file that was added into $rmfiles 9587a73423d7Smrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 958850806d53Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 9589a73423d7Smrg func_append rmfiles " $odir/lt-$name" 959050806d53Smrg fi 959150806d53Smrg if test "X$noexename" != "X$name" ; then 9592a73423d7Smrg func_append rmfiles " $odir/lt-${noexename}.c" 959350806d53Smrg fi 959450806d53Smrg fi 959550806d53Smrg fi 959650806d53Smrg ;; 959750806d53Smrg esac 9598b3e38ee4Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 959950806d53Smrg done 960050806d53Smrg 960150806d53Smrg # Try to remove the ${objdir}s in the directories where we deleted files 960250806d53Smrg for dir in $rmdirs; do 960350806d53Smrg if test -d "$dir"; then 9604b3e38ee4Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 960550806d53Smrg fi 960650806d53Smrg done 960750806d53Smrg 960850806d53Smrg exit $exit_status 9609b3e38ee4Smrg} 961050806d53Smrg 9611a73423d7Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612b3e38ee4Smrg func_mode_uninstall ${1+"$@"} 9613af1a9c97Smrg 9614a73423d7Smrgtest -z "$opt_mode" && { 9615b3e38ee4Smrg help="$generic_help" 9616b3e38ee4Smrg func_fatal_help "you must specify a MODE" 9617b3e38ee4Smrg} 9618b3e38ee4Smrg 9619b3e38ee4Smrgtest -z "$exec_cmd" && \ 9620a73423d7Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 962150806d53Smrg 962250806d53Smrgif test -n "$exec_cmd"; then 9623b3e38ee4Smrg eval exec "$exec_cmd" 962450806d53Smrg exit $EXIT_FAILURE 962550806d53Smrgfi 962650806d53Smrg 9627b3e38ee4Smrgexit $exit_status 962850806d53Smrg 962950806d53Smrg 963050806d53Smrg# The TAGs below are defined such that we never get into a situation 963150806d53Smrg# in which we disable both kinds of libraries. Given conflicting 963250806d53Smrg# choices, we go for a static library, that is the most portable, 963350806d53Smrg# since we can't tell whether shared libraries were disabled because 963450806d53Smrg# the user asked for that or because the platform doesn't support 963550806d53Smrg# them. This is particularly important on AIX, because we don't 963650806d53Smrg# support having both static and shared libraries enabled at the same 963750806d53Smrg# time on that platform, so we default to a shared-only configuration. 963850806d53Smrg# If a disable-shared tag is given, we'll fallback to a static-only 963950806d53Smrg# configuration. But we'll never go from static-only to shared-only. 964050806d53Smrg 964150806d53Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642b3e38ee4Smrgbuild_libtool_libs=no 9643b3e38ee4Smrgbuild_old_libs=yes 964450806d53Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 964550806d53Smrg 964650806d53Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647b3e38ee4Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 964850806d53Smrg# ### END LIBTOOL TAG CONFIG: disable-static 964950806d53Smrg 965050806d53Smrg# Local Variables: 965150806d53Smrg# mode:shell-script 965250806d53Smrg# sh-indentation:2 965350806d53Smrg# End: 9654b3e38ee4Smrg# vi:sw=2 9655b3e38ee4Smrg 9656