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