ltmain.sh revision 313a12fd
1e19dfac4Smrg 2313a12fdSmrg# libtool (GNU libtool) 2.4.2 3e19dfac4Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4e19dfac4Smrg 5313a12fdSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 6313a12fdSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7e19dfac4Smrg# This is free software; see the source for copying conditions. There is NO 8e19dfac4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9e19dfac4Smrg 10e19dfac4Smrg# GNU Libtool is free software; you can redistribute it and/or modify 1127702724Smrg# it under the terms of the GNU General Public License as published by 1227702724Smrg# the Free Software Foundation; either version 2 of the License, or 1327702724Smrg# (at your option) any later version. 1427702724Smrg# 15e19dfac4Smrg# As a special exception to the GNU General Public License, 16e19dfac4Smrg# if you distribute this file as part of a program or library that 17e19dfac4Smrg# is built using GNU Libtool, you may include this file under the 18e19dfac4Smrg# same distribution terms that you use for the rest of that program. 19e19dfac4Smrg# 20e19dfac4Smrg# GNU Libtool is distributed in the hope that it will be useful, but 2127702724Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 2227702724Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 2327702724Smrg# General Public License for more details. 2427702724Smrg# 2527702724Smrg# You should have received a copy of the GNU General Public License 26e19dfac4Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 27e19dfac4Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28e19dfac4Smrg# or obtained by writing to the Free Software Foundation, Inc., 29e19dfac4Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30e19dfac4Smrg 31e19dfac4Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 32e19dfac4Smrg# 33e19dfac4Smrg# Provide generalized library-building support services. 3427702724Smrg# 35313a12fdSmrg# --config show all configuration variables 36313a12fdSmrg# --debug enable verbose shell tracing 37313a12fdSmrg# -n, --dry-run display commands without modifying any files 38313a12fdSmrg# --features display basic configuration information and exit 39313a12fdSmrg# --mode=MODE use operation mode MODE 40313a12fdSmrg# --preserve-dup-deps don't remove duplicate dependency libraries 41313a12fdSmrg# --quiet, --silent don't print informational messages 42313a12fdSmrg# --no-quiet, --no-silent 43313a12fdSmrg# print informational messages (default) 44313a12fdSmrg# --no-warn don't display warning messages 45313a12fdSmrg# --tag=TAG use configuration variables from tag TAG 46313a12fdSmrg# -v, --verbose print more informational messages than default 47313a12fdSmrg# --no-verbose don't print the extra informational messages 48313a12fdSmrg# --version print version information 49313a12fdSmrg# -h, --help, --help-all print short, long, or detailed help message 50e19dfac4Smrg# 51e19dfac4Smrg# MODE must be one of the following: 52e19dfac4Smrg# 53313a12fdSmrg# clean remove files from the build directory 54313a12fdSmrg# compile compile a source file into a libtool object 55313a12fdSmrg# execute automatically set library path, then run a program 56313a12fdSmrg# finish complete the installation of libtool libraries 57313a12fdSmrg# install install libraries or executables 58313a12fdSmrg# link create a library or an executable 59313a12fdSmrg# uninstall remove libraries from an installed directory 60e19dfac4Smrg# 61313a12fdSmrg# MODE-ARGS vary depending on the MODE. When passed as first option, 62313a12fdSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63e19dfac4Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64e19dfac4Smrg# 65e19dfac4Smrg# When reporting a bug, please describe a test case to reproduce it and 66e19dfac4Smrg# include the following information: 67e19dfac4Smrg# 68313a12fdSmrg# host-triplet: $host 69313a12fdSmrg# shell: $SHELL 70313a12fdSmrg# compiler: $LTCC 71313a12fdSmrg# compiler flags: $LTCFLAGS 72313a12fdSmrg# linker: $LD (gnu? $with_gnu_ld) 73313a12fdSmrg# $progname: (GNU libtool) 2.4.2 74313a12fdSmrg# automake: $automake_version 75313a12fdSmrg# autoconf: $autoconf_version 76e19dfac4Smrg# 77e19dfac4Smrg# Report bugs to <bug-libtool@gnu.org>. 78313a12fdSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 79313a12fdSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 80e19dfac4Smrg 81313a12fdSmrgPROGRAM=libtool 82e19dfac4SmrgPACKAGE=libtool 83313a12fdSmrgVERSION=2.4.2 84e19dfac4SmrgTIMESTAMP="" 85313a12fdSmrgpackage_revision=1.3337 86e19dfac4Smrg 87e19dfac4Smrg# Be Bourne compatible 88e19dfac4Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 89e19dfac4Smrg emulate sh 90e19dfac4Smrg NULLCMD=: 91e19dfac4Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 92e19dfac4Smrg # is contrary to our usage. Disable this feature. 93e19dfac4Smrg alias -g '${1+"$@"}'='"$@"' 94e19dfac4Smrg setopt NO_GLOB_SUBST 95e19dfac4Smrgelse 96e19dfac4Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97e19dfac4Smrgfi 98e19dfac4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 99e19dfac4SmrgDUALCASE=1; export DUALCASE # for MKS sh 100e19dfac4Smrg 101313a12fdSmrg# A function that is used when there is no print builtin or printf. 102313a12fdSmrgfunc_fallback_echo () 103313a12fdSmrg{ 104313a12fdSmrg eval 'cat <<_LTECHO_EOF 105313a12fdSmrg$1 106313a12fdSmrg_LTECHO_EOF' 107313a12fdSmrg} 108313a12fdSmrg 109e19dfac4Smrg# NLS nuisances: We save the old values to restore during execute mode. 110e19dfac4Smrglt_user_locale= 111e19dfac4Smrglt_safe_locale= 112e19dfac4Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 113e19dfac4Smrgdo 114e19dfac4Smrg eval "if test \"\${$lt_var+set}\" = set; then 115e19dfac4Smrg save_$lt_var=\$$lt_var 116e19dfac4Smrg $lt_var=C 117e19dfac4Smrg export $lt_var 118e19dfac4Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119e19dfac4Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 120e19dfac4Smrg fi" 121e19dfac4Smrgdone 122313a12fdSmrgLC_ALL=C 123313a12fdSmrgLANGUAGE=C 124313a12fdSmrgexport LANGUAGE LC_ALL 125e19dfac4Smrg 126e19dfac4Smrg$lt_unset CDPATH 127e19dfac4Smrg 128e19dfac4Smrg 129313a12fdSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 130313a12fdSmrg# is ksh but when the shell is invoked as "sh" and the current value of 131313a12fdSmrg# the _XPG environment variable is not equal to 1 (one), the special 132313a12fdSmrg# positional parameter $0, within a function call, is the name of the 133313a12fdSmrg# function. 134313a12fdSmrgprogpath="$0" 135e19dfac4Smrg 136e19dfac4Smrg 137e19dfac4Smrg 138e19dfac4Smrg: ${CP="cp -f"} 139313a12fdSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140e19dfac4Smrg: ${MAKE="make"} 141e19dfac4Smrg: ${MKDIR="mkdir"} 142e19dfac4Smrg: ${MV="mv -f"} 143e19dfac4Smrg: ${RM="rm -f"} 144e19dfac4Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145e19dfac4Smrg: ${Xsed="$SED -e 1s/^X//"} 14627702724Smrg 147e19dfac4Smrg# Global variables: 148e19dfac4SmrgEXIT_SUCCESS=0 149e19dfac4SmrgEXIT_FAILURE=1 150e19dfac4SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151e19dfac4SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152e19dfac4Smrg 153e19dfac4Smrgexit_status=$EXIT_SUCCESS 154e19dfac4Smrg 155e19dfac4Smrg# Make sure IFS has a sensible default 156e19dfac4Smrglt_nl=' 157e19dfac4Smrg' 158e19dfac4SmrgIFS=" $lt_nl" 159e19dfac4Smrg 160e19dfac4Smrgdirname="s,/[^/]*$,," 161e19dfac4Smrgbasename="s,^.*/,," 162e19dfac4Smrg 163313a12fdSmrg# func_dirname file append nondir_replacement 164313a12fdSmrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 165313a12fdSmrg# otherwise set result to NONDIR_REPLACEMENT. 166313a12fdSmrgfunc_dirname () 167313a12fdSmrg{ 168313a12fdSmrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 169313a12fdSmrg if test "X$func_dirname_result" = "X${1}"; then 170313a12fdSmrg func_dirname_result="${3}" 171313a12fdSmrg else 172313a12fdSmrg func_dirname_result="$func_dirname_result${2}" 173313a12fdSmrg fi 174313a12fdSmrg} # func_dirname may be replaced by extended shell implementation 175313a12fdSmrg 176313a12fdSmrg 177313a12fdSmrg# func_basename file 178313a12fdSmrgfunc_basename () 179313a12fdSmrg{ 180313a12fdSmrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 181313a12fdSmrg} # func_basename may be replaced by extended shell implementation 182313a12fdSmrg 183313a12fdSmrg 184e19dfac4Smrg# func_dirname_and_basename file append nondir_replacement 185e19dfac4Smrg# perform func_basename and func_dirname in a single function 186e19dfac4Smrg# call: 187e19dfac4Smrg# dirname: Compute the dirname of FILE. If nonempty, 188e19dfac4Smrg# add APPEND to the result, otherwise set result 189e19dfac4Smrg# to NONDIR_REPLACEMENT. 190e19dfac4Smrg# value returned in "$func_dirname_result" 191e19dfac4Smrg# basename: Compute filename of FILE. 192e19dfac4Smrg# value retuned in "$func_basename_result" 193e19dfac4Smrg# Implementation must be kept synchronized with func_dirname 194e19dfac4Smrg# and func_basename. For efficiency, we do not delegate to 195e19dfac4Smrg# those functions but instead duplicate the functionality here. 196e19dfac4Smrgfunc_dirname_and_basename () 197e19dfac4Smrg{ 198313a12fdSmrg # Extract subdirectory from the argument. 199313a12fdSmrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 200313a12fdSmrg if test "X$func_dirname_result" = "X${1}"; then 201313a12fdSmrg func_dirname_result="${3}" 202313a12fdSmrg else 203313a12fdSmrg func_dirname_result="$func_dirname_result${2}" 204313a12fdSmrg fi 205313a12fdSmrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 206313a12fdSmrg} # func_dirname_and_basename may be replaced by extended shell implementation 207313a12fdSmrg 208313a12fdSmrg 209313a12fdSmrg# func_stripname prefix suffix name 210313a12fdSmrg# strip PREFIX and SUFFIX off of NAME. 211313a12fdSmrg# PREFIX and SUFFIX must not contain globbing or regex special 212313a12fdSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading 213313a12fdSmrg# dot (in which case that matches only a dot). 214313a12fdSmrg# func_strip_suffix prefix name 215313a12fdSmrgfunc_stripname () 216313a12fdSmrg{ 217313a12fdSmrg case ${2} in 218313a12fdSmrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 219313a12fdSmrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 220313a12fdSmrg esac 221313a12fdSmrg} # func_stripname may be replaced by extended shell implementation 222313a12fdSmrg 223313a12fdSmrg 224313a12fdSmrg# These SED scripts presuppose an absolute path with a trailing slash. 225313a12fdSmrgpathcar='s,^/\([^/]*\).*$,\1,' 226313a12fdSmrgpathcdr='s,^/[^/]*,,' 227313a12fdSmrgremovedotparts=':dotsl 228313a12fdSmrg s@/\./@/@g 229313a12fdSmrg t dotsl 230313a12fdSmrg s,/\.$,/,' 231313a12fdSmrgcollapseslashes='s@/\{1,\}@/@g' 232313a12fdSmrgfinalslash='s,/*$,/,' 233313a12fdSmrg 234313a12fdSmrg# func_normal_abspath PATH 235313a12fdSmrg# Remove doubled-up and trailing slashes, "." path components, 236313a12fdSmrg# and cancel out any ".." path components in PATH after making 237313a12fdSmrg# it an absolute path. 238313a12fdSmrg# value returned in "$func_normal_abspath_result" 239313a12fdSmrgfunc_normal_abspath () 240313a12fdSmrg{ 241313a12fdSmrg # Start from root dir and reassemble the path. 242313a12fdSmrg func_normal_abspath_result= 243313a12fdSmrg func_normal_abspath_tpath=$1 244313a12fdSmrg func_normal_abspath_altnamespace= 245313a12fdSmrg case $func_normal_abspath_tpath in 246313a12fdSmrg "") 247313a12fdSmrg # Empty path, that just means $cwd. 248313a12fdSmrg func_stripname '' '/' "`pwd`" 249313a12fdSmrg func_normal_abspath_result=$func_stripname_result 250313a12fdSmrg return 251313a12fdSmrg ;; 252313a12fdSmrg # The next three entries are used to spot a run of precisely 253313a12fdSmrg # two leading slashes without using negated character classes; 254313a12fdSmrg # we take advantage of case's first-match behaviour. 255313a12fdSmrg ///*) 256313a12fdSmrg # Unusual form of absolute path, do nothing. 257313a12fdSmrg ;; 258313a12fdSmrg //*) 259313a12fdSmrg # Not necessarily an ordinary path; POSIX reserves leading '//' 260313a12fdSmrg # and for example Cygwin uses it to access remote file shares 261313a12fdSmrg # over CIFS/SMB, so we conserve a leading double slash if found. 262313a12fdSmrg func_normal_abspath_altnamespace=/ 263313a12fdSmrg ;; 264313a12fdSmrg /*) 265313a12fdSmrg # Absolute path, do nothing. 266313a12fdSmrg ;; 267313a12fdSmrg *) 268313a12fdSmrg # Relative path, prepend $cwd. 269313a12fdSmrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 270313a12fdSmrg ;; 271313a12fdSmrg esac 272313a12fdSmrg # Cancel out all the simple stuff to save iterations. We also want 273313a12fdSmrg # the path to end with a slash for ease of parsing, so make sure 274313a12fdSmrg # there is one (and only one) here. 275313a12fdSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 276313a12fdSmrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 277313a12fdSmrg while :; do 278313a12fdSmrg # Processed it all yet? 279313a12fdSmrg if test "$func_normal_abspath_tpath" = / ; then 280313a12fdSmrg # If we ascended to the root using ".." the result may be empty now. 281313a12fdSmrg if test -z "$func_normal_abspath_result" ; then 282313a12fdSmrg func_normal_abspath_result=/ 283313a12fdSmrg fi 284313a12fdSmrg break 285313a12fdSmrg fi 286313a12fdSmrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 287313a12fdSmrg -e "$pathcar"` 288313a12fdSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 289313a12fdSmrg -e "$pathcdr"` 290313a12fdSmrg # Figure out what to do with it 291313a12fdSmrg case $func_normal_abspath_tcomponent in 292313a12fdSmrg "") 293313a12fdSmrg # Trailing empty path component, ignore it. 294313a12fdSmrg ;; 295313a12fdSmrg ..) 296313a12fdSmrg # Parent dir; strip last assembled component from result. 297313a12fdSmrg func_dirname "$func_normal_abspath_result" 298313a12fdSmrg func_normal_abspath_result=$func_dirname_result 299313a12fdSmrg ;; 300313a12fdSmrg *) 301313a12fdSmrg # Actual path component, append it. 302313a12fdSmrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 303313a12fdSmrg ;; 304313a12fdSmrg esac 305313a12fdSmrg done 306313a12fdSmrg # Restore leading double-slash if one was found on entry. 307313a12fdSmrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308e19dfac4Smrg} 309e19dfac4Smrg 310313a12fdSmrg# func_relative_path SRCDIR DSTDIR 311313a12fdSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 312313a12fdSmrg# slash if non-empty, suitable for immediately appending a filename 313313a12fdSmrg# without needing to append a separator. 314313a12fdSmrg# value returned in "$func_relative_path_result" 315313a12fdSmrgfunc_relative_path () 316313a12fdSmrg{ 317313a12fdSmrg func_relative_path_result= 318313a12fdSmrg func_normal_abspath "$1" 319313a12fdSmrg func_relative_path_tlibdir=$func_normal_abspath_result 320313a12fdSmrg func_normal_abspath "$2" 321313a12fdSmrg func_relative_path_tbindir=$func_normal_abspath_result 322313a12fdSmrg 323313a12fdSmrg # Ascend the tree starting from libdir 324313a12fdSmrg while :; do 325313a12fdSmrg # check if we have found a prefix of bindir 326313a12fdSmrg case $func_relative_path_tbindir in 327313a12fdSmrg $func_relative_path_tlibdir) 328313a12fdSmrg # found an exact match 329313a12fdSmrg func_relative_path_tcancelled= 330313a12fdSmrg break 331313a12fdSmrg ;; 332313a12fdSmrg $func_relative_path_tlibdir*) 333313a12fdSmrg # found a matching prefix 334313a12fdSmrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 335313a12fdSmrg func_relative_path_tcancelled=$func_stripname_result 336313a12fdSmrg if test -z "$func_relative_path_result"; then 337313a12fdSmrg func_relative_path_result=. 338313a12fdSmrg fi 339313a12fdSmrg break 340313a12fdSmrg ;; 341313a12fdSmrg *) 342313a12fdSmrg func_dirname $func_relative_path_tlibdir 343313a12fdSmrg func_relative_path_tlibdir=${func_dirname_result} 344313a12fdSmrg if test "x$func_relative_path_tlibdir" = x ; then 345313a12fdSmrg # Have to descend all the way to the root! 346313a12fdSmrg func_relative_path_result=../$func_relative_path_result 347313a12fdSmrg func_relative_path_tcancelled=$func_relative_path_tbindir 348313a12fdSmrg break 349313a12fdSmrg fi 350313a12fdSmrg func_relative_path_result=../$func_relative_path_result 351313a12fdSmrg ;; 352313a12fdSmrg esac 353313a12fdSmrg done 35427702724Smrg 355313a12fdSmrg # Now calculate path; take care to avoid doubling-up slashes. 356313a12fdSmrg func_stripname '' '/' "$func_relative_path_result" 357313a12fdSmrg func_relative_path_result=$func_stripname_result 358313a12fdSmrg func_stripname '/' '/' "$func_relative_path_tcancelled" 359313a12fdSmrg if test "x$func_stripname_result" != x ; then 360313a12fdSmrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 361313a12fdSmrg fi 362313a12fdSmrg 363313a12fdSmrg # Normalisation. If bindir is libdir, return empty string, 364313a12fdSmrg # else relative path ending with a slash; either way, target 365313a12fdSmrg # file name can be directly appended. 366313a12fdSmrg if test ! -z "$func_relative_path_result"; then 367313a12fdSmrg func_stripname './' '' "$func_relative_path_result/" 368313a12fdSmrg func_relative_path_result=$func_stripname_result 369313a12fdSmrg fi 370313a12fdSmrg} 37127702724Smrg 37227702724Smrg# The name of this program: 373e19dfac4Smrgfunc_dirname_and_basename "$progpath" 374e19dfac4Smrgprogname=$func_basename_result 37527702724Smrg 376e19dfac4Smrg# Make sure we have an absolute path for reexecution: 377e19dfac4Smrgcase $progpath in 378e19dfac4Smrg [\\/]*|[A-Za-z]:\\*) ;; 379e19dfac4Smrg *[\\/]*) 380e19dfac4Smrg progdir=$func_dirname_result 381e19dfac4Smrg progdir=`cd "$progdir" && pwd` 382e19dfac4Smrg progpath="$progdir/$progname" 383e19dfac4Smrg ;; 384e19dfac4Smrg *) 385e19dfac4Smrg save_IFS="$IFS" 386313a12fdSmrg IFS=${PATH_SEPARATOR-:} 387e19dfac4Smrg for progdir in $PATH; do 388e19dfac4Smrg IFS="$save_IFS" 389e19dfac4Smrg test -x "$progdir/$progname" && break 390e19dfac4Smrg done 391e19dfac4Smrg IFS="$save_IFS" 392e19dfac4Smrg test -n "$progdir" || progdir=`pwd` 393e19dfac4Smrg progpath="$progdir/$progname" 394e19dfac4Smrg ;; 395e19dfac4Smrgesac 39627702724Smrg 397e19dfac4Smrg# Sed substitution that helps us do robust quoting. It backslashifies 398e19dfac4Smrg# metacharacters that are still active within double-quoted strings. 399e19dfac4SmrgXsed="${SED}"' -e 1s/^X//' 400e19dfac4Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401e19dfac4Smrg 402e19dfac4Smrg# Same as above, but do not quote variable references. 403e19dfac4Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404e19dfac4Smrg 405313a12fdSmrg# Sed substitution that turns a string into a regex matching for the 406313a12fdSmrg# string literally. 407313a12fdSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 408313a12fdSmrg 409313a12fdSmrg# Sed substitution that converts a w32 file name or path 410313a12fdSmrg# which contains forward slashes, into one that contains 411313a12fdSmrg# (escaped) backslashes. A very naive implementation. 412313a12fdSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 413313a12fdSmrg 414e19dfac4Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 415e19dfac4Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416e19dfac4Smrg# in input to double_quote_subst, that '$' was protected from expansion. 417e19dfac4Smrg# Since each input `\' is now two `\'s, look for any number of runs of 418e19dfac4Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419e19dfac4Smrgbs='\\' 420e19dfac4Smrgbs2='\\\\' 421e19dfac4Smrgbs4='\\\\\\\\' 422e19dfac4Smrgdollar='\$' 423e19dfac4Smrgsed_double_backslash="\ 424e19dfac4Smrg s/$bs4/&\\ 425e19dfac4Smrg/g 426e19dfac4Smrg s/^$bs2$dollar/$bs&/ 427e19dfac4Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428e19dfac4Smrg s/\n//g" 429e19dfac4Smrg 430e19dfac4Smrg# Standard options: 431e19dfac4Smrgopt_dry_run=false 432e19dfac4Smrgopt_help=false 433e19dfac4Smrgopt_quiet=false 434e19dfac4Smrgopt_verbose=false 435e19dfac4Smrgopt_warning=: 436e19dfac4Smrg 437e19dfac4Smrg# func_echo arg... 438e19dfac4Smrg# Echo program name prefixed message, along with the current mode 439e19dfac4Smrg# name if it has been set yet. 440e19dfac4Smrgfunc_echo () 441e19dfac4Smrg{ 442313a12fdSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443e19dfac4Smrg} 44427702724Smrg 445e19dfac4Smrg# func_verbose arg... 446e19dfac4Smrg# Echo program name prefixed message in verbose mode only. 447e19dfac4Smrgfunc_verbose () 448e19dfac4Smrg{ 449e19dfac4Smrg $opt_verbose && func_echo ${1+"$@"} 45027702724Smrg 451e19dfac4Smrg # A bug in bash halts the script if the last line of a function 452e19dfac4Smrg # fails when set -e is in force, so we need another command to 453e19dfac4Smrg # work around that: 454e19dfac4Smrg : 455e19dfac4Smrg} 45627702724Smrg 457313a12fdSmrg# func_echo_all arg... 458313a12fdSmrg# Invoke $ECHO with all args, space-separated. 459313a12fdSmrgfunc_echo_all () 460313a12fdSmrg{ 461313a12fdSmrg $ECHO "$*" 462313a12fdSmrg} 463313a12fdSmrg 464e19dfac4Smrg# func_error arg... 465e19dfac4Smrg# Echo program name prefixed message to standard error. 466e19dfac4Smrgfunc_error () 467e19dfac4Smrg{ 468313a12fdSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469e19dfac4Smrg} 47027702724Smrg 471e19dfac4Smrg# func_warning arg... 472e19dfac4Smrg# Echo program name prefixed warning message to standard error. 473e19dfac4Smrgfunc_warning () 474e19dfac4Smrg{ 475313a12fdSmrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 47627702724Smrg 477e19dfac4Smrg # bash bug again: 478e19dfac4Smrg : 479e19dfac4Smrg} 48027702724Smrg 481e19dfac4Smrg# func_fatal_error arg... 482e19dfac4Smrg# Echo program name prefixed message to standard error, and exit. 483e19dfac4Smrgfunc_fatal_error () 484e19dfac4Smrg{ 485e19dfac4Smrg func_error ${1+"$@"} 486e19dfac4Smrg exit $EXIT_FAILURE 487e19dfac4Smrg} 48827702724Smrg 489e19dfac4Smrg# func_fatal_help arg... 490e19dfac4Smrg# Echo program name prefixed message to standard error, followed by 491e19dfac4Smrg# a help hint, and exit. 492e19dfac4Smrgfunc_fatal_help () 493e19dfac4Smrg{ 494e19dfac4Smrg func_error ${1+"$@"} 495e19dfac4Smrg func_fatal_error "$help" 496e19dfac4Smrg} 497e19dfac4Smrghelp="Try \`$progname --help' for more information." ## default 49827702724Smrg 49927702724Smrg 500e19dfac4Smrg# func_grep expression filename 501e19dfac4Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502e19dfac4Smrgfunc_grep () 503e19dfac4Smrg{ 504e19dfac4Smrg $GREP "$1" "$2" >/dev/null 2>&1 505e19dfac4Smrg} 506e19dfac4Smrg 507e19dfac4Smrg 508e19dfac4Smrg# func_mkdir_p directory-path 509e19dfac4Smrg# Make sure the entire path to DIRECTORY-PATH is available. 510e19dfac4Smrgfunc_mkdir_p () 511e19dfac4Smrg{ 512e19dfac4Smrg my_directory_path="$1" 513e19dfac4Smrg my_dir_list= 514e19dfac4Smrg 515e19dfac4Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516e19dfac4Smrg 517e19dfac4Smrg # Protect directory names starting with `-' 518e19dfac4Smrg case $my_directory_path in 519e19dfac4Smrg -*) my_directory_path="./$my_directory_path" ;; 520e19dfac4Smrg esac 521e19dfac4Smrg 522e19dfac4Smrg # While some portion of DIR does not yet exist... 523e19dfac4Smrg while test ! -d "$my_directory_path"; do 524e19dfac4Smrg # ...make a list in topmost first order. Use a colon delimited 525e19dfac4Smrg # list incase some portion of path contains whitespace. 526e19dfac4Smrg my_dir_list="$my_directory_path:$my_dir_list" 527e19dfac4Smrg 528e19dfac4Smrg # If the last portion added has no slash in it, the list is done 529e19dfac4Smrg case $my_directory_path in */*) ;; *) break ;; esac 530e19dfac4Smrg 531e19dfac4Smrg # ...otherwise throw away the child directory and loop 532313a12fdSmrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533e19dfac4Smrg done 534313a12fdSmrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535e19dfac4Smrg 536e19dfac4Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 537e19dfac4Smrg for my_dir in $my_dir_list; do 538e19dfac4Smrg IFS="$save_mkdir_p_IFS" 539e19dfac4Smrg # mkdir can fail with a `File exist' error if two processes 540e19dfac4Smrg # try to create one of the directories concurrently. Don't 541e19dfac4Smrg # stop in that case! 542e19dfac4Smrg $MKDIR "$my_dir" 2>/dev/null || : 543e19dfac4Smrg done 544e19dfac4Smrg IFS="$save_mkdir_p_IFS" 545e19dfac4Smrg 546e19dfac4Smrg # Bail out if we (or some other process) failed to create a directory. 547e19dfac4Smrg test -d "$my_directory_path" || \ 548e19dfac4Smrg func_fatal_error "Failed to create \`$1'" 549e19dfac4Smrg fi 550e19dfac4Smrg} 55127702724Smrg 55227702724Smrg 55327702724Smrg# func_mktempdir [string] 55427702724Smrg# Make a temporary directory that won't clash with other running 55527702724Smrg# libtool processes, and avoids race conditions if possible. If 55627702724Smrg# given, STRING is the basename for that directory. 55727702724Smrgfunc_mktempdir () 55827702724Smrg{ 55927702724Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 56027702724Smrg 561e19dfac4Smrg if test "$opt_dry_run" = ":"; then 56227702724Smrg # Return a directory name, but don't create it in dry-run mode 56327702724Smrg my_tmpdir="${my_template}-$$" 56427702724Smrg else 56527702724Smrg 56627702724Smrg # If mktemp works, use that first and foremost 56727702724Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 56827702724Smrg 56927702724Smrg if test ! -d "$my_tmpdir"; then 570e19dfac4Smrg # Failing that, at least try and use $RANDOM to avoid a race 571e19dfac4Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 57227702724Smrg 573e19dfac4Smrg save_mktempdir_umask=`umask` 574e19dfac4Smrg umask 0077 575e19dfac4Smrg $MKDIR "$my_tmpdir" 576e19dfac4Smrg umask $save_mktempdir_umask 57727702724Smrg fi 57827702724Smrg 57927702724Smrg # If we're not in dry-run mode, bomb out on failure 580e19dfac4Smrg test -d "$my_tmpdir" || \ 581e19dfac4Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 58227702724Smrg fi 58327702724Smrg 584313a12fdSmrg $ECHO "$my_tmpdir" 58527702724Smrg} 58627702724Smrg 58727702724Smrg 588e19dfac4Smrg# func_quote_for_eval arg 589e19dfac4Smrg# Aesthetically quote ARG to be evaled later. 590e19dfac4Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591e19dfac4Smrg# is double-quoted, suitable for a subsequent eval, whereas 592e19dfac4Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593e19dfac4Smrg# which are still active within double quotes backslashified. 594e19dfac4Smrgfunc_quote_for_eval () 59527702724Smrg{ 596e19dfac4Smrg case $1 in 597e19dfac4Smrg *[\\\`\"\$]*) 598313a12fdSmrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599e19dfac4Smrg *) 600e19dfac4Smrg func_quote_for_eval_unquoted_result="$1" ;; 601e19dfac4Smrg esac 602e19dfac4Smrg 603e19dfac4Smrg case $func_quote_for_eval_unquoted_result in 604e19dfac4Smrg # Double-quote args containing shell metacharacters to delay 605e19dfac4Smrg # word splitting, command substitution and and variable 606e19dfac4Smrg # expansion for a subsequent eval. 607e19dfac4Smrg # Many Bourne shells cannot handle close brackets correctly 608e19dfac4Smrg # in scan sets, so we specify it separately. 609e19dfac4Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610e19dfac4Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611e19dfac4Smrg ;; 612e19dfac4Smrg *) 613e19dfac4Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 61427702724Smrg esac 61527702724Smrg} 61627702724Smrg 61727702724Smrg 618e19dfac4Smrg# func_quote_for_expand arg 619e19dfac4Smrg# Aesthetically quote ARG to be evaled later; same as above, 620e19dfac4Smrg# but do not quote variable references. 621e19dfac4Smrgfunc_quote_for_expand () 62227702724Smrg{ 623e19dfac4Smrg case $1 in 624e19dfac4Smrg *[\\\`\"]*) 625313a12fdSmrg my_arg=`$ECHO "$1" | $SED \ 626e19dfac4Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 62727702724Smrg *) 628e19dfac4Smrg my_arg="$1" ;; 629e19dfac4Smrg esac 630e19dfac4Smrg 631e19dfac4Smrg case $my_arg in 632e19dfac4Smrg # Double-quote args containing shell metacharacters to delay 633e19dfac4Smrg # word splitting and command substitution for a subsequent eval. 634e19dfac4Smrg # Many Bourne shells cannot handle close brackets correctly 635e19dfac4Smrg # in scan sets, so we specify it separately. 636e19dfac4Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637e19dfac4Smrg my_arg="\"$my_arg\"" 638e19dfac4Smrg ;; 639e19dfac4Smrg esac 640e19dfac4Smrg 641e19dfac4Smrg func_quote_for_expand_result="$my_arg" 64227702724Smrg} 64327702724Smrg 64427702724Smrg 645e19dfac4Smrg# func_show_eval cmd [fail_exp] 646e19dfac4Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647e19dfac4Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648e19dfac4Smrg# is given, then evaluate it. 649e19dfac4Smrgfunc_show_eval () 65027702724Smrg{ 651e19dfac4Smrg my_cmd="$1" 652e19dfac4Smrg my_fail_exp="${2-:}" 65327702724Smrg 654e19dfac4Smrg ${opt_silent-false} || { 655e19dfac4Smrg func_quote_for_expand "$my_cmd" 656e19dfac4Smrg eval "func_echo $func_quote_for_expand_result" 657e19dfac4Smrg } 658e19dfac4Smrg 659e19dfac4Smrg if ${opt_dry_run-false}; then :; else 660e19dfac4Smrg eval "$my_cmd" 661e19dfac4Smrg my_status=$? 662e19dfac4Smrg if test "$my_status" -eq 0; then :; else 663e19dfac4Smrg eval "(exit $my_status); $my_fail_exp" 664e19dfac4Smrg fi 66527702724Smrg fi 66627702724Smrg} 66727702724Smrg 668e19dfac4Smrg 669e19dfac4Smrg# func_show_eval_locale cmd [fail_exp] 670e19dfac4Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671e19dfac4Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672e19dfac4Smrg# is given, then evaluate it. Use the saved locale for evaluation. 673e19dfac4Smrgfunc_show_eval_locale () 67427702724Smrg{ 675e19dfac4Smrg my_cmd="$1" 676e19dfac4Smrg my_fail_exp="${2-:}" 67727702724Smrg 678e19dfac4Smrg ${opt_silent-false} || { 679e19dfac4Smrg func_quote_for_expand "$my_cmd" 680e19dfac4Smrg eval "func_echo $func_quote_for_expand_result" 681e19dfac4Smrg } 682e19dfac4Smrg 683e19dfac4Smrg if ${opt_dry_run-false}; then :; else 684e19dfac4Smrg eval "$lt_user_locale 685e19dfac4Smrg $my_cmd" 686e19dfac4Smrg my_status=$? 687e19dfac4Smrg eval "$lt_safe_locale" 688e19dfac4Smrg if test "$my_status" -eq 0; then :; else 689e19dfac4Smrg eval "(exit $my_status); $my_fail_exp" 69027702724Smrg fi 691e19dfac4Smrg fi 69227702724Smrg} 69327702724Smrg 694313a12fdSmrg# func_tr_sh 695313a12fdSmrg# Turn $1 into a string suitable for a shell variable name. 696313a12fdSmrg# Result is stored in $func_tr_sh_result. All characters 697313a12fdSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 698313a12fdSmrg# if $1 begins with a digit, a '_' is prepended as well. 699313a12fdSmrgfunc_tr_sh () 700313a12fdSmrg{ 701313a12fdSmrg case $1 in 702313a12fdSmrg [0-9]* | *[!a-zA-Z0-9_]*) 703313a12fdSmrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 704313a12fdSmrg ;; 705313a12fdSmrg * ) 706313a12fdSmrg func_tr_sh_result=$1 707313a12fdSmrg ;; 708313a12fdSmrg esac 709313a12fdSmrg} 710e19dfac4Smrg 711e19dfac4Smrg 712e19dfac4Smrg# func_version 713e19dfac4Smrg# Echo version message to standard output and exit. 714e19dfac4Smrgfunc_version () 715e19dfac4Smrg{ 716313a12fdSmrg $opt_debug 717313a12fdSmrg 718313a12fdSmrg $SED -n '/(C)/!b go 719313a12fdSmrg :more 720313a12fdSmrg /\./!{ 721313a12fdSmrg N 722313a12fdSmrg s/\n# / / 723313a12fdSmrg b more 724313a12fdSmrg } 725313a12fdSmrg :go 726313a12fdSmrg /^# '$PROGRAM' (GNU /,/# warranty; / { 727e19dfac4Smrg s/^# // 728e19dfac4Smrg s/^# *$// 729e19dfac4Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730e19dfac4Smrg p 731e19dfac4Smrg }' < "$progpath" 732e19dfac4Smrg exit $? 733e19dfac4Smrg} 734e19dfac4Smrg 735e19dfac4Smrg# func_usage 736e19dfac4Smrg# Echo short help message to standard output and exit. 737e19dfac4Smrgfunc_usage () 738e19dfac4Smrg{ 739313a12fdSmrg $opt_debug 740313a12fdSmrg 741313a12fdSmrg $SED -n '/^# Usage:/,/^# *.*--help/ { 742e19dfac4Smrg s/^# // 743e19dfac4Smrg s/^# *$// 744e19dfac4Smrg s/\$progname/'$progname'/ 745e19dfac4Smrg p 746e19dfac4Smrg }' < "$progpath" 747313a12fdSmrg echo 748e19dfac4Smrg $ECHO "run \`$progname --help | more' for full usage" 749e19dfac4Smrg exit $? 750e19dfac4Smrg} 751e19dfac4Smrg 752313a12fdSmrg# func_help [NOEXIT] 753313a12fdSmrg# Echo long help message to standard output and exit, 754313a12fdSmrg# unless 'noexit' is passed as argument. 755e19dfac4Smrgfunc_help () 756e19dfac4Smrg{ 757313a12fdSmrg $opt_debug 758313a12fdSmrg 759e19dfac4Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 760313a12fdSmrg :print 761e19dfac4Smrg s/^# // 762e19dfac4Smrg s/^# *$// 763e19dfac4Smrg s*\$progname*'$progname'* 764e19dfac4Smrg s*\$host*'"$host"'* 765e19dfac4Smrg s*\$SHELL*'"$SHELL"'* 766e19dfac4Smrg s*\$LTCC*'"$LTCC"'* 767e19dfac4Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 768e19dfac4Smrg s*\$LD*'"$LD"'* 769e19dfac4Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 770313a12fdSmrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 771313a12fdSmrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772e19dfac4Smrg p 773313a12fdSmrg d 774313a12fdSmrg } 775313a12fdSmrg /^# .* home page:/b print 776313a12fdSmrg /^# General help using/b print 777313a12fdSmrg ' < "$progpath" 778313a12fdSmrg ret=$? 779313a12fdSmrg if test -z "$1"; then 780313a12fdSmrg exit $ret 781313a12fdSmrg fi 782e19dfac4Smrg} 783e19dfac4Smrg 784e19dfac4Smrg# func_missing_arg argname 785e19dfac4Smrg# Echo program name prefixed message to standard error and set global 786e19dfac4Smrg# exit_cmd. 787e19dfac4Smrgfunc_missing_arg () 788e19dfac4Smrg{ 789313a12fdSmrg $opt_debug 790313a12fdSmrg 791313a12fdSmrg func_error "missing argument for $1." 792e19dfac4Smrg exit_cmd=exit 793e19dfac4Smrg} 794e19dfac4Smrg 795e19dfac4Smrg 796313a12fdSmrg# func_split_short_opt shortopt 797313a12fdSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 798313a12fdSmrg# variables after splitting SHORTOPT after the 2nd character. 799313a12fdSmrgfunc_split_short_opt () 800313a12fdSmrg{ 801313a12fdSmrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 802313a12fdSmrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803313a12fdSmrg 804313a12fdSmrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 805313a12fdSmrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 806313a12fdSmrg} # func_split_short_opt may be replaced by extended shell implementation 807e19dfac4Smrg 808e19dfac4Smrg 809313a12fdSmrg# func_split_long_opt longopt 810313a12fdSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 811313a12fdSmrg# variables after splitting LONGOPT at the `=' sign. 812313a12fdSmrgfunc_split_long_opt () 813313a12fdSmrg{ 814313a12fdSmrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 815313a12fdSmrg my_sed_long_arg='1s/^--[^=]*=//' 816313a12fdSmrg 817313a12fdSmrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 818313a12fdSmrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 819313a12fdSmrg} # func_split_long_opt may be replaced by extended shell implementation 820313a12fdSmrg 821313a12fdSmrgexit_cmd=: 822313a12fdSmrg 823e19dfac4Smrg 824e19dfac4Smrg 82527702724Smrg 82627702724Smrg 827e19dfac4Smrgmagic="%%%MAGIC variable%%%" 828e19dfac4Smrgmagic_exe="%%%MAGIC EXE variable%%%" 82927702724Smrg 830e19dfac4Smrg# Global variables. 831e19dfac4Smrgnonopt= 832e19dfac4Smrgpreserve_args= 833e19dfac4Smrglo2o="s/\\.lo\$/.${objext}/" 834e19dfac4Smrgo2lo="s/\\.${objext}\$/.lo/" 835e19dfac4Smrgextracted_archives= 836e19dfac4Smrgextracted_serial=0 83727702724Smrg 838e19dfac4Smrg# If this variable is set in any of the actions, the command in it 839e19dfac4Smrg# will be execed at the end. This prevents here-documents from being 840e19dfac4Smrg# left over by shells. 841e19dfac4Smrgexec_cmd= 84227702724Smrg 843313a12fdSmrg# func_append var value 844313a12fdSmrg# Append VALUE to the end of shell variable VAR. 845313a12fdSmrgfunc_append () 846313a12fdSmrg{ 847313a12fdSmrg eval "${1}=\$${1}\${2}" 848313a12fdSmrg} # func_append may be replaced by extended shell implementation 849313a12fdSmrg 850313a12fdSmrg# func_append_quoted var value 851313a12fdSmrg# Quote VALUE and append to the end of shell variable VAR, separated 852313a12fdSmrg# by a space. 853313a12fdSmrgfunc_append_quoted () 854313a12fdSmrg{ 855313a12fdSmrg func_quote_for_eval "${2}" 856313a12fdSmrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 857313a12fdSmrg} # func_append_quoted may be replaced by extended shell implementation 858313a12fdSmrg 859313a12fdSmrg 860313a12fdSmrg# func_arith arithmetic-term... 861313a12fdSmrgfunc_arith () 862313a12fdSmrg{ 863313a12fdSmrg func_arith_result=`expr "${@}"` 864313a12fdSmrg} # func_arith may be replaced by extended shell implementation 865313a12fdSmrg 866313a12fdSmrg 867313a12fdSmrg# func_len string 868313a12fdSmrg# STRING may not start with a hyphen. 869313a12fdSmrgfunc_len () 870313a12fdSmrg{ 871313a12fdSmrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 872313a12fdSmrg} # func_len may be replaced by extended shell implementation 873313a12fdSmrg 874313a12fdSmrg 875313a12fdSmrg# func_lo2o object 876313a12fdSmrgfunc_lo2o () 877313a12fdSmrg{ 878313a12fdSmrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 879313a12fdSmrg} # func_lo2o may be replaced by extended shell implementation 880313a12fdSmrg 881313a12fdSmrg 882313a12fdSmrg# func_xform libobj-or-source 883313a12fdSmrgfunc_xform () 884313a12fdSmrg{ 885313a12fdSmrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 886313a12fdSmrg} # func_xform may be replaced by extended shell implementation 887313a12fdSmrg 888313a12fdSmrg 889e19dfac4Smrg# func_fatal_configuration arg... 890e19dfac4Smrg# Echo program name prefixed message to standard error, followed by 891e19dfac4Smrg# a configuration failure hint, and exit. 892e19dfac4Smrgfunc_fatal_configuration () 893e19dfac4Smrg{ 894e19dfac4Smrg func_error ${1+"$@"} 895e19dfac4Smrg func_error "See the $PACKAGE documentation for more information." 896e19dfac4Smrg func_fatal_error "Fatal configuration error." 897e19dfac4Smrg} 898e19dfac4Smrg 899e19dfac4Smrg 900e19dfac4Smrg# func_config 901e19dfac4Smrg# Display the configuration for all the tags in this script. 902e19dfac4Smrgfunc_config () 903e19dfac4Smrg{ 904e19dfac4Smrg re_begincf='^# ### BEGIN LIBTOOL' 905e19dfac4Smrg re_endcf='^# ### END LIBTOOL' 906e19dfac4Smrg 907e19dfac4Smrg # Default configuration. 908e19dfac4Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 90927702724Smrg 91027702724Smrg # Now print the configurations for the tags. 91127702724Smrg for tagname in $taglist; do 912e19dfac4Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 91327702724Smrg done 91427702724Smrg 915e19dfac4Smrg exit $? 916e19dfac4Smrg} 91727702724Smrg 918e19dfac4Smrg# func_features 919e19dfac4Smrg# Display the features supported by this script. 920e19dfac4Smrgfunc_features () 921e19dfac4Smrg{ 922313a12fdSmrg echo "host: $host" 92327702724Smrg if test "$build_libtool_libs" = yes; then 924313a12fdSmrg echo "enable shared libraries" 92527702724Smrg else 926313a12fdSmrg echo "disable shared libraries" 92727702724Smrg fi 92827702724Smrg if test "$build_old_libs" = yes; then 929313a12fdSmrg echo "enable static libraries" 93027702724Smrg else 931313a12fdSmrg echo "disable static libraries" 93227702724Smrg fi 933e19dfac4Smrg 93427702724Smrg exit $? 935e19dfac4Smrg} 936e19dfac4Smrg 937e19dfac4Smrg# func_enable_tag tagname 938e19dfac4Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939e19dfac4Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940e19dfac4Smrg# variable here. 941e19dfac4Smrgfunc_enable_tag () 942e19dfac4Smrg{ 943e19dfac4Smrg # Global variable: 944e19dfac4Smrg tagname="$1" 94527702724Smrg 946e19dfac4Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947e19dfac4Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948e19dfac4Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 94927702724Smrg 950e19dfac4Smrg # Validate tagname. 951e19dfac4Smrg case $tagname in 952e19dfac4Smrg *[!-_A-Za-z0-9,/]*) 953e19dfac4Smrg func_fatal_error "invalid tag name: $tagname" 954e19dfac4Smrg ;; 955e19dfac4Smrg esac 95627702724Smrg 957e19dfac4Smrg # Don't test for the "default" C tag, as we know it's 958e19dfac4Smrg # there but not specially marked. 959e19dfac4Smrg case $tagname in 960e19dfac4Smrg CC) ;; 961e19dfac4Smrg *) 962e19dfac4Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963e19dfac4Smrg taglist="$taglist $tagname" 964e19dfac4Smrg 965e19dfac4Smrg # Evaluate the configuration. Be careful to quote the path 966e19dfac4Smrg # and the sed script, to avoid splitting on whitespace, but 967e19dfac4Smrg # also don't use non-portable quotes within backquotes within 968e19dfac4Smrg # quotes we have to do it in 2 steps: 969e19dfac4Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970e19dfac4Smrg eval "$extractedcf" 971e19dfac4Smrg else 972e19dfac4Smrg func_error "ignoring unknown tag $tagname" 973e19dfac4Smrg fi 974e19dfac4Smrg ;; 975e19dfac4Smrg esac 976e19dfac4Smrg} 97727702724Smrg 978313a12fdSmrg# func_check_version_match 979313a12fdSmrg# Ensure that we are using m4 macros, and libtool script from the same 980313a12fdSmrg# release of libtool. 981313a12fdSmrgfunc_check_version_match () 982e19dfac4Smrg{ 983313a12fdSmrg if test "$package_revision" != "$macro_revision"; then 984313a12fdSmrg if test "$VERSION" != "$macro_version"; then 985313a12fdSmrg if test -z "$macro_version"; then 986313a12fdSmrg cat >&2 <<_LT_EOF 987313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 988313a12fdSmrg$progname: definition of this LT_INIT comes from an older release. 989313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 990313a12fdSmrg$progname: and run autoconf again. 991313a12fdSmrg_LT_EOF 992313a12fdSmrg else 993313a12fdSmrg cat >&2 <<_LT_EOF 994313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 995313a12fdSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 996313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 997313a12fdSmrg$progname: and run autoconf again. 998313a12fdSmrg_LT_EOF 999313a12fdSmrg fi 1000313a12fdSmrg else 1001313a12fdSmrg cat >&2 <<_LT_EOF 1002313a12fdSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1003313a12fdSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1004313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1005313a12fdSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 1006313a12fdSmrg_LT_EOF 1007313a12fdSmrg fi 1008313a12fdSmrg 1009313a12fdSmrg exit $EXIT_MISMATCH 1010313a12fdSmrg fi 1011313a12fdSmrg} 1012313a12fdSmrg 1013313a12fdSmrg 1014313a12fdSmrg# Shorthand for --mode=foo, only valid as the first argument 1015313a12fdSmrgcase $1 in 1016313a12fdSmrgclean|clea|cle|cl) 1017313a12fdSmrg shift; set dummy --mode clean ${1+"$@"}; shift 1018313a12fdSmrg ;; 1019313a12fdSmrgcompile|compil|compi|comp|com|co|c) 1020313a12fdSmrg shift; set dummy --mode compile ${1+"$@"}; shift 1021313a12fdSmrg ;; 1022313a12fdSmrgexecute|execut|execu|exec|exe|ex|e) 1023313a12fdSmrg shift; set dummy --mode execute ${1+"$@"}; shift 1024313a12fdSmrg ;; 1025313a12fdSmrgfinish|finis|fini|fin|fi|f) 1026313a12fdSmrg shift; set dummy --mode finish ${1+"$@"}; shift 1027313a12fdSmrg ;; 1028313a12fdSmrginstall|instal|insta|inst|ins|in|i) 1029313a12fdSmrg shift; set dummy --mode install ${1+"$@"}; shift 1030313a12fdSmrg ;; 1031313a12fdSmrglink|lin|li|l) 1032313a12fdSmrg shift; set dummy --mode link ${1+"$@"}; shift 1033313a12fdSmrg ;; 1034313a12fdSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 1035313a12fdSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 1036313a12fdSmrg ;; 1037313a12fdSmrgesac 103827702724Smrg 103927702724Smrg 1040313a12fdSmrg 1041313a12fdSmrg# Option defaults: 1042313a12fdSmrgopt_debug=: 1043313a12fdSmrgopt_dry_run=false 1044313a12fdSmrgopt_config=false 1045313a12fdSmrgopt_preserve_dup_deps=false 1046313a12fdSmrgopt_features=false 1047313a12fdSmrgopt_finish=false 1048313a12fdSmrgopt_help=false 1049313a12fdSmrgopt_help_all=false 1050313a12fdSmrgopt_silent=: 1051313a12fdSmrgopt_warning=: 1052313a12fdSmrgopt_verbose=: 1053313a12fdSmrgopt_silent=false 1054313a12fdSmrgopt_verbose=false 1055313a12fdSmrg 1056313a12fdSmrg 1057313a12fdSmrg# Parse options once, thoroughly. This comes as soon as possible in the 1058313a12fdSmrg# script to make things like `--version' happen as quickly as we can. 1059313a12fdSmrg{ 1060313a12fdSmrg # this just eases exit handling 1061313a12fdSmrg while test $# -gt 0; do 1062e19dfac4Smrg opt="$1" 1063e19dfac4Smrg shift 1064e19dfac4Smrg case $opt in 1065313a12fdSmrg --debug|-x) opt_debug='set -x' 1066e19dfac4Smrg func_echo "enabling shell trace mode" 1067e19dfac4Smrg $opt_debug 1068e19dfac4Smrg ;; 1069313a12fdSmrg --dry-run|--dryrun|-n) 1070313a12fdSmrg opt_dry_run=: 1071e19dfac4Smrg ;; 1072313a12fdSmrg --config) 1073313a12fdSmrg opt_config=: 1074313a12fdSmrgfunc_config 1075313a12fdSmrg ;; 1076313a12fdSmrg --dlopen|-dlopen) 1077313a12fdSmrg optarg="$1" 1078313a12fdSmrg opt_dlopen="${opt_dlopen+$opt_dlopen 1079313a12fdSmrg}$optarg" 1080e19dfac4Smrg shift 1081e19dfac4Smrg ;; 1082e19dfac4Smrg --preserve-dup-deps) 1083313a12fdSmrg opt_preserve_dup_deps=: 1084e19dfac4Smrg ;; 1085313a12fdSmrg --features) 1086313a12fdSmrg opt_features=: 1087313a12fdSmrgfunc_features 1088313a12fdSmrg ;; 1089313a12fdSmrg --finish) 1090313a12fdSmrg opt_finish=: 1091313a12fdSmrgset dummy --mode finish ${1+"$@"}; shift 1092313a12fdSmrg ;; 1093313a12fdSmrg --help) 1094313a12fdSmrg opt_help=: 1095313a12fdSmrg ;; 1096313a12fdSmrg --help-all) 1097313a12fdSmrg opt_help_all=: 1098313a12fdSmrgopt_help=': help-all' 1099313a12fdSmrg ;; 1100313a12fdSmrg --mode) 1101313a12fdSmrg test $# = 0 && func_missing_arg $opt && break 1102313a12fdSmrg optarg="$1" 1103313a12fdSmrg opt_mode="$optarg" 1104313a12fdSmrgcase $optarg in 1105313a12fdSmrg # Valid mode arguments: 1106313a12fdSmrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 1107313a12fdSmrg 1108313a12fdSmrg # Catch anything else as an error 1109313a12fdSmrg *) func_error "invalid argument for $opt" 1110313a12fdSmrg exit_cmd=exit 1111313a12fdSmrg break 1112313a12fdSmrg ;; 1113313a12fdSmrgesac 1114313a12fdSmrg shift 1115313a12fdSmrg ;; 1116313a12fdSmrg --no-silent|--no-quiet) 1117e19dfac4Smrg opt_silent=false 1118313a12fdSmrgfunc_append preserve_args " $opt" 1119e19dfac4Smrg ;; 1120313a12fdSmrg --no-warning|--no-warn) 1121313a12fdSmrg opt_warning=false 1122313a12fdSmrgfunc_append preserve_args " $opt" 1123313a12fdSmrg ;; 1124313a12fdSmrg --no-verbose) 1125313a12fdSmrg opt_verbose=false 1126313a12fdSmrgfunc_append preserve_args " $opt" 1127313a12fdSmrg ;; 1128313a12fdSmrg --silent|--quiet) 1129313a12fdSmrg opt_silent=: 1130313a12fdSmrgfunc_append preserve_args " $opt" 1131313a12fdSmrg opt_verbose=false 1132313a12fdSmrg ;; 1133313a12fdSmrg --verbose|-v) 1134313a12fdSmrg opt_verbose=: 1135313a12fdSmrgfunc_append preserve_args " $opt" 1136313a12fdSmrgopt_silent=false 1137313a12fdSmrg ;; 1138313a12fdSmrg --tag) 1139313a12fdSmrg test $# = 0 && func_missing_arg $opt && break 1140313a12fdSmrg optarg="$1" 1141313a12fdSmrg opt_tag="$optarg" 1142313a12fdSmrgfunc_append preserve_args " $opt $optarg" 1143313a12fdSmrgfunc_enable_tag "$optarg" 1144e19dfac4Smrg shift 1145e19dfac4Smrg ;; 1146e19dfac4Smrg 1147313a12fdSmrg -\?|-h) func_usage ;; 1148313a12fdSmrg --help) func_help ;; 1149313a12fdSmrg --version) func_version ;; 1150313a12fdSmrg 1151e19dfac4Smrg # Separate optargs to long options: 1152313a12fdSmrg --*=*) 1153313a12fdSmrg func_split_long_opt "$opt" 1154313a12fdSmrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155e19dfac4Smrg shift 1156e19dfac4Smrg ;; 1157e19dfac4Smrg 1158313a12fdSmrg # Separate non-argument short options: 1159313a12fdSmrg -\?*|-h*|-n*|-v*) 1160313a12fdSmrg func_split_short_opt "$opt" 1161313a12fdSmrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 1162313a12fdSmrg shift 1163e19dfac4Smrg ;; 1164313a12fdSmrg 1165313a12fdSmrg --) break ;; 1166313a12fdSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 1167313a12fdSmrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168e19dfac4Smrg esac 1169e19dfac4Smrg done 1170e19dfac4Smrg 1171313a12fdSmrg # Validate options: 1172313a12fdSmrg 1173313a12fdSmrg # save first non-option argument 1174313a12fdSmrg if test "$#" -gt 0; then 1175313a12fdSmrg nonopt="$opt" 1176313a12fdSmrg shift 1177313a12fdSmrg fi 1178313a12fdSmrg 1179313a12fdSmrg # preserve --debug 1180313a12fdSmrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181e19dfac4Smrg 1182e19dfac4Smrg case $host in 1183e19dfac4Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 1184e19dfac4Smrg # don't eliminate duplications in $postdeps and $predeps 1185e19dfac4Smrg opt_duplicate_compiler_generated_deps=: 118627702724Smrg ;; 118727702724Smrg *) 1188313a12fdSmrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189e19dfac4Smrg ;; 1190e19dfac4Smrg esac 119127702724Smrg 1192313a12fdSmrg $opt_help || { 1193313a12fdSmrg # Sanity checks first: 1194313a12fdSmrg func_check_version_match 1195e19dfac4Smrg 1196313a12fdSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1197313a12fdSmrg func_fatal_configuration "not configured to build any kind of library" 1198e19dfac4Smrg fi 1199e19dfac4Smrg 1200313a12fdSmrg # Darwin sucks 1201313a12fdSmrg eval std_shrext=\"$shrext_cmds\" 1202e19dfac4Smrg 1203313a12fdSmrg # Only execute mode is allowed to have -dlopen flags. 1204313a12fdSmrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 1205313a12fdSmrg func_error "unrecognized option \`-dlopen'" 1206313a12fdSmrg $ECHO "$help" 1>&2 1207313a12fdSmrg exit $EXIT_FAILURE 1208313a12fdSmrg fi 120927702724Smrg 1210313a12fdSmrg # Change the help message to a mode-specific one. 1211313a12fdSmrg generic_help="$help" 1212313a12fdSmrg help="Try \`$progname --help --mode=$opt_mode' for more information." 1213313a12fdSmrg } 1214e19dfac4Smrg 1215e19dfac4Smrg 1216313a12fdSmrg # Bail if the options were screwed 1217313a12fdSmrg $exit_cmd $EXIT_FAILURE 1218313a12fdSmrg} 1219e19dfac4Smrg 1220e19dfac4Smrg 122127702724Smrg 122227702724Smrg 1223313a12fdSmrg## ----------- ## 1224313a12fdSmrg## Main. ## 1225313a12fdSmrg## ----------- ## 122627702724Smrg 1227e19dfac4Smrg# func_lalib_p file 1228e19dfac4Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 1230e19dfac4Smrg# determined imposters. 1231e19dfac4Smrgfunc_lalib_p () 1232e19dfac4Smrg{ 1233e19dfac4Smrg test -f "$1" && 1234e19dfac4Smrg $SED -e 4q "$1" 2>/dev/null \ 1235e19dfac4Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236e19dfac4Smrg} 123727702724Smrg 1238e19dfac4Smrg# func_lalib_unsafe_p file 1239e19dfac4Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240e19dfac4Smrg# This function implements the same check as func_lalib_p without 1241e19dfac4Smrg# resorting to external programs. To this end, it redirects stdin and 1242e19dfac4Smrg# closes it afterwards, without saving the original file descriptor. 1243e19dfac4Smrg# As a safety measure, use it only where a negative result would be 1244e19dfac4Smrg# fatal anyway. Works if `file' does not exist. 1245e19dfac4Smrgfunc_lalib_unsafe_p () 1246e19dfac4Smrg{ 1247e19dfac4Smrg lalib_p=no 1248e19dfac4Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249e19dfac4Smrg for lalib_p_l in 1 2 3 4 1250e19dfac4Smrg do 1251e19dfac4Smrg read lalib_p_line 1252e19dfac4Smrg case "$lalib_p_line" in 1253e19dfac4Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254e19dfac4Smrg esac 1255e19dfac4Smrg done 1256e19dfac4Smrg exec 0<&5 5<&- 1257e19dfac4Smrg fi 1258e19dfac4Smrg test "$lalib_p" = yes 1259e19dfac4Smrg} 126027702724Smrg 1261e19dfac4Smrg# func_ltwrapper_script_p file 1262e19dfac4Smrg# True iff FILE is a libtool wrapper script 1263e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 1264e19dfac4Smrg# determined imposters. 1265e19dfac4Smrgfunc_ltwrapper_script_p () 1266e19dfac4Smrg{ 1267e19dfac4Smrg func_lalib_p "$1" 1268e19dfac4Smrg} 126927702724Smrg 1270e19dfac4Smrg# func_ltwrapper_executable_p file 1271e19dfac4Smrg# True iff FILE is a libtool wrapper executable 1272e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 1273e19dfac4Smrg# determined imposters. 1274e19dfac4Smrgfunc_ltwrapper_executable_p () 1275e19dfac4Smrg{ 1276e19dfac4Smrg func_ltwrapper_exec_suffix= 1277e19dfac4Smrg case $1 in 1278e19dfac4Smrg *.exe) ;; 1279e19dfac4Smrg *) func_ltwrapper_exec_suffix=.exe ;; 1280e19dfac4Smrg esac 1281e19dfac4Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282e19dfac4Smrg} 128327702724Smrg 1284e19dfac4Smrg# func_ltwrapper_scriptname file 1285e19dfac4Smrg# Assumes file is an ltwrapper_executable 1286e19dfac4Smrg# uses $file to determine the appropriate filename for a 1287e19dfac4Smrg# temporary ltwrapper_script. 1288e19dfac4Smrgfunc_ltwrapper_scriptname () 1289e19dfac4Smrg{ 1290313a12fdSmrg func_dirname_and_basename "$1" "" "." 1291313a12fdSmrg func_stripname '' '.exe' "$func_basename_result" 1292313a12fdSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293e19dfac4Smrg} 129427702724Smrg 1295e19dfac4Smrg# func_ltwrapper_p file 1296e19dfac4Smrg# True iff FILE is a libtool wrapper script or wrapper executable 1297e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out 1298e19dfac4Smrg# determined imposters. 1299e19dfac4Smrgfunc_ltwrapper_p () 1300e19dfac4Smrg{ 1301e19dfac4Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302e19dfac4Smrg} 130327702724Smrg 130427702724Smrg 1305e19dfac4Smrg# func_execute_cmds commands fail_cmd 1306e19dfac4Smrg# Execute tilde-delimited COMMANDS. 1307e19dfac4Smrg# If FAIL_CMD is given, eval that upon failure. 1308e19dfac4Smrg# FAIL_CMD may read-access the current command in variable CMD! 1309e19dfac4Smrgfunc_execute_cmds () 1310e19dfac4Smrg{ 1311e19dfac4Smrg $opt_debug 1312e19dfac4Smrg save_ifs=$IFS; IFS='~' 1313e19dfac4Smrg for cmd in $1; do 1314e19dfac4Smrg IFS=$save_ifs 1315e19dfac4Smrg eval cmd=\"$cmd\" 1316e19dfac4Smrg func_show_eval "$cmd" "${2-:}" 1317e19dfac4Smrg done 1318e19dfac4Smrg IFS=$save_ifs 1319e19dfac4Smrg} 1320e19dfac4Smrg 1321e19dfac4Smrg 1322e19dfac4Smrg# func_source file 1323e19dfac4Smrg# Source FILE, adding directory component if necessary. 1324e19dfac4Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325e19dfac4Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326e19dfac4Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327e19dfac4Smrg# `FILE.' does not work on cygwin managed mounts. 1328e19dfac4Smrgfunc_source () 1329e19dfac4Smrg{ 1330e19dfac4Smrg $opt_debug 1331e19dfac4Smrg case $1 in 1332e19dfac4Smrg */* | *\\*) . "$1" ;; 1333e19dfac4Smrg *) . "./$1" ;; 1334e19dfac4Smrg esac 1335e19dfac4Smrg} 1336e19dfac4Smrg 1337e19dfac4Smrg 1338313a12fdSmrg# func_resolve_sysroot PATH 1339313a12fdSmrg# Replace a leading = in PATH with a sysroot. Store the result into 1340313a12fdSmrg# func_resolve_sysroot_result 1341313a12fdSmrgfunc_resolve_sysroot () 1342313a12fdSmrg{ 1343313a12fdSmrg func_resolve_sysroot_result=$1 1344313a12fdSmrg case $func_resolve_sysroot_result in 1345313a12fdSmrg =*) 1346313a12fdSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 1347313a12fdSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1348313a12fdSmrg ;; 1349313a12fdSmrg esac 1350313a12fdSmrg} 1351313a12fdSmrg 1352313a12fdSmrg# func_replace_sysroot PATH 1353313a12fdSmrg# If PATH begins with the sysroot, replace it with = and 1354313a12fdSmrg# store the result into func_replace_sysroot_result. 1355313a12fdSmrgfunc_replace_sysroot () 1356313a12fdSmrg{ 1357313a12fdSmrg case "$lt_sysroot:$1" in 1358313a12fdSmrg ?*:"$lt_sysroot"*) 1359313a12fdSmrg func_stripname "$lt_sysroot" '' "$1" 1360313a12fdSmrg func_replace_sysroot_result="=$func_stripname_result" 1361313a12fdSmrg ;; 1362313a12fdSmrg *) 1363313a12fdSmrg # Including no sysroot. 1364313a12fdSmrg func_replace_sysroot_result=$1 1365313a12fdSmrg ;; 1366313a12fdSmrg esac 1367313a12fdSmrg} 1368313a12fdSmrg 1369e19dfac4Smrg# func_infer_tag arg 1370e19dfac4Smrg# Infer tagged configuration to use if any are available and 1371e19dfac4Smrg# if one wasn't chosen via the "--tag" command line option. 1372e19dfac4Smrg# Only attempt this if the compiler in the base compile 1373e19dfac4Smrg# command doesn't match the default compiler. 1374e19dfac4Smrg# arg is usually of the form 'gcc ...' 1375e19dfac4Smrgfunc_infer_tag () 1376e19dfac4Smrg{ 1377e19dfac4Smrg $opt_debug 1378e19dfac4Smrg if test -n "$available_tags" && test -z "$tagname"; then 1379e19dfac4Smrg CC_quoted= 1380e19dfac4Smrg for arg in $CC; do 1381313a12fdSmrg func_append_quoted CC_quoted "$arg" 1382e19dfac4Smrg done 1383313a12fdSmrg CC_expanded=`func_echo_all $CC` 1384313a12fdSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385e19dfac4Smrg case $@ in 1386e19dfac4Smrg # Blanks in the command may have been stripped by the calling shell, 1387e19dfac4Smrg # but not from the CC environment variable when configure was run. 1388313a12fdSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1389313a12fdSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390e19dfac4Smrg # Blanks at the start of $base_compile will cause this to fail 1391e19dfac4Smrg # if we don't check for them as well. 1392e19dfac4Smrg *) 1393e19dfac4Smrg for z in $available_tags; do 1394e19dfac4Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395e19dfac4Smrg # Evaluate the configuration. 1396e19dfac4Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397e19dfac4Smrg CC_quoted= 1398e19dfac4Smrg for arg in $CC; do 1399e19dfac4Smrg # Double-quote args containing other shell metacharacters. 1400313a12fdSmrg func_append_quoted CC_quoted "$arg" 1401e19dfac4Smrg done 1402313a12fdSmrg CC_expanded=`func_echo_all $CC` 1403313a12fdSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404e19dfac4Smrg case "$@ " in 1405313a12fdSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1406313a12fdSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407e19dfac4Smrg # The compiler in the base compile command matches 1408e19dfac4Smrg # the one in the tagged configuration. 1409e19dfac4Smrg # Assume this is the tagged configuration we want. 1410e19dfac4Smrg tagname=$z 1411e19dfac4Smrg break 1412e19dfac4Smrg ;; 141327702724Smrg esac 1414e19dfac4Smrg fi 1415e19dfac4Smrg done 1416e19dfac4Smrg # If $tagname still isn't set, then no tagged configuration 1417e19dfac4Smrg # was found and let the user know that the "--tag" command 1418e19dfac4Smrg # line option must be used. 1419e19dfac4Smrg if test -z "$tagname"; then 1420e19dfac4Smrg func_echo "unable to infer tagged configuration" 1421e19dfac4Smrg func_fatal_error "specify a tag with \`--tag'" 1422e19dfac4Smrg# else 1423e19dfac4Smrg# func_verbose "using $tagname tagged configuration" 1424e19dfac4Smrg fi 1425e19dfac4Smrg ;; 1426e19dfac4Smrg esac 1427e19dfac4Smrg fi 1428e19dfac4Smrg} 1429e19dfac4Smrg 1430e19dfac4Smrg 1431e19dfac4Smrg 1432e19dfac4Smrg# func_write_libtool_object output_name pic_name nonpic_name 1433e19dfac4Smrg# Create a libtool object file (analogous to a ".la" file), 1434e19dfac4Smrg# but don't create it if we're doing a dry run. 1435e19dfac4Smrgfunc_write_libtool_object () 1436e19dfac4Smrg{ 1437e19dfac4Smrg write_libobj=${1} 1438e19dfac4Smrg if test "$build_libtool_libs" = yes; then 1439e19dfac4Smrg write_lobj=\'${2}\' 1440e19dfac4Smrg else 1441e19dfac4Smrg write_lobj=none 1442e19dfac4Smrg fi 1443e19dfac4Smrg 1444e19dfac4Smrg if test "$build_old_libs" = yes; then 1445e19dfac4Smrg write_oldobj=\'${3}\' 1446e19dfac4Smrg else 1447e19dfac4Smrg write_oldobj=none 1448e19dfac4Smrg fi 1449e19dfac4Smrg 1450e19dfac4Smrg $opt_dry_run || { 1451e19dfac4Smrg cat >${write_libobj}T <<EOF 1452e19dfac4Smrg# $write_libobj - a libtool object file 1453e19dfac4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454e19dfac4Smrg# 1455e19dfac4Smrg# Please DO NOT delete this file! 1456e19dfac4Smrg# It is necessary for linking the library. 1457e19dfac4Smrg 1458e19dfac4Smrg# Name of the PIC object. 1459e19dfac4Smrgpic_object=$write_lobj 1460e19dfac4Smrg 1461e19dfac4Smrg# Name of the non-PIC object 1462e19dfac4Smrgnon_pic_object=$write_oldobj 1463e19dfac4Smrg 1464e19dfac4SmrgEOF 1465e19dfac4Smrg $MV "${write_libobj}T" "${write_libobj}" 1466e19dfac4Smrg } 1467e19dfac4Smrg} 1468e19dfac4Smrg 1469313a12fdSmrg 1470313a12fdSmrg################################################## 1471313a12fdSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1472313a12fdSmrg################################################## 1473313a12fdSmrg 1474313a12fdSmrg# func_convert_core_file_wine_to_w32 ARG 1475313a12fdSmrg# Helper function used by file name conversion functions when $build is *nix, 1476313a12fdSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1477313a12fdSmrg# correctly configured wine environment available, with the winepath program 1478313a12fdSmrg# in $build's $PATH. 1479313a12fdSmrg# 1480313a12fdSmrg# ARG is the $build file name to be converted to w32 format. 1481313a12fdSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1482313a12fdSmrg# be empty on error (or when ARG is empty) 1483313a12fdSmrgfunc_convert_core_file_wine_to_w32 () 1484313a12fdSmrg{ 1485313a12fdSmrg $opt_debug 1486313a12fdSmrg func_convert_core_file_wine_to_w32_result="$1" 1487313a12fdSmrg if test -n "$1"; then 1488313a12fdSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 1489313a12fdSmrg # are forced to check the contents of stdout. On the other hand, if the 1490313a12fdSmrg # command is not found, the shell will set an exit code of 127 and print 1491313a12fdSmrg # *an error message* to stdout. So we must check for both error code of 1492313a12fdSmrg # zero AND non-empty stdout, which explains the odd construction: 1493313a12fdSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 1494313a12fdSmrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1495313a12fdSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 1496313a12fdSmrg $SED -e "$lt_sed_naive_backslashify"` 1497313a12fdSmrg else 1498313a12fdSmrg func_convert_core_file_wine_to_w32_result= 1499313a12fdSmrg fi 1500313a12fdSmrg fi 1501313a12fdSmrg} 1502313a12fdSmrg# end: func_convert_core_file_wine_to_w32 1503313a12fdSmrg 1504313a12fdSmrg 1505313a12fdSmrg# func_convert_core_path_wine_to_w32 ARG 1506313a12fdSmrg# Helper function used by path conversion functions when $build is *nix, and 1507313a12fdSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1508313a12fdSmrg# configured wine environment available, with the winepath program in $build's 1509313a12fdSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 1510313a12fdSmrg# 1511313a12fdSmrg# ARG is path to be converted from $build format to win32. 1512313a12fdSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 1513313a12fdSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 1514313a12fdSmrg# are convertible, then the result may be empty. 1515313a12fdSmrgfunc_convert_core_path_wine_to_w32 () 1516313a12fdSmrg{ 1517313a12fdSmrg $opt_debug 1518313a12fdSmrg # unfortunately, winepath doesn't convert paths, only file names 1519313a12fdSmrg func_convert_core_path_wine_to_w32_result="" 1520313a12fdSmrg if test -n "$1"; then 1521313a12fdSmrg oldIFS=$IFS 1522313a12fdSmrg IFS=: 1523313a12fdSmrg for func_convert_core_path_wine_to_w32_f in $1; do 1524313a12fdSmrg IFS=$oldIFS 1525313a12fdSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 1526313a12fdSmrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1527313a12fdSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 1528313a12fdSmrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1529313a12fdSmrg else 1530313a12fdSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1531313a12fdSmrg fi 1532313a12fdSmrg fi 1533313a12fdSmrg done 1534313a12fdSmrg IFS=$oldIFS 1535313a12fdSmrg fi 1536313a12fdSmrg} 1537313a12fdSmrg# end: func_convert_core_path_wine_to_w32 1538313a12fdSmrg 1539313a12fdSmrg 1540313a12fdSmrg# func_cygpath ARGS... 1541313a12fdSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1542313a12fdSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1543313a12fdSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1544313a12fdSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 1545313a12fdSmrg# file name or path is assumed to be in w32 format, as previously converted 1546313a12fdSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1547313a12fdSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 1548313a12fdSmrg# Cygwin format). Returns an empty string on error. 1549313a12fdSmrg# 1550313a12fdSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 1551313a12fdSmrg# be converted. 1552313a12fdSmrg# 1553313a12fdSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1554313a12fdSmrg# environment variable; do not put it in $PATH. 1555313a12fdSmrgfunc_cygpath () 1556313a12fdSmrg{ 1557313a12fdSmrg $opt_debug 1558313a12fdSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1559313a12fdSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1560313a12fdSmrg if test "$?" -ne 0; then 1561313a12fdSmrg # on failure, ensure result is empty 1562313a12fdSmrg func_cygpath_result= 1563313a12fdSmrg fi 1564313a12fdSmrg else 1565313a12fdSmrg func_cygpath_result= 1566313a12fdSmrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1567313a12fdSmrg fi 1568313a12fdSmrg} 1569313a12fdSmrg#end: func_cygpath 1570313a12fdSmrg 1571313a12fdSmrg 1572313a12fdSmrg# func_convert_core_msys_to_w32 ARG 1573313a12fdSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 1574313a12fdSmrg# result in func_convert_core_msys_to_w32_result. 1575313a12fdSmrgfunc_convert_core_msys_to_w32 () 1576313a12fdSmrg{ 1577313a12fdSmrg $opt_debug 1578313a12fdSmrg # awkward: cmd appends spaces to result 1579313a12fdSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 1580313a12fdSmrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1581313a12fdSmrg} 1582313a12fdSmrg#end: func_convert_core_msys_to_w32 1583313a12fdSmrg 1584313a12fdSmrg 1585313a12fdSmrg# func_convert_file_check ARG1 ARG2 1586313a12fdSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 1587313a12fdSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 1588313a12fdSmrg# func_to_host_file_result to ARG1). 1589313a12fdSmrgfunc_convert_file_check () 1590313a12fdSmrg{ 1591313a12fdSmrg $opt_debug 1592313a12fdSmrg if test -z "$2" && test -n "$1" ; then 1593313a12fdSmrg func_error "Could not determine host file name corresponding to" 1594313a12fdSmrg func_error " \`$1'" 1595313a12fdSmrg func_error "Continuing, but uninstalled executables may not work." 1596313a12fdSmrg # Fallback: 1597313a12fdSmrg func_to_host_file_result="$1" 1598313a12fdSmrg fi 1599313a12fdSmrg} 1600313a12fdSmrg# end func_convert_file_check 1601313a12fdSmrg 1602313a12fdSmrg 1603313a12fdSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1604313a12fdSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 1605313a12fdSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1606313a12fdSmrg# func_to_host_file_result to a simplistic fallback value (see below). 1607313a12fdSmrgfunc_convert_path_check () 1608313a12fdSmrg{ 1609313a12fdSmrg $opt_debug 1610313a12fdSmrg if test -z "$4" && test -n "$3"; then 1611313a12fdSmrg func_error "Could not determine the host path corresponding to" 1612313a12fdSmrg func_error " \`$3'" 1613313a12fdSmrg func_error "Continuing, but uninstalled executables may not work." 1614313a12fdSmrg # Fallback. This is a deliberately simplistic "conversion" and 1615313a12fdSmrg # should not be "improved". See libtool.info. 1616313a12fdSmrg if test "x$1" != "x$2"; then 1617313a12fdSmrg lt_replace_pathsep_chars="s|$1|$2|g" 1618313a12fdSmrg func_to_host_path_result=`echo "$3" | 1619313a12fdSmrg $SED -e "$lt_replace_pathsep_chars"` 1620313a12fdSmrg else 1621313a12fdSmrg func_to_host_path_result="$3" 1622313a12fdSmrg fi 1623313a12fdSmrg fi 1624313a12fdSmrg} 1625313a12fdSmrg# end func_convert_path_check 1626313a12fdSmrg 1627313a12fdSmrg 1628313a12fdSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1629313a12fdSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1630313a12fdSmrg# and appending REPL if ORIG matches BACKPAT. 1631313a12fdSmrgfunc_convert_path_front_back_pathsep () 1632313a12fdSmrg{ 1633313a12fdSmrg $opt_debug 1634313a12fdSmrg case $4 in 1635313a12fdSmrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1636313a12fdSmrg ;; 1637313a12fdSmrg esac 1638313a12fdSmrg case $4 in 1639313a12fdSmrg $2 ) func_append func_to_host_path_result "$3" 1640313a12fdSmrg ;; 1641313a12fdSmrg esac 1642313a12fdSmrg} 1643313a12fdSmrg# end func_convert_path_front_back_pathsep 1644313a12fdSmrg 1645313a12fdSmrg 1646313a12fdSmrg################################################## 1647313a12fdSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 1648313a12fdSmrg################################################## 1649313a12fdSmrg# invoked via `$to_host_file_cmd ARG' 1650313a12fdSmrg# 1651313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format. 1652313a12fdSmrg# Result will be available in $func_to_host_file_result. 1653313a12fdSmrg 1654313a12fdSmrg 1655313a12fdSmrg# func_to_host_file ARG 1656313a12fdSmrg# Converts the file name ARG from $build format to $host format. Return result 1657313a12fdSmrg# in func_to_host_file_result. 1658313a12fdSmrgfunc_to_host_file () 1659313a12fdSmrg{ 1660313a12fdSmrg $opt_debug 1661313a12fdSmrg $to_host_file_cmd "$1" 1662313a12fdSmrg} 1663313a12fdSmrg# end func_to_host_file 1664313a12fdSmrg 1665313a12fdSmrg 1666313a12fdSmrg# func_to_tool_file ARG LAZY 1667313a12fdSmrg# converts the file name ARG from $build format to toolchain format. Return 1668313a12fdSmrg# result in func_to_tool_file_result. If the conversion in use is listed 1669313a12fdSmrg# in (the comma separated) LAZY, no conversion takes place. 1670313a12fdSmrgfunc_to_tool_file () 1671313a12fdSmrg{ 1672313a12fdSmrg $opt_debug 1673313a12fdSmrg case ,$2, in 1674313a12fdSmrg *,"$to_tool_file_cmd",*) 1675313a12fdSmrg func_to_tool_file_result=$1 1676313a12fdSmrg ;; 1677313a12fdSmrg *) 1678313a12fdSmrg $to_tool_file_cmd "$1" 1679313a12fdSmrg func_to_tool_file_result=$func_to_host_file_result 1680313a12fdSmrg ;; 1681313a12fdSmrg esac 1682313a12fdSmrg} 1683313a12fdSmrg# end func_to_tool_file 1684313a12fdSmrg 1685313a12fdSmrg 1686313a12fdSmrg# func_convert_file_noop ARG 1687313a12fdSmrg# Copy ARG to func_to_host_file_result. 1688313a12fdSmrgfunc_convert_file_noop () 1689313a12fdSmrg{ 1690313a12fdSmrg func_to_host_file_result="$1" 1691313a12fdSmrg} 1692313a12fdSmrg# end func_convert_file_noop 1693313a12fdSmrg 1694313a12fdSmrg 1695313a12fdSmrg# func_convert_file_msys_to_w32 ARG 1696313a12fdSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1697313a12fdSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 1698313a12fdSmrg# func_to_host_file_result. 1699313a12fdSmrgfunc_convert_file_msys_to_w32 () 1700313a12fdSmrg{ 1701313a12fdSmrg $opt_debug 1702313a12fdSmrg func_to_host_file_result="$1" 1703313a12fdSmrg if test -n "$1"; then 1704313a12fdSmrg func_convert_core_msys_to_w32 "$1" 1705313a12fdSmrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1706313a12fdSmrg fi 1707313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1708313a12fdSmrg} 1709313a12fdSmrg# end func_convert_file_msys_to_w32 1710313a12fdSmrg 1711313a12fdSmrg 1712313a12fdSmrg# func_convert_file_cygwin_to_w32 ARG 1713313a12fdSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 1714313a12fdSmrg# func_to_host_file_result. 1715313a12fdSmrgfunc_convert_file_cygwin_to_w32 () 1716313a12fdSmrg{ 1717313a12fdSmrg $opt_debug 1718313a12fdSmrg func_to_host_file_result="$1" 1719313a12fdSmrg if test -n "$1"; then 1720313a12fdSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1721313a12fdSmrg # LT_CYGPATH in this case. 1722313a12fdSmrg func_to_host_file_result=`cygpath -m "$1"` 1723313a12fdSmrg fi 1724313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1725313a12fdSmrg} 1726313a12fdSmrg# end func_convert_file_cygwin_to_w32 1727313a12fdSmrg 1728313a12fdSmrg 1729313a12fdSmrg# func_convert_file_nix_to_w32 ARG 1730313a12fdSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 1731313a12fdSmrg# and a working winepath. Returns result in func_to_host_file_result. 1732313a12fdSmrgfunc_convert_file_nix_to_w32 () 1733313a12fdSmrg{ 1734313a12fdSmrg $opt_debug 1735313a12fdSmrg func_to_host_file_result="$1" 1736313a12fdSmrg if test -n "$1"; then 1737313a12fdSmrg func_convert_core_file_wine_to_w32 "$1" 1738313a12fdSmrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1739313a12fdSmrg fi 1740313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1741313a12fdSmrg} 1742313a12fdSmrg# end func_convert_file_nix_to_w32 1743313a12fdSmrg 1744313a12fdSmrg 1745313a12fdSmrg# func_convert_file_msys_to_cygwin ARG 1746313a12fdSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1747313a12fdSmrg# Returns result in func_to_host_file_result. 1748313a12fdSmrgfunc_convert_file_msys_to_cygwin () 1749313a12fdSmrg{ 1750313a12fdSmrg $opt_debug 1751313a12fdSmrg func_to_host_file_result="$1" 1752313a12fdSmrg if test -n "$1"; then 1753313a12fdSmrg func_convert_core_msys_to_w32 "$1" 1754313a12fdSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 1755313a12fdSmrg func_to_host_file_result="$func_cygpath_result" 1756313a12fdSmrg fi 1757313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1758313a12fdSmrg} 1759313a12fdSmrg# end func_convert_file_msys_to_cygwin 1760313a12fdSmrg 1761313a12fdSmrg 1762313a12fdSmrg# func_convert_file_nix_to_cygwin ARG 1763313a12fdSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1764313a12fdSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1765313a12fdSmrg# in func_to_host_file_result. 1766313a12fdSmrgfunc_convert_file_nix_to_cygwin () 1767313a12fdSmrg{ 1768313a12fdSmrg $opt_debug 1769313a12fdSmrg func_to_host_file_result="$1" 1770313a12fdSmrg if test -n "$1"; then 1771313a12fdSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1772313a12fdSmrg func_convert_core_file_wine_to_w32 "$1" 1773313a12fdSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 1774313a12fdSmrg func_to_host_file_result="$func_cygpath_result" 1775313a12fdSmrg fi 1776313a12fdSmrg func_convert_file_check "$1" "$func_to_host_file_result" 1777313a12fdSmrg} 1778313a12fdSmrg# end func_convert_file_nix_to_cygwin 1779313a12fdSmrg 1780313a12fdSmrg 1781313a12fdSmrg############################################# 1782313a12fdSmrg# $build to $host PATH CONVERSION FUNCTIONS # 1783313a12fdSmrg############################################# 1784313a12fdSmrg# invoked via `$to_host_path_cmd ARG' 1785313a12fdSmrg# 1786313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format. 1787313a12fdSmrg# The result will be available in $func_to_host_path_result. 1788313a12fdSmrg# 1789313a12fdSmrg# Path separators are also converted from $build format to $host format. If 1790313a12fdSmrg# ARG begins or ends with a path separator character, it is preserved (but 1791313a12fdSmrg# converted to $host format) on output. 1792313a12fdSmrg# 1793313a12fdSmrg# All path conversion functions are named using the following convention: 1794313a12fdSmrg# file name conversion function : func_convert_file_X_to_Y () 1795313a12fdSmrg# path conversion function : func_convert_path_X_to_Y () 1796313a12fdSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 1797313a12fdSmrg# same. If conversion functions are added for new $build/$host combinations, 1798313a12fdSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1799313a12fdSmrg# will break. 1800313a12fdSmrg 1801313a12fdSmrg 1802313a12fdSmrg# func_init_to_host_path_cmd 1803313a12fdSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1804313a12fdSmrg# appropriate value, based on the value of $to_host_file_cmd. 1805313a12fdSmrgto_host_path_cmd= 1806313a12fdSmrgfunc_init_to_host_path_cmd () 1807313a12fdSmrg{ 1808313a12fdSmrg $opt_debug 1809313a12fdSmrg if test -z "$to_host_path_cmd"; then 1810313a12fdSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 1811313a12fdSmrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 1812313a12fdSmrg fi 1813313a12fdSmrg} 1814313a12fdSmrg 1815313a12fdSmrg 1816313a12fdSmrg# func_to_host_path ARG 1817313a12fdSmrg# Converts the path ARG from $build format to $host format. Return result 1818313a12fdSmrg# in func_to_host_path_result. 1819313a12fdSmrgfunc_to_host_path () 1820313a12fdSmrg{ 1821313a12fdSmrg $opt_debug 1822313a12fdSmrg func_init_to_host_path_cmd 1823313a12fdSmrg $to_host_path_cmd "$1" 1824313a12fdSmrg} 1825313a12fdSmrg# end func_to_host_path 1826313a12fdSmrg 1827313a12fdSmrg 1828313a12fdSmrg# func_convert_path_noop ARG 1829313a12fdSmrg# Copy ARG to func_to_host_path_result. 1830313a12fdSmrgfunc_convert_path_noop () 1831313a12fdSmrg{ 1832313a12fdSmrg func_to_host_path_result="$1" 1833313a12fdSmrg} 1834313a12fdSmrg# end func_convert_path_noop 1835313a12fdSmrg 1836313a12fdSmrg 1837313a12fdSmrg# func_convert_path_msys_to_w32 ARG 1838313a12fdSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1839313a12fdSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 1840313a12fdSmrg# func_to_host_path_result. 1841313a12fdSmrgfunc_convert_path_msys_to_w32 () 1842313a12fdSmrg{ 1843313a12fdSmrg $opt_debug 1844313a12fdSmrg func_to_host_path_result="$1" 1845313a12fdSmrg if test -n "$1"; then 1846313a12fdSmrg # Remove leading and trailing path separator characters from ARG. MSYS 1847313a12fdSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1848313a12fdSmrg # and winepath ignores them completely. 1849313a12fdSmrg func_stripname : : "$1" 1850313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 1851313a12fdSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1852313a12fdSmrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1853313a12fdSmrg func_convert_path_check : ";" \ 1854313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1855313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1856313a12fdSmrg fi 1857313a12fdSmrg} 1858313a12fdSmrg# end func_convert_path_msys_to_w32 1859313a12fdSmrg 1860313a12fdSmrg 1861313a12fdSmrg# func_convert_path_cygwin_to_w32 ARG 1862313a12fdSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 1863313a12fdSmrg# func_to_host_file_result. 1864313a12fdSmrgfunc_convert_path_cygwin_to_w32 () 1865313a12fdSmrg{ 1866313a12fdSmrg $opt_debug 1867313a12fdSmrg func_to_host_path_result="$1" 1868313a12fdSmrg if test -n "$1"; then 1869313a12fdSmrg # See func_convert_path_msys_to_w32: 1870313a12fdSmrg func_stripname : : "$1" 1871313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 1872313a12fdSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1873313a12fdSmrg func_convert_path_check : ";" \ 1874313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1875313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1876313a12fdSmrg fi 1877313a12fdSmrg} 1878313a12fdSmrg# end func_convert_path_cygwin_to_w32 1879313a12fdSmrg 1880313a12fdSmrg 1881313a12fdSmrg# func_convert_path_nix_to_w32 ARG 1882313a12fdSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 1883313a12fdSmrg# a working winepath. Returns result in func_to_host_file_result. 1884313a12fdSmrgfunc_convert_path_nix_to_w32 () 1885313a12fdSmrg{ 1886313a12fdSmrg $opt_debug 1887313a12fdSmrg func_to_host_path_result="$1" 1888313a12fdSmrg if test -n "$1"; then 1889313a12fdSmrg # See func_convert_path_msys_to_w32: 1890313a12fdSmrg func_stripname : : "$1" 1891313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 1892313a12fdSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1893313a12fdSmrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1894313a12fdSmrg func_convert_path_check : ";" \ 1895313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1896313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1897313a12fdSmrg fi 1898313a12fdSmrg} 1899313a12fdSmrg# end func_convert_path_nix_to_w32 1900313a12fdSmrg 1901313a12fdSmrg 1902313a12fdSmrg# func_convert_path_msys_to_cygwin ARG 1903313a12fdSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1904313a12fdSmrg# Returns result in func_to_host_file_result. 1905313a12fdSmrgfunc_convert_path_msys_to_cygwin () 1906313a12fdSmrg{ 1907313a12fdSmrg $opt_debug 1908313a12fdSmrg func_to_host_path_result="$1" 1909313a12fdSmrg if test -n "$1"; then 1910313a12fdSmrg # See func_convert_path_msys_to_w32: 1911313a12fdSmrg func_stripname : : "$1" 1912313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 1913313a12fdSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1914313a12fdSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 1915313a12fdSmrg func_to_host_path_result="$func_cygpath_result" 1916313a12fdSmrg func_convert_path_check : : \ 1917313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1918313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1919313a12fdSmrg fi 1920313a12fdSmrg} 1921313a12fdSmrg# end func_convert_path_msys_to_cygwin 1922313a12fdSmrg 1923313a12fdSmrg 1924313a12fdSmrg# func_convert_path_nix_to_cygwin ARG 1925313a12fdSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1926313a12fdSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1927313a12fdSmrg# func_to_host_file_result. 1928313a12fdSmrgfunc_convert_path_nix_to_cygwin () 1929313a12fdSmrg{ 1930313a12fdSmrg $opt_debug 1931313a12fdSmrg func_to_host_path_result="$1" 1932313a12fdSmrg if test -n "$1"; then 1933313a12fdSmrg # Remove leading and trailing path separator characters from 1934313a12fdSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 1935313a12fdSmrg # into '.;' and ';.', and winepath ignores them completely. 1936313a12fdSmrg func_stripname : : "$1" 1937313a12fdSmrg func_to_host_path_tmp1=$func_stripname_result 1938313a12fdSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1939313a12fdSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 1940313a12fdSmrg func_to_host_path_result="$func_cygpath_result" 1941313a12fdSmrg func_convert_path_check : : \ 1942313a12fdSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1943313a12fdSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1944313a12fdSmrg fi 1945313a12fdSmrg} 1946313a12fdSmrg# end func_convert_path_nix_to_cygwin 1947313a12fdSmrg 1948313a12fdSmrg 1949e19dfac4Smrg# func_mode_compile arg... 1950e19dfac4Smrgfunc_mode_compile () 1951e19dfac4Smrg{ 1952e19dfac4Smrg $opt_debug 1953e19dfac4Smrg # Get the compilation command and the source file. 1954e19dfac4Smrg base_compile= 1955e19dfac4Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956e19dfac4Smrg suppress_opt=yes 1957e19dfac4Smrg suppress_output= 1958e19dfac4Smrg arg_mode=normal 1959e19dfac4Smrg libobj= 1960e19dfac4Smrg later= 1961e19dfac4Smrg pie_flag= 1962e19dfac4Smrg 1963e19dfac4Smrg for arg 1964e19dfac4Smrg do 1965e19dfac4Smrg case $arg_mode in 1966e19dfac4Smrg arg ) 1967e19dfac4Smrg # do not "continue". Instead, add this to base_compile 1968e19dfac4Smrg lastarg="$arg" 1969e19dfac4Smrg arg_mode=normal 1970e19dfac4Smrg ;; 1971e19dfac4Smrg 1972e19dfac4Smrg target ) 1973e19dfac4Smrg libobj="$arg" 1974e19dfac4Smrg arg_mode=normal 1975e19dfac4Smrg continue 1976e19dfac4Smrg ;; 1977e19dfac4Smrg 1978e19dfac4Smrg normal ) 1979e19dfac4Smrg # Accept any command-line options. 1980e19dfac4Smrg case $arg in 1981e19dfac4Smrg -o) 1982e19dfac4Smrg test -n "$libobj" && \ 1983e19dfac4Smrg func_fatal_error "you cannot specify \`-o' more than once" 1984e19dfac4Smrg arg_mode=target 1985e19dfac4Smrg continue 1986e19dfac4Smrg ;; 1987e19dfac4Smrg 1988e19dfac4Smrg -pie | -fpie | -fPIE) 1989313a12fdSmrg func_append pie_flag " $arg" 1990e19dfac4Smrg continue 1991e19dfac4Smrg ;; 1992e19dfac4Smrg 1993e19dfac4Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1994313a12fdSmrg func_append later " $arg" 1995e19dfac4Smrg continue 1996e19dfac4Smrg ;; 1997e19dfac4Smrg 1998e19dfac4Smrg -no-suppress) 1999e19dfac4Smrg suppress_opt=no 2000e19dfac4Smrg continue 2001e19dfac4Smrg ;; 2002e19dfac4Smrg 2003e19dfac4Smrg -Xcompiler) 2004e19dfac4Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 2005e19dfac4Smrg continue # The current "srcfile" will either be retained or 2006e19dfac4Smrg ;; # replaced later. I would guess that would be a bug. 2007e19dfac4Smrg 2008e19dfac4Smrg -Wc,*) 2009e19dfac4Smrg func_stripname '-Wc,' '' "$arg" 2010e19dfac4Smrg args=$func_stripname_result 2011e19dfac4Smrg lastarg= 2012e19dfac4Smrg save_ifs="$IFS"; IFS=',' 2013e19dfac4Smrg for arg in $args; do 2014e19dfac4Smrg IFS="$save_ifs" 2015313a12fdSmrg func_append_quoted lastarg "$arg" 201627702724Smrg done 201727702724Smrg IFS="$save_ifs" 2018e19dfac4Smrg func_stripname ' ' '' "$lastarg" 2019e19dfac4Smrg lastarg=$func_stripname_result 202027702724Smrg 202127702724Smrg # Add the arguments to base_compile. 2022313a12fdSmrg func_append base_compile " $lastarg" 202327702724Smrg continue 202427702724Smrg ;; 202527702724Smrg 2026e19dfac4Smrg *) 202727702724Smrg # Accept the current argument as the source file. 202827702724Smrg # The previous "srcfile" becomes the current argument. 202927702724Smrg # 203027702724Smrg lastarg="$srcfile" 203127702724Smrg srcfile="$arg" 203227702724Smrg ;; 203327702724Smrg esac # case $arg 203427702724Smrg ;; 203527702724Smrg esac # case $arg_mode 203627702724Smrg 203727702724Smrg # Aesthetically quote the previous argument. 2038313a12fdSmrg func_append_quoted base_compile "$lastarg" 203927702724Smrg done # for arg 204027702724Smrg 204127702724Smrg case $arg_mode in 204227702724Smrg arg) 2043e19dfac4Smrg func_fatal_error "you must specify an argument for -Xcompile" 204427702724Smrg ;; 204527702724Smrg target) 2046e19dfac4Smrg func_fatal_error "you must specify a target with \`-o'" 204727702724Smrg ;; 204827702724Smrg *) 204927702724Smrg # Get the name of the library object. 2050e19dfac4Smrg test -z "$libobj" && { 2051e19dfac4Smrg func_basename "$srcfile" 2052e19dfac4Smrg libobj="$func_basename_result" 2053e19dfac4Smrg } 205427702724Smrg ;; 205527702724Smrg esac 205627702724Smrg 205727702724Smrg # Recognize several different file suffixes. 205827702724Smrg # If the user specifies -o file.o, it is replaced with file.lo 205927702724Smrg case $libobj in 2060e19dfac4Smrg *.[cCFSifmso] | \ 2061e19dfac4Smrg *.ada | *.adb | *.ads | *.asm | \ 2062e19dfac4Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063313a12fdSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064e19dfac4Smrg func_xform "$libobj" 2065e19dfac4Smrg libobj=$func_xform_result 2066e19dfac4Smrg ;; 206727702724Smrg esac 206827702724Smrg 206927702724Smrg case $libobj in 2070e19dfac4Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 207127702724Smrg *) 2072e19dfac4Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 207327702724Smrg ;; 207427702724Smrg esac 207527702724Smrg 207627702724Smrg func_infer_tag $base_compile 207727702724Smrg 207827702724Smrg for arg in $later; do 207927702724Smrg case $arg in 2080e19dfac4Smrg -shared) 2081e19dfac4Smrg test "$build_libtool_libs" != yes && \ 2082e19dfac4Smrg func_fatal_configuration "can not build a shared library" 2083e19dfac4Smrg build_old_libs=no 2084e19dfac4Smrg continue 2085e19dfac4Smrg ;; 2086e19dfac4Smrg 208727702724Smrg -static) 2088e19dfac4Smrg build_libtool_libs=no 208927702724Smrg build_old_libs=yes 209027702724Smrg continue 209127702724Smrg ;; 209227702724Smrg 209327702724Smrg -prefer-pic) 209427702724Smrg pic_mode=yes 209527702724Smrg continue 209627702724Smrg ;; 209727702724Smrg 209827702724Smrg -prefer-non-pic) 209927702724Smrg pic_mode=no 210027702724Smrg continue 210127702724Smrg ;; 210227702724Smrg esac 210327702724Smrg done 210427702724Smrg 2105e19dfac4Smrg func_quote_for_eval "$libobj" 2106e19dfac4Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107e19dfac4Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108e19dfac4Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109e19dfac4Smrg func_dirname_and_basename "$obj" "/" "" 2110e19dfac4Smrg objname="$func_basename_result" 2111e19dfac4Smrg xdir="$func_dirname_result" 211227702724Smrg lobj=${xdir}$objdir/$objname 211327702724Smrg 2114e19dfac4Smrg test -z "$base_compile" && \ 2115e19dfac4Smrg func_fatal_help "you must specify a compilation command" 211627702724Smrg 211727702724Smrg # Delete any leftover library objects. 211827702724Smrg if test "$build_old_libs" = yes; then 211927702724Smrg removelist="$obj $lobj $libobj ${libobj}T" 212027702724Smrg else 212127702724Smrg removelist="$lobj $libobj ${libobj}T" 212227702724Smrg fi 212327702724Smrg 212427702724Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 212527702724Smrg case $host_os in 2126e19dfac4Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 212727702724Smrg pic_mode=default 212827702724Smrg ;; 212927702724Smrg esac 213027702724Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 213127702724Smrg # non-PIC code in shared libraries is not supported 213227702724Smrg pic_mode=default 213327702724Smrg fi 213427702724Smrg 213527702724Smrg # Calculate the filename of the output object if compiler does 213627702724Smrg # not support -o with -c 213727702724Smrg if test "$compiler_c_o" = no; then 2138313a12fdSmrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 213927702724Smrg lockfile="$output_obj.lock" 214027702724Smrg else 214127702724Smrg output_obj= 214227702724Smrg need_locks=no 214327702724Smrg lockfile= 214427702724Smrg fi 214527702724Smrg 214627702724Smrg # Lock this critical section if it is needed 214727702724Smrg # We use this script file to make the link, it avoids creating a new file 214827702724Smrg if test "$need_locks" = yes; then 2149e19dfac4Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150e19dfac4Smrg func_echo "Waiting for $lockfile to be removed" 215127702724Smrg sleep 2 215227702724Smrg done 215327702724Smrg elif test "$need_locks" = warn; then 215427702724Smrg if test -f "$lockfile"; then 2155e19dfac4Smrg $ECHO "\ 215627702724Smrg*** ERROR, $lockfile exists and contains: 215727702724Smrg`cat $lockfile 2>/dev/null` 215827702724Smrg 215927702724SmrgThis indicates that another process is trying to use the same 216027702724Smrgtemporary object file, and libtool could not work around it because 216127702724Smrgyour compiler does not support \`-c' and \`-o' together. If you 216227702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 216327702724Smrgavoid parallel builds (make -j) in this platform, or get a better 216427702724Smrgcompiler." 216527702724Smrg 2166e19dfac4Smrg $opt_dry_run || $RM $removelist 216727702724Smrg exit $EXIT_FAILURE 216827702724Smrg fi 2169313a12fdSmrg func_append removelist " $output_obj" 2170e19dfac4Smrg $ECHO "$srcfile" > "$lockfile" 217127702724Smrg fi 217227702724Smrg 2173e19dfac4Smrg $opt_dry_run || $RM $removelist 2174313a12fdSmrg func_append removelist " $lockfile" 2175e19dfac4Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176e19dfac4Smrg 2177313a12fdSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2178313a12fdSmrg srcfile=$func_to_tool_file_result 2179e19dfac4Smrg func_quote_for_eval "$srcfile" 2180e19dfac4Smrg qsrcfile=$func_quote_for_eval_result 218127702724Smrg 218227702724Smrg # Only build a PIC object if we are building libtool libraries. 218327702724Smrg if test "$build_libtool_libs" = yes; then 218427702724Smrg # Without this assignment, base_compile gets emptied. 218527702724Smrg fbsd_hideous_sh_bug=$base_compile 218627702724Smrg 218727702724Smrg if test "$pic_mode" != no; then 218827702724Smrg command="$base_compile $qsrcfile $pic_flag" 218927702724Smrg else 219027702724Smrg # Don't build PIC code 219127702724Smrg command="$base_compile $qsrcfile" 219227702724Smrg fi 219327702724Smrg 2194e19dfac4Smrg func_mkdir_p "$xdir$objdir" 219527702724Smrg 219627702724Smrg if test -z "$output_obj"; then 219727702724Smrg # Place PIC objects in $objdir 2198313a12fdSmrg func_append command " -o $lobj" 219927702724Smrg fi 220027702724Smrg 2201e19dfac4Smrg func_show_eval_locale "$command" \ 2202e19dfac4Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 220327702724Smrg 220427702724Smrg if test "$need_locks" = warn && 220527702724Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206e19dfac4Smrg $ECHO "\ 220727702724Smrg*** ERROR, $lockfile contains: 220827702724Smrg`cat $lockfile 2>/dev/null` 220927702724Smrg 221027702724Smrgbut it should contain: 221127702724Smrg$srcfile 221227702724Smrg 221327702724SmrgThis indicates that another process is trying to use the same 221427702724Smrgtemporary object file, and libtool could not work around it because 221527702724Smrgyour compiler does not support \`-c' and \`-o' together. If you 221627702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 221727702724Smrgavoid parallel builds (make -j) in this platform, or get a better 221827702724Smrgcompiler." 221927702724Smrg 2220e19dfac4Smrg $opt_dry_run || $RM $removelist 222127702724Smrg exit $EXIT_FAILURE 222227702724Smrg fi 222327702724Smrg 222427702724Smrg # Just move the object if needed, then go on to compile the next one 222527702724Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226e19dfac4Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227e19dfac4Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 222827702724Smrg fi 222927702724Smrg 223027702724Smrg # Allow error messages only from the first compilation. 223127702724Smrg if test "$suppress_opt" = yes; then 2232e19dfac4Smrg suppress_output=' >/dev/null 2>&1' 223327702724Smrg fi 223427702724Smrg fi 223527702724Smrg 223627702724Smrg # Only build a position-dependent object if we build old libraries. 223727702724Smrg if test "$build_old_libs" = yes; then 223827702724Smrg if test "$pic_mode" != yes; then 223927702724Smrg # Don't build PIC code 2240e19dfac4Smrg command="$base_compile $qsrcfile$pie_flag" 224127702724Smrg else 224227702724Smrg command="$base_compile $qsrcfile $pic_flag" 224327702724Smrg fi 224427702724Smrg if test "$compiler_c_o" = yes; then 2245313a12fdSmrg func_append command " -o $obj" 224627702724Smrg fi 224727702724Smrg 224827702724Smrg # Suppress compiler output if we already did a PIC compilation. 2249313a12fdSmrg func_append command "$suppress_output" 2250e19dfac4Smrg func_show_eval_locale "$command" \ 2251e19dfac4Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 225227702724Smrg 225327702724Smrg if test "$need_locks" = warn && 225427702724Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255e19dfac4Smrg $ECHO "\ 225627702724Smrg*** ERROR, $lockfile contains: 225727702724Smrg`cat $lockfile 2>/dev/null` 225827702724Smrg 225927702724Smrgbut it should contain: 226027702724Smrg$srcfile 226127702724Smrg 226227702724SmrgThis indicates that another process is trying to use the same 226327702724Smrgtemporary object file, and libtool could not work around it because 226427702724Smrgyour compiler does not support \`-c' and \`-o' together. If you 226527702724Smrgrepeat this compilation, it may succeed, by chance, but you had better 226627702724Smrgavoid parallel builds (make -j) in this platform, or get a better 226727702724Smrgcompiler." 226827702724Smrg 2269e19dfac4Smrg $opt_dry_run || $RM $removelist 227027702724Smrg exit $EXIT_FAILURE 227127702724Smrg fi 227227702724Smrg 227327702724Smrg # Just move the object if needed 227427702724Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275e19dfac4Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276e19dfac4Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 227727702724Smrg fi 227827702724Smrg fi 227927702724Smrg 2280e19dfac4Smrg $opt_dry_run || { 2281e19dfac4Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 228227702724Smrg 2283e19dfac4Smrg # Unlock the critical section if it was locked 2284e19dfac4Smrg if test "$need_locks" != no; then 2285e19dfac4Smrg removelist=$lockfile 2286e19dfac4Smrg $RM "$lockfile" 2287e19dfac4Smrg fi 2288e19dfac4Smrg } 228927702724Smrg 229027702724Smrg exit $EXIT_SUCCESS 2291e19dfac4Smrg} 229227702724Smrg 2293e19dfac4Smrg$opt_help || { 2294313a12fdSmrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295e19dfac4Smrg} 229627702724Smrg 2297e19dfac4Smrgfunc_mode_help () 2298e19dfac4Smrg{ 2299e19dfac4Smrg # We need to display help for each of the modes. 2300313a12fdSmrg case $opt_mode in 2301e19dfac4Smrg "") 2302e19dfac4Smrg # Generic help is extracted from the usage comments 2303e19dfac4Smrg # at the start of this file. 2304e19dfac4Smrg func_help 2305e19dfac4Smrg ;; 230627702724Smrg 2307e19dfac4Smrg clean) 2308e19dfac4Smrg $ECHO \ 2309e19dfac4Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 231027702724Smrg 2311e19dfac4SmrgRemove files from the build directory. 231227702724Smrg 2313e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE 2314e19dfac4Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315e19dfac4Smrgto RM. 231627702724Smrg 2317e19dfac4SmrgIf FILE is a libtool library, object or program, all the files associated 2318e19dfac4Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319e19dfac4Smrg ;; 232027702724Smrg 2321e19dfac4Smrg compile) 2322e19dfac4Smrg $ECHO \ 2323e19dfac4Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 232427702724Smrg 2325e19dfac4SmrgCompile a source file into a libtool library object. 232627702724Smrg 2327e19dfac4SmrgThis mode accepts the following additional options: 232827702724Smrg 2329e19dfac4Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330e19dfac4Smrg -no-suppress do not suppress compiler output for multiple passes 2331313a12fdSmrg -prefer-pic try to build PIC objects only 2332313a12fdSmrg -prefer-non-pic try to build non-PIC objects only 2333e19dfac4Smrg -shared do not build a \`.o' file suitable for static linking 2334e19dfac4Smrg -static only build a \`.o' file suitable for static linking 2335313a12fdSmrg -Wc,FLAG pass FLAG directly to the compiler 233627702724Smrg 2337e19dfac4SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338e19dfac4Smrgfrom the given SOURCEFILE. 233927702724Smrg 2340e19dfac4SmrgThe output file name is determined by removing the directory component from 2341e19dfac4SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342e19dfac4Smrglibrary object suffix, \`.lo'." 2343e19dfac4Smrg ;; 234427702724Smrg 2345e19dfac4Smrg execute) 2346e19dfac4Smrg $ECHO \ 2347e19dfac4Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 234827702724Smrg 2349e19dfac4SmrgAutomatically set library path, then run a program. 235027702724Smrg 2351e19dfac4SmrgThis mode accepts the following additional options: 235227702724Smrg 2353e19dfac4Smrg -dlopen FILE add the directory containing FILE to the library path 235427702724Smrg 2355e19dfac4SmrgThis mode sets the library path environment variable according to \`-dlopen' 2356e19dfac4Smrgflags. 235727702724Smrg 2358e19dfac4SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359e19dfac4Smrginto their corresponding uninstalled binary, and any of their required library 2360e19dfac4Smrgdirectories are added to the library path. 236127702724Smrg 2362e19dfac4SmrgThen, COMMAND is executed, with ARGS as arguments." 2363e19dfac4Smrg ;; 236427702724Smrg 2365e19dfac4Smrg finish) 2366e19dfac4Smrg $ECHO \ 2367e19dfac4Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 236827702724Smrg 2369e19dfac4SmrgComplete the installation of libtool libraries. 237027702724Smrg 2371e19dfac4SmrgEach LIBDIR is a directory that contains libtool libraries. 237227702724Smrg 2373e19dfac4SmrgThe commands that this mode executes may require superuser privileges. Use 2374e19dfac4Smrgthe \`--dry-run' option if you just want to see what would be executed." 2375e19dfac4Smrg ;; 237627702724Smrg 2377e19dfac4Smrg install) 2378e19dfac4Smrg $ECHO \ 2379e19dfac4Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 238027702724Smrg 2381e19dfac4SmrgInstall executables or libraries. 238227702724Smrg 2383e19dfac4SmrgINSTALL-COMMAND is the installation command. The first component should be 2384e19dfac4Smrgeither the \`install' or \`cp' program. 238527702724Smrg 2386e19dfac4SmrgThe following components of INSTALL-COMMAND are treated specially: 238727702724Smrg 2388313a12fdSmrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 238927702724Smrg 2390e19dfac4SmrgThe rest of the components are interpreted as arguments to that command (only 2391e19dfac4SmrgBSD-compatible install options are recognized)." 2392e19dfac4Smrg ;; 239327702724Smrg 2394e19dfac4Smrg link) 2395e19dfac4Smrg $ECHO \ 2396e19dfac4Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 239727702724Smrg 2398e19dfac4SmrgLink object files or libraries together to form another library, or to 2399e19dfac4Smrgcreate an executable program. 240027702724Smrg 2401e19dfac4SmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402e19dfac4Smrga program from several object files. 240327702724Smrg 2404e19dfac4SmrgThe following components of LINK-COMMAND are treated specially: 240527702724Smrg 2406e19dfac4Smrg -all-static do not do any dynamic linking at all 2407e19dfac4Smrg -avoid-version do not add a version suffix if possible 2408313a12fdSmrg -bindir BINDIR specify path to binaries directory (for systems where 2409313a12fdSmrg libraries must be found in the PATH setting at runtime) 2410e19dfac4Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411e19dfac4Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412e19dfac4Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413e19dfac4Smrg -export-symbols SYMFILE 2414e19dfac4Smrg try to export only the symbols listed in SYMFILE 2415e19dfac4Smrg -export-symbols-regex REGEX 2416e19dfac4Smrg try to export only the symbols matching REGEX 2417e19dfac4Smrg -LLIBDIR search LIBDIR for required installed libraries 2418e19dfac4Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419e19dfac4Smrg -module build a library that can dlopened 2420e19dfac4Smrg -no-fast-install disable the fast-install mode 2421e19dfac4Smrg -no-install link a not-installable executable 2422e19dfac4Smrg -no-undefined declare that a library does not refer to external symbols 2423e19dfac4Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424e19dfac4Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425e19dfac4Smrg -precious-files-regex REGEX 2426e19dfac4Smrg don't remove output files matching REGEX 2427e19dfac4Smrg -release RELEASE specify package release information 2428e19dfac4Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429e19dfac4Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430e19dfac4Smrg -shared only do dynamic linking of libtool libraries 2431e19dfac4Smrg -shrext SUFFIX override the standard shared library file extension 2432e19dfac4Smrg -static do not do any dynamic linking of uninstalled libtool libraries 2433e19dfac4Smrg -static-libtool-libs 2434e19dfac4Smrg do not do any dynamic linking of libtool libraries 2435e19dfac4Smrg -version-info CURRENT[:REVISION[:AGE]] 2436e19dfac4Smrg specify library version info [each variable defaults to 0] 2437e19dfac4Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 2438313a12fdSmrg -Wc,FLAG 2439313a12fdSmrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2440313a12fdSmrg -Wl,FLAG 2441313a12fdSmrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 2442313a12fdSmrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 244327702724Smrg 2444e19dfac4SmrgAll other options (arguments beginning with \`-') are ignored. 244527702724Smrg 2446e19dfac4SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447e19dfac4Smrgtreated as uninstalled libtool libraries, other files are standard or library 2448e19dfac4Smrgobject files. 244927702724Smrg 2450e19dfac4SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451e19dfac4Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452e19dfac4Smrgrequired, except when creating a convenience library. 245327702724Smrg 2454e19dfac4SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455e19dfac4Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 245627702724Smrg 2457e19dfac4SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458e19dfac4Smrgis created, otherwise an executable program is created." 245927702724Smrg ;; 246027702724Smrg 2461e19dfac4Smrg uninstall) 2462e19dfac4Smrg $ECHO \ 2463e19dfac4Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 246427702724Smrg 2465e19dfac4SmrgRemove libraries from an installation directory. 246627702724Smrg 2467e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE 2468e19dfac4Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469e19dfac4Smrgto RM. 247027702724Smrg 2471e19dfac4SmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472e19dfac4SmrgOtherwise, only FILE itself is deleted using RM." 2473e19dfac4Smrg ;; 247427702724Smrg 2475e19dfac4Smrg *) 2476313a12fdSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477e19dfac4Smrg ;; 2478e19dfac4Smrg esac 247927702724Smrg 2480313a12fdSmrg echo 2481e19dfac4Smrg $ECHO "Try \`$progname --help' for more information about other modes." 2482e19dfac4Smrg} 248327702724Smrg 2484313a12fdSmrg# Now that we've collected a possible --mode arg, show help if necessary 2485313a12fdSmrgif $opt_help; then 2486313a12fdSmrg if test "$opt_help" = :; then 2487313a12fdSmrg func_mode_help 2488313a12fdSmrg else 2489313a12fdSmrg { 2490313a12fdSmrg func_help noexit 2491313a12fdSmrg for opt_mode in compile link execute install finish uninstall clean; do 2492313a12fdSmrg func_mode_help 2493313a12fdSmrg done 2494313a12fdSmrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2495313a12fdSmrg { 2496313a12fdSmrg func_help noexit 2497313a12fdSmrg for opt_mode in compile link execute install finish uninstall clean; do 2498313a12fdSmrg echo 2499313a12fdSmrg func_mode_help 2500313a12fdSmrg done 2501313a12fdSmrg } | 2502313a12fdSmrg sed '1d 2503313a12fdSmrg /^When reporting/,/^Report/{ 2504313a12fdSmrg H 2505313a12fdSmrg d 2506313a12fdSmrg } 2507313a12fdSmrg $x 2508313a12fdSmrg /information about other modes/d 2509313a12fdSmrg /more detailed .*MODE/d 2510313a12fdSmrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2511313a12fdSmrg fi 2512313a12fdSmrg exit $? 2513313a12fdSmrgfi 251427702724Smrg 251527702724Smrg 2516e19dfac4Smrg# func_mode_execute arg... 2517e19dfac4Smrgfunc_mode_execute () 2518e19dfac4Smrg{ 2519e19dfac4Smrg $opt_debug 2520e19dfac4Smrg # The first argument is the command name. 2521e19dfac4Smrg cmd="$nonopt" 2522e19dfac4Smrg test -z "$cmd" && \ 2523e19dfac4Smrg func_fatal_help "you must specify a COMMAND" 252427702724Smrg 2525e19dfac4Smrg # Handle -dlopen flags immediately. 2526313a12fdSmrg for file in $opt_dlopen; do 2527e19dfac4Smrg test -f "$file" \ 2528e19dfac4Smrg || func_fatal_help "\`$file' is not a file" 252927702724Smrg 2530e19dfac4Smrg dir= 2531e19dfac4Smrg case $file in 2532e19dfac4Smrg *.la) 2533313a12fdSmrg func_resolve_sysroot "$file" 2534313a12fdSmrg file=$func_resolve_sysroot_result 2535313a12fdSmrg 2536e19dfac4Smrg # Check to see that this really is a libtool archive. 2537e19dfac4Smrg func_lalib_unsafe_p "$file" \ 2538e19dfac4Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 253927702724Smrg 2540e19dfac4Smrg # Read the libtool library. 2541e19dfac4Smrg dlname= 2542e19dfac4Smrg library_names= 2543e19dfac4Smrg func_source "$file" 254427702724Smrg 2545e19dfac4Smrg # Skip this library if it cannot be dlopened. 2546e19dfac4Smrg if test -z "$dlname"; then 2547e19dfac4Smrg # Warn if it was a shared library. 2548e19dfac4Smrg test -n "$library_names" && \ 2549e19dfac4Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550e19dfac4Smrg continue 2551e19dfac4Smrg fi 255227702724Smrg 2553e19dfac4Smrg func_dirname "$file" "" "." 2554e19dfac4Smrg dir="$func_dirname_result" 255527702724Smrg 2556e19dfac4Smrg if test -f "$dir/$objdir/$dlname"; then 2557313a12fdSmrg func_append dir "/$objdir" 2558e19dfac4Smrg else 2559e19dfac4Smrg if test ! -f "$dir/$dlname"; then 2560e19dfac4Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561e19dfac4Smrg fi 2562e19dfac4Smrg fi 256327702724Smrg ;; 256427702724Smrg 2565e19dfac4Smrg *.lo) 2566e19dfac4Smrg # Just add the directory containing the .lo file. 2567e19dfac4Smrg func_dirname "$file" "" "." 2568e19dfac4Smrg dir="$func_dirname_result" 256927702724Smrg ;; 257027702724Smrg 2571e19dfac4Smrg *) 2572e19dfac4Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 257327702724Smrg continue 257427702724Smrg ;; 2575e19dfac4Smrg esac 257627702724Smrg 2577e19dfac4Smrg # Get the absolute pathname. 2578e19dfac4Smrg absdir=`cd "$dir" && pwd` 2579e19dfac4Smrg test -n "$absdir" && dir="$absdir" 258027702724Smrg 2581e19dfac4Smrg # Now add the directory to shlibpath_var. 2582e19dfac4Smrg if eval "test -z \"\$$shlibpath_var\""; then 2583e19dfac4Smrg eval "$shlibpath_var=\"\$dir\"" 2584e19dfac4Smrg else 2585e19dfac4Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586e19dfac4Smrg fi 2587e19dfac4Smrg done 258827702724Smrg 2589e19dfac4Smrg # This variable tells wrapper scripts just to set shlibpath_var 2590e19dfac4Smrg # rather than running their programs. 2591e19dfac4Smrg libtool_execute_magic="$magic" 259227702724Smrg 2593e19dfac4Smrg # Check if any of the arguments is a wrapper script. 2594e19dfac4Smrg args= 2595e19dfac4Smrg for file 2596e19dfac4Smrg do 2597e19dfac4Smrg case $file in 2598313a12fdSmrg -* | *.la | *.lo ) ;; 2599e19dfac4Smrg *) 2600e19dfac4Smrg # Do a test to see if this is really a libtool program. 2601e19dfac4Smrg if func_ltwrapper_script_p "$file"; then 2602e19dfac4Smrg func_source "$file" 2603e19dfac4Smrg # Transform arg to wrapped name. 2604e19dfac4Smrg file="$progdir/$program" 2605e19dfac4Smrg elif func_ltwrapper_executable_p "$file"; then 2606e19dfac4Smrg func_ltwrapper_scriptname "$file" 2607e19dfac4Smrg func_source "$func_ltwrapper_scriptname_result" 2608e19dfac4Smrg # Transform arg to wrapped name. 2609e19dfac4Smrg file="$progdir/$program" 2610e19dfac4Smrg fi 2611e19dfac4Smrg ;; 2612e19dfac4Smrg esac 2613e19dfac4Smrg # Quote arguments (to preserve shell metacharacters). 2614313a12fdSmrg func_append_quoted args "$file" 2615e19dfac4Smrg done 261627702724Smrg 2617e19dfac4Smrg if test "X$opt_dry_run" = Xfalse; then 2618e19dfac4Smrg if test -n "$shlibpath_var"; then 2619e19dfac4Smrg # Export the shlibpath_var. 2620e19dfac4Smrg eval "export $shlibpath_var" 2621e19dfac4Smrg fi 262227702724Smrg 2623e19dfac4Smrg # Restore saved environment variables 2624e19dfac4Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625e19dfac4Smrg do 2626e19dfac4Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627e19dfac4Smrg $lt_var=\$save_$lt_var; export $lt_var 2628e19dfac4Smrg else 2629e19dfac4Smrg $lt_unset $lt_var 2630e19dfac4Smrg fi" 2631e19dfac4Smrg done 263227702724Smrg 2633e19dfac4Smrg # Now prepare to actually exec the command. 2634e19dfac4Smrg exec_cmd="\$cmd$args" 2635e19dfac4Smrg else 2636e19dfac4Smrg # Display what would be done. 2637e19dfac4Smrg if test -n "$shlibpath_var"; then 2638e19dfac4Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 2639313a12fdSmrg echo "export $shlibpath_var" 2640e19dfac4Smrg fi 2641e19dfac4Smrg $ECHO "$cmd$args" 2642e19dfac4Smrg exit $EXIT_SUCCESS 2643e19dfac4Smrg fi 2644e19dfac4Smrg} 264527702724Smrg 2646313a12fdSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 264727702724Smrg 264827702724Smrg 2649e19dfac4Smrg# func_mode_finish arg... 2650e19dfac4Smrgfunc_mode_finish () 2651e19dfac4Smrg{ 2652e19dfac4Smrg $opt_debug 2653313a12fdSmrg libs= 2654313a12fdSmrg libdirs= 2655e19dfac4Smrg admincmds= 265627702724Smrg 2657313a12fdSmrg for opt in "$nonopt" ${1+"$@"} 2658313a12fdSmrg do 2659313a12fdSmrg if test -d "$opt"; then 2660313a12fdSmrg func_append libdirs " $opt" 2661313a12fdSmrg 2662313a12fdSmrg elif test -f "$opt"; then 2663313a12fdSmrg if func_lalib_unsafe_p "$opt"; then 2664313a12fdSmrg func_append libs " $opt" 2665313a12fdSmrg else 2666313a12fdSmrg func_warning "\`$opt' is not a valid libtool archive" 2667313a12fdSmrg fi 2668313a12fdSmrg 2669313a12fdSmrg else 2670313a12fdSmrg func_fatal_error "invalid argument \`$opt'" 2671313a12fdSmrg fi 2672313a12fdSmrg done 2673313a12fdSmrg 2674313a12fdSmrg if test -n "$libs"; then 2675313a12fdSmrg if test -n "$lt_sysroot"; then 2676313a12fdSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2677313a12fdSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2678313a12fdSmrg else 2679313a12fdSmrg sysroot_cmd= 2680313a12fdSmrg fi 2681313a12fdSmrg 2682313a12fdSmrg # Remove sysroot references 2683313a12fdSmrg if $opt_dry_run; then 2684313a12fdSmrg for lib in $libs; do 2685313a12fdSmrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2686313a12fdSmrg done 2687313a12fdSmrg else 2688313a12fdSmrg tmpdir=`func_mktempdir` 2689313a12fdSmrg for lib in $libs; do 2690313a12fdSmrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2691313a12fdSmrg > $tmpdir/tmp-la 2692313a12fdSmrg mv -f $tmpdir/tmp-la $lib 2693313a12fdSmrg done 2694313a12fdSmrg ${RM}r "$tmpdir" 2695313a12fdSmrg fi 2696313a12fdSmrg fi 269727702724Smrg 2698313a12fdSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699e19dfac4Smrg for libdir in $libdirs; do 2700e19dfac4Smrg if test -n "$finish_cmds"; then 2701e19dfac4Smrg # Do each command in the finish commands. 2702e19dfac4Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703e19dfac4Smrg'"$cmd"'"' 2704e19dfac4Smrg fi 2705e19dfac4Smrg if test -n "$finish_eval"; then 2706e19dfac4Smrg # Do the single finish_eval. 2707e19dfac4Smrg eval cmds=\"$finish_eval\" 2708313a12fdSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709e19dfac4Smrg $cmds" 2710e19dfac4Smrg fi 2711e19dfac4Smrg done 2712e19dfac4Smrg fi 271327702724Smrg 2714e19dfac4Smrg # Exit here if they wanted silent mode. 2715e19dfac4Smrg $opt_silent && exit $EXIT_SUCCESS 271627702724Smrg 2717313a12fdSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2718313a12fdSmrg echo "----------------------------------------------------------------------" 2719313a12fdSmrg echo "Libraries have been installed in:" 2720313a12fdSmrg for libdir in $libdirs; do 2721313a12fdSmrg $ECHO " $libdir" 2722313a12fdSmrg done 2723313a12fdSmrg echo 2724313a12fdSmrg echo "If you ever happen to want to link against installed libraries" 2725313a12fdSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 2726313a12fdSmrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2727313a12fdSmrg echo "flag during linking and do at least one of the following:" 2728313a12fdSmrg if test -n "$shlibpath_var"; then 2729313a12fdSmrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2730313a12fdSmrg echo " during execution" 2731313a12fdSmrg fi 2732313a12fdSmrg if test -n "$runpath_var"; then 2733313a12fdSmrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 2734313a12fdSmrg echo " during linking" 2735313a12fdSmrg fi 2736313a12fdSmrg if test -n "$hardcode_libdir_flag_spec"; then 2737313a12fdSmrg libdir=LIBDIR 2738313a12fdSmrg eval flag=\"$hardcode_libdir_flag_spec\" 2739313a12fdSmrg 2740313a12fdSmrg $ECHO " - use the \`$flag' linker flag" 2741313a12fdSmrg fi 2742313a12fdSmrg if test -n "$admincmds"; then 2743313a12fdSmrg $ECHO " - have your system administrator run these commands:$admincmds" 2744313a12fdSmrg fi 2745313a12fdSmrg if test -f /etc/ld.so.conf; then 2746313a12fdSmrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2747313a12fdSmrg fi 2748313a12fdSmrg echo 274927702724Smrg 2750313a12fdSmrg echo "See any operating system documentation about shared libraries for" 2751313a12fdSmrg case $host in 2752313a12fdSmrg solaris2.[6789]|solaris2.1[0-9]) 2753313a12fdSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2754313a12fdSmrg echo "pages." 2755313a12fdSmrg ;; 2756313a12fdSmrg *) 2757313a12fdSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 2758313a12fdSmrg ;; 2759313a12fdSmrg esac 2760313a12fdSmrg echo "----------------------------------------------------------------------" 2761e19dfac4Smrg fi 2762e19dfac4Smrg exit $EXIT_SUCCESS 2763e19dfac4Smrg} 276427702724Smrg 2765313a12fdSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 276627702724Smrg 276727702724Smrg 2768e19dfac4Smrg# func_mode_install arg... 2769e19dfac4Smrgfunc_mode_install () 2770e19dfac4Smrg{ 2771e19dfac4Smrg $opt_debug 2772e19dfac4Smrg # There may be an optional sh(1) argument at the beginning of 2773e19dfac4Smrg # install_prog (especially on Windows NT). 2774e19dfac4Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775e19dfac4Smrg # Allow the use of GNU shtool's install command. 2776313a12fdSmrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777e19dfac4Smrg # Aesthetically quote it. 2778e19dfac4Smrg func_quote_for_eval "$nonopt" 2779e19dfac4Smrg install_prog="$func_quote_for_eval_result " 2780e19dfac4Smrg arg=$1 2781e19dfac4Smrg shift 2782e19dfac4Smrg else 2783e19dfac4Smrg install_prog= 2784e19dfac4Smrg arg=$nonopt 2785e19dfac4Smrg fi 278627702724Smrg 2787e19dfac4Smrg # The real first argument should be the name of the installation program. 2788e19dfac4Smrg # Aesthetically quote it. 2789e19dfac4Smrg func_quote_for_eval "$arg" 2790313a12fdSmrg func_append install_prog "$func_quote_for_eval_result" 2791313a12fdSmrg install_shared_prog=$install_prog 2792313a12fdSmrg case " $install_prog " in 2793313a12fdSmrg *[\\\ /]cp\ *) install_cp=: ;; 2794313a12fdSmrg *) install_cp=false ;; 2795313a12fdSmrg esac 2796e19dfac4Smrg 2797e19dfac4Smrg # We need to accept at least all the BSD install flags. 2798e19dfac4Smrg dest= 2799e19dfac4Smrg files= 2800e19dfac4Smrg opts= 2801e19dfac4Smrg prev= 2802e19dfac4Smrg install_type= 2803e19dfac4Smrg isdir=no 2804e19dfac4Smrg stripme= 2805313a12fdSmrg no_mode=: 2806e19dfac4Smrg for arg 2807e19dfac4Smrg do 2808313a12fdSmrg arg2= 2809e19dfac4Smrg if test -n "$dest"; then 2810313a12fdSmrg func_append files " $dest" 2811e19dfac4Smrg dest=$arg 2812e19dfac4Smrg continue 281327702724Smrg fi 281427702724Smrg 2815e19dfac4Smrg case $arg in 2816e19dfac4Smrg -d) isdir=yes ;; 2817e19dfac4Smrg -f) 2818313a12fdSmrg if $install_cp; then :; else 2819313a12fdSmrg prev=$arg 2820313a12fdSmrg fi 2821e19dfac4Smrg ;; 2822e19dfac4Smrg -g | -m | -o) 2823e19dfac4Smrg prev=$arg 2824e19dfac4Smrg ;; 2825e19dfac4Smrg -s) 2826e19dfac4Smrg stripme=" -s" 2827e19dfac4Smrg continue 2828e19dfac4Smrg ;; 2829e19dfac4Smrg -*) 2830e19dfac4Smrg ;; 2831e19dfac4Smrg *) 2832e19dfac4Smrg # If the previous option needed an argument, then skip it. 2833e19dfac4Smrg if test -n "$prev"; then 2834313a12fdSmrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 2835313a12fdSmrg arg2=$install_override_mode 2836313a12fdSmrg no_mode=false 2837313a12fdSmrg fi 2838e19dfac4Smrg prev= 2839e19dfac4Smrg else 2840e19dfac4Smrg dest=$arg 2841e19dfac4Smrg continue 2842e19dfac4Smrg fi 2843e19dfac4Smrg ;; 2844e19dfac4Smrg esac 284527702724Smrg 2846e19dfac4Smrg # Aesthetically quote the argument. 2847e19dfac4Smrg func_quote_for_eval "$arg" 2848313a12fdSmrg func_append install_prog " $func_quote_for_eval_result" 2849313a12fdSmrg if test -n "$arg2"; then 2850313a12fdSmrg func_quote_for_eval "$arg2" 2851313a12fdSmrg fi 2852313a12fdSmrg func_append install_shared_prog " $func_quote_for_eval_result" 2853e19dfac4Smrg done 285427702724Smrg 2855e19dfac4Smrg test -z "$install_prog" && \ 2856e19dfac4Smrg func_fatal_help "you must specify an install program" 285727702724Smrg 2858e19dfac4Smrg test -n "$prev" && \ 2859e19dfac4Smrg func_fatal_help "the \`$prev' option requires an argument" 286027702724Smrg 2861313a12fdSmrg if test -n "$install_override_mode" && $no_mode; then 2862313a12fdSmrg if $install_cp; then :; else 2863313a12fdSmrg func_quote_for_eval "$install_override_mode" 2864313a12fdSmrg func_append install_shared_prog " -m $func_quote_for_eval_result" 2865313a12fdSmrg fi 2866313a12fdSmrg fi 2867313a12fdSmrg 2868e19dfac4Smrg if test -z "$files"; then 2869e19dfac4Smrg if test -z "$dest"; then 2870e19dfac4Smrg func_fatal_help "no file or destination specified" 2871e19dfac4Smrg else 2872e19dfac4Smrg func_fatal_help "you must specify a destination" 287327702724Smrg fi 287427702724Smrg fi 287527702724Smrg 2876e19dfac4Smrg # Strip any trailing slash from the destination. 2877e19dfac4Smrg func_stripname '' '/' "$dest" 2878e19dfac4Smrg dest=$func_stripname_result 287927702724Smrg 2880e19dfac4Smrg # Check to see that the destination is a directory. 2881e19dfac4Smrg test -d "$dest" && isdir=yes 2882e19dfac4Smrg if test "$isdir" = yes; then 2883e19dfac4Smrg destdir="$dest" 2884e19dfac4Smrg destname= 2885e19dfac4Smrg else 2886e19dfac4Smrg func_dirname_and_basename "$dest" "" "." 2887e19dfac4Smrg destdir="$func_dirname_result" 2888e19dfac4Smrg destname="$func_basename_result" 2889e19dfac4Smrg 2890e19dfac4Smrg # Not a directory, so check to see that there is only one file specified. 2891e19dfac4Smrg set dummy $files; shift 2892e19dfac4Smrg test "$#" -gt 1 && \ 2893e19dfac4Smrg func_fatal_help "\`$dest' is not a directory" 2894e19dfac4Smrg fi 2895e19dfac4Smrg case $destdir in 2896e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 289727702724Smrg *) 2898e19dfac4Smrg for file in $files; do 2899e19dfac4Smrg case $file in 2900e19dfac4Smrg *.lo) ;; 2901e19dfac4Smrg *) 2902e19dfac4Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903e19dfac4Smrg ;; 2904e19dfac4Smrg esac 2905e19dfac4Smrg done 290627702724Smrg ;; 290727702724Smrg esac 290827702724Smrg 2909e19dfac4Smrg # This variable tells wrapper scripts just to set variables rather 2910e19dfac4Smrg # than running their programs. 2911e19dfac4Smrg libtool_install_magic="$magic" 291227702724Smrg 2913e19dfac4Smrg staticlibs= 2914e19dfac4Smrg future_libdirs= 2915e19dfac4Smrg current_libdirs= 2916e19dfac4Smrg for file in $files; do 291727702724Smrg 2918e19dfac4Smrg # Do each installation. 2919e19dfac4Smrg case $file in 2920e19dfac4Smrg *.$libext) 2921e19dfac4Smrg # Do the static libraries later. 2922313a12fdSmrg func_append staticlibs " $file" 2923e19dfac4Smrg ;; 2924e19dfac4Smrg 2925e19dfac4Smrg *.la) 2926313a12fdSmrg func_resolve_sysroot "$file" 2927313a12fdSmrg file=$func_resolve_sysroot_result 2928313a12fdSmrg 2929e19dfac4Smrg # Check to see that this really is a libtool archive. 2930e19dfac4Smrg func_lalib_unsafe_p "$file" \ 2931e19dfac4Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932e19dfac4Smrg 2933e19dfac4Smrg library_names= 2934e19dfac4Smrg old_library= 2935e19dfac4Smrg relink_command= 2936e19dfac4Smrg func_source "$file" 2937e19dfac4Smrg 2938e19dfac4Smrg # Add the libdir to current_libdirs if it is the destination. 2939e19dfac4Smrg if test "X$destdir" = "X$libdir"; then 2940e19dfac4Smrg case "$current_libdirs " in 2941e19dfac4Smrg *" $libdir "*) ;; 2942313a12fdSmrg *) func_append current_libdirs " $libdir" ;; 294327702724Smrg esac 2944e19dfac4Smrg else 2945e19dfac4Smrg # Note the libdir as a future libdir. 2946e19dfac4Smrg case "$future_libdirs " in 2947e19dfac4Smrg *" $libdir "*) ;; 2948313a12fdSmrg *) func_append future_libdirs " $libdir" ;; 2949e19dfac4Smrg esac 2950e19dfac4Smrg fi 295127702724Smrg 2952e19dfac4Smrg func_dirname "$file" "/" "" 2953e19dfac4Smrg dir="$func_dirname_result" 2954313a12fdSmrg func_append dir "$objdir" 2955e19dfac4Smrg 2956e19dfac4Smrg if test -n "$relink_command"; then 2957e19dfac4Smrg # Determine the prefix the user has applied to our future dir. 2958313a12fdSmrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959e19dfac4Smrg 2960e19dfac4Smrg # Don't allow the user to place us outside of our expected 2961e19dfac4Smrg # location b/c this prevents finding dependent libraries that 2962e19dfac4Smrg # are installed to the same prefix. 2963e19dfac4Smrg # At present, this check doesn't affect windows .dll's that 2964e19dfac4Smrg # are installed into $libdir/../bin (currently, that works fine) 2965e19dfac4Smrg # but it's something to keep an eye on. 2966e19dfac4Smrg test "$inst_prefix_dir" = "$destdir" && \ 2967e19dfac4Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968e19dfac4Smrg 2969e19dfac4Smrg if test -n "$inst_prefix_dir"; then 2970e19dfac4Smrg # Stick the inst_prefix_dir data into the link command. 2971313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972e19dfac4Smrg else 2973313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974e19dfac4Smrg fi 2975e19dfac4Smrg 2976e19dfac4Smrg func_warning "relinking \`$file'" 2977e19dfac4Smrg func_show_eval "$relink_command" \ 2978e19dfac4Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979e19dfac4Smrg fi 2980e19dfac4Smrg 2981e19dfac4Smrg # See the names of the shared library. 2982e19dfac4Smrg set dummy $library_names; shift 2983e19dfac4Smrg if test -n "$1"; then 2984e19dfac4Smrg realname="$1" 2985e19dfac4Smrg shift 2986e19dfac4Smrg 2987e19dfac4Smrg srcname="$realname" 2988e19dfac4Smrg test -n "$relink_command" && srcname="$realname"T 2989e19dfac4Smrg 2990e19dfac4Smrg # Install the shared library and build the symlinks. 2991313a12fdSmrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992e19dfac4Smrg 'exit $?' 2993e19dfac4Smrg tstripme="$stripme" 2994e19dfac4Smrg case $host_os in 2995e19dfac4Smrg cygwin* | mingw* | pw32* | cegcc*) 2996e19dfac4Smrg case $realname in 2997e19dfac4Smrg *.dll.a) 2998e19dfac4Smrg tstripme="" 2999e19dfac4Smrg ;; 3000e19dfac4Smrg esac 300127702724Smrg ;; 300227702724Smrg esac 3003e19dfac4Smrg if test -n "$tstripme" && test -n "$striplib"; then 3004e19dfac4Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 300527702724Smrg fi 3006e19dfac4Smrg 3007e19dfac4Smrg if test "$#" -gt 0; then 3008e19dfac4Smrg # Delete the old symlinks, and create new ones. 3009e19dfac4Smrg # Try `ln -sf' first, because the `ln' binary might depend on 3010e19dfac4Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011e19dfac4Smrg # so we also need to try rm && ln -s. 3012e19dfac4Smrg for linkname 3013e19dfac4Smrg do 3014e19dfac4Smrg test "$linkname" != "$realname" \ 3015e19dfac4Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 301627702724Smrg done 301727702724Smrg fi 301827702724Smrg 3019e19dfac4Smrg # Do each command in the postinstall commands. 3020e19dfac4Smrg lib="$destdir/$realname" 3021e19dfac4Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 302227702724Smrg fi 302327702724Smrg 3024e19dfac4Smrg # Install the pseudo-library for information purposes. 3025e19dfac4Smrg func_basename "$file" 3026e19dfac4Smrg name="$func_basename_result" 3027e19dfac4Smrg instname="$dir/$name"i 3028e19dfac4Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 302927702724Smrg 3030e19dfac4Smrg # Maybe install the static library, too. 3031313a12fdSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032e19dfac4Smrg ;; 303327702724Smrg 3034e19dfac4Smrg *.lo) 3035e19dfac4Smrg # Install (i.e. copy) a libtool object. 303627702724Smrg 3037e19dfac4Smrg # Figure out destination file name, if it wasn't already specified. 3038e19dfac4Smrg if test -n "$destname"; then 3039e19dfac4Smrg destfile="$destdir/$destname" 3040e19dfac4Smrg else 3041e19dfac4Smrg func_basename "$file" 3042e19dfac4Smrg destfile="$func_basename_result" 3043e19dfac4Smrg destfile="$destdir/$destfile" 3044e19dfac4Smrg fi 3045e19dfac4Smrg 3046e19dfac4Smrg # Deduce the name of the destination old-style object file. 3047e19dfac4Smrg case $destfile in 3048e19dfac4Smrg *.lo) 3049e19dfac4Smrg func_lo2o "$destfile" 3050e19dfac4Smrg staticdest=$func_lo2o_result 3051e19dfac4Smrg ;; 3052e19dfac4Smrg *.$objext) 3053e19dfac4Smrg staticdest="$destfile" 3054e19dfac4Smrg destfile= 3055e19dfac4Smrg ;; 3056e19dfac4Smrg *) 3057e19dfac4Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058e19dfac4Smrg ;; 305927702724Smrg esac 306027702724Smrg 3061e19dfac4Smrg # Install the libtool object if requested. 3062e19dfac4Smrg test -n "$destfile" && \ 3063e19dfac4Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 3064e19dfac4Smrg 3065e19dfac4Smrg # Install the old object if enabled. 3066e19dfac4Smrg if test "$build_old_libs" = yes; then 3067e19dfac4Smrg # Deduce the name of the old-style object file. 3068e19dfac4Smrg func_lo2o "$file" 3069e19dfac4Smrg staticobj=$func_lo2o_result 3070e19dfac4Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 307127702724Smrg fi 3072e19dfac4Smrg exit $EXIT_SUCCESS 3073e19dfac4Smrg ;; 307427702724Smrg 3075e19dfac4Smrg *) 3076e19dfac4Smrg # Figure out destination file name, if it wasn't already specified. 3077e19dfac4Smrg if test -n "$destname"; then 3078e19dfac4Smrg destfile="$destdir/$destname" 3079e19dfac4Smrg else 3080e19dfac4Smrg func_basename "$file" 3081e19dfac4Smrg destfile="$func_basename_result" 3082e19dfac4Smrg destfile="$destdir/$destfile" 3083e19dfac4Smrg fi 3084e19dfac4Smrg 3085e19dfac4Smrg # If the file is missing, and there is a .exe on the end, strip it 3086e19dfac4Smrg # because it is most likely a libtool script we actually want to 3087e19dfac4Smrg # install 3088e19dfac4Smrg stripped_ext="" 3089e19dfac4Smrg case $file in 3090e19dfac4Smrg *.exe) 3091e19dfac4Smrg if test ! -f "$file"; then 3092e19dfac4Smrg func_stripname '' '.exe' "$file" 3093e19dfac4Smrg file=$func_stripname_result 3094e19dfac4Smrg stripped_ext=".exe" 309527702724Smrg fi 3096e19dfac4Smrg ;; 3097e19dfac4Smrg esac 309827702724Smrg 3099e19dfac4Smrg # Do a test to see if this is really a libtool program. 3100e19dfac4Smrg case $host in 3101e19dfac4Smrg *cygwin* | *mingw*) 3102e19dfac4Smrg if func_ltwrapper_executable_p "$file"; then 3103e19dfac4Smrg func_ltwrapper_scriptname "$file" 3104e19dfac4Smrg wrapper=$func_ltwrapper_scriptname_result 3105e19dfac4Smrg else 3106e19dfac4Smrg func_stripname '' '.exe' "$file" 3107e19dfac4Smrg wrapper=$func_stripname_result 3108e19dfac4Smrg fi 3109e19dfac4Smrg ;; 3110e19dfac4Smrg *) 3111e19dfac4Smrg wrapper=$file 3112e19dfac4Smrg ;; 3113e19dfac4Smrg esac 3114e19dfac4Smrg if func_ltwrapper_script_p "$wrapper"; then 3115e19dfac4Smrg notinst_deplibs= 3116e19dfac4Smrg relink_command= 311727702724Smrg 3118e19dfac4Smrg func_source "$wrapper" 311927702724Smrg 3120e19dfac4Smrg # Check the variables that should have been set. 3121e19dfac4Smrg test -z "$generated_by_libtool_version" && \ 3122e19dfac4Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123e19dfac4Smrg 3124e19dfac4Smrg finalize=yes 3125e19dfac4Smrg for lib in $notinst_deplibs; do 3126e19dfac4Smrg # Check to see that each library is installed. 3127e19dfac4Smrg libdir= 3128e19dfac4Smrg if test -f "$lib"; then 3129e19dfac4Smrg func_source "$lib" 3130e19dfac4Smrg fi 3131313a12fdSmrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132e19dfac4Smrg if test -n "$libdir" && test ! -f "$libfile"; then 3133e19dfac4Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 3134e19dfac4Smrg finalize=no 3135e19dfac4Smrg fi 3136e19dfac4Smrg done 3137e19dfac4Smrg 3138e19dfac4Smrg relink_command= 3139e19dfac4Smrg func_source "$wrapper" 3140e19dfac4Smrg 3141e19dfac4Smrg outputname= 3142e19dfac4Smrg if test "$fast_install" = no && test -n "$relink_command"; then 3143e19dfac4Smrg $opt_dry_run || { 3144e19dfac4Smrg if test "$finalize" = yes; then 3145e19dfac4Smrg tmpdir=`func_mktempdir` 3146e19dfac4Smrg func_basename "$file$stripped_ext" 3147e19dfac4Smrg file="$func_basename_result" 3148e19dfac4Smrg outputname="$tmpdir/$file" 3149e19dfac4Smrg # Replace the output file specification. 3150313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151e19dfac4Smrg 3152e19dfac4Smrg $opt_silent || { 3153e19dfac4Smrg func_quote_for_expand "$relink_command" 3154e19dfac4Smrg eval "func_echo $func_quote_for_expand_result" 3155e19dfac4Smrg } 3156e19dfac4Smrg if eval "$relink_command"; then : 3157e19dfac4Smrg else 3158e19dfac4Smrg func_error "error: relink \`$file' with the above command before installing it" 3159e19dfac4Smrg $opt_dry_run || ${RM}r "$tmpdir" 3160e19dfac4Smrg continue 3161e19dfac4Smrg fi 3162e19dfac4Smrg file="$outputname" 3163e19dfac4Smrg else 3164e19dfac4Smrg func_warning "cannot relink \`$file'" 3165e19dfac4Smrg fi 3166e19dfac4Smrg } 316727702724Smrg else 3168e19dfac4Smrg # Install the binary that we compiled earlier. 3169313a12fdSmrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 317027702724Smrg fi 3171e19dfac4Smrg fi 317227702724Smrg 3173e19dfac4Smrg # remove .exe since cygwin /usr/bin/install will append another 3174e19dfac4Smrg # one anyway 3175e19dfac4Smrg case $install_prog,$host in 3176e19dfac4Smrg */usr/bin/install*,*cygwin*) 3177e19dfac4Smrg case $file:$destfile in 3178e19dfac4Smrg *.exe:*.exe) 3179e19dfac4Smrg # this is ok 3180e19dfac4Smrg ;; 3181e19dfac4Smrg *.exe:*) 3182e19dfac4Smrg destfile=$destfile.exe 3183e19dfac4Smrg ;; 3184e19dfac4Smrg *:*.exe) 3185e19dfac4Smrg func_stripname '' '.exe' "$destfile" 3186e19dfac4Smrg destfile=$func_stripname_result 3187e19dfac4Smrg ;; 3188e19dfac4Smrg esac 318927702724Smrg ;; 319027702724Smrg esac 3191e19dfac4Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192e19dfac4Smrg $opt_dry_run || if test -n "$outputname"; then 3193e19dfac4Smrg ${RM}r "$tmpdir" 3194e19dfac4Smrg fi 3195e19dfac4Smrg ;; 3196e19dfac4Smrg esac 3197e19dfac4Smrg done 319827702724Smrg 3199e19dfac4Smrg for file in $staticlibs; do 3200e19dfac4Smrg func_basename "$file" 3201e19dfac4Smrg name="$func_basename_result" 320227702724Smrg 3203e19dfac4Smrg # Set up the ranlib parameters. 3204e19dfac4Smrg oldlib="$destdir/$name" 3205313a12fdSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206313a12fdSmrg tool_oldlib=$func_to_tool_file_result 320727702724Smrg 3208e19dfac4Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 320927702724Smrg 3210e19dfac4Smrg if test -n "$stripme" && test -n "$old_striplib"; then 3211313a12fdSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212e19dfac4Smrg fi 321327702724Smrg 3214e19dfac4Smrg # Do each command in the postinstall commands. 3215e19dfac4Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216e19dfac4Smrg done 321727702724Smrg 3218e19dfac4Smrg test -n "$future_libdirs" && \ 3219e19dfac4Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 322027702724Smrg 3221e19dfac4Smrg if test -n "$current_libdirs"; then 3222e19dfac4Smrg # Maybe just do a dry run. 3223e19dfac4Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224e19dfac4Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225e19dfac4Smrg else 3226e19dfac4Smrg exit $EXIT_SUCCESS 3227e19dfac4Smrg fi 3228e19dfac4Smrg} 322927702724Smrg 3230313a12fdSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 323127702724Smrg 323227702724Smrg 3233e19dfac4Smrg# func_generate_dlsyms outputname originator pic_p 3234e19dfac4Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235e19dfac4Smrg# a dlpreopen symbol table. 3236e19dfac4Smrgfunc_generate_dlsyms () 3237e19dfac4Smrg{ 3238e19dfac4Smrg $opt_debug 3239e19dfac4Smrg my_outputname="$1" 3240e19dfac4Smrg my_originator="$2" 3241e19dfac4Smrg my_pic_p="${3-no}" 3242e19dfac4Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243e19dfac4Smrg my_dlsyms= 3244e19dfac4Smrg 3245e19dfac4Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246e19dfac4Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247e19dfac4Smrg my_dlsyms="${my_outputname}S.c" 3248e19dfac4Smrg else 3249e19dfac4Smrg func_error "not configured to extract global symbols from dlpreopened files" 3250e19dfac4Smrg fi 3251e19dfac4Smrg fi 325227702724Smrg 3253e19dfac4Smrg if test -n "$my_dlsyms"; then 3254e19dfac4Smrg case $my_dlsyms in 3255e19dfac4Smrg "") ;; 3256e19dfac4Smrg *.c) 3257e19dfac4Smrg # Discover the nlist of each of the dlfiles. 3258e19dfac4Smrg nlist="$output_objdir/${my_outputname}.nm" 3259e19dfac4Smrg 3260e19dfac4Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261e19dfac4Smrg 3262e19dfac4Smrg # Parse the name list into a source file. 3263e19dfac4Smrg func_verbose "creating $output_objdir/$my_dlsyms" 3264e19dfac4Smrg 3265e19dfac4Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266e19dfac4Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267e19dfac4Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268e19dfac4Smrg 3269e19dfac4Smrg#ifdef __cplusplus 3270e19dfac4Smrgextern \"C\" { 3271e19dfac4Smrg#endif 3272e19dfac4Smrg 3273313a12fdSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3274313a12fdSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3275313a12fdSmrg#endif 3276313a12fdSmrg 3277313a12fdSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3278313a12fdSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3279313a12fdSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 3280313a12fdSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 3281313a12fdSmrg# define LT_DLSYM_CONST 3282313a12fdSmrg#elif defined(__osf__) 3283313a12fdSmrg/* This system does not cope well with relocations in const data. */ 3284313a12fdSmrg# define LT_DLSYM_CONST 3285313a12fdSmrg#else 3286313a12fdSmrg# define LT_DLSYM_CONST const 3287313a12fdSmrg#endif 3288313a12fdSmrg 3289e19dfac4Smrg/* External symbol declarations for the compiler. */\ 3290e19dfac4Smrg" 3291e19dfac4Smrg 3292e19dfac4Smrg if test "$dlself" = yes; then 3293e19dfac4Smrg func_verbose "generating symbol list for \`$output'" 3294e19dfac4Smrg 3295e19dfac4Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296e19dfac4Smrg 3297e19dfac4Smrg # Add our own program objects to the symbol list. 3298313a12fdSmrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299e19dfac4Smrg for progfile in $progfiles; do 3300313a12fdSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 3301313a12fdSmrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3302313a12fdSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303e19dfac4Smrg done 3304e19dfac4Smrg 3305e19dfac4Smrg if test -n "$exclude_expsyms"; then 3306e19dfac4Smrg $opt_dry_run || { 3307e19dfac4Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 3309e19dfac4Smrg } 331027702724Smrg fi 331127702724Smrg 3312e19dfac4Smrg if test -n "$export_symbols_regex"; then 3313e19dfac4Smrg $opt_dry_run || { 3314e19dfac4Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 3316e19dfac4Smrg } 331727702724Smrg fi 3318e19dfac4Smrg 3319e19dfac4Smrg # Prepare the list of exported symbols 3320e19dfac4Smrg if test -z "$export_symbols"; then 3321e19dfac4Smrg export_symbols="$output_objdir/$outputname.exp" 3322e19dfac4Smrg $opt_dry_run || { 3323e19dfac4Smrg $RM $export_symbols 3324e19dfac4Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325e19dfac4Smrg case $host in 3326e19dfac4Smrg *cygwin* | *mingw* | *cegcc* ) 3327e19dfac4Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328e19dfac4Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329e19dfac4Smrg ;; 333027702724Smrg esac 3331e19dfac4Smrg } 3332e19dfac4Smrg else 3333e19dfac4Smrg $opt_dry_run || { 3334e19dfac4Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335e19dfac4Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336e19dfac4Smrg eval '$MV "$nlist"T "$nlist"' 3337e19dfac4Smrg case $host in 3338313a12fdSmrg *cygwin* | *mingw* | *cegcc* ) 3339e19dfac4Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340e19dfac4Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341e19dfac4Smrg ;; 334227702724Smrg esac 3343e19dfac4Smrg } 334427702724Smrg fi 3345e19dfac4Smrg fi 334627702724Smrg 3347e19dfac4Smrg for dlprefile in $dlprefiles; do 3348e19dfac4Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349e19dfac4Smrg func_basename "$dlprefile" 3350e19dfac4Smrg name="$func_basename_result" 3351313a12fdSmrg case $host in 3352313a12fdSmrg *cygwin* | *mingw* | *cegcc* ) 3353313a12fdSmrg # if an import library, we need to obtain dlname 3354313a12fdSmrg if func_win32_import_lib_p "$dlprefile"; then 3355313a12fdSmrg func_tr_sh "$dlprefile" 3356313a12fdSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 3357313a12fdSmrg dlprefile_dlbasename="" 3358313a12fdSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3359313a12fdSmrg # Use subshell, to avoid clobbering current variable values 3360313a12fdSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 3361313a12fdSmrg if test -n "$dlprefile_dlname" ; then 3362313a12fdSmrg func_basename "$dlprefile_dlname" 3363313a12fdSmrg dlprefile_dlbasename="$func_basename_result" 3364313a12fdSmrg else 3365313a12fdSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 3366313a12fdSmrg $sharedlib_from_linklib_cmd "$dlprefile" 3367313a12fdSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 3368313a12fdSmrg fi 3369313a12fdSmrg fi 3370313a12fdSmrg $opt_dry_run || { 3371313a12fdSmrg if test -n "$dlprefile_dlbasename" ; then 3372313a12fdSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3373313a12fdSmrg else 3374313a12fdSmrg func_warning "Could not compute DLL name from $name" 3375313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 3376313a12fdSmrg fi 3377313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3378313a12fdSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3379313a12fdSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3380313a12fdSmrg } 3381313a12fdSmrg else # not an import lib 3382313a12fdSmrg $opt_dry_run || { 3383313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 3384313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3385313a12fdSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3386313a12fdSmrg } 3387313a12fdSmrg fi 3388313a12fdSmrg ;; 3389313a12fdSmrg *) 3390313a12fdSmrg $opt_dry_run || { 3391313a12fdSmrg eval '$ECHO ": $name " >> "$nlist"' 3392313a12fdSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3393313a12fdSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3394313a12fdSmrg } 3395313a12fdSmrg ;; 3396313a12fdSmrg esac 3397e19dfac4Smrg done 339827702724Smrg 3399e19dfac4Smrg $opt_dry_run || { 3400e19dfac4Smrg # Make sure we have at least an empty file. 3401e19dfac4Smrg test -f "$nlist" || : > "$nlist" 340227702724Smrg 3403e19dfac4Smrg if test -n "$exclude_expsyms"; then 3404e19dfac4Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405e19dfac4Smrg $MV "$nlist"T "$nlist" 340627702724Smrg fi 340727702724Smrg 3408e19dfac4Smrg # Try sorting and uniquifying the output. 3409e19dfac4Smrg if $GREP -v "^: " < "$nlist" | 3410e19dfac4Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411e19dfac4Smrg sort -k 3 341227702724Smrg else 3413e19dfac4Smrg sort +2 3414e19dfac4Smrg fi | 3415e19dfac4Smrg uniq > "$nlist"S; then 3416e19dfac4Smrg : 341727702724Smrg else 3418e19dfac4Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 341927702724Smrg fi 342027702724Smrg 3421e19dfac4Smrg if test -f "$nlist"S; then 3422e19dfac4Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 342327702724Smrg else 3424313a12fdSmrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 342527702724Smrg fi 342627702724Smrg 3427313a12fdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 342827702724Smrg 3429e19dfac4Smrg/* The mapping between symbol names and symbols. */ 3430e19dfac4Smrgtypedef struct { 3431e19dfac4Smrg const char *name; 3432e19dfac4Smrg void *address; 3433e19dfac4Smrg} lt_dlsymlist; 3434313a12fdSmrgextern LT_DLSYM_CONST lt_dlsymlist 3435e19dfac4Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 3436313a12fdSmrgLT_DLSYM_CONST lt_dlsymlist 3437e19dfac4Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 3438e19dfac4Smrg{\ 3439e19dfac4Smrg { \"$my_originator\", (void *) 0 }," 3440e19dfac4Smrg 3441e19dfac4Smrg case $need_lib_prefix in 3442e19dfac4Smrg no) 3443e19dfac4Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444e19dfac4Smrg ;; 3445e19dfac4Smrg *) 3446e19dfac4Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447e19dfac4Smrg ;; 3448e19dfac4Smrg esac 3449313a12fdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 3450e19dfac4Smrg {0, (void *) 0} 3451e19dfac4Smrg}; 3452e19dfac4Smrg 3453e19dfac4Smrg/* This works around a problem in FreeBSD linker */ 3454e19dfac4Smrg#ifdef FREEBSD_WORKAROUND 3455e19dfac4Smrgstatic const void *lt_preloaded_setup() { 3456e19dfac4Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457e19dfac4Smrg} 3458e19dfac4Smrg#endif 3459e19dfac4Smrg 3460e19dfac4Smrg#ifdef __cplusplus 3461e19dfac4Smrg} 3462e19dfac4Smrg#endif\ 3463e19dfac4Smrg" 3464e19dfac4Smrg } # !$opt_dry_run 3465e19dfac4Smrg 3466e19dfac4Smrg pic_flag_for_symtable= 3467e19dfac4Smrg case "$compile_command " in 3468e19dfac4Smrg *" -static "*) ;; 3469e19dfac4Smrg *) 3470e19dfac4Smrg case $host in 3471e19dfac4Smrg # compiling the symbol table file with pic_flag works around 3472e19dfac4Smrg # a FreeBSD bug that causes programs to crash when -lm is 3473e19dfac4Smrg # linked before any other PIC object. But we must not use 3474e19dfac4Smrg # pic_flag when linking with -static. The problem exists in 3475e19dfac4Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476313a12fdSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477e19dfac4Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478e19dfac4Smrg *-*-hpux*) 3479e19dfac4Smrg pic_flag_for_symtable=" $pic_flag" ;; 3480e19dfac4Smrg *) 3481e19dfac4Smrg if test "X$my_pic_p" != Xno; then 3482e19dfac4Smrg pic_flag_for_symtable=" $pic_flag" 348327702724Smrg fi 3484e19dfac4Smrg ;; 3485e19dfac4Smrg esac 3486e19dfac4Smrg ;; 3487e19dfac4Smrg esac 3488e19dfac4Smrg symtab_cflags= 3489e19dfac4Smrg for arg in $LTCFLAGS; do 3490e19dfac4Smrg case $arg in 3491e19dfac4Smrg -pie | -fpie | -fPIE) ;; 3492313a12fdSmrg *) func_append symtab_cflags " $arg" ;; 3493e19dfac4Smrg esac 3494e19dfac4Smrg done 349527702724Smrg 3496e19dfac4Smrg # Now compile the dynamic symbol file. 3497e19dfac4Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 349827702724Smrg 3499e19dfac4Smrg # Clean up the generated files. 3500e19dfac4Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501e19dfac4Smrg 3502e19dfac4Smrg # Transform the symbol file into the correct name. 3503e19dfac4Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504e19dfac4Smrg case $host in 3505e19dfac4Smrg *cygwin* | *mingw* | *cegcc* ) 3506e19dfac4Smrg if test -f "$output_objdir/$my_outputname.def"; then 3507313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3508313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509e19dfac4Smrg else 3510313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3511313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512e19dfac4Smrg fi 3513e19dfac4Smrg ;; 3514e19dfac4Smrg *) 3515313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3516313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 351727702724Smrg ;; 351827702724Smrg esac 3519e19dfac4Smrg ;; 3520e19dfac4Smrg *) 3521e19dfac4Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522e19dfac4Smrg ;; 3523e19dfac4Smrg esac 3524e19dfac4Smrg else 3525e19dfac4Smrg # We keep going just in case the user didn't refer to 3526e19dfac4Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527e19dfac4Smrg # really was required. 3528e19dfac4Smrg 3529e19dfac4Smrg # Nullify the symbol file. 3530313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3531313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 353227702724Smrg fi 3533e19dfac4Smrg} 353427702724Smrg 3535e19dfac4Smrg# func_win32_libid arg 3536e19dfac4Smrg# return the library type of file 'arg' 3537e19dfac4Smrg# 3538e19dfac4Smrg# Need a lot of goo to handle *both* DLLs and import libs 3539e19dfac4Smrg# Has to be a shell function in order to 'eat' the argument 3540e19dfac4Smrg# that is supplied when $file_magic_command is called. 3541313a12fdSmrg# Despite the name, also deal with 64 bit binaries. 3542e19dfac4Smrgfunc_win32_libid () 3543e19dfac4Smrg{ 3544e19dfac4Smrg $opt_debug 3545e19dfac4Smrg win32_libid_type="unknown" 3546e19dfac4Smrg win32_fileres=`file -L $1 2>/dev/null` 3547e19dfac4Smrg case $win32_fileres in 3548e19dfac4Smrg *ar\ archive\ import\ library*) # definitely import 3549e19dfac4Smrg win32_libid_type="x86 archive import" 3550e19dfac4Smrg ;; 3551e19dfac4Smrg *ar\ archive*) # could be an import, or static 3552313a12fdSmrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553e19dfac4Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3554313a12fdSmrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 3555313a12fdSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3556313a12fdSmrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557e19dfac4Smrg $SED -n -e ' 3558e19dfac4Smrg 1,100{ 3559e19dfac4Smrg / I /{ 3560e19dfac4Smrg s,.*,import, 3561e19dfac4Smrg p 3562e19dfac4Smrg q 3563e19dfac4Smrg } 3564e19dfac4Smrg }'` 3565e19dfac4Smrg case $win32_nmres in 3566e19dfac4Smrg import*) win32_libid_type="x86 archive import";; 3567e19dfac4Smrg *) win32_libid_type="x86 archive static";; 3568e19dfac4Smrg esac 3569e19dfac4Smrg fi 3570e19dfac4Smrg ;; 3571e19dfac4Smrg *DLL*) 3572e19dfac4Smrg win32_libid_type="x86 DLL" 3573e19dfac4Smrg ;; 3574e19dfac4Smrg *executable*) # but shell scripts are "executable" too... 3575e19dfac4Smrg case $win32_fileres in 3576e19dfac4Smrg *MS\ Windows\ PE\ Intel*) 3577e19dfac4Smrg win32_libid_type="x86 DLL" 3578e19dfac4Smrg ;; 3579e19dfac4Smrg esac 3580e19dfac4Smrg ;; 3581e19dfac4Smrg esac 3582e19dfac4Smrg $ECHO "$win32_libid_type" 3583e19dfac4Smrg} 358427702724Smrg 3585313a12fdSmrg# func_cygming_dll_for_implib ARG 3586313a12fdSmrg# 3587313a12fdSmrg# Platform-specific function to extract the 3588313a12fdSmrg# name of the DLL associated with the specified 3589313a12fdSmrg# import library ARG. 3590313a12fdSmrg# Invoked by eval'ing the libtool variable 3591313a12fdSmrg# $sharedlib_from_linklib_cmd 3592313a12fdSmrg# Result is available in the variable 3593313a12fdSmrg# $sharedlib_from_linklib_result 3594313a12fdSmrgfunc_cygming_dll_for_implib () 3595313a12fdSmrg{ 3596313a12fdSmrg $opt_debug 3597313a12fdSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3598313a12fdSmrg} 3599313a12fdSmrg 3600313a12fdSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3601313a12fdSmrg# 3602313a12fdSmrg# The is the core of a fallback implementation of a 3603313a12fdSmrg# platform-specific function to extract the name of the 3604313a12fdSmrg# DLL associated with the specified import library LIBNAME. 3605313a12fdSmrg# 3606313a12fdSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 3607313a12fdSmrg# on the platform and compiler that created the implib. 3608313a12fdSmrg# 3609313a12fdSmrg# Echos the name of the DLL associated with the 3610313a12fdSmrg# specified import library. 3611313a12fdSmrgfunc_cygming_dll_for_implib_fallback_core () 3612313a12fdSmrg{ 3613313a12fdSmrg $opt_debug 3614313a12fdSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3615313a12fdSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3616313a12fdSmrg $SED '/^Contents of section '"$match_literal"':/{ 3617313a12fdSmrg # Place marker at beginning of archive member dllname section 3618313a12fdSmrg s/.*/====MARK====/ 3619313a12fdSmrg p 3620313a12fdSmrg d 3621313a12fdSmrg } 3622313a12fdSmrg # These lines can sometimes be longer than 43 characters, but 3623313a12fdSmrg # are always uninteresting 3624313a12fdSmrg /:[ ]*file format pe[i]\{,1\}-/d 3625313a12fdSmrg /^In archive [^:]*:/d 3626313a12fdSmrg # Ensure marker is printed 3627313a12fdSmrg /^====MARK====/p 3628313a12fdSmrg # Remove all lines with less than 43 characters 3629313a12fdSmrg /^.\{43\}/!d 3630313a12fdSmrg # From remaining lines, remove first 43 characters 3631313a12fdSmrg s/^.\{43\}//' | 3632313a12fdSmrg $SED -n ' 3633313a12fdSmrg # Join marker and all lines until next marker into a single line 3634313a12fdSmrg /^====MARK====/ b para 3635313a12fdSmrg H 3636313a12fdSmrg $ b para 3637313a12fdSmrg b 3638313a12fdSmrg :para 3639313a12fdSmrg x 3640313a12fdSmrg s/\n//g 3641313a12fdSmrg # Remove the marker 3642313a12fdSmrg s/^====MARK====// 3643313a12fdSmrg # Remove trailing dots and whitespace 3644313a12fdSmrg s/[\. \t]*$// 3645313a12fdSmrg # Print 3646313a12fdSmrg /./p' | 3647313a12fdSmrg # we now have a list, one entry per line, of the stringified 3648313a12fdSmrg # contents of the appropriate section of all members of the 3649313a12fdSmrg # archive which possess that section. Heuristic: eliminate 3650313a12fdSmrg # all those which have a first or second character that is 3651313a12fdSmrg # a '.' (that is, objdump's representation of an unprintable 3652313a12fdSmrg # character.) This should work for all archives with less than 3653313a12fdSmrg # 0x302f exports -- but will fail for DLLs whose name actually 3654313a12fdSmrg # begins with a literal '.' or a single character followed by 3655313a12fdSmrg # a '.'. 3656313a12fdSmrg # 3657313a12fdSmrg # Of those that remain, print the first one. 3658313a12fdSmrg $SED -e '/^\./d;/^.\./d;q' 3659313a12fdSmrg} 3660313a12fdSmrg 3661313a12fdSmrg# func_cygming_gnu_implib_p ARG 3662313a12fdSmrg# This predicate returns with zero status (TRUE) if 3663313a12fdSmrg# ARG is a GNU/binutils-style import library. Returns 3664313a12fdSmrg# with nonzero status (FALSE) otherwise. 3665313a12fdSmrgfunc_cygming_gnu_implib_p () 3666313a12fdSmrg{ 3667313a12fdSmrg $opt_debug 3668313a12fdSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3669313a12fdSmrg 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)$'` 3670313a12fdSmrg test -n "$func_cygming_gnu_implib_tmp" 3671313a12fdSmrg} 3672313a12fdSmrg 3673313a12fdSmrg# func_cygming_ms_implib_p ARG 3674313a12fdSmrg# This predicate returns with zero status (TRUE) if 3675313a12fdSmrg# ARG is an MS-style import library. Returns 3676313a12fdSmrg# with nonzero status (FALSE) otherwise. 3677313a12fdSmrgfunc_cygming_ms_implib_p () 3678313a12fdSmrg{ 3679313a12fdSmrg $opt_debug 3680313a12fdSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3681313a12fdSmrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 3682313a12fdSmrg test -n "$func_cygming_ms_implib_tmp" 3683313a12fdSmrg} 3684313a12fdSmrg 3685313a12fdSmrg# func_cygming_dll_for_implib_fallback ARG 3686313a12fdSmrg# Platform-specific function to extract the 3687313a12fdSmrg# name of the DLL associated with the specified 3688313a12fdSmrg# import library ARG. 3689313a12fdSmrg# 3690313a12fdSmrg# This fallback implementation is for use when $DLLTOOL 3691313a12fdSmrg# does not support the --identify-strict option. 3692313a12fdSmrg# Invoked by eval'ing the libtool variable 3693313a12fdSmrg# $sharedlib_from_linklib_cmd 3694313a12fdSmrg# Result is available in the variable 3695313a12fdSmrg# $sharedlib_from_linklib_result 3696313a12fdSmrgfunc_cygming_dll_for_implib_fallback () 3697313a12fdSmrg{ 3698313a12fdSmrg $opt_debug 3699313a12fdSmrg if func_cygming_gnu_implib_p "$1" ; then 3700313a12fdSmrg # binutils import library 3701313a12fdSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 3702313a12fdSmrg elif func_cygming_ms_implib_p "$1" ; then 3703313a12fdSmrg # ms-generated import library 3704313a12fdSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3705313a12fdSmrg else 3706313a12fdSmrg # unknown 3707313a12fdSmrg sharedlib_from_linklib_result="" 3708313a12fdSmrg fi 3709313a12fdSmrg} 371027702724Smrg 371127702724Smrg 3712e19dfac4Smrg# func_extract_an_archive dir oldlib 3713e19dfac4Smrgfunc_extract_an_archive () 3714e19dfac4Smrg{ 3715e19dfac4Smrg $opt_debug 3716e19dfac4Smrg f_ex_an_ar_dir="$1"; shift 3717e19dfac4Smrg f_ex_an_ar_oldlib="$1" 3718313a12fdSmrg if test "$lock_old_archive_extraction" = yes; then 3719313a12fdSmrg lockfile=$f_ex_an_ar_oldlib.lock 3720313a12fdSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3721313a12fdSmrg func_echo "Waiting for $lockfile to be removed" 3722313a12fdSmrg sleep 2 3723313a12fdSmrg done 3724313a12fdSmrg fi 3725313a12fdSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3726313a12fdSmrg 'stat=$?; rm -f "$lockfile"; exit $stat' 3727313a12fdSmrg if test "$lock_old_archive_extraction" = yes; then 3728313a12fdSmrg $opt_dry_run || rm -f "$lockfile" 3729313a12fdSmrg fi 3730e19dfac4Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731e19dfac4Smrg : 3732e19dfac4Smrg else 3733e19dfac4Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734e19dfac4Smrg fi 3735e19dfac4Smrg} 373627702724Smrg 373727702724Smrg 3738e19dfac4Smrg# func_extract_archives gentop oldlib ... 3739e19dfac4Smrgfunc_extract_archives () 3740e19dfac4Smrg{ 3741e19dfac4Smrg $opt_debug 3742e19dfac4Smrg my_gentop="$1"; shift 3743e19dfac4Smrg my_oldlibs=${1+"$@"} 3744e19dfac4Smrg my_oldobjs="" 3745e19dfac4Smrg my_xlib="" 3746e19dfac4Smrg my_xabs="" 3747e19dfac4Smrg my_xdir="" 374827702724Smrg 3749e19dfac4Smrg for my_xlib in $my_oldlibs; do 3750e19dfac4Smrg # Extract the objects. 3751e19dfac4Smrg case $my_xlib in 3752e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753e19dfac4Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754e19dfac4Smrg esac 3755e19dfac4Smrg func_basename "$my_xlib" 3756e19dfac4Smrg my_xlib="$func_basename_result" 3757e19dfac4Smrg my_xlib_u=$my_xlib 3758e19dfac4Smrg while :; do 3759e19dfac4Smrg case " $extracted_archives " in 3760e19dfac4Smrg *" $my_xlib_u "*) 3761e19dfac4Smrg func_arith $extracted_serial + 1 3762e19dfac4Smrg extracted_serial=$func_arith_result 3763e19dfac4Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764e19dfac4Smrg *) break ;; 3765e19dfac4Smrg esac 3766e19dfac4Smrg done 3767e19dfac4Smrg extracted_archives="$extracted_archives $my_xlib_u" 3768e19dfac4Smrg my_xdir="$my_gentop/$my_xlib_u" 376927702724Smrg 3770e19dfac4Smrg func_mkdir_p "$my_xdir" 377127702724Smrg 3772e19dfac4Smrg case $host in 3773e19dfac4Smrg *-darwin*) 3774e19dfac4Smrg func_verbose "Extracting $my_xabs" 3775e19dfac4Smrg # Do not bother doing anything if just a dry run 3776e19dfac4Smrg $opt_dry_run || { 3777e19dfac4Smrg darwin_orig_dir=`pwd` 3778e19dfac4Smrg cd $my_xdir || exit $? 3779e19dfac4Smrg darwin_archive=$my_xabs 3780e19dfac4Smrg darwin_curdir=`pwd` 3781e19dfac4Smrg darwin_base_archive=`basename "$darwin_archive"` 3782e19dfac4Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783e19dfac4Smrg if test -n "$darwin_arches"; then 3784e19dfac4Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785e19dfac4Smrg darwin_arch= 3786e19dfac4Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787e19dfac4Smrg for darwin_arch in $darwin_arches ; do 3788e19dfac4Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789e19dfac4Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790e19dfac4Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791e19dfac4Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792e19dfac4Smrg cd "$darwin_curdir" 3793e19dfac4Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794e19dfac4Smrg done # $darwin_arches 3795e19dfac4Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796e19dfac4Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797e19dfac4Smrg darwin_file= 3798e19dfac4Smrg darwin_files= 3799e19dfac4Smrg for darwin_file in $darwin_filelist; do 3800313a12fdSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801e19dfac4Smrg $LIPO -create -output "$darwin_file" $darwin_files 3802e19dfac4Smrg done # $darwin_filelist 3803e19dfac4Smrg $RM -rf unfat-$$ 3804e19dfac4Smrg cd "$darwin_orig_dir" 3805e19dfac4Smrg else 3806e19dfac4Smrg cd $darwin_orig_dir 3807e19dfac4Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808e19dfac4Smrg fi # $darwin_arches 3809e19dfac4Smrg } # !$opt_dry_run 3810e19dfac4Smrg ;; 3811e19dfac4Smrg *) 3812e19dfac4Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813e19dfac4Smrg ;; 381427702724Smrg esac 3815313a12fdSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816e19dfac4Smrg done 381727702724Smrg 3818e19dfac4Smrg func_extract_archives_result="$my_oldobjs" 3819e19dfac4Smrg} 382027702724Smrg 382127702724Smrg 3822313a12fdSmrg# func_emit_wrapper [arg=no] 3823313a12fdSmrg# 3824313a12fdSmrg# Emit a libtool wrapper script on stdout. 3825313a12fdSmrg# Don't directly open a file because we may want to 3826313a12fdSmrg# incorporate the script contents within a cygwin/mingw 3827313a12fdSmrg# wrapper executable. Must ONLY be called from within 3828313a12fdSmrg# func_mode_link because it depends on a number of variables 3829313a12fdSmrg# set therein. 3830e19dfac4Smrg# 3831313a12fdSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3832313a12fdSmrg# variable will take. If 'yes', then the emitted script 3833313a12fdSmrg# will assume that the directory in which it is stored is 3834313a12fdSmrg# the $objdir directory. This is a cygwin/mingw-specific 3835313a12fdSmrg# behavior. 3836313a12fdSmrgfunc_emit_wrapper () 3837e19dfac4Smrg{ 3838313a12fdSmrg func_emit_wrapper_arg1=${1-no} 383927702724Smrg 3840e19dfac4Smrg $ECHO "\ 3841e19dfac4Smrg#! $SHELL 384227702724Smrg 3843e19dfac4Smrg# $output - temporary wrapper script for $objdir/$outputname 3844e19dfac4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845e19dfac4Smrg# 3846e19dfac4Smrg# The $output program cannot be directly executed until all the libtool 3847e19dfac4Smrg# libraries that it depends on are installed. 3848e19dfac4Smrg# 3849e19dfac4Smrg# This wrapper script should never be moved out of the build directory. 3850e19dfac4Smrg# If it is, it will not operate correctly. 385127702724Smrg 3852e19dfac4Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3853e19dfac4Smrg# metacharacters that are still active within double-quoted strings. 3854e19dfac4Smrgsed_quote_subst='$sed_quote_subst' 385527702724Smrg 3856e19dfac4Smrg# Be Bourne compatible 3857e19dfac4Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858e19dfac4Smrg emulate sh 3859e19dfac4Smrg NULLCMD=: 3860e19dfac4Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861e19dfac4Smrg # is contrary to our usage. Disable this feature. 3862e19dfac4Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863e19dfac4Smrg setopt NO_GLOB_SUBST 3864e19dfac4Smrgelse 3865e19dfac4Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866e19dfac4Smrgfi 3867e19dfac4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868e19dfac4SmrgDUALCASE=1; export DUALCASE # for MKS sh 386927702724Smrg 3870e19dfac4Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871e19dfac4Smrg# if CDPATH is set. 3872e19dfac4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 387327702724Smrg 3874e19dfac4Smrgrelink_command=\"$relink_command\" 387527702724Smrg 3876e19dfac4Smrg# This environment variable determines our operation mode. 3877e19dfac4Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878e19dfac4Smrg # install mode needs the following variables: 3879e19dfac4Smrg generated_by_libtool_version='$macro_version' 3880e19dfac4Smrg notinst_deplibs='$notinst_deplibs' 3881e19dfac4Smrgelse 3882e19dfac4Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883e19dfac4Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 3884313a12fdSmrg file=\"\$0\"" 3885313a12fdSmrg 3886313a12fdSmrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3887313a12fdSmrg $ECHO "\ 3888313a12fdSmrg 3889313a12fdSmrg# A function that is used when there is no print builtin or printf. 3890313a12fdSmrgfunc_fallback_echo () 3891313a12fdSmrg{ 3892313a12fdSmrg eval 'cat <<_LTECHO_EOF 3893313a12fdSmrg\$1 3894313a12fdSmrg_LTECHO_EOF' 3895313a12fdSmrg} 3896313a12fdSmrg ECHO=\"$qECHO\" 3897313a12fdSmrg fi 3898313a12fdSmrg 3899313a12fdSmrg# Very basic option parsing. These options are (a) specific to 3900313a12fdSmrg# the libtool wrapper, (b) are identical between the wrapper 3901313a12fdSmrg# /script/ and the wrapper /executable/ which is used only on 3902313a12fdSmrg# windows platforms, and (c) all begin with the string "--lt-" 3903313a12fdSmrg# (application programs are unlikely to have options which match 3904313a12fdSmrg# this pattern). 3905313a12fdSmrg# 3906313a12fdSmrg# There are only two supported options: --lt-debug and 3907313a12fdSmrg# --lt-dump-script. There is, deliberately, no --lt-help. 3908313a12fdSmrg# 3909313a12fdSmrg# The first argument to this parsing function should be the 3910313a12fdSmrg# script's $0 value, followed by "$@". 3911313a12fdSmrglt_option_debug= 3912313a12fdSmrgfunc_parse_lt_options () 3913313a12fdSmrg{ 3914313a12fdSmrg lt_script_arg0=\$0 3915313a12fdSmrg shift 3916313a12fdSmrg for lt_opt 3917313a12fdSmrg do 3918313a12fdSmrg case \"\$lt_opt\" in 3919313a12fdSmrg --lt-debug) lt_option_debug=1 ;; 3920313a12fdSmrg --lt-dump-script) 3921313a12fdSmrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3922313a12fdSmrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3923313a12fdSmrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3924313a12fdSmrg cat \"\$lt_dump_D/\$lt_dump_F\" 3925313a12fdSmrg exit 0 3926313a12fdSmrg ;; 3927313a12fdSmrg --lt-*) 3928313a12fdSmrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3929313a12fdSmrg exit 1 3930313a12fdSmrg ;; 3931313a12fdSmrg esac 3932313a12fdSmrg done 3933313a12fdSmrg 3934313a12fdSmrg # Print the debug banner immediately: 3935313a12fdSmrg if test -n \"\$lt_option_debug\"; then 3936313a12fdSmrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3937313a12fdSmrg fi 3938313a12fdSmrg} 3939313a12fdSmrg 3940313a12fdSmrg# Used when --lt-debug. Prints its arguments to stdout 3941313a12fdSmrg# (redirection is the responsibility of the caller) 3942313a12fdSmrgfunc_lt_dump_args () 3943313a12fdSmrg{ 3944313a12fdSmrg lt_dump_args_N=1; 3945313a12fdSmrg for lt_arg 3946313a12fdSmrg do 3947313a12fdSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3948313a12fdSmrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3949313a12fdSmrg done 3950313a12fdSmrg} 3951313a12fdSmrg 3952313a12fdSmrg# Core function for launching the target application 3953313a12fdSmrgfunc_exec_program_core () 3954313a12fdSmrg{ 3955e19dfac4Smrg" 3956313a12fdSmrg case $host in 3957313a12fdSmrg # Backslashes separate directories on plain windows 3958313a12fdSmrg *-*-mingw | *-*-os2* | *-cegcc*) 3959313a12fdSmrg $ECHO "\ 3960313a12fdSmrg if test -n \"\$lt_option_debug\"; then 3961313a12fdSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3962313a12fdSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3963313a12fdSmrg fi 3964313a12fdSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3965313a12fdSmrg" 3966313a12fdSmrg ;; 3967313a12fdSmrg 3968313a12fdSmrg *) 3969313a12fdSmrg $ECHO "\ 3970313a12fdSmrg if test -n \"\$lt_option_debug\"; then 3971313a12fdSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3972313a12fdSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3973313a12fdSmrg fi 3974313a12fdSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 3975313a12fdSmrg" 3976313a12fdSmrg ;; 3977313a12fdSmrg esac 3978313a12fdSmrg $ECHO "\ 3979313a12fdSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3980313a12fdSmrg exit 1 3981313a12fdSmrg} 3982313a12fdSmrg 3983313a12fdSmrg# A function to encapsulate launching the target application 3984313a12fdSmrg# Strips options in the --lt-* namespace from \$@ and 3985313a12fdSmrg# launches target application with the remaining arguments. 3986313a12fdSmrgfunc_exec_program () 3987313a12fdSmrg{ 3988313a12fdSmrg case \" \$* \" in 3989313a12fdSmrg *\\ --lt-*) 3990313a12fdSmrg for lt_wr_arg 3991313a12fdSmrg do 3992313a12fdSmrg case \$lt_wr_arg in 3993313a12fdSmrg --lt-*) ;; 3994313a12fdSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995313a12fdSmrg esac 3996313a12fdSmrg shift 3997313a12fdSmrg done ;; 3998313a12fdSmrg esac 3999313a12fdSmrg func_exec_program_core \${1+\"\$@\"} 4000313a12fdSmrg} 4001313a12fdSmrg 4002313a12fdSmrg # Parse options 4003313a12fdSmrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 400427702724Smrg 4005e19dfac4Smrg # Find the directory that this script lives in. 4006313a12fdSmrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007e19dfac4Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 400827702724Smrg 4009e19dfac4Smrg # Follow symbolic links until we get to the real thisdir. 4010313a12fdSmrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011e19dfac4Smrg while test -n \"\$file\"; do 4012313a12fdSmrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 401327702724Smrg 4014e19dfac4Smrg # If there was a directory component, then change thisdir. 4015e19dfac4Smrg if test \"x\$destdir\" != \"x\$file\"; then 4016e19dfac4Smrg case \"\$destdir\" in 4017e19dfac4Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018e19dfac4Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 4019e19dfac4Smrg esac 4020e19dfac4Smrg fi 402127702724Smrg 4022313a12fdSmrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4023313a12fdSmrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024e19dfac4Smrg done 402527702724Smrg 4026e19dfac4Smrg # Usually 'no', except on cygwin/mingw when embedded into 4027e19dfac4Smrg # the cwrapper. 4028313a12fdSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029e19dfac4Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030e19dfac4Smrg # special case for '.' 4031e19dfac4Smrg if test \"\$thisdir\" = \".\"; then 4032e19dfac4Smrg thisdir=\`pwd\` 4033e19dfac4Smrg fi 4034e19dfac4Smrg # remove .libs from thisdir 4035e19dfac4Smrg case \"\$thisdir\" in 4036313a12fdSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037e19dfac4Smrg $objdir ) thisdir=. ;; 4038e19dfac4Smrg esac 4039e19dfac4Smrg fi 404027702724Smrg 4041e19dfac4Smrg # Try to get the absolute directory name. 4042e19dfac4Smrg absdir=\`cd \"\$thisdir\" && pwd\` 4043e19dfac4Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044e19dfac4Smrg" 404527702724Smrg 4046e19dfac4Smrg if test "$fast_install" = yes; then 4047e19dfac4Smrg $ECHO "\ 4048e19dfac4Smrg program=lt-'$outputname'$exeext 4049e19dfac4Smrg progdir=\"\$thisdir/$objdir\" 405027702724Smrg 4051e19dfac4Smrg if test ! -f \"\$progdir/\$program\" || 4052e19dfac4Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053e19dfac4Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 405427702724Smrg 4055e19dfac4Smrg file=\"\$\$-\$program\" 405627702724Smrg 4057e19dfac4Smrg if test ! -d \"\$progdir\"; then 4058e19dfac4Smrg $MKDIR \"\$progdir\" 4059e19dfac4Smrg else 4060e19dfac4Smrg $RM \"\$progdir/\$file\" 4061e19dfac4Smrg fi" 406227702724Smrg 4063e19dfac4Smrg $ECHO "\ 406427702724Smrg 4065e19dfac4Smrg # relink executable if necessary 4066e19dfac4Smrg if test -n \"\$relink_command\"; then 4067e19dfac4Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068e19dfac4Smrg else 4069e19dfac4Smrg $ECHO \"\$relink_command_output\" >&2 4070e19dfac4Smrg $RM \"\$progdir/\$file\" 4071e19dfac4Smrg exit 1 4072e19dfac4Smrg fi 4073e19dfac4Smrg fi 407427702724Smrg 4075e19dfac4Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076e19dfac4Smrg { $RM \"\$progdir/\$program\"; 4077e19dfac4Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078e19dfac4Smrg $RM \"\$progdir/\$file\" 4079e19dfac4Smrg fi" 4080e19dfac4Smrg else 4081e19dfac4Smrg $ECHO "\ 4082e19dfac4Smrg program='$outputname' 4083e19dfac4Smrg progdir=\"\$thisdir/$objdir\" 4084e19dfac4Smrg" 4085e19dfac4Smrg fi 408627702724Smrg 4087e19dfac4Smrg $ECHO "\ 408827702724Smrg 4089e19dfac4Smrg if test -f \"\$progdir/\$program\"; then" 409027702724Smrg 4091313a12fdSmrg # fixup the dll searchpath if we need to. 4092313a12fdSmrg # 4093313a12fdSmrg # Fix the DLL searchpath if we need to. Do this before prepending 4094313a12fdSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 4095313a12fdSmrg # libraries must come first. 4096313a12fdSmrg if test -n "$dllsearchpath"; then 4097313a12fdSmrg $ECHO "\ 4098313a12fdSmrg # Add the dll search path components to the executable PATH 4099313a12fdSmrg PATH=$dllsearchpath:\$PATH 4100313a12fdSmrg" 4101313a12fdSmrg fi 4102313a12fdSmrg 4103e19dfac4Smrg # Export our shlibpath_var if we have one. 4104e19dfac4Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105e19dfac4Smrg $ECHO "\ 4106e19dfac4Smrg # Add our own library path to $shlibpath_var 4107e19dfac4Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 410827702724Smrg 4109e19dfac4Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110e19dfac4Smrg # The second colon is a workaround for a bug in BeOS R4 sed 4111313a12fdSmrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 411227702724Smrg 4113e19dfac4Smrg export $shlibpath_var 4114e19dfac4Smrg" 411527702724Smrg fi 411627702724Smrg 4117e19dfac4Smrg $ECHO "\ 4118e19dfac4Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119e19dfac4Smrg # Run the actual program with our arguments. 4120313a12fdSmrg func_exec_program \${1+\"\$@\"} 4121e19dfac4Smrg fi 4122e19dfac4Smrg else 4123e19dfac4Smrg # The program doesn't exist. 4124e19dfac4Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125e19dfac4Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4126313a12fdSmrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127e19dfac4Smrg exit 1 4128e19dfac4Smrg fi 4129e19dfac4Smrgfi\ 4130e19dfac4Smrg" 4131e19dfac4Smrg} 413227702724Smrg 413327702724Smrg 4134e19dfac4Smrg# func_emit_cwrapperexe_src 4135e19dfac4Smrg# emit the source code for a wrapper executable on stdout 4136e19dfac4Smrg# Must ONLY be called from within func_mode_link because 4137e19dfac4Smrg# it depends on a number of variable set therein. 4138e19dfac4Smrgfunc_emit_cwrapperexe_src () 4139e19dfac4Smrg{ 4140e19dfac4Smrg cat <<EOF 414127702724Smrg 4142e19dfac4Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143e19dfac4Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 414427702724Smrg 4145e19dfac4Smrg The $output program cannot be directly executed until all the libtool 4146e19dfac4Smrg libraries that it depends on are installed. 414727702724Smrg 4148e19dfac4Smrg This wrapper executable should never be moved out of the build directory. 4149e19dfac4Smrg If it is, it will not operate correctly. 4150e19dfac4Smrg*/ 4151e19dfac4SmrgEOF 4152e19dfac4Smrg cat <<"EOF" 4153313a12fdSmrg#ifdef _MSC_VER 4154313a12fdSmrg# define _CRT_SECURE_NO_DEPRECATE 1 4155313a12fdSmrg#endif 4156e19dfac4Smrg#include <stdio.h> 4157e19dfac4Smrg#include <stdlib.h> 4158e19dfac4Smrg#ifdef _MSC_VER 4159e19dfac4Smrg# include <direct.h> 4160e19dfac4Smrg# include <process.h> 4161e19dfac4Smrg# include <io.h> 4162e19dfac4Smrg#else 4163e19dfac4Smrg# include <unistd.h> 4164e19dfac4Smrg# include <stdint.h> 4165e19dfac4Smrg# ifdef __CYGWIN__ 4166e19dfac4Smrg# include <io.h> 4167e19dfac4Smrg# endif 4168e19dfac4Smrg#endif 4169e19dfac4Smrg#include <malloc.h> 4170e19dfac4Smrg#include <stdarg.h> 4171e19dfac4Smrg#include <assert.h> 4172e19dfac4Smrg#include <string.h> 4173e19dfac4Smrg#include <ctype.h> 4174e19dfac4Smrg#include <errno.h> 4175e19dfac4Smrg#include <fcntl.h> 4176e19dfac4Smrg#include <sys/stat.h> 4177e19dfac4Smrg 4178313a12fdSmrg/* declarations of non-ANSI functions */ 4179313a12fdSmrg#if defined(__MINGW32__) 4180313a12fdSmrg# ifdef __STRICT_ANSI__ 4181313a12fdSmrgint _putenv (const char *); 4182313a12fdSmrg# endif 4183313a12fdSmrg#elif defined(__CYGWIN__) 4184313a12fdSmrg# ifdef __STRICT_ANSI__ 4185313a12fdSmrgchar *realpath (const char *, char *); 4186313a12fdSmrgint putenv (char *); 4187313a12fdSmrgint setenv (const char *, const char *, int); 4188313a12fdSmrg# endif 4189313a12fdSmrg/* #elif defined (other platforms) ... */ 4190313a12fdSmrg#endif 4191313a12fdSmrg 4192313a12fdSmrg/* portability defines, excluding path handling macros */ 4193313a12fdSmrg#if defined(_MSC_VER) 4194313a12fdSmrg# define setmode _setmode 4195313a12fdSmrg# define stat _stat 4196313a12fdSmrg# define chmod _chmod 4197313a12fdSmrg# define getcwd _getcwd 4198313a12fdSmrg# define putenv _putenv 4199313a12fdSmrg# define S_IXUSR _S_IEXEC 4200313a12fdSmrg# ifndef _INTPTR_T_DEFINED 4201313a12fdSmrg# define _INTPTR_T_DEFINED 4202313a12fdSmrg# define intptr_t int 4203313a12fdSmrg# endif 4204313a12fdSmrg#elif defined(__MINGW32__) 4205313a12fdSmrg# define setmode _setmode 4206313a12fdSmrg# define stat _stat 4207313a12fdSmrg# define chmod _chmod 4208313a12fdSmrg# define getcwd _getcwd 4209313a12fdSmrg# define putenv _putenv 4210313a12fdSmrg#elif defined(__CYGWIN__) 4211313a12fdSmrg# define HAVE_SETENV 4212313a12fdSmrg# define FOPEN_WB "wb" 4213313a12fdSmrg/* #elif defined (other platforms) ... */ 4214313a12fdSmrg#endif 4215313a12fdSmrg 4216e19dfac4Smrg#if defined(PATH_MAX) 4217e19dfac4Smrg# define LT_PATHMAX PATH_MAX 4218e19dfac4Smrg#elif defined(MAXPATHLEN) 4219e19dfac4Smrg# define LT_PATHMAX MAXPATHLEN 4220e19dfac4Smrg#else 4221e19dfac4Smrg# define LT_PATHMAX 1024 4222e19dfac4Smrg#endif 4223e19dfac4Smrg 4224e19dfac4Smrg#ifndef S_IXOTH 4225e19dfac4Smrg# define S_IXOTH 0 4226e19dfac4Smrg#endif 4227e19dfac4Smrg#ifndef S_IXGRP 4228e19dfac4Smrg# define S_IXGRP 0 4229e19dfac4Smrg#endif 4230e19dfac4Smrg 4231313a12fdSmrg/* path handling portability macros */ 4232e19dfac4Smrg#ifndef DIR_SEPARATOR 4233e19dfac4Smrg# define DIR_SEPARATOR '/' 4234e19dfac4Smrg# define PATH_SEPARATOR ':' 4235e19dfac4Smrg#endif 4236e19dfac4Smrg 4237e19dfac4Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238e19dfac4Smrg defined (__OS2__) 4239e19dfac4Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240e19dfac4Smrg# define FOPEN_WB "wb" 4241e19dfac4Smrg# ifndef DIR_SEPARATOR_2 4242e19dfac4Smrg# define DIR_SEPARATOR_2 '\\' 4243e19dfac4Smrg# endif 4244e19dfac4Smrg# ifndef PATH_SEPARATOR_2 4245e19dfac4Smrg# define PATH_SEPARATOR_2 ';' 4246e19dfac4Smrg# endif 4247e19dfac4Smrg#endif 4248e19dfac4Smrg 4249e19dfac4Smrg#ifndef DIR_SEPARATOR_2 4250e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251e19dfac4Smrg#else /* DIR_SEPARATOR_2 */ 4252e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) \ 4253e19dfac4Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254e19dfac4Smrg#endif /* DIR_SEPARATOR_2 */ 4255e19dfac4Smrg 4256e19dfac4Smrg#ifndef PATH_SEPARATOR_2 4257e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258e19dfac4Smrg#else /* PATH_SEPARATOR_2 */ 4259e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260e19dfac4Smrg#endif /* PATH_SEPARATOR_2 */ 4261e19dfac4Smrg 4262e19dfac4Smrg#ifndef FOPEN_WB 4263e19dfac4Smrg# define FOPEN_WB "w" 4264e19dfac4Smrg#endif 4265e19dfac4Smrg#ifndef _O_BINARY 4266e19dfac4Smrg# define _O_BINARY 0 4267e19dfac4Smrg#endif 4268e19dfac4Smrg 4269e19dfac4Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270e19dfac4Smrg#define XFREE(stale) do { \ 4271e19dfac4Smrg if (stale) { free ((void *) stale); stale = 0; } \ 4272e19dfac4Smrg} while (0) 4273e19dfac4Smrg 4274313a12fdSmrg#if defined(LT_DEBUGWRAPPER) 4275313a12fdSmrgstatic int lt_debug = 1; 4276e19dfac4Smrg#else 4277313a12fdSmrgstatic int lt_debug = 0; 4278e19dfac4Smrg#endif 4279e19dfac4Smrg 4280313a12fdSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281e19dfac4Smrg 4282e19dfac4Smrgvoid *xmalloc (size_t num); 4283e19dfac4Smrgchar *xstrdup (const char *string); 4284e19dfac4Smrgconst char *base_name (const char *name); 4285e19dfac4Smrgchar *find_executable (const char *wrapper); 4286e19dfac4Smrgchar *chase_symlinks (const char *pathspec); 4287e19dfac4Smrgint make_executable (const char *path); 4288e19dfac4Smrgint check_executable (const char *path); 4289e19dfac4Smrgchar *strendzap (char *str, const char *pat); 4290313a12fdSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4291313a12fdSmrgvoid lt_fatal (const char *file, int line, const char *message, ...); 4292313a12fdSmrgstatic const char *nonnull (const char *s); 4293313a12fdSmrgstatic const char *nonempty (const char *s); 4294e19dfac4Smrgvoid lt_setenv (const char *name, const char *value); 4295e19dfac4Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296e19dfac4Smrgvoid lt_update_exe_path (const char *name, const char *value); 4297e19dfac4Smrgvoid lt_update_lib_path (const char *name, const char *value); 4298313a12fdSmrgchar **prepare_spawn (char **argv); 4299313a12fdSmrgvoid lt_dump_script (FILE *f); 4300e19dfac4SmrgEOF 4301e19dfac4Smrg 4302e19dfac4Smrg cat <<EOF 4303313a12fdSmrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304e19dfac4Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305e19dfac4SmrgEOF 4306e19dfac4Smrg 4307e19dfac4Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4308313a12fdSmrg func_to_host_path "$temp_rpath" 4309e19dfac4Smrg cat <<EOF 4310313a12fdSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 431127702724SmrgEOF 431227702724Smrg else 4313e19dfac4Smrg cat <<"EOF" 4314e19dfac4Smrgconst char * LIB_PATH_VALUE = ""; 4315e19dfac4SmrgEOF 431627702724Smrg fi 4317e19dfac4Smrg 4318e19dfac4Smrg if test -n "$dllsearchpath"; then 4319313a12fdSmrg func_to_host_path "$dllsearchpath:" 4320e19dfac4Smrg cat <<EOF 4321e19dfac4Smrgconst char * EXE_PATH_VARNAME = "PATH"; 4322313a12fdSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323e19dfac4SmrgEOF 432427702724Smrg else 4325e19dfac4Smrg cat <<"EOF" 4326e19dfac4Smrgconst char * EXE_PATH_VARNAME = ""; 4327e19dfac4Smrgconst char * EXE_PATH_VALUE = ""; 4328e19dfac4SmrgEOF 432927702724Smrg fi 4330e19dfac4Smrg 4331e19dfac4Smrg if test "$fast_install" = yes; then 4332e19dfac4Smrg cat <<EOF 4333e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334e19dfac4SmrgEOF 433527702724Smrg else 4336e19dfac4Smrg cat <<EOF 4337e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338e19dfac4SmrgEOF 433927702724Smrg fi 434027702724Smrg 434127702724Smrg 4342e19dfac4Smrg cat <<"EOF" 434327702724Smrg 4344e19dfac4Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 434527702724Smrg 4346e19dfac4Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347e19dfac4Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4348313a12fdSmrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 434927702724Smrg 4350e19dfac4Smrgint 4351e19dfac4Smrgmain (int argc, char *argv[]) 4352e19dfac4Smrg{ 4353e19dfac4Smrg char **newargz; 4354e19dfac4Smrg int newargc; 4355e19dfac4Smrg char *tmp_pathspec; 4356e19dfac4Smrg char *actual_cwrapper_path; 4357e19dfac4Smrg char *actual_cwrapper_name; 4358e19dfac4Smrg char *target_name; 4359e19dfac4Smrg char *lt_argv_zero; 4360e19dfac4Smrg intptr_t rval = 127; 436127702724Smrg 4362e19dfac4Smrg int i; 436327702724Smrg 4364e19dfac4Smrg program_name = (char *) xstrdup (base_name (argv[0])); 4365313a12fdSmrg newargz = XMALLOC (char *, argc + 1); 436627702724Smrg 4367313a12fdSmrg /* very simple arg parsing; don't want to rely on getopt 4368313a12fdSmrg * also, copy all non cwrapper options to newargz, except 4369313a12fdSmrg * argz[0], which is handled differently 4370313a12fdSmrg */ 4371313a12fdSmrg newargc=0; 4372e19dfac4Smrg for (i = 1; i < argc; i++) 4373e19dfac4Smrg { 4374e19dfac4Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375e19dfac4Smrg { 4376e19dfac4SmrgEOF 4377e19dfac4Smrg case "$host" in 4378e19dfac4Smrg *mingw* | *cygwin* ) 4379e19dfac4Smrg # make stdout use "unix" line endings 4380e19dfac4Smrg echo " setmode(1,_O_BINARY);" 4381e19dfac4Smrg ;; 4382e19dfac4Smrg esac 438327702724Smrg 4384e19dfac4Smrg cat <<"EOF" 4385313a12fdSmrg lt_dump_script (stdout); 4386e19dfac4Smrg return 0; 4387e19dfac4Smrg } 4388313a12fdSmrg if (strcmp (argv[i], debug_opt) == 0) 4389313a12fdSmrg { 4390313a12fdSmrg lt_debug = 1; 4391313a12fdSmrg continue; 4392313a12fdSmrg } 4393313a12fdSmrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4394313a12fdSmrg { 4395313a12fdSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4396313a12fdSmrg namespace, but it is not one of the ones we know about and 4397313a12fdSmrg have already dealt with, above (inluding dump-script), then 4398313a12fdSmrg report an error. Otherwise, targets might begin to believe 4399313a12fdSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4400313a12fdSmrg namespace. The first time any user complains about this, we'll 4401313a12fdSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4402313a12fdSmrg or a configure.ac-settable value. 4403313a12fdSmrg */ 4404313a12fdSmrg lt_fatal (__FILE__, __LINE__, 4405313a12fdSmrg "unrecognized %s option: '%s'", 4406313a12fdSmrg ltwrapper_option_prefix, argv[i]); 4407313a12fdSmrg } 4408313a12fdSmrg /* otherwise ... */ 4409313a12fdSmrg newargz[++newargc] = xstrdup (argv[i]); 4410e19dfac4Smrg } 4411313a12fdSmrg newargz[++newargc] = NULL; 4412313a12fdSmrg 4413313a12fdSmrgEOF 4414313a12fdSmrg cat <<EOF 4415313a12fdSmrg /* The GNU banner must be the first non-error debug message */ 4416313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4417313a12fdSmrgEOF 4418313a12fdSmrg cat <<"EOF" 4419313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4420313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 442127702724Smrg 4422e19dfac4Smrg tmp_pathspec = find_executable (argv[0]); 4423e19dfac4Smrg if (tmp_pathspec == NULL) 4424313a12fdSmrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4425313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 4426313a12fdSmrg "(main) found exe (before symlink chase) at: %s\n", 4427313a12fdSmrg tmp_pathspec); 4428e19dfac4Smrg 4429e19dfac4Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4430313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 4431313a12fdSmrg "(main) found exe (after symlink chase) at: %s\n", 4432313a12fdSmrg actual_cwrapper_path); 4433e19dfac4Smrg XFREE (tmp_pathspec); 4434e19dfac4Smrg 4435313a12fdSmrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436e19dfac4Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437e19dfac4Smrg 4438e19dfac4Smrg /* wrapper name transforms */ 4439e19dfac4Smrg strendzap (actual_cwrapper_name, ".exe"); 4440e19dfac4Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441e19dfac4Smrg XFREE (actual_cwrapper_name); 4442e19dfac4Smrg actual_cwrapper_name = tmp_pathspec; 4443e19dfac4Smrg tmp_pathspec = 0; 4444e19dfac4Smrg 4445e19dfac4Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446e19dfac4Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447e19dfac4Smrg strendzap (target_name, ".exe"); 4448e19dfac4Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449e19dfac4Smrg XFREE (target_name); 4450e19dfac4Smrg target_name = tmp_pathspec; 4451e19dfac4Smrg tmp_pathspec = 0; 4452e19dfac4Smrg 4453313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 4454313a12fdSmrg "(main) libtool target name: %s\n", 4455313a12fdSmrg target_name); 4456e19dfac4SmrgEOF 445727702724Smrg 4458e19dfac4Smrg cat <<EOF 4459e19dfac4Smrg newargz[0] = 4460e19dfac4Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461e19dfac4Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462e19dfac4Smrg strcpy (newargz[0], actual_cwrapper_path); 4463e19dfac4Smrg strcat (newargz[0], "$objdir"); 4464e19dfac4Smrg strcat (newargz[0], "/"); 4465e19dfac4SmrgEOF 446627702724Smrg 4467e19dfac4Smrg cat <<"EOF" 4468e19dfac4Smrg /* stop here, and copy so we don't have to do this twice */ 4469e19dfac4Smrg tmp_pathspec = xstrdup (newargz[0]); 447027702724Smrg 4471e19dfac4Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472e19dfac4Smrg strcat (newargz[0], actual_cwrapper_name); 447327702724Smrg 4474e19dfac4Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475e19dfac4Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476e19dfac4Smrg XFREE (tmp_pathspec); 4477e19dfac4Smrg tmp_pathspec = NULL; 4478e19dfac4SmrgEOF 447927702724Smrg 4480e19dfac4Smrg case $host_os in 4481e19dfac4Smrg mingw*) 4482e19dfac4Smrg cat <<"EOF" 4483e19dfac4Smrg { 4484e19dfac4Smrg char* p; 4485e19dfac4Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486e19dfac4Smrg { 4487e19dfac4Smrg *p = '/'; 4488e19dfac4Smrg } 4489e19dfac4Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490e19dfac4Smrg { 4491e19dfac4Smrg *p = '/'; 4492e19dfac4Smrg } 4493e19dfac4Smrg } 4494e19dfac4SmrgEOF 4495e19dfac4Smrg ;; 4496e19dfac4Smrg esac 449727702724Smrg 4498e19dfac4Smrg cat <<"EOF" 4499e19dfac4Smrg XFREE (target_name); 4500e19dfac4Smrg XFREE (actual_cwrapper_path); 4501e19dfac4Smrg XFREE (actual_cwrapper_name); 450227702724Smrg 4503e19dfac4Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504e19dfac4Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4505313a12fdSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4506313a12fdSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4507313a12fdSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 4508313a12fdSmrg libraries must come first. */ 4509e19dfac4Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4510313a12fdSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 451127702724Smrg 4512313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4513313a12fdSmrg nonnull (lt_argv_zero)); 4514e19dfac4Smrg for (i = 0; i < newargc; i++) 4515e19dfac4Smrg { 4516313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4517313a12fdSmrg i, nonnull (newargz[i])); 4518e19dfac4Smrg } 451927702724Smrg 4520e19dfac4SmrgEOF 452127702724Smrg 4522e19dfac4Smrg case $host_os in 4523e19dfac4Smrg mingw*) 4524e19dfac4Smrg cat <<"EOF" 4525e19dfac4Smrg /* execv doesn't actually work on mingw as expected on unix */ 4526313a12fdSmrg newargz = prepare_spawn (newargz); 4527e19dfac4Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528e19dfac4Smrg if (rval == -1) 4529e19dfac4Smrg { 4530e19dfac4Smrg /* failed to start process */ 4531313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 4532313a12fdSmrg "(main) failed to launch target \"%s\": %s\n", 4533313a12fdSmrg lt_argv_zero, nonnull (strerror (errno))); 4534e19dfac4Smrg return 127; 4535e19dfac4Smrg } 4536e19dfac4Smrg return rval; 4537e19dfac4SmrgEOF 4538e19dfac4Smrg ;; 4539e19dfac4Smrg *) 4540e19dfac4Smrg cat <<"EOF" 4541e19dfac4Smrg execv (lt_argv_zero, newargz); 4542e19dfac4Smrg return rval; /* =127, but avoids unused variable warning */ 4543e19dfac4SmrgEOF 4544e19dfac4Smrg ;; 4545e19dfac4Smrg esac 454627702724Smrg 4547e19dfac4Smrg cat <<"EOF" 4548e19dfac4Smrg} 454927702724Smrg 4550e19dfac4Smrgvoid * 4551e19dfac4Smrgxmalloc (size_t num) 4552e19dfac4Smrg{ 4553e19dfac4Smrg void *p = (void *) malloc (num); 4554e19dfac4Smrg if (!p) 4555313a12fdSmrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 455627702724Smrg 4557e19dfac4Smrg return p; 4558e19dfac4Smrg} 455927702724Smrg 4560e19dfac4Smrgchar * 4561e19dfac4Smrgxstrdup (const char *string) 4562e19dfac4Smrg{ 4563e19dfac4Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564e19dfac4Smrg string) : NULL; 4565e19dfac4Smrg} 456627702724Smrg 4567e19dfac4Smrgconst char * 4568e19dfac4Smrgbase_name (const char *name) 4569e19dfac4Smrg{ 4570e19dfac4Smrg const char *base; 457127702724Smrg 4572e19dfac4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573e19dfac4Smrg /* Skip over the disk name in MSDOS pathnames. */ 4574e19dfac4Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575e19dfac4Smrg name += 2; 4576e19dfac4Smrg#endif 457727702724Smrg 4578e19dfac4Smrg for (base = name; *name; name++) 4579e19dfac4Smrg if (IS_DIR_SEPARATOR (*name)) 4580e19dfac4Smrg base = name + 1; 4581e19dfac4Smrg return base; 4582e19dfac4Smrg} 458327702724Smrg 4584e19dfac4Smrgint 4585e19dfac4Smrgcheck_executable (const char *path) 4586e19dfac4Smrg{ 4587e19dfac4Smrg struct stat st; 458827702724Smrg 4589313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4590313a12fdSmrg nonempty (path)); 4591e19dfac4Smrg if ((!path) || (!*path)) 4592e19dfac4Smrg return 0; 459327702724Smrg 4594e19dfac4Smrg if ((stat (path, &st) >= 0) 4595e19dfac4Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596e19dfac4Smrg return 1; 4597e19dfac4Smrg else 4598e19dfac4Smrg return 0; 4599e19dfac4Smrg} 460027702724Smrg 4601e19dfac4Smrgint 4602e19dfac4Smrgmake_executable (const char *path) 4603e19dfac4Smrg{ 4604e19dfac4Smrg int rval = 0; 4605e19dfac4Smrg struct stat st; 460627702724Smrg 4607313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4608313a12fdSmrg nonempty (path)); 4609e19dfac4Smrg if ((!path) || (!*path)) 4610e19dfac4Smrg return 0; 461127702724Smrg 4612e19dfac4Smrg if (stat (path, &st) >= 0) 4613e19dfac4Smrg { 4614e19dfac4Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615e19dfac4Smrg } 4616e19dfac4Smrg return rval; 4617e19dfac4Smrg} 461827702724Smrg 4619e19dfac4Smrg/* Searches for the full path of the wrapper. Returns 4620e19dfac4Smrg newly allocated full path name if found, NULL otherwise 4621e19dfac4Smrg Does not chase symlinks, even on platforms that support them. 4622e19dfac4Smrg*/ 4623e19dfac4Smrgchar * 4624e19dfac4Smrgfind_executable (const char *wrapper) 4625e19dfac4Smrg{ 4626e19dfac4Smrg int has_slash = 0; 4627e19dfac4Smrg const char *p; 4628e19dfac4Smrg const char *p_next; 4629e19dfac4Smrg /* static buffer for getcwd */ 4630e19dfac4Smrg char tmp[LT_PATHMAX + 1]; 4631e19dfac4Smrg int tmp_len; 4632e19dfac4Smrg char *concat_name; 463327702724Smrg 4634313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4635313a12fdSmrg nonempty (wrapper)); 463627702724Smrg 4637e19dfac4Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638e19dfac4Smrg return NULL; 463927702724Smrg 4640e19dfac4Smrg /* Absolute path? */ 4641e19dfac4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642e19dfac4Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643e19dfac4Smrg { 4644e19dfac4Smrg concat_name = xstrdup (wrapper); 4645e19dfac4Smrg if (check_executable (concat_name)) 4646e19dfac4Smrg return concat_name; 4647e19dfac4Smrg XFREE (concat_name); 4648e19dfac4Smrg } 4649e19dfac4Smrg else 4650e19dfac4Smrg { 4651e19dfac4Smrg#endif 4652e19dfac4Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653e19dfac4Smrg { 4654e19dfac4Smrg concat_name = xstrdup (wrapper); 4655e19dfac4Smrg if (check_executable (concat_name)) 4656e19dfac4Smrg return concat_name; 4657e19dfac4Smrg XFREE (concat_name); 4658e19dfac4Smrg } 4659e19dfac4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660e19dfac4Smrg } 4661e19dfac4Smrg#endif 466227702724Smrg 4663e19dfac4Smrg for (p = wrapper; *p; p++) 4664e19dfac4Smrg if (*p == '/') 4665e19dfac4Smrg { 4666e19dfac4Smrg has_slash = 1; 4667e19dfac4Smrg break; 4668e19dfac4Smrg } 4669e19dfac4Smrg if (!has_slash) 4670e19dfac4Smrg { 4671e19dfac4Smrg /* no slashes; search PATH */ 4672e19dfac4Smrg const char *path = getenv ("PATH"); 4673e19dfac4Smrg if (path != NULL) 4674e19dfac4Smrg { 4675e19dfac4Smrg for (p = path; *p; p = p_next) 4676e19dfac4Smrg { 4677e19dfac4Smrg const char *q; 4678e19dfac4Smrg size_t p_len; 4679e19dfac4Smrg for (q = p; *q; q++) 4680e19dfac4Smrg if (IS_PATH_SEPARATOR (*q)) 4681e19dfac4Smrg break; 4682e19dfac4Smrg p_len = q - p; 4683e19dfac4Smrg p_next = (*q == '\0' ? q : q + 1); 4684e19dfac4Smrg if (p_len == 0) 4685e19dfac4Smrg { 4686e19dfac4Smrg /* empty path: current directory */ 4687e19dfac4Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 4688313a12fdSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4689313a12fdSmrg nonnull (strerror (errno))); 4690e19dfac4Smrg tmp_len = strlen (tmp); 4691e19dfac4Smrg concat_name = 4692e19dfac4Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693e19dfac4Smrg memcpy (concat_name, tmp, tmp_len); 4694e19dfac4Smrg concat_name[tmp_len] = '/'; 4695e19dfac4Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4696e19dfac4Smrg } 4697e19dfac4Smrg else 4698e19dfac4Smrg { 4699e19dfac4Smrg concat_name = 4700e19dfac4Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701e19dfac4Smrg memcpy (concat_name, p, p_len); 4702e19dfac4Smrg concat_name[p_len] = '/'; 4703e19dfac4Smrg strcpy (concat_name + p_len + 1, wrapper); 4704e19dfac4Smrg } 4705e19dfac4Smrg if (check_executable (concat_name)) 4706e19dfac4Smrg return concat_name; 4707e19dfac4Smrg XFREE (concat_name); 4708e19dfac4Smrg } 4709e19dfac4Smrg } 4710e19dfac4Smrg /* not found in PATH; assume curdir */ 4711e19dfac4Smrg } 4712e19dfac4Smrg /* Relative path | not found in path: prepend cwd */ 4713e19dfac4Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 4714313a12fdSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4715313a12fdSmrg nonnull (strerror (errno))); 4716e19dfac4Smrg tmp_len = strlen (tmp); 4717e19dfac4Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718e19dfac4Smrg memcpy (concat_name, tmp, tmp_len); 4719e19dfac4Smrg concat_name[tmp_len] = '/'; 4720e19dfac4Smrg strcpy (concat_name + tmp_len + 1, wrapper); 472127702724Smrg 4722e19dfac4Smrg if (check_executable (concat_name)) 4723e19dfac4Smrg return concat_name; 4724e19dfac4Smrg XFREE (concat_name); 4725e19dfac4Smrg return NULL; 4726e19dfac4Smrg} 472727702724Smrg 4728e19dfac4Smrgchar * 4729e19dfac4Smrgchase_symlinks (const char *pathspec) 4730e19dfac4Smrg{ 4731e19dfac4Smrg#ifndef S_ISLNK 4732e19dfac4Smrg return xstrdup (pathspec); 4733e19dfac4Smrg#else 4734e19dfac4Smrg char buf[LT_PATHMAX]; 4735e19dfac4Smrg struct stat s; 4736e19dfac4Smrg char *tmp_pathspec = xstrdup (pathspec); 4737e19dfac4Smrg char *p; 4738e19dfac4Smrg int has_symlinks = 0; 4739e19dfac4Smrg while (strlen (tmp_pathspec) && !has_symlinks) 4740e19dfac4Smrg { 4741313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 4742313a12fdSmrg "checking path component for symlinks: %s\n", 4743313a12fdSmrg tmp_pathspec); 4744e19dfac4Smrg if (lstat (tmp_pathspec, &s) == 0) 4745e19dfac4Smrg { 4746e19dfac4Smrg if (S_ISLNK (s.st_mode) != 0) 4747e19dfac4Smrg { 4748e19dfac4Smrg has_symlinks = 1; 4749e19dfac4Smrg break; 4750e19dfac4Smrg } 475127702724Smrg 4752e19dfac4Smrg /* search backwards for last DIR_SEPARATOR */ 4753e19dfac4Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754e19dfac4Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755e19dfac4Smrg p--; 4756e19dfac4Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757e19dfac4Smrg { 4758e19dfac4Smrg /* no more DIR_SEPARATORS left */ 4759e19dfac4Smrg break; 4760e19dfac4Smrg } 4761e19dfac4Smrg *p = '\0'; 4762e19dfac4Smrg } 4763e19dfac4Smrg else 4764e19dfac4Smrg { 4765313a12fdSmrg lt_fatal (__FILE__, __LINE__, 4766313a12fdSmrg "error accessing file \"%s\": %s", 4767313a12fdSmrg tmp_pathspec, nonnull (strerror (errno))); 4768e19dfac4Smrg } 4769e19dfac4Smrg } 4770e19dfac4Smrg XFREE (tmp_pathspec); 477127702724Smrg 4772e19dfac4Smrg if (!has_symlinks) 4773e19dfac4Smrg { 4774e19dfac4Smrg return xstrdup (pathspec); 4775e19dfac4Smrg } 477627702724Smrg 4777e19dfac4Smrg tmp_pathspec = realpath (pathspec, buf); 4778e19dfac4Smrg if (tmp_pathspec == 0) 4779e19dfac4Smrg { 4780313a12fdSmrg lt_fatal (__FILE__, __LINE__, 4781313a12fdSmrg "could not follow symlinks for %s", pathspec); 4782e19dfac4Smrg } 4783e19dfac4Smrg return xstrdup (tmp_pathspec); 4784e19dfac4Smrg#endif 4785e19dfac4Smrg} 478627702724Smrg 4787e19dfac4Smrgchar * 4788e19dfac4Smrgstrendzap (char *str, const char *pat) 4789e19dfac4Smrg{ 4790e19dfac4Smrg size_t len, patlen; 479127702724Smrg 4792e19dfac4Smrg assert (str != NULL); 4793e19dfac4Smrg assert (pat != NULL); 479427702724Smrg 4795e19dfac4Smrg len = strlen (str); 4796e19dfac4Smrg patlen = strlen (pat); 479727702724Smrg 4798e19dfac4Smrg if (patlen <= len) 4799e19dfac4Smrg { 4800e19dfac4Smrg str += len - patlen; 4801e19dfac4Smrg if (strcmp (str, pat) == 0) 4802e19dfac4Smrg *str = '\0'; 4803e19dfac4Smrg } 4804e19dfac4Smrg return str; 4805e19dfac4Smrg} 480627702724Smrg 4807313a12fdSmrgvoid 4808313a12fdSmrglt_debugprintf (const char *file, int line, const char *fmt, ...) 4809313a12fdSmrg{ 4810313a12fdSmrg va_list args; 4811313a12fdSmrg if (lt_debug) 4812313a12fdSmrg { 4813313a12fdSmrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4814313a12fdSmrg va_start (args, fmt); 4815313a12fdSmrg (void) vfprintf (stderr, fmt, args); 4816313a12fdSmrg va_end (args); 4817313a12fdSmrg } 4818313a12fdSmrg} 4819313a12fdSmrg 4820e19dfac4Smrgstatic void 4821313a12fdSmrglt_error_core (int exit_status, const char *file, 4822313a12fdSmrg int line, const char *mode, 4823e19dfac4Smrg const char *message, va_list ap) 4824e19dfac4Smrg{ 4825313a12fdSmrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826e19dfac4Smrg vfprintf (stderr, message, ap); 4827e19dfac4Smrg fprintf (stderr, ".\n"); 482827702724Smrg 4829e19dfac4Smrg if (exit_status >= 0) 4830e19dfac4Smrg exit (exit_status); 4831e19dfac4Smrg} 483227702724Smrg 4833e19dfac4Smrgvoid 4834313a12fdSmrglt_fatal (const char *file, int line, const char *message, ...) 4835e19dfac4Smrg{ 4836e19dfac4Smrg va_list ap; 4837e19dfac4Smrg va_start (ap, message); 4838313a12fdSmrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839e19dfac4Smrg va_end (ap); 4840e19dfac4Smrg} 484127702724Smrg 4842313a12fdSmrgstatic const char * 4843313a12fdSmrgnonnull (const char *s) 4844313a12fdSmrg{ 4845313a12fdSmrg return s ? s : "(null)"; 4846313a12fdSmrg} 4847313a12fdSmrg 4848313a12fdSmrgstatic const char * 4849313a12fdSmrgnonempty (const char *s) 4850313a12fdSmrg{ 4851313a12fdSmrg return (s && !*s) ? "(empty)" : nonnull (s); 4852313a12fdSmrg} 4853313a12fdSmrg 4854e19dfac4Smrgvoid 4855e19dfac4Smrglt_setenv (const char *name, const char *value) 4856e19dfac4Smrg{ 4857313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 4858313a12fdSmrg "(lt_setenv) setting '%s' to '%s'\n", 4859313a12fdSmrg nonnull (name), nonnull (value)); 4860e19dfac4Smrg { 4861e19dfac4Smrg#ifdef HAVE_SETENV 4862e19dfac4Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863e19dfac4Smrg char *str = xstrdup (value); 4864e19dfac4Smrg setenv (name, str, 1); 4865e19dfac4Smrg#else 4866e19dfac4Smrg int len = strlen (name) + 1 + strlen (value) + 1; 4867e19dfac4Smrg char *str = XMALLOC (char, len); 4868e19dfac4Smrg sprintf (str, "%s=%s", name, value); 4869e19dfac4Smrg if (putenv (str) != EXIT_SUCCESS) 4870e19dfac4Smrg { 4871e19dfac4Smrg XFREE (str); 4872e19dfac4Smrg } 4873e19dfac4Smrg#endif 4874e19dfac4Smrg } 4875e19dfac4Smrg} 487627702724Smrg 4877e19dfac4Smrgchar * 4878e19dfac4Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879e19dfac4Smrg{ 4880e19dfac4Smrg char *new_value; 4881e19dfac4Smrg if (orig_value && *orig_value) 4882e19dfac4Smrg { 4883e19dfac4Smrg int orig_value_len = strlen (orig_value); 4884e19dfac4Smrg int add_len = strlen (add); 4885e19dfac4Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886e19dfac4Smrg if (to_end) 4887e19dfac4Smrg { 4888e19dfac4Smrg strcpy (new_value, orig_value); 4889e19dfac4Smrg strcpy (new_value + orig_value_len, add); 4890e19dfac4Smrg } 4891e19dfac4Smrg else 4892e19dfac4Smrg { 4893e19dfac4Smrg strcpy (new_value, add); 4894e19dfac4Smrg strcpy (new_value + add_len, orig_value); 4895e19dfac4Smrg } 4896e19dfac4Smrg } 4897e19dfac4Smrg else 4898e19dfac4Smrg { 4899e19dfac4Smrg new_value = xstrdup (add); 4900e19dfac4Smrg } 4901e19dfac4Smrg return new_value; 4902e19dfac4Smrg} 490327702724Smrg 4904e19dfac4Smrgvoid 4905e19dfac4Smrglt_update_exe_path (const char *name, const char *value) 4906e19dfac4Smrg{ 4907313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 4908313a12fdSmrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4909313a12fdSmrg nonnull (name), nonnull (value)); 491027702724Smrg 4911e19dfac4Smrg if (name && *name && value && *value) 4912e19dfac4Smrg { 4913e19dfac4Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914e19dfac4Smrg /* some systems can't cope with a ':'-terminated path #' */ 4915e19dfac4Smrg int len = strlen (new_value); 4916e19dfac4Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917e19dfac4Smrg { 4918e19dfac4Smrg new_value[len-1] = '\0'; 4919e19dfac4Smrg } 4920e19dfac4Smrg lt_setenv (name, new_value); 4921e19dfac4Smrg XFREE (new_value); 4922e19dfac4Smrg } 4923e19dfac4Smrg} 492427702724Smrg 4925e19dfac4Smrgvoid 4926e19dfac4Smrglt_update_lib_path (const char *name, const char *value) 4927e19dfac4Smrg{ 4928313a12fdSmrg lt_debugprintf (__FILE__, __LINE__, 4929313a12fdSmrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4930313a12fdSmrg nonnull (name), nonnull (value)); 493127702724Smrg 4932e19dfac4Smrg if (name && *name && value && *value) 4933e19dfac4Smrg { 4934e19dfac4Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935e19dfac4Smrg lt_setenv (name, new_value); 4936e19dfac4Smrg XFREE (new_value); 4937e19dfac4Smrg } 4938e19dfac4Smrg} 493927702724Smrg 4940313a12fdSmrgEOF 4941313a12fdSmrg case $host_os in 4942313a12fdSmrg mingw*) 4943313a12fdSmrg cat <<"EOF" 4944313a12fdSmrg 4945313a12fdSmrg/* Prepares an argument vector before calling spawn(). 4946313a12fdSmrg Note that spawn() does not by itself call the command interpreter 4947313a12fdSmrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4948313a12fdSmrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4949313a12fdSmrg GetVersionEx(&v); 4950313a12fdSmrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4951313a12fdSmrg }) ? "cmd.exe" : "command.com"). 4952313a12fdSmrg Instead it simply concatenates the arguments, separated by ' ', and calls 4953313a12fdSmrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4954313a12fdSmrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4955313a12fdSmrg special way: 4956313a12fdSmrg - Space and tab are interpreted as delimiters. They are not treated as 4957313a12fdSmrg delimiters if they are surrounded by double quotes: "...". 4958313a12fdSmrg - Unescaped double quotes are removed from the input. Their only effect is 4959313a12fdSmrg that within double quotes, space and tab are treated like normal 4960313a12fdSmrg characters. 4961313a12fdSmrg - Backslashes not followed by double quotes are not special. 4962313a12fdSmrg - But 2*n+1 backslashes followed by a double quote become 4963313a12fdSmrg n backslashes followed by a double quote (n >= 0): 4964313a12fdSmrg \" -> " 4965313a12fdSmrg \\\" -> \" 4966313a12fdSmrg \\\\\" -> \\" 4967313a12fdSmrg */ 4968313a12fdSmrg#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" 4969313a12fdSmrg#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" 4970313a12fdSmrgchar ** 4971313a12fdSmrgprepare_spawn (char **argv) 4972313a12fdSmrg{ 4973313a12fdSmrg size_t argc; 4974313a12fdSmrg char **new_argv; 4975313a12fdSmrg size_t i; 4976313a12fdSmrg 4977313a12fdSmrg /* Count number of arguments. */ 4978313a12fdSmrg for (argc = 0; argv[argc] != NULL; argc++) 4979313a12fdSmrg ; 4980313a12fdSmrg 4981313a12fdSmrg /* Allocate new argument vector. */ 4982313a12fdSmrg new_argv = XMALLOC (char *, argc + 1); 4983313a12fdSmrg 4984313a12fdSmrg /* Put quoted arguments into the new argument vector. */ 4985313a12fdSmrg for (i = 0; i < argc; i++) 4986313a12fdSmrg { 4987313a12fdSmrg const char *string = argv[i]; 4988313a12fdSmrg 4989313a12fdSmrg if (string[0] == '\0') 4990313a12fdSmrg new_argv[i] = xstrdup ("\"\""); 4991313a12fdSmrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4992313a12fdSmrg { 4993313a12fdSmrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4994313a12fdSmrg size_t length; 4995313a12fdSmrg unsigned int backslashes; 4996313a12fdSmrg const char *s; 4997313a12fdSmrg char *quoted_string; 4998313a12fdSmrg char *p; 4999313a12fdSmrg 5000313a12fdSmrg length = 0; 5001313a12fdSmrg backslashes = 0; 5002313a12fdSmrg if (quote_around) 5003313a12fdSmrg length++; 5004313a12fdSmrg for (s = string; *s != '\0'; s++) 5005313a12fdSmrg { 5006313a12fdSmrg char c = *s; 5007313a12fdSmrg if (c == '"') 5008313a12fdSmrg length += backslashes + 1; 5009313a12fdSmrg length++; 5010313a12fdSmrg if (c == '\\') 5011313a12fdSmrg backslashes++; 5012313a12fdSmrg else 5013313a12fdSmrg backslashes = 0; 5014313a12fdSmrg } 5015313a12fdSmrg if (quote_around) 5016313a12fdSmrg length += backslashes + 1; 5017313a12fdSmrg 5018313a12fdSmrg quoted_string = XMALLOC (char, length + 1); 5019313a12fdSmrg 5020313a12fdSmrg p = quoted_string; 5021313a12fdSmrg backslashes = 0; 5022313a12fdSmrg if (quote_around) 5023313a12fdSmrg *p++ = '"'; 5024313a12fdSmrg for (s = string; *s != '\0'; s++) 5025313a12fdSmrg { 5026313a12fdSmrg char c = *s; 5027313a12fdSmrg if (c == '"') 5028313a12fdSmrg { 5029313a12fdSmrg unsigned int j; 5030313a12fdSmrg for (j = backslashes + 1; j > 0; j--) 5031313a12fdSmrg *p++ = '\\'; 5032313a12fdSmrg } 5033313a12fdSmrg *p++ = c; 5034313a12fdSmrg if (c == '\\') 5035313a12fdSmrg backslashes++; 5036313a12fdSmrg else 5037313a12fdSmrg backslashes = 0; 5038313a12fdSmrg } 5039313a12fdSmrg if (quote_around) 5040313a12fdSmrg { 5041313a12fdSmrg unsigned int j; 5042313a12fdSmrg for (j = backslashes; j > 0; j--) 5043313a12fdSmrg *p++ = '\\'; 5044313a12fdSmrg *p++ = '"'; 5045313a12fdSmrg } 5046313a12fdSmrg *p = '\0'; 5047313a12fdSmrg 5048313a12fdSmrg new_argv[i] = quoted_string; 5049313a12fdSmrg } 5050313a12fdSmrg else 5051313a12fdSmrg new_argv[i] = (char *) string; 5052313a12fdSmrg } 5053313a12fdSmrg new_argv[argc] = NULL; 5054313a12fdSmrg 5055313a12fdSmrg return new_argv; 5056313a12fdSmrg} 5057313a12fdSmrgEOF 5058313a12fdSmrg ;; 5059313a12fdSmrg esac 506027702724Smrg 5061313a12fdSmrg cat <<"EOF" 5062313a12fdSmrgvoid lt_dump_script (FILE* f) 5063313a12fdSmrg{ 5064313a12fdSmrgEOF 5065313a12fdSmrg func_emit_wrapper yes | 5066313a12fdSmrg $SED -n -e ' 5067313a12fdSmrgs/^\(.\{79\}\)\(..*\)/\1\ 5068313a12fdSmrg\2/ 5069313a12fdSmrgh 5070313a12fdSmrgs/\([\\"]\)/\\\1/g 5071313a12fdSmrgs/$/\\n/ 5072313a12fdSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 5073313a12fdSmrgg 5074313a12fdSmrgD' 5075313a12fdSmrg cat <<"EOF" 5076313a12fdSmrg} 5077e19dfac4SmrgEOF 5078e19dfac4Smrg} 5079e19dfac4Smrg# end: func_emit_cwrapperexe_src 508027702724Smrg 5081313a12fdSmrg# func_win32_import_lib_p ARG 5082313a12fdSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd 5083313a12fdSmrgfunc_win32_import_lib_p () 5084313a12fdSmrg{ 5085313a12fdSmrg $opt_debug 5086313a12fdSmrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5087313a12fdSmrg *import*) : ;; 5088313a12fdSmrg *) false ;; 5089313a12fdSmrg esac 5090313a12fdSmrg} 5091313a12fdSmrg 5092e19dfac4Smrg# func_mode_link arg... 5093e19dfac4Smrgfunc_mode_link () 5094e19dfac4Smrg{ 5095e19dfac4Smrg $opt_debug 5096e19dfac4Smrg case $host in 5097e19dfac4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098e19dfac4Smrg # It is impossible to link a dll without this setting, and 5099e19dfac4Smrg # we shouldn't force the makefile maintainer to figure out 5100e19dfac4Smrg # which system we are compiling for in order to pass an extra 5101e19dfac4Smrg # flag for every libtool invocation. 5102e19dfac4Smrg # allow_undefined=no 510327702724Smrg 5104e19dfac4Smrg # FIXME: Unfortunately, there are problems with the above when trying 5105e19dfac4Smrg # to make a dll which has undefined symbols, in which case not 5106e19dfac4Smrg # even a static library is built. For now, we need to specify 5107e19dfac4Smrg # -no-undefined on the libtool link line when we can be certain 5108e19dfac4Smrg # that all symbols are satisfied, otherwise we get a static library. 5109e19dfac4Smrg allow_undefined=yes 5110e19dfac4Smrg ;; 5111e19dfac4Smrg *) 5112e19dfac4Smrg allow_undefined=yes 5113e19dfac4Smrg ;; 5114e19dfac4Smrg esac 5115e19dfac4Smrg libtool_args=$nonopt 5116e19dfac4Smrg base_compile="$nonopt $@" 5117e19dfac4Smrg compile_command=$nonopt 5118e19dfac4Smrg finalize_command=$nonopt 511927702724Smrg 5120e19dfac4Smrg compile_rpath= 5121e19dfac4Smrg finalize_rpath= 5122e19dfac4Smrg compile_shlibpath= 5123e19dfac4Smrg finalize_shlibpath= 5124e19dfac4Smrg convenience= 5125e19dfac4Smrg old_convenience= 5126e19dfac4Smrg deplibs= 5127e19dfac4Smrg old_deplibs= 5128e19dfac4Smrg compiler_flags= 5129e19dfac4Smrg linker_flags= 5130e19dfac4Smrg dllsearchpath= 5131e19dfac4Smrg lib_search_path=`pwd` 5132e19dfac4Smrg inst_prefix_dir= 5133e19dfac4Smrg new_inherited_linker_flags= 513427702724Smrg 5135e19dfac4Smrg avoid_version=no 5136313a12fdSmrg bindir= 5137e19dfac4Smrg dlfiles= 5138e19dfac4Smrg dlprefiles= 5139e19dfac4Smrg dlself=no 5140e19dfac4Smrg export_dynamic=no 5141e19dfac4Smrg export_symbols= 5142e19dfac4Smrg export_symbols_regex= 5143e19dfac4Smrg generated= 5144e19dfac4Smrg libobjs= 5145e19dfac4Smrg ltlibs= 5146e19dfac4Smrg module=no 5147e19dfac4Smrg no_install=no 5148e19dfac4Smrg objs= 5149e19dfac4Smrg non_pic_objects= 5150e19dfac4Smrg precious_files_regex= 5151e19dfac4Smrg prefer_static_libs=no 5152e19dfac4Smrg preload=no 5153e19dfac4Smrg prev= 5154e19dfac4Smrg prevarg= 5155e19dfac4Smrg release= 5156e19dfac4Smrg rpath= 5157e19dfac4Smrg xrpath= 5158e19dfac4Smrg perm_rpath= 5159e19dfac4Smrg temp_rpath= 5160e19dfac4Smrg thread_safe=no 5161e19dfac4Smrg vinfo= 5162e19dfac4Smrg vinfo_number=no 5163e19dfac4Smrg weak_libs= 5164e19dfac4Smrg single_module="${wl}-single_module" 5165e19dfac4Smrg func_infer_tag $base_compile 516627702724Smrg 5167e19dfac4Smrg # We need to know -static, to get the right output filenames. 5168e19dfac4Smrg for arg 5169e19dfac4Smrg do 5170e19dfac4Smrg case $arg in 5171e19dfac4Smrg -shared) 5172e19dfac4Smrg test "$build_libtool_libs" != yes && \ 5173e19dfac4Smrg func_fatal_configuration "can not build a shared library" 5174e19dfac4Smrg build_old_libs=no 5175e19dfac4Smrg break 5176e19dfac4Smrg ;; 5177e19dfac4Smrg -all-static | -static | -static-libtool-libs) 5178e19dfac4Smrg case $arg in 5179e19dfac4Smrg -all-static) 5180e19dfac4Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181e19dfac4Smrg func_warning "complete static linking is impossible in this configuration" 518227702724Smrg fi 5183e19dfac4Smrg if test -n "$link_static_flag"; then 5184e19dfac4Smrg dlopen_self=$dlopen_self_static 518527702724Smrg fi 5186e19dfac4Smrg prefer_static_libs=yes 518727702724Smrg ;; 5188e19dfac4Smrg -static) 5189e19dfac4Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190e19dfac4Smrg dlopen_self=$dlopen_self_static 5191e19dfac4Smrg fi 5192e19dfac4Smrg prefer_static_libs=built 5193e19dfac4Smrg ;; 5194e19dfac4Smrg -static-libtool-libs) 5195e19dfac4Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196e19dfac4Smrg dlopen_self=$dlopen_self_static 5197e19dfac4Smrg fi 5198e19dfac4Smrg prefer_static_libs=yes 519927702724Smrg ;; 520027702724Smrg esac 5201e19dfac4Smrg build_libtool_libs=no 5202e19dfac4Smrg build_old_libs=yes 5203e19dfac4Smrg break 5204e19dfac4Smrg ;; 5205e19dfac4Smrg esac 5206e19dfac4Smrg done 520727702724Smrg 5208e19dfac4Smrg # See if our shared archives depend on static archives. 5209e19dfac4Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 521027702724Smrg 5211e19dfac4Smrg # Go through the arguments, transforming them on the way. 5212e19dfac4Smrg while test "$#" -gt 0; do 5213e19dfac4Smrg arg="$1" 5214e19dfac4Smrg shift 5215e19dfac4Smrg func_quote_for_eval "$arg" 5216e19dfac4Smrg qarg=$func_quote_for_eval_unquoted_result 5217e19dfac4Smrg func_append libtool_args " $func_quote_for_eval_result" 521827702724Smrg 5219e19dfac4Smrg # If the previous option needs an argument, assign it. 5220e19dfac4Smrg if test -n "$prev"; then 5221e19dfac4Smrg case $prev in 5222e19dfac4Smrg output) 5223e19dfac4Smrg func_append compile_command " @OUTPUT@" 5224e19dfac4Smrg func_append finalize_command " @OUTPUT@" 5225e19dfac4Smrg ;; 5226e19dfac4Smrg esac 522727702724Smrg 5228e19dfac4Smrg case $prev in 5229313a12fdSmrg bindir) 5230313a12fdSmrg bindir="$arg" 5231313a12fdSmrg prev= 5232313a12fdSmrg continue 5233313a12fdSmrg ;; 5234e19dfac4Smrg dlfiles|dlprefiles) 5235e19dfac4Smrg if test "$preload" = no; then 5236e19dfac4Smrg # Add the symbol object into the linking commands. 5237e19dfac4Smrg func_append compile_command " @SYMFILE@" 5238e19dfac4Smrg func_append finalize_command " @SYMFILE@" 5239e19dfac4Smrg preload=yes 5240e19dfac4Smrg fi 5241e19dfac4Smrg case $arg in 5242e19dfac4Smrg *.la | *.lo) ;; # We handle these cases below. 5243e19dfac4Smrg force) 5244e19dfac4Smrg if test "$dlself" = no; then 5245e19dfac4Smrg dlself=needless 5246e19dfac4Smrg export_dynamic=yes 5247e19dfac4Smrg fi 5248e19dfac4Smrg prev= 5249e19dfac4Smrg continue 5250e19dfac4Smrg ;; 5251e19dfac4Smrg self) 5252e19dfac4Smrg if test "$prev" = dlprefiles; then 5253e19dfac4Smrg dlself=yes 5254e19dfac4Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255e19dfac4Smrg dlself=yes 5256e19dfac4Smrg else 5257e19dfac4Smrg dlself=needless 5258e19dfac4Smrg export_dynamic=yes 5259e19dfac4Smrg fi 5260e19dfac4Smrg prev= 5261e19dfac4Smrg continue 526227702724Smrg ;; 526327702724Smrg *) 5264e19dfac4Smrg if test "$prev" = dlfiles; then 5265313a12fdSmrg func_append dlfiles " $arg" 5266e19dfac4Smrg else 5267313a12fdSmrg func_append dlprefiles " $arg" 5268e19dfac4Smrg fi 5269e19dfac4Smrg prev= 5270e19dfac4Smrg continue 527127702724Smrg ;; 527227702724Smrg esac 5273e19dfac4Smrg ;; 5274e19dfac4Smrg expsyms) 5275e19dfac4Smrg export_symbols="$arg" 5276e19dfac4Smrg test -f "$arg" \ 5277e19dfac4Smrg || func_fatal_error "symbol file \`$arg' does not exist" 5278e19dfac4Smrg prev= 5279e19dfac4Smrg continue 5280e19dfac4Smrg ;; 5281e19dfac4Smrg expsyms_regex) 5282e19dfac4Smrg export_symbols_regex="$arg" 5283e19dfac4Smrg prev= 5284e19dfac4Smrg continue 5285e19dfac4Smrg ;; 5286e19dfac4Smrg framework) 5287e19dfac4Smrg case $host in 5288e19dfac4Smrg *-*-darwin*) 5289e19dfac4Smrg case "$deplibs " in 5290e19dfac4Smrg *" $qarg.ltframework "*) ;; 5291313a12fdSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292e19dfac4Smrg ;; 5293e19dfac4Smrg esac 5294e19dfac4Smrg ;; 5295e19dfac4Smrg esac 5296e19dfac4Smrg prev= 5297e19dfac4Smrg continue 5298e19dfac4Smrg ;; 5299e19dfac4Smrg inst_prefix) 5300e19dfac4Smrg inst_prefix_dir="$arg" 5301e19dfac4Smrg prev= 5302e19dfac4Smrg continue 5303e19dfac4Smrg ;; 5304e19dfac4Smrg objectlist) 5305e19dfac4Smrg if test -f "$arg"; then 5306e19dfac4Smrg save_arg=$arg 5307e19dfac4Smrg moreargs= 5308e19dfac4Smrg for fil in `cat "$save_arg"` 5309e19dfac4Smrg do 5310313a12fdSmrg# func_append moreargs " $fil" 5311e19dfac4Smrg arg=$fil 5312e19dfac4Smrg # A libtool-controlled object. 531327702724Smrg 5314e19dfac4Smrg # Check to see that this really is a libtool object. 5315e19dfac4Smrg if func_lalib_unsafe_p "$arg"; then 5316e19dfac4Smrg pic_object= 5317e19dfac4Smrg non_pic_object= 531827702724Smrg 5319e19dfac4Smrg # Read the .lo file 5320e19dfac4Smrg func_source "$arg" 532127702724Smrg 5322e19dfac4Smrg if test -z "$pic_object" || 5323e19dfac4Smrg test -z "$non_pic_object" || 5324e19dfac4Smrg test "$pic_object" = none && 5325e19dfac4Smrg test "$non_pic_object" = none; then 5326e19dfac4Smrg func_fatal_error "cannot find name of object for \`$arg'" 5327e19dfac4Smrg fi 532827702724Smrg 5329e19dfac4Smrg # Extract subdirectory from the argument. 5330e19dfac4Smrg func_dirname "$arg" "/" "" 5331e19dfac4Smrg xdir="$func_dirname_result" 533227702724Smrg 5333e19dfac4Smrg if test "$pic_object" != none; then 5334e19dfac4Smrg # Prepend the subdirectory the object is found in. 5335e19dfac4Smrg pic_object="$xdir$pic_object" 533627702724Smrg 5337e19dfac4Smrg if test "$prev" = dlfiles; then 5338e19dfac4Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5339313a12fdSmrg func_append dlfiles " $pic_object" 5340e19dfac4Smrg prev= 5341e19dfac4Smrg continue 5342e19dfac4Smrg else 5343e19dfac4Smrg # If libtool objects are unsupported, then we need to preload. 5344e19dfac4Smrg prev=dlprefiles 5345e19dfac4Smrg fi 5346e19dfac4Smrg fi 534727702724Smrg 5348e19dfac4Smrg # CHECK ME: I think I busted this. -Ossama 5349e19dfac4Smrg if test "$prev" = dlprefiles; then 5350e19dfac4Smrg # Preload the old-style object. 5351313a12fdSmrg func_append dlprefiles " $pic_object" 5352e19dfac4Smrg prev= 5353e19dfac4Smrg fi 535427702724Smrg 5355e19dfac4Smrg # A PIC object. 5356e19dfac4Smrg func_append libobjs " $pic_object" 5357e19dfac4Smrg arg="$pic_object" 5358e19dfac4Smrg fi 535927702724Smrg 5360e19dfac4Smrg # Non-PIC object. 5361e19dfac4Smrg if test "$non_pic_object" != none; then 5362e19dfac4Smrg # Prepend the subdirectory the object is found in. 5363e19dfac4Smrg non_pic_object="$xdir$non_pic_object" 536427702724Smrg 5365e19dfac4Smrg # A standard non-PIC object 5366e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 5367e19dfac4Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5368e19dfac4Smrg arg="$non_pic_object" 5369e19dfac4Smrg fi 5370e19dfac4Smrg else 5371e19dfac4Smrg # If the PIC object exists, use it instead. 5372e19dfac4Smrg # $xdir was prepended to $pic_object above. 5373e19dfac4Smrg non_pic_object="$pic_object" 5374e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 5375e19dfac4Smrg fi 5376e19dfac4Smrg else 5377e19dfac4Smrg # Only an error if not doing a dry-run. 5378e19dfac4Smrg if $opt_dry_run; then 5379e19dfac4Smrg # Extract subdirectory from the argument. 5380e19dfac4Smrg func_dirname "$arg" "/" "" 5381e19dfac4Smrg xdir="$func_dirname_result" 5382e19dfac4Smrg 5383e19dfac4Smrg func_lo2o "$arg" 5384e19dfac4Smrg pic_object=$xdir$objdir/$func_lo2o_result 5385e19dfac4Smrg non_pic_object=$xdir$func_lo2o_result 5386e19dfac4Smrg func_append libobjs " $pic_object" 5387e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 5388e19dfac4Smrg else 5389e19dfac4Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5390e19dfac4Smrg fi 5391e19dfac4Smrg fi 5392e19dfac4Smrg done 5393e19dfac4Smrg else 5394e19dfac4Smrg func_fatal_error "link input file \`$arg' does not exist" 5395e19dfac4Smrg fi 5396e19dfac4Smrg arg=$save_arg 5397e19dfac4Smrg prev= 5398e19dfac4Smrg continue 5399e19dfac4Smrg ;; 5400e19dfac4Smrg precious_regex) 5401e19dfac4Smrg precious_files_regex="$arg" 5402e19dfac4Smrg prev= 5403e19dfac4Smrg continue 5404e19dfac4Smrg ;; 5405e19dfac4Smrg release) 5406e19dfac4Smrg release="-$arg" 5407e19dfac4Smrg prev= 5408e19dfac4Smrg continue 5409e19dfac4Smrg ;; 5410e19dfac4Smrg rpath | xrpath) 5411e19dfac4Smrg # We need an absolute path. 5412e19dfac4Smrg case $arg in 5413e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414e19dfac4Smrg *) 5415e19dfac4Smrg func_fatal_error "only absolute run-paths are allowed" 5416e19dfac4Smrg ;; 5417e19dfac4Smrg esac 5418e19dfac4Smrg if test "$prev" = rpath; then 5419e19dfac4Smrg case "$rpath " in 5420e19dfac4Smrg *" $arg "*) ;; 5421313a12fdSmrg *) func_append rpath " $arg" ;; 5422e19dfac4Smrg esac 5423e19dfac4Smrg else 5424e19dfac4Smrg case "$xrpath " in 5425e19dfac4Smrg *" $arg "*) ;; 5426313a12fdSmrg *) func_append xrpath " $arg" ;; 5427e19dfac4Smrg esac 5428e19dfac4Smrg fi 5429e19dfac4Smrg prev= 5430e19dfac4Smrg continue 5431e19dfac4Smrg ;; 5432e19dfac4Smrg shrext) 5433e19dfac4Smrg shrext_cmds="$arg" 5434e19dfac4Smrg prev= 5435e19dfac4Smrg continue 5436e19dfac4Smrg ;; 5437e19dfac4Smrg weak) 5438313a12fdSmrg func_append weak_libs " $arg" 5439e19dfac4Smrg prev= 5440e19dfac4Smrg continue 5441e19dfac4Smrg ;; 5442e19dfac4Smrg xcclinker) 5443313a12fdSmrg func_append linker_flags " $qarg" 5444313a12fdSmrg func_append compiler_flags " $qarg" 5445e19dfac4Smrg prev= 5446e19dfac4Smrg func_append compile_command " $qarg" 5447e19dfac4Smrg func_append finalize_command " $qarg" 5448e19dfac4Smrg continue 5449e19dfac4Smrg ;; 5450e19dfac4Smrg xcompiler) 5451313a12fdSmrg func_append compiler_flags " $qarg" 5452e19dfac4Smrg prev= 5453e19dfac4Smrg func_append compile_command " $qarg" 5454e19dfac4Smrg func_append finalize_command " $qarg" 5455e19dfac4Smrg continue 5456e19dfac4Smrg ;; 5457e19dfac4Smrg xlinker) 5458313a12fdSmrg func_append linker_flags " $qarg" 5459313a12fdSmrg func_append compiler_flags " $wl$qarg" 5460e19dfac4Smrg prev= 5461e19dfac4Smrg func_append compile_command " $wl$qarg" 5462e19dfac4Smrg func_append finalize_command " $wl$qarg" 5463e19dfac4Smrg continue 5464e19dfac4Smrg ;; 5465e19dfac4Smrg *) 5466e19dfac4Smrg eval "$prev=\"\$arg\"" 5467e19dfac4Smrg prev= 5468e19dfac4Smrg continue 5469e19dfac4Smrg ;; 547027702724Smrg esac 5471e19dfac4Smrg fi # test -n "$prev" 547227702724Smrg 5473e19dfac4Smrg prevarg="$arg" 547427702724Smrg 5475e19dfac4Smrg case $arg in 5476e19dfac4Smrg -all-static) 5477e19dfac4Smrg if test -n "$link_static_flag"; then 5478e19dfac4Smrg # See comment for -static flag below, for more details. 5479e19dfac4Smrg func_append compile_command " $link_static_flag" 5480e19dfac4Smrg func_append finalize_command " $link_static_flag" 5481e19dfac4Smrg fi 5482e19dfac4Smrg continue 5483e19dfac4Smrg ;; 548427702724Smrg 5485e19dfac4Smrg -allow-undefined) 5486e19dfac4Smrg # FIXME: remove this flag sometime in the future. 5487e19dfac4Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488e19dfac4Smrg ;; 548927702724Smrg 5490e19dfac4Smrg -avoid-version) 5491e19dfac4Smrg avoid_version=yes 5492e19dfac4Smrg continue 5493e19dfac4Smrg ;; 549427702724Smrg 5495313a12fdSmrg -bindir) 5496313a12fdSmrg prev=bindir 5497313a12fdSmrg continue 5498313a12fdSmrg ;; 5499313a12fdSmrg 5500e19dfac4Smrg -dlopen) 5501e19dfac4Smrg prev=dlfiles 5502e19dfac4Smrg continue 5503e19dfac4Smrg ;; 550427702724Smrg 5505e19dfac4Smrg -dlpreopen) 5506e19dfac4Smrg prev=dlprefiles 5507e19dfac4Smrg continue 5508e19dfac4Smrg ;; 550927702724Smrg 5510e19dfac4Smrg -export-dynamic) 5511e19dfac4Smrg export_dynamic=yes 5512e19dfac4Smrg continue 5513e19dfac4Smrg ;; 551427702724Smrg 5515e19dfac4Smrg -export-symbols | -export-symbols-regex) 5516e19dfac4Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517e19dfac4Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518e19dfac4Smrg fi 5519e19dfac4Smrg if test "X$arg" = "X-export-symbols"; then 5520e19dfac4Smrg prev=expsyms 5521e19dfac4Smrg else 5522e19dfac4Smrg prev=expsyms_regex 5523e19dfac4Smrg fi 5524e19dfac4Smrg continue 5525e19dfac4Smrg ;; 552627702724Smrg 5527e19dfac4Smrg -framework) 5528e19dfac4Smrg prev=framework 5529e19dfac4Smrg continue 5530e19dfac4Smrg ;; 553127702724Smrg 5532e19dfac4Smrg -inst-prefix-dir) 5533e19dfac4Smrg prev=inst_prefix 5534e19dfac4Smrg continue 5535e19dfac4Smrg ;; 553627702724Smrg 5537e19dfac4Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538e19dfac4Smrg # so, if we see these flags be careful not to treat them like -L 5539e19dfac4Smrg -L[A-Z][A-Z]*:*) 5540e19dfac4Smrg case $with_gcc/$host in 5541e19dfac4Smrg no/*-*-irix* | /*-*-irix*) 5542e19dfac4Smrg func_append compile_command " $arg" 5543e19dfac4Smrg func_append finalize_command " $arg" 5544e19dfac4Smrg ;; 5545e19dfac4Smrg esac 5546e19dfac4Smrg continue 5547e19dfac4Smrg ;; 554827702724Smrg 5549e19dfac4Smrg -L*) 5550313a12fdSmrg func_stripname "-L" '' "$arg" 5551313a12fdSmrg if test -z "$func_stripname_result"; then 5552e19dfac4Smrg if test "$#" -gt 0; then 5553e19dfac4Smrg func_fatal_error "require no space between \`-L' and \`$1'" 5554e19dfac4Smrg else 5555e19dfac4Smrg func_fatal_error "need path for \`-L' option" 5556e19dfac4Smrg fi 5557e19dfac4Smrg fi 5558313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 5559313a12fdSmrg dir=$func_resolve_sysroot_result 5560e19dfac4Smrg # We need an absolute path. 5561e19dfac4Smrg case $dir in 5562e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563e19dfac4Smrg *) 5564e19dfac4Smrg absdir=`cd "$dir" && pwd` 5565e19dfac4Smrg test -z "$absdir" && \ 5566e19dfac4Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567e19dfac4Smrg dir="$absdir" 5568e19dfac4Smrg ;; 5569e19dfac4Smrg esac 5570e19dfac4Smrg case "$deplibs " in 5571313a12fdSmrg *" -L$dir "* | *" $arg "*) 5572313a12fdSmrg # Will only happen for absolute or sysroot arguments 5573313a12fdSmrg ;; 5574e19dfac4Smrg *) 5575313a12fdSmrg # Preserve sysroot, but never include relative directories 5576313a12fdSmrg case $dir in 5577313a12fdSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5578313a12fdSmrg *) func_append deplibs " -L$dir" ;; 5579313a12fdSmrg esac 5580313a12fdSmrg func_append lib_search_path " $dir" 5581e19dfac4Smrg ;; 5582e19dfac4Smrg esac 5583e19dfac4Smrg case $host in 5584e19dfac4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5585313a12fdSmrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586e19dfac4Smrg case :$dllsearchpath: in 5587e19dfac4Smrg *":$dir:"*) ;; 5588e19dfac4Smrg ::) dllsearchpath=$dir;; 5589313a12fdSmrg *) func_append dllsearchpath ":$dir";; 5590e19dfac4Smrg esac 5591e19dfac4Smrg case :$dllsearchpath: in 5592e19dfac4Smrg *":$testbindir:"*) ;; 5593e19dfac4Smrg ::) dllsearchpath=$testbindir;; 5594313a12fdSmrg *) func_append dllsearchpath ":$testbindir";; 5595e19dfac4Smrg esac 5596e19dfac4Smrg ;; 5597e19dfac4Smrg esac 5598e19dfac4Smrg continue 5599e19dfac4Smrg ;; 560027702724Smrg 5601e19dfac4Smrg -l*) 5602e19dfac4Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603e19dfac4Smrg case $host in 5604313a12fdSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605e19dfac4Smrg # These systems don't actually have a C or math library (as such) 5606e19dfac4Smrg continue 5607e19dfac4Smrg ;; 5608e19dfac4Smrg *-*-os2*) 5609e19dfac4Smrg # These systems don't actually have a C library (as such) 5610e19dfac4Smrg test "X$arg" = "X-lc" && continue 5611e19dfac4Smrg ;; 5612e19dfac4Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613e19dfac4Smrg # Do not include libc due to us having libc/libc_r. 5614e19dfac4Smrg test "X$arg" = "X-lc" && continue 5615e19dfac4Smrg ;; 5616e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 5617e19dfac4Smrg # Rhapsody C and math libraries are in the System framework 5618313a12fdSmrg func_append deplibs " System.ltframework" 5619e19dfac4Smrg continue 5620e19dfac4Smrg ;; 5621e19dfac4Smrg *-*-sco3.2v5* | *-*-sco5v6*) 5622e19dfac4Smrg # Causes problems with __ctype 5623e19dfac4Smrg test "X$arg" = "X-lc" && continue 5624e19dfac4Smrg ;; 5625e19dfac4Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626e19dfac4Smrg # Compiler inserts libc in the correct place for threads to work 5627e19dfac4Smrg test "X$arg" = "X-lc" && continue 5628e19dfac4Smrg ;; 5629e19dfac4Smrg esac 5630e19dfac4Smrg elif test "X$arg" = "X-lc_r"; then 5631e19dfac4Smrg case $host in 5632e19dfac4Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633e19dfac4Smrg # Do not include libc_r directly, use -pthread flag. 5634e19dfac4Smrg continue 5635e19dfac4Smrg ;; 5636e19dfac4Smrg esac 5637e19dfac4Smrg fi 5638313a12fdSmrg func_append deplibs " $arg" 5639e19dfac4Smrg continue 5640e19dfac4Smrg ;; 564127702724Smrg 5642e19dfac4Smrg -module) 5643e19dfac4Smrg module=yes 5644e19dfac4Smrg continue 5645e19dfac4Smrg ;; 564627702724Smrg 5647e19dfac4Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648e19dfac4Smrg # classes, name mangling, and exception handling. 5649e19dfac4Smrg # Darwin uses the -arch flag to determine output architecture. 5650313a12fdSmrg -model|-arch|-isysroot|--sysroot) 5651313a12fdSmrg func_append compiler_flags " $arg" 5652e19dfac4Smrg func_append compile_command " $arg" 5653e19dfac4Smrg func_append finalize_command " $arg" 5654e19dfac4Smrg prev=xcompiler 5655e19dfac4Smrg continue 5656e19dfac4Smrg ;; 565727702724Smrg 5658313a12fdSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659313a12fdSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 5660313a12fdSmrg func_append compiler_flags " $arg" 5661e19dfac4Smrg func_append compile_command " $arg" 5662e19dfac4Smrg func_append finalize_command " $arg" 5663e19dfac4Smrg case "$new_inherited_linker_flags " in 5664e19dfac4Smrg *" $arg "*) ;; 5665313a12fdSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666e19dfac4Smrg esac 5667e19dfac4Smrg continue 5668e19dfac4Smrg ;; 566927702724Smrg 5670e19dfac4Smrg -multi_module) 5671e19dfac4Smrg single_module="${wl}-multi_module" 5672e19dfac4Smrg continue 5673e19dfac4Smrg ;; 567427702724Smrg 5675e19dfac4Smrg -no-fast-install) 5676e19dfac4Smrg fast_install=no 5677e19dfac4Smrg continue 5678e19dfac4Smrg ;; 567927702724Smrg 5680e19dfac4Smrg -no-install) 5681e19dfac4Smrg case $host in 5682e19dfac4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683e19dfac4Smrg # The PATH hackery in wrapper scripts is required on Windows 5684e19dfac4Smrg # and Darwin in order for the loader to find any dlls it needs. 5685e19dfac4Smrg func_warning "\`-no-install' is ignored for $host" 5686e19dfac4Smrg func_warning "assuming \`-no-fast-install' instead" 5687e19dfac4Smrg fast_install=no 5688e19dfac4Smrg ;; 5689e19dfac4Smrg *) no_install=yes ;; 5690e19dfac4Smrg esac 5691e19dfac4Smrg continue 5692e19dfac4Smrg ;; 569327702724Smrg 5694e19dfac4Smrg -no-undefined) 5695e19dfac4Smrg allow_undefined=no 5696e19dfac4Smrg continue 5697e19dfac4Smrg ;; 569827702724Smrg 5699e19dfac4Smrg -objectlist) 5700e19dfac4Smrg prev=objectlist 5701e19dfac4Smrg continue 5702e19dfac4Smrg ;; 570327702724Smrg 5704e19dfac4Smrg -o) prev=output ;; 570527702724Smrg 5706e19dfac4Smrg -precious-files-regex) 5707e19dfac4Smrg prev=precious_regex 5708e19dfac4Smrg continue 5709e19dfac4Smrg ;; 571027702724Smrg 5711e19dfac4Smrg -release) 5712e19dfac4Smrg prev=release 5713e19dfac4Smrg continue 5714e19dfac4Smrg ;; 571527702724Smrg 5716e19dfac4Smrg -rpath) 5717e19dfac4Smrg prev=rpath 5718e19dfac4Smrg continue 5719e19dfac4Smrg ;; 572027702724Smrg 5721e19dfac4Smrg -R) 5722e19dfac4Smrg prev=xrpath 5723e19dfac4Smrg continue 5724e19dfac4Smrg ;; 572527702724Smrg 5726e19dfac4Smrg -R*) 5727e19dfac4Smrg func_stripname '-R' '' "$arg" 5728e19dfac4Smrg dir=$func_stripname_result 5729e19dfac4Smrg # We need an absolute path. 5730e19dfac4Smrg case $dir in 5731e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5732313a12fdSmrg =*) 5733313a12fdSmrg func_stripname '=' '' "$dir" 5734313a12fdSmrg dir=$lt_sysroot$func_stripname_result 5735313a12fdSmrg ;; 5736e19dfac4Smrg *) 5737e19dfac4Smrg func_fatal_error "only absolute run-paths are allowed" 5738e19dfac4Smrg ;; 5739e19dfac4Smrg esac 5740e19dfac4Smrg case "$xrpath " in 5741e19dfac4Smrg *" $dir "*) ;; 5742313a12fdSmrg *) func_append xrpath " $dir" ;; 5743e19dfac4Smrg esac 5744e19dfac4Smrg continue 5745e19dfac4Smrg ;; 574627702724Smrg 5747e19dfac4Smrg -shared) 5748e19dfac4Smrg # The effects of -shared are defined in a previous loop. 5749e19dfac4Smrg continue 5750e19dfac4Smrg ;; 575127702724Smrg 5752e19dfac4Smrg -shrext) 5753e19dfac4Smrg prev=shrext 5754e19dfac4Smrg continue 5755e19dfac4Smrg ;; 575627702724Smrg 5757e19dfac4Smrg -static | -static-libtool-libs) 5758e19dfac4Smrg # The effects of -static are defined in a previous loop. 5759e19dfac4Smrg # We used to do the same as -all-static on platforms that 5760e19dfac4Smrg # didn't have a PIC flag, but the assumption that the effects 5761e19dfac4Smrg # would be equivalent was wrong. It would break on at least 5762e19dfac4Smrg # Digital Unix and AIX. 5763e19dfac4Smrg continue 5764e19dfac4Smrg ;; 576527702724Smrg 5766e19dfac4Smrg -thread-safe) 5767e19dfac4Smrg thread_safe=yes 5768e19dfac4Smrg continue 5769e19dfac4Smrg ;; 577027702724Smrg 5771e19dfac4Smrg -version-info) 5772e19dfac4Smrg prev=vinfo 5773e19dfac4Smrg continue 5774e19dfac4Smrg ;; 577527702724Smrg 5776e19dfac4Smrg -version-number) 5777e19dfac4Smrg prev=vinfo 5778e19dfac4Smrg vinfo_number=yes 5779e19dfac4Smrg continue 5780e19dfac4Smrg ;; 578127702724Smrg 5782e19dfac4Smrg -weak) 5783e19dfac4Smrg prev=weak 5784e19dfac4Smrg continue 5785e19dfac4Smrg ;; 578627702724Smrg 5787e19dfac4Smrg -Wc,*) 5788e19dfac4Smrg func_stripname '-Wc,' '' "$arg" 5789e19dfac4Smrg args=$func_stripname_result 5790e19dfac4Smrg arg= 5791e19dfac4Smrg save_ifs="$IFS"; IFS=',' 5792e19dfac4Smrg for flag in $args; do 5793e19dfac4Smrg IFS="$save_ifs" 5794e19dfac4Smrg func_quote_for_eval "$flag" 5795313a12fdSmrg func_append arg " $func_quote_for_eval_result" 5796313a12fdSmrg func_append compiler_flags " $func_quote_for_eval_result" 5797e19dfac4Smrg done 5798e19dfac4Smrg IFS="$save_ifs" 5799e19dfac4Smrg func_stripname ' ' '' "$arg" 5800e19dfac4Smrg arg=$func_stripname_result 5801e19dfac4Smrg ;; 580227702724Smrg 5803e19dfac4Smrg -Wl,*) 5804e19dfac4Smrg func_stripname '-Wl,' '' "$arg" 5805e19dfac4Smrg args=$func_stripname_result 5806e19dfac4Smrg arg= 5807e19dfac4Smrg save_ifs="$IFS"; IFS=',' 5808e19dfac4Smrg for flag in $args; do 5809e19dfac4Smrg IFS="$save_ifs" 5810e19dfac4Smrg func_quote_for_eval "$flag" 5811313a12fdSmrg func_append arg " $wl$func_quote_for_eval_result" 5812313a12fdSmrg func_append compiler_flags " $wl$func_quote_for_eval_result" 5813313a12fdSmrg func_append linker_flags " $func_quote_for_eval_result" 5814e19dfac4Smrg done 5815e19dfac4Smrg IFS="$save_ifs" 5816e19dfac4Smrg func_stripname ' ' '' "$arg" 5817e19dfac4Smrg arg=$func_stripname_result 5818e19dfac4Smrg ;; 581927702724Smrg 5820e19dfac4Smrg -Xcompiler) 5821e19dfac4Smrg prev=xcompiler 5822e19dfac4Smrg continue 5823e19dfac4Smrg ;; 582427702724Smrg 5825e19dfac4Smrg -Xlinker) 5826e19dfac4Smrg prev=xlinker 5827e19dfac4Smrg continue 5828e19dfac4Smrg ;; 582927702724Smrg 5830e19dfac4Smrg -XCClinker) 5831e19dfac4Smrg prev=xcclinker 5832e19dfac4Smrg continue 5833e19dfac4Smrg ;; 583427702724Smrg 5835e19dfac4Smrg # -msg_* for osf cc 5836e19dfac4Smrg -msg_*) 5837e19dfac4Smrg func_quote_for_eval "$arg" 5838e19dfac4Smrg arg="$func_quote_for_eval_result" 5839e19dfac4Smrg ;; 584027702724Smrg 5841313a12fdSmrg # Flags to be passed through unchanged, with rationale: 5842313a12fdSmrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5843313a12fdSmrg # -r[0-9][0-9]* specify processor for the SGI compiler 5844313a12fdSmrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5845313a12fdSmrg # +DA*, +DD* enable 64-bit mode for the HP compiler 5846313a12fdSmrg # -q* compiler args for the IBM compiler 5847313a12fdSmrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5848313a12fdSmrg # -F/path path to uninstalled frameworks, gcc on darwin 5849313a12fdSmrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5850313a12fdSmrg # @file GCC response files 5851313a12fdSmrg # -tp=* Portland pgcc target processor selection 5852313a12fdSmrg # --sysroot=* for sysroot support 5853313a12fdSmrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854e19dfac4Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5855313a12fdSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 5856313a12fdSmrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857e19dfac4Smrg func_quote_for_eval "$arg" 5858e19dfac4Smrg arg="$func_quote_for_eval_result" 5859e19dfac4Smrg func_append compile_command " $arg" 5860e19dfac4Smrg func_append finalize_command " $arg" 5861313a12fdSmrg func_append compiler_flags " $arg" 5862e19dfac4Smrg continue 5863e19dfac4Smrg ;; 586427702724Smrg 5865e19dfac4Smrg # Some other compiler flag. 5866e19dfac4Smrg -* | +*) 5867e19dfac4Smrg func_quote_for_eval "$arg" 5868e19dfac4Smrg arg="$func_quote_for_eval_result" 5869e19dfac4Smrg ;; 587027702724Smrg 5871e19dfac4Smrg *.$objext) 5872e19dfac4Smrg # A standard object. 5873313a12fdSmrg func_append objs " $arg" 5874e19dfac4Smrg ;; 587527702724Smrg 5876e19dfac4Smrg *.lo) 5877e19dfac4Smrg # A libtool-controlled object. 587827702724Smrg 5879e19dfac4Smrg # Check to see that this really is a libtool object. 5880e19dfac4Smrg if func_lalib_unsafe_p "$arg"; then 5881e19dfac4Smrg pic_object= 5882e19dfac4Smrg non_pic_object= 5883e19dfac4Smrg 5884e19dfac4Smrg # Read the .lo file 5885e19dfac4Smrg func_source "$arg" 5886e19dfac4Smrg 5887e19dfac4Smrg if test -z "$pic_object" || 5888e19dfac4Smrg test -z "$non_pic_object" || 5889e19dfac4Smrg test "$pic_object" = none && 5890e19dfac4Smrg test "$non_pic_object" = none; then 5891e19dfac4Smrg func_fatal_error "cannot find name of object for \`$arg'" 5892e19dfac4Smrg fi 5893e19dfac4Smrg 5894e19dfac4Smrg # Extract subdirectory from the argument. 5895e19dfac4Smrg func_dirname "$arg" "/" "" 5896e19dfac4Smrg xdir="$func_dirname_result" 5897e19dfac4Smrg 5898e19dfac4Smrg if test "$pic_object" != none; then 5899e19dfac4Smrg # Prepend the subdirectory the object is found in. 5900e19dfac4Smrg pic_object="$xdir$pic_object" 5901e19dfac4Smrg 5902e19dfac4Smrg if test "$prev" = dlfiles; then 5903e19dfac4Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5904313a12fdSmrg func_append dlfiles " $pic_object" 5905e19dfac4Smrg prev= 5906e19dfac4Smrg continue 5907e19dfac4Smrg else 5908e19dfac4Smrg # If libtool objects are unsupported, then we need to preload. 5909e19dfac4Smrg prev=dlprefiles 5910e19dfac4Smrg fi 5911e19dfac4Smrg fi 5912e19dfac4Smrg 5913e19dfac4Smrg # CHECK ME: I think I busted this. -Ossama 5914e19dfac4Smrg if test "$prev" = dlprefiles; then 5915e19dfac4Smrg # Preload the old-style object. 5916313a12fdSmrg func_append dlprefiles " $pic_object" 5917e19dfac4Smrg prev= 5918e19dfac4Smrg fi 5919e19dfac4Smrg 5920e19dfac4Smrg # A PIC object. 5921e19dfac4Smrg func_append libobjs " $pic_object" 5922e19dfac4Smrg arg="$pic_object" 5923e19dfac4Smrg fi 5924e19dfac4Smrg 5925e19dfac4Smrg # Non-PIC object. 5926e19dfac4Smrg if test "$non_pic_object" != none; then 5927e19dfac4Smrg # Prepend the subdirectory the object is found in. 5928e19dfac4Smrg non_pic_object="$xdir$non_pic_object" 5929e19dfac4Smrg 5930e19dfac4Smrg # A standard non-PIC object 5931e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 5932e19dfac4Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 5933e19dfac4Smrg arg="$non_pic_object" 5934e19dfac4Smrg fi 5935e19dfac4Smrg else 5936e19dfac4Smrg # If the PIC object exists, use it instead. 5937e19dfac4Smrg # $xdir was prepended to $pic_object above. 5938e19dfac4Smrg non_pic_object="$pic_object" 5939e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 5940e19dfac4Smrg fi 5941e19dfac4Smrg else 5942e19dfac4Smrg # Only an error if not doing a dry-run. 5943e19dfac4Smrg if $opt_dry_run; then 5944e19dfac4Smrg # Extract subdirectory from the argument. 5945e19dfac4Smrg func_dirname "$arg" "/" "" 5946e19dfac4Smrg xdir="$func_dirname_result" 5947e19dfac4Smrg 5948e19dfac4Smrg func_lo2o "$arg" 5949e19dfac4Smrg pic_object=$xdir$objdir/$func_lo2o_result 5950e19dfac4Smrg non_pic_object=$xdir$func_lo2o_result 5951e19dfac4Smrg func_append libobjs " $pic_object" 5952e19dfac4Smrg func_append non_pic_objects " $non_pic_object" 5953e19dfac4Smrg else 5954e19dfac4Smrg func_fatal_error "\`$arg' is not a valid libtool object" 5955e19dfac4Smrg fi 5956e19dfac4Smrg fi 5957e19dfac4Smrg ;; 5958e19dfac4Smrg 5959e19dfac4Smrg *.$libext) 5960e19dfac4Smrg # An archive. 5961313a12fdSmrg func_append deplibs " $arg" 5962313a12fdSmrg func_append old_deplibs " $arg" 5963e19dfac4Smrg continue 5964e19dfac4Smrg ;; 5965e19dfac4Smrg 5966e19dfac4Smrg *.la) 5967e19dfac4Smrg # A libtool-controlled library. 5968e19dfac4Smrg 5969313a12fdSmrg func_resolve_sysroot "$arg" 5970e19dfac4Smrg if test "$prev" = dlfiles; then 5971e19dfac4Smrg # This library was specified with -dlopen. 5972313a12fdSmrg func_append dlfiles " $func_resolve_sysroot_result" 5973e19dfac4Smrg prev= 5974e19dfac4Smrg elif test "$prev" = dlprefiles; then 5975e19dfac4Smrg # The library was specified with -dlpreopen. 5976313a12fdSmrg func_append dlprefiles " $func_resolve_sysroot_result" 5977e19dfac4Smrg prev= 5978e19dfac4Smrg else 5979313a12fdSmrg func_append deplibs " $func_resolve_sysroot_result" 5980e19dfac4Smrg fi 5981e19dfac4Smrg continue 5982e19dfac4Smrg ;; 5983e19dfac4Smrg 5984e19dfac4Smrg # Some other compiler argument. 5985e19dfac4Smrg *) 5986e19dfac4Smrg # Unknown arguments in both finalize_command and compile_command need 5987e19dfac4Smrg # to be aesthetically quoted because they are evaled later. 5988e19dfac4Smrg func_quote_for_eval "$arg" 5989e19dfac4Smrg arg="$func_quote_for_eval_result" 5990e19dfac4Smrg ;; 5991e19dfac4Smrg esac # arg 5992e19dfac4Smrg 5993e19dfac4Smrg # Now actually substitute the argument into the commands. 5994e19dfac4Smrg if test -n "$arg"; then 5995e19dfac4Smrg func_append compile_command " $arg" 5996e19dfac4Smrg func_append finalize_command " $arg" 5997e19dfac4Smrg fi 5998e19dfac4Smrg done # argument parsing loop 5999e19dfac4Smrg 6000e19dfac4Smrg test -n "$prev" && \ 6001e19dfac4Smrg func_fatal_help "the \`$prevarg' option requires an argument" 6002e19dfac4Smrg 6003e19dfac4Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004e19dfac4Smrg eval arg=\"$export_dynamic_flag_spec\" 6005e19dfac4Smrg func_append compile_command " $arg" 6006e19dfac4Smrg func_append finalize_command " $arg" 6007e19dfac4Smrg fi 6008e19dfac4Smrg 6009e19dfac4Smrg oldlibs= 6010e19dfac4Smrg # calculate the name of the file, without its directory 6011e19dfac4Smrg func_basename "$output" 6012e19dfac4Smrg outputname="$func_basename_result" 6013e19dfac4Smrg libobjs_save="$libobjs" 6014e19dfac4Smrg 6015e19dfac4Smrg if test -n "$shlibpath_var"; then 6016e19dfac4Smrg # get the directories listed in $shlibpath_var 6017313a12fdSmrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 601827702724Smrg else 6019e19dfac4Smrg shlib_search_path= 602027702724Smrg fi 6021e19dfac4Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022e19dfac4Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 602327702724Smrg 6024e19dfac4Smrg func_dirname "$output" "/" "" 6025e19dfac4Smrg output_objdir="$func_dirname_result$objdir" 6026313a12fdSmrg func_to_tool_file "$output_objdir/" 6027313a12fdSmrg tool_output_objdir=$func_to_tool_file_result 6028e19dfac4Smrg # Create the object directory. 6029e19dfac4Smrg func_mkdir_p "$output_objdir" 603027702724Smrg 6031e19dfac4Smrg # Determine the type of output 6032e19dfac4Smrg case $output in 6033e19dfac4Smrg "") 6034e19dfac4Smrg func_fatal_help "you must specify an output file" 6035e19dfac4Smrg ;; 6036e19dfac4Smrg *.$libext) linkmode=oldlib ;; 6037e19dfac4Smrg *.lo | *.$objext) linkmode=obj ;; 6038e19dfac4Smrg *.la) linkmode=lib ;; 6039e19dfac4Smrg *) linkmode=prog ;; # Anything else should be a program. 6040e19dfac4Smrg esac 6041e19dfac4Smrg 6042e19dfac4Smrg specialdeplibs= 6043e19dfac4Smrg 6044e19dfac4Smrg libs= 6045e19dfac4Smrg # Find all interdependent deplibs by searching for libraries 6046e19dfac4Smrg # that are linked more than once (e.g. -la -lb -la) 6047e19dfac4Smrg for deplib in $deplibs; do 6048313a12fdSmrg if $opt_preserve_dup_deps ; then 6049e19dfac4Smrg case "$libs " in 6050313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051e19dfac4Smrg esac 6052e19dfac4Smrg fi 6053313a12fdSmrg func_append libs " $deplib" 6054e19dfac4Smrg done 6055e19dfac4Smrg 6056e19dfac4Smrg if test "$linkmode" = lib; then 6057e19dfac4Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058e19dfac4Smrg 6059e19dfac4Smrg # Compute libraries that are listed more than once in $predeps 6060e19dfac4Smrg # $postdeps and mark them as special (i.e., whose duplicates are 6061e19dfac4Smrg # not to be eliminated). 6062e19dfac4Smrg pre_post_deps= 6063e19dfac4Smrg if $opt_duplicate_compiler_generated_deps; then 6064e19dfac4Smrg for pre_post_dep in $predeps $postdeps; do 6065e19dfac4Smrg case "$pre_post_deps " in 6066313a12fdSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067e19dfac4Smrg esac 6068313a12fdSmrg func_append pre_post_deps " $pre_post_dep" 6069e19dfac4Smrg done 6070e19dfac4Smrg fi 6071e19dfac4Smrg pre_post_deps= 6072e19dfac4Smrg fi 6073e19dfac4Smrg 6074e19dfac4Smrg deplibs= 6075e19dfac4Smrg newdependency_libs= 6076e19dfac4Smrg newlib_search_path= 6077e19dfac4Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078e19dfac4Smrg notinst_deplibs= # not-installed libtool libraries 6079e19dfac4Smrg notinst_path= # paths that contain not-installed libtool libraries 6080e19dfac4Smrg 6081e19dfac4Smrg case $linkmode in 6082e19dfac4Smrg lib) 6083e19dfac4Smrg passes="conv dlpreopen link" 6084e19dfac4Smrg for file in $dlfiles $dlprefiles; do 6085e19dfac4Smrg case $file in 6086e19dfac4Smrg *.la) ;; 6087e19dfac4Smrg *) 6088e19dfac4Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089e19dfac4Smrg ;; 6090e19dfac4Smrg esac 6091e19dfac4Smrg done 6092e19dfac4Smrg ;; 6093e19dfac4Smrg prog) 6094e19dfac4Smrg compile_deplibs= 6095e19dfac4Smrg finalize_deplibs= 6096e19dfac4Smrg alldeplibs=no 6097e19dfac4Smrg newdlfiles= 6098e19dfac4Smrg newdlprefiles= 6099e19dfac4Smrg passes="conv scan dlopen dlpreopen link" 6100e19dfac4Smrg ;; 6101e19dfac4Smrg *) passes="conv" 6102e19dfac4Smrg ;; 6103e19dfac4Smrg esac 6104e19dfac4Smrg 6105e19dfac4Smrg for pass in $passes; do 6106e19dfac4Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107e19dfac4Smrg # so that -L comes before libs that need it for instance... 6108e19dfac4Smrg if test "$linkmode,$pass" = "lib,link"; then 6109e19dfac4Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110e19dfac4Smrg ## order, and fix it there properly 6111e19dfac4Smrg tmp_deplibs= 6112e19dfac4Smrg for deplib in $deplibs; do 6113e19dfac4Smrg tmp_deplibs="$deplib $tmp_deplibs" 6114e19dfac4Smrg done 6115e19dfac4Smrg deplibs="$tmp_deplibs" 6116e19dfac4Smrg fi 6117e19dfac4Smrg 6118e19dfac4Smrg if test "$linkmode,$pass" = "lib,link" || 6119e19dfac4Smrg test "$linkmode,$pass" = "prog,scan"; then 6120e19dfac4Smrg libs="$deplibs" 6121e19dfac4Smrg deplibs= 6122e19dfac4Smrg fi 6123e19dfac4Smrg if test "$linkmode" = prog; then 6124e19dfac4Smrg case $pass in 6125e19dfac4Smrg dlopen) libs="$dlfiles" ;; 6126e19dfac4Smrg dlpreopen) libs="$dlprefiles" ;; 6127313a12fdSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128e19dfac4Smrg esac 6129e19dfac4Smrg fi 6130e19dfac4Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131e19dfac4Smrg # Collect and forward deplibs of preopened libtool libs 6132e19dfac4Smrg for lib in $dlprefiles; do 6133e19dfac4Smrg # Ignore non-libtool-libs 6134e19dfac4Smrg dependency_libs= 6135313a12fdSmrg func_resolve_sysroot "$lib" 6136e19dfac4Smrg case $lib in 6137313a12fdSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 6138e19dfac4Smrg esac 6139e19dfac4Smrg 6140e19dfac4Smrg # Collect preopened libtool deplibs, except any this library 6141e19dfac4Smrg # has declared as weak libs 6142e19dfac4Smrg for deplib in $dependency_libs; do 6143313a12fdSmrg func_basename "$deplib" 6144313a12fdSmrg deplib_base=$func_basename_result 6145e19dfac4Smrg case " $weak_libs " in 6146e19dfac4Smrg *" $deplib_base "*) ;; 6147313a12fdSmrg *) func_append deplibs " $deplib" ;; 6148e19dfac4Smrg esac 6149e19dfac4Smrg done 6150e19dfac4Smrg done 6151e19dfac4Smrg libs="$dlprefiles" 6152e19dfac4Smrg fi 6153e19dfac4Smrg if test "$pass" = dlopen; then 6154e19dfac4Smrg # Collect dlpreopened libraries 6155e19dfac4Smrg save_deplibs="$deplibs" 6156e19dfac4Smrg deplibs= 6157e19dfac4Smrg fi 6158e19dfac4Smrg 6159e19dfac4Smrg for deplib in $libs; do 6160e19dfac4Smrg lib= 6161e19dfac4Smrg found=no 6162e19dfac4Smrg case $deplib in 6163313a12fdSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6164313a12fdSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165e19dfac4Smrg if test "$linkmode,$pass" = "prog,link"; then 6166e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 6167e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6168e19dfac4Smrg else 6169313a12fdSmrg func_append compiler_flags " $deplib" 6170e19dfac4Smrg if test "$linkmode" = lib ; then 6171e19dfac4Smrg case "$new_inherited_linker_flags " in 6172e19dfac4Smrg *" $deplib "*) ;; 6173313a12fdSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6174e19dfac4Smrg esac 6175e19dfac4Smrg fi 6176e19dfac4Smrg fi 6177e19dfac4Smrg continue 6178e19dfac4Smrg ;; 6179e19dfac4Smrg -l*) 6180e19dfac4Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 6181e19dfac4Smrg func_warning "\`-l' is ignored for archives/objects" 6182e19dfac4Smrg continue 6183e19dfac4Smrg fi 6184e19dfac4Smrg func_stripname '-l' '' "$deplib" 6185e19dfac4Smrg name=$func_stripname_result 6186e19dfac4Smrg if test "$linkmode" = lib; then 6187e19dfac4Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188e19dfac4Smrg else 6189e19dfac4Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190e19dfac4Smrg fi 6191e19dfac4Smrg for searchdir in $searchdirs; do 6192e19dfac4Smrg for search_ext in .la $std_shrext .so .a; do 6193e19dfac4Smrg # Search the libtool library 6194e19dfac4Smrg lib="$searchdir/lib${name}${search_ext}" 6195e19dfac4Smrg if test -f "$lib"; then 6196e19dfac4Smrg if test "$search_ext" = ".la"; then 6197e19dfac4Smrg found=yes 6198e19dfac4Smrg else 6199e19dfac4Smrg found=no 6200e19dfac4Smrg fi 6201e19dfac4Smrg break 2 6202e19dfac4Smrg fi 6203e19dfac4Smrg done 6204e19dfac4Smrg done 6205e19dfac4Smrg if test "$found" != yes; then 6206e19dfac4Smrg # deplib doesn't seem to be a libtool library 6207e19dfac4Smrg if test "$linkmode,$pass" = "prog,link"; then 6208e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 6209e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6210e19dfac4Smrg else 6211e19dfac4Smrg deplibs="$deplib $deplibs" 6212e19dfac4Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213e19dfac4Smrg fi 6214e19dfac4Smrg continue 6215e19dfac4Smrg else # deplib is a libtool library 6216e19dfac4Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217e19dfac4Smrg # We need to do some special things here, and not later. 6218e19dfac4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219e19dfac4Smrg case " $predeps $postdeps " in 6220e19dfac4Smrg *" $deplib "*) 6221e19dfac4Smrg if func_lalib_p "$lib"; then 6222e19dfac4Smrg library_names= 6223e19dfac4Smrg old_library= 6224e19dfac4Smrg func_source "$lib" 6225e19dfac4Smrg for l in $old_library $library_names; do 6226e19dfac4Smrg ll="$l" 6227e19dfac4Smrg done 6228e19dfac4Smrg if test "X$ll" = "X$old_library" ; then # only static version available 6229e19dfac4Smrg found=no 6230e19dfac4Smrg func_dirname "$lib" "" "." 6231e19dfac4Smrg ladir="$func_dirname_result" 6232e19dfac4Smrg lib=$ladir/$old_library 6233e19dfac4Smrg if test "$linkmode,$pass" = "prog,link"; then 6234e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 6235e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6236e19dfac4Smrg else 6237e19dfac4Smrg deplibs="$deplib $deplibs" 6238e19dfac4Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239e19dfac4Smrg fi 6240e19dfac4Smrg continue 6241e19dfac4Smrg fi 6242e19dfac4Smrg fi 6243e19dfac4Smrg ;; 6244e19dfac4Smrg *) ;; 6245e19dfac4Smrg esac 6246e19dfac4Smrg fi 6247e19dfac4Smrg fi 6248e19dfac4Smrg ;; # -l 6249e19dfac4Smrg *.ltframework) 6250e19dfac4Smrg if test "$linkmode,$pass" = "prog,link"; then 6251e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 6252e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6253e19dfac4Smrg else 6254e19dfac4Smrg deplibs="$deplib $deplibs" 6255e19dfac4Smrg if test "$linkmode" = lib ; then 6256e19dfac4Smrg case "$new_inherited_linker_flags " in 6257e19dfac4Smrg *" $deplib "*) ;; 6258313a12fdSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6259e19dfac4Smrg esac 6260e19dfac4Smrg fi 6261e19dfac4Smrg fi 6262e19dfac4Smrg continue 6263e19dfac4Smrg ;; 6264e19dfac4Smrg -L*) 6265e19dfac4Smrg case $linkmode in 6266e19dfac4Smrg lib) 6267e19dfac4Smrg deplibs="$deplib $deplibs" 6268e19dfac4Smrg test "$pass" = conv && continue 6269e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 6270e19dfac4Smrg func_stripname '-L' '' "$deplib" 6271313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 6272313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6273e19dfac4Smrg ;; 6274e19dfac4Smrg prog) 6275e19dfac4Smrg if test "$pass" = conv; then 6276e19dfac4Smrg deplibs="$deplib $deplibs" 6277e19dfac4Smrg continue 6278e19dfac4Smrg fi 6279e19dfac4Smrg if test "$pass" = scan; then 6280e19dfac4Smrg deplibs="$deplib $deplibs" 6281e19dfac4Smrg else 6282e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 6283e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6284e19dfac4Smrg fi 6285e19dfac4Smrg func_stripname '-L' '' "$deplib" 6286313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 6287313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6288e19dfac4Smrg ;; 6289e19dfac4Smrg *) 6290e19dfac4Smrg func_warning "\`-L' is ignored for archives/objects" 6291e19dfac4Smrg ;; 6292e19dfac4Smrg esac # linkmode 6293e19dfac4Smrg continue 6294e19dfac4Smrg ;; # -L 6295e19dfac4Smrg -R*) 6296e19dfac4Smrg if test "$pass" = link; then 6297e19dfac4Smrg func_stripname '-R' '' "$deplib" 6298313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 6299313a12fdSmrg dir=$func_resolve_sysroot_result 6300e19dfac4Smrg # Make sure the xrpath contains only unique directories. 6301e19dfac4Smrg case "$xrpath " in 6302e19dfac4Smrg *" $dir "*) ;; 6303313a12fdSmrg *) func_append xrpath " $dir" ;; 6304e19dfac4Smrg esac 6305e19dfac4Smrg fi 6306e19dfac4Smrg deplibs="$deplib $deplibs" 6307e19dfac4Smrg continue 6308e19dfac4Smrg ;; 6309313a12fdSmrg *.la) 6310313a12fdSmrg func_resolve_sysroot "$deplib" 6311313a12fdSmrg lib=$func_resolve_sysroot_result 6312313a12fdSmrg ;; 6313e19dfac4Smrg *.$libext) 6314e19dfac4Smrg if test "$pass" = conv; then 6315e19dfac4Smrg deplibs="$deplib $deplibs" 6316e19dfac4Smrg continue 6317e19dfac4Smrg fi 6318e19dfac4Smrg case $linkmode in 6319e19dfac4Smrg lib) 6320e19dfac4Smrg # Linking convenience modules into shared libraries is allowed, 6321e19dfac4Smrg # but linking other static libraries is non-portable. 6322e19dfac4Smrg case " $dlpreconveniencelibs " in 6323e19dfac4Smrg *" $deplib "*) ;; 6324e19dfac4Smrg *) 6325e19dfac4Smrg valid_a_lib=no 6326e19dfac4Smrg case $deplibs_check_method in 6327e19dfac4Smrg match_pattern*) 6328e19dfac4Smrg set dummy $deplibs_check_method; shift 6329e19dfac4Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6330313a12fdSmrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331e19dfac4Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 6332e19dfac4Smrg valid_a_lib=yes 6333e19dfac4Smrg fi 6334e19dfac4Smrg ;; 6335e19dfac4Smrg pass_all) 6336e19dfac4Smrg valid_a_lib=yes 6337e19dfac4Smrg ;; 6338e19dfac4Smrg esac 6339e19dfac4Smrg if test "$valid_a_lib" != yes; then 6340313a12fdSmrg echo 6341e19dfac4Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6342313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 6343313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 6344313a12fdSmrg echo "*** shared version of the library, which you do not appear to have" 6345313a12fdSmrg echo "*** because the file extensions .$libext of this argument makes me believe" 6346313a12fdSmrg echo "*** that it is just a static archive that I should not use here." 6347e19dfac4Smrg else 6348313a12fdSmrg echo 6349e19dfac4Smrg $ECHO "*** Warning: Linking the shared library $output against the" 6350e19dfac4Smrg $ECHO "*** static library $deplib is not portable!" 6351e19dfac4Smrg deplibs="$deplib $deplibs" 6352e19dfac4Smrg fi 6353e19dfac4Smrg ;; 6354e19dfac4Smrg esac 6355e19dfac4Smrg continue 6356e19dfac4Smrg ;; 6357e19dfac4Smrg prog) 6358e19dfac4Smrg if test "$pass" != link; then 6359e19dfac4Smrg deplibs="$deplib $deplibs" 6360e19dfac4Smrg else 6361e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 6362e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6363e19dfac4Smrg fi 6364e19dfac4Smrg continue 6365e19dfac4Smrg ;; 6366e19dfac4Smrg esac # linkmode 6367e19dfac4Smrg ;; # *.$libext 6368e19dfac4Smrg *.lo | *.$objext) 6369e19dfac4Smrg if test "$pass" = conv; then 6370e19dfac4Smrg deplibs="$deplib $deplibs" 6371e19dfac4Smrg elif test "$linkmode" = prog; then 6372e19dfac4Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373e19dfac4Smrg # If there is no dlopen support or we're linking statically, 6374e19dfac4Smrg # we need to preload. 6375313a12fdSmrg func_append newdlprefiles " $deplib" 6376e19dfac4Smrg compile_deplibs="$deplib $compile_deplibs" 6377e19dfac4Smrg finalize_deplibs="$deplib $finalize_deplibs" 6378e19dfac4Smrg else 6379313a12fdSmrg func_append newdlfiles " $deplib" 6380e19dfac4Smrg fi 6381e19dfac4Smrg fi 6382e19dfac4Smrg continue 6383e19dfac4Smrg ;; 6384e19dfac4Smrg %DEPLIBS%) 6385e19dfac4Smrg alldeplibs=yes 6386e19dfac4Smrg continue 6387e19dfac4Smrg ;; 6388e19dfac4Smrg esac # case $deplib 6389e19dfac4Smrg 6390e19dfac4Smrg if test "$found" = yes || test -f "$lib"; then : 6391e19dfac4Smrg else 6392e19dfac4Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393e19dfac4Smrg fi 6394e19dfac4Smrg 6395e19dfac4Smrg # Check to see that this really is a libtool archive. 6396e19dfac4Smrg func_lalib_unsafe_p "$lib" \ 6397e19dfac4Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6398e19dfac4Smrg 6399e19dfac4Smrg func_dirname "$lib" "" "." 6400e19dfac4Smrg ladir="$func_dirname_result" 6401e19dfac4Smrg 6402e19dfac4Smrg dlname= 6403e19dfac4Smrg dlopen= 6404e19dfac4Smrg dlpreopen= 6405e19dfac4Smrg libdir= 6406e19dfac4Smrg library_names= 6407e19dfac4Smrg old_library= 6408e19dfac4Smrg inherited_linker_flags= 6409e19dfac4Smrg # If the library was installed with an old release of libtool, 6410e19dfac4Smrg # it will not redefine variables installed, or shouldnotlink 6411e19dfac4Smrg installed=yes 6412e19dfac4Smrg shouldnotlink=no 6413e19dfac4Smrg avoidtemprpath= 6414e19dfac4Smrg 6415e19dfac4Smrg 6416e19dfac4Smrg # Read the .la file 6417e19dfac4Smrg func_source "$lib" 6418e19dfac4Smrg 6419e19dfac4Smrg # Convert "-framework foo" to "foo.ltframework" 6420e19dfac4Smrg if test -n "$inherited_linker_flags"; then 6421313a12fdSmrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422e19dfac4Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423e19dfac4Smrg case " $new_inherited_linker_flags " in 6424e19dfac4Smrg *" $tmp_inherited_linker_flag "*) ;; 6425313a12fdSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426e19dfac4Smrg esac 6427e19dfac4Smrg done 6428e19dfac4Smrg fi 6429313a12fdSmrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430e19dfac4Smrg if test "$linkmode,$pass" = "lib,link" || 6431e19dfac4Smrg test "$linkmode,$pass" = "prog,scan" || 6432e19dfac4Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6433313a12fdSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 6434313a12fdSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435e19dfac4Smrg fi 6436e19dfac4Smrg 6437e19dfac4Smrg if test "$pass" = conv; then 6438e19dfac4Smrg # Only check for convenience libraries 6439e19dfac4Smrg deplibs="$lib $deplibs" 6440e19dfac4Smrg if test -z "$libdir"; then 6441e19dfac4Smrg if test -z "$old_library"; then 6442e19dfac4Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6443e19dfac4Smrg fi 6444e19dfac4Smrg # It is a libtool convenience library, so add in its objects. 6445313a12fdSmrg func_append convenience " $ladir/$objdir/$old_library" 6446313a12fdSmrg func_append old_convenience " $ladir/$objdir/$old_library" 6447e19dfac4Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448e19dfac4Smrg func_fatal_error "\`$lib' is not a convenience library" 6449e19dfac4Smrg fi 6450313a12fdSmrg tmp_libs= 6451313a12fdSmrg for deplib in $dependency_libs; do 6452313a12fdSmrg deplibs="$deplib $deplibs" 6453313a12fdSmrg if $opt_preserve_dup_deps ; then 6454313a12fdSmrg case "$tmp_libs " in 6455313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456313a12fdSmrg esac 6457313a12fdSmrg fi 6458313a12fdSmrg func_append tmp_libs " $deplib" 6459313a12fdSmrg done 6460e19dfac4Smrg continue 6461e19dfac4Smrg fi # $pass = conv 6462e19dfac4Smrg 6463e19dfac4Smrg 6464e19dfac4Smrg # Get the name of the library we link against. 6465e19dfac4Smrg linklib= 6466313a12fdSmrg if test -n "$old_library" && 6467313a12fdSmrg { test "$prefer_static_libs" = yes || 6468313a12fdSmrg test "$prefer_static_libs,$installed" = "built,no"; }; then 6469313a12fdSmrg linklib=$old_library 6470313a12fdSmrg else 6471313a12fdSmrg for l in $old_library $library_names; do 6472313a12fdSmrg linklib="$l" 6473313a12fdSmrg done 6474313a12fdSmrg fi 6475e19dfac4Smrg if test -z "$linklib"; then 6476e19dfac4Smrg func_fatal_error "cannot find name of link library for \`$lib'" 6477e19dfac4Smrg fi 6478e19dfac4Smrg 6479e19dfac4Smrg # This library was specified with -dlopen. 6480e19dfac4Smrg if test "$pass" = dlopen; then 6481e19dfac4Smrg if test -z "$libdir"; then 6482e19dfac4Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483e19dfac4Smrg fi 6484e19dfac4Smrg if test -z "$dlname" || 6485e19dfac4Smrg test "$dlopen_support" != yes || 6486e19dfac4Smrg test "$build_libtool_libs" = no; then 6487e19dfac4Smrg # If there is no dlname, no dlopen support or we're linking 6488e19dfac4Smrg # statically, we need to preload. We also need to preload any 6489e19dfac4Smrg # dependent libraries so libltdl's deplib preloader doesn't 6490e19dfac4Smrg # bomb out in the load deplibs phase. 6491313a12fdSmrg func_append dlprefiles " $lib $dependency_libs" 6492e19dfac4Smrg else 6493313a12fdSmrg func_append newdlfiles " $lib" 6494e19dfac4Smrg fi 6495e19dfac4Smrg continue 6496e19dfac4Smrg fi # $pass = dlopen 6497e19dfac4Smrg 6498e19dfac4Smrg # We need an absolute path. 6499e19dfac4Smrg case $ladir in 6500e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501e19dfac4Smrg *) 6502e19dfac4Smrg abs_ladir=`cd "$ladir" && pwd` 6503e19dfac4Smrg if test -z "$abs_ladir"; then 6504e19dfac4Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 6505e19dfac4Smrg func_warning "passing it literally to the linker, although it might fail" 6506e19dfac4Smrg abs_ladir="$ladir" 6507e19dfac4Smrg fi 6508e19dfac4Smrg ;; 6509e19dfac4Smrg esac 6510e19dfac4Smrg func_basename "$lib" 6511e19dfac4Smrg laname="$func_basename_result" 6512e19dfac4Smrg 6513e19dfac4Smrg # Find the relevant object directory and library name. 6514e19dfac4Smrg if test "X$installed" = Xyes; then 6515313a12fdSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516e19dfac4Smrg func_warning "library \`$lib' was moved." 6517e19dfac4Smrg dir="$ladir" 6518e19dfac4Smrg absdir="$abs_ladir" 6519e19dfac4Smrg libdir="$abs_ladir" 6520e19dfac4Smrg else 6521313a12fdSmrg dir="$lt_sysroot$libdir" 6522313a12fdSmrg absdir="$lt_sysroot$libdir" 6523e19dfac4Smrg fi 6524e19dfac4Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525e19dfac4Smrg else 6526e19dfac4Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527e19dfac4Smrg dir="$ladir" 6528e19dfac4Smrg absdir="$abs_ladir" 6529e19dfac4Smrg # Remove this search path later 6530313a12fdSmrg func_append notinst_path " $abs_ladir" 6531e19dfac4Smrg else 6532e19dfac4Smrg dir="$ladir/$objdir" 6533e19dfac4Smrg absdir="$abs_ladir/$objdir" 6534e19dfac4Smrg # Remove this search path later 6535313a12fdSmrg func_append notinst_path " $abs_ladir" 6536e19dfac4Smrg fi 6537e19dfac4Smrg fi # $installed = yes 6538e19dfac4Smrg func_stripname 'lib' '.la' "$laname" 6539e19dfac4Smrg name=$func_stripname_result 6540e19dfac4Smrg 6541e19dfac4Smrg # This library was specified with -dlpreopen. 6542e19dfac4Smrg if test "$pass" = dlpreopen; then 6543e19dfac4Smrg if test -z "$libdir" && test "$linkmode" = prog; then 6544e19dfac4Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545e19dfac4Smrg fi 6546313a12fdSmrg case "$host" in 6547313a12fdSmrg # special handling for platforms with PE-DLLs. 6548313a12fdSmrg *cygwin* | *mingw* | *cegcc* ) 6549313a12fdSmrg # Linker will automatically link against shared library if both 6550313a12fdSmrg # static and shared are present. Therefore, ensure we extract 6551313a12fdSmrg # symbols from the import library if a shared library is present 6552313a12fdSmrg # (otherwise, the dlopen module name will be incorrect). We do 6553313a12fdSmrg # this by putting the import library name into $newdlprefiles. 6554313a12fdSmrg # We recover the dlopen module name by 'saving' the la file 6555313a12fdSmrg # name in a special purpose variable, and (later) extracting the 6556313a12fdSmrg # dlname from the la file. 6557313a12fdSmrg if test -n "$dlname"; then 6558313a12fdSmrg func_tr_sh "$dir/$linklib" 6559313a12fdSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6560313a12fdSmrg func_append newdlprefiles " $dir/$linklib" 6561313a12fdSmrg else 6562313a12fdSmrg func_append newdlprefiles " $dir/$old_library" 6563313a12fdSmrg # Keep a list of preopened convenience libraries to check 6564313a12fdSmrg # that they are being used correctly in the link pass. 6565313a12fdSmrg test -z "$libdir" && \ 6566313a12fdSmrg func_append dlpreconveniencelibs " $dir/$old_library" 6567313a12fdSmrg fi 6568313a12fdSmrg ;; 6569313a12fdSmrg * ) 6570313a12fdSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 6571313a12fdSmrg # are required to link). 6572313a12fdSmrg if test -n "$old_library"; then 6573313a12fdSmrg func_append newdlprefiles " $dir/$old_library" 6574313a12fdSmrg # Keep a list of preopened convenience libraries to check 6575313a12fdSmrg # that they are being used correctly in the link pass. 6576313a12fdSmrg test -z "$libdir" && \ 6577313a12fdSmrg func_append dlpreconveniencelibs " $dir/$old_library" 6578313a12fdSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 6579313a12fdSmrg elif test -n "$dlname"; then 6580313a12fdSmrg func_append newdlprefiles " $dir/$dlname" 6581313a12fdSmrg else 6582313a12fdSmrg func_append newdlprefiles " $dir/$linklib" 6583313a12fdSmrg fi 6584313a12fdSmrg ;; 6585313a12fdSmrg esac 6586e19dfac4Smrg fi # $pass = dlpreopen 6587e19dfac4Smrg 6588e19dfac4Smrg if test -z "$libdir"; then 6589e19dfac4Smrg # Link the convenience library 6590e19dfac4Smrg if test "$linkmode" = lib; then 6591e19dfac4Smrg deplibs="$dir/$old_library $deplibs" 6592e19dfac4Smrg elif test "$linkmode,$pass" = "prog,link"; then 6593e19dfac4Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 6594e19dfac4Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595e19dfac4Smrg else 6596e19dfac4Smrg deplibs="$lib $deplibs" # used for prog,scan pass 6597e19dfac4Smrg fi 6598e19dfac4Smrg continue 6599e19dfac4Smrg fi 6600e19dfac4Smrg 6601e19dfac4Smrg 6602e19dfac4Smrg if test "$linkmode" = prog && test "$pass" != link; then 6603313a12fdSmrg func_append newlib_search_path " $ladir" 6604e19dfac4Smrg deplibs="$lib $deplibs" 6605e19dfac4Smrg 6606e19dfac4Smrg linkalldeplibs=no 6607e19dfac4Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 6608e19dfac4Smrg test "$build_libtool_libs" = no; then 6609e19dfac4Smrg linkalldeplibs=yes 6610e19dfac4Smrg fi 6611e19dfac4Smrg 6612e19dfac4Smrg tmp_libs= 6613e19dfac4Smrg for deplib in $dependency_libs; do 6614e19dfac4Smrg case $deplib in 6615e19dfac4Smrg -L*) func_stripname '-L' '' "$deplib" 6616313a12fdSmrg func_resolve_sysroot "$func_stripname_result" 6617313a12fdSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6618e19dfac4Smrg ;; 6619e19dfac4Smrg esac 6620e19dfac4Smrg # Need to link against all dependency_libs? 6621e19dfac4Smrg if test "$linkalldeplibs" = yes; then 6622e19dfac4Smrg deplibs="$deplib $deplibs" 6623e19dfac4Smrg else 6624e19dfac4Smrg # Need to hardcode shared library paths 6625e19dfac4Smrg # or/and link against static libraries 6626e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 6627e19dfac4Smrg fi 6628313a12fdSmrg if $opt_preserve_dup_deps ; then 6629e19dfac4Smrg case "$tmp_libs " in 6630313a12fdSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631e19dfac4Smrg esac 6632e19dfac4Smrg fi 6633313a12fdSmrg func_append tmp_libs " $deplib" 6634e19dfac4Smrg done # for deplib 6635e19dfac4Smrg continue 6636e19dfac4Smrg fi # $linkmode = prog... 6637e19dfac4Smrg 6638e19dfac4Smrg if test "$linkmode,$pass" = "prog,link"; then 6639e19dfac4Smrg if test -n "$library_names" && 6640e19dfac4Smrg { { test "$prefer_static_libs" = no || 6641e19dfac4Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6642e19dfac4Smrg test -z "$old_library"; }; then 6643e19dfac4Smrg # We need to hardcode the library path 6644e19dfac4Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645e19dfac4Smrg # Make sure the rpath contains only unique directories. 6646e19dfac4Smrg case "$temp_rpath:" in 6647e19dfac4Smrg *"$absdir:"*) ;; 6648313a12fdSmrg *) func_append temp_rpath "$absdir:" ;; 6649e19dfac4Smrg esac 6650e19dfac4Smrg fi 6651e19dfac4Smrg 6652e19dfac4Smrg # Hardcode the library path. 6653e19dfac4Smrg # Skip directories that are in the system default run-time 6654e19dfac4Smrg # search path. 6655e19dfac4Smrg case " $sys_lib_dlsearch_path " in 6656e19dfac4Smrg *" $absdir "*) ;; 6657e19dfac4Smrg *) 6658e19dfac4Smrg case "$compile_rpath " in 6659e19dfac4Smrg *" $absdir "*) ;; 6660313a12fdSmrg *) func_append compile_rpath " $absdir" ;; 6661e19dfac4Smrg esac 6662e19dfac4Smrg ;; 6663e19dfac4Smrg esac 6664e19dfac4Smrg case " $sys_lib_dlsearch_path " in 6665e19dfac4Smrg *" $libdir "*) ;; 6666e19dfac4Smrg *) 6667e19dfac4Smrg case "$finalize_rpath " in 6668e19dfac4Smrg *" $libdir "*) ;; 6669313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 6670e19dfac4Smrg esac 6671e19dfac4Smrg ;; 6672e19dfac4Smrg esac 6673e19dfac4Smrg fi # $linkmode,$pass = prog,link... 6674e19dfac4Smrg 6675e19dfac4Smrg if test "$alldeplibs" = yes && 6676e19dfac4Smrg { test "$deplibs_check_method" = pass_all || 6677e19dfac4Smrg { test "$build_libtool_libs" = yes && 6678e19dfac4Smrg test -n "$library_names"; }; }; then 6679e19dfac4Smrg # We only need to search for static libraries 6680e19dfac4Smrg continue 6681e19dfac4Smrg fi 6682e19dfac4Smrg fi 6683e19dfac4Smrg 6684e19dfac4Smrg link_static=no # Whether the deplib will be linked statically 6685e19dfac4Smrg use_static_libs=$prefer_static_libs 6686e19dfac4Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 6687e19dfac4Smrg use_static_libs=no 6688e19dfac4Smrg fi 6689e19dfac4Smrg if test -n "$library_names" && 6690e19dfac4Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691e19dfac4Smrg case $host in 6692e19dfac4Smrg *cygwin* | *mingw* | *cegcc*) 6693e19dfac4Smrg # No point in relinking DLLs because paths are not encoded 6694313a12fdSmrg func_append notinst_deplibs " $lib" 6695e19dfac4Smrg need_relink=no 6696e19dfac4Smrg ;; 6697e19dfac4Smrg *) 6698e19dfac4Smrg if test "$installed" = no; then 6699313a12fdSmrg func_append notinst_deplibs " $lib" 6700e19dfac4Smrg need_relink=yes 6701e19dfac4Smrg fi 6702e19dfac4Smrg ;; 6703e19dfac4Smrg esac 6704e19dfac4Smrg # This is a shared library 6705e19dfac4Smrg 6706e19dfac4Smrg # Warn about portability, can't link against -module's on some 6707e19dfac4Smrg # systems (darwin). Don't bleat about dlopened modules though! 6708e19dfac4Smrg dlopenmodule="" 6709e19dfac4Smrg for dlpremoduletest in $dlprefiles; do 6710e19dfac4Smrg if test "X$dlpremoduletest" = "X$lib"; then 6711e19dfac4Smrg dlopenmodule="$dlpremoduletest" 6712e19dfac4Smrg break 6713e19dfac4Smrg fi 6714e19dfac4Smrg done 6715e19dfac4Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6716313a12fdSmrg echo 6717e19dfac4Smrg if test "$linkmode" = prog; then 6718e19dfac4Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719e19dfac4Smrg else 6720e19dfac4Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721e19dfac4Smrg fi 6722e19dfac4Smrg $ECHO "*** $linklib is not portable!" 6723e19dfac4Smrg fi 6724e19dfac4Smrg if test "$linkmode" = lib && 6725e19dfac4Smrg test "$hardcode_into_libs" = yes; then 6726e19dfac4Smrg # Hardcode the library path. 6727e19dfac4Smrg # Skip directories that are in the system default run-time 6728e19dfac4Smrg # search path. 6729e19dfac4Smrg case " $sys_lib_dlsearch_path " in 6730e19dfac4Smrg *" $absdir "*) ;; 6731e19dfac4Smrg *) 6732e19dfac4Smrg case "$compile_rpath " in 6733e19dfac4Smrg *" $absdir "*) ;; 6734313a12fdSmrg *) func_append compile_rpath " $absdir" ;; 6735e19dfac4Smrg esac 6736e19dfac4Smrg ;; 6737e19dfac4Smrg esac 6738e19dfac4Smrg case " $sys_lib_dlsearch_path " in 6739e19dfac4Smrg *" $libdir "*) ;; 6740e19dfac4Smrg *) 6741e19dfac4Smrg case "$finalize_rpath " in 6742e19dfac4Smrg *" $libdir "*) ;; 6743313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 6744e19dfac4Smrg esac 6745e19dfac4Smrg ;; 6746e19dfac4Smrg esac 6747e19dfac4Smrg fi 6748e19dfac4Smrg 6749e19dfac4Smrg if test -n "$old_archive_from_expsyms_cmds"; then 6750e19dfac4Smrg # figure out the soname 6751e19dfac4Smrg set dummy $library_names 6752e19dfac4Smrg shift 6753e19dfac4Smrg realname="$1" 6754e19dfac4Smrg shift 6755e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6756e19dfac4Smrg # use dlname if we got it. it's perfectly good, no? 6757e19dfac4Smrg if test -n "$dlname"; then 6758e19dfac4Smrg soname="$dlname" 6759e19dfac4Smrg elif test -n "$soname_spec"; then 6760e19dfac4Smrg # bleh windows 6761e19dfac4Smrg case $host in 6762e19dfac4Smrg *cygwin* | mingw* | *cegcc*) 6763e19dfac4Smrg func_arith $current - $age 6764e19dfac4Smrg major=$func_arith_result 6765e19dfac4Smrg versuffix="-$major" 6766e19dfac4Smrg ;; 6767e19dfac4Smrg esac 6768e19dfac4Smrg eval soname=\"$soname_spec\" 6769e19dfac4Smrg else 6770e19dfac4Smrg soname="$realname" 6771e19dfac4Smrg fi 6772e19dfac4Smrg 6773e19dfac4Smrg # Make a new name for the extract_expsyms_cmds to use 6774e19dfac4Smrg soroot="$soname" 6775e19dfac4Smrg func_basename "$soroot" 6776e19dfac4Smrg soname="$func_basename_result" 6777e19dfac4Smrg func_stripname 'lib' '.dll' "$soname" 6778e19dfac4Smrg newlib=libimp-$func_stripname_result.a 6779e19dfac4Smrg 6780e19dfac4Smrg # If the library has no export list, then create one now 6781e19dfac4Smrg if test -f "$output_objdir/$soname-def"; then : 6782e19dfac4Smrg else 6783e19dfac4Smrg func_verbose "extracting exported symbol list from \`$soname'" 6784e19dfac4Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785e19dfac4Smrg fi 6786e19dfac4Smrg 6787e19dfac4Smrg # Create $newlib 6788e19dfac4Smrg if test -f "$output_objdir/$newlib"; then :; else 6789e19dfac4Smrg func_verbose "generating import library for \`$soname'" 6790e19dfac4Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791e19dfac4Smrg fi 6792e19dfac4Smrg # make sure the library variables are pointing to the new library 6793e19dfac4Smrg dir=$output_objdir 6794e19dfac4Smrg linklib=$newlib 6795e19dfac4Smrg fi # test -n "$old_archive_from_expsyms_cmds" 6796e19dfac4Smrg 6797313a12fdSmrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798e19dfac4Smrg add_shlibpath= 6799e19dfac4Smrg add_dir= 6800e19dfac4Smrg add= 6801e19dfac4Smrg lib_linked=yes 6802e19dfac4Smrg case $hardcode_action in 6803e19dfac4Smrg immediate | unsupported) 6804e19dfac4Smrg if test "$hardcode_direct" = no; then 6805e19dfac4Smrg add="$dir/$linklib" 6806e19dfac4Smrg case $host in 6807e19dfac4Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808e19dfac4Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809e19dfac4Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810e19dfac4Smrg *-*-unixware7*) add_dir="-L$dir" ;; 6811e19dfac4Smrg *-*-darwin* ) 6812e19dfac4Smrg # if the lib is a (non-dlopened) module then we can not 6813e19dfac4Smrg # link against it, someone is ignoring the earlier warnings 6814e19dfac4Smrg if /usr/bin/file -L $add 2> /dev/null | 6815e19dfac4Smrg $GREP ": [^:]* bundle" >/dev/null ; then 6816e19dfac4Smrg if test "X$dlopenmodule" != "X$lib"; then 6817e19dfac4Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818e19dfac4Smrg if test -z "$old_library" ; then 6819313a12fdSmrg echo 6820313a12fdSmrg echo "*** And there doesn't seem to be a static archive available" 6821313a12fdSmrg echo "*** The link will probably fail, sorry" 6822e19dfac4Smrg else 6823e19dfac4Smrg add="$dir/$old_library" 6824e19dfac4Smrg fi 6825e19dfac4Smrg elif test -n "$old_library"; then 6826e19dfac4Smrg add="$dir/$old_library" 6827e19dfac4Smrg fi 6828e19dfac4Smrg fi 6829e19dfac4Smrg esac 6830e19dfac4Smrg elif test "$hardcode_minus_L" = no; then 6831e19dfac4Smrg case $host in 6832e19dfac4Smrg *-*-sunos*) add_shlibpath="$dir" ;; 6833e19dfac4Smrg esac 6834e19dfac4Smrg add_dir="-L$dir" 6835e19dfac4Smrg add="-l$name" 6836e19dfac4Smrg elif test "$hardcode_shlibpath_var" = no; then 6837e19dfac4Smrg add_shlibpath="$dir" 6838e19dfac4Smrg add="-l$name" 6839e19dfac4Smrg else 6840e19dfac4Smrg lib_linked=no 6841e19dfac4Smrg fi 6842e19dfac4Smrg ;; 6843e19dfac4Smrg relink) 6844e19dfac4Smrg if test "$hardcode_direct" = yes && 6845e19dfac4Smrg test "$hardcode_direct_absolute" = no; then 6846e19dfac4Smrg add="$dir/$linklib" 6847e19dfac4Smrg elif test "$hardcode_minus_L" = yes; then 6848313a12fdSmrg add_dir="-L$absdir" 6849e19dfac4Smrg # Try looking first in the location we're being installed to. 6850e19dfac4Smrg if test -n "$inst_prefix_dir"; then 6851e19dfac4Smrg case $libdir in 6852e19dfac4Smrg [\\/]*) 6853313a12fdSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 6854e19dfac4Smrg ;; 6855e19dfac4Smrg esac 6856e19dfac4Smrg fi 6857e19dfac4Smrg add="-l$name" 6858e19dfac4Smrg elif test "$hardcode_shlibpath_var" = yes; then 6859e19dfac4Smrg add_shlibpath="$dir" 6860e19dfac4Smrg add="-l$name" 6861e19dfac4Smrg else 6862e19dfac4Smrg lib_linked=no 6863e19dfac4Smrg fi 6864e19dfac4Smrg ;; 6865e19dfac4Smrg *) lib_linked=no ;; 6866e19dfac4Smrg esac 6867e19dfac4Smrg 6868e19dfac4Smrg if test "$lib_linked" != yes; then 6869e19dfac4Smrg func_fatal_configuration "unsupported hardcode properties" 6870e19dfac4Smrg fi 6871e19dfac4Smrg 6872e19dfac4Smrg if test -n "$add_shlibpath"; then 6873e19dfac4Smrg case :$compile_shlibpath: in 6874e19dfac4Smrg *":$add_shlibpath:"*) ;; 6875313a12fdSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876e19dfac4Smrg esac 6877e19dfac4Smrg fi 6878e19dfac4Smrg if test "$linkmode" = prog; then 6879e19dfac4Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880e19dfac4Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881e19dfac4Smrg else 6882e19dfac4Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883e19dfac4Smrg test -n "$add" && deplibs="$add $deplibs" 6884e19dfac4Smrg if test "$hardcode_direct" != yes && 6885e19dfac4Smrg test "$hardcode_minus_L" != yes && 6886e19dfac4Smrg test "$hardcode_shlibpath_var" = yes; then 6887e19dfac4Smrg case :$finalize_shlibpath: in 6888e19dfac4Smrg *":$libdir:"*) ;; 6889313a12fdSmrg *) func_append finalize_shlibpath "$libdir:" ;; 6890e19dfac4Smrg esac 6891e19dfac4Smrg fi 6892e19dfac4Smrg fi 6893e19dfac4Smrg fi 6894e19dfac4Smrg 6895313a12fdSmrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896e19dfac4Smrg add_shlibpath= 6897e19dfac4Smrg add_dir= 6898e19dfac4Smrg add= 6899e19dfac4Smrg # Finalize command for both is simple: just hardcode it. 6900e19dfac4Smrg if test "$hardcode_direct" = yes && 6901e19dfac4Smrg test "$hardcode_direct_absolute" = no; then 6902e19dfac4Smrg add="$libdir/$linklib" 6903e19dfac4Smrg elif test "$hardcode_minus_L" = yes; then 6904e19dfac4Smrg add_dir="-L$libdir" 6905e19dfac4Smrg add="-l$name" 6906e19dfac4Smrg elif test "$hardcode_shlibpath_var" = yes; then 6907e19dfac4Smrg case :$finalize_shlibpath: in 6908e19dfac4Smrg *":$libdir:"*) ;; 6909313a12fdSmrg *) func_append finalize_shlibpath "$libdir:" ;; 6910e19dfac4Smrg esac 6911e19dfac4Smrg add="-l$name" 6912e19dfac4Smrg elif test "$hardcode_automatic" = yes; then 6913e19dfac4Smrg if test -n "$inst_prefix_dir" && 6914e19dfac4Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915e19dfac4Smrg add="$inst_prefix_dir$libdir/$linklib" 6916e19dfac4Smrg else 6917e19dfac4Smrg add="$libdir/$linklib" 6918e19dfac4Smrg fi 6919e19dfac4Smrg else 6920e19dfac4Smrg # We cannot seem to hardcode it, guess we'll fake it. 6921e19dfac4Smrg add_dir="-L$libdir" 6922e19dfac4Smrg # Try looking first in the location we're being installed to. 6923e19dfac4Smrg if test -n "$inst_prefix_dir"; then 6924e19dfac4Smrg case $libdir in 6925e19dfac4Smrg [\\/]*) 6926313a12fdSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 6927e19dfac4Smrg ;; 6928e19dfac4Smrg esac 6929e19dfac4Smrg fi 6930e19dfac4Smrg add="-l$name" 6931e19dfac4Smrg fi 6932e19dfac4Smrg 6933e19dfac4Smrg if test "$linkmode" = prog; then 6934e19dfac4Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935e19dfac4Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936e19dfac4Smrg else 6937e19dfac4Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938e19dfac4Smrg test -n "$add" && deplibs="$add $deplibs" 6939e19dfac4Smrg fi 6940e19dfac4Smrg fi 6941e19dfac4Smrg elif test "$linkmode" = prog; then 6942e19dfac4Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6943e19dfac4Smrg # is not unsupported. This is valid on all known static and 6944e19dfac4Smrg # shared platforms. 6945e19dfac4Smrg if test "$hardcode_direct" != unsupported; then 6946e19dfac4Smrg test -n "$old_library" && linklib="$old_library" 6947e19dfac4Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 6948e19dfac4Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949e19dfac4Smrg else 6950e19dfac4Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6951e19dfac4Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952e19dfac4Smrg fi 6953e19dfac4Smrg elif test "$build_libtool_libs" = yes; then 6954e19dfac4Smrg # Not a shared library 6955e19dfac4Smrg if test "$deplibs_check_method" != pass_all; then 6956e19dfac4Smrg # We're trying link a shared library against a static one 6957e19dfac4Smrg # but the system doesn't support it. 6958e19dfac4Smrg 6959e19dfac4Smrg # Just print a warning and add the library to dependency_libs so 6960e19dfac4Smrg # that the program can be linked against the static library. 6961313a12fdSmrg echo 6962e19dfac4Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 6963313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 6964313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 6965313a12fdSmrg echo "*** shared version of the library, which you do not appear to have." 6966e19dfac4Smrg if test "$module" = yes; then 6967313a12fdSmrg echo "*** But as you try to build a module library, libtool will still create " 6968313a12fdSmrg echo "*** a static module, that should work as long as the dlopening application" 6969313a12fdSmrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970e19dfac4Smrg if test -z "$global_symbol_pipe"; then 6971313a12fdSmrg echo 6972313a12fdSmrg echo "*** However, this would only work if libtool was able to extract symbol" 6973313a12fdSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6974313a12fdSmrg echo "*** not find such a program. So, this module is probably useless." 6975313a12fdSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976e19dfac4Smrg fi 6977e19dfac4Smrg if test "$build_old_libs" = no; then 6978e19dfac4Smrg build_libtool_libs=module 6979e19dfac4Smrg build_old_libs=yes 6980e19dfac4Smrg else 6981e19dfac4Smrg build_libtool_libs=no 6982e19dfac4Smrg fi 6983e19dfac4Smrg fi 6984e19dfac4Smrg else 6985e19dfac4Smrg deplibs="$dir/$old_library $deplibs" 6986e19dfac4Smrg link_static=yes 6987e19dfac4Smrg fi 6988e19dfac4Smrg fi # link shared/static library? 6989e19dfac4Smrg 6990e19dfac4Smrg if test "$linkmode" = lib; then 6991e19dfac4Smrg if test -n "$dependency_libs" && 6992e19dfac4Smrg { test "$hardcode_into_libs" != yes || 6993e19dfac4Smrg test "$build_old_libs" = yes || 6994e19dfac4Smrg test "$link_static" = yes; }; then 6995e19dfac4Smrg # Extract -R from dependency_libs 6996e19dfac4Smrg temp_deplibs= 6997e19dfac4Smrg for libdir in $dependency_libs; do 6998e19dfac4Smrg case $libdir in 6999e19dfac4Smrg -R*) func_stripname '-R' '' "$libdir" 7000e19dfac4Smrg temp_xrpath=$func_stripname_result 7001e19dfac4Smrg case " $xrpath " in 7002e19dfac4Smrg *" $temp_xrpath "*) ;; 7003313a12fdSmrg *) func_append xrpath " $temp_xrpath";; 7004e19dfac4Smrg esac;; 7005313a12fdSmrg *) func_append temp_deplibs " $libdir";; 7006e19dfac4Smrg esac 7007e19dfac4Smrg done 7008e19dfac4Smrg dependency_libs="$temp_deplibs" 7009e19dfac4Smrg fi 7010e19dfac4Smrg 7011313a12fdSmrg func_append newlib_search_path " $absdir" 7012e19dfac4Smrg # Link against this library 7013e19dfac4Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014e19dfac4Smrg # ... and its dependency_libs 7015e19dfac4Smrg tmp_libs= 7016e19dfac4Smrg for deplib in $dependency_libs; do 7017e19dfac4Smrg newdependency_libs="$deplib $newdependency_libs" 7018313a12fdSmrg case $deplib in 7019313a12fdSmrg -L*) func_stripname '-L' '' "$deplib" 7020313a12fdSmrg func_resolve_sysroot "$func_stripname_result";; 7021313a12fdSmrg *) func_resolve_sysroot "$deplib" ;; 7022313a12fdSmrg esac 7023313a12fdSmrg if $opt_preserve_dup_deps ; then 7024e19dfac4Smrg case "$tmp_libs " in 7025313a12fdSmrg *" $func_resolve_sysroot_result "*) 7026313a12fdSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027e19dfac4Smrg esac 7028e19dfac4Smrg fi 7029313a12fdSmrg func_append tmp_libs " $func_resolve_sysroot_result" 7030e19dfac4Smrg done 7031e19dfac4Smrg 7032e19dfac4Smrg if test "$link_all_deplibs" != no; then 7033e19dfac4Smrg # Add the search paths of all dependency libraries 7034e19dfac4Smrg for deplib in $dependency_libs; do 703500084f2cSmrg path= 7036e19dfac4Smrg case $deplib in 7037e19dfac4Smrg -L*) path="$deplib" ;; 7038e19dfac4Smrg *.la) 7039313a12fdSmrg func_resolve_sysroot "$deplib" 7040313a12fdSmrg deplib=$func_resolve_sysroot_result 7041e19dfac4Smrg func_dirname "$deplib" "" "." 7042313a12fdSmrg dir=$func_dirname_result 7043e19dfac4Smrg # We need an absolute path. 7044e19dfac4Smrg case $dir in 7045e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046e19dfac4Smrg *) 7047e19dfac4Smrg absdir=`cd "$dir" && pwd` 7048e19dfac4Smrg if test -z "$absdir"; then 7049e19dfac4Smrg func_warning "cannot determine absolute directory name of \`$dir'" 7050e19dfac4Smrg absdir="$dir" 7051e19dfac4Smrg fi 7052e19dfac4Smrg ;; 7053e19dfac4Smrg esac 7054e19dfac4Smrg if $GREP "^installed=no" $deplib > /dev/null; then 7055e19dfac4Smrg case $host in 7056e19dfac4Smrg *-*-darwin*) 7057e19dfac4Smrg depdepl= 7058e19dfac4Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059e19dfac4Smrg if test -n "$deplibrary_names" ; then 7060e19dfac4Smrg for tmp in $deplibrary_names ; do 7061e19dfac4Smrg depdepl=$tmp 7062e19dfac4Smrg done 7063e19dfac4Smrg if test -f "$absdir/$objdir/$depdepl" ; then 7064e19dfac4Smrg depdepl="$absdir/$objdir/$depdepl" 7065e19dfac4Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066e19dfac4Smrg if test -z "$darwin_install_name"; then 7067e19dfac4Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068e19dfac4Smrg fi 7069313a12fdSmrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 7070313a12fdSmrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071e19dfac4Smrg path= 7072e19dfac4Smrg fi 7073e19dfac4Smrg fi 7074e19dfac4Smrg ;; 7075e19dfac4Smrg *) 7076e19dfac4Smrg path="-L$absdir/$objdir" 7077e19dfac4Smrg ;; 7078e19dfac4Smrg esac 7079e19dfac4Smrg else 7080e19dfac4Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081e19dfac4Smrg test -z "$libdir" && \ 7082e19dfac4Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7083e19dfac4Smrg test "$absdir" != "$libdir" && \ 7084e19dfac4Smrg func_warning "\`$deplib' seems to be moved" 7085e19dfac4Smrg 7086e19dfac4Smrg path="-L$absdir" 7087e19dfac4Smrg fi 7088e19dfac4Smrg ;; 7089e19dfac4Smrg esac 7090e19dfac4Smrg case " $deplibs " in 7091e19dfac4Smrg *" $path "*) ;; 7092e19dfac4Smrg *) deplibs="$path $deplibs" ;; 7093e19dfac4Smrg esac 7094e19dfac4Smrg done 7095e19dfac4Smrg fi # link_all_deplibs != no 7096e19dfac4Smrg fi # linkmode = lib 7097e19dfac4Smrg done # for deplib in $libs 7098e19dfac4Smrg if test "$pass" = link; then 7099e19dfac4Smrg if test "$linkmode" = "prog"; then 7100e19dfac4Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101e19dfac4Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102e19dfac4Smrg else 7103313a12fdSmrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104e19dfac4Smrg fi 7105e19dfac4Smrg fi 7106e19dfac4Smrg dependency_libs="$newdependency_libs" 7107e19dfac4Smrg if test "$pass" = dlpreopen; then 7108e19dfac4Smrg # Link the dlpreopened libraries before other libraries 7109e19dfac4Smrg for deplib in $save_deplibs; do 7110e19dfac4Smrg deplibs="$deplib $deplibs" 7111e19dfac4Smrg done 7112e19dfac4Smrg fi 7113e19dfac4Smrg if test "$pass" != dlopen; then 7114e19dfac4Smrg if test "$pass" != conv; then 7115e19dfac4Smrg # Make sure lib_search_path contains only unique directories. 7116e19dfac4Smrg lib_search_path= 7117e19dfac4Smrg for dir in $newlib_search_path; do 7118e19dfac4Smrg case "$lib_search_path " in 7119e19dfac4Smrg *" $dir "*) ;; 7120313a12fdSmrg *) func_append lib_search_path " $dir" ;; 7121e19dfac4Smrg esac 7122e19dfac4Smrg done 7123e19dfac4Smrg newlib_search_path= 7124e19dfac4Smrg fi 7125e19dfac4Smrg 7126e19dfac4Smrg if test "$linkmode,$pass" != "prog,link"; then 7127e19dfac4Smrg vars="deplibs" 7128e19dfac4Smrg else 7129e19dfac4Smrg vars="compile_deplibs finalize_deplibs" 7130e19dfac4Smrg fi 7131e19dfac4Smrg for var in $vars dependency_libs; do 7132e19dfac4Smrg # Add libraries to $var in reverse order 7133e19dfac4Smrg eval tmp_libs=\"\$$var\" 7134e19dfac4Smrg new_libs= 7135e19dfac4Smrg for deplib in $tmp_libs; do 7136e19dfac4Smrg # FIXME: Pedantically, this is the right thing to do, so 7137e19dfac4Smrg # that some nasty dependency loop isn't accidentally 7138e19dfac4Smrg # broken: 7139e19dfac4Smrg #new_libs="$deplib $new_libs" 7140e19dfac4Smrg # Pragmatically, this seems to cause very few problems in 7141e19dfac4Smrg # practice: 7142e19dfac4Smrg case $deplib in 7143e19dfac4Smrg -L*) new_libs="$deplib $new_libs" ;; 7144e19dfac4Smrg -R*) ;; 7145e19dfac4Smrg *) 7146e19dfac4Smrg # And here is the reason: when a library appears more 7147e19dfac4Smrg # than once as an explicit dependence of a library, or 7148e19dfac4Smrg # is implicitly linked in more than once by the 7149e19dfac4Smrg # compiler, it is considered special, and multiple 7150e19dfac4Smrg # occurrences thereof are not removed. Compare this 7151e19dfac4Smrg # with having the same library being listed as a 7152e19dfac4Smrg # dependency of multiple other libraries: in this case, 7153e19dfac4Smrg # we know (pedantically, we assume) the library does not 7154e19dfac4Smrg # need to be listed more than once, so we keep only the 7155e19dfac4Smrg # last copy. This is not always right, but it is rare 7156e19dfac4Smrg # enough that we require users that really mean to play 7157e19dfac4Smrg # such unportable linking tricks to link the library 7158e19dfac4Smrg # using -Wl,-lname, so that libtool does not consider it 7159e19dfac4Smrg # for duplicate removal. 7160e19dfac4Smrg case " $specialdeplibs " in 7161e19dfac4Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162e19dfac4Smrg *) 7163e19dfac4Smrg case " $new_libs " in 7164e19dfac4Smrg *" $deplib "*) ;; 7165e19dfac4Smrg *) new_libs="$deplib $new_libs" ;; 7166e19dfac4Smrg esac 7167e19dfac4Smrg ;; 7168e19dfac4Smrg esac 7169e19dfac4Smrg ;; 7170e19dfac4Smrg esac 7171e19dfac4Smrg done 7172e19dfac4Smrg tmp_libs= 7173e19dfac4Smrg for deplib in $new_libs; do 7174e19dfac4Smrg case $deplib in 7175e19dfac4Smrg -L*) 7176e19dfac4Smrg case " $tmp_libs " in 7177e19dfac4Smrg *" $deplib "*) ;; 7178313a12fdSmrg *) func_append tmp_libs " $deplib" ;; 7179e19dfac4Smrg esac 7180e19dfac4Smrg ;; 7181313a12fdSmrg *) func_append tmp_libs " $deplib" ;; 7182e19dfac4Smrg esac 7183e19dfac4Smrg done 7184e19dfac4Smrg eval $var=\"$tmp_libs\" 7185e19dfac4Smrg done # for var 7186e19dfac4Smrg fi 7187e19dfac4Smrg # Last step: remove runtime libs from dependency_libs 7188e19dfac4Smrg # (they stay in deplibs) 7189e19dfac4Smrg tmp_libs= 7190e19dfac4Smrg for i in $dependency_libs ; do 7191e19dfac4Smrg case " $predeps $postdeps $compiler_lib_search_path " in 7192e19dfac4Smrg *" $i "*) 7193e19dfac4Smrg i="" 7194e19dfac4Smrg ;; 7195e19dfac4Smrg esac 7196e19dfac4Smrg if test -n "$i" ; then 7197313a12fdSmrg func_append tmp_libs " $i" 7198e19dfac4Smrg fi 7199e19dfac4Smrg done 7200e19dfac4Smrg dependency_libs=$tmp_libs 7201e19dfac4Smrg done # for pass 7202e19dfac4Smrg if test "$linkmode" = prog; then 7203e19dfac4Smrg dlfiles="$newdlfiles" 7204e19dfac4Smrg fi 7205e19dfac4Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 7206e19dfac4Smrg dlprefiles="$newdlprefiles" 7207e19dfac4Smrg fi 7208e19dfac4Smrg 7209e19dfac4Smrg case $linkmode in 7210e19dfac4Smrg oldlib) 7211e19dfac4Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212e19dfac4Smrg func_warning "\`-dlopen' is ignored for archives" 7213e19dfac4Smrg fi 7214e19dfac4Smrg 7215e19dfac4Smrg case " $deplibs" in 7216e19dfac4Smrg *\ -l* | *\ -L*) 7217e19dfac4Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218e19dfac4Smrg esac 7219e19dfac4Smrg 7220e19dfac4Smrg test -n "$rpath" && \ 7221e19dfac4Smrg func_warning "\`-rpath' is ignored for archives" 7222e19dfac4Smrg 7223e19dfac4Smrg test -n "$xrpath" && \ 7224e19dfac4Smrg func_warning "\`-R' is ignored for archives" 7225e19dfac4Smrg 7226e19dfac4Smrg test -n "$vinfo" && \ 7227e19dfac4Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 7228e19dfac4Smrg 7229e19dfac4Smrg test -n "$release" && \ 7230e19dfac4Smrg func_warning "\`-release' is ignored for archives" 7231e19dfac4Smrg 7232e19dfac4Smrg test -n "$export_symbols$export_symbols_regex" && \ 7233e19dfac4Smrg func_warning "\`-export-symbols' is ignored for archives" 7234e19dfac4Smrg 7235e19dfac4Smrg # Now set the variables for building old libraries. 7236e19dfac4Smrg build_libtool_libs=no 7237e19dfac4Smrg oldlibs="$output" 7238313a12fdSmrg func_append objs "$old_deplibs" 7239e19dfac4Smrg ;; 7240e19dfac4Smrg 7241e19dfac4Smrg lib) 7242e19dfac4Smrg # Make sure we only generate libraries of the form `libNAME.la'. 7243e19dfac4Smrg case $outputname in 7244e19dfac4Smrg lib*) 7245e19dfac4Smrg func_stripname 'lib' '.la' "$outputname" 7246e19dfac4Smrg name=$func_stripname_result 7247e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 7248e19dfac4Smrg eval libname=\"$libname_spec\" 7249e19dfac4Smrg ;; 7250e19dfac4Smrg *) 7251e19dfac4Smrg test "$module" = no && \ 7252e19dfac4Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253e19dfac4Smrg 7254e19dfac4Smrg if test "$need_lib_prefix" != no; then 7255e19dfac4Smrg # Add the "lib" prefix for modules if required 7256e19dfac4Smrg func_stripname '' '.la' "$outputname" 7257e19dfac4Smrg name=$func_stripname_result 7258e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 7259e19dfac4Smrg eval libname=\"$libname_spec\" 7260e19dfac4Smrg else 7261e19dfac4Smrg func_stripname '' '.la' "$outputname" 7262e19dfac4Smrg libname=$func_stripname_result 7263e19dfac4Smrg fi 7264e19dfac4Smrg ;; 7265e19dfac4Smrg esac 7266e19dfac4Smrg 7267e19dfac4Smrg if test -n "$objs"; then 7268e19dfac4Smrg if test "$deplibs_check_method" != pass_all; then 7269e19dfac4Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270e19dfac4Smrg else 7271313a12fdSmrg echo 7272e19dfac4Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273e19dfac4Smrg $ECHO "*** objects $objs is not portable!" 7274313a12fdSmrg func_append libobjs " $objs" 7275e19dfac4Smrg fi 7276e19dfac4Smrg fi 7277e19dfac4Smrg 7278e19dfac4Smrg test "$dlself" != no && \ 7279e19dfac4Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7280e19dfac4Smrg 7281e19dfac4Smrg set dummy $rpath 7282e19dfac4Smrg shift 7283e19dfac4Smrg test "$#" -gt 1 && \ 7284e19dfac4Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7285e19dfac4Smrg 7286e19dfac4Smrg install_libdir="$1" 7287e19dfac4Smrg 7288e19dfac4Smrg oldlibs= 7289e19dfac4Smrg if test -z "$rpath"; then 7290e19dfac4Smrg if test "$build_libtool_libs" = yes; then 7291e19dfac4Smrg # Building a libtool convenience library. 7292e19dfac4Smrg # Some compilers have problems with a `.al' extension so 7293e19dfac4Smrg # convenience libraries should have the same extension an 7294e19dfac4Smrg # archive normally would. 7295e19dfac4Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296e19dfac4Smrg build_libtool_libs=convenience 7297e19dfac4Smrg build_old_libs=yes 7298e19dfac4Smrg fi 7299e19dfac4Smrg 7300e19dfac4Smrg test -n "$vinfo" && \ 7301e19dfac4Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302e19dfac4Smrg 7303e19dfac4Smrg test -n "$release" && \ 7304e19dfac4Smrg func_warning "\`-release' is ignored for convenience libraries" 7305e19dfac4Smrg else 7306e19dfac4Smrg 7307e19dfac4Smrg # Parse the version information argument. 7308e19dfac4Smrg save_ifs="$IFS"; IFS=':' 7309e19dfac4Smrg set dummy $vinfo 0 0 0 7310e19dfac4Smrg shift 7311e19dfac4Smrg IFS="$save_ifs" 7312e19dfac4Smrg 7313e19dfac4Smrg test -n "$7" && \ 7314e19dfac4Smrg func_fatal_help "too many parameters to \`-version-info'" 7315e19dfac4Smrg 7316e19dfac4Smrg # convert absolute version numbers to libtool ages 7317e19dfac4Smrg # this retains compatibility with .la files and attempts 7318e19dfac4Smrg # to make the code below a bit more comprehensible 7319e19dfac4Smrg 7320e19dfac4Smrg case $vinfo_number in 7321e19dfac4Smrg yes) 7322e19dfac4Smrg number_major="$1" 7323e19dfac4Smrg number_minor="$2" 7324e19dfac4Smrg number_revision="$3" 7325e19dfac4Smrg # 7326e19dfac4Smrg # There are really only two kinds -- those that 7327e19dfac4Smrg # use the current revision as the major version 7328e19dfac4Smrg # and those that subtract age and use age as 7329e19dfac4Smrg # a minor version. But, then there is irix 7330e19dfac4Smrg # which has an extra 1 added just for fun 7331e19dfac4Smrg # 7332e19dfac4Smrg case $version_type in 7333313a12fdSmrg # correct linux to gnu/linux during the next big refactor 7334e19dfac4Smrg darwin|linux|osf|windows|none) 7335e19dfac4Smrg func_arith $number_major + $number_minor 7336e19dfac4Smrg current=$func_arith_result 7337e19dfac4Smrg age="$number_minor" 7338e19dfac4Smrg revision="$number_revision" 7339e19dfac4Smrg ;; 7340313a12fdSmrg freebsd-aout|freebsd-elf|qnx|sunos) 7341e19dfac4Smrg current="$number_major" 7342e19dfac4Smrg revision="$number_minor" 7343e19dfac4Smrg age="0" 7344e19dfac4Smrg ;; 7345e19dfac4Smrg irix|nonstopux) 7346e19dfac4Smrg func_arith $number_major + $number_minor 7347e19dfac4Smrg current=$func_arith_result 7348e19dfac4Smrg age="$number_minor" 7349e19dfac4Smrg revision="$number_minor" 7350e19dfac4Smrg lt_irix_increment=no 7351e19dfac4Smrg ;; 7352e19dfac4Smrg esac 7353e19dfac4Smrg ;; 7354e19dfac4Smrg no) 7355e19dfac4Smrg current="$1" 7356e19dfac4Smrg revision="$2" 7357e19dfac4Smrg age="$3" 7358e19dfac4Smrg ;; 7359e19dfac4Smrg esac 7360e19dfac4Smrg 7361e19dfac4Smrg # Check that each of the things are valid numbers. 7362e19dfac4Smrg case $current in 7363e19dfac4Smrg 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]) ;; 7364e19dfac4Smrg *) 7365e19dfac4Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 7366e19dfac4Smrg func_fatal_error "\`$vinfo' is not valid version information" 7367e19dfac4Smrg ;; 7368e19dfac4Smrg esac 7369e19dfac4Smrg 7370e19dfac4Smrg case $revision in 7371e19dfac4Smrg 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]) ;; 7372e19dfac4Smrg *) 7373e19dfac4Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 7374e19dfac4Smrg func_fatal_error "\`$vinfo' is not valid version information" 7375e19dfac4Smrg ;; 7376e19dfac4Smrg esac 7377e19dfac4Smrg 7378e19dfac4Smrg case $age in 7379e19dfac4Smrg 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]) ;; 7380e19dfac4Smrg *) 7381e19dfac4Smrg func_error "AGE \`$age' must be a nonnegative integer" 7382e19dfac4Smrg func_fatal_error "\`$vinfo' is not valid version information" 7383e19dfac4Smrg ;; 7384e19dfac4Smrg esac 7385e19dfac4Smrg 7386e19dfac4Smrg if test "$age" -gt "$current"; then 7387e19dfac4Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388e19dfac4Smrg func_fatal_error "\`$vinfo' is not valid version information" 7389e19dfac4Smrg fi 7390e19dfac4Smrg 7391e19dfac4Smrg # Calculate the version variables. 7392e19dfac4Smrg major= 7393e19dfac4Smrg versuffix= 7394e19dfac4Smrg verstring= 7395e19dfac4Smrg case $version_type in 7396e19dfac4Smrg none) ;; 7397e19dfac4Smrg 7398e19dfac4Smrg darwin) 7399e19dfac4Smrg # Like Linux, but with the current version available in 7400e19dfac4Smrg # verstring for coding it into the library header 7401e19dfac4Smrg func_arith $current - $age 7402e19dfac4Smrg major=.$func_arith_result 7403e19dfac4Smrg versuffix="$major.$age.$revision" 7404e19dfac4Smrg # Darwin ld doesn't like 0 for these options... 7405e19dfac4Smrg func_arith $current + 1 7406e19dfac4Smrg minor_current=$func_arith_result 7407e19dfac4Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408e19dfac4Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409e19dfac4Smrg ;; 7410e19dfac4Smrg 7411e19dfac4Smrg freebsd-aout) 7412e19dfac4Smrg major=".$current" 7413e19dfac4Smrg versuffix=".$current.$revision"; 7414e19dfac4Smrg ;; 7415e19dfac4Smrg 7416e19dfac4Smrg freebsd-elf) 7417e19dfac4Smrg major=".$current" 7418e19dfac4Smrg versuffix=".$current" 7419e19dfac4Smrg ;; 7420e19dfac4Smrg 7421e19dfac4Smrg irix | nonstopux) 7422e19dfac4Smrg if test "X$lt_irix_increment" = "Xno"; then 7423e19dfac4Smrg func_arith $current - $age 7424e19dfac4Smrg else 7425e19dfac4Smrg func_arith $current - $age + 1 7426e19dfac4Smrg fi 7427e19dfac4Smrg major=$func_arith_result 7428e19dfac4Smrg 7429e19dfac4Smrg case $version_type in 7430e19dfac4Smrg nonstopux) verstring_prefix=nonstopux ;; 7431e19dfac4Smrg *) verstring_prefix=sgi ;; 7432e19dfac4Smrg esac 7433e19dfac4Smrg verstring="$verstring_prefix$major.$revision" 7434e19dfac4Smrg 7435e19dfac4Smrg # Add in all the interfaces that we are compatible with. 7436e19dfac4Smrg loop=$revision 7437e19dfac4Smrg while test "$loop" -ne 0; do 7438e19dfac4Smrg func_arith $revision - $loop 7439e19dfac4Smrg iface=$func_arith_result 7440e19dfac4Smrg func_arith $loop - 1 7441e19dfac4Smrg loop=$func_arith_result 7442e19dfac4Smrg verstring="$verstring_prefix$major.$iface:$verstring" 7443e19dfac4Smrg done 7444e19dfac4Smrg 7445e19dfac4Smrg # Before this point, $major must not contain `.'. 7446e19dfac4Smrg major=.$major 7447e19dfac4Smrg versuffix="$major.$revision" 7448e19dfac4Smrg ;; 7449e19dfac4Smrg 7450313a12fdSmrg linux) # correct to gnu/linux during the next big refactor 7451e19dfac4Smrg func_arith $current - $age 7452e19dfac4Smrg major=.$func_arith_result 7453e19dfac4Smrg versuffix="$major.$age.$revision" 7454e19dfac4Smrg ;; 7455e19dfac4Smrg 7456e19dfac4Smrg osf) 7457e19dfac4Smrg func_arith $current - $age 7458e19dfac4Smrg major=.$func_arith_result 7459e19dfac4Smrg versuffix=".$current.$age.$revision" 7460e19dfac4Smrg verstring="$current.$age.$revision" 7461e19dfac4Smrg 7462e19dfac4Smrg # Add in all the interfaces that we are compatible with. 7463e19dfac4Smrg loop=$age 7464e19dfac4Smrg while test "$loop" -ne 0; do 7465e19dfac4Smrg func_arith $current - $loop 7466e19dfac4Smrg iface=$func_arith_result 7467e19dfac4Smrg func_arith $loop - 1 7468e19dfac4Smrg loop=$func_arith_result 7469e19dfac4Smrg verstring="$verstring:${iface}.0" 7470e19dfac4Smrg done 7471e19dfac4Smrg 7472e19dfac4Smrg # Make executables depend on our current version. 7473313a12fdSmrg func_append verstring ":${current}.0" 7474e19dfac4Smrg ;; 7475e19dfac4Smrg 7476e19dfac4Smrg qnx) 7477e19dfac4Smrg major=".$current" 7478e19dfac4Smrg versuffix=".$current" 7479e19dfac4Smrg ;; 7480e19dfac4Smrg 7481e19dfac4Smrg sunos) 7482e19dfac4Smrg major=".$current" 7483e19dfac4Smrg versuffix=".$current.$revision" 7484e19dfac4Smrg ;; 7485e19dfac4Smrg 7486e19dfac4Smrg windows) 7487e19dfac4Smrg # Use '-' rather than '.', since we only want one 7488e19dfac4Smrg # extension on DOS 8.3 filesystems. 7489e19dfac4Smrg func_arith $current - $age 7490e19dfac4Smrg major=$func_arith_result 7491e19dfac4Smrg versuffix="-$major" 7492e19dfac4Smrg ;; 7493e19dfac4Smrg 7494e19dfac4Smrg *) 7495e19dfac4Smrg func_fatal_configuration "unknown library version type \`$version_type'" 7496e19dfac4Smrg ;; 7497e19dfac4Smrg esac 7498e19dfac4Smrg 7499e19dfac4Smrg # Clear the version info if we defaulted, and they specified a release. 7500e19dfac4Smrg if test -z "$vinfo" && test -n "$release"; then 7501e19dfac4Smrg major= 7502e19dfac4Smrg case $version_type in 7503e19dfac4Smrg darwin) 7504e19dfac4Smrg # we can't check for "0.0" in archive_cmds due to quoting 7505e19dfac4Smrg # problems, so we reset it completely 7506e19dfac4Smrg verstring= 7507e19dfac4Smrg ;; 7508e19dfac4Smrg *) 7509e19dfac4Smrg verstring="0.0" 7510e19dfac4Smrg ;; 7511e19dfac4Smrg esac 7512e19dfac4Smrg if test "$need_version" = no; then 7513e19dfac4Smrg versuffix= 7514e19dfac4Smrg else 7515e19dfac4Smrg versuffix=".0.0" 7516e19dfac4Smrg fi 7517e19dfac4Smrg fi 7518e19dfac4Smrg 7519e19dfac4Smrg # Remove version info from name if versioning should be avoided 7520e19dfac4Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 7521e19dfac4Smrg major= 7522e19dfac4Smrg versuffix= 7523e19dfac4Smrg verstring="" 7524e19dfac4Smrg fi 7525e19dfac4Smrg 7526e19dfac4Smrg # Check to see if the archive will have undefined symbols. 7527e19dfac4Smrg if test "$allow_undefined" = yes; then 7528e19dfac4Smrg if test "$allow_undefined_flag" = unsupported; then 7529e19dfac4Smrg func_warning "undefined symbols not allowed in $host shared libraries" 7530e19dfac4Smrg build_libtool_libs=no 7531e19dfac4Smrg build_old_libs=yes 7532e19dfac4Smrg fi 7533e19dfac4Smrg else 7534e19dfac4Smrg # Don't allow undefined symbols. 7535e19dfac4Smrg allow_undefined_flag="$no_undefined_flag" 7536e19dfac4Smrg fi 7537e19dfac4Smrg 7538e19dfac4Smrg fi 7539e19dfac4Smrg 7540e19dfac4Smrg func_generate_dlsyms "$libname" "$libname" "yes" 7541313a12fdSmrg func_append libobjs " $symfileobj" 7542e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 7543e19dfac4Smrg 7544313a12fdSmrg if test "$opt_mode" != relink; then 7545e19dfac4Smrg # Remove our outputs, but don't remove object files since they 7546e19dfac4Smrg # may have been created when compiling PIC objects. 7547e19dfac4Smrg removelist= 7548e19dfac4Smrg tempremovelist=`$ECHO "$output_objdir/*"` 7549e19dfac4Smrg for p in $tempremovelist; do 7550e19dfac4Smrg case $p in 7551e19dfac4Smrg *.$objext | *.gcno) 7552e19dfac4Smrg ;; 7553e19dfac4Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554e19dfac4Smrg if test "X$precious_files_regex" != "X"; then 7555e19dfac4Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556e19dfac4Smrg then 7557e19dfac4Smrg continue 7558e19dfac4Smrg fi 7559e19dfac4Smrg fi 7560313a12fdSmrg func_append removelist " $p" 7561e19dfac4Smrg ;; 7562e19dfac4Smrg *) ;; 7563e19dfac4Smrg esac 7564e19dfac4Smrg done 7565e19dfac4Smrg test -n "$removelist" && \ 7566e19dfac4Smrg func_show_eval "${RM}r \$removelist" 7567e19dfac4Smrg fi 7568e19dfac4Smrg 7569e19dfac4Smrg # Now set the variables for building old libraries. 7570e19dfac4Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7571313a12fdSmrg func_append oldlibs " $output_objdir/$libname.$libext" 7572e19dfac4Smrg 7573e19dfac4Smrg # Transform .lo files to .o files. 7574313a12fdSmrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575e19dfac4Smrg fi 7576e19dfac4Smrg 7577e19dfac4Smrg # Eliminate all temporary directories. 7578e19dfac4Smrg #for path in $notinst_path; do 7579313a12fdSmrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7580313a12fdSmrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7581313a12fdSmrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582e19dfac4Smrg #done 7583e19dfac4Smrg 7584e19dfac4Smrg if test -n "$xrpath"; then 7585e19dfac4Smrg # If the user specified any rpath flags, then add them. 7586e19dfac4Smrg temp_xrpath= 7587e19dfac4Smrg for libdir in $xrpath; do 7588313a12fdSmrg func_replace_sysroot "$libdir" 7589313a12fdSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7590e19dfac4Smrg case "$finalize_rpath " in 7591e19dfac4Smrg *" $libdir "*) ;; 7592313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 7593e19dfac4Smrg esac 7594e19dfac4Smrg done 7595e19dfac4Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596e19dfac4Smrg dependency_libs="$temp_xrpath $dependency_libs" 7597e19dfac4Smrg fi 7598e19dfac4Smrg fi 7599e19dfac4Smrg 7600e19dfac4Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 7601e19dfac4Smrg old_dlfiles="$dlfiles" 7602e19dfac4Smrg dlfiles= 7603e19dfac4Smrg for lib in $old_dlfiles; do 7604e19dfac4Smrg case " $dlprefiles $dlfiles " in 7605e19dfac4Smrg *" $lib "*) ;; 7606313a12fdSmrg *) func_append dlfiles " $lib" ;; 7607e19dfac4Smrg esac 7608e19dfac4Smrg done 7609e19dfac4Smrg 7610e19dfac4Smrg # Make sure dlprefiles contains only unique files 7611e19dfac4Smrg old_dlprefiles="$dlprefiles" 7612e19dfac4Smrg dlprefiles= 7613e19dfac4Smrg for lib in $old_dlprefiles; do 7614e19dfac4Smrg case "$dlprefiles " in 7615e19dfac4Smrg *" $lib "*) ;; 7616313a12fdSmrg *) func_append dlprefiles " $lib" ;; 7617e19dfac4Smrg esac 7618e19dfac4Smrg done 7619e19dfac4Smrg 7620e19dfac4Smrg if test "$build_libtool_libs" = yes; then 7621e19dfac4Smrg if test -n "$rpath"; then 7622e19dfac4Smrg case $host in 7623313a12fdSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624e19dfac4Smrg # these systems don't actually have a c library (as such)! 7625e19dfac4Smrg ;; 7626e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7627e19dfac4Smrg # Rhapsody C library is in the System framework 7628313a12fdSmrg func_append deplibs " System.ltframework" 7629e19dfac4Smrg ;; 7630e19dfac4Smrg *-*-netbsd*) 7631e19dfac4Smrg # Don't link with libc until the a.out ld.so is fixed. 7632e19dfac4Smrg ;; 7633e19dfac4Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634e19dfac4Smrg # Do not include libc due to us having libc/libc_r. 7635e19dfac4Smrg ;; 7636e19dfac4Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7637e19dfac4Smrg # Causes problems with __ctype 7638e19dfac4Smrg ;; 7639e19dfac4Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640e19dfac4Smrg # Compiler inserts libc in the correct place for threads to work 7641e19dfac4Smrg ;; 7642e19dfac4Smrg *) 7643e19dfac4Smrg # Add libc to deplibs on all other systems if necessary. 7644e19dfac4Smrg if test "$build_libtool_need_lc" = "yes"; then 7645313a12fdSmrg func_append deplibs " -lc" 7646e19dfac4Smrg fi 7647e19dfac4Smrg ;; 7648e19dfac4Smrg esac 7649e19dfac4Smrg fi 7650e19dfac4Smrg 7651e19dfac4Smrg # Transform deplibs into only deplibs that can be linked in shared. 7652e19dfac4Smrg name_save=$name 7653e19dfac4Smrg libname_save=$libname 7654e19dfac4Smrg release_save=$release 7655e19dfac4Smrg versuffix_save=$versuffix 7656e19dfac4Smrg major_save=$major 7657e19dfac4Smrg # I'm not sure if I'm treating the release correctly. I think 7658e19dfac4Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 7659e19dfac4Smrg # add it in twice. Is that correct? 7660e19dfac4Smrg release="" 7661e19dfac4Smrg versuffix="" 7662e19dfac4Smrg major="" 7663e19dfac4Smrg newdeplibs= 7664e19dfac4Smrg droppeddeps=no 7665e19dfac4Smrg case $deplibs_check_method in 7666e19dfac4Smrg pass_all) 7667e19dfac4Smrg # Don't check for shared/static. Everything works. 7668e19dfac4Smrg # This might be a little naive. We might want to check 7669e19dfac4Smrg # whether the library exists or not. But this is on 7670e19dfac4Smrg # osf3 & osf4 and I'm not really sure... Just 7671e19dfac4Smrg # implementing what was already the behavior. 7672e19dfac4Smrg newdeplibs=$deplibs 7673e19dfac4Smrg ;; 7674e19dfac4Smrg test_compile) 7675e19dfac4Smrg # This code stresses the "libraries are programs" paradigm to its 7676e19dfac4Smrg # limits. Maybe even breaks it. We compile a program, linking it 7677e19dfac4Smrg # against the deplibs as a proxy for the library. Then we can check 7678e19dfac4Smrg # whether they linked in statically or dynamically with ldd. 7679e19dfac4Smrg $opt_dry_run || $RM conftest.c 7680e19dfac4Smrg cat > conftest.c <<EOF 7681e19dfac4Smrg int main() { return 0; } 7682e19dfac4SmrgEOF 7683e19dfac4Smrg $opt_dry_run || $RM conftest 7684e19dfac4Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685e19dfac4Smrg ldd_output=`ldd conftest` 7686e19dfac4Smrg for i in $deplibs; do 7687e19dfac4Smrg case $i in 7688e19dfac4Smrg -l*) 7689e19dfac4Smrg func_stripname -l '' "$i" 7690e19dfac4Smrg name=$func_stripname_result 7691e19dfac4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692e19dfac4Smrg case " $predeps $postdeps " in 7693e19dfac4Smrg *" $i "*) 7694313a12fdSmrg func_append newdeplibs " $i" 7695e19dfac4Smrg i="" 7696e19dfac4Smrg ;; 7697e19dfac4Smrg esac 7698e19dfac4Smrg fi 7699e19dfac4Smrg if test -n "$i" ; then 7700e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7701e19dfac4Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702e19dfac4Smrg set dummy $deplib_matches; shift 7703e19dfac4Smrg deplib_match=$1 7704e19dfac4Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7705313a12fdSmrg func_append newdeplibs " $i" 7706e19dfac4Smrg else 7707e19dfac4Smrg droppeddeps=yes 7708313a12fdSmrg echo 7709e19dfac4Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7710313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 7711313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 7712313a12fdSmrg echo "*** shared version of the library, which I believe you do not have" 7713313a12fdSmrg echo "*** because a test_compile did reveal that the linker did not use it for" 7714313a12fdSmrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715e19dfac4Smrg fi 7716e19dfac4Smrg fi 7717e19dfac4Smrg ;; 7718e19dfac4Smrg *) 7719313a12fdSmrg func_append newdeplibs " $i" 7720e19dfac4Smrg ;; 7721e19dfac4Smrg esac 7722e19dfac4Smrg done 7723e19dfac4Smrg else 7724e19dfac4Smrg # Error occurred in the first compile. Let's try to salvage 7725e19dfac4Smrg # the situation: Compile a separate program for each library. 7726e19dfac4Smrg for i in $deplibs; do 7727e19dfac4Smrg case $i in 7728e19dfac4Smrg -l*) 7729e19dfac4Smrg func_stripname -l '' "$i" 7730e19dfac4Smrg name=$func_stripname_result 7731e19dfac4Smrg $opt_dry_run || $RM conftest 7732e19dfac4Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733e19dfac4Smrg ldd_output=`ldd conftest` 7734e19dfac4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735e19dfac4Smrg case " $predeps $postdeps " in 7736e19dfac4Smrg *" $i "*) 7737313a12fdSmrg func_append newdeplibs " $i" 7738e19dfac4Smrg i="" 7739e19dfac4Smrg ;; 7740e19dfac4Smrg esac 7741e19dfac4Smrg fi 7742e19dfac4Smrg if test -n "$i" ; then 7743e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7744e19dfac4Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745e19dfac4Smrg set dummy $deplib_matches; shift 7746e19dfac4Smrg deplib_match=$1 7747e19dfac4Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7748313a12fdSmrg func_append newdeplibs " $i" 7749e19dfac4Smrg else 7750e19dfac4Smrg droppeddeps=yes 7751313a12fdSmrg echo 7752e19dfac4Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7753313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 7754313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 7755313a12fdSmrg echo "*** shared version of the library, which you do not appear to have" 7756313a12fdSmrg echo "*** because a test_compile did reveal that the linker did not use this one" 7757313a12fdSmrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758e19dfac4Smrg fi 7759e19dfac4Smrg fi 7760e19dfac4Smrg else 7761e19dfac4Smrg droppeddeps=yes 7762313a12fdSmrg echo 7763e19dfac4Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7764313a12fdSmrg echo "*** make it link in! You will probably need to install it or some" 7765313a12fdSmrg echo "*** library that it depends on before this library will be fully" 7766313a12fdSmrg echo "*** functional. Installing it before continuing would be even better." 7767e19dfac4Smrg fi 7768e19dfac4Smrg ;; 7769e19dfac4Smrg *) 7770313a12fdSmrg func_append newdeplibs " $i" 7771e19dfac4Smrg ;; 7772e19dfac4Smrg esac 7773e19dfac4Smrg done 7774e19dfac4Smrg fi 7775e19dfac4Smrg ;; 7776e19dfac4Smrg file_magic*) 7777e19dfac4Smrg set dummy $deplibs_check_method; shift 7778e19dfac4Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779e19dfac4Smrg for a_deplib in $deplibs; do 7780e19dfac4Smrg case $a_deplib in 7781e19dfac4Smrg -l*) 7782e19dfac4Smrg func_stripname -l '' "$a_deplib" 7783e19dfac4Smrg name=$func_stripname_result 7784e19dfac4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785e19dfac4Smrg case " $predeps $postdeps " in 7786e19dfac4Smrg *" $a_deplib "*) 7787313a12fdSmrg func_append newdeplibs " $a_deplib" 7788e19dfac4Smrg a_deplib="" 7789e19dfac4Smrg ;; 7790e19dfac4Smrg esac 7791e19dfac4Smrg fi 7792e19dfac4Smrg if test -n "$a_deplib" ; then 7793e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7794313a12fdSmrg if test -n "$file_magic_glob"; then 7795313a12fdSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7796313a12fdSmrg else 7797313a12fdSmrg libnameglob=$libname 7798313a12fdSmrg fi 7799313a12fdSmrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800e19dfac4Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7801313a12fdSmrg if test "$want_nocaseglob" = yes; then 7802313a12fdSmrg shopt -s nocaseglob 7803313a12fdSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7804313a12fdSmrg $nocaseglob 7805313a12fdSmrg else 7806313a12fdSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7807313a12fdSmrg fi 7808e19dfac4Smrg for potent_lib in $potential_libs; do 7809e19dfac4Smrg # Follow soft links. 7810e19dfac4Smrg if ls -lLd "$potent_lib" 2>/dev/null | 7811e19dfac4Smrg $GREP " -> " >/dev/null; then 7812e19dfac4Smrg continue 7813e19dfac4Smrg fi 7814e19dfac4Smrg # The statement above tries to avoid entering an 7815e19dfac4Smrg # endless loop below, in case of cyclic links. 7816e19dfac4Smrg # We might still enter an endless loop, since a link 7817e19dfac4Smrg # loop can be closed while we follow links, 7818e19dfac4Smrg # but so what? 7819e19dfac4Smrg potlib="$potent_lib" 7820e19dfac4Smrg while test -h "$potlib" 2>/dev/null; do 7821e19dfac4Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822e19dfac4Smrg case $potliblink in 7823e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 7824313a12fdSmrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825e19dfac4Smrg esac 7826e19dfac4Smrg done 7827e19dfac4Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828e19dfac4Smrg $SED -e 10q | 7829e19dfac4Smrg $EGREP "$file_magic_regex" > /dev/null; then 7830313a12fdSmrg func_append newdeplibs " $a_deplib" 7831e19dfac4Smrg a_deplib="" 7832e19dfac4Smrg break 2 7833e19dfac4Smrg fi 7834e19dfac4Smrg done 7835e19dfac4Smrg done 7836e19dfac4Smrg fi 7837e19dfac4Smrg if test -n "$a_deplib" ; then 7838e19dfac4Smrg droppeddeps=yes 7839313a12fdSmrg echo 7840e19dfac4Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7841313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 7842313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 7843313a12fdSmrg echo "*** shared version of the library, which you do not appear to have" 7844313a12fdSmrg echo "*** because I did check the linker path looking for a file starting" 7845e19dfac4Smrg if test -z "$potlib" ; then 7846e19dfac4Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847e19dfac4Smrg else 7848e19dfac4Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7849e19dfac4Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 7850e19dfac4Smrg fi 7851e19dfac4Smrg fi 7852e19dfac4Smrg ;; 7853e19dfac4Smrg *) 7854e19dfac4Smrg # Add a -L argument. 7855313a12fdSmrg func_append newdeplibs " $a_deplib" 7856e19dfac4Smrg ;; 7857e19dfac4Smrg esac 7858e19dfac4Smrg done # Gone through all deplibs. 7859e19dfac4Smrg ;; 7860e19dfac4Smrg match_pattern*) 7861e19dfac4Smrg set dummy $deplibs_check_method; shift 7862e19dfac4Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863e19dfac4Smrg for a_deplib in $deplibs; do 7864e19dfac4Smrg case $a_deplib in 7865e19dfac4Smrg -l*) 7866e19dfac4Smrg func_stripname -l '' "$a_deplib" 7867e19dfac4Smrg name=$func_stripname_result 7868e19dfac4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869e19dfac4Smrg case " $predeps $postdeps " in 7870e19dfac4Smrg *" $a_deplib "*) 7871313a12fdSmrg func_append newdeplibs " $a_deplib" 7872e19dfac4Smrg a_deplib="" 7873e19dfac4Smrg ;; 7874e19dfac4Smrg esac 7875e19dfac4Smrg fi 7876e19dfac4Smrg if test -n "$a_deplib" ; then 7877e19dfac4Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7878e19dfac4Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879e19dfac4Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880e19dfac4Smrg for potent_lib in $potential_libs; do 7881e19dfac4Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 7882313a12fdSmrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883e19dfac4Smrg $EGREP "$match_pattern_regex" > /dev/null; then 7884313a12fdSmrg func_append newdeplibs " $a_deplib" 7885e19dfac4Smrg a_deplib="" 7886e19dfac4Smrg break 2 7887e19dfac4Smrg fi 7888e19dfac4Smrg done 7889e19dfac4Smrg done 7890e19dfac4Smrg fi 7891e19dfac4Smrg if test -n "$a_deplib" ; then 7892e19dfac4Smrg droppeddeps=yes 7893313a12fdSmrg echo 7894e19dfac4Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7895313a12fdSmrg echo "*** I have the capability to make that library automatically link in when" 7896313a12fdSmrg echo "*** you link to this library. But I can only do this if you have a" 7897313a12fdSmrg echo "*** shared version of the library, which you do not appear to have" 7898313a12fdSmrg echo "*** because I did check the linker path looking for a file starting" 7899e19dfac4Smrg if test -z "$potlib" ; then 7900e19dfac4Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901e19dfac4Smrg else 7902e19dfac4Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7903e19dfac4Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904e19dfac4Smrg fi 7905e19dfac4Smrg fi 7906e19dfac4Smrg ;; 7907e19dfac4Smrg *) 7908e19dfac4Smrg # Add a -L argument. 7909313a12fdSmrg func_append newdeplibs " $a_deplib" 7910e19dfac4Smrg ;; 7911e19dfac4Smrg esac 7912e19dfac4Smrg done # Gone through all deplibs. 7913e19dfac4Smrg ;; 7914e19dfac4Smrg none | unknown | *) 7915e19dfac4Smrg newdeplibs="" 7916313a12fdSmrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917e19dfac4Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918e19dfac4Smrg for i in $predeps $postdeps ; do 7919e19dfac4Smrg # can't use Xsed below, because $i might contain '/' 7920313a12fdSmrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921e19dfac4Smrg done 7922e19dfac4Smrg fi 7923313a12fdSmrg case $tmp_deplibs in 7924313a12fdSmrg *[!\ \ ]*) 7925313a12fdSmrg echo 7926e19dfac4Smrg if test "X$deplibs_check_method" = "Xnone"; then 7927313a12fdSmrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7928e19dfac4Smrg else 7929313a12fdSmrg echo "*** Warning: inter-library dependencies are not known to be supported." 7930e19dfac4Smrg fi 7931313a12fdSmrg echo "*** All declared inter-library dependencies are being dropped." 7932e19dfac4Smrg droppeddeps=yes 7933313a12fdSmrg ;; 7934313a12fdSmrg esac 7935e19dfac4Smrg ;; 7936e19dfac4Smrg esac 7937e19dfac4Smrg versuffix=$versuffix_save 7938e19dfac4Smrg major=$major_save 7939e19dfac4Smrg release=$release_save 7940e19dfac4Smrg libname=$libname_save 7941e19dfac4Smrg name=$name_save 7942e19dfac4Smrg 7943e19dfac4Smrg case $host in 7944e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7945e19dfac4Smrg # On Rhapsody replace the C library with the System framework 7946313a12fdSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947e19dfac4Smrg ;; 7948e19dfac4Smrg esac 7949e19dfac4Smrg 7950e19dfac4Smrg if test "$droppeddeps" = yes; then 7951e19dfac4Smrg if test "$module" = yes; then 7952313a12fdSmrg echo 7953313a12fdSmrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7954e19dfac4Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7955313a12fdSmrg echo "*** a static module, that should work as long as the dlopening" 7956313a12fdSmrg echo "*** application is linked with the -dlopen flag." 7957e19dfac4Smrg if test -z "$global_symbol_pipe"; then 7958313a12fdSmrg echo 7959313a12fdSmrg echo "*** However, this would only work if libtool was able to extract symbol" 7960313a12fdSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7961313a12fdSmrg echo "*** not find such a program. So, this module is probably useless." 7962313a12fdSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963e19dfac4Smrg fi 7964e19dfac4Smrg if test "$build_old_libs" = no; then 7965e19dfac4Smrg oldlibs="$output_objdir/$libname.$libext" 7966e19dfac4Smrg build_libtool_libs=module 7967e19dfac4Smrg build_old_libs=yes 7968e19dfac4Smrg else 7969e19dfac4Smrg build_libtool_libs=no 7970e19dfac4Smrg fi 7971e19dfac4Smrg else 7972313a12fdSmrg echo "*** The inter-library dependencies that have been dropped here will be" 7973313a12fdSmrg echo "*** automatically added whenever a program is linked with this library" 7974313a12fdSmrg echo "*** or is declared to -dlopen it." 7975e19dfac4Smrg 7976e19dfac4Smrg if test "$allow_undefined" = no; then 7977313a12fdSmrg echo 7978313a12fdSmrg echo "*** Since this library must not contain undefined symbols," 7979313a12fdSmrg echo "*** because either the platform does not support them or" 7980313a12fdSmrg echo "*** it was explicitly requested with -no-undefined," 7981313a12fdSmrg echo "*** libtool will only create a static version of it." 7982e19dfac4Smrg if test "$build_old_libs" = no; then 7983e19dfac4Smrg oldlibs="$output_objdir/$libname.$libext" 7984e19dfac4Smrg build_libtool_libs=module 7985e19dfac4Smrg build_old_libs=yes 7986e19dfac4Smrg else 7987e19dfac4Smrg build_libtool_libs=no 7988e19dfac4Smrg fi 7989e19dfac4Smrg fi 7990e19dfac4Smrg fi 7991e19dfac4Smrg fi 7992e19dfac4Smrg # Done checking deplibs! 7993e19dfac4Smrg deplibs=$newdeplibs 7994e19dfac4Smrg fi 7995e19dfac4Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996e19dfac4Smrg case $host in 7997e19dfac4Smrg *-*-darwin*) 7998313a12fdSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7999313a12fdSmrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8000313a12fdSmrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001e19dfac4Smrg ;; 8002e19dfac4Smrg esac 8003e19dfac4Smrg 8004e19dfac4Smrg # move library search paths that coincide with paths to not yet 8005e19dfac4Smrg # installed libraries to the beginning of the library search list 8006e19dfac4Smrg new_libs= 8007e19dfac4Smrg for path in $notinst_path; do 8008e19dfac4Smrg case " $new_libs " in 8009e19dfac4Smrg *" -L$path/$objdir "*) ;; 8010e19dfac4Smrg *) 8011e19dfac4Smrg case " $deplibs " in 8012e19dfac4Smrg *" -L$path/$objdir "*) 8013313a12fdSmrg func_append new_libs " -L$path/$objdir" ;; 8014e19dfac4Smrg esac 8015e19dfac4Smrg ;; 8016e19dfac4Smrg esac 8017e19dfac4Smrg done 8018e19dfac4Smrg for deplib in $deplibs; do 8019e19dfac4Smrg case $deplib in 8020e19dfac4Smrg -L*) 8021e19dfac4Smrg case " $new_libs " in 8022e19dfac4Smrg *" $deplib "*) ;; 8023313a12fdSmrg *) func_append new_libs " $deplib" ;; 8024e19dfac4Smrg esac 8025e19dfac4Smrg ;; 8026313a12fdSmrg *) func_append new_libs " $deplib" ;; 8027e19dfac4Smrg esac 8028e19dfac4Smrg done 8029e19dfac4Smrg deplibs="$new_libs" 8030e19dfac4Smrg 8031e19dfac4Smrg # All the library-specific variables (install_libdir is set above). 8032e19dfac4Smrg library_names= 8033e19dfac4Smrg old_library= 8034e19dfac4Smrg dlname= 8035e19dfac4Smrg 8036e19dfac4Smrg # Test again, we may have decided not to build it any more 8037e19dfac4Smrg if test "$build_libtool_libs" = yes; then 8038313a12fdSmrg # Remove ${wl} instances when linking with ld. 8039313a12fdSmrg # FIXME: should test the right _cmds variable. 8040313a12fdSmrg case $archive_cmds in 8041313a12fdSmrg *\$LD\ *) wl= ;; 8042313a12fdSmrg esac 8043e19dfac4Smrg if test "$hardcode_into_libs" = yes; then 8044e19dfac4Smrg # Hardcode the library paths 8045e19dfac4Smrg hardcode_libdirs= 8046e19dfac4Smrg dep_rpath= 8047e19dfac4Smrg rpath="$finalize_rpath" 8048313a12fdSmrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049e19dfac4Smrg for libdir in $rpath; do 8050e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 8051e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 8052313a12fdSmrg func_replace_sysroot "$libdir" 8053313a12fdSmrg libdir=$func_replace_sysroot_result 8054e19dfac4Smrg if test -z "$hardcode_libdirs"; then 8055e19dfac4Smrg hardcode_libdirs="$libdir" 8056e19dfac4Smrg else 8057e19dfac4Smrg # Just accumulate the unique libdirs. 8058e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060e19dfac4Smrg ;; 8061e19dfac4Smrg *) 8062313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063e19dfac4Smrg ;; 8064e19dfac4Smrg esac 8065e19dfac4Smrg fi 8066e19dfac4Smrg else 8067e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8068313a12fdSmrg func_append dep_rpath " $flag" 8069e19dfac4Smrg fi 8070e19dfac4Smrg elif test -n "$runpath_var"; then 8071e19dfac4Smrg case "$perm_rpath " in 8072e19dfac4Smrg *" $libdir "*) ;; 8073313a12fdSmrg *) func_append perm_rpath " $libdir" ;; 8074e19dfac4Smrg esac 8075e19dfac4Smrg fi 8076e19dfac4Smrg done 8077e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 8078e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 8079e19dfac4Smrg test -n "$hardcode_libdirs"; then 8080e19dfac4Smrg libdir="$hardcode_libdirs" 8081313a12fdSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082e19dfac4Smrg fi 8083e19dfac4Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084e19dfac4Smrg # We should set the runpath_var. 8085e19dfac4Smrg rpath= 8086e19dfac4Smrg for dir in $perm_rpath; do 8087313a12fdSmrg func_append rpath "$dir:" 8088e19dfac4Smrg done 8089e19dfac4Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090e19dfac4Smrg fi 8091e19dfac4Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092e19dfac4Smrg fi 809327702724Smrg 8094e19dfac4Smrg shlibpath="$finalize_shlibpath" 8095313a12fdSmrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096e19dfac4Smrg if test -n "$shlibpath"; then 8097e19dfac4Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098e19dfac4Smrg fi 809927702724Smrg 8100e19dfac4Smrg # Get the real and link names of the library. 8101e19dfac4Smrg eval shared_ext=\"$shrext_cmds\" 8102e19dfac4Smrg eval library_names=\"$library_names_spec\" 8103e19dfac4Smrg set dummy $library_names 8104e19dfac4Smrg shift 8105e19dfac4Smrg realname="$1" 8106e19dfac4Smrg shift 810727702724Smrg 8108e19dfac4Smrg if test -n "$soname_spec"; then 8109e19dfac4Smrg eval soname=\"$soname_spec\" 8110e19dfac4Smrg else 8111e19dfac4Smrg soname="$realname" 8112e19dfac4Smrg fi 8113e19dfac4Smrg if test -z "$dlname"; then 8114e19dfac4Smrg dlname=$soname 8115e19dfac4Smrg fi 811627702724Smrg 8117e19dfac4Smrg lib="$output_objdir/$realname" 8118e19dfac4Smrg linknames= 8119e19dfac4Smrg for link 8120e19dfac4Smrg do 8121313a12fdSmrg func_append linknames " $link" 8122e19dfac4Smrg done 812327702724Smrg 8124e19dfac4Smrg # Use standard objects if they are pic 8125313a12fdSmrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 812727702724Smrg 8128e19dfac4Smrg delfiles= 8129e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130e19dfac4Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131e19dfac4Smrg export_symbols="$output_objdir/$libname.uexp" 8132313a12fdSmrg func_append delfiles " $export_symbols" 8133e19dfac4Smrg fi 813427702724Smrg 8135e19dfac4Smrg orig_export_symbols= 8136e19dfac4Smrg case $host_os in 8137e19dfac4Smrg cygwin* | mingw* | cegcc*) 8138e19dfac4Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139e19dfac4Smrg # exporting using user supplied symfile 8140e19dfac4Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141e19dfac4Smrg # and it's NOT already a .def file. Must figure out 8142e19dfac4Smrg # which of the given symbols are data symbols and tag 8143e19dfac4Smrg # them as such. So, trigger use of export_symbols_cmds. 8144e19dfac4Smrg # export_symbols gets reassigned inside the "prepare 8145e19dfac4Smrg # the list of exported symbols" if statement, so the 8146e19dfac4Smrg # include_expsyms logic still works. 8147e19dfac4Smrg orig_export_symbols="$export_symbols" 8148e19dfac4Smrg export_symbols= 8149e19dfac4Smrg always_export_symbols=yes 8150e19dfac4Smrg fi 8151e19dfac4Smrg fi 8152e19dfac4Smrg ;; 8153e19dfac4Smrg esac 815427702724Smrg 8155e19dfac4Smrg # Prepare the list of exported symbols 8156e19dfac4Smrg if test -z "$export_symbols"; then 8157e19dfac4Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158e19dfac4Smrg func_verbose "generating symbol list for \`$libname.la'" 8159e19dfac4Smrg export_symbols="$output_objdir/$libname.exp" 8160e19dfac4Smrg $opt_dry_run || $RM $export_symbols 8161e19dfac4Smrg cmds=$export_symbols_cmds 8162e19dfac4Smrg save_ifs="$IFS"; IFS='~' 8163313a12fdSmrg for cmd1 in $cmds; do 8164e19dfac4Smrg IFS="$save_ifs" 8165313a12fdSmrg # Take the normal branch if the nm_file_list_spec branch 8166313a12fdSmrg # doesn't work or if tool conversion is not needed. 8167313a12fdSmrg case $nm_file_list_spec~$to_tool_file_cmd in 8168313a12fdSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8169313a12fdSmrg try_normal_branch=yes 8170313a12fdSmrg eval cmd=\"$cmd1\" 8171313a12fdSmrg func_len " $cmd" 8172313a12fdSmrg len=$func_len_result 8173313a12fdSmrg ;; 8174313a12fdSmrg *) 8175313a12fdSmrg try_normal_branch=no 8176313a12fdSmrg ;; 8177313a12fdSmrg esac 8178313a12fdSmrg if test "$try_normal_branch" = yes \ 8179313a12fdSmrg && { test "$len" -lt "$max_cmd_len" \ 8180313a12fdSmrg || test "$max_cmd_len" -le -1; } 8181313a12fdSmrg then 8182313a12fdSmrg func_show_eval "$cmd" 'exit $?' 8183313a12fdSmrg skipped_export=false 8184313a12fdSmrg elif test -n "$nm_file_list_spec"; then 8185313a12fdSmrg func_basename "$output" 8186313a12fdSmrg output_la=$func_basename_result 8187313a12fdSmrg save_libobjs=$libobjs 8188313a12fdSmrg save_output=$output 8189313a12fdSmrg output=${output_objdir}/${output_la}.nm 8190313a12fdSmrg func_to_tool_file "$output" 8191313a12fdSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 8192313a12fdSmrg func_append delfiles " $output" 8193313a12fdSmrg func_verbose "creating $NM input file list: $output" 8194313a12fdSmrg for obj in $save_libobjs; do 8195313a12fdSmrg func_to_tool_file "$obj" 8196313a12fdSmrg $ECHO "$func_to_tool_file_result" 8197313a12fdSmrg done > "$output" 8198313a12fdSmrg eval cmd=\"$cmd1\" 8199e19dfac4Smrg func_show_eval "$cmd" 'exit $?' 8200313a12fdSmrg output=$save_output 8201313a12fdSmrg libobjs=$save_libobjs 8202e19dfac4Smrg skipped_export=false 8203e19dfac4Smrg else 8204e19dfac4Smrg # The command line is too long to execute in one step. 8205e19dfac4Smrg func_verbose "using reloadable object file for export list..." 8206e19dfac4Smrg skipped_export=: 8207e19dfac4Smrg # Break out early, otherwise skipped_export may be 8208e19dfac4Smrg # set to false by a later but shorter cmd. 8209e19dfac4Smrg break 8210e19dfac4Smrg fi 8211e19dfac4Smrg done 8212e19dfac4Smrg IFS="$save_ifs" 8213e19dfac4Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214e19dfac4Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215e19dfac4Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216e19dfac4Smrg fi 8217e19dfac4Smrg fi 8218e19dfac4Smrg fi 821927702724Smrg 8220e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221e19dfac4Smrg tmp_export_symbols="$export_symbols" 8222e19dfac4Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8223313a12fdSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224e19dfac4Smrg fi 822527702724Smrg 8226e19dfac4Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227e19dfac4Smrg # The given exports_symbols file has to be filtered, so filter it. 8228e19dfac4Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229e19dfac4Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230e19dfac4Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8231e19dfac4Smrg # though. Also, the filter scales superlinearly with the number of 8232e19dfac4Smrg # global variables. join(1) would be nice here, but unfortunately 8233e19dfac4Smrg # isn't a blessed tool. 8234e19dfac4Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8235313a12fdSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236e19dfac4Smrg export_symbols=$output_objdir/$libname.def 8237e19dfac4Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 823827702724Smrg fi 823927702724Smrg 8240e19dfac4Smrg tmp_deplibs= 8241e19dfac4Smrg for test_deplib in $deplibs; do 8242e19dfac4Smrg case " $convenience " in 8243e19dfac4Smrg *" $test_deplib "*) ;; 8244e19dfac4Smrg *) 8245313a12fdSmrg func_append tmp_deplibs " $test_deplib" 8246e19dfac4Smrg ;; 8247e19dfac4Smrg esac 8248e19dfac4Smrg done 8249e19dfac4Smrg deplibs="$tmp_deplibs" 825027702724Smrg 8251e19dfac4Smrg if test -n "$convenience"; then 8252e19dfac4Smrg if test -n "$whole_archive_flag_spec" && 8253e19dfac4Smrg test "$compiler_needs_object" = yes && 8254e19dfac4Smrg test -z "$libobjs"; then 8255e19dfac4Smrg # extract the archives, so we have objects to list. 8256e19dfac4Smrg # TODO: could optimize this to just extract one archive. 8257e19dfac4Smrg whole_archive_flag_spec= 8258e19dfac4Smrg fi 8259e19dfac4Smrg if test -n "$whole_archive_flag_spec"; then 8260e19dfac4Smrg save_libobjs=$libobjs 8261e19dfac4Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 8263e19dfac4Smrg else 8264e19dfac4Smrg gentop="$output_objdir/${outputname}x" 8265313a12fdSmrg func_append generated " $gentop" 826627702724Smrg 8267e19dfac4Smrg func_extract_archives $gentop $convenience 8268313a12fdSmrg func_append libobjs " $func_extract_archives_result" 8269e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 8270e19dfac4Smrg fi 8271e19dfac4Smrg fi 827227702724Smrg 8273e19dfac4Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274e19dfac4Smrg eval flag=\"$thread_safe_flag_spec\" 8275313a12fdSmrg func_append linker_flags " $flag" 8276e19dfac4Smrg fi 827727702724Smrg 8278e19dfac4Smrg # Make a backup of the uninstalled library when relinking 8279313a12fdSmrg if test "$opt_mode" = relink; then 8280e19dfac4Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 828127702724Smrg fi 828227702724Smrg 8283e19dfac4Smrg # Do each of the archive commands. 8284e19dfac4Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8285e19dfac4Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286e19dfac4Smrg eval test_cmds=\"$module_expsym_cmds\" 8287e19dfac4Smrg cmds=$module_expsym_cmds 8288e19dfac4Smrg else 8289e19dfac4Smrg eval test_cmds=\"$module_cmds\" 8290e19dfac4Smrg cmds=$module_cmds 8291e19dfac4Smrg fi 8292e19dfac4Smrg else 8293e19dfac4Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294e19dfac4Smrg eval test_cmds=\"$archive_expsym_cmds\" 8295e19dfac4Smrg cmds=$archive_expsym_cmds 8296e19dfac4Smrg else 8297e19dfac4Smrg eval test_cmds=\"$archive_cmds\" 8298e19dfac4Smrg cmds=$archive_cmds 8299e19dfac4Smrg fi 830027702724Smrg fi 830127702724Smrg 8302e19dfac4Smrg if test "X$skipped_export" != "X:" && 8303e19dfac4Smrg func_len " $test_cmds" && 8304e19dfac4Smrg len=$func_len_result && 8305e19dfac4Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306e19dfac4Smrg : 8307e19dfac4Smrg else 8308e19dfac4Smrg # The command line is too long to link in one step, link piecewise 8309e19dfac4Smrg # or, if using GNU ld and skipped_export is not :, use a linker 8310e19dfac4Smrg # script. 831127702724Smrg 8312e19dfac4Smrg # Save the value of $output and $libobjs because we want to 8313e19dfac4Smrg # use them later. If we have whole_archive_flag_spec, we 8314e19dfac4Smrg # want to use save_libobjs as it was before 8315e19dfac4Smrg # whole_archive_flag_spec was expanded, because we can't 8316e19dfac4Smrg # assume the linker understands whole_archive_flag_spec. 8317e19dfac4Smrg # This may have to be revisited, in case too many 8318e19dfac4Smrg # convenience libraries get linked in and end up exceeding 8319e19dfac4Smrg # the spec. 8320e19dfac4Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321e19dfac4Smrg save_libobjs=$libobjs 8322e19dfac4Smrg fi 8323e19dfac4Smrg save_output=$output 8324313a12fdSmrg func_basename "$output" 8325313a12fdSmrg output_la=$func_basename_result 832627702724Smrg 8327e19dfac4Smrg # Clear the reloadable object creation command queue and 8328e19dfac4Smrg # initialize k to one. 8329e19dfac4Smrg test_cmds= 8330e19dfac4Smrg concat_cmds= 8331e19dfac4Smrg objlist= 8332e19dfac4Smrg last_robj= 8333e19dfac4Smrg k=1 833427702724Smrg 8335e19dfac4Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336e19dfac4Smrg output=${output_objdir}/${output_la}.lnkscript 8337e19dfac4Smrg func_verbose "creating GNU ld script: $output" 8338313a12fdSmrg echo 'INPUT (' > $output 8339e19dfac4Smrg for obj in $save_libobjs 8340e19dfac4Smrg do 8341313a12fdSmrg func_to_tool_file "$obj" 8342313a12fdSmrg $ECHO "$func_to_tool_file_result" >> $output 8343e19dfac4Smrg done 8344313a12fdSmrg echo ')' >> $output 8345313a12fdSmrg func_append delfiles " $output" 8346313a12fdSmrg func_to_tool_file "$output" 8347313a12fdSmrg output=$func_to_tool_file_result 8348e19dfac4Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349e19dfac4Smrg output=${output_objdir}/${output_la}.lnk 8350e19dfac4Smrg func_verbose "creating linker input file list: $output" 8351e19dfac4Smrg : > $output 8352e19dfac4Smrg set x $save_libobjs 8353e19dfac4Smrg shift 8354e19dfac4Smrg firstobj= 8355e19dfac4Smrg if test "$compiler_needs_object" = yes; then 8356e19dfac4Smrg firstobj="$1 " 8357e19dfac4Smrg shift 8358e19dfac4Smrg fi 8359e19dfac4Smrg for obj 8360e19dfac4Smrg do 8361313a12fdSmrg func_to_tool_file "$obj" 8362313a12fdSmrg $ECHO "$func_to_tool_file_result" >> $output 8363e19dfac4Smrg done 8364313a12fdSmrg func_append delfiles " $output" 8365313a12fdSmrg func_to_tool_file "$output" 8366313a12fdSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367e19dfac4Smrg else 8368e19dfac4Smrg if test -n "$save_libobjs"; then 8369e19dfac4Smrg func_verbose "creating reloadable object files..." 8370e19dfac4Smrg output=$output_objdir/$output_la-${k}.$objext 8371e19dfac4Smrg eval test_cmds=\"$reload_cmds\" 8372e19dfac4Smrg func_len " $test_cmds" 8373e19dfac4Smrg len0=$func_len_result 8374e19dfac4Smrg len=$len0 8375e19dfac4Smrg 8376e19dfac4Smrg # Loop over the list of objects to be linked. 8377e19dfac4Smrg for obj in $save_libobjs 8378e19dfac4Smrg do 8379e19dfac4Smrg func_len " $obj" 8380e19dfac4Smrg func_arith $len + $func_len_result 8381e19dfac4Smrg len=$func_arith_result 8382e19dfac4Smrg if test "X$objlist" = X || 8383e19dfac4Smrg test "$len" -lt "$max_cmd_len"; then 8384e19dfac4Smrg func_append objlist " $obj" 8385e19dfac4Smrg else 8386e19dfac4Smrg # The command $test_cmds is almost too long, add a 8387e19dfac4Smrg # command to the queue. 8388e19dfac4Smrg if test "$k" -eq 1 ; then 8389e19dfac4Smrg # The first file doesn't have a previous command to add. 8390313a12fdSmrg reload_objs=$objlist 8391313a12fdSmrg eval concat_cmds=\"$reload_cmds\" 8392e19dfac4Smrg else 8393e19dfac4Smrg # All subsequent reloadable object files will link in 8394e19dfac4Smrg # the last one created. 8395313a12fdSmrg reload_objs="$objlist $last_robj" 8396313a12fdSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397e19dfac4Smrg fi 8398e19dfac4Smrg last_robj=$output_objdir/$output_la-${k}.$objext 8399e19dfac4Smrg func_arith $k + 1 8400e19dfac4Smrg k=$func_arith_result 8401e19dfac4Smrg output=$output_objdir/$output_la-${k}.$objext 8402313a12fdSmrg objlist=" $obj" 8403e19dfac4Smrg func_len " $last_robj" 8404e19dfac4Smrg func_arith $len0 + $func_len_result 8405e19dfac4Smrg len=$func_arith_result 8406e19dfac4Smrg fi 8407e19dfac4Smrg done 8408e19dfac4Smrg # Handle the remaining objects by creating one last 8409e19dfac4Smrg # reloadable object file. All subsequent reloadable object 8410e19dfac4Smrg # files will link in the last one created. 8411e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8412313a12fdSmrg reload_objs="$objlist $last_robj" 8413313a12fdSmrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414e19dfac4Smrg if test -n "$last_robj"; then 8415e19dfac4Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416e19dfac4Smrg fi 8417313a12fdSmrg func_append delfiles " $output" 841827702724Smrg 8419e19dfac4Smrg else 8420e19dfac4Smrg output= 8421e19dfac4Smrg fi 842227702724Smrg 8423e19dfac4Smrg if ${skipped_export-false}; then 8424e19dfac4Smrg func_verbose "generating symbol list for \`$libname.la'" 8425e19dfac4Smrg export_symbols="$output_objdir/$libname.exp" 8426e19dfac4Smrg $opt_dry_run || $RM $export_symbols 8427e19dfac4Smrg libobjs=$output 8428e19dfac4Smrg # Append the command to create the export file. 8429e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430e19dfac4Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431e19dfac4Smrg if test -n "$last_robj"; then 8432e19dfac4Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433e19dfac4Smrg fi 8434e19dfac4Smrg fi 843527702724Smrg 8436e19dfac4Smrg test -n "$save_libobjs" && 8437e19dfac4Smrg func_verbose "creating a temporary reloadable object file: $output" 843827702724Smrg 8439e19dfac4Smrg # Loop through the commands generated above and execute them. 8440e19dfac4Smrg save_ifs="$IFS"; IFS='~' 8441e19dfac4Smrg for cmd in $concat_cmds; do 8442e19dfac4Smrg IFS="$save_ifs" 8443e19dfac4Smrg $opt_silent || { 8444e19dfac4Smrg func_quote_for_expand "$cmd" 8445e19dfac4Smrg eval "func_echo $func_quote_for_expand_result" 8446e19dfac4Smrg } 8447e19dfac4Smrg $opt_dry_run || eval "$cmd" || { 8448e19dfac4Smrg lt_exit=$? 8449e19dfac4Smrg 8450e19dfac4Smrg # Restore the uninstalled library and exit 8451313a12fdSmrg if test "$opt_mode" = relink; then 8452e19dfac4Smrg ( cd "$output_objdir" && \ 8453e19dfac4Smrg $RM "${realname}T" && \ 8454e19dfac4Smrg $MV "${realname}U" "$realname" ) 8455e19dfac4Smrg fi 845627702724Smrg 8457e19dfac4Smrg exit $lt_exit 8458e19dfac4Smrg } 8459e19dfac4Smrg done 8460e19dfac4Smrg IFS="$save_ifs" 8461e19dfac4Smrg 8462e19dfac4Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463e19dfac4Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464e19dfac4Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 846527702724Smrg fi 846627702724Smrg fi 846727702724Smrg 8468e19dfac4Smrg if ${skipped_export-false}; then 8469e19dfac4Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470e19dfac4Smrg tmp_export_symbols="$export_symbols" 8471e19dfac4Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8472313a12fdSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473e19dfac4Smrg fi 847427702724Smrg 8475e19dfac4Smrg if test -n "$orig_export_symbols"; then 8476e19dfac4Smrg # The given exports_symbols file has to be filtered, so filter it. 8477e19dfac4Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478e19dfac4Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479e19dfac4Smrg # 's' commands which not all seds can handle. GNU sed should be fine 8480e19dfac4Smrg # though. Also, the filter scales superlinearly with the number of 8481e19dfac4Smrg # global variables. join(1) would be nice here, but unfortunately 8482e19dfac4Smrg # isn't a blessed tool. 8483e19dfac4Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8484313a12fdSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485e19dfac4Smrg export_symbols=$output_objdir/$libname.def 8486e19dfac4Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487e19dfac4Smrg fi 8488e19dfac4Smrg fi 848927702724Smrg 8490e19dfac4Smrg libobjs=$output 8491e19dfac4Smrg # Restore the value of output. 8492e19dfac4Smrg output=$save_output 849327702724Smrg 8494e19dfac4Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495e19dfac4Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 8497e19dfac4Smrg fi 8498e19dfac4Smrg # Expand the library linking commands again to reset the 8499e19dfac4Smrg # value of $libobjs for piecewise linking. 8500e19dfac4Smrg 8501e19dfac4Smrg # Do each of the archive commands. 8502e19dfac4Smrg if test "$module" = yes && test -n "$module_cmds" ; then 8503e19dfac4Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504e19dfac4Smrg cmds=$module_expsym_cmds 850527702724Smrg else 8506e19dfac4Smrg cmds=$module_cmds 850727702724Smrg fi 850827702724Smrg else 8509e19dfac4Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510e19dfac4Smrg cmds=$archive_expsym_cmds 8511e19dfac4Smrg else 8512e19dfac4Smrg cmds=$archive_cmds 8513e19dfac4Smrg fi 851427702724Smrg fi 851527702724Smrg fi 851627702724Smrg 8517e19dfac4Smrg if test -n "$delfiles"; then 8518e19dfac4Smrg # Append the command to remove temporary files to $cmds. 8519e19dfac4Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 8520e19dfac4Smrg fi 852127702724Smrg 8522e19dfac4Smrg # Add any objects from preloaded convenience libraries 8523e19dfac4Smrg if test -n "$dlprefiles"; then 8524e19dfac4Smrg gentop="$output_objdir/${outputname}x" 8525313a12fdSmrg func_append generated " $gentop" 852627702724Smrg 8527e19dfac4Smrg func_extract_archives $gentop $dlprefiles 8528313a12fdSmrg func_append libobjs " $func_extract_archives_result" 8529e19dfac4Smrg test "X$libobjs" = "X " && libobjs= 853027702724Smrg fi 853127702724Smrg 8532e19dfac4Smrg save_ifs="$IFS"; IFS='~' 8533e19dfac4Smrg for cmd in $cmds; do 8534e19dfac4Smrg IFS="$save_ifs" 8535e19dfac4Smrg eval cmd=\"$cmd\" 8536e19dfac4Smrg $opt_silent || { 8537e19dfac4Smrg func_quote_for_expand "$cmd" 8538e19dfac4Smrg eval "func_echo $func_quote_for_expand_result" 8539e19dfac4Smrg } 8540e19dfac4Smrg $opt_dry_run || eval "$cmd" || { 8541e19dfac4Smrg lt_exit=$? 854227702724Smrg 8543e19dfac4Smrg # Restore the uninstalled library and exit 8544313a12fdSmrg if test "$opt_mode" = relink; then 8545e19dfac4Smrg ( cd "$output_objdir" && \ 8546e19dfac4Smrg $RM "${realname}T" && \ 8547e19dfac4Smrg $MV "${realname}U" "$realname" ) 8548e19dfac4Smrg fi 8549e19dfac4Smrg 8550e19dfac4Smrg exit $lt_exit 8551e19dfac4Smrg } 8552e19dfac4Smrg done 8553e19dfac4Smrg IFS="$save_ifs" 8554e19dfac4Smrg 8555e19dfac4Smrg # Restore the uninstalled library and exit 8556313a12fdSmrg if test "$opt_mode" = relink; then 8557e19dfac4Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558e19dfac4Smrg 8559e19dfac4Smrg if test -n "$convenience"; then 8560e19dfac4Smrg if test -z "$whole_archive_flag_spec"; then 8561e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 856227702724Smrg fi 856327702724Smrg fi 856427702724Smrg 8565e19dfac4Smrg exit $EXIT_SUCCESS 8566e19dfac4Smrg fi 856727702724Smrg 8568e19dfac4Smrg # Create links to the real library. 8569e19dfac4Smrg for linkname in $linknames; do 8570e19dfac4Smrg if test "$realname" != "$linkname"; then 8571e19dfac4Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8572e19dfac4Smrg fi 8573e19dfac4Smrg done 8574e19dfac4Smrg 8575e19dfac4Smrg # If -module or -export-dynamic was specified, set the dlname. 8576e19dfac4Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 8577e19dfac4Smrg # On all known operating systems, these are identical. 8578e19dfac4Smrg dlname="$soname" 8579e19dfac4Smrg fi 8580e19dfac4Smrg fi 8581e19dfac4Smrg ;; 8582e19dfac4Smrg 8583e19dfac4Smrg obj) 8584e19dfac4Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585e19dfac4Smrg func_warning "\`-dlopen' is ignored for objects" 8586e19dfac4Smrg fi 8587e19dfac4Smrg 8588e19dfac4Smrg case " $deplibs" in 8589e19dfac4Smrg *\ -l* | *\ -L*) 8590e19dfac4Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 8591e19dfac4Smrg esac 8592e19dfac4Smrg 8593e19dfac4Smrg test -n "$rpath" && \ 8594e19dfac4Smrg func_warning "\`-rpath' is ignored for objects" 8595e19dfac4Smrg 8596e19dfac4Smrg test -n "$xrpath" && \ 8597e19dfac4Smrg func_warning "\`-R' is ignored for objects" 8598e19dfac4Smrg 8599e19dfac4Smrg test -n "$vinfo" && \ 8600e19dfac4Smrg func_warning "\`-version-info' is ignored for objects" 8601e19dfac4Smrg 8602e19dfac4Smrg test -n "$release" && \ 8603e19dfac4Smrg func_warning "\`-release' is ignored for objects" 8604e19dfac4Smrg 8605e19dfac4Smrg case $output in 8606e19dfac4Smrg *.lo) 8607e19dfac4Smrg test -n "$objs$old_deplibs" && \ 8608e19dfac4Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609e19dfac4Smrg 8610e19dfac4Smrg libobj=$output 8611e19dfac4Smrg func_lo2o "$libobj" 8612e19dfac4Smrg obj=$func_lo2o_result 8613e19dfac4Smrg ;; 8614e19dfac4Smrg *) 8615e19dfac4Smrg libobj= 8616e19dfac4Smrg obj="$output" 8617e19dfac4Smrg ;; 8618e19dfac4Smrg esac 8619e19dfac4Smrg 8620e19dfac4Smrg # Delete the old objects. 8621e19dfac4Smrg $opt_dry_run || $RM $obj $libobj 8622e19dfac4Smrg 8623e19dfac4Smrg # Objects from convenience libraries. This assumes 8624e19dfac4Smrg # single-version convenience libraries. Whenever we create 8625e19dfac4Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 8626e19dfac4Smrg # the extraction. 8627e19dfac4Smrg reload_conv_objs= 8628e19dfac4Smrg gentop= 8629e19dfac4Smrg # reload_cmds runs $LD directly, so let us get rid of 8630e19dfac4Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 8631e19dfac4Smrg # turning comma into space.. 8632e19dfac4Smrg wl= 8633e19dfac4Smrg 8634e19dfac4Smrg if test -n "$convenience"; then 8635e19dfac4Smrg if test -n "$whole_archive_flag_spec"; then 8636e19dfac4Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 8637313a12fdSmrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638e19dfac4Smrg else 8639e19dfac4Smrg gentop="$output_objdir/${obj}x" 8640313a12fdSmrg func_append generated " $gentop" 8641e19dfac4Smrg 8642e19dfac4Smrg func_extract_archives $gentop $convenience 8643e19dfac4Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644e19dfac4Smrg fi 8645e19dfac4Smrg fi 864627702724Smrg 8647313a12fdSmrg # If we're not building shared, we need to use non_pic_objs 8648313a12fdSmrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8649313a12fdSmrg 8650e19dfac4Smrg # Create the old-style object. 8651313a12fdSmrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 865227702724Smrg 8653e19dfac4Smrg output="$obj" 8654e19dfac4Smrg func_execute_cmds "$reload_cmds" 'exit $?' 865527702724Smrg 8656e19dfac4Smrg # Exit if we aren't doing a library object file. 8657e19dfac4Smrg if test -z "$libobj"; then 8658e19dfac4Smrg if test -n "$gentop"; then 8659e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 8660e19dfac4Smrg fi 866127702724Smrg 8662e19dfac4Smrg exit $EXIT_SUCCESS 8663e19dfac4Smrg fi 866427702724Smrg 8665e19dfac4Smrg if test "$build_libtool_libs" != yes; then 8666e19dfac4Smrg if test -n "$gentop"; then 8667e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 8668e19dfac4Smrg fi 866927702724Smrg 8670e19dfac4Smrg # Create an invalid libtool object if no PIC, so that we don't 8671e19dfac4Smrg # accidentally link it into a program. 8672e19dfac4Smrg # $show "echo timestamp > $libobj" 8673e19dfac4Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674e19dfac4Smrg exit $EXIT_SUCCESS 8675e19dfac4Smrg fi 867627702724Smrg 8677e19dfac4Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8678e19dfac4Smrg # Only do commands if we really have different PIC objects. 8679e19dfac4Smrg reload_objs="$libobjs $reload_conv_objs" 8680e19dfac4Smrg output="$libobj" 8681e19dfac4Smrg func_execute_cmds "$reload_cmds" 'exit $?' 868227702724Smrg fi 868327702724Smrg 8684e19dfac4Smrg if test -n "$gentop"; then 8685e19dfac4Smrg func_show_eval '${RM}r "$gentop"' 8686e19dfac4Smrg fi 868727702724Smrg 8688e19dfac4Smrg exit $EXIT_SUCCESS 8689e19dfac4Smrg ;; 869027702724Smrg 8691e19dfac4Smrg prog) 8692e19dfac4Smrg case $host in 8693e19dfac4Smrg *cygwin*) func_stripname '' '.exe' "$output" 8694e19dfac4Smrg output=$func_stripname_result.exe;; 869527702724Smrg esac 8696e19dfac4Smrg test -n "$vinfo" && \ 8697e19dfac4Smrg func_warning "\`-version-info' is ignored for programs" 869827702724Smrg 8699e19dfac4Smrg test -n "$release" && \ 8700e19dfac4Smrg func_warning "\`-release' is ignored for programs" 870127702724Smrg 8702e19dfac4Smrg test "$preload" = yes \ 8703e19dfac4Smrg && test "$dlopen_support" = unknown \ 8704e19dfac4Smrg && test "$dlopen_self" = unknown \ 8705e19dfac4Smrg && test "$dlopen_self_static" = unknown && \ 8706e19dfac4Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 870727702724Smrg 8708e19dfac4Smrg case $host in 8709e19dfac4Smrg *-*-rhapsody* | *-*-darwin1.[012]) 8710e19dfac4Smrg # On Rhapsody replace the C library is the System framework 8711313a12fdSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8712313a12fdSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 871327702724Smrg ;; 871427702724Smrg esac 871527702724Smrg 8716e19dfac4Smrg case $host in 8717e19dfac4Smrg *-*-darwin*) 8718e19dfac4Smrg # Don't allow lazy linking, it breaks C++ global constructors 8719e19dfac4Smrg # But is supposedly fixed on 10.4 or later (yay!). 8720e19dfac4Smrg if test "$tagname" = CXX ; then 8721e19dfac4Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722e19dfac4Smrg 10.[0123]) 8723313a12fdSmrg func_append compile_command " ${wl}-bind_at_load" 8724313a12fdSmrg func_append finalize_command " ${wl}-bind_at_load" 8725e19dfac4Smrg ;; 8726e19dfac4Smrg esac 8727e19dfac4Smrg fi 8728e19dfac4Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8729313a12fdSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8730313a12fdSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 873127702724Smrg ;; 873227702724Smrg esac 873327702724Smrg 873427702724Smrg 8735e19dfac4Smrg # move library search paths that coincide with paths to not yet 8736e19dfac4Smrg # installed libraries to the beginning of the library search list 8737e19dfac4Smrg new_libs= 8738e19dfac4Smrg for path in $notinst_path; do 8739e19dfac4Smrg case " $new_libs " in 8740e19dfac4Smrg *" -L$path/$objdir "*) ;; 874127702724Smrg *) 8742e19dfac4Smrg case " $compile_deplibs " in 8743e19dfac4Smrg *" -L$path/$objdir "*) 8744313a12fdSmrg func_append new_libs " -L$path/$objdir" ;; 8745e19dfac4Smrg esac 874627702724Smrg ;; 874727702724Smrg esac 874827702724Smrg done 8749e19dfac4Smrg for deplib in $compile_deplibs; do 8750e19dfac4Smrg case $deplib in 8751e19dfac4Smrg -L*) 8752e19dfac4Smrg case " $new_libs " in 8753e19dfac4Smrg *" $deplib "*) ;; 8754313a12fdSmrg *) func_append new_libs " $deplib" ;; 8755e19dfac4Smrg esac 8756e19dfac4Smrg ;; 8757313a12fdSmrg *) func_append new_libs " $deplib" ;; 8758e19dfac4Smrg esac 8759e19dfac4Smrg done 8760e19dfac4Smrg compile_deplibs="$new_libs" 876127702724Smrg 876227702724Smrg 8763313a12fdSmrg func_append compile_command " $compile_deplibs" 8764313a12fdSmrg func_append finalize_command " $finalize_deplibs" 876527702724Smrg 8766e19dfac4Smrg if test -n "$rpath$xrpath"; then 8767e19dfac4Smrg # If the user specified any rpath flags, then add them. 8768e19dfac4Smrg for libdir in $rpath $xrpath; do 8769e19dfac4Smrg # This is the magic to use -rpath. 8770e19dfac4Smrg case "$finalize_rpath " in 8771e19dfac4Smrg *" $libdir "*) ;; 8772313a12fdSmrg *) func_append finalize_rpath " $libdir" ;; 8773e19dfac4Smrg esac 8774e19dfac4Smrg done 8775e19dfac4Smrg fi 877627702724Smrg 8777e19dfac4Smrg # Now hardcode the library paths 8778e19dfac4Smrg rpath= 8779e19dfac4Smrg hardcode_libdirs= 8780e19dfac4Smrg for libdir in $compile_rpath $finalize_rpath; do 8781e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 8782e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 8783e19dfac4Smrg if test -z "$hardcode_libdirs"; then 8784e19dfac4Smrg hardcode_libdirs="$libdir" 8785e19dfac4Smrg else 8786e19dfac4Smrg # Just accumulate the unique libdirs. 8787e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789e19dfac4Smrg ;; 8790e19dfac4Smrg *) 8791313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792e19dfac4Smrg ;; 8793e19dfac4Smrg esac 8794e19dfac4Smrg fi 8795e19dfac4Smrg else 8796e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8797313a12fdSmrg func_append rpath " $flag" 8798e19dfac4Smrg fi 8799e19dfac4Smrg elif test -n "$runpath_var"; then 8800e19dfac4Smrg case "$perm_rpath " in 880127702724Smrg *" $libdir "*) ;; 8802313a12fdSmrg *) func_append perm_rpath " $libdir" ;; 880327702724Smrg esac 8804e19dfac4Smrg fi 8805e19dfac4Smrg case $host in 8806e19dfac4Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807e19dfac4Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808e19dfac4Smrg case :$dllsearchpath: in 8809e19dfac4Smrg *":$libdir:"*) ;; 8810e19dfac4Smrg ::) dllsearchpath=$libdir;; 8811313a12fdSmrg *) func_append dllsearchpath ":$libdir";; 8812e19dfac4Smrg esac 8813e19dfac4Smrg case :$dllsearchpath: in 8814e19dfac4Smrg *":$testbindir:"*) ;; 8815e19dfac4Smrg ::) dllsearchpath=$testbindir;; 8816313a12fdSmrg *) func_append dllsearchpath ":$testbindir";; 8817e19dfac4Smrg esac 8818e19dfac4Smrg ;; 8819e19dfac4Smrg esac 8820e19dfac4Smrg done 8821e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 8822e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 8823e19dfac4Smrg test -n "$hardcode_libdirs"; then 8824e19dfac4Smrg libdir="$hardcode_libdirs" 8825e19dfac4Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8826e19dfac4Smrg fi 8827e19dfac4Smrg compile_rpath="$rpath" 8828e19dfac4Smrg 8829e19dfac4Smrg rpath= 8830e19dfac4Smrg hardcode_libdirs= 8831e19dfac4Smrg for libdir in $finalize_rpath; do 8832e19dfac4Smrg if test -n "$hardcode_libdir_flag_spec"; then 8833e19dfac4Smrg if test -n "$hardcode_libdir_separator"; then 8834e19dfac4Smrg if test -z "$hardcode_libdirs"; then 8835e19dfac4Smrg hardcode_libdirs="$libdir" 8836e19dfac4Smrg else 8837e19dfac4Smrg # Just accumulate the unique libdirs. 8838e19dfac4Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839e19dfac4Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840e19dfac4Smrg ;; 8841e19dfac4Smrg *) 8842313a12fdSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843e19dfac4Smrg ;; 8844e19dfac4Smrg esac 8845e19dfac4Smrg fi 8846e19dfac4Smrg else 8847e19dfac4Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8848313a12fdSmrg func_append rpath " $flag" 8849e19dfac4Smrg fi 8850e19dfac4Smrg elif test -n "$runpath_var"; then 8851e19dfac4Smrg case "$finalize_perm_rpath " in 885227702724Smrg *" $libdir "*) ;; 8853313a12fdSmrg *) func_append finalize_perm_rpath " $libdir" ;; 885427702724Smrg esac 885527702724Smrg fi 8856e19dfac4Smrg done 8857e19dfac4Smrg # Substitute the hardcoded libdirs into the rpath. 8858e19dfac4Smrg if test -n "$hardcode_libdir_separator" && 8859e19dfac4Smrg test -n "$hardcode_libdirs"; then 8860e19dfac4Smrg libdir="$hardcode_libdirs" 8861e19dfac4Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 8862e19dfac4Smrg fi 8863e19dfac4Smrg finalize_rpath="$rpath" 886427702724Smrg 8865e19dfac4Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866e19dfac4Smrg # Transform all the library objects into standard objects. 8867313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8868313a12fdSmrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869e19dfac4Smrg fi 887027702724Smrg 8871e19dfac4Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 887227702724Smrg 8873e19dfac4Smrg # template prelinking step 8874e19dfac4Smrg if test -n "$prelink_cmds"; then 8875e19dfac4Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 8876e19dfac4Smrg fi 887727702724Smrg 8878e19dfac4Smrg wrappers_required=yes 8879e19dfac4Smrg case $host in 8880313a12fdSmrg *cegcc* | *mingw32ce*) 8881313a12fdSmrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8882313a12fdSmrg wrappers_required=no 8883313a12fdSmrg ;; 8884e19dfac4Smrg *cygwin* | *mingw* ) 8885e19dfac4Smrg if test "$build_libtool_libs" != yes; then 8886e19dfac4Smrg wrappers_required=no 8887e19dfac4Smrg fi 8888e19dfac4Smrg ;; 8889e19dfac4Smrg *) 8890e19dfac4Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891e19dfac4Smrg wrappers_required=no 8892e19dfac4Smrg fi 8893e19dfac4Smrg ;; 8894e19dfac4Smrg esac 8895e19dfac4Smrg if test "$wrappers_required" = no; then 8896e19dfac4Smrg # Replace the output file specification. 8897313a12fdSmrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898e19dfac4Smrg link_command="$compile_command$compile_rpath" 889927702724Smrg 8900e19dfac4Smrg # We have no uninstalled library dependencies, so finalize right now. 8901e19dfac4Smrg exit_status=0 8902e19dfac4Smrg func_show_eval "$link_command" 'exit_status=$?' 890327702724Smrg 8904313a12fdSmrg if test -n "$postlink_cmds"; then 8905313a12fdSmrg func_to_tool_file "$output" 8906313a12fdSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8907313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 8908313a12fdSmrg fi 8909313a12fdSmrg 8910e19dfac4Smrg # Delete the generated files. 8911e19dfac4Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8912e19dfac4Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913e19dfac4Smrg fi 891427702724Smrg 8915e19dfac4Smrg exit $exit_status 8916e19dfac4Smrg fi 891727702724Smrg 8918e19dfac4Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919e19dfac4Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920e19dfac4Smrg fi 8921e19dfac4Smrg if test -n "$finalize_shlibpath"; then 8922e19dfac4Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923e19dfac4Smrg fi 892427702724Smrg 8925e19dfac4Smrg compile_var= 8926e19dfac4Smrg finalize_var= 8927e19dfac4Smrg if test -n "$runpath_var"; then 8928e19dfac4Smrg if test -n "$perm_rpath"; then 8929e19dfac4Smrg # We should set the runpath_var. 8930e19dfac4Smrg rpath= 8931e19dfac4Smrg for dir in $perm_rpath; do 8932313a12fdSmrg func_append rpath "$dir:" 893327702724Smrg done 8934e19dfac4Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 893527702724Smrg fi 8936e19dfac4Smrg if test -n "$finalize_perm_rpath"; then 8937e19dfac4Smrg # We should set the runpath_var. 8938e19dfac4Smrg rpath= 8939e19dfac4Smrg for dir in $finalize_perm_rpath; do 8940313a12fdSmrg func_append rpath "$dir:" 8941e19dfac4Smrg done 8942e19dfac4Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943e19dfac4Smrg fi 8944e19dfac4Smrg fi 894527702724Smrg 8946e19dfac4Smrg if test "$no_install" = yes; then 8947e19dfac4Smrg # We don't need to create a wrapper script. 8948e19dfac4Smrg link_command="$compile_var$compile_command$compile_rpath" 8949e19dfac4Smrg # Replace the output file specification. 8950313a12fdSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951e19dfac4Smrg # Delete the old output file. 8952e19dfac4Smrg $opt_dry_run || $RM $output 8953e19dfac4Smrg # Link the executable and exit 8954e19dfac4Smrg func_show_eval "$link_command" 'exit $?' 8955313a12fdSmrg 8956313a12fdSmrg if test -n "$postlink_cmds"; then 8957313a12fdSmrg func_to_tool_file "$output" 8958313a12fdSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8959313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 8960313a12fdSmrg fi 8961313a12fdSmrg 8962e19dfac4Smrg exit $EXIT_SUCCESS 8963e19dfac4Smrg fi 896427702724Smrg 8965e19dfac4Smrg if test "$hardcode_action" = relink; then 8966e19dfac4Smrg # Fast installation is not supported 8967e19dfac4Smrg link_command="$compile_var$compile_command$compile_rpath" 8968e19dfac4Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 896927702724Smrg 8970e19dfac4Smrg func_warning "this platform does not like uninstalled shared libraries" 8971e19dfac4Smrg func_warning "\`$output' will be relinked during installation" 8972e19dfac4Smrg else 8973e19dfac4Smrg if test "$fast_install" != no; then 8974e19dfac4Smrg link_command="$finalize_var$compile_command$finalize_rpath" 8975e19dfac4Smrg if test "$fast_install" = yes; then 8976313a12fdSmrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977e19dfac4Smrg else 8978e19dfac4Smrg # fast_install is set to needless 8979e19dfac4Smrg relink_command= 8980e19dfac4Smrg fi 898127702724Smrg else 8982e19dfac4Smrg link_command="$compile_var$compile_command$compile_rpath" 8983e19dfac4Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 898427702724Smrg fi 8985e19dfac4Smrg fi 898627702724Smrg 8987e19dfac4Smrg # Replace the output file specification. 8988313a12fdSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 898927702724Smrg 8990e19dfac4Smrg # Delete the old output files. 8991e19dfac4Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 899227702724Smrg 8993e19dfac4Smrg func_show_eval "$link_command" 'exit $?' 899427702724Smrg 8995313a12fdSmrg if test -n "$postlink_cmds"; then 8996313a12fdSmrg func_to_tool_file "$output_objdir/$outputname" 8997313a12fdSmrg 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'` 8998313a12fdSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 8999313a12fdSmrg fi 9000313a12fdSmrg 9001e19dfac4Smrg # Now create the wrapper script. 9002e19dfac4Smrg func_verbose "creating $output" 900327702724Smrg 9004e19dfac4Smrg # Quote the relink command for shipping. 9005e19dfac4Smrg if test -n "$relink_command"; then 9006e19dfac4Smrg # Preserve any variables that may affect compiler behavior 9007e19dfac4Smrg for var in $variables_saved_for_relink; do 9008e19dfac4Smrg if eval test -z \"\${$var+set}\"; then 9009e19dfac4Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010e19dfac4Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9011e19dfac4Smrg relink_command="$var=; export $var; $relink_command" 9012e19dfac4Smrg else 9013e19dfac4Smrg func_quote_for_eval "$var_value" 9014e19dfac4Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015e19dfac4Smrg fi 9016e19dfac4Smrg done 9017e19dfac4Smrg relink_command="(cd `pwd`; $relink_command)" 9018313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019e19dfac4Smrg fi 902027702724Smrg 9021e19dfac4Smrg # Only actually do things if not in dry run mode. 9022e19dfac4Smrg $opt_dry_run || { 9023e19dfac4Smrg # win32 will think the script is a binary if it has 9024e19dfac4Smrg # a .exe suffix, so we strip it off here. 9025e19dfac4Smrg case $output in 9026e19dfac4Smrg *.exe) func_stripname '' '.exe' "$output" 9027e19dfac4Smrg output=$func_stripname_result ;; 9028e19dfac4Smrg esac 9029e19dfac4Smrg # test for cygwin because mv fails w/o .exe extensions 903027702724Smrg case $host in 9031e19dfac4Smrg *cygwin*) 9032e19dfac4Smrg exeext=.exe 9033e19dfac4Smrg func_stripname '' '.exe' "$outputname" 9034e19dfac4Smrg outputname=$func_stripname_result ;; 9035e19dfac4Smrg *) exeext= ;; 903627702724Smrg esac 9037e19dfac4Smrg case $host in 9038e19dfac4Smrg *cygwin* | *mingw* ) 9039e19dfac4Smrg func_dirname_and_basename "$output" "" "." 9040e19dfac4Smrg output_name=$func_basename_result 9041e19dfac4Smrg output_path=$func_dirname_result 9042e19dfac4Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043e19dfac4Smrg cwrapper="$output_path/$output_name.exe" 9044e19dfac4Smrg $RM $cwrappersource $cwrapper 9045e19dfac4Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046e19dfac4Smrg 9047e19dfac4Smrg func_emit_cwrapperexe_src > $cwrappersource 9048e19dfac4Smrg 9049e19dfac4Smrg # The wrapper executable is built using the $host compiler, 9050e19dfac4Smrg # because it contains $host paths and files. If cross- 9051e19dfac4Smrg # compiling, it, like the target executable, must be 9052e19dfac4Smrg # executed on the $host or under an emulation environment. 9053e19dfac4Smrg $opt_dry_run || { 9054e19dfac4Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055e19dfac4Smrg $STRIP $cwrapper 9056e19dfac4Smrg } 905727702724Smrg 9058e19dfac4Smrg # Now, create the wrapper script for func_source use: 9059e19dfac4Smrg func_ltwrapper_scriptname $cwrapper 9060e19dfac4Smrg $RM $func_ltwrapper_scriptname_result 9061e19dfac4Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062e19dfac4Smrg $opt_dry_run || { 9063e19dfac4Smrg # note: this script will not be executed, so do not chmod. 9064e19dfac4Smrg if test "x$build" = "x$host" ; then 9065e19dfac4Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 906627702724Smrg else 9067e19dfac4Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 906827702724Smrg fi 9069e19dfac4Smrg } 9070e19dfac4Smrg ;; 9071e19dfac4Smrg * ) 9072e19dfac4Smrg $RM $output 9073e19dfac4Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 907427702724Smrg 9075e19dfac4Smrg func_emit_wrapper no > $output 9076e19dfac4Smrg chmod +x $output 907727702724Smrg ;; 907827702724Smrg esac 9079e19dfac4Smrg } 9080e19dfac4Smrg exit $EXIT_SUCCESS 9081e19dfac4Smrg ;; 9082e19dfac4Smrg esac 908327702724Smrg 9084e19dfac4Smrg # See if we need to build an old-fashioned archive. 9085e19dfac4Smrg for oldlib in $oldlibs; do 908627702724Smrg 9087e19dfac4Smrg if test "$build_libtool_libs" = convenience; then 9088e19dfac4Smrg oldobjs="$libobjs_save $symfileobj" 9089e19dfac4Smrg addlibs="$convenience" 9090e19dfac4Smrg build_libtool_libs=no 9091e19dfac4Smrg else 9092e19dfac4Smrg if test "$build_libtool_libs" = module; then 9093e19dfac4Smrg oldobjs="$libobjs_save" 9094e19dfac4Smrg build_libtool_libs=no 9095e19dfac4Smrg else 9096e19dfac4Smrg oldobjs="$old_deplibs $non_pic_objects" 9097e19dfac4Smrg if test "$preload" = yes && test -f "$symfileobj"; then 9098313a12fdSmrg func_append oldobjs " $symfileobj" 9099e19dfac4Smrg fi 9100e19dfac4Smrg fi 9101e19dfac4Smrg addlibs="$old_convenience" 910227702724Smrg fi 910327702724Smrg 9104e19dfac4Smrg if test -n "$addlibs"; then 9105e19dfac4Smrg gentop="$output_objdir/${outputname}x" 9106313a12fdSmrg func_append generated " $gentop" 910727702724Smrg 9108e19dfac4Smrg func_extract_archives $gentop $addlibs 9109313a12fdSmrg func_append oldobjs " $func_extract_archives_result" 9110e19dfac4Smrg fi 911127702724Smrg 9112e19dfac4Smrg # Do each command in the archive commands. 9113e19dfac4Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114e19dfac4Smrg cmds=$old_archive_from_new_cmds 9115e19dfac4Smrg else 911627702724Smrg 9117e19dfac4Smrg # Add any objects from preloaded convenience libraries 9118e19dfac4Smrg if test -n "$dlprefiles"; then 9119e19dfac4Smrg gentop="$output_objdir/${outputname}x" 9120313a12fdSmrg func_append generated " $gentop" 912127702724Smrg 9122e19dfac4Smrg func_extract_archives $gentop $dlprefiles 9123313a12fdSmrg func_append oldobjs " $func_extract_archives_result" 9124e19dfac4Smrg fi 912527702724Smrg 9126e19dfac4Smrg # POSIX demands no paths to be encoded in archives. We have 9127e19dfac4Smrg # to avoid creating archives with duplicate basenames if we 9128e19dfac4Smrg # might have to extract them afterwards, e.g., when creating a 9129e19dfac4Smrg # static archive out of a convenience library, or when linking 9130e19dfac4Smrg # the entirety of a libtool archive into another (currently 9131e19dfac4Smrg # not supported by libtool). 9132e19dfac4Smrg if (for obj in $oldobjs 9133e19dfac4Smrg do 9134e19dfac4Smrg func_basename "$obj" 9135e19dfac4Smrg $ECHO "$func_basename_result" 9136e19dfac4Smrg done | sort | sort -uc >/dev/null 2>&1); then 9137e19dfac4Smrg : 9138e19dfac4Smrg else 9139313a12fdSmrg echo "copying selected object files to avoid basename conflicts..." 9140e19dfac4Smrg gentop="$output_objdir/${outputname}x" 9141313a12fdSmrg func_append generated " $gentop" 9142e19dfac4Smrg func_mkdir_p "$gentop" 9143e19dfac4Smrg save_oldobjs=$oldobjs 9144e19dfac4Smrg oldobjs= 9145e19dfac4Smrg counter=1 9146e19dfac4Smrg for obj in $save_oldobjs 9147e19dfac4Smrg do 9148e19dfac4Smrg func_basename "$obj" 9149e19dfac4Smrg objbase="$func_basename_result" 9150e19dfac4Smrg case " $oldobjs " in 9151e19dfac4Smrg " ") oldobjs=$obj ;; 9152e19dfac4Smrg *[\ /]"$objbase "*) 9153e19dfac4Smrg while :; do 9154e19dfac4Smrg # Make sure we don't pick an alternate name that also 9155e19dfac4Smrg # overlaps. 9156e19dfac4Smrg newobj=lt$counter-$objbase 9157e19dfac4Smrg func_arith $counter + 1 9158e19dfac4Smrg counter=$func_arith_result 9159e19dfac4Smrg case " $oldobjs " in 9160e19dfac4Smrg *[\ /]"$newobj "*) ;; 9161e19dfac4Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162e19dfac4Smrg esac 9163e19dfac4Smrg done 9164e19dfac4Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9165313a12fdSmrg func_append oldobjs " $gentop/$newobj" 9166e19dfac4Smrg ;; 9167313a12fdSmrg *) func_append oldobjs " $obj" ;; 9168e19dfac4Smrg esac 916927702724Smrg done 917027702724Smrg fi 9171313a12fdSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9172313a12fdSmrg tool_oldlib=$func_to_tool_file_result 9173e19dfac4Smrg eval cmds=\"$old_archive_cmds\" 917427702724Smrg 9175e19dfac4Smrg func_len " $cmds" 9176e19dfac4Smrg len=$func_len_result 9177e19dfac4Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178e19dfac4Smrg cmds=$old_archive_cmds 9179313a12fdSmrg elif test -n "$archiver_list_spec"; then 9180313a12fdSmrg func_verbose "using command file archive linking..." 9181313a12fdSmrg for obj in $oldobjs 9182313a12fdSmrg do 9183313a12fdSmrg func_to_tool_file "$obj" 9184313a12fdSmrg $ECHO "$func_to_tool_file_result" 9185313a12fdSmrg done > $output_objdir/$libname.libcmd 9186313a12fdSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 9187313a12fdSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9188313a12fdSmrg cmds=$old_archive_cmds 9189e19dfac4Smrg else 9190e19dfac4Smrg # the command line is too long to link in one step, link in parts 9191e19dfac4Smrg func_verbose "using piecewise archive linking..." 9192e19dfac4Smrg save_RANLIB=$RANLIB 9193e19dfac4Smrg RANLIB=: 9194e19dfac4Smrg objlist= 9195e19dfac4Smrg concat_cmds= 9196e19dfac4Smrg save_oldobjs=$oldobjs 9197e19dfac4Smrg oldobjs= 9198e19dfac4Smrg # Is there a better way of finding the last object in the list? 9199e19dfac4Smrg for obj in $save_oldobjs 9200e19dfac4Smrg do 9201e19dfac4Smrg last_oldobj=$obj 9202e19dfac4Smrg done 9203e19dfac4Smrg eval test_cmds=\"$old_archive_cmds\" 9204e19dfac4Smrg func_len " $test_cmds" 9205e19dfac4Smrg len0=$func_len_result 9206e19dfac4Smrg len=$len0 9207e19dfac4Smrg for obj in $save_oldobjs 9208e19dfac4Smrg do 9209e19dfac4Smrg func_len " $obj" 9210e19dfac4Smrg func_arith $len + $func_len_result 9211e19dfac4Smrg len=$func_arith_result 9212e19dfac4Smrg func_append objlist " $obj" 9213e19dfac4Smrg if test "$len" -lt "$max_cmd_len"; then 9214e19dfac4Smrg : 9215e19dfac4Smrg else 9216e19dfac4Smrg # the above command should be used before it gets too long 9217e19dfac4Smrg oldobjs=$objlist 9218e19dfac4Smrg if test "$obj" = "$last_oldobj" ; then 9219e19dfac4Smrg RANLIB=$save_RANLIB 9220e19dfac4Smrg fi 9221e19dfac4Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222e19dfac4Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223e19dfac4Smrg objlist= 9224e19dfac4Smrg len=$len0 9225e19dfac4Smrg fi 9226e19dfac4Smrg done 9227e19dfac4Smrg RANLIB=$save_RANLIB 9228e19dfac4Smrg oldobjs=$objlist 9229e19dfac4Smrg if test "X$oldobjs" = "X" ; then 9230e19dfac4Smrg eval cmds=\"\$concat_cmds\" 9231e19dfac4Smrg else 9232e19dfac4Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233e19dfac4Smrg fi 9234e19dfac4Smrg fi 9235e19dfac4Smrg fi 9236e19dfac4Smrg func_execute_cmds "$cmds" 'exit $?' 923727702724Smrg done 923827702724Smrg 9239e19dfac4Smrg test -n "$generated" && \ 9240e19dfac4Smrg func_show_eval "${RM}r$generated" 924127702724Smrg 9242e19dfac4Smrg # Now create the libtool archive. 9243e19dfac4Smrg case $output in 9244e19dfac4Smrg *.la) 9245e19dfac4Smrg old_library= 9246e19dfac4Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9247e19dfac4Smrg func_verbose "creating $output" 924827702724Smrg 9249e19dfac4Smrg # Preserve any variables that may affect compiler behavior 9250e19dfac4Smrg for var in $variables_saved_for_relink; do 9251e19dfac4Smrg if eval test -z \"\${$var+set}\"; then 9252e19dfac4Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253e19dfac4Smrg elif eval var_value=\$$var; test -z "$var_value"; then 9254e19dfac4Smrg relink_command="$var=; export $var; $relink_command" 925527702724Smrg else 9256e19dfac4Smrg func_quote_for_eval "$var_value" 9257e19dfac4Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 925827702724Smrg fi 9259e19dfac4Smrg done 9260e19dfac4Smrg # Quote the link command for shipping. 9261e19dfac4Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9262313a12fdSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263e19dfac4Smrg if test "$hardcode_automatic" = yes ; then 9264e19dfac4Smrg relink_command= 9265e19dfac4Smrg fi 926627702724Smrg 9267e19dfac4Smrg # Only create the output if not a dry run. 9268e19dfac4Smrg $opt_dry_run || { 9269e19dfac4Smrg for installed in no yes; do 9270e19dfac4Smrg if test "$installed" = yes; then 9271e19dfac4Smrg if test -z "$install_libdir"; then 9272e19dfac4Smrg break 9273e19dfac4Smrg fi 9274e19dfac4Smrg output="$output_objdir/$outputname"i 9275e19dfac4Smrg # Replace all uninstalled libtool libraries with the installed ones 9276e19dfac4Smrg newdependency_libs= 9277e19dfac4Smrg for deplib in $dependency_libs; do 9278e19dfac4Smrg case $deplib in 9279e19dfac4Smrg *.la) 9280e19dfac4Smrg func_basename "$deplib" 9281e19dfac4Smrg name="$func_basename_result" 9282313a12fdSmrg func_resolve_sysroot "$deplib" 9283313a12fdSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284e19dfac4Smrg test -z "$libdir" && \ 9285e19dfac4Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 9286313a12fdSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9287313a12fdSmrg ;; 9288313a12fdSmrg -L*) 9289313a12fdSmrg func_stripname -L '' "$deplib" 9290313a12fdSmrg func_replace_sysroot "$func_stripname_result" 9291313a12fdSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9292e19dfac4Smrg ;; 9293313a12fdSmrg -R*) 9294313a12fdSmrg func_stripname -R '' "$deplib" 9295313a12fdSmrg func_replace_sysroot "$func_stripname_result" 9296313a12fdSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 9297313a12fdSmrg ;; 9298313a12fdSmrg *) func_append newdependency_libs " $deplib" ;; 9299e19dfac4Smrg esac 9300e19dfac4Smrg done 9301e19dfac4Smrg dependency_libs="$newdependency_libs" 9302e19dfac4Smrg newdlfiles= 9303e19dfac4Smrg 9304e19dfac4Smrg for lib in $dlfiles; do 9305e19dfac4Smrg case $lib in 9306e19dfac4Smrg *.la) 9307e19dfac4Smrg func_basename "$lib" 9308e19dfac4Smrg name="$func_basename_result" 9309e19dfac4Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310e19dfac4Smrg test -z "$libdir" && \ 9311e19dfac4Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 9312313a12fdSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313e19dfac4Smrg ;; 9314313a12fdSmrg *) func_append newdlfiles " $lib" ;; 9315e19dfac4Smrg esac 9316e19dfac4Smrg done 9317e19dfac4Smrg dlfiles="$newdlfiles" 9318e19dfac4Smrg newdlprefiles= 9319e19dfac4Smrg for lib in $dlprefiles; do 9320e19dfac4Smrg case $lib in 9321e19dfac4Smrg *.la) 9322e19dfac4Smrg # Only pass preopened files to the pseudo-archive (for 9323e19dfac4Smrg # eventual linking with the app. that links it) if we 9324e19dfac4Smrg # didn't already link the preopened objects directly into 9325e19dfac4Smrg # the library: 9326e19dfac4Smrg func_basename "$lib" 9327e19dfac4Smrg name="$func_basename_result" 9328e19dfac4Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329e19dfac4Smrg test -z "$libdir" && \ 9330e19dfac4Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 9331313a12fdSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332e19dfac4Smrg ;; 9333e19dfac4Smrg esac 9334e19dfac4Smrg done 9335e19dfac4Smrg dlprefiles="$newdlprefiles" 9336e19dfac4Smrg else 9337e19dfac4Smrg newdlfiles= 9338e19dfac4Smrg for lib in $dlfiles; do 9339e19dfac4Smrg case $lib in 9340e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341e19dfac4Smrg *) abs=`pwd`"/$lib" ;; 9342e19dfac4Smrg esac 9343313a12fdSmrg func_append newdlfiles " $abs" 9344e19dfac4Smrg done 9345e19dfac4Smrg dlfiles="$newdlfiles" 9346e19dfac4Smrg newdlprefiles= 9347e19dfac4Smrg for lib in $dlprefiles; do 9348e19dfac4Smrg case $lib in 9349e19dfac4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350e19dfac4Smrg *) abs=`pwd`"/$lib" ;; 9351e19dfac4Smrg esac 9352313a12fdSmrg func_append newdlprefiles " $abs" 9353e19dfac4Smrg done 9354e19dfac4Smrg dlprefiles="$newdlprefiles" 9355e19dfac4Smrg fi 9356e19dfac4Smrg $RM $output 9357e19dfac4Smrg # place dlname in correct position for cygwin 9358313a12fdSmrg # In fact, it would be nice if we could use this code for all target 9359313a12fdSmrg # systems that can't hard-code library paths into their executables 9360313a12fdSmrg # and that have no shared library path variable independent of PATH, 9361313a12fdSmrg # but it turns out we can't easily determine that from inspecting 9362313a12fdSmrg # libtool variables, so we have to hard-code the OSs to which it 9363313a12fdSmrg # applies here; at the moment, that means platforms that use the PE 9364313a12fdSmrg # object format with DLL files. See the long comment at the top of 9365313a12fdSmrg # tests/bindir.at for full details. 9366e19dfac4Smrg tdlname=$dlname 9367e19dfac4Smrg case $host,$output,$installed,$module,$dlname in 9368313a12fdSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9369313a12fdSmrg # If a -bindir argument was supplied, place the dll there. 9370313a12fdSmrg if test "x$bindir" != x ; 9371313a12fdSmrg then 9372313a12fdSmrg func_relative_path "$install_libdir" "$bindir" 9373313a12fdSmrg tdlname=$func_relative_path_result$dlname 9374313a12fdSmrg else 9375313a12fdSmrg # Otherwise fall back on heuristic. 9376313a12fdSmrg tdlname=../bin/$dlname 9377313a12fdSmrg fi 9378313a12fdSmrg ;; 9379e19dfac4Smrg esac 9380e19dfac4Smrg $ECHO > $output "\ 9381e19dfac4Smrg# $outputname - a libtool library file 9382e19dfac4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383e19dfac4Smrg# 9384e19dfac4Smrg# Please DO NOT delete this file! 9385e19dfac4Smrg# It is necessary for linking the library. 938627702724Smrg 9387e19dfac4Smrg# The name that we can dlopen(3). 9388e19dfac4Smrgdlname='$tdlname' 938927702724Smrg 9390e19dfac4Smrg# Names of this library. 9391e19dfac4Smrglibrary_names='$library_names' 939227702724Smrg 9393e19dfac4Smrg# The name of the static archive. 9394e19dfac4Smrgold_library='$old_library' 939527702724Smrg 9396e19dfac4Smrg# Linker flags that can not go in dependency_libs. 9397e19dfac4Smrginherited_linker_flags='$new_inherited_linker_flags' 939827702724Smrg 9399e19dfac4Smrg# Libraries that this one depends upon. 9400e19dfac4Smrgdependency_libs='$dependency_libs' 940127702724Smrg 9402e19dfac4Smrg# Names of additional weak libraries provided by this library 9403e19dfac4Smrgweak_library_names='$weak_libs' 940427702724Smrg 9405e19dfac4Smrg# Version information for $libname. 9406e19dfac4Smrgcurrent=$current 9407e19dfac4Smrgage=$age 9408e19dfac4Smrgrevision=$revision 940927702724Smrg 9410e19dfac4Smrg# Is this an already installed library? 9411e19dfac4Smrginstalled=$installed 941227702724Smrg 9413e19dfac4Smrg# Should we warn about portability when linking against -modules? 9414e19dfac4Smrgshouldnotlink=$module 941527702724Smrg 9416e19dfac4Smrg# Files to dlopen/dlpreopen 9417e19dfac4Smrgdlopen='$dlfiles' 9418e19dfac4Smrgdlpreopen='$dlprefiles' 941927702724Smrg 9420e19dfac4Smrg# Directory that this library needs to be installed in: 9421e19dfac4Smrglibdir='$install_libdir'" 9422e19dfac4Smrg if test "$installed" = no && test "$need_relink" = yes; then 9423e19dfac4Smrg $ECHO >> $output "\ 9424e19dfac4Smrgrelink_command=\"$relink_command\"" 9425e19dfac4Smrg fi 9426e19dfac4Smrg done 9427e19dfac4Smrg } 942827702724Smrg 9429e19dfac4Smrg # Do a symbolic link so that the libtool archive can be found in 9430e19dfac4Smrg # LD_LIBRARY_PATH before the program is installed. 9431e19dfac4Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432e19dfac4Smrg ;; 9433e19dfac4Smrg esac 9434e19dfac4Smrg exit $EXIT_SUCCESS 9435e19dfac4Smrg} 943627702724Smrg 9437313a12fdSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438e19dfac4Smrg func_mode_link ${1+"$@"} 943927702724Smrg 944027702724Smrg 9441e19dfac4Smrg# func_mode_uninstall arg... 9442e19dfac4Smrgfunc_mode_uninstall () 9443e19dfac4Smrg{ 9444e19dfac4Smrg $opt_debug 9445e19dfac4Smrg RM="$nonopt" 944627702724Smrg files= 944727702724Smrg rmforce= 944827702724Smrg exit_status=0 944927702724Smrg 945027702724Smrg # This variable tells wrapper scripts just to set variables rather 945127702724Smrg # than running their programs. 945227702724Smrg libtool_install_magic="$magic" 945327702724Smrg 945427702724Smrg for arg 945527702724Smrg do 945627702724Smrg case $arg in 9457313a12fdSmrg -f) func_append RM " $arg"; rmforce=yes ;; 9458313a12fdSmrg -*) func_append RM " $arg" ;; 9459313a12fdSmrg *) func_append files " $arg" ;; 946027702724Smrg esac 946127702724Smrg done 946227702724Smrg 9463e19dfac4Smrg test -z "$RM" && \ 9464e19dfac4Smrg func_fatal_help "you must specify an RM program" 946527702724Smrg 946627702724Smrg rmdirs= 946727702724Smrg 946827702724Smrg for file in $files; do 9469e19dfac4Smrg func_dirname "$file" "" "." 9470e19dfac4Smrg dir="$func_dirname_result" 9471e19dfac4Smrg if test "X$dir" = X.; then 9472313a12fdSmrg odir="$objdir" 947327702724Smrg else 9474313a12fdSmrg odir="$dir/$objdir" 947527702724Smrg fi 9476e19dfac4Smrg func_basename "$file" 9477e19dfac4Smrg name="$func_basename_result" 9478313a12fdSmrg test "$opt_mode" = uninstall && odir="$dir" 947927702724Smrg 9480313a12fdSmrg # Remember odir for removal later, being careful to avoid duplicates 9481313a12fdSmrg if test "$opt_mode" = clean; then 948227702724Smrg case " $rmdirs " in 9483313a12fdSmrg *" $odir "*) ;; 9484313a12fdSmrg *) func_append rmdirs " $odir" ;; 948527702724Smrg esac 948627702724Smrg fi 948727702724Smrg 948827702724Smrg # Don't error if the file doesn't exist and rm -f was used. 9489e19dfac4Smrg if { test -L "$file"; } >/dev/null 2>&1 || 9490e19dfac4Smrg { test -h "$file"; } >/dev/null 2>&1 || 9491e19dfac4Smrg test -f "$file"; then 949227702724Smrg : 949327702724Smrg elif test -d "$file"; then 949427702724Smrg exit_status=1 949527702724Smrg continue 949627702724Smrg elif test "$rmforce" = yes; then 949727702724Smrg continue 949827702724Smrg fi 949927702724Smrg 950027702724Smrg rmfiles="$file" 950127702724Smrg 950227702724Smrg case $name in 950327702724Smrg *.la) 950427702724Smrg # Possibly a libtool archive, so verify it. 9505e19dfac4Smrg if func_lalib_p "$file"; then 9506e19dfac4Smrg func_source $dir/$name 950727702724Smrg 950827702724Smrg # Delete the libtool libraries and symlinks. 950927702724Smrg for n in $library_names; do 9510313a12fdSmrg func_append rmfiles " $odir/$n" 951127702724Smrg done 9512313a12fdSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 951327702724Smrg 9514313a12fdSmrg case "$opt_mode" in 951527702724Smrg clean) 9516313a12fdSmrg case " $library_names " in 951727702724Smrg *" $dlname "*) ;; 9518313a12fdSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 951927702724Smrg esac 9520313a12fdSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 952127702724Smrg ;; 952227702724Smrg uninstall) 952327702724Smrg if test -n "$library_names"; then 952427702724Smrg # Do each command in the postuninstall commands. 9525e19dfac4Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 952627702724Smrg fi 952727702724Smrg 952827702724Smrg if test -n "$old_library"; then 952927702724Smrg # Do each command in the old_postuninstall commands. 9530e19dfac4Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 953127702724Smrg fi 953227702724Smrg # FIXME: should reinstall the best remaining shared library. 953327702724Smrg ;; 953427702724Smrg esac 953527702724Smrg fi 953627702724Smrg ;; 953727702724Smrg 953827702724Smrg *.lo) 953927702724Smrg # Possibly a libtool object, so verify it. 9540e19dfac4Smrg if func_lalib_p "$file"; then 954127702724Smrg 954227702724Smrg # Read the .lo file 9543e19dfac4Smrg func_source $dir/$name 954427702724Smrg 954527702724Smrg # Add PIC object to the list of files to remove. 9546e19dfac4Smrg if test -n "$pic_object" && 9547e19dfac4Smrg test "$pic_object" != none; then 9548313a12fdSmrg func_append rmfiles " $dir/$pic_object" 954927702724Smrg fi 955027702724Smrg 955127702724Smrg # Add non-PIC object to the list of files to remove. 9552e19dfac4Smrg if test -n "$non_pic_object" && 9553e19dfac4Smrg test "$non_pic_object" != none; then 9554313a12fdSmrg func_append rmfiles " $dir/$non_pic_object" 955527702724Smrg fi 955627702724Smrg fi 955727702724Smrg ;; 955827702724Smrg 955927702724Smrg *) 9560313a12fdSmrg if test "$opt_mode" = clean ; then 956127702724Smrg noexename=$name 956227702724Smrg case $file in 956327702724Smrg *.exe) 9564e19dfac4Smrg func_stripname '' '.exe' "$file" 9565e19dfac4Smrg file=$func_stripname_result 9566e19dfac4Smrg func_stripname '' '.exe' "$name" 9567e19dfac4Smrg noexename=$func_stripname_result 956827702724Smrg # $file with .exe has already been added to rmfiles, 956927702724Smrg # add $file without .exe 9570313a12fdSmrg func_append rmfiles " $file" 957127702724Smrg ;; 957227702724Smrg esac 957327702724Smrg # Do a test to see if this is a libtool program. 9574e19dfac4Smrg if func_ltwrapper_p "$file"; then 9575e19dfac4Smrg if func_ltwrapper_executable_p "$file"; then 9576e19dfac4Smrg func_ltwrapper_scriptname "$file" 9577e19dfac4Smrg relink_command= 9578e19dfac4Smrg func_source $func_ltwrapper_scriptname_result 9579313a12fdSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9580e19dfac4Smrg else 9581e19dfac4Smrg relink_command= 9582e19dfac4Smrg func_source $dir/$noexename 9583e19dfac4Smrg fi 958427702724Smrg 958527702724Smrg # note $name still contains .exe if it was in $file originally 958627702724Smrg # as does the version of $file that was added into $rmfiles 9587313a12fdSmrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 958827702724Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 9589313a12fdSmrg func_append rmfiles " $odir/lt-$name" 959027702724Smrg fi 959127702724Smrg if test "X$noexename" != "X$name" ; then 9592313a12fdSmrg func_append rmfiles " $odir/lt-${noexename}.c" 959327702724Smrg fi 959427702724Smrg fi 959527702724Smrg fi 959627702724Smrg ;; 959727702724Smrg esac 9598e19dfac4Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 959927702724Smrg done 960027702724Smrg 960127702724Smrg # Try to remove the ${objdir}s in the directories where we deleted files 960227702724Smrg for dir in $rmdirs; do 960327702724Smrg if test -d "$dir"; then 9604e19dfac4Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 960527702724Smrg fi 960627702724Smrg done 960727702724Smrg 960827702724Smrg exit $exit_status 9609e19dfac4Smrg} 961027702724Smrg 9611313a12fdSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612e19dfac4Smrg func_mode_uninstall ${1+"$@"} 961327702724Smrg 9614313a12fdSmrgtest -z "$opt_mode" && { 9615e19dfac4Smrg help="$generic_help" 9616e19dfac4Smrg func_fatal_help "you must specify a MODE" 9617e19dfac4Smrg} 9618e19dfac4Smrg 9619e19dfac4Smrgtest -z "$exec_cmd" && \ 9620313a12fdSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 962127702724Smrg 962227702724Smrgif test -n "$exec_cmd"; then 9623e19dfac4Smrg eval exec "$exec_cmd" 962427702724Smrg exit $EXIT_FAILURE 962527702724Smrgfi 962627702724Smrg 9627e19dfac4Smrgexit $exit_status 962827702724Smrg 962927702724Smrg 963027702724Smrg# The TAGs below are defined such that we never get into a situation 963127702724Smrg# in which we disable both kinds of libraries. Given conflicting 963227702724Smrg# choices, we go for a static library, that is the most portable, 963327702724Smrg# since we can't tell whether shared libraries were disabled because 963427702724Smrg# the user asked for that or because the platform doesn't support 963527702724Smrg# them. This is particularly important on AIX, because we don't 963627702724Smrg# support having both static and shared libraries enabled at the same 963727702724Smrg# time on that platform, so we default to a shared-only configuration. 963827702724Smrg# If a disable-shared tag is given, we'll fallback to a static-only 963927702724Smrg# configuration. But we'll never go from static-only to shared-only. 964027702724Smrg 964127702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642e19dfac4Smrgbuild_libtool_libs=no 9643e19dfac4Smrgbuild_old_libs=yes 964427702724Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 964527702724Smrg 964627702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647e19dfac4Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 964827702724Smrg# ### END LIBTOOL TAG CONFIG: disable-static 964927702724Smrg 965027702724Smrg# Local Variables: 965127702724Smrg# mode:shell-script 965227702724Smrg# sh-indentation:2 965327702724Smrg# End: 9654e19dfac4Smrg# vi:sw=2 9655e19dfac4Smrg 9656