ltmain.sh revision 1bedbe3f
1549e21daSmrg 21bedbe3fSmrg# libtool (GNU libtool) 2.4.2 3549e21daSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4549e21daSmrg 5549e21daSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 61bedbe3fSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7549e21daSmrg# This is free software; see the source for copying conditions. There is NO 8549e21daSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9549e21daSmrg 10549e21daSmrg# GNU Libtool is free software; you can redistribute it and/or modify 11ba6a1819Smrg# it under the terms of the GNU General Public License as published by 12ba6a1819Smrg# the Free Software Foundation; either version 2 of the License, or 13ba6a1819Smrg# (at your option) any later version. 14ba6a1819Smrg# 15549e21daSmrg# As a special exception to the GNU General Public License, 16549e21daSmrg# if you distribute this file as part of a program or library that 17549e21daSmrg# is built using GNU Libtool, you may include this file under the 18549e21daSmrg# same distribution terms that you use for the rest of that program. 19549e21daSmrg# 20549e21daSmrg# GNU Libtool is distributed in the hope that it will be useful, but 21ba6a1819Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22ba6a1819Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23ba6a1819Smrg# General Public License for more details. 24ba6a1819Smrg# 25ba6a1819Smrg# You should have received a copy of the GNU General Public License 26549e21daSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 27549e21daSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28549e21daSmrg# or obtained by writing to the Free Software Foundation, Inc., 29549e21daSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30549e21daSmrg 31549e21daSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 32549e21daSmrg# 33549e21daSmrg# Provide generalized library-building support services. 34ba6a1819Smrg# 35549e21daSmrg# --config show all configuration variables 36549e21daSmrg# --debug enable verbose shell tracing 37549e21daSmrg# -n, --dry-run display commands without modifying any files 38549e21daSmrg# --features display basic configuration information and exit 39549e21daSmrg# --mode=MODE use operation mode MODE 40549e21daSmrg# --preserve-dup-deps don't remove duplicate dependency libraries 41549e21daSmrg# --quiet, --silent don't print informational messages 42549e21daSmrg# --no-quiet, --no-silent 43549e21daSmrg# print informational messages (default) 441bedbe3fSmrg# --no-warn don't display warning messages 45549e21daSmrg# --tag=TAG use configuration variables from tag TAG 46549e21daSmrg# -v, --verbose print more informational messages than default 47549e21daSmrg# --no-verbose don't print the extra informational messages 48549e21daSmrg# --version print version information 49549e21daSmrg# -h, --help, --help-all print short, long, or detailed help message 50549e21daSmrg# 51549e21daSmrg# MODE must be one of the following: 52549e21daSmrg# 53549e21daSmrg# clean remove files from the build directory 54549e21daSmrg# compile compile a source file into a libtool object 55549e21daSmrg# execute automatically set library path, then run a program 56549e21daSmrg# finish complete the installation of libtool libraries 57549e21daSmrg# install install libraries or executables 58549e21daSmrg# link create a library or an executable 59549e21daSmrg# uninstall remove libraries from an installed directory 60549e21daSmrg# 61549e21daSmrg# MODE-ARGS vary depending on the MODE. When passed as first option, 62549e21daSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63549e21daSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64549e21daSmrg# 65549e21daSmrg# When reporting a bug, please describe a test case to reproduce it and 66549e21daSmrg# include the following information: 67549e21daSmrg# 68549e21daSmrg# host-triplet: $host 69549e21daSmrg# shell: $SHELL 70549e21daSmrg# compiler: $LTCC 71549e21daSmrg# compiler flags: $LTCFLAGS 72549e21daSmrg# linker: $LD (gnu? $with_gnu_ld) 731bedbe3fSmrg# $progname: (GNU libtool) 2.4.2 74549e21daSmrg# automake: $automake_version 75549e21daSmrg# autoconf: $autoconf_version 76549e21daSmrg# 77549e21daSmrg# Report bugs to <bug-libtool@gnu.org>. 781bedbe3fSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 791bedbe3fSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 80549e21daSmrg 81549e21daSmrgPROGRAM=libtool 82549e21daSmrgPACKAGE=libtool 831bedbe3fSmrgVERSION=2.4.2 84549e21daSmrgTIMESTAMP="" 851bedbe3fSmrgpackage_revision=1.3337 86549e21daSmrg 87549e21daSmrg# Be Bourne compatible 88549e21daSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 89549e21daSmrg emulate sh 90549e21daSmrg NULLCMD=: 91549e21daSmrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 92549e21daSmrg # is contrary to our usage. Disable this feature. 93549e21daSmrg alias -g '${1+"$@"}'='"$@"' 94549e21daSmrg setopt NO_GLOB_SUBST 95549e21daSmrgelse 96549e21daSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97549e21daSmrgfi 98549e21daSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 99549e21daSmrgDUALCASE=1; export DUALCASE # for MKS sh 100549e21daSmrg 101549e21daSmrg# A function that is used when there is no print builtin or printf. 102549e21daSmrgfunc_fallback_echo () 103549e21daSmrg{ 104549e21daSmrg eval 'cat <<_LTECHO_EOF 105549e21daSmrg$1 106549e21daSmrg_LTECHO_EOF' 107549e21daSmrg} 108549e21daSmrg 109549e21daSmrg# NLS nuisances: We save the old values to restore during execute mode. 110549e21daSmrglt_user_locale= 111549e21daSmrglt_safe_locale= 112549e21daSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 113549e21daSmrgdo 114549e21daSmrg eval "if test \"\${$lt_var+set}\" = set; then 115549e21daSmrg save_$lt_var=\$$lt_var 116549e21daSmrg $lt_var=C 117549e21daSmrg export $lt_var 118549e21daSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119549e21daSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 120549e21daSmrg fi" 121549e21daSmrgdone 122549e21daSmrgLC_ALL=C 123549e21daSmrgLANGUAGE=C 124549e21daSmrgexport LANGUAGE LC_ALL 125549e21daSmrg 126549e21daSmrg$lt_unset CDPATH 127ba6a1819Smrg 128ba6a1819Smrg 129ba6a1819Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 130ba6a1819Smrg# is ksh but when the shell is invoked as "sh" and the current value of 131ba6a1819Smrg# the _XPG environment variable is not equal to 1 (one), the special 132ba6a1819Smrg# positional parameter $0, within a function call, is the name of the 133ba6a1819Smrg# function. 134ba6a1819Smrgprogpath="$0" 135ba6a1819Smrg 136549e21daSmrg 137549e21daSmrg 138549e21daSmrg: ${CP="cp -f"} 139549e21daSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140549e21daSmrg: ${MAKE="make"} 141549e21daSmrg: ${MKDIR="mkdir"} 142549e21daSmrg: ${MV="mv -f"} 143549e21daSmrg: ${RM="rm -f"} 144549e21daSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145549e21daSmrg: ${Xsed="$SED -e 1s/^X//"} 146ba6a1819Smrg 147ba6a1819Smrg# Global variables: 148ba6a1819SmrgEXIT_SUCCESS=0 149ba6a1819SmrgEXIT_FAILURE=1 150549e21daSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151549e21daSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152ba6a1819Smrg 153549e21daSmrgexit_status=$EXIT_SUCCESS 154ba6a1819Smrg 155549e21daSmrg# Make sure IFS has a sensible default 156549e21daSmrglt_nl=' 157549e21daSmrg' 158549e21daSmrgIFS=" $lt_nl" 159ba6a1819Smrg 160549e21daSmrgdirname="s,/[^/]*$,," 161549e21daSmrgbasename="s,^.*/,," 162549e21daSmrg 1631bedbe3fSmrg# func_dirname file append nondir_replacement 1641bedbe3fSmrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 1651bedbe3fSmrg# otherwise set result to NONDIR_REPLACEMENT. 1661bedbe3fSmrgfunc_dirname () 1671bedbe3fSmrg{ 1681bedbe3fSmrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 1691bedbe3fSmrg if test "X$func_dirname_result" = "X${1}"; then 1701bedbe3fSmrg func_dirname_result="${3}" 1711bedbe3fSmrg else 1721bedbe3fSmrg func_dirname_result="$func_dirname_result${2}" 1731bedbe3fSmrg fi 1741bedbe3fSmrg} # func_dirname may be replaced by extended shell implementation 1751bedbe3fSmrg 1761bedbe3fSmrg 1771bedbe3fSmrg# func_basename file 1781bedbe3fSmrgfunc_basename () 1791bedbe3fSmrg{ 1801bedbe3fSmrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 1811bedbe3fSmrg} # func_basename may be replaced by extended shell implementation 1821bedbe3fSmrg 1831bedbe3fSmrg 184549e21daSmrg# func_dirname_and_basename file append nondir_replacement 185549e21daSmrg# perform func_basename and func_dirname in a single function 186549e21daSmrg# call: 187549e21daSmrg# dirname: Compute the dirname of FILE. If nonempty, 188549e21daSmrg# add APPEND to the result, otherwise set result 189549e21daSmrg# to NONDIR_REPLACEMENT. 190549e21daSmrg# value returned in "$func_dirname_result" 191549e21daSmrg# basename: Compute filename of FILE. 192549e21daSmrg# value retuned in "$func_basename_result" 193549e21daSmrg# Implementation must be kept synchronized with func_dirname 194549e21daSmrg# and func_basename. For efficiency, we do not delegate to 195549e21daSmrg# those functions but instead duplicate the functionality here. 196549e21daSmrgfunc_dirname_and_basename () 197549e21daSmrg{ 1981bedbe3fSmrg # Extract subdirectory from the argument. 1991bedbe3fSmrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 2001bedbe3fSmrg if test "X$func_dirname_result" = "X${1}"; then 2011bedbe3fSmrg func_dirname_result="${3}" 2021bedbe3fSmrg else 2031bedbe3fSmrg func_dirname_result="$func_dirname_result${2}" 2041bedbe3fSmrg fi 2051bedbe3fSmrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 2061bedbe3fSmrg} # func_dirname_and_basename may be replaced by extended shell implementation 2071bedbe3fSmrg 2081bedbe3fSmrg 2091bedbe3fSmrg# func_stripname prefix suffix name 2101bedbe3fSmrg# strip PREFIX and SUFFIX off of NAME. 2111bedbe3fSmrg# PREFIX and SUFFIX must not contain globbing or regex special 2121bedbe3fSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading 2131bedbe3fSmrg# dot (in which case that matches only a dot). 2141bedbe3fSmrg# func_strip_suffix prefix name 2151bedbe3fSmrgfunc_stripname () 2161bedbe3fSmrg{ 2171bedbe3fSmrg case ${2} in 2181bedbe3fSmrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 2191bedbe3fSmrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 2201bedbe3fSmrg esac 2211bedbe3fSmrg} # func_stripname may be replaced by extended shell implementation 222ba6a1819Smrg 223549e21daSmrg 224549e21daSmrg# These SED scripts presuppose an absolute path with a trailing slash. 225549e21daSmrgpathcar='s,^/\([^/]*\).*$,\1,' 226549e21daSmrgpathcdr='s,^/[^/]*,,' 227549e21daSmrgremovedotparts=':dotsl 228549e21daSmrg s@/\./@/@g 229549e21daSmrg t dotsl 230549e21daSmrg s,/\.$,/,' 231549e21daSmrgcollapseslashes='s@/\{1,\}@/@g' 232549e21daSmrgfinalslash='s,/*$,/,' 233549e21daSmrg 234549e21daSmrg# func_normal_abspath PATH 235549e21daSmrg# Remove doubled-up and trailing slashes, "." path components, 236549e21daSmrg# and cancel out any ".." path components in PATH after making 237549e21daSmrg# it an absolute path. 238549e21daSmrg# value returned in "$func_normal_abspath_result" 239549e21daSmrgfunc_normal_abspath () 240549e21daSmrg{ 241549e21daSmrg # Start from root dir and reassemble the path. 242549e21daSmrg func_normal_abspath_result= 243549e21daSmrg func_normal_abspath_tpath=$1 244549e21daSmrg func_normal_abspath_altnamespace= 245549e21daSmrg case $func_normal_abspath_tpath in 246549e21daSmrg "") 247549e21daSmrg # Empty path, that just means $cwd. 248549e21daSmrg func_stripname '' '/' "`pwd`" 249549e21daSmrg func_normal_abspath_result=$func_stripname_result 250549e21daSmrg return 251549e21daSmrg ;; 252549e21daSmrg # The next three entries are used to spot a run of precisely 253549e21daSmrg # two leading slashes without using negated character classes; 254549e21daSmrg # we take advantage of case's first-match behaviour. 255549e21daSmrg ///*) 256549e21daSmrg # Unusual form of absolute path, do nothing. 257549e21daSmrg ;; 258549e21daSmrg //*) 259549e21daSmrg # Not necessarily an ordinary path; POSIX reserves leading '//' 260549e21daSmrg # and for example Cygwin uses it to access remote file shares 261549e21daSmrg # over CIFS/SMB, so we conserve a leading double slash if found. 262549e21daSmrg func_normal_abspath_altnamespace=/ 263549e21daSmrg ;; 264549e21daSmrg /*) 265549e21daSmrg # Absolute path, do nothing. 266549e21daSmrg ;; 267549e21daSmrg *) 268549e21daSmrg # Relative path, prepend $cwd. 269549e21daSmrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 270549e21daSmrg ;; 271549e21daSmrg esac 272549e21daSmrg # Cancel out all the simple stuff to save iterations. We also want 273549e21daSmrg # the path to end with a slash for ease of parsing, so make sure 274549e21daSmrg # there is one (and only one) here. 275549e21daSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 276549e21daSmrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 277549e21daSmrg while :; do 278549e21daSmrg # Processed it all yet? 279549e21daSmrg if test "$func_normal_abspath_tpath" = / ; then 280549e21daSmrg # If we ascended to the root using ".." the result may be empty now. 281549e21daSmrg if test -z "$func_normal_abspath_result" ; then 282549e21daSmrg func_normal_abspath_result=/ 283549e21daSmrg fi 284549e21daSmrg break 285549e21daSmrg fi 286549e21daSmrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 287549e21daSmrg -e "$pathcar"` 288549e21daSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 289549e21daSmrg -e "$pathcdr"` 290549e21daSmrg # Figure out what to do with it 291549e21daSmrg case $func_normal_abspath_tcomponent in 292549e21daSmrg "") 293549e21daSmrg # Trailing empty path component, ignore it. 294549e21daSmrg ;; 295549e21daSmrg ..) 296549e21daSmrg # Parent dir; strip last assembled component from result. 297549e21daSmrg func_dirname "$func_normal_abspath_result" 298549e21daSmrg func_normal_abspath_result=$func_dirname_result 299549e21daSmrg ;; 300549e21daSmrg *) 301549e21daSmrg # Actual path component, append it. 302549e21daSmrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 303549e21daSmrg ;; 304549e21daSmrg esac 305549e21daSmrg done 306549e21daSmrg # Restore leading double-slash if one was found on entry. 307549e21daSmrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308549e21daSmrg} 309ba6a1819Smrg 310549e21daSmrg# func_relative_path SRCDIR DSTDIR 311549e21daSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 312549e21daSmrg# slash if non-empty, suitable for immediately appending a filename 313549e21daSmrg# without needing to append a separator. 314549e21daSmrg# value returned in "$func_relative_path_result" 315549e21daSmrgfunc_relative_path () 316549e21daSmrg{ 317549e21daSmrg func_relative_path_result= 318549e21daSmrg func_normal_abspath "$1" 319549e21daSmrg func_relative_path_tlibdir=$func_normal_abspath_result 320549e21daSmrg func_normal_abspath "$2" 321549e21daSmrg func_relative_path_tbindir=$func_normal_abspath_result 322549e21daSmrg 323549e21daSmrg # Ascend the tree starting from libdir 324549e21daSmrg while :; do 325549e21daSmrg # check if we have found a prefix of bindir 326549e21daSmrg case $func_relative_path_tbindir in 327549e21daSmrg $func_relative_path_tlibdir) 328549e21daSmrg # found an exact match 329549e21daSmrg func_relative_path_tcancelled= 330549e21daSmrg break 331549e21daSmrg ;; 332549e21daSmrg $func_relative_path_tlibdir*) 333549e21daSmrg # found a matching prefix 334549e21daSmrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 335549e21daSmrg func_relative_path_tcancelled=$func_stripname_result 336549e21daSmrg if test -z "$func_relative_path_result"; then 337549e21daSmrg func_relative_path_result=. 338549e21daSmrg fi 339549e21daSmrg break 340549e21daSmrg ;; 341549e21daSmrg *) 342549e21daSmrg func_dirname $func_relative_path_tlibdir 343549e21daSmrg func_relative_path_tlibdir=${func_dirname_result} 344549e21daSmrg if test "x$func_relative_path_tlibdir" = x ; then 345549e21daSmrg # Have to descend all the way to the root! 346549e21daSmrg func_relative_path_result=../$func_relative_path_result 347549e21daSmrg func_relative_path_tcancelled=$func_relative_path_tbindir 348549e21daSmrg break 349549e21daSmrg fi 350549e21daSmrg func_relative_path_result=../$func_relative_path_result 351549e21daSmrg ;; 352549e21daSmrg esac 353549e21daSmrg done 354549e21daSmrg 355549e21daSmrg # Now calculate path; take care to avoid doubling-up slashes. 356549e21daSmrg func_stripname '' '/' "$func_relative_path_result" 357549e21daSmrg func_relative_path_result=$func_stripname_result 358549e21daSmrg func_stripname '/' '/' "$func_relative_path_tcancelled" 359549e21daSmrg if test "x$func_stripname_result" != x ; then 360549e21daSmrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 361549e21daSmrg fi 362549e21daSmrg 363549e21daSmrg # Normalisation. If bindir is libdir, return empty string, 364549e21daSmrg # else relative path ending with a slash; either way, target 365549e21daSmrg # file name can be directly appended. 366549e21daSmrg if test ! -z "$func_relative_path_result"; then 367549e21daSmrg func_stripname './' '' "$func_relative_path_result/" 368549e21daSmrg func_relative_path_result=$func_stripname_result 369549e21daSmrg fi 370549e21daSmrg} 371549e21daSmrg 372549e21daSmrg# The name of this program: 373549e21daSmrgfunc_dirname_and_basename "$progpath" 374549e21daSmrgprogname=$func_basename_result 375549e21daSmrg 376549e21daSmrg# Make sure we have an absolute path for reexecution: 377549e21daSmrgcase $progpath in 378549e21daSmrg [\\/]*|[A-Za-z]:\\*) ;; 379549e21daSmrg *[\\/]*) 380549e21daSmrg progdir=$func_dirname_result 381549e21daSmrg progdir=`cd "$progdir" && pwd` 382549e21daSmrg progpath="$progdir/$progname" 383549e21daSmrg ;; 384549e21daSmrg *) 385549e21daSmrg save_IFS="$IFS" 3861bedbe3fSmrg IFS=${PATH_SEPARATOR-:} 387549e21daSmrg for progdir in $PATH; do 388549e21daSmrg IFS="$save_IFS" 389549e21daSmrg test -x "$progdir/$progname" && break 390549e21daSmrg done 391549e21daSmrg IFS="$save_IFS" 392549e21daSmrg test -n "$progdir" || progdir=`pwd` 393549e21daSmrg progpath="$progdir/$progname" 394549e21daSmrg ;; 395549e21daSmrgesac 396ba6a1819Smrg 397ba6a1819Smrg# Sed substitution that helps us do robust quoting. It backslashifies 398ba6a1819Smrg# metacharacters that are still active within double-quoted strings. 399ba6a1819SmrgXsed="${SED}"' -e 1s/^X//' 400549e21daSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401549e21daSmrg 402549e21daSmrg# Same as above, but do not quote variable references. 403549e21daSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404549e21daSmrg 4051bedbe3fSmrg# Sed substitution that turns a string into a regex matching for the 4061bedbe3fSmrg# string literally. 4071bedbe3fSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 4081bedbe3fSmrg 4091bedbe3fSmrg# Sed substitution that converts a w32 file name or path 4101bedbe3fSmrg# which contains forward slashes, into one that contains 4111bedbe3fSmrg# (escaped) backslashes. A very naive implementation. 4121bedbe3fSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 4131bedbe3fSmrg 414549e21daSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 415549e21daSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416549e21daSmrg# in input to double_quote_subst, that '$' was protected from expansion. 417549e21daSmrg# Since each input `\' is now two `\'s, look for any number of runs of 418549e21daSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419549e21daSmrgbs='\\' 420549e21daSmrgbs2='\\\\' 421549e21daSmrgbs4='\\\\\\\\' 422549e21daSmrgdollar='\$' 423549e21daSmrgsed_double_backslash="\ 424549e21daSmrg s/$bs4/&\\ 425549e21daSmrg/g 426549e21daSmrg s/^$bs2$dollar/$bs&/ 427549e21daSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428549e21daSmrg s/\n//g" 429549e21daSmrg 430549e21daSmrg# Standard options: 431549e21daSmrgopt_dry_run=false 432549e21daSmrgopt_help=false 433549e21daSmrgopt_quiet=false 434549e21daSmrgopt_verbose=false 435549e21daSmrgopt_warning=: 436549e21daSmrg 437549e21daSmrg# func_echo arg... 438549e21daSmrg# Echo program name prefixed message, along with the current mode 439549e21daSmrg# name if it has been set yet. 440549e21daSmrgfunc_echo () 441549e21daSmrg{ 4421bedbe3fSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443549e21daSmrg} 444ba6a1819Smrg 445549e21daSmrg# func_verbose arg... 446549e21daSmrg# Echo program name prefixed message in verbose mode only. 447549e21daSmrgfunc_verbose () 448549e21daSmrg{ 449549e21daSmrg $opt_verbose && func_echo ${1+"$@"} 450ba6a1819Smrg 451549e21daSmrg # A bug in bash halts the script if the last line of a function 452549e21daSmrg # fails when set -e is in force, so we need another command to 453549e21daSmrg # work around that: 454549e21daSmrg : 455549e21daSmrg} 456ba6a1819Smrg 457549e21daSmrg# func_echo_all arg... 458549e21daSmrg# Invoke $ECHO with all args, space-separated. 459549e21daSmrgfunc_echo_all () 460549e21daSmrg{ 461549e21daSmrg $ECHO "$*" 462549e21daSmrg} 463ba6a1819Smrg 464549e21daSmrg# func_error arg... 465549e21daSmrg# Echo program name prefixed message to standard error. 466549e21daSmrgfunc_error () 467549e21daSmrg{ 4681bedbe3fSmrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469549e21daSmrg} 470549e21daSmrg 471549e21daSmrg# func_warning arg... 472549e21daSmrg# Echo program name prefixed warning message to standard error. 473549e21daSmrgfunc_warning () 474549e21daSmrg{ 4751bedbe3fSmrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476549e21daSmrg 477549e21daSmrg # bash bug again: 478549e21daSmrg : 479549e21daSmrg} 480549e21daSmrg 481549e21daSmrg# func_fatal_error arg... 482549e21daSmrg# Echo program name prefixed message to standard error, and exit. 483549e21daSmrgfunc_fatal_error () 484549e21daSmrg{ 485549e21daSmrg func_error ${1+"$@"} 486549e21daSmrg exit $EXIT_FAILURE 487549e21daSmrg} 488549e21daSmrg 489549e21daSmrg# func_fatal_help arg... 490549e21daSmrg# Echo program name prefixed message to standard error, followed by 491549e21daSmrg# a help hint, and exit. 492549e21daSmrgfunc_fatal_help () 493549e21daSmrg{ 494549e21daSmrg func_error ${1+"$@"} 495549e21daSmrg func_fatal_error "$help" 496549e21daSmrg} 497549e21daSmrghelp="Try \`$progname --help' for more information." ## default 498549e21daSmrg 499549e21daSmrg 500549e21daSmrg# func_grep expression filename 501549e21daSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502549e21daSmrgfunc_grep () 503549e21daSmrg{ 504549e21daSmrg $GREP "$1" "$2" >/dev/null 2>&1 505549e21daSmrg} 506549e21daSmrg 507549e21daSmrg 508549e21daSmrg# func_mkdir_p directory-path 509549e21daSmrg# Make sure the entire path to DIRECTORY-PATH is available. 510549e21daSmrgfunc_mkdir_p () 511549e21daSmrg{ 512549e21daSmrg my_directory_path="$1" 513549e21daSmrg my_dir_list= 514549e21daSmrg 515549e21daSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516549e21daSmrg 517549e21daSmrg # Protect directory names starting with `-' 518549e21daSmrg case $my_directory_path in 519549e21daSmrg -*) my_directory_path="./$my_directory_path" ;; 520549e21daSmrg esac 521549e21daSmrg 522549e21daSmrg # While some portion of DIR does not yet exist... 523549e21daSmrg while test ! -d "$my_directory_path"; do 524549e21daSmrg # ...make a list in topmost first order. Use a colon delimited 525549e21daSmrg # list incase some portion of path contains whitespace. 526549e21daSmrg my_dir_list="$my_directory_path:$my_dir_list" 527549e21daSmrg 528549e21daSmrg # If the last portion added has no slash in it, the list is done 529549e21daSmrg case $my_directory_path in */*) ;; *) break ;; esac 530549e21daSmrg 531549e21daSmrg # ...otherwise throw away the child directory and loop 532549e21daSmrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533549e21daSmrg done 534549e21daSmrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535549e21daSmrg 536549e21daSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 537549e21daSmrg for my_dir in $my_dir_list; do 538549e21daSmrg IFS="$save_mkdir_p_IFS" 539549e21daSmrg # mkdir can fail with a `File exist' error if two processes 540549e21daSmrg # try to create one of the directories concurrently. Don't 541549e21daSmrg # stop in that case! 542549e21daSmrg $MKDIR "$my_dir" 2>/dev/null || : 543549e21daSmrg done 544549e21daSmrg IFS="$save_mkdir_p_IFS" 545549e21daSmrg 546549e21daSmrg # Bail out if we (or some other process) failed to create a directory. 547549e21daSmrg test -d "$my_directory_path" || \ 548549e21daSmrg func_fatal_error "Failed to create \`$1'" 549549e21daSmrg fi 550549e21daSmrg} 551ba6a1819Smrg 552ba6a1819Smrg 553ba6a1819Smrg# func_mktempdir [string] 554ba6a1819Smrg# Make a temporary directory that won't clash with other running 555ba6a1819Smrg# libtool processes, and avoids race conditions if possible. If 556ba6a1819Smrg# given, STRING is the basename for that directory. 557ba6a1819Smrgfunc_mktempdir () 558ba6a1819Smrg{ 559ba6a1819Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 560ba6a1819Smrg 561549e21daSmrg if test "$opt_dry_run" = ":"; then 562ba6a1819Smrg # Return a directory name, but don't create it in dry-run mode 563ba6a1819Smrg my_tmpdir="${my_template}-$$" 564ba6a1819Smrg else 565ba6a1819Smrg 566ba6a1819Smrg # If mktemp works, use that first and foremost 567ba6a1819Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568ba6a1819Smrg 569ba6a1819Smrg if test ! -d "$my_tmpdir"; then 570549e21daSmrg # Failing that, at least try and use $RANDOM to avoid a race 571549e21daSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 572ba6a1819Smrg 573549e21daSmrg save_mktempdir_umask=`umask` 574549e21daSmrg umask 0077 575549e21daSmrg $MKDIR "$my_tmpdir" 576549e21daSmrg umask $save_mktempdir_umask 577ba6a1819Smrg fi 578ba6a1819Smrg 579ba6a1819Smrg # If we're not in dry-run mode, bomb out on failure 580549e21daSmrg test -d "$my_tmpdir" || \ 581549e21daSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582ba6a1819Smrg fi 583ba6a1819Smrg 584549e21daSmrg $ECHO "$my_tmpdir" 585ba6a1819Smrg} 586ba6a1819Smrg 587ba6a1819Smrg 588549e21daSmrg# func_quote_for_eval arg 589549e21daSmrg# Aesthetically quote ARG to be evaled later. 590549e21daSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591549e21daSmrg# is double-quoted, suitable for a subsequent eval, whereas 592549e21daSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593549e21daSmrg# which are still active within double quotes backslashified. 594549e21daSmrgfunc_quote_for_eval () 595ba6a1819Smrg{ 596549e21daSmrg case $1 in 597549e21daSmrg *[\\\`\"\$]*) 598549e21daSmrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599549e21daSmrg *) 600549e21daSmrg func_quote_for_eval_unquoted_result="$1" ;; 601549e21daSmrg esac 602549e21daSmrg 603549e21daSmrg case $func_quote_for_eval_unquoted_result in 604549e21daSmrg # Double-quote args containing shell metacharacters to delay 605549e21daSmrg # word splitting, command substitution and and variable 606549e21daSmrg # expansion for a subsequent eval. 607549e21daSmrg # Many Bourne shells cannot handle close brackets correctly 608549e21daSmrg # in scan sets, so we specify it separately. 609549e21daSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610549e21daSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611549e21daSmrg ;; 612549e21daSmrg *) 613549e21daSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614ba6a1819Smrg esac 615ba6a1819Smrg} 616ba6a1819Smrg 617ba6a1819Smrg 618549e21daSmrg# func_quote_for_expand arg 619549e21daSmrg# Aesthetically quote ARG to be evaled later; same as above, 620549e21daSmrg# but do not quote variable references. 621549e21daSmrgfunc_quote_for_expand () 622ba6a1819Smrg{ 623549e21daSmrg case $1 in 624549e21daSmrg *[\\\`\"]*) 625549e21daSmrg my_arg=`$ECHO "$1" | $SED \ 626549e21daSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 627ba6a1819Smrg *) 628549e21daSmrg my_arg="$1" ;; 629549e21daSmrg esac 630549e21daSmrg 631549e21daSmrg case $my_arg in 632549e21daSmrg # Double-quote args containing shell metacharacters to delay 633549e21daSmrg # word splitting and command substitution for a subsequent eval. 634549e21daSmrg # Many Bourne shells cannot handle close brackets correctly 635549e21daSmrg # in scan sets, so we specify it separately. 636549e21daSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637549e21daSmrg my_arg="\"$my_arg\"" 638549e21daSmrg ;; 639549e21daSmrg esac 640549e21daSmrg 641549e21daSmrg func_quote_for_expand_result="$my_arg" 642ba6a1819Smrg} 643ba6a1819Smrg 644ba6a1819Smrg 645549e21daSmrg# func_show_eval cmd [fail_exp] 646549e21daSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647549e21daSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648549e21daSmrg# is given, then evaluate it. 649549e21daSmrgfunc_show_eval () 650ba6a1819Smrg{ 651549e21daSmrg my_cmd="$1" 652549e21daSmrg my_fail_exp="${2-:}" 653ba6a1819Smrg 654549e21daSmrg ${opt_silent-false} || { 655549e21daSmrg func_quote_for_expand "$my_cmd" 656549e21daSmrg eval "func_echo $func_quote_for_expand_result" 657549e21daSmrg } 658549e21daSmrg 659549e21daSmrg if ${opt_dry_run-false}; then :; else 660549e21daSmrg eval "$my_cmd" 661549e21daSmrg my_status=$? 662549e21daSmrg if test "$my_status" -eq 0; then :; else 663549e21daSmrg eval "(exit $my_status); $my_fail_exp" 664549e21daSmrg fi 665ba6a1819Smrg fi 666ba6a1819Smrg} 667ba6a1819Smrg 668549e21daSmrg 669549e21daSmrg# func_show_eval_locale cmd [fail_exp] 670549e21daSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671549e21daSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672549e21daSmrg# is given, then evaluate it. Use the saved locale for evaluation. 673549e21daSmrgfunc_show_eval_locale () 674ba6a1819Smrg{ 675549e21daSmrg my_cmd="$1" 676549e21daSmrg my_fail_exp="${2-:}" 677ba6a1819Smrg 678549e21daSmrg ${opt_silent-false} || { 679549e21daSmrg func_quote_for_expand "$my_cmd" 680549e21daSmrg eval "func_echo $func_quote_for_expand_result" 681549e21daSmrg } 682549e21daSmrg 683549e21daSmrg if ${opt_dry_run-false}; then :; else 684549e21daSmrg eval "$lt_user_locale 685549e21daSmrg $my_cmd" 686549e21daSmrg my_status=$? 687549e21daSmrg eval "$lt_safe_locale" 688549e21daSmrg if test "$my_status" -eq 0; then :; else 689549e21daSmrg eval "(exit $my_status); $my_fail_exp" 690ba6a1819Smrg fi 691549e21daSmrg fi 692ba6a1819Smrg} 693ba6a1819Smrg 6941bedbe3fSmrg# func_tr_sh 6951bedbe3fSmrg# Turn $1 into a string suitable for a shell variable name. 6961bedbe3fSmrg# Result is stored in $func_tr_sh_result. All characters 6971bedbe3fSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 6981bedbe3fSmrg# if $1 begins with a digit, a '_' is prepended as well. 6991bedbe3fSmrgfunc_tr_sh () 7001bedbe3fSmrg{ 7011bedbe3fSmrg case $1 in 7021bedbe3fSmrg [0-9]* | *[!a-zA-Z0-9_]*) 7031bedbe3fSmrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 7041bedbe3fSmrg ;; 7051bedbe3fSmrg * ) 7061bedbe3fSmrg func_tr_sh_result=$1 7071bedbe3fSmrg ;; 7081bedbe3fSmrg esac 7091bedbe3fSmrg} 7101bedbe3fSmrg 711ba6a1819Smrg 712549e21daSmrg# func_version 713549e21daSmrg# Echo version message to standard output and exit. 714549e21daSmrgfunc_version () 715549e21daSmrg{ 7161bedbe3fSmrg $opt_debug 7171bedbe3fSmrg 718549e21daSmrg $SED -n '/(C)/!b go 719549e21daSmrg :more 720549e21daSmrg /\./!{ 721549e21daSmrg N 722549e21daSmrg s/\n# / / 723549e21daSmrg b more 724549e21daSmrg } 725549e21daSmrg :go 726549e21daSmrg /^# '$PROGRAM' (GNU /,/# warranty; / { 727549e21daSmrg s/^# // 728549e21daSmrg s/^# *$// 729549e21daSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730549e21daSmrg p 731549e21daSmrg }' < "$progpath" 732549e21daSmrg exit $? 733549e21daSmrg} 734ba6a1819Smrg 735549e21daSmrg# func_usage 736549e21daSmrg# Echo short help message to standard output and exit. 737549e21daSmrgfunc_usage () 738549e21daSmrg{ 7391bedbe3fSmrg $opt_debug 7401bedbe3fSmrg 741549e21daSmrg $SED -n '/^# Usage:/,/^# *.*--help/ { 742549e21daSmrg s/^# // 743549e21daSmrg s/^# *$// 744549e21daSmrg s/\$progname/'$progname'/ 745549e21daSmrg p 746549e21daSmrg }' < "$progpath" 747549e21daSmrg echo 748549e21daSmrg $ECHO "run \`$progname --help | more' for full usage" 749549e21daSmrg exit $? 750549e21daSmrg} 751ba6a1819Smrg 752549e21daSmrg# func_help [NOEXIT] 753549e21daSmrg# Echo long help message to standard output and exit, 754549e21daSmrg# unless 'noexit' is passed as argument. 755549e21daSmrgfunc_help () 756549e21daSmrg{ 7571bedbe3fSmrg $opt_debug 7581bedbe3fSmrg 759549e21daSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 7601bedbe3fSmrg :print 761549e21daSmrg s/^# // 762549e21daSmrg s/^# *$// 763549e21daSmrg s*\$progname*'$progname'* 764549e21daSmrg s*\$host*'"$host"'* 765549e21daSmrg s*\$SHELL*'"$SHELL"'* 766549e21daSmrg s*\$LTCC*'"$LTCC"'* 767549e21daSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 768549e21daSmrg s*\$LD*'"$LD"'* 769549e21daSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 7701bedbe3fSmrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 7711bedbe3fSmrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772549e21daSmrg p 7731bedbe3fSmrg d 7741bedbe3fSmrg } 7751bedbe3fSmrg /^# .* home page:/b print 7761bedbe3fSmrg /^# General help using/b print 7771bedbe3fSmrg ' < "$progpath" 778549e21daSmrg ret=$? 779549e21daSmrg if test -z "$1"; then 780549e21daSmrg exit $ret 781549e21daSmrg fi 782549e21daSmrg} 783ba6a1819Smrg 784549e21daSmrg# func_missing_arg argname 785549e21daSmrg# Echo program name prefixed message to standard error and set global 786549e21daSmrg# exit_cmd. 787549e21daSmrgfunc_missing_arg () 788549e21daSmrg{ 7891bedbe3fSmrg $opt_debug 7901bedbe3fSmrg 791549e21daSmrg func_error "missing argument for $1." 792549e21daSmrg exit_cmd=exit 793549e21daSmrg} 794ba6a1819Smrg 795ba6a1819Smrg 7961bedbe3fSmrg# func_split_short_opt shortopt 7971bedbe3fSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 7981bedbe3fSmrg# variables after splitting SHORTOPT after the 2nd character. 7991bedbe3fSmrgfunc_split_short_opt () 8001bedbe3fSmrg{ 8011bedbe3fSmrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 8021bedbe3fSmrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 8031bedbe3fSmrg 8041bedbe3fSmrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 8051bedbe3fSmrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 8061bedbe3fSmrg} # func_split_short_opt may be replaced by extended shell implementation 8071bedbe3fSmrg 8081bedbe3fSmrg 8091bedbe3fSmrg# func_split_long_opt longopt 8101bedbe3fSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 8111bedbe3fSmrg# variables after splitting LONGOPT at the `=' sign. 8121bedbe3fSmrgfunc_split_long_opt () 8131bedbe3fSmrg{ 8141bedbe3fSmrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 8151bedbe3fSmrg my_sed_long_arg='1s/^--[^=]*=//' 8161bedbe3fSmrg 8171bedbe3fSmrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 8181bedbe3fSmrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 8191bedbe3fSmrg} # func_split_long_opt may be replaced by extended shell implementation 8201bedbe3fSmrg 8211bedbe3fSmrgexit_cmd=: 822ba6a1819Smrg 823ba6a1819Smrg 824ba6a1819Smrg 825549e21daSmrg 826549e21daSmrg 827549e21daSmrgmagic="%%%MAGIC variable%%%" 828549e21daSmrgmagic_exe="%%%MAGIC EXE variable%%%" 829549e21daSmrg 830549e21daSmrg# Global variables. 831549e21daSmrgnonopt= 832549e21daSmrgpreserve_args= 833549e21daSmrglo2o="s/\\.lo\$/.${objext}/" 834549e21daSmrgo2lo="s/\\.${objext}\$/.lo/" 835549e21daSmrgextracted_archives= 836549e21daSmrgextracted_serial=0 837549e21daSmrg 838549e21daSmrg# If this variable is set in any of the actions, the command in it 839549e21daSmrg# will be execed at the end. This prevents here-documents from being 840549e21daSmrg# left over by shells. 841549e21daSmrgexec_cmd= 842549e21daSmrg 8431bedbe3fSmrg# func_append var value 8441bedbe3fSmrg# Append VALUE to the end of shell variable VAR. 8451bedbe3fSmrgfunc_append () 8461bedbe3fSmrg{ 8471bedbe3fSmrg eval "${1}=\$${1}\${2}" 8481bedbe3fSmrg} # func_append may be replaced by extended shell implementation 8491bedbe3fSmrg 8501bedbe3fSmrg# func_append_quoted var value 8511bedbe3fSmrg# Quote VALUE and append to the end of shell variable VAR, separated 8521bedbe3fSmrg# by a space. 8531bedbe3fSmrgfunc_append_quoted () 8541bedbe3fSmrg{ 8551bedbe3fSmrg func_quote_for_eval "${2}" 8561bedbe3fSmrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 8571bedbe3fSmrg} # func_append_quoted may be replaced by extended shell implementation 8581bedbe3fSmrg 8591bedbe3fSmrg 8601bedbe3fSmrg# func_arith arithmetic-term... 8611bedbe3fSmrgfunc_arith () 8621bedbe3fSmrg{ 8631bedbe3fSmrg func_arith_result=`expr "${@}"` 8641bedbe3fSmrg} # func_arith may be replaced by extended shell implementation 8651bedbe3fSmrg 8661bedbe3fSmrg 8671bedbe3fSmrg# func_len string 8681bedbe3fSmrg# STRING may not start with a hyphen. 8691bedbe3fSmrgfunc_len () 8701bedbe3fSmrg{ 8711bedbe3fSmrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 8721bedbe3fSmrg} # func_len may be replaced by extended shell implementation 8731bedbe3fSmrg 8741bedbe3fSmrg 8751bedbe3fSmrg# func_lo2o object 8761bedbe3fSmrgfunc_lo2o () 8771bedbe3fSmrg{ 8781bedbe3fSmrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 8791bedbe3fSmrg} # func_lo2o may be replaced by extended shell implementation 8801bedbe3fSmrg 8811bedbe3fSmrg 8821bedbe3fSmrg# func_xform libobj-or-source 8831bedbe3fSmrgfunc_xform () 8841bedbe3fSmrg{ 8851bedbe3fSmrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 8861bedbe3fSmrg} # func_xform may be replaced by extended shell implementation 8871bedbe3fSmrg 8881bedbe3fSmrg 889549e21daSmrg# func_fatal_configuration arg... 890549e21daSmrg# Echo program name prefixed message to standard error, followed by 891549e21daSmrg# a configuration failure hint, and exit. 892549e21daSmrgfunc_fatal_configuration () 893549e21daSmrg{ 894549e21daSmrg func_error ${1+"$@"} 895549e21daSmrg func_error "See the $PACKAGE documentation for more information." 896549e21daSmrg func_fatal_error "Fatal configuration error." 897549e21daSmrg} 898549e21daSmrg 899549e21daSmrg 900549e21daSmrg# func_config 901549e21daSmrg# Display the configuration for all the tags in this script. 902549e21daSmrgfunc_config () 903549e21daSmrg{ 904549e21daSmrg re_begincf='^# ### BEGIN LIBTOOL' 905549e21daSmrg re_endcf='^# ### END LIBTOOL' 906549e21daSmrg 907549e21daSmrg # Default configuration. 908549e21daSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909549e21daSmrg 910ba6a1819Smrg # Now print the configurations for the tags. 911ba6a1819Smrg for tagname in $taglist; do 912549e21daSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913ba6a1819Smrg done 914ba6a1819Smrg 915549e21daSmrg exit $? 916549e21daSmrg} 917ba6a1819Smrg 918549e21daSmrg# func_features 919549e21daSmrg# Display the features supported by this script. 920549e21daSmrgfunc_features () 921549e21daSmrg{ 922549e21daSmrg echo "host: $host" 923ba6a1819Smrg if test "$build_libtool_libs" = yes; then 924549e21daSmrg echo "enable shared libraries" 925ba6a1819Smrg else 926549e21daSmrg echo "disable shared libraries" 927ba6a1819Smrg fi 928ba6a1819Smrg if test "$build_old_libs" = yes; then 929549e21daSmrg echo "enable static libraries" 930ba6a1819Smrg else 931549e21daSmrg echo "disable static libraries" 932ba6a1819Smrg fi 933549e21daSmrg 934ba6a1819Smrg exit $? 935549e21daSmrg} 936549e21daSmrg 937549e21daSmrg# func_enable_tag tagname 938549e21daSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939549e21daSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940549e21daSmrg# variable here. 941549e21daSmrgfunc_enable_tag () 942549e21daSmrg{ 943549e21daSmrg # Global variable: 944549e21daSmrg tagname="$1" 945ba6a1819Smrg 946549e21daSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947549e21daSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948549e21daSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 949ba6a1819Smrg 950549e21daSmrg # Validate tagname. 951549e21daSmrg case $tagname in 952549e21daSmrg *[!-_A-Za-z0-9,/]*) 953549e21daSmrg func_fatal_error "invalid tag name: $tagname" 954549e21daSmrg ;; 955549e21daSmrg esac 956ba6a1819Smrg 957549e21daSmrg # Don't test for the "default" C tag, as we know it's 958549e21daSmrg # there but not specially marked. 959549e21daSmrg case $tagname in 960549e21daSmrg CC) ;; 961549e21daSmrg *) 962549e21daSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963549e21daSmrg taglist="$taglist $tagname" 964549e21daSmrg 965549e21daSmrg # Evaluate the configuration. Be careful to quote the path 966549e21daSmrg # and the sed script, to avoid splitting on whitespace, but 967549e21daSmrg # also don't use non-portable quotes within backquotes within 968549e21daSmrg # quotes we have to do it in 2 steps: 969549e21daSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970549e21daSmrg eval "$extractedcf" 971549e21daSmrg else 972549e21daSmrg func_error "ignoring unknown tag $tagname" 973549e21daSmrg fi 974549e21daSmrg ;; 975549e21daSmrg esac 976549e21daSmrg} 977ba6a1819Smrg 9781bedbe3fSmrg# func_check_version_match 9791bedbe3fSmrg# Ensure that we are using m4 macros, and libtool script from the same 9801bedbe3fSmrg# release of libtool. 9811bedbe3fSmrgfunc_check_version_match () 982549e21daSmrg{ 9831bedbe3fSmrg if test "$package_revision" != "$macro_revision"; then 9841bedbe3fSmrg if test "$VERSION" != "$macro_version"; then 9851bedbe3fSmrg if test -z "$macro_version"; then 9861bedbe3fSmrg cat >&2 <<_LT_EOF 9871bedbe3fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9881bedbe3fSmrg$progname: definition of this LT_INIT comes from an older release. 9891bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9901bedbe3fSmrg$progname: and run autoconf again. 9911bedbe3fSmrg_LT_EOF 9921bedbe3fSmrg else 9931bedbe3fSmrg cat >&2 <<_LT_EOF 9941bedbe3fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9951bedbe3fSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 9961bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9971bedbe3fSmrg$progname: and run autoconf again. 9981bedbe3fSmrg_LT_EOF 9991bedbe3fSmrg fi 10001bedbe3fSmrg else 10011bedbe3fSmrg cat >&2 <<_LT_EOF 10021bedbe3fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 10031bedbe3fSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 10041bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 10051bedbe3fSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 10061bedbe3fSmrg_LT_EOF 10071bedbe3fSmrg fi 10081bedbe3fSmrg 10091bedbe3fSmrg exit $EXIT_MISMATCH 10101bedbe3fSmrg fi 10111bedbe3fSmrg} 10121bedbe3fSmrg 10131bedbe3fSmrg 10141bedbe3fSmrg# Shorthand for --mode=foo, only valid as the first argument 10151bedbe3fSmrgcase $1 in 10161bedbe3fSmrgclean|clea|cle|cl) 10171bedbe3fSmrg shift; set dummy --mode clean ${1+"$@"}; shift 10181bedbe3fSmrg ;; 10191bedbe3fSmrgcompile|compil|compi|comp|com|co|c) 10201bedbe3fSmrg shift; set dummy --mode compile ${1+"$@"}; shift 10211bedbe3fSmrg ;; 10221bedbe3fSmrgexecute|execut|execu|exec|exe|ex|e) 10231bedbe3fSmrg shift; set dummy --mode execute ${1+"$@"}; shift 10241bedbe3fSmrg ;; 10251bedbe3fSmrgfinish|finis|fini|fin|fi|f) 10261bedbe3fSmrg shift; set dummy --mode finish ${1+"$@"}; shift 10271bedbe3fSmrg ;; 10281bedbe3fSmrginstall|instal|insta|inst|ins|in|i) 10291bedbe3fSmrg shift; set dummy --mode install ${1+"$@"}; shift 10301bedbe3fSmrg ;; 10311bedbe3fSmrglink|lin|li|l) 10321bedbe3fSmrg shift; set dummy --mode link ${1+"$@"}; shift 10331bedbe3fSmrg ;; 10341bedbe3fSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 10351bedbe3fSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 10361bedbe3fSmrg ;; 10371bedbe3fSmrgesac 10381bedbe3fSmrg 10391bedbe3fSmrg 10401bedbe3fSmrg 10411bedbe3fSmrg# Option defaults: 10421bedbe3fSmrgopt_debug=: 10431bedbe3fSmrgopt_dry_run=false 10441bedbe3fSmrgopt_config=false 10451bedbe3fSmrgopt_preserve_dup_deps=false 10461bedbe3fSmrgopt_features=false 10471bedbe3fSmrgopt_finish=false 10481bedbe3fSmrgopt_help=false 10491bedbe3fSmrgopt_help_all=false 10501bedbe3fSmrgopt_silent=: 10511bedbe3fSmrgopt_warning=: 10521bedbe3fSmrgopt_verbose=: 10531bedbe3fSmrgopt_silent=false 10541bedbe3fSmrgopt_verbose=false 1055ba6a1819Smrg 1056ba6a1819Smrg 10571bedbe3fSmrg# Parse options once, thoroughly. This comes as soon as possible in the 10581bedbe3fSmrg# script to make things like `--version' happen as quickly as we can. 10591bedbe3fSmrg{ 10601bedbe3fSmrg # this just eases exit handling 10611bedbe3fSmrg while test $# -gt 0; do 1062549e21daSmrg opt="$1" 1063549e21daSmrg shift 1064549e21daSmrg case $opt in 10651bedbe3fSmrg --debug|-x) opt_debug='set -x' 1066549e21daSmrg func_echo "enabling shell trace mode" 1067549e21daSmrg $opt_debug 1068549e21daSmrg ;; 10691bedbe3fSmrg --dry-run|--dryrun|-n) 10701bedbe3fSmrg opt_dry_run=: 1071549e21daSmrg ;; 10721bedbe3fSmrg --config) 10731bedbe3fSmrg opt_config=: 10741bedbe3fSmrgfunc_config 10751bedbe3fSmrg ;; 10761bedbe3fSmrg --dlopen|-dlopen) 10771bedbe3fSmrg optarg="$1" 10781bedbe3fSmrg opt_dlopen="${opt_dlopen+$opt_dlopen 10791bedbe3fSmrg}$optarg" 1080549e21daSmrg shift 1081549e21daSmrg ;; 1082549e21daSmrg --preserve-dup-deps) 10831bedbe3fSmrg opt_preserve_dup_deps=: 1084549e21daSmrg ;; 10851bedbe3fSmrg --features) 10861bedbe3fSmrg opt_features=: 10871bedbe3fSmrgfunc_features 1088549e21daSmrg ;; 10891bedbe3fSmrg --finish) 10901bedbe3fSmrg opt_finish=: 10911bedbe3fSmrgset dummy --mode finish ${1+"$@"}; shift 10921bedbe3fSmrg ;; 10931bedbe3fSmrg --help) 10941bedbe3fSmrg opt_help=: 10951bedbe3fSmrg ;; 10961bedbe3fSmrg --help-all) 10971bedbe3fSmrg opt_help_all=: 10981bedbe3fSmrgopt_help=': help-all' 10991bedbe3fSmrg ;; 11001bedbe3fSmrg --mode) 11011bedbe3fSmrg test $# = 0 && func_missing_arg $opt && break 11021bedbe3fSmrg optarg="$1" 11031bedbe3fSmrg opt_mode="$optarg" 11041bedbe3fSmrgcase $optarg in 11051bedbe3fSmrg # Valid mode arguments: 11061bedbe3fSmrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 11071bedbe3fSmrg 11081bedbe3fSmrg # Catch anything else as an error 11091bedbe3fSmrg *) func_error "invalid argument for $opt" 11101bedbe3fSmrg exit_cmd=exit 11111bedbe3fSmrg break 11121bedbe3fSmrg ;; 11131bedbe3fSmrgesac 11141bedbe3fSmrg shift 11151bedbe3fSmrg ;; 11161bedbe3fSmrg --no-silent|--no-quiet) 1117549e21daSmrg opt_silent=false 11181bedbe3fSmrgfunc_append preserve_args " $opt" 1119549e21daSmrg ;; 11201bedbe3fSmrg --no-warning|--no-warn) 11211bedbe3fSmrg opt_warning=false 11221bedbe3fSmrgfunc_append preserve_args " $opt" 11231bedbe3fSmrg ;; 11241bedbe3fSmrg --no-verbose) 1125549e21daSmrg opt_verbose=false 11261bedbe3fSmrgfunc_append preserve_args " $opt" 1127549e21daSmrg ;; 11281bedbe3fSmrg --silent|--quiet) 11291bedbe3fSmrg opt_silent=: 11301bedbe3fSmrgfunc_append preserve_args " $opt" 11311bedbe3fSmrg opt_verbose=false 11321bedbe3fSmrg ;; 11331bedbe3fSmrg --verbose|-v) 11341bedbe3fSmrg opt_verbose=: 11351bedbe3fSmrgfunc_append preserve_args " $opt" 11361bedbe3fSmrgopt_silent=false 11371bedbe3fSmrg ;; 11381bedbe3fSmrg --tag) 11391bedbe3fSmrg test $# = 0 && func_missing_arg $opt && break 11401bedbe3fSmrg optarg="$1" 11411bedbe3fSmrg opt_tag="$optarg" 11421bedbe3fSmrgfunc_append preserve_args " $opt $optarg" 11431bedbe3fSmrgfunc_enable_tag "$optarg" 1144549e21daSmrg shift 1145549e21daSmrg ;; 1146549e21daSmrg 11471bedbe3fSmrg -\?|-h) func_usage ;; 11481bedbe3fSmrg --help) func_help ;; 11491bedbe3fSmrg --version) func_version ;; 11501bedbe3fSmrg 1151549e21daSmrg # Separate optargs to long options: 11521bedbe3fSmrg --*=*) 11531bedbe3fSmrg func_split_long_opt "$opt" 11541bedbe3fSmrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155549e21daSmrg shift 1156549e21daSmrg ;; 1157549e21daSmrg 11581bedbe3fSmrg # Separate non-argument short options: 11591bedbe3fSmrg -\?*|-h*|-n*|-v*) 11601bedbe3fSmrg func_split_short_opt "$opt" 11611bedbe3fSmrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 11621bedbe3fSmrg shift 1163549e21daSmrg ;; 11641bedbe3fSmrg 11651bedbe3fSmrg --) break ;; 11661bedbe3fSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 11671bedbe3fSmrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168549e21daSmrg esac 1169549e21daSmrg done 1170549e21daSmrg 11711bedbe3fSmrg # Validate options: 11721bedbe3fSmrg 11731bedbe3fSmrg # save first non-option argument 11741bedbe3fSmrg if test "$#" -gt 0; then 11751bedbe3fSmrg nonopt="$opt" 11761bedbe3fSmrg shift 11771bedbe3fSmrg fi 11781bedbe3fSmrg 11791bedbe3fSmrg # preserve --debug 11801bedbe3fSmrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181549e21daSmrg 1182549e21daSmrg case $host in 1183549e21daSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 1184549e21daSmrg # don't eliminate duplications in $postdeps and $predeps 1185549e21daSmrg opt_duplicate_compiler_generated_deps=: 1186ba6a1819Smrg ;; 1187ba6a1819Smrg *) 11881bedbe3fSmrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189549e21daSmrg ;; 1190549e21daSmrg esac 1191ba6a1819Smrg 11921bedbe3fSmrg $opt_help || { 11931bedbe3fSmrg # Sanity checks first: 11941bedbe3fSmrg func_check_version_match 1195549e21daSmrg 11961bedbe3fSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 11971bedbe3fSmrg func_fatal_configuration "not configured to build any kind of library" 1198549e21daSmrg fi 1199549e21daSmrg 12001bedbe3fSmrg # Darwin sucks 12011bedbe3fSmrg eval std_shrext=\"$shrext_cmds\" 1202549e21daSmrg 12031bedbe3fSmrg # Only execute mode is allowed to have -dlopen flags. 12041bedbe3fSmrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 12051bedbe3fSmrg func_error "unrecognized option \`-dlopen'" 12061bedbe3fSmrg $ECHO "$help" 1>&2 12071bedbe3fSmrg exit $EXIT_FAILURE 12081bedbe3fSmrg fi 1209549e21daSmrg 12101bedbe3fSmrg # Change the help message to a mode-specific one. 12111bedbe3fSmrg generic_help="$help" 12121bedbe3fSmrg help="Try \`$progname --help --mode=$opt_mode' for more information." 12131bedbe3fSmrg } 1214549e21daSmrg 1215549e21daSmrg 12161bedbe3fSmrg # Bail if the options were screwed 12171bedbe3fSmrg $exit_cmd $EXIT_FAILURE 12181bedbe3fSmrg} 1219549e21daSmrg 1220549e21daSmrg 1221ba6a1819Smrg 1222ba6a1819Smrg 12231bedbe3fSmrg## ----------- ## 12241bedbe3fSmrg## Main. ## 12251bedbe3fSmrg## ----------- ## 1226ba6a1819Smrg 1227549e21daSmrg# func_lalib_p file 1228549e21daSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 1230549e21daSmrg# determined imposters. 1231549e21daSmrgfunc_lalib_p () 1232549e21daSmrg{ 1233549e21daSmrg test -f "$1" && 1234549e21daSmrg $SED -e 4q "$1" 2>/dev/null \ 1235549e21daSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236549e21daSmrg} 1237ba6a1819Smrg 1238549e21daSmrg# func_lalib_unsafe_p file 1239549e21daSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240549e21daSmrg# This function implements the same check as func_lalib_p without 1241549e21daSmrg# resorting to external programs. To this end, it redirects stdin and 1242549e21daSmrg# closes it afterwards, without saving the original file descriptor. 1243549e21daSmrg# As a safety measure, use it only where a negative result would be 1244549e21daSmrg# fatal anyway. Works if `file' does not exist. 1245549e21daSmrgfunc_lalib_unsafe_p () 1246549e21daSmrg{ 1247549e21daSmrg lalib_p=no 1248549e21daSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249549e21daSmrg for lalib_p_l in 1 2 3 4 1250549e21daSmrg do 1251549e21daSmrg read lalib_p_line 1252549e21daSmrg case "$lalib_p_line" in 1253549e21daSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254549e21daSmrg esac 1255549e21daSmrg done 1256549e21daSmrg exec 0<&5 5<&- 1257549e21daSmrg fi 1258549e21daSmrg test "$lalib_p" = yes 1259549e21daSmrg} 1260ba6a1819Smrg 1261549e21daSmrg# func_ltwrapper_script_p file 1262549e21daSmrg# True iff FILE is a libtool wrapper script 1263549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 1264549e21daSmrg# determined imposters. 1265549e21daSmrgfunc_ltwrapper_script_p () 1266549e21daSmrg{ 1267549e21daSmrg func_lalib_p "$1" 1268549e21daSmrg} 1269ba6a1819Smrg 1270549e21daSmrg# func_ltwrapper_executable_p file 1271549e21daSmrg# True iff FILE is a libtool wrapper executable 1272549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 1273549e21daSmrg# determined imposters. 1274549e21daSmrgfunc_ltwrapper_executable_p () 1275549e21daSmrg{ 1276549e21daSmrg func_ltwrapper_exec_suffix= 1277549e21daSmrg case $1 in 1278549e21daSmrg *.exe) ;; 1279549e21daSmrg *) func_ltwrapper_exec_suffix=.exe ;; 1280549e21daSmrg esac 1281549e21daSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282549e21daSmrg} 1283ba6a1819Smrg 1284549e21daSmrg# func_ltwrapper_scriptname file 1285549e21daSmrg# Assumes file is an ltwrapper_executable 1286549e21daSmrg# uses $file to determine the appropriate filename for a 1287549e21daSmrg# temporary ltwrapper_script. 1288549e21daSmrgfunc_ltwrapper_scriptname () 1289549e21daSmrg{ 12901bedbe3fSmrg func_dirname_and_basename "$1" "" "." 12911bedbe3fSmrg func_stripname '' '.exe' "$func_basename_result" 12921bedbe3fSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293549e21daSmrg} 1294ba6a1819Smrg 1295549e21daSmrg# func_ltwrapper_p file 1296549e21daSmrg# True iff FILE is a libtool wrapper script or wrapper executable 1297549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 1298549e21daSmrg# determined imposters. 1299549e21daSmrgfunc_ltwrapper_p () 1300549e21daSmrg{ 1301549e21daSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302549e21daSmrg} 1303ba6a1819Smrg 1304ba6a1819Smrg 1305549e21daSmrg# func_execute_cmds commands fail_cmd 1306549e21daSmrg# Execute tilde-delimited COMMANDS. 1307549e21daSmrg# If FAIL_CMD is given, eval that upon failure. 1308549e21daSmrg# FAIL_CMD may read-access the current command in variable CMD! 1309549e21daSmrgfunc_execute_cmds () 1310549e21daSmrg{ 1311549e21daSmrg $opt_debug 1312549e21daSmrg save_ifs=$IFS; IFS='~' 1313549e21daSmrg for cmd in $1; do 1314549e21daSmrg IFS=$save_ifs 1315549e21daSmrg eval cmd=\"$cmd\" 1316549e21daSmrg func_show_eval "$cmd" "${2-:}" 1317549e21daSmrg done 1318549e21daSmrg IFS=$save_ifs 1319549e21daSmrg} 1320ba6a1819Smrg 1321ba6a1819Smrg 1322549e21daSmrg# func_source file 1323549e21daSmrg# Source FILE, adding directory component if necessary. 1324549e21daSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325549e21daSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326549e21daSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327549e21daSmrg# `FILE.' does not work on cygwin managed mounts. 1328549e21daSmrgfunc_source () 1329549e21daSmrg{ 1330549e21daSmrg $opt_debug 1331549e21daSmrg case $1 in 1332549e21daSmrg */* | *\\*) . "$1" ;; 1333549e21daSmrg *) . "./$1" ;; 1334549e21daSmrg esac 1335549e21daSmrg} 1336549e21daSmrg 1337549e21daSmrg 13381bedbe3fSmrg# func_resolve_sysroot PATH 13391bedbe3fSmrg# Replace a leading = in PATH with a sysroot. Store the result into 13401bedbe3fSmrg# func_resolve_sysroot_result 13411bedbe3fSmrgfunc_resolve_sysroot () 13421bedbe3fSmrg{ 13431bedbe3fSmrg func_resolve_sysroot_result=$1 13441bedbe3fSmrg case $func_resolve_sysroot_result in 13451bedbe3fSmrg =*) 13461bedbe3fSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 13471bedbe3fSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 13481bedbe3fSmrg ;; 13491bedbe3fSmrg esac 13501bedbe3fSmrg} 13511bedbe3fSmrg 13521bedbe3fSmrg# func_replace_sysroot PATH 13531bedbe3fSmrg# If PATH begins with the sysroot, replace it with = and 13541bedbe3fSmrg# store the result into func_replace_sysroot_result. 13551bedbe3fSmrgfunc_replace_sysroot () 13561bedbe3fSmrg{ 13571bedbe3fSmrg case "$lt_sysroot:$1" in 13581bedbe3fSmrg ?*:"$lt_sysroot"*) 13591bedbe3fSmrg func_stripname "$lt_sysroot" '' "$1" 13601bedbe3fSmrg func_replace_sysroot_result="=$func_stripname_result" 13611bedbe3fSmrg ;; 13621bedbe3fSmrg *) 13631bedbe3fSmrg # Including no sysroot. 13641bedbe3fSmrg func_replace_sysroot_result=$1 13651bedbe3fSmrg ;; 13661bedbe3fSmrg esac 13671bedbe3fSmrg} 13681bedbe3fSmrg 1369549e21daSmrg# func_infer_tag arg 1370549e21daSmrg# Infer tagged configuration to use if any are available and 1371549e21daSmrg# if one wasn't chosen via the "--tag" command line option. 1372549e21daSmrg# Only attempt this if the compiler in the base compile 1373549e21daSmrg# command doesn't match the default compiler. 1374549e21daSmrg# arg is usually of the form 'gcc ...' 1375549e21daSmrgfunc_infer_tag () 1376549e21daSmrg{ 1377549e21daSmrg $opt_debug 1378549e21daSmrg if test -n "$available_tags" && test -z "$tagname"; then 1379549e21daSmrg CC_quoted= 1380549e21daSmrg for arg in $CC; do 13811bedbe3fSmrg func_append_quoted CC_quoted "$arg" 1382549e21daSmrg done 1383549e21daSmrg CC_expanded=`func_echo_all $CC` 1384549e21daSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385549e21daSmrg case $@ in 1386549e21daSmrg # Blanks in the command may have been stripped by the calling shell, 1387549e21daSmrg # but not from the CC environment variable when configure was run. 1388549e21daSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1389549e21daSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390549e21daSmrg # Blanks at the start of $base_compile will cause this to fail 1391549e21daSmrg # if we don't check for them as well. 1392549e21daSmrg *) 1393549e21daSmrg for z in $available_tags; do 1394549e21daSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395549e21daSmrg # Evaluate the configuration. 1396549e21daSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397549e21daSmrg CC_quoted= 1398549e21daSmrg for arg in $CC; do 1399549e21daSmrg # Double-quote args containing other shell metacharacters. 14001bedbe3fSmrg func_append_quoted CC_quoted "$arg" 1401549e21daSmrg done 1402549e21daSmrg CC_expanded=`func_echo_all $CC` 1403549e21daSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404549e21daSmrg case "$@ " in 1405549e21daSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1406549e21daSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407549e21daSmrg # The compiler in the base compile command matches 1408549e21daSmrg # the one in the tagged configuration. 1409549e21daSmrg # Assume this is the tagged configuration we want. 1410549e21daSmrg tagname=$z 1411549e21daSmrg break 1412549e21daSmrg ;; 1413549e21daSmrg esac 1414549e21daSmrg fi 1415549e21daSmrg done 1416549e21daSmrg # If $tagname still isn't set, then no tagged configuration 1417549e21daSmrg # was found and let the user know that the "--tag" command 1418549e21daSmrg # line option must be used. 1419549e21daSmrg if test -z "$tagname"; then 1420549e21daSmrg func_echo "unable to infer tagged configuration" 1421549e21daSmrg func_fatal_error "specify a tag with \`--tag'" 1422549e21daSmrg# else 1423549e21daSmrg# func_verbose "using $tagname tagged configuration" 1424549e21daSmrg fi 1425549e21daSmrg ;; 1426549e21daSmrg esac 1427549e21daSmrg fi 1428549e21daSmrg} 1429549e21daSmrg 1430549e21daSmrg 14311bedbe3fSmrg 14321bedbe3fSmrg# func_write_libtool_object output_name pic_name nonpic_name 14331bedbe3fSmrg# Create a libtool object file (analogous to a ".la" file), 14341bedbe3fSmrg# but don't create it if we're doing a dry run. 14351bedbe3fSmrgfunc_write_libtool_object () 14361bedbe3fSmrg{ 14371bedbe3fSmrg write_libobj=${1} 14381bedbe3fSmrg if test "$build_libtool_libs" = yes; then 14391bedbe3fSmrg write_lobj=\'${2}\' 14401bedbe3fSmrg else 14411bedbe3fSmrg write_lobj=none 14421bedbe3fSmrg fi 14431bedbe3fSmrg 14441bedbe3fSmrg if test "$build_old_libs" = yes; then 14451bedbe3fSmrg write_oldobj=\'${3}\' 14461bedbe3fSmrg else 14471bedbe3fSmrg write_oldobj=none 14481bedbe3fSmrg fi 14491bedbe3fSmrg 14501bedbe3fSmrg $opt_dry_run || { 14511bedbe3fSmrg cat >${write_libobj}T <<EOF 14521bedbe3fSmrg# $write_libobj - a libtool object file 14531bedbe3fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 14541bedbe3fSmrg# 14551bedbe3fSmrg# Please DO NOT delete this file! 14561bedbe3fSmrg# It is necessary for linking the library. 14571bedbe3fSmrg 14581bedbe3fSmrg# Name of the PIC object. 14591bedbe3fSmrgpic_object=$write_lobj 14601bedbe3fSmrg 14611bedbe3fSmrg# Name of the non-PIC object 14621bedbe3fSmrgnon_pic_object=$write_oldobj 14631bedbe3fSmrg 14641bedbe3fSmrgEOF 14651bedbe3fSmrg $MV "${write_libobj}T" "${write_libobj}" 14661bedbe3fSmrg } 14671bedbe3fSmrg} 14681bedbe3fSmrg 14691bedbe3fSmrg 14701bedbe3fSmrg################################################## 14711bedbe3fSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 14721bedbe3fSmrg################################################## 14731bedbe3fSmrg 14741bedbe3fSmrg# func_convert_core_file_wine_to_w32 ARG 14751bedbe3fSmrg# Helper function used by file name conversion functions when $build is *nix, 14761bedbe3fSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 14771bedbe3fSmrg# correctly configured wine environment available, with the winepath program 14781bedbe3fSmrg# in $build's $PATH. 14791bedbe3fSmrg# 14801bedbe3fSmrg# ARG is the $build file name to be converted to w32 format. 14811bedbe3fSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 14821bedbe3fSmrg# be empty on error (or when ARG is empty) 14831bedbe3fSmrgfunc_convert_core_file_wine_to_w32 () 14841bedbe3fSmrg{ 14851bedbe3fSmrg $opt_debug 14861bedbe3fSmrg func_convert_core_file_wine_to_w32_result="$1" 14871bedbe3fSmrg if test -n "$1"; then 14881bedbe3fSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 14891bedbe3fSmrg # are forced to check the contents of stdout. On the other hand, if the 14901bedbe3fSmrg # command is not found, the shell will set an exit code of 127 and print 14911bedbe3fSmrg # *an error message* to stdout. So we must check for both error code of 14921bedbe3fSmrg # zero AND non-empty stdout, which explains the odd construction: 14931bedbe3fSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 14941bedbe3fSmrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 14951bedbe3fSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 14961bedbe3fSmrg $SED -e "$lt_sed_naive_backslashify"` 14971bedbe3fSmrg else 14981bedbe3fSmrg func_convert_core_file_wine_to_w32_result= 14991bedbe3fSmrg fi 15001bedbe3fSmrg fi 15011bedbe3fSmrg} 15021bedbe3fSmrg# end: func_convert_core_file_wine_to_w32 15031bedbe3fSmrg 15041bedbe3fSmrg 15051bedbe3fSmrg# func_convert_core_path_wine_to_w32 ARG 15061bedbe3fSmrg# Helper function used by path conversion functions when $build is *nix, and 15071bedbe3fSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 15081bedbe3fSmrg# configured wine environment available, with the winepath program in $build's 15091bedbe3fSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 15101bedbe3fSmrg# 15111bedbe3fSmrg# ARG is path to be converted from $build format to win32. 15121bedbe3fSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 15131bedbe3fSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 15141bedbe3fSmrg# are convertible, then the result may be empty. 15151bedbe3fSmrgfunc_convert_core_path_wine_to_w32 () 15161bedbe3fSmrg{ 15171bedbe3fSmrg $opt_debug 15181bedbe3fSmrg # unfortunately, winepath doesn't convert paths, only file names 15191bedbe3fSmrg func_convert_core_path_wine_to_w32_result="" 15201bedbe3fSmrg if test -n "$1"; then 15211bedbe3fSmrg oldIFS=$IFS 15221bedbe3fSmrg IFS=: 15231bedbe3fSmrg for func_convert_core_path_wine_to_w32_f in $1; do 15241bedbe3fSmrg IFS=$oldIFS 15251bedbe3fSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 15261bedbe3fSmrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 15271bedbe3fSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 15281bedbe3fSmrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 15291bedbe3fSmrg else 15301bedbe3fSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 15311bedbe3fSmrg fi 15321bedbe3fSmrg fi 15331bedbe3fSmrg done 15341bedbe3fSmrg IFS=$oldIFS 15351bedbe3fSmrg fi 15361bedbe3fSmrg} 15371bedbe3fSmrg# end: func_convert_core_path_wine_to_w32 15381bedbe3fSmrg 15391bedbe3fSmrg 15401bedbe3fSmrg# func_cygpath ARGS... 15411bedbe3fSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 15421bedbe3fSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 15431bedbe3fSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 15441bedbe3fSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 15451bedbe3fSmrg# file name or path is assumed to be in w32 format, as previously converted 15461bedbe3fSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 15471bedbe3fSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 15481bedbe3fSmrg# Cygwin format). Returns an empty string on error. 15491bedbe3fSmrg# 15501bedbe3fSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 15511bedbe3fSmrg# be converted. 15521bedbe3fSmrg# 15531bedbe3fSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 15541bedbe3fSmrg# environment variable; do not put it in $PATH. 15551bedbe3fSmrgfunc_cygpath () 15561bedbe3fSmrg{ 15571bedbe3fSmrg $opt_debug 15581bedbe3fSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 15591bedbe3fSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 15601bedbe3fSmrg if test "$?" -ne 0; then 15611bedbe3fSmrg # on failure, ensure result is empty 15621bedbe3fSmrg func_cygpath_result= 15631bedbe3fSmrg fi 15641bedbe3fSmrg else 15651bedbe3fSmrg func_cygpath_result= 15661bedbe3fSmrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 15671bedbe3fSmrg fi 15681bedbe3fSmrg} 15691bedbe3fSmrg#end: func_cygpath 15701bedbe3fSmrg 15711bedbe3fSmrg 15721bedbe3fSmrg# func_convert_core_msys_to_w32 ARG 15731bedbe3fSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 15741bedbe3fSmrg# result in func_convert_core_msys_to_w32_result. 15751bedbe3fSmrgfunc_convert_core_msys_to_w32 () 15761bedbe3fSmrg{ 15771bedbe3fSmrg $opt_debug 15781bedbe3fSmrg # awkward: cmd appends spaces to result 15791bedbe3fSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 15801bedbe3fSmrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 15811bedbe3fSmrg} 15821bedbe3fSmrg#end: func_convert_core_msys_to_w32 15831bedbe3fSmrg 15841bedbe3fSmrg 15851bedbe3fSmrg# func_convert_file_check ARG1 ARG2 15861bedbe3fSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 15871bedbe3fSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 15881bedbe3fSmrg# func_to_host_file_result to ARG1). 15891bedbe3fSmrgfunc_convert_file_check () 15901bedbe3fSmrg{ 15911bedbe3fSmrg $opt_debug 15921bedbe3fSmrg if test -z "$2" && test -n "$1" ; then 15931bedbe3fSmrg func_error "Could not determine host file name corresponding to" 15941bedbe3fSmrg func_error " \`$1'" 15951bedbe3fSmrg func_error "Continuing, but uninstalled executables may not work." 15961bedbe3fSmrg # Fallback: 15971bedbe3fSmrg func_to_host_file_result="$1" 15981bedbe3fSmrg fi 15991bedbe3fSmrg} 16001bedbe3fSmrg# end func_convert_file_check 16011bedbe3fSmrg 16021bedbe3fSmrg 16031bedbe3fSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 16041bedbe3fSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 16051bedbe3fSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 16061bedbe3fSmrg# func_to_host_file_result to a simplistic fallback value (see below). 16071bedbe3fSmrgfunc_convert_path_check () 16081bedbe3fSmrg{ 16091bedbe3fSmrg $opt_debug 16101bedbe3fSmrg if test -z "$4" && test -n "$3"; then 16111bedbe3fSmrg func_error "Could not determine the host path corresponding to" 16121bedbe3fSmrg func_error " \`$3'" 16131bedbe3fSmrg func_error "Continuing, but uninstalled executables may not work." 16141bedbe3fSmrg # Fallback. This is a deliberately simplistic "conversion" and 16151bedbe3fSmrg # should not be "improved". See libtool.info. 16161bedbe3fSmrg if test "x$1" != "x$2"; then 16171bedbe3fSmrg lt_replace_pathsep_chars="s|$1|$2|g" 16181bedbe3fSmrg func_to_host_path_result=`echo "$3" | 16191bedbe3fSmrg $SED -e "$lt_replace_pathsep_chars"` 16201bedbe3fSmrg else 16211bedbe3fSmrg func_to_host_path_result="$3" 16221bedbe3fSmrg fi 16231bedbe3fSmrg fi 16241bedbe3fSmrg} 16251bedbe3fSmrg# end func_convert_path_check 16261bedbe3fSmrg 16271bedbe3fSmrg 16281bedbe3fSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 16291bedbe3fSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 16301bedbe3fSmrg# and appending REPL if ORIG matches BACKPAT. 16311bedbe3fSmrgfunc_convert_path_front_back_pathsep () 16321bedbe3fSmrg{ 16331bedbe3fSmrg $opt_debug 16341bedbe3fSmrg case $4 in 16351bedbe3fSmrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 16361bedbe3fSmrg ;; 16371bedbe3fSmrg esac 16381bedbe3fSmrg case $4 in 16391bedbe3fSmrg $2 ) func_append func_to_host_path_result "$3" 16401bedbe3fSmrg ;; 16411bedbe3fSmrg esac 16421bedbe3fSmrg} 16431bedbe3fSmrg# end func_convert_path_front_back_pathsep 16441bedbe3fSmrg 16451bedbe3fSmrg 16461bedbe3fSmrg################################################## 16471bedbe3fSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 16481bedbe3fSmrg################################################## 16491bedbe3fSmrg# invoked via `$to_host_file_cmd ARG' 16501bedbe3fSmrg# 16511bedbe3fSmrg# In each case, ARG is the path to be converted from $build to $host format. 16521bedbe3fSmrg# Result will be available in $func_to_host_file_result. 16531bedbe3fSmrg 16541bedbe3fSmrg 16551bedbe3fSmrg# func_to_host_file ARG 16561bedbe3fSmrg# Converts the file name ARG from $build format to $host format. Return result 16571bedbe3fSmrg# in func_to_host_file_result. 16581bedbe3fSmrgfunc_to_host_file () 16591bedbe3fSmrg{ 16601bedbe3fSmrg $opt_debug 16611bedbe3fSmrg $to_host_file_cmd "$1" 16621bedbe3fSmrg} 16631bedbe3fSmrg# end func_to_host_file 16641bedbe3fSmrg 16651bedbe3fSmrg 16661bedbe3fSmrg# func_to_tool_file ARG LAZY 16671bedbe3fSmrg# converts the file name ARG from $build format to toolchain format. Return 16681bedbe3fSmrg# result in func_to_tool_file_result. If the conversion in use is listed 16691bedbe3fSmrg# in (the comma separated) LAZY, no conversion takes place. 16701bedbe3fSmrgfunc_to_tool_file () 16711bedbe3fSmrg{ 16721bedbe3fSmrg $opt_debug 16731bedbe3fSmrg case ,$2, in 16741bedbe3fSmrg *,"$to_tool_file_cmd",*) 16751bedbe3fSmrg func_to_tool_file_result=$1 16761bedbe3fSmrg ;; 16771bedbe3fSmrg *) 16781bedbe3fSmrg $to_tool_file_cmd "$1" 16791bedbe3fSmrg func_to_tool_file_result=$func_to_host_file_result 16801bedbe3fSmrg ;; 16811bedbe3fSmrg esac 16821bedbe3fSmrg} 16831bedbe3fSmrg# end func_to_tool_file 16841bedbe3fSmrg 16851bedbe3fSmrg 16861bedbe3fSmrg# func_convert_file_noop ARG 16871bedbe3fSmrg# Copy ARG to func_to_host_file_result. 16881bedbe3fSmrgfunc_convert_file_noop () 16891bedbe3fSmrg{ 16901bedbe3fSmrg func_to_host_file_result="$1" 16911bedbe3fSmrg} 16921bedbe3fSmrg# end func_convert_file_noop 16931bedbe3fSmrg 16941bedbe3fSmrg 16951bedbe3fSmrg# func_convert_file_msys_to_w32 ARG 16961bedbe3fSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 16971bedbe3fSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 16981bedbe3fSmrg# func_to_host_file_result. 16991bedbe3fSmrgfunc_convert_file_msys_to_w32 () 17001bedbe3fSmrg{ 17011bedbe3fSmrg $opt_debug 17021bedbe3fSmrg func_to_host_file_result="$1" 17031bedbe3fSmrg if test -n "$1"; then 17041bedbe3fSmrg func_convert_core_msys_to_w32 "$1" 17051bedbe3fSmrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 17061bedbe3fSmrg fi 17071bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17081bedbe3fSmrg} 17091bedbe3fSmrg# end func_convert_file_msys_to_w32 17101bedbe3fSmrg 17111bedbe3fSmrg 17121bedbe3fSmrg# func_convert_file_cygwin_to_w32 ARG 17131bedbe3fSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 17141bedbe3fSmrg# func_to_host_file_result. 17151bedbe3fSmrgfunc_convert_file_cygwin_to_w32 () 17161bedbe3fSmrg{ 17171bedbe3fSmrg $opt_debug 17181bedbe3fSmrg func_to_host_file_result="$1" 17191bedbe3fSmrg if test -n "$1"; then 17201bedbe3fSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 17211bedbe3fSmrg # LT_CYGPATH in this case. 17221bedbe3fSmrg func_to_host_file_result=`cygpath -m "$1"` 17231bedbe3fSmrg fi 17241bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17251bedbe3fSmrg} 17261bedbe3fSmrg# end func_convert_file_cygwin_to_w32 17271bedbe3fSmrg 17281bedbe3fSmrg 17291bedbe3fSmrg# func_convert_file_nix_to_w32 ARG 17301bedbe3fSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 17311bedbe3fSmrg# and a working winepath. Returns result in func_to_host_file_result. 17321bedbe3fSmrgfunc_convert_file_nix_to_w32 () 17331bedbe3fSmrg{ 17341bedbe3fSmrg $opt_debug 17351bedbe3fSmrg func_to_host_file_result="$1" 17361bedbe3fSmrg if test -n "$1"; then 17371bedbe3fSmrg func_convert_core_file_wine_to_w32 "$1" 17381bedbe3fSmrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 17391bedbe3fSmrg fi 17401bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17411bedbe3fSmrg} 17421bedbe3fSmrg# end func_convert_file_nix_to_w32 17431bedbe3fSmrg 17441bedbe3fSmrg 17451bedbe3fSmrg# func_convert_file_msys_to_cygwin ARG 17461bedbe3fSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 17471bedbe3fSmrg# Returns result in func_to_host_file_result. 17481bedbe3fSmrgfunc_convert_file_msys_to_cygwin () 17491bedbe3fSmrg{ 17501bedbe3fSmrg $opt_debug 17511bedbe3fSmrg func_to_host_file_result="$1" 17521bedbe3fSmrg if test -n "$1"; then 17531bedbe3fSmrg func_convert_core_msys_to_w32 "$1" 17541bedbe3fSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 17551bedbe3fSmrg func_to_host_file_result="$func_cygpath_result" 17561bedbe3fSmrg fi 17571bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17581bedbe3fSmrg} 17591bedbe3fSmrg# end func_convert_file_msys_to_cygwin 17601bedbe3fSmrg 17611bedbe3fSmrg 17621bedbe3fSmrg# func_convert_file_nix_to_cygwin ARG 17631bedbe3fSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 17641bedbe3fSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 17651bedbe3fSmrg# in func_to_host_file_result. 17661bedbe3fSmrgfunc_convert_file_nix_to_cygwin () 17671bedbe3fSmrg{ 17681bedbe3fSmrg $opt_debug 17691bedbe3fSmrg func_to_host_file_result="$1" 17701bedbe3fSmrg if test -n "$1"; then 17711bedbe3fSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 17721bedbe3fSmrg func_convert_core_file_wine_to_w32 "$1" 17731bedbe3fSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 17741bedbe3fSmrg func_to_host_file_result="$func_cygpath_result" 17751bedbe3fSmrg fi 17761bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 17771bedbe3fSmrg} 17781bedbe3fSmrg# end func_convert_file_nix_to_cygwin 17791bedbe3fSmrg 17801bedbe3fSmrg 17811bedbe3fSmrg############################################# 17821bedbe3fSmrg# $build to $host PATH CONVERSION FUNCTIONS # 17831bedbe3fSmrg############################################# 17841bedbe3fSmrg# invoked via `$to_host_path_cmd ARG' 17851bedbe3fSmrg# 17861bedbe3fSmrg# In each case, ARG is the path to be converted from $build to $host format. 17871bedbe3fSmrg# The result will be available in $func_to_host_path_result. 17881bedbe3fSmrg# 17891bedbe3fSmrg# Path separators are also converted from $build format to $host format. If 17901bedbe3fSmrg# ARG begins or ends with a path separator character, it is preserved (but 17911bedbe3fSmrg# converted to $host format) on output. 17921bedbe3fSmrg# 17931bedbe3fSmrg# All path conversion functions are named using the following convention: 17941bedbe3fSmrg# file name conversion function : func_convert_file_X_to_Y () 17951bedbe3fSmrg# path conversion function : func_convert_path_X_to_Y () 17961bedbe3fSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 17971bedbe3fSmrg# same. If conversion functions are added for new $build/$host combinations, 17981bedbe3fSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 17991bedbe3fSmrg# will break. 18001bedbe3fSmrg 18011bedbe3fSmrg 18021bedbe3fSmrg# func_init_to_host_path_cmd 18031bedbe3fSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 18041bedbe3fSmrg# appropriate value, based on the value of $to_host_file_cmd. 18051bedbe3fSmrgto_host_path_cmd= 18061bedbe3fSmrgfunc_init_to_host_path_cmd () 18071bedbe3fSmrg{ 18081bedbe3fSmrg $opt_debug 18091bedbe3fSmrg if test -z "$to_host_path_cmd"; then 18101bedbe3fSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 18111bedbe3fSmrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 18121bedbe3fSmrg fi 18131bedbe3fSmrg} 18141bedbe3fSmrg 18151bedbe3fSmrg 18161bedbe3fSmrg# func_to_host_path ARG 18171bedbe3fSmrg# Converts the path ARG from $build format to $host format. Return result 18181bedbe3fSmrg# in func_to_host_path_result. 18191bedbe3fSmrgfunc_to_host_path () 18201bedbe3fSmrg{ 18211bedbe3fSmrg $opt_debug 18221bedbe3fSmrg func_init_to_host_path_cmd 18231bedbe3fSmrg $to_host_path_cmd "$1" 18241bedbe3fSmrg} 18251bedbe3fSmrg# end func_to_host_path 18261bedbe3fSmrg 18271bedbe3fSmrg 18281bedbe3fSmrg# func_convert_path_noop ARG 18291bedbe3fSmrg# Copy ARG to func_to_host_path_result. 18301bedbe3fSmrgfunc_convert_path_noop () 18311bedbe3fSmrg{ 18321bedbe3fSmrg func_to_host_path_result="$1" 18331bedbe3fSmrg} 18341bedbe3fSmrg# end func_convert_path_noop 18351bedbe3fSmrg 18361bedbe3fSmrg 18371bedbe3fSmrg# func_convert_path_msys_to_w32 ARG 18381bedbe3fSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 18391bedbe3fSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 18401bedbe3fSmrg# func_to_host_path_result. 18411bedbe3fSmrgfunc_convert_path_msys_to_w32 () 18421bedbe3fSmrg{ 18431bedbe3fSmrg $opt_debug 18441bedbe3fSmrg func_to_host_path_result="$1" 18451bedbe3fSmrg if test -n "$1"; then 18461bedbe3fSmrg # Remove leading and trailing path separator characters from ARG. MSYS 18471bedbe3fSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 18481bedbe3fSmrg # and winepath ignores them completely. 18491bedbe3fSmrg func_stripname : : "$1" 18501bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 18511bedbe3fSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 18521bedbe3fSmrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 18531bedbe3fSmrg func_convert_path_check : ";" \ 18541bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18551bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18561bedbe3fSmrg fi 18571bedbe3fSmrg} 18581bedbe3fSmrg# end func_convert_path_msys_to_w32 18591bedbe3fSmrg 18601bedbe3fSmrg 18611bedbe3fSmrg# func_convert_path_cygwin_to_w32 ARG 18621bedbe3fSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 18631bedbe3fSmrg# func_to_host_file_result. 18641bedbe3fSmrgfunc_convert_path_cygwin_to_w32 () 18651bedbe3fSmrg{ 18661bedbe3fSmrg $opt_debug 18671bedbe3fSmrg func_to_host_path_result="$1" 18681bedbe3fSmrg if test -n "$1"; then 18691bedbe3fSmrg # See func_convert_path_msys_to_w32: 18701bedbe3fSmrg func_stripname : : "$1" 18711bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 18721bedbe3fSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 18731bedbe3fSmrg func_convert_path_check : ";" \ 18741bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18751bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18761bedbe3fSmrg fi 18771bedbe3fSmrg} 18781bedbe3fSmrg# end func_convert_path_cygwin_to_w32 18791bedbe3fSmrg 18801bedbe3fSmrg 18811bedbe3fSmrg# func_convert_path_nix_to_w32 ARG 18821bedbe3fSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 18831bedbe3fSmrg# a working winepath. Returns result in func_to_host_file_result. 18841bedbe3fSmrgfunc_convert_path_nix_to_w32 () 1885549e21daSmrg{ 18861bedbe3fSmrg $opt_debug 18871bedbe3fSmrg func_to_host_path_result="$1" 18881bedbe3fSmrg if test -n "$1"; then 18891bedbe3fSmrg # See func_convert_path_msys_to_w32: 18901bedbe3fSmrg func_stripname : : "$1" 18911bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 18921bedbe3fSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 18931bedbe3fSmrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 18941bedbe3fSmrg func_convert_path_check : ";" \ 18951bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18961bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18971bedbe3fSmrg fi 18981bedbe3fSmrg} 18991bedbe3fSmrg# end func_convert_path_nix_to_w32 1900549e21daSmrg 1901549e21daSmrg 19021bedbe3fSmrg# func_convert_path_msys_to_cygwin ARG 19031bedbe3fSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 19041bedbe3fSmrg# Returns result in func_to_host_file_result. 19051bedbe3fSmrgfunc_convert_path_msys_to_cygwin () 19061bedbe3fSmrg{ 19071bedbe3fSmrg $opt_debug 19081bedbe3fSmrg func_to_host_path_result="$1" 19091bedbe3fSmrg if test -n "$1"; then 19101bedbe3fSmrg # See func_convert_path_msys_to_w32: 19111bedbe3fSmrg func_stripname : : "$1" 19121bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 19131bedbe3fSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 19141bedbe3fSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 19151bedbe3fSmrg func_to_host_path_result="$func_cygpath_result" 19161bedbe3fSmrg func_convert_path_check : : \ 19171bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19181bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19191bedbe3fSmrg fi 19201bedbe3fSmrg} 19211bedbe3fSmrg# end func_convert_path_msys_to_cygwin 1922549e21daSmrg 1923549e21daSmrg 19241bedbe3fSmrg# func_convert_path_nix_to_cygwin ARG 19251bedbe3fSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 19261bedbe3fSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 19271bedbe3fSmrg# func_to_host_file_result. 19281bedbe3fSmrgfunc_convert_path_nix_to_cygwin () 19291bedbe3fSmrg{ 19301bedbe3fSmrg $opt_debug 19311bedbe3fSmrg func_to_host_path_result="$1" 19321bedbe3fSmrg if test -n "$1"; then 19331bedbe3fSmrg # Remove leading and trailing path separator characters from 19341bedbe3fSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 19351bedbe3fSmrg # into '.;' and ';.', and winepath ignores them completely. 19361bedbe3fSmrg func_stripname : : "$1" 19371bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 19381bedbe3fSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 19391bedbe3fSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 19401bedbe3fSmrg func_to_host_path_result="$func_cygpath_result" 19411bedbe3fSmrg func_convert_path_check : : \ 19421bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19431bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19441bedbe3fSmrg fi 1945549e21daSmrg} 19461bedbe3fSmrg# end func_convert_path_nix_to_cygwin 19471bedbe3fSmrg 1948549e21daSmrg 1949549e21daSmrg# func_mode_compile arg... 1950549e21daSmrgfunc_mode_compile () 1951549e21daSmrg{ 1952549e21daSmrg $opt_debug 1953549e21daSmrg # Get the compilation command and the source file. 1954549e21daSmrg base_compile= 1955549e21daSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956549e21daSmrg suppress_opt=yes 1957549e21daSmrg suppress_output= 1958549e21daSmrg arg_mode=normal 1959549e21daSmrg libobj= 1960549e21daSmrg later= 1961549e21daSmrg pie_flag= 1962549e21daSmrg 1963549e21daSmrg for arg 1964549e21daSmrg do 1965549e21daSmrg case $arg_mode in 1966549e21daSmrg arg ) 1967549e21daSmrg # do not "continue". Instead, add this to base_compile 1968549e21daSmrg lastarg="$arg" 1969549e21daSmrg arg_mode=normal 1970549e21daSmrg ;; 1971549e21daSmrg 1972549e21daSmrg target ) 1973549e21daSmrg libobj="$arg" 1974549e21daSmrg arg_mode=normal 1975549e21daSmrg continue 1976549e21daSmrg ;; 1977549e21daSmrg 1978549e21daSmrg normal ) 1979549e21daSmrg # Accept any command-line options. 1980549e21daSmrg case $arg in 1981549e21daSmrg -o) 1982549e21daSmrg test -n "$libobj" && \ 1983549e21daSmrg func_fatal_error "you cannot specify \`-o' more than once" 1984549e21daSmrg arg_mode=target 1985549e21daSmrg continue 1986549e21daSmrg ;; 1987549e21daSmrg 1988549e21daSmrg -pie | -fpie | -fPIE) 19891bedbe3fSmrg func_append pie_flag " $arg" 1990549e21daSmrg continue 1991549e21daSmrg ;; 1992549e21daSmrg 1993549e21daSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 19941bedbe3fSmrg func_append later " $arg" 1995549e21daSmrg continue 1996549e21daSmrg ;; 1997549e21daSmrg 1998549e21daSmrg -no-suppress) 1999549e21daSmrg suppress_opt=no 2000549e21daSmrg continue 2001549e21daSmrg ;; 2002549e21daSmrg 2003549e21daSmrg -Xcompiler) 2004549e21daSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 2005549e21daSmrg continue # The current "srcfile" will either be retained or 2006549e21daSmrg ;; # replaced later. I would guess that would be a bug. 2007549e21daSmrg 2008549e21daSmrg -Wc,*) 2009549e21daSmrg func_stripname '-Wc,' '' "$arg" 2010549e21daSmrg args=$func_stripname_result 2011549e21daSmrg lastarg= 2012549e21daSmrg save_ifs="$IFS"; IFS=',' 2013549e21daSmrg for arg in $args; do 2014549e21daSmrg IFS="$save_ifs" 20151bedbe3fSmrg func_append_quoted lastarg "$arg" 2016549e21daSmrg done 2017549e21daSmrg IFS="$save_ifs" 2018549e21daSmrg func_stripname ' ' '' "$lastarg" 2019549e21daSmrg lastarg=$func_stripname_result 2020549e21daSmrg 2021549e21daSmrg # Add the arguments to base_compile. 20221bedbe3fSmrg func_append base_compile " $lastarg" 2023549e21daSmrg continue 2024549e21daSmrg ;; 2025549e21daSmrg 2026549e21daSmrg *) 2027549e21daSmrg # Accept the current argument as the source file. 2028549e21daSmrg # The previous "srcfile" becomes the current argument. 2029ba6a1819Smrg # 2030ba6a1819Smrg lastarg="$srcfile" 2031ba6a1819Smrg srcfile="$arg" 2032ba6a1819Smrg ;; 2033ba6a1819Smrg esac # case $arg 2034ba6a1819Smrg ;; 2035ba6a1819Smrg esac # case $arg_mode 2036ba6a1819Smrg 2037ba6a1819Smrg # Aesthetically quote the previous argument. 20381bedbe3fSmrg func_append_quoted base_compile "$lastarg" 2039ba6a1819Smrg done # for arg 2040ba6a1819Smrg 2041ba6a1819Smrg case $arg_mode in 2042ba6a1819Smrg arg) 2043549e21daSmrg func_fatal_error "you must specify an argument for -Xcompile" 2044ba6a1819Smrg ;; 2045ba6a1819Smrg target) 2046549e21daSmrg func_fatal_error "you must specify a target with \`-o'" 2047ba6a1819Smrg ;; 2048ba6a1819Smrg *) 2049ba6a1819Smrg # Get the name of the library object. 2050549e21daSmrg test -z "$libobj" && { 2051549e21daSmrg func_basename "$srcfile" 2052549e21daSmrg libobj="$func_basename_result" 2053549e21daSmrg } 2054ba6a1819Smrg ;; 2055ba6a1819Smrg esac 2056ba6a1819Smrg 2057ba6a1819Smrg # Recognize several different file suffixes. 2058ba6a1819Smrg # If the user specifies -o file.o, it is replaced with file.lo 2059ba6a1819Smrg case $libobj in 2060549e21daSmrg *.[cCFSifmso] | \ 2061549e21daSmrg *.ada | *.adb | *.ads | *.asm | \ 2062549e21daSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 20631bedbe3fSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064549e21daSmrg func_xform "$libobj" 2065549e21daSmrg libobj=$func_xform_result 2066549e21daSmrg ;; 2067ba6a1819Smrg esac 2068ba6a1819Smrg 2069ba6a1819Smrg case $libobj in 2070549e21daSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071ba6a1819Smrg *) 2072549e21daSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2073ba6a1819Smrg ;; 2074ba6a1819Smrg esac 2075ba6a1819Smrg 2076ba6a1819Smrg func_infer_tag $base_compile 2077ba6a1819Smrg 2078ba6a1819Smrg for arg in $later; do 2079ba6a1819Smrg case $arg in 2080549e21daSmrg -shared) 2081549e21daSmrg test "$build_libtool_libs" != yes && \ 2082549e21daSmrg func_fatal_configuration "can not build a shared library" 2083549e21daSmrg build_old_libs=no 2084549e21daSmrg continue 2085549e21daSmrg ;; 2086549e21daSmrg 2087ba6a1819Smrg -static) 2088549e21daSmrg build_libtool_libs=no 2089ba6a1819Smrg build_old_libs=yes 2090ba6a1819Smrg continue 2091ba6a1819Smrg ;; 2092ba6a1819Smrg 2093ba6a1819Smrg -prefer-pic) 2094ba6a1819Smrg pic_mode=yes 2095ba6a1819Smrg continue 2096ba6a1819Smrg ;; 2097ba6a1819Smrg 2098ba6a1819Smrg -prefer-non-pic) 2099ba6a1819Smrg pic_mode=no 2100ba6a1819Smrg continue 2101ba6a1819Smrg ;; 2102ba6a1819Smrg esac 2103ba6a1819Smrg done 2104ba6a1819Smrg 2105549e21daSmrg func_quote_for_eval "$libobj" 2106549e21daSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107549e21daSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108549e21daSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109549e21daSmrg func_dirname_and_basename "$obj" "/" "" 2110549e21daSmrg objname="$func_basename_result" 2111549e21daSmrg xdir="$func_dirname_result" 2112ba6a1819Smrg lobj=${xdir}$objdir/$objname 2113ba6a1819Smrg 2114549e21daSmrg test -z "$base_compile" && \ 2115549e21daSmrg func_fatal_help "you must specify a compilation command" 2116ba6a1819Smrg 2117ba6a1819Smrg # Delete any leftover library objects. 2118ba6a1819Smrg if test "$build_old_libs" = yes; then 2119ba6a1819Smrg removelist="$obj $lobj $libobj ${libobj}T" 2120ba6a1819Smrg else 2121ba6a1819Smrg removelist="$lobj $libobj ${libobj}T" 2122ba6a1819Smrg fi 2123ba6a1819Smrg 2124ba6a1819Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 2125ba6a1819Smrg case $host_os in 2126549e21daSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2127ba6a1819Smrg pic_mode=default 2128ba6a1819Smrg ;; 2129ba6a1819Smrg esac 2130ba6a1819Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131ba6a1819Smrg # non-PIC code in shared libraries is not supported 2132ba6a1819Smrg pic_mode=default 2133ba6a1819Smrg fi 2134ba6a1819Smrg 2135ba6a1819Smrg # Calculate the filename of the output object if compiler does 2136ba6a1819Smrg # not support -o with -c 2137ba6a1819Smrg if test "$compiler_c_o" = no; then 2138549e21daSmrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2139ba6a1819Smrg lockfile="$output_obj.lock" 2140ba6a1819Smrg else 2141ba6a1819Smrg output_obj= 2142ba6a1819Smrg need_locks=no 2143ba6a1819Smrg lockfile= 2144ba6a1819Smrg fi 2145ba6a1819Smrg 2146ba6a1819Smrg # Lock this critical section if it is needed 2147ba6a1819Smrg # We use this script file to make the link, it avoids creating a new file 2148ba6a1819Smrg if test "$need_locks" = yes; then 2149549e21daSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150549e21daSmrg func_echo "Waiting for $lockfile to be removed" 2151ba6a1819Smrg sleep 2 2152ba6a1819Smrg done 2153ba6a1819Smrg elif test "$need_locks" = warn; then 2154ba6a1819Smrg if test -f "$lockfile"; then 2155549e21daSmrg $ECHO "\ 2156ba6a1819Smrg*** ERROR, $lockfile exists and contains: 2157ba6a1819Smrg`cat $lockfile 2>/dev/null` 2158ba6a1819Smrg 2159ba6a1819SmrgThis indicates that another process is trying to use the same 2160ba6a1819Smrgtemporary object file, and libtool could not work around it because 2161ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together. If you 2162ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 2163ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 2164ba6a1819Smrgcompiler." 2165ba6a1819Smrg 2166549e21daSmrg $opt_dry_run || $RM $removelist 2167ba6a1819Smrg exit $EXIT_FAILURE 2168ba6a1819Smrg fi 21691bedbe3fSmrg func_append removelist " $output_obj" 2170549e21daSmrg $ECHO "$srcfile" > "$lockfile" 2171ba6a1819Smrg fi 2172ba6a1819Smrg 2173549e21daSmrg $opt_dry_run || $RM $removelist 21741bedbe3fSmrg func_append removelist " $lockfile" 2175549e21daSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176549e21daSmrg 21771bedbe3fSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 21781bedbe3fSmrg srcfile=$func_to_tool_file_result 2179549e21daSmrg func_quote_for_eval "$srcfile" 2180549e21daSmrg qsrcfile=$func_quote_for_eval_result 2181ba6a1819Smrg 2182ba6a1819Smrg # Only build a PIC object if we are building libtool libraries. 2183ba6a1819Smrg if test "$build_libtool_libs" = yes; then 2184ba6a1819Smrg # Without this assignment, base_compile gets emptied. 2185ba6a1819Smrg fbsd_hideous_sh_bug=$base_compile 2186ba6a1819Smrg 2187ba6a1819Smrg if test "$pic_mode" != no; then 2188ba6a1819Smrg command="$base_compile $qsrcfile $pic_flag" 2189ba6a1819Smrg else 2190ba6a1819Smrg # Don't build PIC code 2191ba6a1819Smrg command="$base_compile $qsrcfile" 2192ba6a1819Smrg fi 2193ba6a1819Smrg 2194549e21daSmrg func_mkdir_p "$xdir$objdir" 2195ba6a1819Smrg 2196ba6a1819Smrg if test -z "$output_obj"; then 2197ba6a1819Smrg # Place PIC objects in $objdir 21981bedbe3fSmrg func_append command " -o $lobj" 2199ba6a1819Smrg fi 2200ba6a1819Smrg 2201549e21daSmrg func_show_eval_locale "$command" \ 2202549e21daSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203ba6a1819Smrg 2204ba6a1819Smrg if test "$need_locks" = warn && 2205ba6a1819Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206549e21daSmrg $ECHO "\ 2207ba6a1819Smrg*** ERROR, $lockfile contains: 2208ba6a1819Smrg`cat $lockfile 2>/dev/null` 2209ba6a1819Smrg 2210ba6a1819Smrgbut it should contain: 2211ba6a1819Smrg$srcfile 2212ba6a1819Smrg 2213ba6a1819SmrgThis indicates that another process is trying to use the same 2214ba6a1819Smrgtemporary object file, and libtool could not work around it because 2215ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together. If you 2216ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 2217ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 2218ba6a1819Smrgcompiler." 2219ba6a1819Smrg 2220549e21daSmrg $opt_dry_run || $RM $removelist 2221ba6a1819Smrg exit $EXIT_FAILURE 2222ba6a1819Smrg fi 2223ba6a1819Smrg 2224ba6a1819Smrg # Just move the object if needed, then go on to compile the next one 2225ba6a1819Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226549e21daSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227549e21daSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228ba6a1819Smrg fi 2229ba6a1819Smrg 2230ba6a1819Smrg # Allow error messages only from the first compilation. 2231ba6a1819Smrg if test "$suppress_opt" = yes; then 2232549e21daSmrg suppress_output=' >/dev/null 2>&1' 2233ba6a1819Smrg fi 2234ba6a1819Smrg fi 2235ba6a1819Smrg 2236ba6a1819Smrg # Only build a position-dependent object if we build old libraries. 2237ba6a1819Smrg if test "$build_old_libs" = yes; then 2238ba6a1819Smrg if test "$pic_mode" != yes; then 2239ba6a1819Smrg # Don't build PIC code 2240549e21daSmrg command="$base_compile $qsrcfile$pie_flag" 2241ba6a1819Smrg else 2242ba6a1819Smrg command="$base_compile $qsrcfile $pic_flag" 2243ba6a1819Smrg fi 2244ba6a1819Smrg if test "$compiler_c_o" = yes; then 22451bedbe3fSmrg func_append command " -o $obj" 2246ba6a1819Smrg fi 2247ba6a1819Smrg 2248ba6a1819Smrg # Suppress compiler output if we already did a PIC compilation. 22491bedbe3fSmrg func_append command "$suppress_output" 2250549e21daSmrg func_show_eval_locale "$command" \ 2251549e21daSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252ba6a1819Smrg 2253ba6a1819Smrg if test "$need_locks" = warn && 2254ba6a1819Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255549e21daSmrg $ECHO "\ 2256ba6a1819Smrg*** ERROR, $lockfile contains: 2257ba6a1819Smrg`cat $lockfile 2>/dev/null` 2258ba6a1819Smrg 2259ba6a1819Smrgbut it should contain: 2260ba6a1819Smrg$srcfile 2261ba6a1819Smrg 2262ba6a1819SmrgThis indicates that another process is trying to use the same 2263ba6a1819Smrgtemporary object file, and libtool could not work around it because 2264ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together. If you 2265ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 2266ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 2267ba6a1819Smrgcompiler." 2268ba6a1819Smrg 2269549e21daSmrg $opt_dry_run || $RM $removelist 2270ba6a1819Smrg exit $EXIT_FAILURE 2271ba6a1819Smrg fi 2272ba6a1819Smrg 2273ba6a1819Smrg # Just move the object if needed 2274ba6a1819Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275549e21daSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276549e21daSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277ba6a1819Smrg fi 2278549e21daSmrg fi 2279ba6a1819Smrg 2280549e21daSmrg $opt_dry_run || { 2281549e21daSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282ba6a1819Smrg 2283549e21daSmrg # Unlock the critical section if it was locked 2284549e21daSmrg if test "$need_locks" != no; then 2285549e21daSmrg removelist=$lockfile 2286549e21daSmrg $RM "$lockfile" 2287549e21daSmrg fi 2288549e21daSmrg } 2289ba6a1819Smrg 2290549e21daSmrg exit $EXIT_SUCCESS 2291549e21daSmrg} 2292ba6a1819Smrg 2293549e21daSmrg$opt_help || { 22941bedbe3fSmrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295549e21daSmrg} 2296ba6a1819Smrg 2297549e21daSmrgfunc_mode_help () 2298549e21daSmrg{ 2299549e21daSmrg # We need to display help for each of the modes. 23001bedbe3fSmrg case $opt_mode in 2301549e21daSmrg "") 2302549e21daSmrg # Generic help is extracted from the usage comments 2303549e21daSmrg # at the start of this file. 2304549e21daSmrg func_help 2305549e21daSmrg ;; 2306ba6a1819Smrg 2307549e21daSmrg clean) 2308549e21daSmrg $ECHO \ 2309549e21daSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310ba6a1819Smrg 2311549e21daSmrgRemove files from the build directory. 2312ba6a1819Smrg 2313549e21daSmrgRM is the name of the program to use to delete files associated with each FILE 2314549e21daSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315549e21daSmrgto RM. 2316ba6a1819Smrg 2317549e21daSmrgIf FILE is a libtool library, object or program, all the files associated 2318549e21daSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319549e21daSmrg ;; 2320ba6a1819Smrg 2321549e21daSmrg compile) 2322549e21daSmrg $ECHO \ 2323549e21daSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324ba6a1819Smrg 2325549e21daSmrgCompile a source file into a libtool library object. 2326ba6a1819Smrg 2327549e21daSmrgThis mode accepts the following additional options: 2328ba6a1819Smrg 2329549e21daSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330549e21daSmrg -no-suppress do not suppress compiler output for multiple passes 2331549e21daSmrg -prefer-pic try to build PIC objects only 2332549e21daSmrg -prefer-non-pic try to build non-PIC objects only 2333549e21daSmrg -shared do not build a \`.o' file suitable for static linking 2334549e21daSmrg -static only build a \`.o' file suitable for static linking 2335549e21daSmrg -Wc,FLAG pass FLAG directly to the compiler 2336ba6a1819Smrg 2337549e21daSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338549e21daSmrgfrom the given SOURCEFILE. 2339ba6a1819Smrg 2340549e21daSmrgThe output file name is determined by removing the directory component from 2341549e21daSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342549e21daSmrglibrary object suffix, \`.lo'." 2343549e21daSmrg ;; 2344ba6a1819Smrg 2345549e21daSmrg execute) 2346549e21daSmrg $ECHO \ 2347549e21daSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348ba6a1819Smrg 2349549e21daSmrgAutomatically set library path, then run a program. 2350ba6a1819Smrg 2351549e21daSmrgThis mode accepts the following additional options: 2352ba6a1819Smrg 2353549e21daSmrg -dlopen FILE add the directory containing FILE to the library path 2354ba6a1819Smrg 2355549e21daSmrgThis mode sets the library path environment variable according to \`-dlopen' 2356549e21daSmrgflags. 2357ba6a1819Smrg 2358549e21daSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359549e21daSmrginto their corresponding uninstalled binary, and any of their required library 2360549e21daSmrgdirectories are added to the library path. 2361ba6a1819Smrg 2362549e21daSmrgThen, COMMAND is executed, with ARGS as arguments." 2363549e21daSmrg ;; 2364ba6a1819Smrg 2365549e21daSmrg finish) 2366549e21daSmrg $ECHO \ 2367549e21daSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368ba6a1819Smrg 2369549e21daSmrgComplete the installation of libtool libraries. 2370ba6a1819Smrg 2371549e21daSmrgEach LIBDIR is a directory that contains libtool libraries. 2372ba6a1819Smrg 2373549e21daSmrgThe commands that this mode executes may require superuser privileges. Use 2374549e21daSmrgthe \`--dry-run' option if you just want to see what would be executed." 2375549e21daSmrg ;; 2376ba6a1819Smrg 2377549e21daSmrg install) 2378549e21daSmrg $ECHO \ 2379549e21daSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380ba6a1819Smrg 2381549e21daSmrgInstall executables or libraries. 2382ba6a1819Smrg 2383549e21daSmrgINSTALL-COMMAND is the installation command. The first component should be 2384549e21daSmrgeither the \`install' or \`cp' program. 2385ba6a1819Smrg 2386549e21daSmrgThe following components of INSTALL-COMMAND are treated specially: 2387ba6a1819Smrg 2388549e21daSmrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389ba6a1819Smrg 2390549e21daSmrgThe rest of the components are interpreted as arguments to that command (only 2391549e21daSmrgBSD-compatible install options are recognized)." 2392549e21daSmrg ;; 2393ba6a1819Smrg 2394549e21daSmrg link) 2395549e21daSmrg $ECHO \ 2396549e21daSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397ba6a1819Smrg 2398549e21daSmrgLink object files or libraries together to form another library, or to 2399549e21daSmrgcreate an executable program. 2400ba6a1819Smrg 2401549e21daSmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402549e21daSmrga program from several object files. 2403ba6a1819Smrg 2404549e21daSmrgThe following components of LINK-COMMAND are treated specially: 2405ba6a1819Smrg 2406549e21daSmrg -all-static do not do any dynamic linking at all 2407549e21daSmrg -avoid-version do not add a version suffix if possible 2408549e21daSmrg -bindir BINDIR specify path to binaries directory (for systems where 2409549e21daSmrg libraries must be found in the PATH setting at runtime) 2410549e21daSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411549e21daSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412549e21daSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413549e21daSmrg -export-symbols SYMFILE 2414549e21daSmrg try to export only the symbols listed in SYMFILE 2415549e21daSmrg -export-symbols-regex REGEX 2416549e21daSmrg try to export only the symbols matching REGEX 2417549e21daSmrg -LLIBDIR search LIBDIR for required installed libraries 2418549e21daSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419549e21daSmrg -module build a library that can dlopened 2420549e21daSmrg -no-fast-install disable the fast-install mode 2421549e21daSmrg -no-install link a not-installable executable 2422549e21daSmrg -no-undefined declare that a library does not refer to external symbols 2423549e21daSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424549e21daSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425549e21daSmrg -precious-files-regex REGEX 2426549e21daSmrg don't remove output files matching REGEX 2427549e21daSmrg -release RELEASE specify package release information 2428549e21daSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429549e21daSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430549e21daSmrg -shared only do dynamic linking of libtool libraries 2431549e21daSmrg -shrext SUFFIX override the standard shared library file extension 2432549e21daSmrg -static do not do any dynamic linking of uninstalled libtool libraries 2433549e21daSmrg -static-libtool-libs 2434549e21daSmrg do not do any dynamic linking of libtool libraries 2435549e21daSmrg -version-info CURRENT[:REVISION[:AGE]] 2436549e21daSmrg specify library version info [each variable defaults to 0] 2437549e21daSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 2438549e21daSmrg -Wc,FLAG 2439549e21daSmrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2440549e21daSmrg -Wl,FLAG 2441549e21daSmrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 2442549e21daSmrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443ba6a1819Smrg 2444549e21daSmrgAll other options (arguments beginning with \`-') are ignored. 2445ba6a1819Smrg 2446549e21daSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447549e21daSmrgtreated as uninstalled libtool libraries, other files are standard or library 2448549e21daSmrgobject files. 2449ba6a1819Smrg 2450549e21daSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451549e21daSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452549e21daSmrgrequired, except when creating a convenience library. 2453ba6a1819Smrg 2454549e21daSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455549e21daSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456ba6a1819Smrg 2457549e21daSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458549e21daSmrgis created, otherwise an executable program is created." 2459549e21daSmrg ;; 2460ba6a1819Smrg 2461549e21daSmrg uninstall) 2462549e21daSmrg $ECHO \ 2463549e21daSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464ba6a1819Smrg 2465549e21daSmrgRemove libraries from an installation directory. 2466ba6a1819Smrg 2467549e21daSmrgRM is the name of the program to use to delete files associated with each FILE 2468549e21daSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469549e21daSmrgto RM. 2470ba6a1819Smrg 2471549e21daSmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472549e21daSmrgOtherwise, only FILE itself is deleted using RM." 2473ba6a1819Smrg ;; 2474ba6a1819Smrg 2475549e21daSmrg *) 24761bedbe3fSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477549e21daSmrg ;; 2478549e21daSmrg esac 2479ba6a1819Smrg 2480549e21daSmrg echo 2481549e21daSmrg $ECHO "Try \`$progname --help' for more information about other modes." 2482549e21daSmrg} 2483ba6a1819Smrg 2484549e21daSmrg# Now that we've collected a possible --mode arg, show help if necessary 2485549e21daSmrgif $opt_help; then 2486549e21daSmrg if test "$opt_help" = :; then 2487549e21daSmrg func_mode_help 2488549e21daSmrg else 2489549e21daSmrg { 2490549e21daSmrg func_help noexit 24911bedbe3fSmrg for opt_mode in compile link execute install finish uninstall clean; do 2492549e21daSmrg func_mode_help 2493549e21daSmrg done 2494549e21daSmrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2495549e21daSmrg { 2496549e21daSmrg func_help noexit 24971bedbe3fSmrg for opt_mode in compile link execute install finish uninstall clean; do 2498549e21daSmrg echo 2499549e21daSmrg func_mode_help 2500549e21daSmrg done 2501549e21daSmrg } | 2502549e21daSmrg sed '1d 2503549e21daSmrg /^When reporting/,/^Report/{ 2504549e21daSmrg H 2505549e21daSmrg d 2506549e21daSmrg } 2507549e21daSmrg $x 2508549e21daSmrg /information about other modes/d 2509549e21daSmrg /more detailed .*MODE/d 2510549e21daSmrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2511549e21daSmrg fi 2512549e21daSmrg exit $? 2513549e21daSmrgfi 2514ba6a1819Smrg 2515ba6a1819Smrg 2516549e21daSmrg# func_mode_execute arg... 2517549e21daSmrgfunc_mode_execute () 2518549e21daSmrg{ 2519549e21daSmrg $opt_debug 2520549e21daSmrg # The first argument is the command name. 2521549e21daSmrg cmd="$nonopt" 2522549e21daSmrg test -z "$cmd" && \ 2523549e21daSmrg func_fatal_help "you must specify a COMMAND" 2524ba6a1819Smrg 2525549e21daSmrg # Handle -dlopen flags immediately. 25261bedbe3fSmrg for file in $opt_dlopen; do 2527549e21daSmrg test -f "$file" \ 2528549e21daSmrg || func_fatal_help "\`$file' is not a file" 2529ba6a1819Smrg 2530549e21daSmrg dir= 2531549e21daSmrg case $file in 2532549e21daSmrg *.la) 25331bedbe3fSmrg func_resolve_sysroot "$file" 25341bedbe3fSmrg file=$func_resolve_sysroot_result 25351bedbe3fSmrg 2536549e21daSmrg # Check to see that this really is a libtool archive. 2537549e21daSmrg func_lalib_unsafe_p "$file" \ 2538549e21daSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2539ba6a1819Smrg 2540549e21daSmrg # Read the libtool library. 2541549e21daSmrg dlname= 2542549e21daSmrg library_names= 2543549e21daSmrg func_source "$file" 2544ba6a1819Smrg 2545549e21daSmrg # Skip this library if it cannot be dlopened. 2546549e21daSmrg if test -z "$dlname"; then 2547549e21daSmrg # Warn if it was a shared library. 2548549e21daSmrg test -n "$library_names" && \ 2549549e21daSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550549e21daSmrg continue 2551549e21daSmrg fi 2552ba6a1819Smrg 2553549e21daSmrg func_dirname "$file" "" "." 2554549e21daSmrg dir="$func_dirname_result" 2555ba6a1819Smrg 2556549e21daSmrg if test -f "$dir/$objdir/$dlname"; then 25571bedbe3fSmrg func_append dir "/$objdir" 2558549e21daSmrg else 2559549e21daSmrg if test ! -f "$dir/$dlname"; then 2560549e21daSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561549e21daSmrg fi 2562549e21daSmrg fi 2563ba6a1819Smrg ;; 2564ba6a1819Smrg 2565549e21daSmrg *.lo) 2566549e21daSmrg # Just add the directory containing the .lo file. 2567549e21daSmrg func_dirname "$file" "" "." 2568549e21daSmrg dir="$func_dirname_result" 2569ba6a1819Smrg ;; 2570ba6a1819Smrg 2571549e21daSmrg *) 2572549e21daSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573ba6a1819Smrg continue 2574ba6a1819Smrg ;; 2575549e21daSmrg esac 2576ba6a1819Smrg 2577549e21daSmrg # Get the absolute pathname. 2578549e21daSmrg absdir=`cd "$dir" && pwd` 2579549e21daSmrg test -n "$absdir" && dir="$absdir" 2580ba6a1819Smrg 2581549e21daSmrg # Now add the directory to shlibpath_var. 2582549e21daSmrg if eval "test -z \"\$$shlibpath_var\""; then 2583549e21daSmrg eval "$shlibpath_var=\"\$dir\"" 2584549e21daSmrg else 2585549e21daSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586549e21daSmrg fi 2587549e21daSmrg done 2588ba6a1819Smrg 2589549e21daSmrg # This variable tells wrapper scripts just to set shlibpath_var 2590549e21daSmrg # rather than running their programs. 2591549e21daSmrg libtool_execute_magic="$magic" 2592ba6a1819Smrg 2593549e21daSmrg # Check if any of the arguments is a wrapper script. 2594549e21daSmrg args= 2595549e21daSmrg for file 2596549e21daSmrg do 2597549e21daSmrg case $file in 2598549e21daSmrg -* | *.la | *.lo ) ;; 2599549e21daSmrg *) 2600549e21daSmrg # Do a test to see if this is really a libtool program. 2601549e21daSmrg if func_ltwrapper_script_p "$file"; then 2602549e21daSmrg func_source "$file" 2603549e21daSmrg # Transform arg to wrapped name. 2604549e21daSmrg file="$progdir/$program" 2605549e21daSmrg elif func_ltwrapper_executable_p "$file"; then 2606549e21daSmrg func_ltwrapper_scriptname "$file" 2607549e21daSmrg func_source "$func_ltwrapper_scriptname_result" 2608549e21daSmrg # Transform arg to wrapped name. 2609549e21daSmrg file="$progdir/$program" 2610549e21daSmrg fi 2611ba6a1819Smrg ;; 2612549e21daSmrg esac 2613549e21daSmrg # Quote arguments (to preserve shell metacharacters). 26141bedbe3fSmrg func_append_quoted args "$file" 2615549e21daSmrg done 2616ba6a1819Smrg 2617549e21daSmrg if test "X$opt_dry_run" = Xfalse; then 2618549e21daSmrg if test -n "$shlibpath_var"; then 2619549e21daSmrg # Export the shlibpath_var. 2620549e21daSmrg eval "export $shlibpath_var" 2621549e21daSmrg fi 2622ba6a1819Smrg 2623549e21daSmrg # Restore saved environment variables 2624549e21daSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625549e21daSmrg do 2626549e21daSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627549e21daSmrg $lt_var=\$save_$lt_var; export $lt_var 2628549e21daSmrg else 2629549e21daSmrg $lt_unset $lt_var 2630549e21daSmrg fi" 2631549e21daSmrg done 2632ba6a1819Smrg 2633549e21daSmrg # Now prepare to actually exec the command. 2634549e21daSmrg exec_cmd="\$cmd$args" 2635549e21daSmrg else 2636549e21daSmrg # Display what would be done. 2637549e21daSmrg if test -n "$shlibpath_var"; then 2638549e21daSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 2639549e21daSmrg echo "export $shlibpath_var" 2640549e21daSmrg fi 2641549e21daSmrg $ECHO "$cmd$args" 2642549e21daSmrg exit $EXIT_SUCCESS 2643549e21daSmrg fi 2644549e21daSmrg} 2645ba6a1819Smrg 26461bedbe3fSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647ba6a1819Smrg 2648ba6a1819Smrg 2649549e21daSmrg# func_mode_finish arg... 2650549e21daSmrgfunc_mode_finish () 2651549e21daSmrg{ 2652549e21daSmrg $opt_debug 26531bedbe3fSmrg libs= 26541bedbe3fSmrg libdirs= 2655549e21daSmrg admincmds= 2656ba6a1819Smrg 26571bedbe3fSmrg for opt in "$nonopt" ${1+"$@"} 26581bedbe3fSmrg do 26591bedbe3fSmrg if test -d "$opt"; then 26601bedbe3fSmrg func_append libdirs " $opt" 26611bedbe3fSmrg 26621bedbe3fSmrg elif test -f "$opt"; then 26631bedbe3fSmrg if func_lalib_unsafe_p "$opt"; then 26641bedbe3fSmrg func_append libs " $opt" 26651bedbe3fSmrg else 26661bedbe3fSmrg func_warning "\`$opt' is not a valid libtool archive" 26671bedbe3fSmrg fi 26681bedbe3fSmrg 26691bedbe3fSmrg else 26701bedbe3fSmrg func_fatal_error "invalid argument \`$opt'" 26711bedbe3fSmrg fi 26721bedbe3fSmrg done 26731bedbe3fSmrg 26741bedbe3fSmrg if test -n "$libs"; then 26751bedbe3fSmrg if test -n "$lt_sysroot"; then 26761bedbe3fSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 26771bedbe3fSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 26781bedbe3fSmrg else 26791bedbe3fSmrg sysroot_cmd= 26801bedbe3fSmrg fi 26811bedbe3fSmrg 26821bedbe3fSmrg # Remove sysroot references 26831bedbe3fSmrg if $opt_dry_run; then 26841bedbe3fSmrg for lib in $libs; do 26851bedbe3fSmrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 26861bedbe3fSmrg done 26871bedbe3fSmrg else 26881bedbe3fSmrg tmpdir=`func_mktempdir` 26891bedbe3fSmrg for lib in $libs; do 26901bedbe3fSmrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 26911bedbe3fSmrg > $tmpdir/tmp-la 26921bedbe3fSmrg mv -f $tmpdir/tmp-la $lib 26931bedbe3fSmrg done 26941bedbe3fSmrg ${RM}r "$tmpdir" 26951bedbe3fSmrg fi 26961bedbe3fSmrg fi 2697ba6a1819Smrg 26981bedbe3fSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699549e21daSmrg for libdir in $libdirs; do 2700549e21daSmrg if test -n "$finish_cmds"; then 2701549e21daSmrg # Do each command in the finish commands. 2702549e21daSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703549e21daSmrg'"$cmd"'"' 2704549e21daSmrg fi 2705549e21daSmrg if test -n "$finish_eval"; then 2706549e21daSmrg # Do the single finish_eval. 2707549e21daSmrg eval cmds=\"$finish_eval\" 27081bedbe3fSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709549e21daSmrg $cmds" 2710549e21daSmrg fi 2711549e21daSmrg done 2712549e21daSmrg fi 2713ba6a1819Smrg 2714549e21daSmrg # Exit here if they wanted silent mode. 2715549e21daSmrg $opt_silent && exit $EXIT_SUCCESS 2716ba6a1819Smrg 27171bedbe3fSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 27181bedbe3fSmrg echo "----------------------------------------------------------------------" 27191bedbe3fSmrg echo "Libraries have been installed in:" 27201bedbe3fSmrg for libdir in $libdirs; do 27211bedbe3fSmrg $ECHO " $libdir" 27221bedbe3fSmrg done 27231bedbe3fSmrg echo 27241bedbe3fSmrg echo "If you ever happen to want to link against installed libraries" 27251bedbe3fSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 27261bedbe3fSmrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 27271bedbe3fSmrg echo "flag during linking and do at least one of the following:" 27281bedbe3fSmrg if test -n "$shlibpath_var"; then 27291bedbe3fSmrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 27301bedbe3fSmrg echo " during execution" 27311bedbe3fSmrg fi 27321bedbe3fSmrg if test -n "$runpath_var"; then 27331bedbe3fSmrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 27341bedbe3fSmrg echo " during linking" 27351bedbe3fSmrg fi 27361bedbe3fSmrg if test -n "$hardcode_libdir_flag_spec"; then 27371bedbe3fSmrg libdir=LIBDIR 27381bedbe3fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 2739ba6a1819Smrg 27401bedbe3fSmrg $ECHO " - use the \`$flag' linker flag" 27411bedbe3fSmrg fi 27421bedbe3fSmrg if test -n "$admincmds"; then 27431bedbe3fSmrg $ECHO " - have your system administrator run these commands:$admincmds" 27441bedbe3fSmrg fi 27451bedbe3fSmrg if test -f /etc/ld.so.conf; then 27461bedbe3fSmrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 27471bedbe3fSmrg fi 27481bedbe3fSmrg echo 2749ba6a1819Smrg 27501bedbe3fSmrg echo "See any operating system documentation about shared libraries for" 27511bedbe3fSmrg case $host in 27521bedbe3fSmrg solaris2.[6789]|solaris2.1[0-9]) 27531bedbe3fSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 27541bedbe3fSmrg echo "pages." 27551bedbe3fSmrg ;; 27561bedbe3fSmrg *) 27571bedbe3fSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 27581bedbe3fSmrg ;; 27591bedbe3fSmrg esac 27601bedbe3fSmrg echo "----------------------------------------------------------------------" 27611bedbe3fSmrg fi 2762549e21daSmrg exit $EXIT_SUCCESS 2763549e21daSmrg} 2764ba6a1819Smrg 27651bedbe3fSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766ba6a1819Smrg 2767ba6a1819Smrg 2768549e21daSmrg# func_mode_install arg... 2769549e21daSmrgfunc_mode_install () 2770549e21daSmrg{ 2771549e21daSmrg $opt_debug 2772549e21daSmrg # There may be an optional sh(1) argument at the beginning of 2773549e21daSmrg # install_prog (especially on Windows NT). 2774549e21daSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775549e21daSmrg # Allow the use of GNU shtool's install command. 2776549e21daSmrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777549e21daSmrg # Aesthetically quote it. 2778549e21daSmrg func_quote_for_eval "$nonopt" 2779549e21daSmrg install_prog="$func_quote_for_eval_result " 2780549e21daSmrg arg=$1 2781549e21daSmrg shift 2782549e21daSmrg else 2783549e21daSmrg install_prog= 2784549e21daSmrg arg=$nonopt 2785549e21daSmrg fi 2786ba6a1819Smrg 2787549e21daSmrg # The real first argument should be the name of the installation program. 2788549e21daSmrg # Aesthetically quote it. 2789549e21daSmrg func_quote_for_eval "$arg" 27901bedbe3fSmrg func_append install_prog "$func_quote_for_eval_result" 2791549e21daSmrg install_shared_prog=$install_prog 2792549e21daSmrg case " $install_prog " in 2793549e21daSmrg *[\\\ /]cp\ *) install_cp=: ;; 2794549e21daSmrg *) install_cp=false ;; 2795549e21daSmrg esac 2796ba6a1819Smrg 2797549e21daSmrg # We need to accept at least all the BSD install flags. 2798549e21daSmrg dest= 2799549e21daSmrg files= 2800549e21daSmrg opts= 2801549e21daSmrg prev= 2802549e21daSmrg install_type= 2803549e21daSmrg isdir=no 2804549e21daSmrg stripme= 2805549e21daSmrg no_mode=: 2806549e21daSmrg for arg 2807549e21daSmrg do 2808549e21daSmrg arg2= 2809549e21daSmrg if test -n "$dest"; then 28101bedbe3fSmrg func_append files " $dest" 2811549e21daSmrg dest=$arg 2812549e21daSmrg continue 2813549e21daSmrg fi 2814ba6a1819Smrg 2815549e21daSmrg case $arg in 2816549e21daSmrg -d) isdir=yes ;; 2817549e21daSmrg -f) 2818549e21daSmrg if $install_cp; then :; else 2819549e21daSmrg prev=$arg 2820ba6a1819Smrg fi 2821549e21daSmrg ;; 2822549e21daSmrg -g | -m | -o) 2823549e21daSmrg prev=$arg 2824549e21daSmrg ;; 2825549e21daSmrg -s) 2826549e21daSmrg stripme=" -s" 2827ba6a1819Smrg continue 2828ba6a1819Smrg ;; 2829549e21daSmrg -*) 2830549e21daSmrg ;; 2831ba6a1819Smrg *) 2832549e21daSmrg # If the previous option needed an argument, then skip it. 2833549e21daSmrg if test -n "$prev"; then 2834549e21daSmrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 2835549e21daSmrg arg2=$install_override_mode 2836549e21daSmrg no_mode=false 2837549e21daSmrg fi 2838549e21daSmrg prev= 2839549e21daSmrg else 2840549e21daSmrg dest=$arg 2841549e21daSmrg continue 2842549e21daSmrg fi 2843ba6a1819Smrg ;; 2844549e21daSmrg esac 2845ba6a1819Smrg 2846549e21daSmrg # Aesthetically quote the argument. 2847549e21daSmrg func_quote_for_eval "$arg" 28481bedbe3fSmrg func_append install_prog " $func_quote_for_eval_result" 2849549e21daSmrg if test -n "$arg2"; then 2850549e21daSmrg func_quote_for_eval "$arg2" 2851ba6a1819Smrg fi 28521bedbe3fSmrg func_append install_shared_prog " $func_quote_for_eval_result" 2853549e21daSmrg done 2854ba6a1819Smrg 2855549e21daSmrg test -z "$install_prog" && \ 2856549e21daSmrg func_fatal_help "you must specify an install program" 2857ba6a1819Smrg 2858549e21daSmrg test -n "$prev" && \ 2859549e21daSmrg func_fatal_help "the \`$prev' option requires an argument" 2860ba6a1819Smrg 2861549e21daSmrg if test -n "$install_override_mode" && $no_mode; then 2862549e21daSmrg if $install_cp; then :; else 2863549e21daSmrg func_quote_for_eval "$install_override_mode" 28641bedbe3fSmrg func_append install_shared_prog " -m $func_quote_for_eval_result" 2865549e21daSmrg fi 2866ba6a1819Smrg fi 2867ba6a1819Smrg 2868549e21daSmrg if test -z "$files"; then 2869549e21daSmrg if test -z "$dest"; then 2870549e21daSmrg func_fatal_help "no file or destination specified" 2871549e21daSmrg else 2872549e21daSmrg func_fatal_help "you must specify a destination" 2873ba6a1819Smrg fi 2874ba6a1819Smrg fi 2875ba6a1819Smrg 2876549e21daSmrg # Strip any trailing slash from the destination. 2877549e21daSmrg func_stripname '' '/' "$dest" 2878549e21daSmrg dest=$func_stripname_result 2879ba6a1819Smrg 2880549e21daSmrg # Check to see that the destination is a directory. 2881549e21daSmrg test -d "$dest" && isdir=yes 2882549e21daSmrg if test "$isdir" = yes; then 2883549e21daSmrg destdir="$dest" 2884549e21daSmrg destname= 2885549e21daSmrg else 2886549e21daSmrg func_dirname_and_basename "$dest" "" "." 2887549e21daSmrg destdir="$func_dirname_result" 2888549e21daSmrg destname="$func_basename_result" 2889549e21daSmrg 2890549e21daSmrg # Not a directory, so check to see that there is only one file specified. 2891549e21daSmrg set dummy $files; shift 2892549e21daSmrg test "$#" -gt 1 && \ 2893549e21daSmrg func_fatal_help "\`$dest' is not a directory" 2894549e21daSmrg fi 2895549e21daSmrg case $destdir in 2896549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2897ba6a1819Smrg *) 2898549e21daSmrg for file in $files; do 2899549e21daSmrg case $file in 2900549e21daSmrg *.lo) ;; 2901549e21daSmrg *) 2902549e21daSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903549e21daSmrg ;; 2904549e21daSmrg esac 2905549e21daSmrg done 2906ba6a1819Smrg ;; 2907ba6a1819Smrg esac 2908ba6a1819Smrg 2909549e21daSmrg # This variable tells wrapper scripts just to set variables rather 2910549e21daSmrg # than running their programs. 2911549e21daSmrg libtool_install_magic="$magic" 2912ba6a1819Smrg 2913549e21daSmrg staticlibs= 2914549e21daSmrg future_libdirs= 2915549e21daSmrg current_libdirs= 2916549e21daSmrg for file in $files; do 2917ba6a1819Smrg 2918549e21daSmrg # Do each installation. 2919549e21daSmrg case $file in 2920549e21daSmrg *.$libext) 2921549e21daSmrg # Do the static libraries later. 29221bedbe3fSmrg func_append staticlibs " $file" 2923549e21daSmrg ;; 2924ba6a1819Smrg 2925549e21daSmrg *.la) 29261bedbe3fSmrg func_resolve_sysroot "$file" 29271bedbe3fSmrg file=$func_resolve_sysroot_result 29281bedbe3fSmrg 2929549e21daSmrg # Check to see that this really is a libtool archive. 2930549e21daSmrg func_lalib_unsafe_p "$file" \ 2931549e21daSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932549e21daSmrg 2933549e21daSmrg library_names= 2934549e21daSmrg old_library= 2935549e21daSmrg relink_command= 2936549e21daSmrg func_source "$file" 2937549e21daSmrg 2938549e21daSmrg # Add the libdir to current_libdirs if it is the destination. 2939549e21daSmrg if test "X$destdir" = "X$libdir"; then 2940549e21daSmrg case "$current_libdirs " in 2941549e21daSmrg *" $libdir "*) ;; 29421bedbe3fSmrg *) func_append current_libdirs " $libdir" ;; 2943ba6a1819Smrg esac 2944549e21daSmrg else 2945549e21daSmrg # Note the libdir as a future libdir. 2946549e21daSmrg case "$future_libdirs " in 2947549e21daSmrg *" $libdir "*) ;; 29481bedbe3fSmrg *) func_append future_libdirs " $libdir" ;; 2949549e21daSmrg esac 2950549e21daSmrg fi 2951549e21daSmrg 2952549e21daSmrg func_dirname "$file" "/" "" 2953549e21daSmrg dir="$func_dirname_result" 29541bedbe3fSmrg func_append dir "$objdir" 2955549e21daSmrg 2956549e21daSmrg if test -n "$relink_command"; then 2957549e21daSmrg # Determine the prefix the user has applied to our future dir. 2958549e21daSmrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959549e21daSmrg 2960549e21daSmrg # Don't allow the user to place us outside of our expected 2961549e21daSmrg # location b/c this prevents finding dependent libraries that 2962549e21daSmrg # are installed to the same prefix. 2963549e21daSmrg # At present, this check doesn't affect windows .dll's that 2964549e21daSmrg # are installed into $libdir/../bin (currently, that works fine) 2965549e21daSmrg # but it's something to keep an eye on. 2966549e21daSmrg test "$inst_prefix_dir" = "$destdir" && \ 2967549e21daSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968549e21daSmrg 2969549e21daSmrg if test -n "$inst_prefix_dir"; then 2970549e21daSmrg # Stick the inst_prefix_dir data into the link command. 2971549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972ba6a1819Smrg else 2973549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974ba6a1819Smrg fi 2975549e21daSmrg 2976549e21daSmrg func_warning "relinking \`$file'" 2977549e21daSmrg func_show_eval "$relink_command" \ 2978549e21daSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979549e21daSmrg fi 2980549e21daSmrg 2981549e21daSmrg # See the names of the shared library. 2982549e21daSmrg set dummy $library_names; shift 2983549e21daSmrg if test -n "$1"; then 2984549e21daSmrg realname="$1" 2985549e21daSmrg shift 2986549e21daSmrg 2987549e21daSmrg srcname="$realname" 2988549e21daSmrg test -n "$relink_command" && srcname="$realname"T 2989549e21daSmrg 2990549e21daSmrg # Install the shared library and build the symlinks. 2991549e21daSmrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992549e21daSmrg 'exit $?' 2993549e21daSmrg tstripme="$stripme" 2994549e21daSmrg case $host_os in 2995549e21daSmrg cygwin* | mingw* | pw32* | cegcc*) 2996549e21daSmrg case $realname in 2997549e21daSmrg *.dll.a) 2998549e21daSmrg tstripme="" 2999549e21daSmrg ;; 3000549e21daSmrg esac 3001549e21daSmrg ;; 3002549e21daSmrg esac 3003549e21daSmrg if test -n "$tstripme" && test -n "$striplib"; then 3004549e21daSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005ba6a1819Smrg fi 3006549e21daSmrg 3007549e21daSmrg if test "$#" -gt 0; then 3008549e21daSmrg # Delete the old symlinks, and create new ones. 3009549e21daSmrg # Try `ln -sf' first, because the `ln' binary might depend on 3010549e21daSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011549e21daSmrg # so we also need to try rm && ln -s. 3012549e21daSmrg for linkname 3013549e21daSmrg do 3014549e21daSmrg test "$linkname" != "$realname" \ 3015549e21daSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016ba6a1819Smrg done 3017ba6a1819Smrg fi 3018549e21daSmrg 3019549e21daSmrg # Do each command in the postinstall commands. 3020549e21daSmrg lib="$destdir/$realname" 3021549e21daSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 3022549e21daSmrg fi 3023549e21daSmrg 3024549e21daSmrg # Install the pseudo-library for information purposes. 3025549e21daSmrg func_basename "$file" 3026549e21daSmrg name="$func_basename_result" 3027549e21daSmrg instname="$dir/$name"i 3028549e21daSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029549e21daSmrg 3030549e21daSmrg # Maybe install the static library, too. 30311bedbe3fSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032549e21daSmrg ;; 3033549e21daSmrg 3034549e21daSmrg *.lo) 3035549e21daSmrg # Install (i.e. copy) a libtool object. 3036549e21daSmrg 3037549e21daSmrg # Figure out destination file name, if it wasn't already specified. 3038549e21daSmrg if test -n "$destname"; then 3039549e21daSmrg destfile="$destdir/$destname" 3040549e21daSmrg else 3041549e21daSmrg func_basename "$file" 3042549e21daSmrg destfile="$func_basename_result" 3043549e21daSmrg destfile="$destdir/$destfile" 3044549e21daSmrg fi 3045549e21daSmrg 3046549e21daSmrg # Deduce the name of the destination old-style object file. 3047549e21daSmrg case $destfile in 3048549e21daSmrg *.lo) 3049549e21daSmrg func_lo2o "$destfile" 3050549e21daSmrg staticdest=$func_lo2o_result 3051ba6a1819Smrg ;; 3052549e21daSmrg *.$objext) 3053549e21daSmrg staticdest="$destfile" 3054549e21daSmrg destfile= 3055ba6a1819Smrg ;; 3056549e21daSmrg *) 3057549e21daSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058ba6a1819Smrg ;; 3059549e21daSmrg esac 3060549e21daSmrg 3061549e21daSmrg # Install the libtool object if requested. 3062549e21daSmrg test -n "$destfile" && \ 3063549e21daSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 3064549e21daSmrg 3065549e21daSmrg # Install the old object if enabled. 3066549e21daSmrg if test "$build_old_libs" = yes; then 3067549e21daSmrg # Deduce the name of the old-style object file. 3068549e21daSmrg func_lo2o "$file" 3069549e21daSmrg staticobj=$func_lo2o_result 3070549e21daSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071ba6a1819Smrg fi 3072549e21daSmrg exit $EXIT_SUCCESS 3073549e21daSmrg ;; 3074ba6a1819Smrg 3075549e21daSmrg *) 3076549e21daSmrg # Figure out destination file name, if it wasn't already specified. 3077549e21daSmrg if test -n "$destname"; then 3078549e21daSmrg destfile="$destdir/$destname" 3079ba6a1819Smrg else 3080549e21daSmrg func_basename "$file" 3081549e21daSmrg destfile="$func_basename_result" 3082549e21daSmrg destfile="$destdir/$destfile" 3083ba6a1819Smrg fi 3084ba6a1819Smrg 3085549e21daSmrg # If the file is missing, and there is a .exe on the end, strip it 3086549e21daSmrg # because it is most likely a libtool script we actually want to 3087549e21daSmrg # install 3088549e21daSmrg stripped_ext="" 3089549e21daSmrg case $file in 3090549e21daSmrg *.exe) 3091549e21daSmrg if test ! -f "$file"; then 3092549e21daSmrg func_stripname '' '.exe' "$file" 3093549e21daSmrg file=$func_stripname_result 3094549e21daSmrg stripped_ext=".exe" 3095549e21daSmrg fi 3096549e21daSmrg ;; 3097549e21daSmrg esac 3098ba6a1819Smrg 3099549e21daSmrg # Do a test to see if this is really a libtool program. 3100549e21daSmrg case $host in 3101549e21daSmrg *cygwin* | *mingw*) 3102549e21daSmrg if func_ltwrapper_executable_p "$file"; then 3103549e21daSmrg func_ltwrapper_scriptname "$file" 3104549e21daSmrg wrapper=$func_ltwrapper_scriptname_result 3105549e21daSmrg else 3106549e21daSmrg func_stripname '' '.exe' "$file" 3107549e21daSmrg wrapper=$func_stripname_result 3108549e21daSmrg fi 3109549e21daSmrg ;; 3110549e21daSmrg *) 3111549e21daSmrg wrapper=$file 3112549e21daSmrg ;; 3113ba6a1819Smrg esac 3114549e21daSmrg if func_ltwrapper_script_p "$wrapper"; then 3115549e21daSmrg notinst_deplibs= 3116549e21daSmrg relink_command= 3117ba6a1819Smrg 3118549e21daSmrg func_source "$wrapper" 3119ba6a1819Smrg 3120549e21daSmrg # Check the variables that should have been set. 3121549e21daSmrg test -z "$generated_by_libtool_version" && \ 3122549e21daSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123549e21daSmrg 3124549e21daSmrg finalize=yes 3125549e21daSmrg for lib in $notinst_deplibs; do 3126549e21daSmrg # Check to see that each library is installed. 3127549e21daSmrg libdir= 3128549e21daSmrg if test -f "$lib"; then 3129549e21daSmrg func_source "$lib" 3130ba6a1819Smrg fi 3131549e21daSmrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132549e21daSmrg if test -n "$libdir" && test ! -f "$libfile"; then 3133549e21daSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 3134549e21daSmrg finalize=no 3135549e21daSmrg fi 3136549e21daSmrg done 3137ba6a1819Smrg 3138549e21daSmrg relink_command= 3139549e21daSmrg func_source "$wrapper" 3140ba6a1819Smrg 3141549e21daSmrg outputname= 3142549e21daSmrg if test "$fast_install" = no && test -n "$relink_command"; then 3143549e21daSmrg $opt_dry_run || { 3144549e21daSmrg if test "$finalize" = yes; then 3145549e21daSmrg tmpdir=`func_mktempdir` 3146549e21daSmrg func_basename "$file$stripped_ext" 3147549e21daSmrg file="$func_basename_result" 3148549e21daSmrg outputname="$tmpdir/$file" 3149549e21daSmrg # Replace the output file specification. 3150549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151549e21daSmrg 3152549e21daSmrg $opt_silent || { 3153549e21daSmrg func_quote_for_expand "$relink_command" 3154549e21daSmrg eval "func_echo $func_quote_for_expand_result" 3155549e21daSmrg } 3156549e21daSmrg if eval "$relink_command"; then : 3157549e21daSmrg else 3158549e21daSmrg func_error "error: relink \`$file' with the above command before installing it" 3159549e21daSmrg $opt_dry_run || ${RM}r "$tmpdir" 3160549e21daSmrg continue 3161549e21daSmrg fi 3162549e21daSmrg file="$outputname" 3163549e21daSmrg else 3164549e21daSmrg func_warning "cannot relink \`$file'" 3165549e21daSmrg fi 3166549e21daSmrg } 3167ba6a1819Smrg else 3168549e21daSmrg # Install the binary that we compiled earlier. 3169549e21daSmrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170ba6a1819Smrg fi 3171549e21daSmrg fi 3172ba6a1819Smrg 3173549e21daSmrg # remove .exe since cygwin /usr/bin/install will append another 3174549e21daSmrg # one anyway 3175549e21daSmrg case $install_prog,$host in 3176549e21daSmrg */usr/bin/install*,*cygwin*) 3177549e21daSmrg case $file:$destfile in 3178549e21daSmrg *.exe:*.exe) 3179549e21daSmrg # this is ok 3180549e21daSmrg ;; 3181549e21daSmrg *.exe:*) 3182549e21daSmrg destfile=$destfile.exe 3183549e21daSmrg ;; 3184549e21daSmrg *:*.exe) 3185549e21daSmrg func_stripname '' '.exe' "$destfile" 3186549e21daSmrg destfile=$func_stripname_result 3187549e21daSmrg ;; 3188549e21daSmrg esac 3189ba6a1819Smrg ;; 3190ba6a1819Smrg esac 3191549e21daSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192549e21daSmrg $opt_dry_run || if test -n "$outputname"; then 3193549e21daSmrg ${RM}r "$tmpdir" 3194549e21daSmrg fi 3195549e21daSmrg ;; 3196549e21daSmrg esac 3197549e21daSmrg done 3198ba6a1819Smrg 3199549e21daSmrg for file in $staticlibs; do 3200549e21daSmrg func_basename "$file" 3201549e21daSmrg name="$func_basename_result" 3202ba6a1819Smrg 3203549e21daSmrg # Set up the ranlib parameters. 3204549e21daSmrg oldlib="$destdir/$name" 32051bedbe3fSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 32061bedbe3fSmrg tool_oldlib=$func_to_tool_file_result 3207ba6a1819Smrg 3208549e21daSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209ba6a1819Smrg 3210549e21daSmrg if test -n "$stripme" && test -n "$old_striplib"; then 32111bedbe3fSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212549e21daSmrg fi 3213ba6a1819Smrg 3214549e21daSmrg # Do each command in the postinstall commands. 3215549e21daSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216549e21daSmrg done 3217ba6a1819Smrg 3218549e21daSmrg test -n "$future_libdirs" && \ 3219549e21daSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3220ba6a1819Smrg 3221549e21daSmrg if test -n "$current_libdirs"; then 3222549e21daSmrg # Maybe just do a dry run. 3223549e21daSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224549e21daSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225549e21daSmrg else 3226549e21daSmrg exit $EXIT_SUCCESS 3227549e21daSmrg fi 3228549e21daSmrg} 3229ba6a1819Smrg 32301bedbe3fSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231ba6a1819Smrg 3232ba6a1819Smrg 3233549e21daSmrg# func_generate_dlsyms outputname originator pic_p 3234549e21daSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235549e21daSmrg# a dlpreopen symbol table. 3236549e21daSmrgfunc_generate_dlsyms () 3237549e21daSmrg{ 3238549e21daSmrg $opt_debug 3239549e21daSmrg my_outputname="$1" 3240549e21daSmrg my_originator="$2" 3241549e21daSmrg my_pic_p="${3-no}" 3242549e21daSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243549e21daSmrg my_dlsyms= 3244549e21daSmrg 3245549e21daSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246549e21daSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247549e21daSmrg my_dlsyms="${my_outputname}S.c" 3248549e21daSmrg else 3249549e21daSmrg func_error "not configured to extract global symbols from dlpreopened files" 3250549e21daSmrg fi 3251549e21daSmrg fi 3252ba6a1819Smrg 3253549e21daSmrg if test -n "$my_dlsyms"; then 3254549e21daSmrg case $my_dlsyms in 3255549e21daSmrg "") ;; 3256549e21daSmrg *.c) 3257549e21daSmrg # Discover the nlist of each of the dlfiles. 3258549e21daSmrg nlist="$output_objdir/${my_outputname}.nm" 3259549e21daSmrg 3260549e21daSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261549e21daSmrg 3262549e21daSmrg # Parse the name list into a source file. 3263549e21daSmrg func_verbose "creating $output_objdir/$my_dlsyms" 3264549e21daSmrg 3265549e21daSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266549e21daSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267549e21daSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268549e21daSmrg 3269549e21daSmrg#ifdef __cplusplus 3270549e21daSmrgextern \"C\" { 3271549e21daSmrg#endif 3272549e21daSmrg 3273549e21daSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3274549e21daSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3275549e21daSmrg#endif 3276549e21daSmrg 32771bedbe3fSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 32781bedbe3fSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 32791bedbe3fSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 32801bedbe3fSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 32811bedbe3fSmrg# define LT_DLSYM_CONST 32821bedbe3fSmrg#elif defined(__osf__) 32831bedbe3fSmrg/* This system does not cope well with relocations in const data. */ 32841bedbe3fSmrg# define LT_DLSYM_CONST 32851bedbe3fSmrg#else 32861bedbe3fSmrg# define LT_DLSYM_CONST const 32871bedbe3fSmrg#endif 32881bedbe3fSmrg 3289549e21daSmrg/* External symbol declarations for the compiler. */\ 3290549e21daSmrg" 3291549e21daSmrg 3292549e21daSmrg if test "$dlself" = yes; then 3293549e21daSmrg func_verbose "generating symbol list for \`$output'" 3294549e21daSmrg 3295549e21daSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296549e21daSmrg 3297549e21daSmrg # Add our own program objects to the symbol list. 3298549e21daSmrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299549e21daSmrg for progfile in $progfiles; do 33001bedbe3fSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 33011bedbe3fSmrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 33021bedbe3fSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303549e21daSmrg done 3304549e21daSmrg 3305549e21daSmrg if test -n "$exclude_expsyms"; then 3306549e21daSmrg $opt_dry_run || { 3307549e21daSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308549e21daSmrg eval '$MV "$nlist"T "$nlist"' 3309549e21daSmrg } 3310ba6a1819Smrg fi 3311ba6a1819Smrg 3312549e21daSmrg if test -n "$export_symbols_regex"; then 3313549e21daSmrg $opt_dry_run || { 3314549e21daSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315549e21daSmrg eval '$MV "$nlist"T "$nlist"' 3316549e21daSmrg } 3317ba6a1819Smrg fi 3318549e21daSmrg 3319549e21daSmrg # Prepare the list of exported symbols 3320549e21daSmrg if test -z "$export_symbols"; then 3321549e21daSmrg export_symbols="$output_objdir/$outputname.exp" 3322549e21daSmrg $opt_dry_run || { 3323549e21daSmrg $RM $export_symbols 3324549e21daSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325549e21daSmrg case $host in 3326549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 3327549e21daSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328549e21daSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329549e21daSmrg ;; 3330ba6a1819Smrg esac 3331549e21daSmrg } 3332549e21daSmrg else 3333549e21daSmrg $opt_dry_run || { 3334549e21daSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335549e21daSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336549e21daSmrg eval '$MV "$nlist"T "$nlist"' 3337549e21daSmrg case $host in 3338549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 3339549e21daSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340549e21daSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341549e21daSmrg ;; 3342ba6a1819Smrg esac 3343549e21daSmrg } 3344ba6a1819Smrg fi 3345549e21daSmrg fi 3346ba6a1819Smrg 3347549e21daSmrg for dlprefile in $dlprefiles; do 3348549e21daSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349549e21daSmrg func_basename "$dlprefile" 3350549e21daSmrg name="$func_basename_result" 33511bedbe3fSmrg case $host in 33521bedbe3fSmrg *cygwin* | *mingw* | *cegcc* ) 33531bedbe3fSmrg # if an import library, we need to obtain dlname 33541bedbe3fSmrg if func_win32_import_lib_p "$dlprefile"; then 33551bedbe3fSmrg func_tr_sh "$dlprefile" 33561bedbe3fSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 33571bedbe3fSmrg dlprefile_dlbasename="" 33581bedbe3fSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 33591bedbe3fSmrg # Use subshell, to avoid clobbering current variable values 33601bedbe3fSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 33611bedbe3fSmrg if test -n "$dlprefile_dlname" ; then 33621bedbe3fSmrg func_basename "$dlprefile_dlname" 33631bedbe3fSmrg dlprefile_dlbasename="$func_basename_result" 33641bedbe3fSmrg else 33651bedbe3fSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 33661bedbe3fSmrg $sharedlib_from_linklib_cmd "$dlprefile" 33671bedbe3fSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 33681bedbe3fSmrg fi 33691bedbe3fSmrg fi 33701bedbe3fSmrg $opt_dry_run || { 33711bedbe3fSmrg if test -n "$dlprefile_dlbasename" ; then 33721bedbe3fSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 33731bedbe3fSmrg else 33741bedbe3fSmrg func_warning "Could not compute DLL name from $name" 33751bedbe3fSmrg eval '$ECHO ": $name " >> "$nlist"' 33761bedbe3fSmrg fi 33771bedbe3fSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33781bedbe3fSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 33791bedbe3fSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 33801bedbe3fSmrg } 33811bedbe3fSmrg else # not an import lib 33821bedbe3fSmrg $opt_dry_run || { 33831bedbe3fSmrg eval '$ECHO ": $name " >> "$nlist"' 33841bedbe3fSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33851bedbe3fSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33861bedbe3fSmrg } 33871bedbe3fSmrg fi 33881bedbe3fSmrg ;; 33891bedbe3fSmrg *) 33901bedbe3fSmrg $opt_dry_run || { 33911bedbe3fSmrg eval '$ECHO ": $name " >> "$nlist"' 33921bedbe3fSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33931bedbe3fSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33941bedbe3fSmrg } 33951bedbe3fSmrg ;; 33961bedbe3fSmrg esac 3397549e21daSmrg done 3398ba6a1819Smrg 3399549e21daSmrg $opt_dry_run || { 3400549e21daSmrg # Make sure we have at least an empty file. 3401549e21daSmrg test -f "$nlist" || : > "$nlist" 3402ba6a1819Smrg 3403549e21daSmrg if test -n "$exclude_expsyms"; then 3404549e21daSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405549e21daSmrg $MV "$nlist"T "$nlist" 3406ba6a1819Smrg fi 3407ba6a1819Smrg 3408549e21daSmrg # Try sorting and uniquifying the output. 3409549e21daSmrg if $GREP -v "^: " < "$nlist" | 3410549e21daSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411549e21daSmrg sort -k 3 3412ba6a1819Smrg else 3413549e21daSmrg sort +2 3414549e21daSmrg fi | 3415549e21daSmrg uniq > "$nlist"S; then 3416549e21daSmrg : 3417ba6a1819Smrg else 3418549e21daSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 3419ba6a1819Smrg fi 3420ba6a1819Smrg 3421549e21daSmrg if test -f "$nlist"S; then 3422549e21daSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423ba6a1819Smrg else 3424549e21daSmrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425ba6a1819Smrg fi 3426ba6a1819Smrg 3427549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 3428ba6a1819Smrg 3429549e21daSmrg/* The mapping between symbol names and symbols. */ 3430549e21daSmrgtypedef struct { 3431549e21daSmrg const char *name; 3432549e21daSmrg void *address; 3433549e21daSmrg} lt_dlsymlist; 34341bedbe3fSmrgextern LT_DLSYM_CONST lt_dlsymlist 3435549e21daSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 34361bedbe3fSmrgLT_DLSYM_CONST lt_dlsymlist 3437549e21daSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 3438549e21daSmrg{\ 3439549e21daSmrg { \"$my_originator\", (void *) 0 }," 3440549e21daSmrg 3441549e21daSmrg case $need_lib_prefix in 3442549e21daSmrg no) 3443549e21daSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444549e21daSmrg ;; 3445549e21daSmrg *) 3446549e21daSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447549e21daSmrg ;; 3448549e21daSmrg esac 3449549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 3450549e21daSmrg {0, (void *) 0} 3451549e21daSmrg}; 3452549e21daSmrg 3453549e21daSmrg/* This works around a problem in FreeBSD linker */ 3454549e21daSmrg#ifdef FREEBSD_WORKAROUND 3455549e21daSmrgstatic const void *lt_preloaded_setup() { 3456549e21daSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457549e21daSmrg} 3458549e21daSmrg#endif 3459549e21daSmrg 3460549e21daSmrg#ifdef __cplusplus 3461549e21daSmrg} 3462549e21daSmrg#endif\ 3463549e21daSmrg" 3464549e21daSmrg } # !$opt_dry_run 3465549e21daSmrg 3466549e21daSmrg pic_flag_for_symtable= 3467549e21daSmrg case "$compile_command " in 3468549e21daSmrg *" -static "*) ;; 3469549e21daSmrg *) 3470549e21daSmrg case $host in 3471549e21daSmrg # compiling the symbol table file with pic_flag works around 3472549e21daSmrg # a FreeBSD bug that causes programs to crash when -lm is 3473549e21daSmrg # linked before any other PIC object. But we must not use 3474549e21daSmrg # pic_flag when linking with -static. The problem exists in 3475549e21daSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 34761bedbe3fSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477549e21daSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478549e21daSmrg *-*-hpux*) 3479549e21daSmrg pic_flag_for_symtable=" $pic_flag" ;; 3480549e21daSmrg *) 3481549e21daSmrg if test "X$my_pic_p" != Xno; then 3482549e21daSmrg pic_flag_for_symtable=" $pic_flag" 3483ba6a1819Smrg fi 3484549e21daSmrg ;; 3485549e21daSmrg esac 3486549e21daSmrg ;; 3487549e21daSmrg esac 3488549e21daSmrg symtab_cflags= 3489549e21daSmrg for arg in $LTCFLAGS; do 3490549e21daSmrg case $arg in 3491549e21daSmrg -pie | -fpie | -fPIE) ;; 34921bedbe3fSmrg *) func_append symtab_cflags " $arg" ;; 3493549e21daSmrg esac 3494549e21daSmrg done 3495ba6a1819Smrg 3496549e21daSmrg # Now compile the dynamic symbol file. 3497549e21daSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498ba6a1819Smrg 3499549e21daSmrg # Clean up the generated files. 3500549e21daSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501549e21daSmrg 3502549e21daSmrg # Transform the symbol file into the correct name. 3503549e21daSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504549e21daSmrg case $host in 3505549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 3506549e21daSmrg if test -f "$output_objdir/$my_outputname.def"; then 3507549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3508549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509549e21daSmrg else 3510549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3511549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512549e21daSmrg fi 3513549e21daSmrg ;; 3514549e21daSmrg *) 3515549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3516549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517ba6a1819Smrg ;; 3518ba6a1819Smrg esac 3519549e21daSmrg ;; 3520549e21daSmrg *) 3521549e21daSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522549e21daSmrg ;; 3523549e21daSmrg esac 3524549e21daSmrg else 3525549e21daSmrg # We keep going just in case the user didn't refer to 3526549e21daSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527549e21daSmrg # really was required. 3528ba6a1819Smrg 3529549e21daSmrg # Nullify the symbol file. 3530549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3531549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532549e21daSmrg fi 3533549e21daSmrg} 3534ba6a1819Smrg 3535549e21daSmrg# func_win32_libid arg 3536549e21daSmrg# return the library type of file 'arg' 3537549e21daSmrg# 3538549e21daSmrg# Need a lot of goo to handle *both* DLLs and import libs 3539549e21daSmrg# Has to be a shell function in order to 'eat' the argument 3540549e21daSmrg# that is supplied when $file_magic_command is called. 3541549e21daSmrg# Despite the name, also deal with 64 bit binaries. 3542549e21daSmrgfunc_win32_libid () 3543549e21daSmrg{ 3544549e21daSmrg $opt_debug 3545549e21daSmrg win32_libid_type="unknown" 3546549e21daSmrg win32_fileres=`file -L $1 2>/dev/null` 3547549e21daSmrg case $win32_fileres in 3548549e21daSmrg *ar\ archive\ import\ library*) # definitely import 3549549e21daSmrg win32_libid_type="x86 archive import" 3550549e21daSmrg ;; 3551549e21daSmrg *ar\ archive*) # could be an import, or static 3552549e21daSmrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553549e21daSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3554549e21daSmrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 35551bedbe3fSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 35561bedbe3fSmrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557549e21daSmrg $SED -n -e ' 3558549e21daSmrg 1,100{ 3559549e21daSmrg / I /{ 3560549e21daSmrg s,.*,import, 3561549e21daSmrg p 3562549e21daSmrg q 3563549e21daSmrg } 3564549e21daSmrg }'` 3565549e21daSmrg case $win32_nmres in 3566549e21daSmrg import*) win32_libid_type="x86 archive import";; 3567549e21daSmrg *) win32_libid_type="x86 archive static";; 3568549e21daSmrg esac 3569549e21daSmrg fi 3570549e21daSmrg ;; 3571549e21daSmrg *DLL*) 3572549e21daSmrg win32_libid_type="x86 DLL" 3573549e21daSmrg ;; 3574549e21daSmrg *executable*) # but shell scripts are "executable" too... 3575549e21daSmrg case $win32_fileres in 3576549e21daSmrg *MS\ Windows\ PE\ Intel*) 3577549e21daSmrg win32_libid_type="x86 DLL" 3578549e21daSmrg ;; 3579549e21daSmrg esac 3580549e21daSmrg ;; 3581549e21daSmrg esac 3582549e21daSmrg $ECHO "$win32_libid_type" 3583549e21daSmrg} 3584ba6a1819Smrg 35851bedbe3fSmrg# func_cygming_dll_for_implib ARG 35861bedbe3fSmrg# 35871bedbe3fSmrg# Platform-specific function to extract the 35881bedbe3fSmrg# name of the DLL associated with the specified 35891bedbe3fSmrg# import library ARG. 35901bedbe3fSmrg# Invoked by eval'ing the libtool variable 35911bedbe3fSmrg# $sharedlib_from_linklib_cmd 35921bedbe3fSmrg# Result is available in the variable 35931bedbe3fSmrg# $sharedlib_from_linklib_result 35941bedbe3fSmrgfunc_cygming_dll_for_implib () 35951bedbe3fSmrg{ 35961bedbe3fSmrg $opt_debug 35971bedbe3fSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 35981bedbe3fSmrg} 35991bedbe3fSmrg 36001bedbe3fSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 36011bedbe3fSmrg# 36021bedbe3fSmrg# The is the core of a fallback implementation of a 36031bedbe3fSmrg# platform-specific function to extract the name of the 36041bedbe3fSmrg# DLL associated with the specified import library LIBNAME. 36051bedbe3fSmrg# 36061bedbe3fSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 36071bedbe3fSmrg# on the platform and compiler that created the implib. 36081bedbe3fSmrg# 36091bedbe3fSmrg# Echos the name of the DLL associated with the 36101bedbe3fSmrg# specified import library. 36111bedbe3fSmrgfunc_cygming_dll_for_implib_fallback_core () 36121bedbe3fSmrg{ 36131bedbe3fSmrg $opt_debug 36141bedbe3fSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 36151bedbe3fSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 36161bedbe3fSmrg $SED '/^Contents of section '"$match_literal"':/{ 36171bedbe3fSmrg # Place marker at beginning of archive member dllname section 36181bedbe3fSmrg s/.*/====MARK====/ 36191bedbe3fSmrg p 36201bedbe3fSmrg d 36211bedbe3fSmrg } 36221bedbe3fSmrg # These lines can sometimes be longer than 43 characters, but 36231bedbe3fSmrg # are always uninteresting 36241bedbe3fSmrg /:[ ]*file format pe[i]\{,1\}-/d 36251bedbe3fSmrg /^In archive [^:]*:/d 36261bedbe3fSmrg # Ensure marker is printed 36271bedbe3fSmrg /^====MARK====/p 36281bedbe3fSmrg # Remove all lines with less than 43 characters 36291bedbe3fSmrg /^.\{43\}/!d 36301bedbe3fSmrg # From remaining lines, remove first 43 characters 36311bedbe3fSmrg s/^.\{43\}//' | 36321bedbe3fSmrg $SED -n ' 36331bedbe3fSmrg # Join marker and all lines until next marker into a single line 36341bedbe3fSmrg /^====MARK====/ b para 36351bedbe3fSmrg H 36361bedbe3fSmrg $ b para 36371bedbe3fSmrg b 36381bedbe3fSmrg :para 36391bedbe3fSmrg x 36401bedbe3fSmrg s/\n//g 36411bedbe3fSmrg # Remove the marker 36421bedbe3fSmrg s/^====MARK====// 36431bedbe3fSmrg # Remove trailing dots and whitespace 36441bedbe3fSmrg s/[\. \t]*$// 36451bedbe3fSmrg # Print 36461bedbe3fSmrg /./p' | 36471bedbe3fSmrg # we now have a list, one entry per line, of the stringified 36481bedbe3fSmrg # contents of the appropriate section of all members of the 36491bedbe3fSmrg # archive which possess that section. Heuristic: eliminate 36501bedbe3fSmrg # all those which have a first or second character that is 36511bedbe3fSmrg # a '.' (that is, objdump's representation of an unprintable 36521bedbe3fSmrg # character.) This should work for all archives with less than 36531bedbe3fSmrg # 0x302f exports -- but will fail for DLLs whose name actually 36541bedbe3fSmrg # begins with a literal '.' or a single character followed by 36551bedbe3fSmrg # a '.'. 36561bedbe3fSmrg # 36571bedbe3fSmrg # Of those that remain, print the first one. 36581bedbe3fSmrg $SED -e '/^\./d;/^.\./d;q' 36591bedbe3fSmrg} 36601bedbe3fSmrg 36611bedbe3fSmrg# func_cygming_gnu_implib_p ARG 36621bedbe3fSmrg# This predicate returns with zero status (TRUE) if 36631bedbe3fSmrg# ARG is a GNU/binutils-style import library. Returns 36641bedbe3fSmrg# with nonzero status (FALSE) otherwise. 36651bedbe3fSmrgfunc_cygming_gnu_implib_p () 36661bedbe3fSmrg{ 36671bedbe3fSmrg $opt_debug 36681bedbe3fSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36691bedbe3fSmrg 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)$'` 36701bedbe3fSmrg test -n "$func_cygming_gnu_implib_tmp" 36711bedbe3fSmrg} 36721bedbe3fSmrg 36731bedbe3fSmrg# func_cygming_ms_implib_p ARG 36741bedbe3fSmrg# This predicate returns with zero status (TRUE) if 36751bedbe3fSmrg# ARG is an MS-style import library. Returns 36761bedbe3fSmrg# with nonzero status (FALSE) otherwise. 36771bedbe3fSmrgfunc_cygming_ms_implib_p () 36781bedbe3fSmrg{ 36791bedbe3fSmrg $opt_debug 36801bedbe3fSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36811bedbe3fSmrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 36821bedbe3fSmrg test -n "$func_cygming_ms_implib_tmp" 36831bedbe3fSmrg} 36841bedbe3fSmrg 36851bedbe3fSmrg# func_cygming_dll_for_implib_fallback ARG 36861bedbe3fSmrg# Platform-specific function to extract the 36871bedbe3fSmrg# name of the DLL associated with the specified 36881bedbe3fSmrg# import library ARG. 36891bedbe3fSmrg# 36901bedbe3fSmrg# This fallback implementation is for use when $DLLTOOL 36911bedbe3fSmrg# does not support the --identify-strict option. 36921bedbe3fSmrg# Invoked by eval'ing the libtool variable 36931bedbe3fSmrg# $sharedlib_from_linklib_cmd 36941bedbe3fSmrg# Result is available in the variable 36951bedbe3fSmrg# $sharedlib_from_linklib_result 36961bedbe3fSmrgfunc_cygming_dll_for_implib_fallback () 36971bedbe3fSmrg{ 36981bedbe3fSmrg $opt_debug 36991bedbe3fSmrg if func_cygming_gnu_implib_p "$1" ; then 37001bedbe3fSmrg # binutils import library 37011bedbe3fSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 37021bedbe3fSmrg elif func_cygming_ms_implib_p "$1" ; then 37031bedbe3fSmrg # ms-generated import library 37041bedbe3fSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 37051bedbe3fSmrg else 37061bedbe3fSmrg # unknown 37071bedbe3fSmrg sharedlib_from_linklib_result="" 37081bedbe3fSmrg fi 37091bedbe3fSmrg} 3710ba6a1819Smrg 3711ba6a1819Smrg 3712549e21daSmrg# func_extract_an_archive dir oldlib 3713549e21daSmrgfunc_extract_an_archive () 3714549e21daSmrg{ 3715549e21daSmrg $opt_debug 3716549e21daSmrg f_ex_an_ar_dir="$1"; shift 3717549e21daSmrg f_ex_an_ar_oldlib="$1" 3718549e21daSmrg if test "$lock_old_archive_extraction" = yes; then 3719549e21daSmrg lockfile=$f_ex_an_ar_oldlib.lock 3720549e21daSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3721549e21daSmrg func_echo "Waiting for $lockfile to be removed" 3722549e21daSmrg sleep 2 3723549e21daSmrg done 3724549e21daSmrg fi 3725549e21daSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3726549e21daSmrg 'stat=$?; rm -f "$lockfile"; exit $stat' 3727549e21daSmrg if test "$lock_old_archive_extraction" = yes; then 3728549e21daSmrg $opt_dry_run || rm -f "$lockfile" 3729549e21daSmrg fi 3730549e21daSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731549e21daSmrg : 3732549e21daSmrg else 3733549e21daSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734549e21daSmrg fi 3735549e21daSmrg} 3736ba6a1819Smrg 3737ba6a1819Smrg 3738549e21daSmrg# func_extract_archives gentop oldlib ... 3739549e21daSmrgfunc_extract_archives () 3740549e21daSmrg{ 3741549e21daSmrg $opt_debug 3742549e21daSmrg my_gentop="$1"; shift 3743549e21daSmrg my_oldlibs=${1+"$@"} 3744549e21daSmrg my_oldobjs="" 3745549e21daSmrg my_xlib="" 3746549e21daSmrg my_xabs="" 3747549e21daSmrg my_xdir="" 3748ba6a1819Smrg 3749549e21daSmrg for my_xlib in $my_oldlibs; do 3750549e21daSmrg # Extract the objects. 3751549e21daSmrg case $my_xlib in 3752549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753549e21daSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754ba6a1819Smrg esac 3755549e21daSmrg func_basename "$my_xlib" 3756549e21daSmrg my_xlib="$func_basename_result" 3757549e21daSmrg my_xlib_u=$my_xlib 3758549e21daSmrg while :; do 3759549e21daSmrg case " $extracted_archives " in 3760549e21daSmrg *" $my_xlib_u "*) 3761549e21daSmrg func_arith $extracted_serial + 1 3762549e21daSmrg extracted_serial=$func_arith_result 3763549e21daSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764549e21daSmrg *) break ;; 3765549e21daSmrg esac 3766549e21daSmrg done 3767549e21daSmrg extracted_archives="$extracted_archives $my_xlib_u" 3768549e21daSmrg my_xdir="$my_gentop/$my_xlib_u" 3769ba6a1819Smrg 3770549e21daSmrg func_mkdir_p "$my_xdir" 3771ba6a1819Smrg 3772549e21daSmrg case $host in 3773549e21daSmrg *-darwin*) 3774549e21daSmrg func_verbose "Extracting $my_xabs" 3775549e21daSmrg # Do not bother doing anything if just a dry run 3776549e21daSmrg $opt_dry_run || { 3777549e21daSmrg darwin_orig_dir=`pwd` 3778549e21daSmrg cd $my_xdir || exit $? 3779549e21daSmrg darwin_archive=$my_xabs 3780549e21daSmrg darwin_curdir=`pwd` 3781549e21daSmrg darwin_base_archive=`basename "$darwin_archive"` 3782549e21daSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783549e21daSmrg if test -n "$darwin_arches"; then 3784549e21daSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785549e21daSmrg darwin_arch= 3786549e21daSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787549e21daSmrg for darwin_arch in $darwin_arches ; do 3788549e21daSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789549e21daSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790549e21daSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791549e21daSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792549e21daSmrg cd "$darwin_curdir" 3793549e21daSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794549e21daSmrg done # $darwin_arches 3795549e21daSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796549e21daSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797549e21daSmrg darwin_file= 3798549e21daSmrg darwin_files= 3799549e21daSmrg for darwin_file in $darwin_filelist; do 3800549e21daSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801549e21daSmrg $LIPO -create -output "$darwin_file" $darwin_files 3802549e21daSmrg done # $darwin_filelist 3803549e21daSmrg $RM -rf unfat-$$ 3804549e21daSmrg cd "$darwin_orig_dir" 3805549e21daSmrg else 3806549e21daSmrg cd $darwin_orig_dir 3807549e21daSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808549e21daSmrg fi # $darwin_arches 3809549e21daSmrg } # !$opt_dry_run 3810549e21daSmrg ;; 3811549e21daSmrg *) 3812549e21daSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813549e21daSmrg ;; 3814549e21daSmrg esac 3815549e21daSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816549e21daSmrg done 3817ba6a1819Smrg 3818549e21daSmrg func_extract_archives_result="$my_oldobjs" 3819549e21daSmrg} 3820ba6a1819Smrg 3821ba6a1819Smrg 3822549e21daSmrg# func_emit_wrapper [arg=no] 3823549e21daSmrg# 3824549e21daSmrg# Emit a libtool wrapper script on stdout. 3825549e21daSmrg# Don't directly open a file because we may want to 3826549e21daSmrg# incorporate the script contents within a cygwin/mingw 3827549e21daSmrg# wrapper executable. Must ONLY be called from within 3828549e21daSmrg# func_mode_link because it depends on a number of variables 3829549e21daSmrg# set therein. 3830549e21daSmrg# 3831549e21daSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3832549e21daSmrg# variable will take. If 'yes', then the emitted script 3833549e21daSmrg# will assume that the directory in which it is stored is 3834549e21daSmrg# the $objdir directory. This is a cygwin/mingw-specific 3835549e21daSmrg# behavior. 3836549e21daSmrgfunc_emit_wrapper () 3837549e21daSmrg{ 3838549e21daSmrg func_emit_wrapper_arg1=${1-no} 3839ba6a1819Smrg 3840549e21daSmrg $ECHO "\ 3841549e21daSmrg#! $SHELL 3842ba6a1819Smrg 3843549e21daSmrg# $output - temporary wrapper script for $objdir/$outputname 3844549e21daSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845549e21daSmrg# 3846549e21daSmrg# The $output program cannot be directly executed until all the libtool 3847549e21daSmrg# libraries that it depends on are installed. 3848549e21daSmrg# 3849549e21daSmrg# This wrapper script should never be moved out of the build directory. 3850549e21daSmrg# If it is, it will not operate correctly. 3851ba6a1819Smrg 3852549e21daSmrg# Sed substitution that helps us do robust quoting. It backslashifies 3853549e21daSmrg# metacharacters that are still active within double-quoted strings. 3854549e21daSmrgsed_quote_subst='$sed_quote_subst' 3855ba6a1819Smrg 3856549e21daSmrg# Be Bourne compatible 3857549e21daSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858549e21daSmrg emulate sh 3859549e21daSmrg NULLCMD=: 3860549e21daSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861549e21daSmrg # is contrary to our usage. Disable this feature. 3862549e21daSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863549e21daSmrg setopt NO_GLOB_SUBST 3864549e21daSmrgelse 3865549e21daSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866549e21daSmrgfi 3867549e21daSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868549e21daSmrgDUALCASE=1; export DUALCASE # for MKS sh 3869ba6a1819Smrg 3870549e21daSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871549e21daSmrg# if CDPATH is set. 3872549e21daSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873ba6a1819Smrg 3874549e21daSmrgrelink_command=\"$relink_command\" 3875ba6a1819Smrg 3876549e21daSmrg# This environment variable determines our operation mode. 3877549e21daSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878549e21daSmrg # install mode needs the following variables: 3879549e21daSmrg generated_by_libtool_version='$macro_version' 3880549e21daSmrg notinst_deplibs='$notinst_deplibs' 3881549e21daSmrgelse 3882549e21daSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883549e21daSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 3884549e21daSmrg file=\"\$0\"" 3885ba6a1819Smrg 3886549e21daSmrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3887549e21daSmrg $ECHO "\ 3888ba6a1819Smrg 3889549e21daSmrg# A function that is used when there is no print builtin or printf. 3890549e21daSmrgfunc_fallback_echo () 3891549e21daSmrg{ 3892549e21daSmrg eval 'cat <<_LTECHO_EOF 3893549e21daSmrg\$1 3894549e21daSmrg_LTECHO_EOF' 3895549e21daSmrg} 3896549e21daSmrg ECHO=\"$qECHO\" 3897549e21daSmrg fi 3898ba6a1819Smrg 3899549e21daSmrg# Very basic option parsing. These options are (a) specific to 3900549e21daSmrg# the libtool wrapper, (b) are identical between the wrapper 3901549e21daSmrg# /script/ and the wrapper /executable/ which is used only on 3902549e21daSmrg# windows platforms, and (c) all begin with the string "--lt-" 3903549e21daSmrg# (application programs are unlikely to have options which match 3904549e21daSmrg# this pattern). 3905549e21daSmrg# 3906549e21daSmrg# There are only two supported options: --lt-debug and 3907549e21daSmrg# --lt-dump-script. There is, deliberately, no --lt-help. 3908549e21daSmrg# 3909549e21daSmrg# The first argument to this parsing function should be the 3910549e21daSmrg# script's $0 value, followed by "$@". 3911549e21daSmrglt_option_debug= 3912549e21daSmrgfunc_parse_lt_options () 3913549e21daSmrg{ 3914549e21daSmrg lt_script_arg0=\$0 3915549e21daSmrg shift 3916549e21daSmrg for lt_opt 3917549e21daSmrg do 3918549e21daSmrg case \"\$lt_opt\" in 3919549e21daSmrg --lt-debug) lt_option_debug=1 ;; 3920549e21daSmrg --lt-dump-script) 3921549e21daSmrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3922549e21daSmrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3923549e21daSmrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3924549e21daSmrg cat \"\$lt_dump_D/\$lt_dump_F\" 3925549e21daSmrg exit 0 3926549e21daSmrg ;; 3927549e21daSmrg --lt-*) 3928549e21daSmrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3929549e21daSmrg exit 1 3930549e21daSmrg ;; 3931549e21daSmrg esac 3932549e21daSmrg done 3933ba6a1819Smrg 3934549e21daSmrg # Print the debug banner immediately: 3935549e21daSmrg if test -n \"\$lt_option_debug\"; then 3936549e21daSmrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3937549e21daSmrg fi 3938549e21daSmrg} 3939ba6a1819Smrg 3940549e21daSmrg# Used when --lt-debug. Prints its arguments to stdout 3941549e21daSmrg# (redirection is the responsibility of the caller) 3942549e21daSmrgfunc_lt_dump_args () 3943549e21daSmrg{ 3944549e21daSmrg lt_dump_args_N=1; 3945549e21daSmrg for lt_arg 3946549e21daSmrg do 3947549e21daSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3948549e21daSmrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3949549e21daSmrg done 3950549e21daSmrg} 3951ba6a1819Smrg 3952549e21daSmrg# Core function for launching the target application 3953549e21daSmrgfunc_exec_program_core () 3954549e21daSmrg{ 3955549e21daSmrg" 3956549e21daSmrg case $host in 3957549e21daSmrg # Backslashes separate directories on plain windows 3958549e21daSmrg *-*-mingw | *-*-os2* | *-cegcc*) 3959549e21daSmrg $ECHO "\ 3960549e21daSmrg if test -n \"\$lt_option_debug\"; then 3961549e21daSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3962549e21daSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3963549e21daSmrg fi 3964549e21daSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3965549e21daSmrg" 3966549e21daSmrg ;; 3967ba6a1819Smrg 3968549e21daSmrg *) 3969549e21daSmrg $ECHO "\ 3970549e21daSmrg if test -n \"\$lt_option_debug\"; then 3971549e21daSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3972549e21daSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3973549e21daSmrg fi 3974549e21daSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 3975549e21daSmrg" 3976549e21daSmrg ;; 3977549e21daSmrg esac 3978549e21daSmrg $ECHO "\ 3979549e21daSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3980549e21daSmrg exit 1 3981549e21daSmrg} 3982ba6a1819Smrg 3983549e21daSmrg# A function to encapsulate launching the target application 3984549e21daSmrg# Strips options in the --lt-* namespace from \$@ and 3985549e21daSmrg# launches target application with the remaining arguments. 3986549e21daSmrgfunc_exec_program () 3987549e21daSmrg{ 39881bedbe3fSmrg case \" \$* \" in 39891bedbe3fSmrg *\\ --lt-*) 39901bedbe3fSmrg for lt_wr_arg 39911bedbe3fSmrg do 39921bedbe3fSmrg case \$lt_wr_arg in 39931bedbe3fSmrg --lt-*) ;; 39941bedbe3fSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 39951bedbe3fSmrg esac 39961bedbe3fSmrg shift 39971bedbe3fSmrg done ;; 39981bedbe3fSmrg esac 3999549e21daSmrg func_exec_program_core \${1+\"\$@\"} 4000549e21daSmrg} 4001ba6a1819Smrg 4002549e21daSmrg # Parse options 4003549e21daSmrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004ba6a1819Smrg 4005549e21daSmrg # Find the directory that this script lives in. 4006549e21daSmrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007549e21daSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008ba6a1819Smrg 4009549e21daSmrg # Follow symbolic links until we get to the real thisdir. 4010549e21daSmrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011549e21daSmrg while test -n \"\$file\"; do 4012549e21daSmrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013ba6a1819Smrg 4014549e21daSmrg # If there was a directory component, then change thisdir. 4015549e21daSmrg if test \"x\$destdir\" != \"x\$file\"; then 4016549e21daSmrg case \"\$destdir\" in 4017549e21daSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018549e21daSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 4019549e21daSmrg esac 4020549e21daSmrg fi 4021ba6a1819Smrg 4022549e21daSmrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4023549e21daSmrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024549e21daSmrg done 4025ba6a1819Smrg 4026549e21daSmrg # Usually 'no', except on cygwin/mingw when embedded into 4027549e21daSmrg # the cwrapper. 4028549e21daSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029549e21daSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030549e21daSmrg # special case for '.' 4031549e21daSmrg if test \"\$thisdir\" = \".\"; then 4032549e21daSmrg thisdir=\`pwd\` 4033549e21daSmrg fi 4034549e21daSmrg # remove .libs from thisdir 4035549e21daSmrg case \"\$thisdir\" in 4036549e21daSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037549e21daSmrg $objdir ) thisdir=. ;; 4038549e21daSmrg esac 4039549e21daSmrg fi 4040ba6a1819Smrg 4041549e21daSmrg # Try to get the absolute directory name. 4042549e21daSmrg absdir=\`cd \"\$thisdir\" && pwd\` 4043549e21daSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044549e21daSmrg" 4045ba6a1819Smrg 4046549e21daSmrg if test "$fast_install" = yes; then 4047549e21daSmrg $ECHO "\ 4048549e21daSmrg program=lt-'$outputname'$exeext 4049549e21daSmrg progdir=\"\$thisdir/$objdir\" 4050ba6a1819Smrg 4051549e21daSmrg if test ! -f \"\$progdir/\$program\" || 4052549e21daSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053549e21daSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054ba6a1819Smrg 4055549e21daSmrg file=\"\$\$-\$program\" 4056ba6a1819Smrg 4057549e21daSmrg if test ! -d \"\$progdir\"; then 4058549e21daSmrg $MKDIR \"\$progdir\" 4059549e21daSmrg else 4060549e21daSmrg $RM \"\$progdir/\$file\" 4061549e21daSmrg fi" 4062ba6a1819Smrg 4063549e21daSmrg $ECHO "\ 4064549e21daSmrg 4065549e21daSmrg # relink executable if necessary 4066549e21daSmrg if test -n \"\$relink_command\"; then 4067549e21daSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068549e21daSmrg else 4069549e21daSmrg $ECHO \"\$relink_command_output\" >&2 4070549e21daSmrg $RM \"\$progdir/\$file\" 4071549e21daSmrg exit 1 4072ba6a1819Smrg fi 4073549e21daSmrg fi 4074ba6a1819Smrg 4075549e21daSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076549e21daSmrg { $RM \"\$progdir/\$program\"; 4077549e21daSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078549e21daSmrg $RM \"\$progdir/\$file\" 4079549e21daSmrg fi" 4080549e21daSmrg else 4081549e21daSmrg $ECHO "\ 4082549e21daSmrg program='$outputname' 4083549e21daSmrg progdir=\"\$thisdir/$objdir\" 4084549e21daSmrg" 4085ba6a1819Smrg fi 4086ba6a1819Smrg 4087549e21daSmrg $ECHO "\ 4088ba6a1819Smrg 4089549e21daSmrg if test -f \"\$progdir/\$program\"; then" 4090ba6a1819Smrg 40911bedbe3fSmrg # fixup the dll searchpath if we need to. 40921bedbe3fSmrg # 40931bedbe3fSmrg # Fix the DLL searchpath if we need to. Do this before prepending 40941bedbe3fSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 40951bedbe3fSmrg # libraries must come first. 40961bedbe3fSmrg if test -n "$dllsearchpath"; then 40971bedbe3fSmrg $ECHO "\ 40981bedbe3fSmrg # Add the dll search path components to the executable PATH 40991bedbe3fSmrg PATH=$dllsearchpath:\$PATH 41001bedbe3fSmrg" 41011bedbe3fSmrg fi 41021bedbe3fSmrg 4103549e21daSmrg # Export our shlibpath_var if we have one. 4104549e21daSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105549e21daSmrg $ECHO "\ 4106549e21daSmrg # Add our own library path to $shlibpath_var 4107549e21daSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108ba6a1819Smrg 4109549e21daSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110549e21daSmrg # The second colon is a workaround for a bug in BeOS R4 sed 4111549e21daSmrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112549e21daSmrg 4113549e21daSmrg export $shlibpath_var 4114549e21daSmrg" 4115ba6a1819Smrg fi 4116ba6a1819Smrg 4117549e21daSmrg $ECHO "\ 4118549e21daSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119549e21daSmrg # Run the actual program with our arguments. 4120549e21daSmrg func_exec_program \${1+\"\$@\"} 4121549e21daSmrg fi 4122549e21daSmrg else 4123549e21daSmrg # The program doesn't exist. 4124549e21daSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125549e21daSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4126549e21daSmrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127549e21daSmrg exit 1 4128549e21daSmrg fi 4129549e21daSmrgfi\ 4130549e21daSmrg" 4131549e21daSmrg} 4132ba6a1819Smrg 4133ba6a1819Smrg 4134549e21daSmrg# func_emit_cwrapperexe_src 4135549e21daSmrg# emit the source code for a wrapper executable on stdout 4136549e21daSmrg# Must ONLY be called from within func_mode_link because 4137549e21daSmrg# it depends on a number of variable set therein. 4138549e21daSmrgfunc_emit_cwrapperexe_src () 4139549e21daSmrg{ 4140549e21daSmrg cat <<EOF 4141549e21daSmrg 4142549e21daSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143549e21daSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144549e21daSmrg 4145549e21daSmrg The $output program cannot be directly executed until all the libtool 4146549e21daSmrg libraries that it depends on are installed. 4147549e21daSmrg 4148549e21daSmrg This wrapper executable should never be moved out of the build directory. 4149549e21daSmrg If it is, it will not operate correctly. 4150549e21daSmrg*/ 4151549e21daSmrgEOF 4152549e21daSmrg cat <<"EOF" 4153549e21daSmrg#ifdef _MSC_VER 4154549e21daSmrg# define _CRT_SECURE_NO_DEPRECATE 1 4155549e21daSmrg#endif 4156549e21daSmrg#include <stdio.h> 4157549e21daSmrg#include <stdlib.h> 4158549e21daSmrg#ifdef _MSC_VER 4159549e21daSmrg# include <direct.h> 4160549e21daSmrg# include <process.h> 4161549e21daSmrg# include <io.h> 4162549e21daSmrg#else 4163549e21daSmrg# include <unistd.h> 4164549e21daSmrg# include <stdint.h> 4165549e21daSmrg# ifdef __CYGWIN__ 4166549e21daSmrg# include <io.h> 4167549e21daSmrg# endif 4168549e21daSmrg#endif 4169549e21daSmrg#include <malloc.h> 4170549e21daSmrg#include <stdarg.h> 4171549e21daSmrg#include <assert.h> 4172549e21daSmrg#include <string.h> 4173549e21daSmrg#include <ctype.h> 4174549e21daSmrg#include <errno.h> 4175549e21daSmrg#include <fcntl.h> 4176549e21daSmrg#include <sys/stat.h> 4177549e21daSmrg 4178549e21daSmrg/* declarations of non-ANSI functions */ 4179549e21daSmrg#if defined(__MINGW32__) 4180549e21daSmrg# ifdef __STRICT_ANSI__ 4181549e21daSmrgint _putenv (const char *); 4182549e21daSmrg# endif 4183549e21daSmrg#elif defined(__CYGWIN__) 4184549e21daSmrg# ifdef __STRICT_ANSI__ 4185549e21daSmrgchar *realpath (const char *, char *); 4186549e21daSmrgint putenv (char *); 4187549e21daSmrgint setenv (const char *, const char *, int); 4188549e21daSmrg# endif 4189549e21daSmrg/* #elif defined (other platforms) ... */ 4190549e21daSmrg#endif 4191549e21daSmrg 4192549e21daSmrg/* portability defines, excluding path handling macros */ 4193549e21daSmrg#if defined(_MSC_VER) 4194549e21daSmrg# define setmode _setmode 4195549e21daSmrg# define stat _stat 4196549e21daSmrg# define chmod _chmod 4197549e21daSmrg# define getcwd _getcwd 4198549e21daSmrg# define putenv _putenv 4199549e21daSmrg# define S_IXUSR _S_IEXEC 4200549e21daSmrg# ifndef _INTPTR_T_DEFINED 4201549e21daSmrg# define _INTPTR_T_DEFINED 4202549e21daSmrg# define intptr_t int 4203549e21daSmrg# endif 4204549e21daSmrg#elif defined(__MINGW32__) 4205549e21daSmrg# define setmode _setmode 4206549e21daSmrg# define stat _stat 4207549e21daSmrg# define chmod _chmod 4208549e21daSmrg# define getcwd _getcwd 4209549e21daSmrg# define putenv _putenv 4210549e21daSmrg#elif defined(__CYGWIN__) 4211549e21daSmrg# define HAVE_SETENV 4212549e21daSmrg# define FOPEN_WB "wb" 4213549e21daSmrg/* #elif defined (other platforms) ... */ 4214549e21daSmrg#endif 4215549e21daSmrg 4216549e21daSmrg#if defined(PATH_MAX) 4217549e21daSmrg# define LT_PATHMAX PATH_MAX 4218549e21daSmrg#elif defined(MAXPATHLEN) 4219549e21daSmrg# define LT_PATHMAX MAXPATHLEN 4220549e21daSmrg#else 4221549e21daSmrg# define LT_PATHMAX 1024 4222549e21daSmrg#endif 4223549e21daSmrg 4224549e21daSmrg#ifndef S_IXOTH 4225549e21daSmrg# define S_IXOTH 0 4226549e21daSmrg#endif 4227549e21daSmrg#ifndef S_IXGRP 4228549e21daSmrg# define S_IXGRP 0 4229549e21daSmrg#endif 4230549e21daSmrg 4231549e21daSmrg/* path handling portability macros */ 4232549e21daSmrg#ifndef DIR_SEPARATOR 4233549e21daSmrg# define DIR_SEPARATOR '/' 4234549e21daSmrg# define PATH_SEPARATOR ':' 4235549e21daSmrg#endif 4236549e21daSmrg 4237549e21daSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238549e21daSmrg defined (__OS2__) 4239549e21daSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240549e21daSmrg# define FOPEN_WB "wb" 4241549e21daSmrg# ifndef DIR_SEPARATOR_2 4242549e21daSmrg# define DIR_SEPARATOR_2 '\\' 4243549e21daSmrg# endif 4244549e21daSmrg# ifndef PATH_SEPARATOR_2 4245549e21daSmrg# define PATH_SEPARATOR_2 ';' 4246549e21daSmrg# endif 4247549e21daSmrg#endif 4248549e21daSmrg 4249549e21daSmrg#ifndef DIR_SEPARATOR_2 4250549e21daSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251549e21daSmrg#else /* DIR_SEPARATOR_2 */ 4252549e21daSmrg# define IS_DIR_SEPARATOR(ch) \ 4253549e21daSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254549e21daSmrg#endif /* DIR_SEPARATOR_2 */ 4255549e21daSmrg 4256549e21daSmrg#ifndef PATH_SEPARATOR_2 4257549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258549e21daSmrg#else /* PATH_SEPARATOR_2 */ 4259549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260549e21daSmrg#endif /* PATH_SEPARATOR_2 */ 4261549e21daSmrg 4262549e21daSmrg#ifndef FOPEN_WB 4263549e21daSmrg# define FOPEN_WB "w" 4264549e21daSmrg#endif 4265549e21daSmrg#ifndef _O_BINARY 4266549e21daSmrg# define _O_BINARY 0 4267549e21daSmrg#endif 4268549e21daSmrg 4269549e21daSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270549e21daSmrg#define XFREE(stale) do { \ 4271549e21daSmrg if (stale) { free ((void *) stale); stale = 0; } \ 4272549e21daSmrg} while (0) 4273549e21daSmrg 4274549e21daSmrg#if defined(LT_DEBUGWRAPPER) 4275549e21daSmrgstatic int lt_debug = 1; 4276549e21daSmrg#else 4277549e21daSmrgstatic int lt_debug = 0; 4278549e21daSmrg#endif 4279549e21daSmrg 4280549e21daSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281549e21daSmrg 4282549e21daSmrgvoid *xmalloc (size_t num); 4283549e21daSmrgchar *xstrdup (const char *string); 4284549e21daSmrgconst char *base_name (const char *name); 4285549e21daSmrgchar *find_executable (const char *wrapper); 4286549e21daSmrgchar *chase_symlinks (const char *pathspec); 4287549e21daSmrgint make_executable (const char *path); 4288549e21daSmrgint check_executable (const char *path); 4289549e21daSmrgchar *strendzap (char *str, const char *pat); 4290549e21daSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4291549e21daSmrgvoid lt_fatal (const char *file, int line, const char *message, ...); 4292549e21daSmrgstatic const char *nonnull (const char *s); 4293549e21daSmrgstatic const char *nonempty (const char *s); 4294549e21daSmrgvoid lt_setenv (const char *name, const char *value); 4295549e21daSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296549e21daSmrgvoid lt_update_exe_path (const char *name, const char *value); 4297549e21daSmrgvoid lt_update_lib_path (const char *name, const char *value); 4298549e21daSmrgchar **prepare_spawn (char **argv); 4299549e21daSmrgvoid lt_dump_script (FILE *f); 4300549e21daSmrgEOF 4301549e21daSmrg 4302549e21daSmrg cat <<EOF 43031bedbe3fSmrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304549e21daSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305549e21daSmrgEOF 4306549e21daSmrg 4307549e21daSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 43081bedbe3fSmrg func_to_host_path "$temp_rpath" 4309549e21daSmrg cat <<EOF 43101bedbe3fSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311ba6a1819SmrgEOF 4312ba6a1819Smrg else 4313549e21daSmrg cat <<"EOF" 4314549e21daSmrgconst char * LIB_PATH_VALUE = ""; 4315549e21daSmrgEOF 4316ba6a1819Smrg fi 4317549e21daSmrg 4318549e21daSmrg if test -n "$dllsearchpath"; then 43191bedbe3fSmrg func_to_host_path "$dllsearchpath:" 4320549e21daSmrg cat <<EOF 4321549e21daSmrgconst char * EXE_PATH_VARNAME = "PATH"; 43221bedbe3fSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323549e21daSmrgEOF 4324ba6a1819Smrg else 4325549e21daSmrg cat <<"EOF" 4326549e21daSmrgconst char * EXE_PATH_VARNAME = ""; 4327549e21daSmrgconst char * EXE_PATH_VALUE = ""; 4328549e21daSmrgEOF 4329ba6a1819Smrg fi 4330ba6a1819Smrg 4331549e21daSmrg if test "$fast_install" = yes; then 4332549e21daSmrg cat <<EOF 4333549e21daSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334549e21daSmrgEOF 4335ba6a1819Smrg else 4336549e21daSmrg cat <<EOF 4337549e21daSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338549e21daSmrgEOF 4339ba6a1819Smrg fi 4340ba6a1819Smrg 4341ba6a1819Smrg 4342549e21daSmrg cat <<"EOF" 4343ba6a1819Smrg 4344549e21daSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345ba6a1819Smrg 4346549e21daSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347549e21daSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4348549e21daSmrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349ba6a1819Smrg 4350549e21daSmrgint 4351549e21daSmrgmain (int argc, char *argv[]) 4352549e21daSmrg{ 4353549e21daSmrg char **newargz; 4354549e21daSmrg int newargc; 4355549e21daSmrg char *tmp_pathspec; 4356549e21daSmrg char *actual_cwrapper_path; 4357549e21daSmrg char *actual_cwrapper_name; 4358549e21daSmrg char *target_name; 4359549e21daSmrg char *lt_argv_zero; 4360549e21daSmrg intptr_t rval = 127; 4361ba6a1819Smrg 4362549e21daSmrg int i; 4363ba6a1819Smrg 4364549e21daSmrg program_name = (char *) xstrdup (base_name (argv[0])); 4365549e21daSmrg newargz = XMALLOC (char *, argc + 1); 4366ba6a1819Smrg 4367549e21daSmrg /* very simple arg parsing; don't want to rely on getopt 4368549e21daSmrg * also, copy all non cwrapper options to newargz, except 4369549e21daSmrg * argz[0], which is handled differently 4370549e21daSmrg */ 4371549e21daSmrg newargc=0; 4372549e21daSmrg for (i = 1; i < argc; i++) 4373549e21daSmrg { 4374549e21daSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375549e21daSmrg { 4376549e21daSmrgEOF 4377549e21daSmrg case "$host" in 4378549e21daSmrg *mingw* | *cygwin* ) 4379549e21daSmrg # make stdout use "unix" line endings 4380549e21daSmrg echo " setmode(1,_O_BINARY);" 4381549e21daSmrg ;; 4382549e21daSmrg esac 4383ba6a1819Smrg 4384549e21daSmrg cat <<"EOF" 4385549e21daSmrg lt_dump_script (stdout); 4386549e21daSmrg return 0; 4387549e21daSmrg } 4388549e21daSmrg if (strcmp (argv[i], debug_opt) == 0) 4389549e21daSmrg { 4390549e21daSmrg lt_debug = 1; 4391549e21daSmrg continue; 4392549e21daSmrg } 4393549e21daSmrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4394549e21daSmrg { 4395549e21daSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4396549e21daSmrg namespace, but it is not one of the ones we know about and 4397549e21daSmrg have already dealt with, above (inluding dump-script), then 4398549e21daSmrg report an error. Otherwise, targets might begin to believe 4399549e21daSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4400549e21daSmrg namespace. The first time any user complains about this, we'll 4401549e21daSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4402549e21daSmrg or a configure.ac-settable value. 4403549e21daSmrg */ 4404549e21daSmrg lt_fatal (__FILE__, __LINE__, 4405549e21daSmrg "unrecognized %s option: '%s'", 4406549e21daSmrg ltwrapper_option_prefix, argv[i]); 4407549e21daSmrg } 4408549e21daSmrg /* otherwise ... */ 4409549e21daSmrg newargz[++newargc] = xstrdup (argv[i]); 4410549e21daSmrg } 4411549e21daSmrg newargz[++newargc] = NULL; 4412ba6a1819Smrg 4413549e21daSmrgEOF 4414549e21daSmrg cat <<EOF 4415549e21daSmrg /* The GNU banner must be the first non-error debug message */ 4416549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4417549e21daSmrgEOF 4418549e21daSmrg cat <<"EOF" 4419549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4420549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421549e21daSmrg 4422549e21daSmrg tmp_pathspec = find_executable (argv[0]); 4423549e21daSmrg if (tmp_pathspec == NULL) 4424549e21daSmrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4425549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4426549e21daSmrg "(main) found exe (before symlink chase) at: %s\n", 4427549e21daSmrg tmp_pathspec); 4428549e21daSmrg 4429549e21daSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4430549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4431549e21daSmrg "(main) found exe (after symlink chase) at: %s\n", 4432549e21daSmrg actual_cwrapper_path); 4433549e21daSmrg XFREE (tmp_pathspec); 4434549e21daSmrg 4435549e21daSmrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436549e21daSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437549e21daSmrg 4438549e21daSmrg /* wrapper name transforms */ 4439549e21daSmrg strendzap (actual_cwrapper_name, ".exe"); 4440549e21daSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441549e21daSmrg XFREE (actual_cwrapper_name); 4442549e21daSmrg actual_cwrapper_name = tmp_pathspec; 4443549e21daSmrg tmp_pathspec = 0; 4444549e21daSmrg 4445549e21daSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446549e21daSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447549e21daSmrg strendzap (target_name, ".exe"); 4448549e21daSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449549e21daSmrg XFREE (target_name); 4450549e21daSmrg target_name = tmp_pathspec; 4451549e21daSmrg tmp_pathspec = 0; 4452549e21daSmrg 4453549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4454549e21daSmrg "(main) libtool target name: %s\n", 4455549e21daSmrg target_name); 4456549e21daSmrgEOF 4457ba6a1819Smrg 4458549e21daSmrg cat <<EOF 4459549e21daSmrg newargz[0] = 4460549e21daSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461549e21daSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462549e21daSmrg strcpy (newargz[0], actual_cwrapper_path); 4463549e21daSmrg strcat (newargz[0], "$objdir"); 4464549e21daSmrg strcat (newargz[0], "/"); 4465549e21daSmrgEOF 4466ba6a1819Smrg 4467549e21daSmrg cat <<"EOF" 4468549e21daSmrg /* stop here, and copy so we don't have to do this twice */ 4469549e21daSmrg tmp_pathspec = xstrdup (newargz[0]); 4470ba6a1819Smrg 4471549e21daSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472549e21daSmrg strcat (newargz[0], actual_cwrapper_name); 4473ba6a1819Smrg 4474549e21daSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475549e21daSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476549e21daSmrg XFREE (tmp_pathspec); 4477549e21daSmrg tmp_pathspec = NULL; 4478549e21daSmrgEOF 4479ba6a1819Smrg 4480549e21daSmrg case $host_os in 4481549e21daSmrg mingw*) 4482549e21daSmrg cat <<"EOF" 4483549e21daSmrg { 4484549e21daSmrg char* p; 4485549e21daSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486549e21daSmrg { 4487549e21daSmrg *p = '/'; 4488549e21daSmrg } 4489549e21daSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490549e21daSmrg { 4491549e21daSmrg *p = '/'; 4492549e21daSmrg } 4493549e21daSmrg } 4494549e21daSmrgEOF 4495549e21daSmrg ;; 4496549e21daSmrg esac 4497ba6a1819Smrg 4498549e21daSmrg cat <<"EOF" 4499549e21daSmrg XFREE (target_name); 4500549e21daSmrg XFREE (actual_cwrapper_path); 4501549e21daSmrg XFREE (actual_cwrapper_name); 4502ba6a1819Smrg 4503549e21daSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504549e21daSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 45051bedbe3fSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 45061bedbe3fSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 45071bedbe3fSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 45081bedbe3fSmrg libraries must come first. */ 4509549e21daSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 45101bedbe3fSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511ba6a1819Smrg 4512549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4513549e21daSmrg nonnull (lt_argv_zero)); 4514549e21daSmrg for (i = 0; i < newargc; i++) 4515549e21daSmrg { 4516549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4517549e21daSmrg i, nonnull (newargz[i])); 4518549e21daSmrg } 4519ba6a1819Smrg 4520549e21daSmrgEOF 4521ba6a1819Smrg 4522549e21daSmrg case $host_os in 4523549e21daSmrg mingw*) 4524549e21daSmrg cat <<"EOF" 4525549e21daSmrg /* execv doesn't actually work on mingw as expected on unix */ 4526549e21daSmrg newargz = prepare_spawn (newargz); 4527549e21daSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528549e21daSmrg if (rval == -1) 4529549e21daSmrg { 4530549e21daSmrg /* failed to start process */ 4531549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4532549e21daSmrg "(main) failed to launch target \"%s\": %s\n", 4533549e21daSmrg lt_argv_zero, nonnull (strerror (errno))); 4534549e21daSmrg return 127; 4535549e21daSmrg } 4536549e21daSmrg return rval; 4537549e21daSmrgEOF 4538549e21daSmrg ;; 4539549e21daSmrg *) 4540549e21daSmrg cat <<"EOF" 4541549e21daSmrg execv (lt_argv_zero, newargz); 4542549e21daSmrg return rval; /* =127, but avoids unused variable warning */ 4543549e21daSmrgEOF 4544549e21daSmrg ;; 4545549e21daSmrg esac 4546ba6a1819Smrg 4547549e21daSmrg cat <<"EOF" 4548549e21daSmrg} 4549ba6a1819Smrg 4550549e21daSmrgvoid * 4551549e21daSmrgxmalloc (size_t num) 4552549e21daSmrg{ 4553549e21daSmrg void *p = (void *) malloc (num); 4554549e21daSmrg if (!p) 4555549e21daSmrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556ba6a1819Smrg 4557549e21daSmrg return p; 4558549e21daSmrg} 4559ba6a1819Smrg 4560549e21daSmrgchar * 4561549e21daSmrgxstrdup (const char *string) 4562549e21daSmrg{ 4563549e21daSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564549e21daSmrg string) : NULL; 4565549e21daSmrg} 4566ba6a1819Smrg 4567549e21daSmrgconst char * 4568549e21daSmrgbase_name (const char *name) 4569549e21daSmrg{ 4570549e21daSmrg const char *base; 4571ba6a1819Smrg 4572549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573549e21daSmrg /* Skip over the disk name in MSDOS pathnames. */ 4574549e21daSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575549e21daSmrg name += 2; 4576549e21daSmrg#endif 4577ba6a1819Smrg 4578549e21daSmrg for (base = name; *name; name++) 4579549e21daSmrg if (IS_DIR_SEPARATOR (*name)) 4580549e21daSmrg base = name + 1; 4581549e21daSmrg return base; 4582549e21daSmrg} 4583ba6a1819Smrg 4584549e21daSmrgint 4585549e21daSmrgcheck_executable (const char *path) 4586549e21daSmrg{ 4587549e21daSmrg struct stat st; 4588ba6a1819Smrg 4589549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4590549e21daSmrg nonempty (path)); 4591549e21daSmrg if ((!path) || (!*path)) 4592549e21daSmrg return 0; 4593ba6a1819Smrg 4594549e21daSmrg if ((stat (path, &st) >= 0) 4595549e21daSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596549e21daSmrg return 1; 4597549e21daSmrg else 4598549e21daSmrg return 0; 4599549e21daSmrg} 4600ba6a1819Smrg 4601549e21daSmrgint 4602549e21daSmrgmake_executable (const char *path) 4603549e21daSmrg{ 4604549e21daSmrg int rval = 0; 4605549e21daSmrg struct stat st; 4606ba6a1819Smrg 4607549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4608549e21daSmrg nonempty (path)); 4609549e21daSmrg if ((!path) || (!*path)) 4610549e21daSmrg return 0; 4611ba6a1819Smrg 4612549e21daSmrg if (stat (path, &st) >= 0) 4613549e21daSmrg { 4614549e21daSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615549e21daSmrg } 4616549e21daSmrg return rval; 4617549e21daSmrg} 4618ba6a1819Smrg 4619549e21daSmrg/* Searches for the full path of the wrapper. Returns 4620549e21daSmrg newly allocated full path name if found, NULL otherwise 4621549e21daSmrg Does not chase symlinks, even on platforms that support them. 4622549e21daSmrg*/ 4623549e21daSmrgchar * 4624549e21daSmrgfind_executable (const char *wrapper) 4625549e21daSmrg{ 4626549e21daSmrg int has_slash = 0; 4627549e21daSmrg const char *p; 4628549e21daSmrg const char *p_next; 4629549e21daSmrg /* static buffer for getcwd */ 4630549e21daSmrg char tmp[LT_PATHMAX + 1]; 4631549e21daSmrg int tmp_len; 4632549e21daSmrg char *concat_name; 4633ba6a1819Smrg 4634549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4635549e21daSmrg nonempty (wrapper)); 4636ba6a1819Smrg 4637549e21daSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638549e21daSmrg return NULL; 4639ba6a1819Smrg 4640549e21daSmrg /* Absolute path? */ 4641549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642549e21daSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643549e21daSmrg { 4644549e21daSmrg concat_name = xstrdup (wrapper); 4645549e21daSmrg if (check_executable (concat_name)) 4646549e21daSmrg return concat_name; 4647549e21daSmrg XFREE (concat_name); 4648549e21daSmrg } 4649549e21daSmrg else 4650549e21daSmrg { 4651549e21daSmrg#endif 4652549e21daSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653549e21daSmrg { 4654549e21daSmrg concat_name = xstrdup (wrapper); 4655549e21daSmrg if (check_executable (concat_name)) 4656549e21daSmrg return concat_name; 4657549e21daSmrg XFREE (concat_name); 4658549e21daSmrg } 4659549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660549e21daSmrg } 4661549e21daSmrg#endif 4662ba6a1819Smrg 4663549e21daSmrg for (p = wrapper; *p; p++) 4664549e21daSmrg if (*p == '/') 4665549e21daSmrg { 4666549e21daSmrg has_slash = 1; 4667549e21daSmrg break; 4668549e21daSmrg } 4669549e21daSmrg if (!has_slash) 4670549e21daSmrg { 4671549e21daSmrg /* no slashes; search PATH */ 4672549e21daSmrg const char *path = getenv ("PATH"); 4673549e21daSmrg if (path != NULL) 4674549e21daSmrg { 4675549e21daSmrg for (p = path; *p; p = p_next) 4676549e21daSmrg { 4677549e21daSmrg const char *q; 4678549e21daSmrg size_t p_len; 4679549e21daSmrg for (q = p; *q; q++) 4680549e21daSmrg if (IS_PATH_SEPARATOR (*q)) 4681549e21daSmrg break; 4682549e21daSmrg p_len = q - p; 4683549e21daSmrg p_next = (*q == '\0' ? q : q + 1); 4684549e21daSmrg if (p_len == 0) 4685549e21daSmrg { 4686549e21daSmrg /* empty path: current directory */ 4687549e21daSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 4688549e21daSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4689549e21daSmrg nonnull (strerror (errno))); 4690549e21daSmrg tmp_len = strlen (tmp); 4691549e21daSmrg concat_name = 4692549e21daSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693549e21daSmrg memcpy (concat_name, tmp, tmp_len); 4694549e21daSmrg concat_name[tmp_len] = '/'; 4695549e21daSmrg strcpy (concat_name + tmp_len + 1, wrapper); 4696549e21daSmrg } 4697549e21daSmrg else 4698549e21daSmrg { 4699549e21daSmrg concat_name = 4700549e21daSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701549e21daSmrg memcpy (concat_name, p, p_len); 4702549e21daSmrg concat_name[p_len] = '/'; 4703549e21daSmrg strcpy (concat_name + p_len + 1, wrapper); 4704549e21daSmrg } 4705549e21daSmrg if (check_executable (concat_name)) 4706549e21daSmrg return concat_name; 4707549e21daSmrg XFREE (concat_name); 4708549e21daSmrg } 4709549e21daSmrg } 4710549e21daSmrg /* not found in PATH; assume curdir */ 4711549e21daSmrg } 4712549e21daSmrg /* Relative path | not found in path: prepend cwd */ 4713549e21daSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 4714549e21daSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4715549e21daSmrg nonnull (strerror (errno))); 4716549e21daSmrg tmp_len = strlen (tmp); 4717549e21daSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718549e21daSmrg memcpy (concat_name, tmp, tmp_len); 4719549e21daSmrg concat_name[tmp_len] = '/'; 4720549e21daSmrg strcpy (concat_name + tmp_len + 1, wrapper); 4721ba6a1819Smrg 4722549e21daSmrg if (check_executable (concat_name)) 4723549e21daSmrg return concat_name; 4724549e21daSmrg XFREE (concat_name); 4725549e21daSmrg return NULL; 4726549e21daSmrg} 4727ba6a1819Smrg 4728549e21daSmrgchar * 4729549e21daSmrgchase_symlinks (const char *pathspec) 4730549e21daSmrg{ 4731549e21daSmrg#ifndef S_ISLNK 4732549e21daSmrg return xstrdup (pathspec); 4733549e21daSmrg#else 4734549e21daSmrg char buf[LT_PATHMAX]; 4735549e21daSmrg struct stat s; 4736549e21daSmrg char *tmp_pathspec = xstrdup (pathspec); 4737549e21daSmrg char *p; 4738549e21daSmrg int has_symlinks = 0; 4739549e21daSmrg while (strlen (tmp_pathspec) && !has_symlinks) 4740549e21daSmrg { 4741549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4742549e21daSmrg "checking path component for symlinks: %s\n", 4743549e21daSmrg tmp_pathspec); 4744549e21daSmrg if (lstat (tmp_pathspec, &s) == 0) 4745549e21daSmrg { 4746549e21daSmrg if (S_ISLNK (s.st_mode) != 0) 4747549e21daSmrg { 4748549e21daSmrg has_symlinks = 1; 4749549e21daSmrg break; 4750549e21daSmrg } 4751ba6a1819Smrg 4752549e21daSmrg /* search backwards for last DIR_SEPARATOR */ 4753549e21daSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754549e21daSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755549e21daSmrg p--; 4756549e21daSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757549e21daSmrg { 4758549e21daSmrg /* no more DIR_SEPARATORS left */ 4759549e21daSmrg break; 4760549e21daSmrg } 4761549e21daSmrg *p = '\0'; 4762549e21daSmrg } 4763549e21daSmrg else 4764549e21daSmrg { 4765549e21daSmrg lt_fatal (__FILE__, __LINE__, 4766549e21daSmrg "error accessing file \"%s\": %s", 4767549e21daSmrg tmp_pathspec, nonnull (strerror (errno))); 4768549e21daSmrg } 4769549e21daSmrg } 4770549e21daSmrg XFREE (tmp_pathspec); 4771ba6a1819Smrg 4772549e21daSmrg if (!has_symlinks) 4773549e21daSmrg { 4774549e21daSmrg return xstrdup (pathspec); 4775549e21daSmrg } 4776ba6a1819Smrg 4777549e21daSmrg tmp_pathspec = realpath (pathspec, buf); 4778549e21daSmrg if (tmp_pathspec == 0) 4779549e21daSmrg { 4780549e21daSmrg lt_fatal (__FILE__, __LINE__, 4781549e21daSmrg "could not follow symlinks for %s", pathspec); 4782549e21daSmrg } 4783549e21daSmrg return xstrdup (tmp_pathspec); 4784549e21daSmrg#endif 4785549e21daSmrg} 4786ba6a1819Smrg 4787549e21daSmrgchar * 4788549e21daSmrgstrendzap (char *str, const char *pat) 4789549e21daSmrg{ 4790549e21daSmrg size_t len, patlen; 4791ba6a1819Smrg 4792549e21daSmrg assert (str != NULL); 4793549e21daSmrg assert (pat != NULL); 4794ba6a1819Smrg 4795549e21daSmrg len = strlen (str); 4796549e21daSmrg patlen = strlen (pat); 4797ba6a1819Smrg 4798549e21daSmrg if (patlen <= len) 4799549e21daSmrg { 4800549e21daSmrg str += len - patlen; 4801549e21daSmrg if (strcmp (str, pat) == 0) 4802549e21daSmrg *str = '\0'; 4803549e21daSmrg } 4804549e21daSmrg return str; 4805549e21daSmrg} 4806ba6a1819Smrg 4807549e21daSmrgvoid 4808549e21daSmrglt_debugprintf (const char *file, int line, const char *fmt, ...) 4809549e21daSmrg{ 4810549e21daSmrg va_list args; 4811549e21daSmrg if (lt_debug) 4812549e21daSmrg { 4813549e21daSmrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4814549e21daSmrg va_start (args, fmt); 4815549e21daSmrg (void) vfprintf (stderr, fmt, args); 4816549e21daSmrg va_end (args); 4817549e21daSmrg } 4818549e21daSmrg} 4819ba6a1819Smrg 4820549e21daSmrgstatic void 4821549e21daSmrglt_error_core (int exit_status, const char *file, 4822549e21daSmrg int line, const char *mode, 4823549e21daSmrg const char *message, va_list ap) 4824549e21daSmrg{ 4825549e21daSmrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826549e21daSmrg vfprintf (stderr, message, ap); 4827549e21daSmrg fprintf (stderr, ".\n"); 4828ba6a1819Smrg 4829549e21daSmrg if (exit_status >= 0) 4830549e21daSmrg exit (exit_status); 4831549e21daSmrg} 4832ba6a1819Smrg 4833549e21daSmrgvoid 4834549e21daSmrglt_fatal (const char *file, int line, const char *message, ...) 4835549e21daSmrg{ 4836549e21daSmrg va_list ap; 4837549e21daSmrg va_start (ap, message); 4838549e21daSmrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839549e21daSmrg va_end (ap); 4840549e21daSmrg} 4841ba6a1819Smrg 4842549e21daSmrgstatic const char * 4843549e21daSmrgnonnull (const char *s) 4844549e21daSmrg{ 4845549e21daSmrg return s ? s : "(null)"; 4846549e21daSmrg} 4847ba6a1819Smrg 4848549e21daSmrgstatic const char * 4849549e21daSmrgnonempty (const char *s) 4850549e21daSmrg{ 4851549e21daSmrg return (s && !*s) ? "(empty)" : nonnull (s); 4852549e21daSmrg} 4853ba6a1819Smrg 4854549e21daSmrgvoid 4855549e21daSmrglt_setenv (const char *name, const char *value) 4856549e21daSmrg{ 4857549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4858549e21daSmrg "(lt_setenv) setting '%s' to '%s'\n", 4859549e21daSmrg nonnull (name), nonnull (value)); 4860549e21daSmrg { 4861549e21daSmrg#ifdef HAVE_SETENV 4862549e21daSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863549e21daSmrg char *str = xstrdup (value); 4864549e21daSmrg setenv (name, str, 1); 4865549e21daSmrg#else 4866549e21daSmrg int len = strlen (name) + 1 + strlen (value) + 1; 4867549e21daSmrg char *str = XMALLOC (char, len); 4868549e21daSmrg sprintf (str, "%s=%s", name, value); 4869549e21daSmrg if (putenv (str) != EXIT_SUCCESS) 4870549e21daSmrg { 4871549e21daSmrg XFREE (str); 4872549e21daSmrg } 4873549e21daSmrg#endif 4874549e21daSmrg } 4875549e21daSmrg} 4876ba6a1819Smrg 4877549e21daSmrgchar * 4878549e21daSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879549e21daSmrg{ 4880549e21daSmrg char *new_value; 4881549e21daSmrg if (orig_value && *orig_value) 4882549e21daSmrg { 4883549e21daSmrg int orig_value_len = strlen (orig_value); 4884549e21daSmrg int add_len = strlen (add); 4885549e21daSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886549e21daSmrg if (to_end) 4887549e21daSmrg { 4888549e21daSmrg strcpy (new_value, orig_value); 4889549e21daSmrg strcpy (new_value + orig_value_len, add); 4890549e21daSmrg } 4891549e21daSmrg else 4892549e21daSmrg { 4893549e21daSmrg strcpy (new_value, add); 4894549e21daSmrg strcpy (new_value + add_len, orig_value); 4895549e21daSmrg } 4896549e21daSmrg } 4897549e21daSmrg else 4898549e21daSmrg { 4899549e21daSmrg new_value = xstrdup (add); 4900549e21daSmrg } 4901549e21daSmrg return new_value; 4902549e21daSmrg} 4903ba6a1819Smrg 4904549e21daSmrgvoid 4905549e21daSmrglt_update_exe_path (const char *name, const char *value) 4906549e21daSmrg{ 4907549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4908549e21daSmrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4909549e21daSmrg nonnull (name), nonnull (value)); 4910ba6a1819Smrg 4911549e21daSmrg if (name && *name && value && *value) 4912549e21daSmrg { 4913549e21daSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914549e21daSmrg /* some systems can't cope with a ':'-terminated path #' */ 4915549e21daSmrg int len = strlen (new_value); 4916549e21daSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917549e21daSmrg { 4918549e21daSmrg new_value[len-1] = '\0'; 4919549e21daSmrg } 4920549e21daSmrg lt_setenv (name, new_value); 4921549e21daSmrg XFREE (new_value); 4922549e21daSmrg } 4923549e21daSmrg} 4924ba6a1819Smrg 4925549e21daSmrgvoid 4926549e21daSmrglt_update_lib_path (const char *name, const char *value) 4927549e21daSmrg{ 4928549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4929549e21daSmrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4930549e21daSmrg nonnull (name), nonnull (value)); 4931ba6a1819Smrg 4932549e21daSmrg if (name && *name && value && *value) 4933549e21daSmrg { 4934549e21daSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935549e21daSmrg lt_setenv (name, new_value); 4936549e21daSmrg XFREE (new_value); 4937549e21daSmrg } 4938549e21daSmrg} 4939ba6a1819Smrg 4940549e21daSmrgEOF 4941549e21daSmrg case $host_os in 4942549e21daSmrg mingw*) 4943549e21daSmrg cat <<"EOF" 4944549e21daSmrg 4945549e21daSmrg/* Prepares an argument vector before calling spawn(). 4946549e21daSmrg Note that spawn() does not by itself call the command interpreter 4947549e21daSmrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4948549e21daSmrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4949549e21daSmrg GetVersionEx(&v); 4950549e21daSmrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4951549e21daSmrg }) ? "cmd.exe" : "command.com"). 4952549e21daSmrg Instead it simply concatenates the arguments, separated by ' ', and calls 4953549e21daSmrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4954549e21daSmrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4955549e21daSmrg special way: 4956549e21daSmrg - Space and tab are interpreted as delimiters. They are not treated as 4957549e21daSmrg delimiters if they are surrounded by double quotes: "...". 4958549e21daSmrg - Unescaped double quotes are removed from the input. Their only effect is 4959549e21daSmrg that within double quotes, space and tab are treated like normal 4960549e21daSmrg characters. 4961549e21daSmrg - Backslashes not followed by double quotes are not special. 4962549e21daSmrg - But 2*n+1 backslashes followed by a double quote become 4963549e21daSmrg n backslashes followed by a double quote (n >= 0): 4964549e21daSmrg \" -> " 4965549e21daSmrg \\\" -> \" 4966549e21daSmrg \\\\\" -> \\" 4967549e21daSmrg */ 4968549e21daSmrg#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" 4969549e21daSmrg#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" 4970549e21daSmrgchar ** 4971549e21daSmrgprepare_spawn (char **argv) 4972549e21daSmrg{ 4973549e21daSmrg size_t argc; 4974549e21daSmrg char **new_argv; 4975549e21daSmrg size_t i; 4976ba6a1819Smrg 4977549e21daSmrg /* Count number of arguments. */ 4978549e21daSmrg for (argc = 0; argv[argc] != NULL; argc++) 4979549e21daSmrg ; 4980ba6a1819Smrg 4981549e21daSmrg /* Allocate new argument vector. */ 4982549e21daSmrg new_argv = XMALLOC (char *, argc + 1); 4983ba6a1819Smrg 4984549e21daSmrg /* Put quoted arguments into the new argument vector. */ 4985549e21daSmrg for (i = 0; i < argc; i++) 4986549e21daSmrg { 4987549e21daSmrg const char *string = argv[i]; 4988549e21daSmrg 4989549e21daSmrg if (string[0] == '\0') 4990549e21daSmrg new_argv[i] = xstrdup ("\"\""); 4991549e21daSmrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4992549e21daSmrg { 4993549e21daSmrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4994549e21daSmrg size_t length; 4995549e21daSmrg unsigned int backslashes; 4996549e21daSmrg const char *s; 4997549e21daSmrg char *quoted_string; 4998549e21daSmrg char *p; 4999549e21daSmrg 5000549e21daSmrg length = 0; 5001549e21daSmrg backslashes = 0; 5002549e21daSmrg if (quote_around) 5003549e21daSmrg length++; 5004549e21daSmrg for (s = string; *s != '\0'; s++) 5005549e21daSmrg { 5006549e21daSmrg char c = *s; 5007549e21daSmrg if (c == '"') 5008549e21daSmrg length += backslashes + 1; 5009549e21daSmrg length++; 5010549e21daSmrg if (c == '\\') 5011549e21daSmrg backslashes++; 5012549e21daSmrg else 5013549e21daSmrg backslashes = 0; 5014549e21daSmrg } 5015549e21daSmrg if (quote_around) 5016549e21daSmrg length += backslashes + 1; 5017549e21daSmrg 5018549e21daSmrg quoted_string = XMALLOC (char, length + 1); 5019549e21daSmrg 5020549e21daSmrg p = quoted_string; 5021549e21daSmrg backslashes = 0; 5022549e21daSmrg if (quote_around) 5023549e21daSmrg *p++ = '"'; 5024549e21daSmrg for (s = string; *s != '\0'; s++) 5025549e21daSmrg { 5026549e21daSmrg char c = *s; 5027549e21daSmrg if (c == '"') 5028549e21daSmrg { 5029549e21daSmrg unsigned int j; 5030549e21daSmrg for (j = backslashes + 1; j > 0; j--) 5031549e21daSmrg *p++ = '\\'; 5032549e21daSmrg } 5033549e21daSmrg *p++ = c; 5034549e21daSmrg if (c == '\\') 5035549e21daSmrg backslashes++; 5036549e21daSmrg else 5037549e21daSmrg backslashes = 0; 5038549e21daSmrg } 5039549e21daSmrg if (quote_around) 5040549e21daSmrg { 5041549e21daSmrg unsigned int j; 5042549e21daSmrg for (j = backslashes; j > 0; j--) 5043549e21daSmrg *p++ = '\\'; 5044549e21daSmrg *p++ = '"'; 5045549e21daSmrg } 5046549e21daSmrg *p = '\0'; 5047ba6a1819Smrg 5048549e21daSmrg new_argv[i] = quoted_string; 5049549e21daSmrg } 5050549e21daSmrg else 5051549e21daSmrg new_argv[i] = (char *) string; 5052549e21daSmrg } 5053549e21daSmrg new_argv[argc] = NULL; 5054ba6a1819Smrg 5055549e21daSmrg return new_argv; 5056549e21daSmrg} 5057549e21daSmrgEOF 5058ba6a1819Smrg ;; 5059549e21daSmrg esac 5060ba6a1819Smrg 5061549e21daSmrg cat <<"EOF" 5062549e21daSmrgvoid lt_dump_script (FILE* f) 5063549e21daSmrg{ 5064549e21daSmrgEOF 5065549e21daSmrg func_emit_wrapper yes | 50661bedbe3fSmrg $SED -n -e ' 50671bedbe3fSmrgs/^\(.\{79\}\)\(..*\)/\1\ 50681bedbe3fSmrg\2/ 50691bedbe3fSmrgh 50701bedbe3fSmrgs/\([\\"]\)/\\\1/g 50711bedbe3fSmrgs/$/\\n/ 50721bedbe3fSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 50731bedbe3fSmrgg 50741bedbe3fSmrgD' 5075549e21daSmrg cat <<"EOF" 5076549e21daSmrg} 5077549e21daSmrgEOF 5078549e21daSmrg} 5079549e21daSmrg# end: func_emit_cwrapperexe_src 5080ba6a1819Smrg 5081549e21daSmrg# func_win32_import_lib_p ARG 5082549e21daSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd 5083549e21daSmrgfunc_win32_import_lib_p () 5084549e21daSmrg{ 5085549e21daSmrg $opt_debug 5086549e21daSmrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5087549e21daSmrg *import*) : ;; 5088549e21daSmrg *) false ;; 5089549e21daSmrg esac 5090549e21daSmrg} 5091ba6a1819Smrg 5092549e21daSmrg# func_mode_link arg... 5093549e21daSmrgfunc_mode_link () 5094549e21daSmrg{ 5095549e21daSmrg $opt_debug 5096549e21daSmrg case $host in 5097549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098549e21daSmrg # It is impossible to link a dll without this setting, and 5099549e21daSmrg # we shouldn't force the makefile maintainer to figure out 5100549e21daSmrg # which system we are compiling for in order to pass an extra 5101549e21daSmrg # flag for every libtool invocation. 5102549e21daSmrg # allow_undefined=no 5103ba6a1819Smrg 5104549e21daSmrg # FIXME: Unfortunately, there are problems with the above when trying 5105549e21daSmrg # to make a dll which has undefined symbols, in which case not 5106549e21daSmrg # even a static library is built. For now, we need to specify 5107549e21daSmrg # -no-undefined on the libtool link line when we can be certain 5108549e21daSmrg # that all symbols are satisfied, otherwise we get a static library. 5109549e21daSmrg allow_undefined=yes 5110549e21daSmrg ;; 5111549e21daSmrg *) 5112549e21daSmrg allow_undefined=yes 5113549e21daSmrg ;; 5114549e21daSmrg esac 5115549e21daSmrg libtool_args=$nonopt 5116549e21daSmrg base_compile="$nonopt $@" 5117549e21daSmrg compile_command=$nonopt 5118549e21daSmrg finalize_command=$nonopt 5119ba6a1819Smrg 5120549e21daSmrg compile_rpath= 5121549e21daSmrg finalize_rpath= 5122549e21daSmrg compile_shlibpath= 5123549e21daSmrg finalize_shlibpath= 5124549e21daSmrg convenience= 5125549e21daSmrg old_convenience= 5126549e21daSmrg deplibs= 5127549e21daSmrg old_deplibs= 5128549e21daSmrg compiler_flags= 5129549e21daSmrg linker_flags= 5130549e21daSmrg dllsearchpath= 5131549e21daSmrg lib_search_path=`pwd` 5132549e21daSmrg inst_prefix_dir= 5133549e21daSmrg new_inherited_linker_flags= 5134ba6a1819Smrg 5135549e21daSmrg avoid_version=no 5136549e21daSmrg bindir= 5137549e21daSmrg dlfiles= 5138549e21daSmrg dlprefiles= 5139549e21daSmrg dlself=no 5140549e21daSmrg export_dynamic=no 5141549e21daSmrg export_symbols= 5142549e21daSmrg export_symbols_regex= 5143549e21daSmrg generated= 5144549e21daSmrg libobjs= 5145549e21daSmrg ltlibs= 5146549e21daSmrg module=no 5147549e21daSmrg no_install=no 5148549e21daSmrg objs= 5149549e21daSmrg non_pic_objects= 5150549e21daSmrg precious_files_regex= 5151549e21daSmrg prefer_static_libs=no 5152549e21daSmrg preload=no 5153549e21daSmrg prev= 5154549e21daSmrg prevarg= 5155549e21daSmrg release= 5156549e21daSmrg rpath= 5157549e21daSmrg xrpath= 5158549e21daSmrg perm_rpath= 5159549e21daSmrg temp_rpath= 5160549e21daSmrg thread_safe=no 5161549e21daSmrg vinfo= 5162549e21daSmrg vinfo_number=no 5163549e21daSmrg weak_libs= 5164549e21daSmrg single_module="${wl}-single_module" 5165549e21daSmrg func_infer_tag $base_compile 5166ba6a1819Smrg 5167549e21daSmrg # We need to know -static, to get the right output filenames. 5168549e21daSmrg for arg 5169549e21daSmrg do 5170549e21daSmrg case $arg in 5171549e21daSmrg -shared) 5172549e21daSmrg test "$build_libtool_libs" != yes && \ 5173549e21daSmrg func_fatal_configuration "can not build a shared library" 5174549e21daSmrg build_old_libs=no 5175549e21daSmrg break 5176549e21daSmrg ;; 5177549e21daSmrg -all-static | -static | -static-libtool-libs) 5178549e21daSmrg case $arg in 5179549e21daSmrg -all-static) 5180549e21daSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181549e21daSmrg func_warning "complete static linking is impossible in this configuration" 5182549e21daSmrg fi 5183549e21daSmrg if test -n "$link_static_flag"; then 5184549e21daSmrg dlopen_self=$dlopen_self_static 5185549e21daSmrg fi 5186549e21daSmrg prefer_static_libs=yes 5187549e21daSmrg ;; 5188549e21daSmrg -static) 5189549e21daSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190549e21daSmrg dlopen_self=$dlopen_self_static 5191549e21daSmrg fi 5192549e21daSmrg prefer_static_libs=built 5193549e21daSmrg ;; 5194549e21daSmrg -static-libtool-libs) 5195549e21daSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196549e21daSmrg dlopen_self=$dlopen_self_static 5197549e21daSmrg fi 5198549e21daSmrg prefer_static_libs=yes 5199549e21daSmrg ;; 5200549e21daSmrg esac 5201549e21daSmrg build_libtool_libs=no 5202549e21daSmrg build_old_libs=yes 5203549e21daSmrg break 5204549e21daSmrg ;; 5205549e21daSmrg esac 5206549e21daSmrg done 5207ba6a1819Smrg 5208549e21daSmrg # See if our shared archives depend on static archives. 5209549e21daSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210ba6a1819Smrg 5211549e21daSmrg # Go through the arguments, transforming them on the way. 5212549e21daSmrg while test "$#" -gt 0; do 5213549e21daSmrg arg="$1" 5214549e21daSmrg shift 5215549e21daSmrg func_quote_for_eval "$arg" 5216549e21daSmrg qarg=$func_quote_for_eval_unquoted_result 5217549e21daSmrg func_append libtool_args " $func_quote_for_eval_result" 5218ba6a1819Smrg 5219549e21daSmrg # If the previous option needs an argument, assign it. 5220549e21daSmrg if test -n "$prev"; then 5221549e21daSmrg case $prev in 5222549e21daSmrg output) 5223549e21daSmrg func_append compile_command " @OUTPUT@" 5224549e21daSmrg func_append finalize_command " @OUTPUT@" 5225549e21daSmrg ;; 5226549e21daSmrg esac 5227ba6a1819Smrg 5228549e21daSmrg case $prev in 5229549e21daSmrg bindir) 5230549e21daSmrg bindir="$arg" 5231549e21daSmrg prev= 5232549e21daSmrg continue 5233549e21daSmrg ;; 5234549e21daSmrg dlfiles|dlprefiles) 5235549e21daSmrg if test "$preload" = no; then 5236549e21daSmrg # Add the symbol object into the linking commands. 5237549e21daSmrg func_append compile_command " @SYMFILE@" 5238549e21daSmrg func_append finalize_command " @SYMFILE@" 5239549e21daSmrg preload=yes 5240ba6a1819Smrg fi 5241549e21daSmrg case $arg in 5242549e21daSmrg *.la | *.lo) ;; # We handle these cases below. 5243549e21daSmrg force) 5244549e21daSmrg if test "$dlself" = no; then 5245549e21daSmrg dlself=needless 5246549e21daSmrg export_dynamic=yes 5247ba6a1819Smrg fi 5248549e21daSmrg prev= 5249549e21daSmrg continue 5250549e21daSmrg ;; 5251549e21daSmrg self) 5252549e21daSmrg if test "$prev" = dlprefiles; then 5253549e21daSmrg dlself=yes 5254549e21daSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255549e21daSmrg dlself=yes 5256ba6a1819Smrg else 5257549e21daSmrg dlself=needless 5258549e21daSmrg export_dynamic=yes 5259ba6a1819Smrg fi 5260549e21daSmrg prev= 5261549e21daSmrg continue 5262549e21daSmrg ;; 5263549e21daSmrg *) 5264549e21daSmrg if test "$prev" = dlfiles; then 52651bedbe3fSmrg func_append dlfiles " $arg" 5266ba6a1819Smrg else 52671bedbe3fSmrg func_append dlprefiles " $arg" 5268ba6a1819Smrg fi 5269549e21daSmrg prev= 5270549e21daSmrg continue 5271549e21daSmrg ;; 5272549e21daSmrg esac 5273549e21daSmrg ;; 5274549e21daSmrg expsyms) 5275549e21daSmrg export_symbols="$arg" 5276549e21daSmrg test -f "$arg" \ 5277549e21daSmrg || func_fatal_error "symbol file \`$arg' does not exist" 5278549e21daSmrg prev= 5279549e21daSmrg continue 5280549e21daSmrg ;; 5281549e21daSmrg expsyms_regex) 5282549e21daSmrg export_symbols_regex="$arg" 5283549e21daSmrg prev= 5284549e21daSmrg continue 5285549e21daSmrg ;; 5286549e21daSmrg framework) 5287549e21daSmrg case $host in 5288549e21daSmrg *-*-darwin*) 5289549e21daSmrg case "$deplibs " in 5290549e21daSmrg *" $qarg.ltframework "*) ;; 52911bedbe3fSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292549e21daSmrg ;; 5293549e21daSmrg esac 5294549e21daSmrg ;; 5295549e21daSmrg esac 5296549e21daSmrg prev= 5297549e21daSmrg continue 5298549e21daSmrg ;; 5299549e21daSmrg inst_prefix) 5300549e21daSmrg inst_prefix_dir="$arg" 5301549e21daSmrg prev= 5302549e21daSmrg continue 5303549e21daSmrg ;; 5304549e21daSmrg objectlist) 5305549e21daSmrg if test -f "$arg"; then 5306549e21daSmrg save_arg=$arg 5307549e21daSmrg moreargs= 5308549e21daSmrg for fil in `cat "$save_arg"` 5309549e21daSmrg do 53101bedbe3fSmrg# func_append moreargs " $fil" 5311549e21daSmrg arg=$fil 5312549e21daSmrg # A libtool-controlled object. 5313ba6a1819Smrg 5314549e21daSmrg # Check to see that this really is a libtool object. 5315549e21daSmrg if func_lalib_unsafe_p "$arg"; then 5316549e21daSmrg pic_object= 5317549e21daSmrg non_pic_object= 5318ba6a1819Smrg 5319549e21daSmrg # Read the .lo file 5320549e21daSmrg func_source "$arg" 5321ba6a1819Smrg 5322549e21daSmrg if test -z "$pic_object" || 5323549e21daSmrg test -z "$non_pic_object" || 5324549e21daSmrg test "$pic_object" = none && 5325549e21daSmrg test "$non_pic_object" = none; then 5326549e21daSmrg func_fatal_error "cannot find name of object for \`$arg'" 5327549e21daSmrg fi 5328ba6a1819Smrg 5329549e21daSmrg # Extract subdirectory from the argument. 5330549e21daSmrg func_dirname "$arg" "/" "" 5331549e21daSmrg xdir="$func_dirname_result" 5332ba6a1819Smrg 5333549e21daSmrg if test "$pic_object" != none; then 5334549e21daSmrg # Prepend the subdirectory the object is found in. 5335549e21daSmrg pic_object="$xdir$pic_object" 5336ba6a1819Smrg 5337549e21daSmrg if test "$prev" = dlfiles; then 5338549e21daSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 53391bedbe3fSmrg func_append dlfiles " $pic_object" 5340549e21daSmrg prev= 5341549e21daSmrg continue 5342549e21daSmrg else 5343549e21daSmrg # If libtool objects are unsupported, then we need to preload. 5344549e21daSmrg prev=dlprefiles 5345549e21daSmrg fi 5346549e21daSmrg fi 5347ba6a1819Smrg 5348549e21daSmrg # CHECK ME: I think I busted this. -Ossama 5349549e21daSmrg if test "$prev" = dlprefiles; then 5350549e21daSmrg # Preload the old-style object. 53511bedbe3fSmrg func_append dlprefiles " $pic_object" 5352549e21daSmrg prev= 5353549e21daSmrg fi 5354ba6a1819Smrg 5355549e21daSmrg # A PIC object. 5356549e21daSmrg func_append libobjs " $pic_object" 5357549e21daSmrg arg="$pic_object" 5358549e21daSmrg fi 5359ba6a1819Smrg 5360549e21daSmrg # Non-PIC object. 5361549e21daSmrg if test "$non_pic_object" != none; then 5362549e21daSmrg # Prepend the subdirectory the object is found in. 5363549e21daSmrg non_pic_object="$xdir$non_pic_object" 5364ba6a1819Smrg 5365549e21daSmrg # A standard non-PIC object 5366549e21daSmrg func_append non_pic_objects " $non_pic_object" 5367549e21daSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 5368549e21daSmrg arg="$non_pic_object" 5369549e21daSmrg fi 5370549e21daSmrg else 5371549e21daSmrg # If the PIC object exists, use it instead. 5372549e21daSmrg # $xdir was prepended to $pic_object above. 5373549e21daSmrg non_pic_object="$pic_object" 5374549e21daSmrg func_append non_pic_objects " $non_pic_object" 5375549e21daSmrg fi 5376549e21daSmrg else 5377549e21daSmrg # Only an error if not doing a dry-run. 5378549e21daSmrg if $opt_dry_run; then 5379549e21daSmrg # Extract subdirectory from the argument. 5380549e21daSmrg func_dirname "$arg" "/" "" 5381549e21daSmrg xdir="$func_dirname_result" 5382549e21daSmrg 5383549e21daSmrg func_lo2o "$arg" 5384549e21daSmrg pic_object=$xdir$objdir/$func_lo2o_result 5385549e21daSmrg non_pic_object=$xdir$func_lo2o_result 5386549e21daSmrg func_append libobjs " $pic_object" 5387549e21daSmrg func_append non_pic_objects " $non_pic_object" 5388549e21daSmrg else 5389549e21daSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5390549e21daSmrg fi 5391549e21daSmrg fi 5392549e21daSmrg done 5393549e21daSmrg else 5394549e21daSmrg func_fatal_error "link input file \`$arg' does not exist" 5395ba6a1819Smrg fi 5396549e21daSmrg arg=$save_arg 5397549e21daSmrg prev= 5398549e21daSmrg continue 5399549e21daSmrg ;; 5400549e21daSmrg precious_regex) 5401549e21daSmrg precious_files_regex="$arg" 5402549e21daSmrg prev= 5403549e21daSmrg continue 5404549e21daSmrg ;; 5405549e21daSmrg release) 5406549e21daSmrg release="-$arg" 5407549e21daSmrg prev= 5408549e21daSmrg continue 5409549e21daSmrg ;; 5410549e21daSmrg rpath | xrpath) 5411549e21daSmrg # We need an absolute path. 5412549e21daSmrg case $arg in 5413549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414549e21daSmrg *) 5415549e21daSmrg func_fatal_error "only absolute run-paths are allowed" 5416549e21daSmrg ;; 5417ba6a1819Smrg esac 5418549e21daSmrg if test "$prev" = rpath; then 5419549e21daSmrg case "$rpath " in 5420549e21daSmrg *" $arg "*) ;; 54211bedbe3fSmrg *) func_append rpath " $arg" ;; 5422549e21daSmrg esac 5423549e21daSmrg else 5424549e21daSmrg case "$xrpath " in 5425549e21daSmrg *" $arg "*) ;; 54261bedbe3fSmrg *) func_append xrpath " $arg" ;; 5427549e21daSmrg esac 5428549e21daSmrg fi 5429549e21daSmrg prev= 5430549e21daSmrg continue 5431549e21daSmrg ;; 5432549e21daSmrg shrext) 5433549e21daSmrg shrext_cmds="$arg" 5434549e21daSmrg prev= 5435549e21daSmrg continue 5436549e21daSmrg ;; 5437549e21daSmrg weak) 54381bedbe3fSmrg func_append weak_libs " $arg" 5439549e21daSmrg prev= 5440549e21daSmrg continue 5441549e21daSmrg ;; 5442549e21daSmrg xcclinker) 54431bedbe3fSmrg func_append linker_flags " $qarg" 54441bedbe3fSmrg func_append compiler_flags " $qarg" 5445549e21daSmrg prev= 5446549e21daSmrg func_append compile_command " $qarg" 5447549e21daSmrg func_append finalize_command " $qarg" 5448549e21daSmrg continue 5449549e21daSmrg ;; 5450549e21daSmrg xcompiler) 54511bedbe3fSmrg func_append compiler_flags " $qarg" 5452549e21daSmrg prev= 5453549e21daSmrg func_append compile_command " $qarg" 5454549e21daSmrg func_append finalize_command " $qarg" 5455549e21daSmrg continue 5456549e21daSmrg ;; 5457549e21daSmrg xlinker) 54581bedbe3fSmrg func_append linker_flags " $qarg" 54591bedbe3fSmrg func_append compiler_flags " $wl$qarg" 5460549e21daSmrg prev= 5461549e21daSmrg func_append compile_command " $wl$qarg" 5462549e21daSmrg func_append finalize_command " $wl$qarg" 5463549e21daSmrg continue 5464ba6a1819Smrg ;; 5465ba6a1819Smrg *) 5466549e21daSmrg eval "$prev=\"\$arg\"" 5467549e21daSmrg prev= 5468549e21daSmrg continue 5469ba6a1819Smrg ;; 5470ba6a1819Smrg esac 5471549e21daSmrg fi # test -n "$prev" 5472ba6a1819Smrg 5473549e21daSmrg prevarg="$arg" 5474ba6a1819Smrg 5475549e21daSmrg case $arg in 5476549e21daSmrg -all-static) 5477549e21daSmrg if test -n "$link_static_flag"; then 5478549e21daSmrg # See comment for -static flag below, for more details. 5479549e21daSmrg func_append compile_command " $link_static_flag" 5480549e21daSmrg func_append finalize_command " $link_static_flag" 5481ba6a1819Smrg fi 5482549e21daSmrg continue 5483549e21daSmrg ;; 5484ba6a1819Smrg 5485549e21daSmrg -allow-undefined) 5486549e21daSmrg # FIXME: remove this flag sometime in the future. 5487549e21daSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488549e21daSmrg ;; 5489ba6a1819Smrg 5490549e21daSmrg -avoid-version) 5491549e21daSmrg avoid_version=yes 5492549e21daSmrg continue 5493549e21daSmrg ;; 5494ba6a1819Smrg 5495549e21daSmrg -bindir) 5496549e21daSmrg prev=bindir 5497549e21daSmrg continue 5498549e21daSmrg ;; 5499ba6a1819Smrg 5500549e21daSmrg -dlopen) 5501549e21daSmrg prev=dlfiles 5502549e21daSmrg continue 5503549e21daSmrg ;; 5504ba6a1819Smrg 5505549e21daSmrg -dlpreopen) 5506549e21daSmrg prev=dlprefiles 5507549e21daSmrg continue 5508549e21daSmrg ;; 5509ba6a1819Smrg 5510549e21daSmrg -export-dynamic) 5511549e21daSmrg export_dynamic=yes 5512549e21daSmrg continue 5513549e21daSmrg ;; 5514ba6a1819Smrg 5515549e21daSmrg -export-symbols | -export-symbols-regex) 5516549e21daSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517549e21daSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518549e21daSmrg fi 5519549e21daSmrg if test "X$arg" = "X-export-symbols"; then 5520549e21daSmrg prev=expsyms 5521ba6a1819Smrg else 5522549e21daSmrg prev=expsyms_regex 5523ba6a1819Smrg fi 5524549e21daSmrg continue 5525549e21daSmrg ;; 5526ba6a1819Smrg 5527549e21daSmrg -framework) 5528549e21daSmrg prev=framework 5529549e21daSmrg continue 5530549e21daSmrg ;; 5531ba6a1819Smrg 5532549e21daSmrg -inst-prefix-dir) 5533549e21daSmrg prev=inst_prefix 5534549e21daSmrg continue 5535549e21daSmrg ;; 5536ba6a1819Smrg 5537549e21daSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538549e21daSmrg # so, if we see these flags be careful not to treat them like -L 5539549e21daSmrg -L[A-Z][A-Z]*:*) 5540549e21daSmrg case $with_gcc/$host in 5541549e21daSmrg no/*-*-irix* | /*-*-irix*) 5542549e21daSmrg func_append compile_command " $arg" 5543549e21daSmrg func_append finalize_command " $arg" 5544549e21daSmrg ;; 5545549e21daSmrg esac 5546549e21daSmrg continue 5547549e21daSmrg ;; 5548ba6a1819Smrg 5549549e21daSmrg -L*) 55501bedbe3fSmrg func_stripname "-L" '' "$arg" 55511bedbe3fSmrg if test -z "$func_stripname_result"; then 5552549e21daSmrg if test "$#" -gt 0; then 5553549e21daSmrg func_fatal_error "require no space between \`-L' and \`$1'" 5554ba6a1819Smrg else 5555549e21daSmrg func_fatal_error "need path for \`-L' option" 5556ba6a1819Smrg fi 5557549e21daSmrg fi 55581bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 55591bedbe3fSmrg dir=$func_resolve_sysroot_result 5560549e21daSmrg # We need an absolute path. 5561549e21daSmrg case $dir in 5562549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563549e21daSmrg *) 5564549e21daSmrg absdir=`cd "$dir" && pwd` 5565549e21daSmrg test -z "$absdir" && \ 5566549e21daSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567549e21daSmrg dir="$absdir" 5568549e21daSmrg ;; 5569ba6a1819Smrg esac 5570549e21daSmrg case "$deplibs " in 55711bedbe3fSmrg *" -L$dir "* | *" $arg "*) 55721bedbe3fSmrg # Will only happen for absolute or sysroot arguments 55731bedbe3fSmrg ;; 5574549e21daSmrg *) 55751bedbe3fSmrg # Preserve sysroot, but never include relative directories 55761bedbe3fSmrg case $dir in 55771bedbe3fSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 55781bedbe3fSmrg *) func_append deplibs " -L$dir" ;; 55791bedbe3fSmrg esac 55801bedbe3fSmrg func_append lib_search_path " $dir" 5581549e21daSmrg ;; 5582ba6a1819Smrg esac 5583ba6a1819Smrg case $host in 5584549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5585549e21daSmrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586549e21daSmrg case :$dllsearchpath: in 5587549e21daSmrg *":$dir:"*) ;; 5588549e21daSmrg ::) dllsearchpath=$dir;; 55891bedbe3fSmrg *) func_append dllsearchpath ":$dir";; 5590549e21daSmrg esac 5591549e21daSmrg case :$dllsearchpath: in 5592549e21daSmrg *":$testbindir:"*) ;; 5593549e21daSmrg ::) dllsearchpath=$testbindir;; 55941bedbe3fSmrg *) func_append dllsearchpath ":$testbindir";; 5595549e21daSmrg esac 5596549e21daSmrg ;; 5597ba6a1819Smrg esac 5598549e21daSmrg continue 5599549e21daSmrg ;; 5600ba6a1819Smrg 5601549e21daSmrg -l*) 5602549e21daSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603549e21daSmrg case $host in 5604549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605549e21daSmrg # These systems don't actually have a C or math library (as such) 5606549e21daSmrg continue 5607549e21daSmrg ;; 5608549e21daSmrg *-*-os2*) 5609549e21daSmrg # These systems don't actually have a C library (as such) 5610549e21daSmrg test "X$arg" = "X-lc" && continue 5611549e21daSmrg ;; 5612549e21daSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613549e21daSmrg # Do not include libc due to us having libc/libc_r. 5614549e21daSmrg test "X$arg" = "X-lc" && continue 5615549e21daSmrg ;; 5616549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 5617549e21daSmrg # Rhapsody C and math libraries are in the System framework 56181bedbe3fSmrg func_append deplibs " System.ltframework" 5619549e21daSmrg continue 5620549e21daSmrg ;; 5621549e21daSmrg *-*-sco3.2v5* | *-*-sco5v6*) 5622549e21daSmrg # Causes problems with __ctype 5623549e21daSmrg test "X$arg" = "X-lc" && continue 5624549e21daSmrg ;; 5625549e21daSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626549e21daSmrg # Compiler inserts libc in the correct place for threads to work 5627549e21daSmrg test "X$arg" = "X-lc" && continue 5628549e21daSmrg ;; 5629549e21daSmrg esac 5630549e21daSmrg elif test "X$arg" = "X-lc_r"; then 5631549e21daSmrg case $host in 5632549e21daSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633549e21daSmrg # Do not include libc_r directly, use -pthread flag. 5634549e21daSmrg continue 5635549e21daSmrg ;; 5636549e21daSmrg esac 5637549e21daSmrg fi 56381bedbe3fSmrg func_append deplibs " $arg" 5639549e21daSmrg continue 5640549e21daSmrg ;; 5641ba6a1819Smrg 5642549e21daSmrg -module) 5643549e21daSmrg module=yes 5644549e21daSmrg continue 5645549e21daSmrg ;; 5646ba6a1819Smrg 5647549e21daSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648549e21daSmrg # classes, name mangling, and exception handling. 5649549e21daSmrg # Darwin uses the -arch flag to determine output architecture. 56501bedbe3fSmrg -model|-arch|-isysroot|--sysroot) 56511bedbe3fSmrg func_append compiler_flags " $arg" 5652549e21daSmrg func_append compile_command " $arg" 5653549e21daSmrg func_append finalize_command " $arg" 5654549e21daSmrg prev=xcompiler 5655549e21daSmrg continue 5656549e21daSmrg ;; 5657ba6a1819Smrg 56581bedbe3fSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 56591bedbe3fSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 56601bedbe3fSmrg func_append compiler_flags " $arg" 5661549e21daSmrg func_append compile_command " $arg" 5662549e21daSmrg func_append finalize_command " $arg" 5663549e21daSmrg case "$new_inherited_linker_flags " in 5664549e21daSmrg *" $arg "*) ;; 56651bedbe3fSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666549e21daSmrg esac 5667549e21daSmrg continue 5668549e21daSmrg ;; 5669ba6a1819Smrg 5670549e21daSmrg -multi_module) 5671549e21daSmrg single_module="${wl}-multi_module" 5672549e21daSmrg continue 5673549e21daSmrg ;; 5674ba6a1819Smrg 5675549e21daSmrg -no-fast-install) 5676549e21daSmrg fast_install=no 5677549e21daSmrg continue 5678549e21daSmrg ;; 5679ba6a1819Smrg 5680549e21daSmrg -no-install) 5681549e21daSmrg case $host in 5682549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683549e21daSmrg # The PATH hackery in wrapper scripts is required on Windows 5684549e21daSmrg # and Darwin in order for the loader to find any dlls it needs. 5685549e21daSmrg func_warning "\`-no-install' is ignored for $host" 5686549e21daSmrg func_warning "assuming \`-no-fast-install' instead" 5687549e21daSmrg fast_install=no 5688549e21daSmrg ;; 5689549e21daSmrg *) no_install=yes ;; 5690549e21daSmrg esac 5691549e21daSmrg continue 5692549e21daSmrg ;; 5693ba6a1819Smrg 5694549e21daSmrg -no-undefined) 5695549e21daSmrg allow_undefined=no 5696549e21daSmrg continue 5697549e21daSmrg ;; 5698ba6a1819Smrg 5699549e21daSmrg -objectlist) 5700549e21daSmrg prev=objectlist 5701549e21daSmrg continue 5702549e21daSmrg ;; 5703ba6a1819Smrg 5704549e21daSmrg -o) prev=output ;; 5705ba6a1819Smrg 5706549e21daSmrg -precious-files-regex) 5707549e21daSmrg prev=precious_regex 5708549e21daSmrg continue 5709549e21daSmrg ;; 5710ba6a1819Smrg 5711549e21daSmrg -release) 5712549e21daSmrg prev=release 5713549e21daSmrg continue 5714549e21daSmrg ;; 5715ba6a1819Smrg 5716549e21daSmrg -rpath) 5717549e21daSmrg prev=rpath 5718549e21daSmrg continue 5719549e21daSmrg ;; 5720ba6a1819Smrg 5721549e21daSmrg -R) 5722549e21daSmrg prev=xrpath 5723549e21daSmrg continue 5724549e21daSmrg ;; 5725ba6a1819Smrg 5726549e21daSmrg -R*) 5727549e21daSmrg func_stripname '-R' '' "$arg" 5728549e21daSmrg dir=$func_stripname_result 5729549e21daSmrg # We need an absolute path. 5730549e21daSmrg case $dir in 5731549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 57321bedbe3fSmrg =*) 57331bedbe3fSmrg func_stripname '=' '' "$dir" 57341bedbe3fSmrg dir=$lt_sysroot$func_stripname_result 57351bedbe3fSmrg ;; 5736549e21daSmrg *) 5737549e21daSmrg func_fatal_error "only absolute run-paths are allowed" 5738549e21daSmrg ;; 5739549e21daSmrg esac 5740549e21daSmrg case "$xrpath " in 5741549e21daSmrg *" $dir "*) ;; 57421bedbe3fSmrg *) func_append xrpath " $dir" ;; 5743549e21daSmrg esac 5744549e21daSmrg continue 5745549e21daSmrg ;; 5746ba6a1819Smrg 5747549e21daSmrg -shared) 5748549e21daSmrg # The effects of -shared are defined in a previous loop. 5749549e21daSmrg continue 5750549e21daSmrg ;; 5751ba6a1819Smrg 5752549e21daSmrg -shrext) 5753549e21daSmrg prev=shrext 5754549e21daSmrg continue 5755549e21daSmrg ;; 5756ba6a1819Smrg 5757549e21daSmrg -static | -static-libtool-libs) 5758549e21daSmrg # The effects of -static are defined in a previous loop. 5759549e21daSmrg # We used to do the same as -all-static on platforms that 5760549e21daSmrg # didn't have a PIC flag, but the assumption that the effects 5761549e21daSmrg # would be equivalent was wrong. It would break on at least 5762549e21daSmrg # Digital Unix and AIX. 5763549e21daSmrg continue 5764549e21daSmrg ;; 5765ba6a1819Smrg 5766549e21daSmrg -thread-safe) 5767549e21daSmrg thread_safe=yes 5768549e21daSmrg continue 5769549e21daSmrg ;; 5770ba6a1819Smrg 5771549e21daSmrg -version-info) 5772549e21daSmrg prev=vinfo 5773549e21daSmrg continue 5774549e21daSmrg ;; 5775ba6a1819Smrg 5776549e21daSmrg -version-number) 5777549e21daSmrg prev=vinfo 5778549e21daSmrg vinfo_number=yes 5779549e21daSmrg continue 5780549e21daSmrg ;; 5781ba6a1819Smrg 5782549e21daSmrg -weak) 5783549e21daSmrg prev=weak 5784549e21daSmrg continue 5785549e21daSmrg ;; 5786ba6a1819Smrg 5787549e21daSmrg -Wc,*) 5788549e21daSmrg func_stripname '-Wc,' '' "$arg" 5789549e21daSmrg args=$func_stripname_result 5790549e21daSmrg arg= 5791549e21daSmrg save_ifs="$IFS"; IFS=',' 5792549e21daSmrg for flag in $args; do 5793549e21daSmrg IFS="$save_ifs" 5794549e21daSmrg func_quote_for_eval "$flag" 57951bedbe3fSmrg func_append arg " $func_quote_for_eval_result" 57961bedbe3fSmrg func_append compiler_flags " $func_quote_for_eval_result" 5797549e21daSmrg done 5798549e21daSmrg IFS="$save_ifs" 5799549e21daSmrg func_stripname ' ' '' "$arg" 5800549e21daSmrg arg=$func_stripname_result 5801549e21daSmrg ;; 5802ba6a1819Smrg 5803549e21daSmrg -Wl,*) 5804549e21daSmrg func_stripname '-Wl,' '' "$arg" 5805549e21daSmrg args=$func_stripname_result 5806549e21daSmrg arg= 5807549e21daSmrg save_ifs="$IFS"; IFS=',' 5808549e21daSmrg for flag in $args; do 5809549e21daSmrg IFS="$save_ifs" 5810549e21daSmrg func_quote_for_eval "$flag" 58111bedbe3fSmrg func_append arg " $wl$func_quote_for_eval_result" 58121bedbe3fSmrg func_append compiler_flags " $wl$func_quote_for_eval_result" 58131bedbe3fSmrg func_append linker_flags " $func_quote_for_eval_result" 5814549e21daSmrg done 5815549e21daSmrg IFS="$save_ifs" 5816549e21daSmrg func_stripname ' ' '' "$arg" 5817549e21daSmrg arg=$func_stripname_result 5818549e21daSmrg ;; 5819ba6a1819Smrg 5820549e21daSmrg -Xcompiler) 5821549e21daSmrg prev=xcompiler 5822549e21daSmrg continue 5823549e21daSmrg ;; 5824ba6a1819Smrg 5825549e21daSmrg -Xlinker) 5826549e21daSmrg prev=xlinker 5827549e21daSmrg continue 5828549e21daSmrg ;; 5829ba6a1819Smrg 5830549e21daSmrg -XCClinker) 5831549e21daSmrg prev=xcclinker 5832549e21daSmrg continue 5833549e21daSmrg ;; 5834ba6a1819Smrg 5835549e21daSmrg # -msg_* for osf cc 5836549e21daSmrg -msg_*) 5837549e21daSmrg func_quote_for_eval "$arg" 5838549e21daSmrg arg="$func_quote_for_eval_result" 5839549e21daSmrg ;; 5840ba6a1819Smrg 5841549e21daSmrg # Flags to be passed through unchanged, with rationale: 5842549e21daSmrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5843549e21daSmrg # -r[0-9][0-9]* specify processor for the SGI compiler 5844549e21daSmrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5845549e21daSmrg # +DA*, +DD* enable 64-bit mode for the HP compiler 5846549e21daSmrg # -q* compiler args for the IBM compiler 5847549e21daSmrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5848549e21daSmrg # -F/path path to uninstalled frameworks, gcc on darwin 5849549e21daSmrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5850549e21daSmrg # @file GCC response files 5851549e21daSmrg # -tp=* Portland pgcc target processor selection 58521bedbe3fSmrg # --sysroot=* for sysroot support 58531bedbe3fSmrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854549e21daSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 58551bedbe3fSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 58561bedbe3fSmrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857549e21daSmrg func_quote_for_eval "$arg" 5858549e21daSmrg arg="$func_quote_for_eval_result" 5859549e21daSmrg func_append compile_command " $arg" 5860549e21daSmrg func_append finalize_command " $arg" 58611bedbe3fSmrg func_append compiler_flags " $arg" 5862549e21daSmrg continue 5863549e21daSmrg ;; 5864ba6a1819Smrg 5865549e21daSmrg # Some other compiler flag. 5866549e21daSmrg -* | +*) 5867549e21daSmrg func_quote_for_eval "$arg" 5868549e21daSmrg arg="$func_quote_for_eval_result" 5869549e21daSmrg ;; 5870ba6a1819Smrg 5871549e21daSmrg *.$objext) 5872549e21daSmrg # A standard object. 58731bedbe3fSmrg func_append objs " $arg" 5874549e21daSmrg ;; 5875ba6a1819Smrg 5876549e21daSmrg *.lo) 5877549e21daSmrg # A libtool-controlled object. 5878ba6a1819Smrg 5879549e21daSmrg # Check to see that this really is a libtool object. 5880549e21daSmrg if func_lalib_unsafe_p "$arg"; then 5881549e21daSmrg pic_object= 5882549e21daSmrg non_pic_object= 5883ba6a1819Smrg 5884549e21daSmrg # Read the .lo file 5885549e21daSmrg func_source "$arg" 5886ba6a1819Smrg 5887549e21daSmrg if test -z "$pic_object" || 5888549e21daSmrg test -z "$non_pic_object" || 5889549e21daSmrg test "$pic_object" = none && 5890549e21daSmrg test "$non_pic_object" = none; then 5891549e21daSmrg func_fatal_error "cannot find name of object for \`$arg'" 5892549e21daSmrg fi 5893ba6a1819Smrg 5894549e21daSmrg # Extract subdirectory from the argument. 5895549e21daSmrg func_dirname "$arg" "/" "" 5896549e21daSmrg xdir="$func_dirname_result" 5897ba6a1819Smrg 5898549e21daSmrg if test "$pic_object" != none; then 5899549e21daSmrg # Prepend the subdirectory the object is found in. 5900549e21daSmrg pic_object="$xdir$pic_object" 5901ba6a1819Smrg 5902549e21daSmrg if test "$prev" = dlfiles; then 5903549e21daSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 59041bedbe3fSmrg func_append dlfiles " $pic_object" 5905549e21daSmrg prev= 5906549e21daSmrg continue 5907549e21daSmrg else 5908549e21daSmrg # If libtool objects are unsupported, then we need to preload. 5909549e21daSmrg prev=dlprefiles 5910549e21daSmrg fi 5911549e21daSmrg fi 5912ba6a1819Smrg 5913549e21daSmrg # CHECK ME: I think I busted this. -Ossama 5914549e21daSmrg if test "$prev" = dlprefiles; then 5915549e21daSmrg # Preload the old-style object. 59161bedbe3fSmrg func_append dlprefiles " $pic_object" 5917549e21daSmrg prev= 5918549e21daSmrg fi 5919ba6a1819Smrg 5920549e21daSmrg # A PIC object. 5921549e21daSmrg func_append libobjs " $pic_object" 5922549e21daSmrg arg="$pic_object" 5923549e21daSmrg fi 5924ba6a1819Smrg 5925549e21daSmrg # Non-PIC object. 5926549e21daSmrg if test "$non_pic_object" != none; then 5927549e21daSmrg # Prepend the subdirectory the object is found in. 5928549e21daSmrg non_pic_object="$xdir$non_pic_object" 5929ba6a1819Smrg 5930549e21daSmrg # A standard non-PIC object 5931549e21daSmrg func_append non_pic_objects " $non_pic_object" 5932549e21daSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 5933549e21daSmrg arg="$non_pic_object" 5934549e21daSmrg fi 5935549e21daSmrg else 5936549e21daSmrg # If the PIC object exists, use it instead. 5937549e21daSmrg # $xdir was prepended to $pic_object above. 5938549e21daSmrg non_pic_object="$pic_object" 5939549e21daSmrg func_append non_pic_objects " $non_pic_object" 5940549e21daSmrg fi 5941549e21daSmrg else 5942549e21daSmrg # Only an error if not doing a dry-run. 5943549e21daSmrg if $opt_dry_run; then 5944549e21daSmrg # Extract subdirectory from the argument. 5945549e21daSmrg func_dirname "$arg" "/" "" 5946549e21daSmrg xdir="$func_dirname_result" 5947549e21daSmrg 5948549e21daSmrg func_lo2o "$arg" 5949549e21daSmrg pic_object=$xdir$objdir/$func_lo2o_result 5950549e21daSmrg non_pic_object=$xdir$func_lo2o_result 5951549e21daSmrg func_append libobjs " $pic_object" 5952549e21daSmrg func_append non_pic_objects " $non_pic_object" 5953549e21daSmrg else 5954549e21daSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5955549e21daSmrg fi 5956549e21daSmrg fi 5957549e21daSmrg ;; 5958ba6a1819Smrg 5959549e21daSmrg *.$libext) 5960549e21daSmrg # An archive. 59611bedbe3fSmrg func_append deplibs " $arg" 59621bedbe3fSmrg func_append old_deplibs " $arg" 5963549e21daSmrg continue 5964549e21daSmrg ;; 5965ba6a1819Smrg 5966549e21daSmrg *.la) 5967549e21daSmrg # A libtool-controlled library. 5968ba6a1819Smrg 59691bedbe3fSmrg func_resolve_sysroot "$arg" 5970549e21daSmrg if test "$prev" = dlfiles; then 5971549e21daSmrg # This library was specified with -dlopen. 59721bedbe3fSmrg func_append dlfiles " $func_resolve_sysroot_result" 5973549e21daSmrg prev= 5974549e21daSmrg elif test "$prev" = dlprefiles; then 5975549e21daSmrg # The library was specified with -dlpreopen. 59761bedbe3fSmrg func_append dlprefiles " $func_resolve_sysroot_result" 5977549e21daSmrg prev= 5978549e21daSmrg else 59791bedbe3fSmrg func_append deplibs " $func_resolve_sysroot_result" 5980549e21daSmrg fi 5981549e21daSmrg continue 5982549e21daSmrg ;; 5983ba6a1819Smrg 5984549e21daSmrg # Some other compiler argument. 5985549e21daSmrg *) 5986549e21daSmrg # Unknown arguments in both finalize_command and compile_command need 5987549e21daSmrg # to be aesthetically quoted because they are evaled later. 5988549e21daSmrg func_quote_for_eval "$arg" 5989549e21daSmrg arg="$func_quote_for_eval_result" 5990549e21daSmrg ;; 5991549e21daSmrg esac # arg 5992ba6a1819Smrg 5993549e21daSmrg # Now actually substitute the argument into the commands. 5994549e21daSmrg if test -n "$arg"; then 5995549e21daSmrg func_append compile_command " $arg" 5996549e21daSmrg func_append finalize_command " $arg" 5997549e21daSmrg fi 5998549e21daSmrg done # argument parsing loop 5999ba6a1819Smrg 6000549e21daSmrg test -n "$prev" && \ 6001549e21daSmrg func_fatal_help "the \`$prevarg' option requires an argument" 6002ba6a1819Smrg 6003549e21daSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004549e21daSmrg eval arg=\"$export_dynamic_flag_spec\" 6005549e21daSmrg func_append compile_command " $arg" 6006549e21daSmrg func_append finalize_command " $arg" 6007549e21daSmrg fi 6008ba6a1819Smrg 6009549e21daSmrg oldlibs= 6010549e21daSmrg # calculate the name of the file, without its directory 6011549e21daSmrg func_basename "$output" 6012549e21daSmrg outputname="$func_basename_result" 6013549e21daSmrg libobjs_save="$libobjs" 6014549e21daSmrg 6015549e21daSmrg if test -n "$shlibpath_var"; then 6016549e21daSmrg # get the directories listed in $shlibpath_var 6017549e21daSmrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018ba6a1819Smrg else 6019549e21daSmrg shlib_search_path= 6020ba6a1819Smrg fi 6021549e21daSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022549e21daSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023ba6a1819Smrg 6024549e21daSmrg func_dirname "$output" "/" "" 6025549e21daSmrg output_objdir="$func_dirname_result$objdir" 60261bedbe3fSmrg func_to_tool_file "$output_objdir/" 60271bedbe3fSmrg tool_output_objdir=$func_to_tool_file_result 6028549e21daSmrg # Create the object directory. 6029549e21daSmrg func_mkdir_p "$output_objdir" 6030549e21daSmrg 6031549e21daSmrg # Determine the type of output 6032549e21daSmrg case $output in 6033549e21daSmrg "") 6034549e21daSmrg func_fatal_help "you must specify an output file" 6035549e21daSmrg ;; 6036549e21daSmrg *.$libext) linkmode=oldlib ;; 6037549e21daSmrg *.lo | *.$objext) linkmode=obj ;; 6038549e21daSmrg *.la) linkmode=lib ;; 6039549e21daSmrg *) linkmode=prog ;; # Anything else should be a program. 6040549e21daSmrg esac 6041549e21daSmrg 6042549e21daSmrg specialdeplibs= 6043549e21daSmrg 6044549e21daSmrg libs= 6045549e21daSmrg # Find all interdependent deplibs by searching for libraries 6046549e21daSmrg # that are linked more than once (e.g. -la -lb -la) 6047549e21daSmrg for deplib in $deplibs; do 60481bedbe3fSmrg if $opt_preserve_dup_deps ; then 6049549e21daSmrg case "$libs " in 60501bedbe3fSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051549e21daSmrg esac 6052549e21daSmrg fi 60531bedbe3fSmrg func_append libs " $deplib" 6054549e21daSmrg done 6055549e21daSmrg 6056549e21daSmrg if test "$linkmode" = lib; then 6057549e21daSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058549e21daSmrg 6059549e21daSmrg # Compute libraries that are listed more than once in $predeps 6060549e21daSmrg # $postdeps and mark them as special (i.e., whose duplicates are 6061549e21daSmrg # not to be eliminated). 6062549e21daSmrg pre_post_deps= 6063549e21daSmrg if $opt_duplicate_compiler_generated_deps; then 6064549e21daSmrg for pre_post_dep in $predeps $postdeps; do 6065549e21daSmrg case "$pre_post_deps " in 60661bedbe3fSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067549e21daSmrg esac 60681bedbe3fSmrg func_append pre_post_deps " $pre_post_dep" 6069549e21daSmrg done 6070549e21daSmrg fi 6071549e21daSmrg pre_post_deps= 6072549e21daSmrg fi 6073549e21daSmrg 6074549e21daSmrg deplibs= 6075549e21daSmrg newdependency_libs= 6076549e21daSmrg newlib_search_path= 6077549e21daSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078549e21daSmrg notinst_deplibs= # not-installed libtool libraries 6079549e21daSmrg notinst_path= # paths that contain not-installed libtool libraries 6080549e21daSmrg 6081549e21daSmrg case $linkmode in 6082549e21daSmrg lib) 6083549e21daSmrg passes="conv dlpreopen link" 6084549e21daSmrg for file in $dlfiles $dlprefiles; do 6085549e21daSmrg case $file in 6086549e21daSmrg *.la) ;; 6087549e21daSmrg *) 6088549e21daSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089549e21daSmrg ;; 6090549e21daSmrg esac 6091549e21daSmrg done 6092549e21daSmrg ;; 6093549e21daSmrg prog) 6094549e21daSmrg compile_deplibs= 6095549e21daSmrg finalize_deplibs= 6096549e21daSmrg alldeplibs=no 6097549e21daSmrg newdlfiles= 6098549e21daSmrg newdlprefiles= 6099549e21daSmrg passes="conv scan dlopen dlpreopen link" 6100549e21daSmrg ;; 6101549e21daSmrg *) passes="conv" 6102549e21daSmrg ;; 6103549e21daSmrg esac 6104549e21daSmrg 6105549e21daSmrg for pass in $passes; do 6106549e21daSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107549e21daSmrg # so that -L comes before libs that need it for instance... 6108549e21daSmrg if test "$linkmode,$pass" = "lib,link"; then 6109549e21daSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110549e21daSmrg ## order, and fix it there properly 6111549e21daSmrg tmp_deplibs= 6112549e21daSmrg for deplib in $deplibs; do 6113549e21daSmrg tmp_deplibs="$deplib $tmp_deplibs" 6114549e21daSmrg done 6115549e21daSmrg deplibs="$tmp_deplibs" 6116549e21daSmrg fi 6117549e21daSmrg 6118549e21daSmrg if test "$linkmode,$pass" = "lib,link" || 6119549e21daSmrg test "$linkmode,$pass" = "prog,scan"; then 6120549e21daSmrg libs="$deplibs" 6121549e21daSmrg deplibs= 6122549e21daSmrg fi 6123549e21daSmrg if test "$linkmode" = prog; then 6124549e21daSmrg case $pass in 6125549e21daSmrg dlopen) libs="$dlfiles" ;; 6126549e21daSmrg dlpreopen) libs="$dlprefiles" ;; 6127549e21daSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128549e21daSmrg esac 6129549e21daSmrg fi 6130549e21daSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131549e21daSmrg # Collect and forward deplibs of preopened libtool libs 6132549e21daSmrg for lib in $dlprefiles; do 6133549e21daSmrg # Ignore non-libtool-libs 6134549e21daSmrg dependency_libs= 61351bedbe3fSmrg func_resolve_sysroot "$lib" 6136549e21daSmrg case $lib in 61371bedbe3fSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 6138549e21daSmrg esac 6139549e21daSmrg 6140549e21daSmrg # Collect preopened libtool deplibs, except any this library 6141549e21daSmrg # has declared as weak libs 6142549e21daSmrg for deplib in $dependency_libs; do 6143549e21daSmrg func_basename "$deplib" 6144549e21daSmrg deplib_base=$func_basename_result 6145549e21daSmrg case " $weak_libs " in 6146549e21daSmrg *" $deplib_base "*) ;; 61471bedbe3fSmrg *) func_append deplibs " $deplib" ;; 6148549e21daSmrg esac 6149549e21daSmrg done 6150549e21daSmrg done 6151549e21daSmrg libs="$dlprefiles" 6152549e21daSmrg fi 6153549e21daSmrg if test "$pass" = dlopen; then 6154549e21daSmrg # Collect dlpreopened libraries 6155549e21daSmrg save_deplibs="$deplibs" 6156549e21daSmrg deplibs= 6157549e21daSmrg fi 6158549e21daSmrg 6159549e21daSmrg for deplib in $libs; do 6160549e21daSmrg lib= 6161549e21daSmrg found=no 6162549e21daSmrg case $deplib in 61631bedbe3fSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 61641bedbe3fSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 6166549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 6167549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 6168549e21daSmrg else 61691bedbe3fSmrg func_append compiler_flags " $deplib" 6170549e21daSmrg if test "$linkmode" = lib ; then 6171549e21daSmrg case "$new_inherited_linker_flags " in 6172549e21daSmrg *" $deplib "*) ;; 61731bedbe3fSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6174549e21daSmrg esac 6175549e21daSmrg fi 6176549e21daSmrg fi 6177549e21daSmrg continue 6178549e21daSmrg ;; 6179549e21daSmrg -l*) 6180549e21daSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 6181549e21daSmrg func_warning "\`-l' is ignored for archives/objects" 6182549e21daSmrg continue 6183549e21daSmrg fi 6184549e21daSmrg func_stripname '-l' '' "$deplib" 6185549e21daSmrg name=$func_stripname_result 6186549e21daSmrg if test "$linkmode" = lib; then 6187549e21daSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188549e21daSmrg else 6189549e21daSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190549e21daSmrg fi 6191549e21daSmrg for searchdir in $searchdirs; do 6192549e21daSmrg for search_ext in .la $std_shrext .so .a; do 6193549e21daSmrg # Search the libtool library 6194549e21daSmrg lib="$searchdir/lib${name}${search_ext}" 6195549e21daSmrg if test -f "$lib"; then 6196549e21daSmrg if test "$search_ext" = ".la"; then 6197549e21daSmrg found=yes 6198549e21daSmrg else 6199549e21daSmrg found=no 6200549e21daSmrg fi 6201549e21daSmrg break 2 6202549e21daSmrg fi 6203549e21daSmrg done 6204549e21daSmrg done 6205549e21daSmrg if test "$found" != yes; then 6206549e21daSmrg # deplib doesn't seem to be a libtool library 6207549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 6208549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 6209549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 6210549e21daSmrg else 6211549e21daSmrg deplibs="$deplib $deplibs" 6212549e21daSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213549e21daSmrg fi 6214549e21daSmrg continue 6215549e21daSmrg else # deplib is a libtool library 6216549e21daSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217549e21daSmrg # We need to do some special things here, and not later. 6218549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219549e21daSmrg case " $predeps $postdeps " in 6220549e21daSmrg *" $deplib "*) 6221549e21daSmrg if func_lalib_p "$lib"; then 6222549e21daSmrg library_names= 6223549e21daSmrg old_library= 6224549e21daSmrg func_source "$lib" 6225549e21daSmrg for l in $old_library $library_names; do 6226549e21daSmrg ll="$l" 6227549e21daSmrg done 6228549e21daSmrg if test "X$ll" = "X$old_library" ; then # only static version available 6229549e21daSmrg found=no 6230549e21daSmrg func_dirname "$lib" "" "." 6231549e21daSmrg ladir="$func_dirname_result" 6232549e21daSmrg lib=$ladir/$old_library 6233549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 6234549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 6235549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 6236549e21daSmrg else 6237549e21daSmrg deplibs="$deplib $deplibs" 6238549e21daSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239549e21daSmrg fi 6240549e21daSmrg continue 6241549e21daSmrg fi 6242549e21daSmrg fi 6243549e21daSmrg ;; 6244549e21daSmrg *) ;; 6245549e21daSmrg esac 6246549e21daSmrg fi 6247549e21daSmrg fi 6248549e21daSmrg ;; # -l 6249549e21daSmrg *.ltframework) 6250549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 6251549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 6252549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 6253549e21daSmrg else 6254549e21daSmrg deplibs="$deplib $deplibs" 6255549e21daSmrg if test "$linkmode" = lib ; then 6256549e21daSmrg case "$new_inherited_linker_flags " in 6257549e21daSmrg *" $deplib "*) ;; 62581bedbe3fSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6259549e21daSmrg esac 6260549e21daSmrg fi 6261549e21daSmrg fi 6262549e21daSmrg continue 6263549e21daSmrg ;; 6264549e21daSmrg -L*) 6265549e21daSmrg case $linkmode in 6266549e21daSmrg lib) 6267549e21daSmrg deplibs="$deplib $deplibs" 6268549e21daSmrg test "$pass" = conv && continue 6269549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 6270549e21daSmrg func_stripname '-L' '' "$deplib" 62711bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 62721bedbe3fSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6273549e21daSmrg ;; 6274549e21daSmrg prog) 6275549e21daSmrg if test "$pass" = conv; then 6276549e21daSmrg deplibs="$deplib $deplibs" 6277549e21daSmrg continue 6278549e21daSmrg fi 6279549e21daSmrg if test "$pass" = scan; then 6280549e21daSmrg deplibs="$deplib $deplibs" 6281549e21daSmrg else 6282549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 6283549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 6284549e21daSmrg fi 6285549e21daSmrg func_stripname '-L' '' "$deplib" 62861bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 62871bedbe3fSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6288549e21daSmrg ;; 6289549e21daSmrg *) 6290549e21daSmrg func_warning "\`-L' is ignored for archives/objects" 6291549e21daSmrg ;; 6292549e21daSmrg esac # linkmode 6293549e21daSmrg continue 6294549e21daSmrg ;; # -L 6295549e21daSmrg -R*) 6296549e21daSmrg if test "$pass" = link; then 6297549e21daSmrg func_stripname '-R' '' "$deplib" 62981bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 62991bedbe3fSmrg dir=$func_resolve_sysroot_result 6300549e21daSmrg # Make sure the xrpath contains only unique directories. 6301549e21daSmrg case "$xrpath " in 6302549e21daSmrg *" $dir "*) ;; 63031bedbe3fSmrg *) func_append xrpath " $dir" ;; 6304549e21daSmrg esac 6305549e21daSmrg fi 6306549e21daSmrg deplibs="$deplib $deplibs" 6307549e21daSmrg continue 6308549e21daSmrg ;; 63091bedbe3fSmrg *.la) 63101bedbe3fSmrg func_resolve_sysroot "$deplib" 63111bedbe3fSmrg lib=$func_resolve_sysroot_result 63121bedbe3fSmrg ;; 6313549e21daSmrg *.$libext) 6314549e21daSmrg if test "$pass" = conv; then 6315549e21daSmrg deplibs="$deplib $deplibs" 6316549e21daSmrg continue 6317549e21daSmrg fi 6318549e21daSmrg case $linkmode in 6319549e21daSmrg lib) 6320549e21daSmrg # Linking convenience modules into shared libraries is allowed, 6321549e21daSmrg # but linking other static libraries is non-portable. 6322549e21daSmrg case " $dlpreconveniencelibs " in 6323549e21daSmrg *" $deplib "*) ;; 6324549e21daSmrg *) 6325549e21daSmrg valid_a_lib=no 6326549e21daSmrg case $deplibs_check_method in 6327549e21daSmrg match_pattern*) 6328549e21daSmrg set dummy $deplibs_check_method; shift 6329549e21daSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6330549e21daSmrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331549e21daSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 6332549e21daSmrg valid_a_lib=yes 6333549e21daSmrg fi 6334549e21daSmrg ;; 6335549e21daSmrg pass_all) 6336549e21daSmrg valid_a_lib=yes 6337549e21daSmrg ;; 6338549e21daSmrg esac 6339549e21daSmrg if test "$valid_a_lib" != yes; then 6340549e21daSmrg echo 6341549e21daSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6342549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 6343549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 6344549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 6345549e21daSmrg echo "*** because the file extensions .$libext of this argument makes me believe" 6346549e21daSmrg echo "*** that it is just a static archive that I should not use here." 6347549e21daSmrg else 6348549e21daSmrg echo 6349549e21daSmrg $ECHO "*** Warning: Linking the shared library $output against the" 6350549e21daSmrg $ECHO "*** static library $deplib is not portable!" 6351549e21daSmrg deplibs="$deplib $deplibs" 6352549e21daSmrg fi 6353549e21daSmrg ;; 6354549e21daSmrg esac 6355549e21daSmrg continue 6356549e21daSmrg ;; 6357549e21daSmrg prog) 6358549e21daSmrg if test "$pass" != link; then 6359549e21daSmrg deplibs="$deplib $deplibs" 6360549e21daSmrg else 6361549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 6362549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 6363549e21daSmrg fi 6364549e21daSmrg continue 6365549e21daSmrg ;; 6366549e21daSmrg esac # linkmode 6367549e21daSmrg ;; # *.$libext 6368549e21daSmrg *.lo | *.$objext) 6369549e21daSmrg if test "$pass" = conv; then 6370549e21daSmrg deplibs="$deplib $deplibs" 6371549e21daSmrg elif test "$linkmode" = prog; then 6372549e21daSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373549e21daSmrg # If there is no dlopen support or we're linking statically, 6374549e21daSmrg # we need to preload. 63751bedbe3fSmrg func_append newdlprefiles " $deplib" 6376549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 6377549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 6378549e21daSmrg else 63791bedbe3fSmrg func_append newdlfiles " $deplib" 6380549e21daSmrg fi 6381549e21daSmrg fi 6382549e21daSmrg continue 6383549e21daSmrg ;; 6384549e21daSmrg %DEPLIBS%) 6385549e21daSmrg alldeplibs=yes 6386549e21daSmrg continue 6387549e21daSmrg ;; 6388549e21daSmrg esac # case $deplib 6389549e21daSmrg 6390549e21daSmrg if test "$found" = yes || test -f "$lib"; then : 6391549e21daSmrg else 6392549e21daSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393549e21daSmrg fi 6394549e21daSmrg 6395549e21daSmrg # Check to see that this really is a libtool archive. 6396549e21daSmrg func_lalib_unsafe_p "$lib" \ 6397549e21daSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6398549e21daSmrg 6399549e21daSmrg func_dirname "$lib" "" "." 6400549e21daSmrg ladir="$func_dirname_result" 6401549e21daSmrg 6402549e21daSmrg dlname= 6403549e21daSmrg dlopen= 6404549e21daSmrg dlpreopen= 6405549e21daSmrg libdir= 6406549e21daSmrg library_names= 6407549e21daSmrg old_library= 6408549e21daSmrg inherited_linker_flags= 6409549e21daSmrg # If the library was installed with an old release of libtool, 6410549e21daSmrg # it will not redefine variables installed, or shouldnotlink 6411549e21daSmrg installed=yes 6412549e21daSmrg shouldnotlink=no 6413549e21daSmrg avoidtemprpath= 6414549e21daSmrg 6415549e21daSmrg 6416549e21daSmrg # Read the .la file 6417549e21daSmrg func_source "$lib" 6418549e21daSmrg 6419549e21daSmrg # Convert "-framework foo" to "foo.ltframework" 6420549e21daSmrg if test -n "$inherited_linker_flags"; then 6421549e21daSmrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422549e21daSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423549e21daSmrg case " $new_inherited_linker_flags " in 6424549e21daSmrg *" $tmp_inherited_linker_flag "*) ;; 64251bedbe3fSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426549e21daSmrg esac 6427549e21daSmrg done 6428549e21daSmrg fi 6429549e21daSmrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430549e21daSmrg if test "$linkmode,$pass" = "lib,link" || 6431549e21daSmrg test "$linkmode,$pass" = "prog,scan" || 6432549e21daSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 64331bedbe3fSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 64341bedbe3fSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435549e21daSmrg fi 6436549e21daSmrg 6437549e21daSmrg if test "$pass" = conv; then 6438549e21daSmrg # Only check for convenience libraries 6439549e21daSmrg deplibs="$lib $deplibs" 6440549e21daSmrg if test -z "$libdir"; then 6441549e21daSmrg if test -z "$old_library"; then 6442549e21daSmrg func_fatal_error "cannot find name of link library for \`$lib'" 6443549e21daSmrg fi 6444549e21daSmrg # It is a libtool convenience library, so add in its objects. 64451bedbe3fSmrg func_append convenience " $ladir/$objdir/$old_library" 64461bedbe3fSmrg func_append old_convenience " $ladir/$objdir/$old_library" 6447549e21daSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448549e21daSmrg func_fatal_error "\`$lib' is not a convenience library" 6449549e21daSmrg fi 6450549e21daSmrg tmp_libs= 6451549e21daSmrg for deplib in $dependency_libs; do 6452549e21daSmrg deplibs="$deplib $deplibs" 64531bedbe3fSmrg if $opt_preserve_dup_deps ; then 6454549e21daSmrg case "$tmp_libs " in 64551bedbe3fSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456549e21daSmrg esac 6457549e21daSmrg fi 64581bedbe3fSmrg func_append tmp_libs " $deplib" 6459549e21daSmrg done 6460549e21daSmrg continue 6461549e21daSmrg fi # $pass = conv 6462549e21daSmrg 6463549e21daSmrg 6464549e21daSmrg # Get the name of the library we link against. 6465549e21daSmrg linklib= 64661bedbe3fSmrg if test -n "$old_library" && 64671bedbe3fSmrg { test "$prefer_static_libs" = yes || 64681bedbe3fSmrg test "$prefer_static_libs,$installed" = "built,no"; }; then 64691bedbe3fSmrg linklib=$old_library 64701bedbe3fSmrg else 64711bedbe3fSmrg for l in $old_library $library_names; do 64721bedbe3fSmrg linklib="$l" 64731bedbe3fSmrg done 64741bedbe3fSmrg fi 6475549e21daSmrg if test -z "$linklib"; then 6476549e21daSmrg func_fatal_error "cannot find name of link library for \`$lib'" 6477549e21daSmrg fi 6478549e21daSmrg 6479549e21daSmrg # This library was specified with -dlopen. 6480549e21daSmrg if test "$pass" = dlopen; then 6481549e21daSmrg if test -z "$libdir"; then 6482549e21daSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483549e21daSmrg fi 6484549e21daSmrg if test -z "$dlname" || 6485549e21daSmrg test "$dlopen_support" != yes || 6486549e21daSmrg test "$build_libtool_libs" = no; then 6487549e21daSmrg # If there is no dlname, no dlopen support or we're linking 6488549e21daSmrg # statically, we need to preload. We also need to preload any 6489549e21daSmrg # dependent libraries so libltdl's deplib preloader doesn't 6490549e21daSmrg # bomb out in the load deplibs phase. 64911bedbe3fSmrg func_append dlprefiles " $lib $dependency_libs" 6492549e21daSmrg else 64931bedbe3fSmrg func_append newdlfiles " $lib" 6494549e21daSmrg fi 6495549e21daSmrg continue 6496549e21daSmrg fi # $pass = dlopen 6497549e21daSmrg 6498549e21daSmrg # We need an absolute path. 6499549e21daSmrg case $ladir in 6500549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501549e21daSmrg *) 6502549e21daSmrg abs_ladir=`cd "$ladir" && pwd` 6503549e21daSmrg if test -z "$abs_ladir"; then 6504549e21daSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 6505549e21daSmrg func_warning "passing it literally to the linker, although it might fail" 6506549e21daSmrg abs_ladir="$ladir" 6507549e21daSmrg fi 6508549e21daSmrg ;; 6509549e21daSmrg esac 6510549e21daSmrg func_basename "$lib" 6511549e21daSmrg laname="$func_basename_result" 6512549e21daSmrg 6513549e21daSmrg # Find the relevant object directory and library name. 6514549e21daSmrg if test "X$installed" = Xyes; then 65151bedbe3fSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516549e21daSmrg func_warning "library \`$lib' was moved." 6517549e21daSmrg dir="$ladir" 6518549e21daSmrg absdir="$abs_ladir" 6519549e21daSmrg libdir="$abs_ladir" 6520549e21daSmrg else 65211bedbe3fSmrg dir="$lt_sysroot$libdir" 65221bedbe3fSmrg absdir="$lt_sysroot$libdir" 6523549e21daSmrg fi 6524549e21daSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525549e21daSmrg else 6526549e21daSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527549e21daSmrg dir="$ladir" 6528549e21daSmrg absdir="$abs_ladir" 6529549e21daSmrg # Remove this search path later 65301bedbe3fSmrg func_append notinst_path " $abs_ladir" 6531549e21daSmrg else 6532549e21daSmrg dir="$ladir/$objdir" 6533549e21daSmrg absdir="$abs_ladir/$objdir" 6534549e21daSmrg # Remove this search path later 65351bedbe3fSmrg func_append notinst_path " $abs_ladir" 6536549e21daSmrg fi 6537549e21daSmrg fi # $installed = yes 6538549e21daSmrg func_stripname 'lib' '.la' "$laname" 6539549e21daSmrg name=$func_stripname_result 6540549e21daSmrg 6541549e21daSmrg # This library was specified with -dlpreopen. 6542549e21daSmrg if test "$pass" = dlpreopen; then 6543549e21daSmrg if test -z "$libdir" && test "$linkmode" = prog; then 6544549e21daSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545549e21daSmrg fi 65461bedbe3fSmrg case "$host" in 65471bedbe3fSmrg # special handling for platforms with PE-DLLs. 65481bedbe3fSmrg *cygwin* | *mingw* | *cegcc* ) 65491bedbe3fSmrg # Linker will automatically link against shared library if both 65501bedbe3fSmrg # static and shared are present. Therefore, ensure we extract 65511bedbe3fSmrg # symbols from the import library if a shared library is present 65521bedbe3fSmrg # (otherwise, the dlopen module name will be incorrect). We do 65531bedbe3fSmrg # this by putting the import library name into $newdlprefiles. 65541bedbe3fSmrg # We recover the dlopen module name by 'saving' the la file 65551bedbe3fSmrg # name in a special purpose variable, and (later) extracting the 65561bedbe3fSmrg # dlname from the la file. 65571bedbe3fSmrg if test -n "$dlname"; then 65581bedbe3fSmrg func_tr_sh "$dir/$linklib" 65591bedbe3fSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 65601bedbe3fSmrg func_append newdlprefiles " $dir/$linklib" 65611bedbe3fSmrg else 65621bedbe3fSmrg func_append newdlprefiles " $dir/$old_library" 65631bedbe3fSmrg # Keep a list of preopened convenience libraries to check 65641bedbe3fSmrg # that they are being used correctly in the link pass. 65651bedbe3fSmrg test -z "$libdir" && \ 65661bedbe3fSmrg func_append dlpreconveniencelibs " $dir/$old_library" 65671bedbe3fSmrg fi 65681bedbe3fSmrg ;; 65691bedbe3fSmrg * ) 65701bedbe3fSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 65711bedbe3fSmrg # are required to link). 65721bedbe3fSmrg if test -n "$old_library"; then 65731bedbe3fSmrg func_append newdlprefiles " $dir/$old_library" 65741bedbe3fSmrg # Keep a list of preopened convenience libraries to check 65751bedbe3fSmrg # that they are being used correctly in the link pass. 65761bedbe3fSmrg test -z "$libdir" && \ 65771bedbe3fSmrg func_append dlpreconveniencelibs " $dir/$old_library" 65781bedbe3fSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 65791bedbe3fSmrg elif test -n "$dlname"; then 65801bedbe3fSmrg func_append newdlprefiles " $dir/$dlname" 65811bedbe3fSmrg else 65821bedbe3fSmrg func_append newdlprefiles " $dir/$linklib" 65831bedbe3fSmrg fi 65841bedbe3fSmrg ;; 65851bedbe3fSmrg esac 6586549e21daSmrg fi # $pass = dlpreopen 6587549e21daSmrg 6588549e21daSmrg if test -z "$libdir"; then 6589549e21daSmrg # Link the convenience library 6590549e21daSmrg if test "$linkmode" = lib; then 6591549e21daSmrg deplibs="$dir/$old_library $deplibs" 6592549e21daSmrg elif test "$linkmode,$pass" = "prog,link"; then 6593549e21daSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 6594549e21daSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595549e21daSmrg else 6596549e21daSmrg deplibs="$lib $deplibs" # used for prog,scan pass 6597549e21daSmrg fi 6598549e21daSmrg continue 6599549e21daSmrg fi 6600549e21daSmrg 6601549e21daSmrg 6602549e21daSmrg if test "$linkmode" = prog && test "$pass" != link; then 66031bedbe3fSmrg func_append newlib_search_path " $ladir" 6604549e21daSmrg deplibs="$lib $deplibs" 6605549e21daSmrg 6606549e21daSmrg linkalldeplibs=no 6607549e21daSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 6608549e21daSmrg test "$build_libtool_libs" = no; then 6609549e21daSmrg linkalldeplibs=yes 6610549e21daSmrg fi 6611549e21daSmrg 6612549e21daSmrg tmp_libs= 6613549e21daSmrg for deplib in $dependency_libs; do 6614549e21daSmrg case $deplib in 6615549e21daSmrg -L*) func_stripname '-L' '' "$deplib" 66161bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 66171bedbe3fSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 6618549e21daSmrg ;; 6619549e21daSmrg esac 6620549e21daSmrg # Need to link against all dependency_libs? 6621549e21daSmrg if test "$linkalldeplibs" = yes; then 6622549e21daSmrg deplibs="$deplib $deplibs" 6623549e21daSmrg else 6624549e21daSmrg # Need to hardcode shared library paths 6625549e21daSmrg # or/and link against static libraries 6626549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 6627549e21daSmrg fi 66281bedbe3fSmrg if $opt_preserve_dup_deps ; then 6629549e21daSmrg case "$tmp_libs " in 66301bedbe3fSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631549e21daSmrg esac 6632549e21daSmrg fi 66331bedbe3fSmrg func_append tmp_libs " $deplib" 6634549e21daSmrg done # for deplib 6635549e21daSmrg continue 6636549e21daSmrg fi # $linkmode = prog... 6637549e21daSmrg 6638549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 6639549e21daSmrg if test -n "$library_names" && 6640549e21daSmrg { { test "$prefer_static_libs" = no || 6641549e21daSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6642549e21daSmrg test -z "$old_library"; }; then 6643549e21daSmrg # We need to hardcode the library path 6644549e21daSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645549e21daSmrg # Make sure the rpath contains only unique directories. 6646549e21daSmrg case "$temp_rpath:" in 6647549e21daSmrg *"$absdir:"*) ;; 66481bedbe3fSmrg *) func_append temp_rpath "$absdir:" ;; 6649549e21daSmrg esac 6650549e21daSmrg fi 6651549e21daSmrg 6652549e21daSmrg # Hardcode the library path. 6653549e21daSmrg # Skip directories that are in the system default run-time 6654549e21daSmrg # search path. 6655549e21daSmrg case " $sys_lib_dlsearch_path " in 6656549e21daSmrg *" $absdir "*) ;; 6657549e21daSmrg *) 6658549e21daSmrg case "$compile_rpath " in 6659549e21daSmrg *" $absdir "*) ;; 66601bedbe3fSmrg *) func_append compile_rpath " $absdir" ;; 6661549e21daSmrg esac 6662549e21daSmrg ;; 6663549e21daSmrg esac 6664549e21daSmrg case " $sys_lib_dlsearch_path " in 6665549e21daSmrg *" $libdir "*) ;; 6666549e21daSmrg *) 6667549e21daSmrg case "$finalize_rpath " in 6668549e21daSmrg *" $libdir "*) ;; 66691bedbe3fSmrg *) func_append finalize_rpath " $libdir" ;; 6670549e21daSmrg esac 6671549e21daSmrg ;; 6672549e21daSmrg esac 6673549e21daSmrg fi # $linkmode,$pass = prog,link... 6674549e21daSmrg 6675549e21daSmrg if test "$alldeplibs" = yes && 6676549e21daSmrg { test "$deplibs_check_method" = pass_all || 6677549e21daSmrg { test "$build_libtool_libs" = yes && 6678549e21daSmrg test -n "$library_names"; }; }; then 6679549e21daSmrg # We only need to search for static libraries 6680549e21daSmrg continue 6681549e21daSmrg fi 6682549e21daSmrg fi 6683549e21daSmrg 6684549e21daSmrg link_static=no # Whether the deplib will be linked statically 6685549e21daSmrg use_static_libs=$prefer_static_libs 6686549e21daSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 6687549e21daSmrg use_static_libs=no 6688549e21daSmrg fi 6689549e21daSmrg if test -n "$library_names" && 6690549e21daSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691549e21daSmrg case $host in 6692549e21daSmrg *cygwin* | *mingw* | *cegcc*) 6693549e21daSmrg # No point in relinking DLLs because paths are not encoded 66941bedbe3fSmrg func_append notinst_deplibs " $lib" 6695549e21daSmrg need_relink=no 6696549e21daSmrg ;; 6697549e21daSmrg *) 6698549e21daSmrg if test "$installed" = no; then 66991bedbe3fSmrg func_append notinst_deplibs " $lib" 6700549e21daSmrg need_relink=yes 6701549e21daSmrg fi 6702549e21daSmrg ;; 6703549e21daSmrg esac 6704549e21daSmrg # This is a shared library 6705549e21daSmrg 6706549e21daSmrg # Warn about portability, can't link against -module's on some 6707549e21daSmrg # systems (darwin). Don't bleat about dlopened modules though! 6708549e21daSmrg dlopenmodule="" 6709549e21daSmrg for dlpremoduletest in $dlprefiles; do 6710549e21daSmrg if test "X$dlpremoduletest" = "X$lib"; then 6711549e21daSmrg dlopenmodule="$dlpremoduletest" 6712549e21daSmrg break 6713549e21daSmrg fi 6714549e21daSmrg done 6715549e21daSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6716549e21daSmrg echo 6717549e21daSmrg if test "$linkmode" = prog; then 6718549e21daSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719549e21daSmrg else 6720549e21daSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721549e21daSmrg fi 6722549e21daSmrg $ECHO "*** $linklib is not portable!" 6723549e21daSmrg fi 6724549e21daSmrg if test "$linkmode" = lib && 6725549e21daSmrg test "$hardcode_into_libs" = yes; then 6726549e21daSmrg # Hardcode the library path. 6727549e21daSmrg # Skip directories that are in the system default run-time 6728549e21daSmrg # search path. 6729549e21daSmrg case " $sys_lib_dlsearch_path " in 6730549e21daSmrg *" $absdir "*) ;; 6731549e21daSmrg *) 6732549e21daSmrg case "$compile_rpath " in 6733549e21daSmrg *" $absdir "*) ;; 67341bedbe3fSmrg *) func_append compile_rpath " $absdir" ;; 6735549e21daSmrg esac 6736549e21daSmrg ;; 6737549e21daSmrg esac 6738549e21daSmrg case " $sys_lib_dlsearch_path " in 6739549e21daSmrg *" $libdir "*) ;; 6740549e21daSmrg *) 6741549e21daSmrg case "$finalize_rpath " in 6742549e21daSmrg *" $libdir "*) ;; 67431bedbe3fSmrg *) func_append finalize_rpath " $libdir" ;; 6744549e21daSmrg esac 6745549e21daSmrg ;; 6746549e21daSmrg esac 6747549e21daSmrg fi 6748549e21daSmrg 6749549e21daSmrg if test -n "$old_archive_from_expsyms_cmds"; then 6750549e21daSmrg # figure out the soname 6751549e21daSmrg set dummy $library_names 6752549e21daSmrg shift 6753549e21daSmrg realname="$1" 6754549e21daSmrg shift 6755549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 6756549e21daSmrg # use dlname if we got it. it's perfectly good, no? 6757549e21daSmrg if test -n "$dlname"; then 6758549e21daSmrg soname="$dlname" 6759549e21daSmrg elif test -n "$soname_spec"; then 6760549e21daSmrg # bleh windows 6761549e21daSmrg case $host in 6762549e21daSmrg *cygwin* | mingw* | *cegcc*) 6763549e21daSmrg func_arith $current - $age 6764549e21daSmrg major=$func_arith_result 6765549e21daSmrg versuffix="-$major" 6766549e21daSmrg ;; 6767549e21daSmrg esac 6768549e21daSmrg eval soname=\"$soname_spec\" 6769549e21daSmrg else 6770549e21daSmrg soname="$realname" 6771549e21daSmrg fi 6772549e21daSmrg 6773549e21daSmrg # Make a new name for the extract_expsyms_cmds to use 6774549e21daSmrg soroot="$soname" 6775549e21daSmrg func_basename "$soroot" 6776549e21daSmrg soname="$func_basename_result" 6777549e21daSmrg func_stripname 'lib' '.dll' "$soname" 6778549e21daSmrg newlib=libimp-$func_stripname_result.a 6779549e21daSmrg 6780549e21daSmrg # If the library has no export list, then create one now 6781549e21daSmrg if test -f "$output_objdir/$soname-def"; then : 6782549e21daSmrg else 6783549e21daSmrg func_verbose "extracting exported symbol list from \`$soname'" 6784549e21daSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785549e21daSmrg fi 6786549e21daSmrg 6787549e21daSmrg # Create $newlib 6788549e21daSmrg if test -f "$output_objdir/$newlib"; then :; else 6789549e21daSmrg func_verbose "generating import library for \`$soname'" 6790549e21daSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791549e21daSmrg fi 6792549e21daSmrg # make sure the library variables are pointing to the new library 6793549e21daSmrg dir=$output_objdir 6794549e21daSmrg linklib=$newlib 6795549e21daSmrg fi # test -n "$old_archive_from_expsyms_cmds" 6796549e21daSmrg 67971bedbe3fSmrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798549e21daSmrg add_shlibpath= 6799549e21daSmrg add_dir= 6800549e21daSmrg add= 6801549e21daSmrg lib_linked=yes 6802549e21daSmrg case $hardcode_action in 6803549e21daSmrg immediate | unsupported) 6804549e21daSmrg if test "$hardcode_direct" = no; then 6805549e21daSmrg add="$dir/$linklib" 6806549e21daSmrg case $host in 6807549e21daSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808549e21daSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809549e21daSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810549e21daSmrg *-*-unixware7*) add_dir="-L$dir" ;; 6811549e21daSmrg *-*-darwin* ) 6812549e21daSmrg # if the lib is a (non-dlopened) module then we can not 6813549e21daSmrg # link against it, someone is ignoring the earlier warnings 6814549e21daSmrg if /usr/bin/file -L $add 2> /dev/null | 6815549e21daSmrg $GREP ": [^:]* bundle" >/dev/null ; then 6816549e21daSmrg if test "X$dlopenmodule" != "X$lib"; then 6817549e21daSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818549e21daSmrg if test -z "$old_library" ; then 6819549e21daSmrg echo 6820549e21daSmrg echo "*** And there doesn't seem to be a static archive available" 6821549e21daSmrg echo "*** The link will probably fail, sorry" 6822549e21daSmrg else 6823549e21daSmrg add="$dir/$old_library" 6824549e21daSmrg fi 6825549e21daSmrg elif test -n "$old_library"; then 6826549e21daSmrg add="$dir/$old_library" 6827549e21daSmrg fi 6828549e21daSmrg fi 6829549e21daSmrg esac 6830549e21daSmrg elif test "$hardcode_minus_L" = no; then 6831549e21daSmrg case $host in 6832549e21daSmrg *-*-sunos*) add_shlibpath="$dir" ;; 6833549e21daSmrg esac 6834549e21daSmrg add_dir="-L$dir" 6835549e21daSmrg add="-l$name" 6836549e21daSmrg elif test "$hardcode_shlibpath_var" = no; then 6837549e21daSmrg add_shlibpath="$dir" 6838549e21daSmrg add="-l$name" 6839549e21daSmrg else 6840549e21daSmrg lib_linked=no 6841549e21daSmrg fi 6842549e21daSmrg ;; 6843549e21daSmrg relink) 6844549e21daSmrg if test "$hardcode_direct" = yes && 6845549e21daSmrg test "$hardcode_direct_absolute" = no; then 6846549e21daSmrg add="$dir/$linklib" 6847549e21daSmrg elif test "$hardcode_minus_L" = yes; then 68481bedbe3fSmrg add_dir="-L$absdir" 6849549e21daSmrg # Try looking first in the location we're being installed to. 6850549e21daSmrg if test -n "$inst_prefix_dir"; then 6851549e21daSmrg case $libdir in 6852549e21daSmrg [\\/]*) 68531bedbe3fSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 6854549e21daSmrg ;; 6855549e21daSmrg esac 6856549e21daSmrg fi 6857549e21daSmrg add="-l$name" 6858549e21daSmrg elif test "$hardcode_shlibpath_var" = yes; then 6859549e21daSmrg add_shlibpath="$dir" 6860549e21daSmrg add="-l$name" 6861549e21daSmrg else 6862549e21daSmrg lib_linked=no 6863549e21daSmrg fi 6864549e21daSmrg ;; 6865549e21daSmrg *) lib_linked=no ;; 6866549e21daSmrg esac 6867549e21daSmrg 6868549e21daSmrg if test "$lib_linked" != yes; then 6869549e21daSmrg func_fatal_configuration "unsupported hardcode properties" 6870549e21daSmrg fi 6871549e21daSmrg 6872549e21daSmrg if test -n "$add_shlibpath"; then 6873549e21daSmrg case :$compile_shlibpath: in 6874549e21daSmrg *":$add_shlibpath:"*) ;; 68751bedbe3fSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876549e21daSmrg esac 6877549e21daSmrg fi 6878549e21daSmrg if test "$linkmode" = prog; then 6879549e21daSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880549e21daSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881549e21daSmrg else 6882549e21daSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883549e21daSmrg test -n "$add" && deplibs="$add $deplibs" 6884549e21daSmrg if test "$hardcode_direct" != yes && 6885549e21daSmrg test "$hardcode_minus_L" != yes && 6886549e21daSmrg test "$hardcode_shlibpath_var" = yes; then 6887549e21daSmrg case :$finalize_shlibpath: in 6888549e21daSmrg *":$libdir:"*) ;; 68891bedbe3fSmrg *) func_append finalize_shlibpath "$libdir:" ;; 6890549e21daSmrg esac 6891549e21daSmrg fi 6892549e21daSmrg fi 6893549e21daSmrg fi 6894549e21daSmrg 68951bedbe3fSmrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896549e21daSmrg add_shlibpath= 6897549e21daSmrg add_dir= 6898549e21daSmrg add= 6899549e21daSmrg # Finalize command for both is simple: just hardcode it. 6900549e21daSmrg if test "$hardcode_direct" = yes && 6901549e21daSmrg test "$hardcode_direct_absolute" = no; then 6902549e21daSmrg add="$libdir/$linklib" 6903549e21daSmrg elif test "$hardcode_minus_L" = yes; then 6904549e21daSmrg add_dir="-L$libdir" 6905549e21daSmrg add="-l$name" 6906549e21daSmrg elif test "$hardcode_shlibpath_var" = yes; then 6907549e21daSmrg case :$finalize_shlibpath: in 6908549e21daSmrg *":$libdir:"*) ;; 69091bedbe3fSmrg *) func_append finalize_shlibpath "$libdir:" ;; 6910549e21daSmrg esac 6911549e21daSmrg add="-l$name" 6912549e21daSmrg elif test "$hardcode_automatic" = yes; then 6913549e21daSmrg if test -n "$inst_prefix_dir" && 6914549e21daSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915549e21daSmrg add="$inst_prefix_dir$libdir/$linklib" 6916549e21daSmrg else 6917549e21daSmrg add="$libdir/$linklib" 6918549e21daSmrg fi 6919549e21daSmrg else 6920549e21daSmrg # We cannot seem to hardcode it, guess we'll fake it. 6921549e21daSmrg add_dir="-L$libdir" 6922549e21daSmrg # Try looking first in the location we're being installed to. 6923549e21daSmrg if test -n "$inst_prefix_dir"; then 6924549e21daSmrg case $libdir in 6925549e21daSmrg [\\/]*) 69261bedbe3fSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 6927549e21daSmrg ;; 6928549e21daSmrg esac 6929549e21daSmrg fi 6930549e21daSmrg add="-l$name" 6931549e21daSmrg fi 6932549e21daSmrg 6933549e21daSmrg if test "$linkmode" = prog; then 6934549e21daSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935549e21daSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936549e21daSmrg else 6937549e21daSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938549e21daSmrg test -n "$add" && deplibs="$add $deplibs" 6939549e21daSmrg fi 6940549e21daSmrg fi 6941549e21daSmrg elif test "$linkmode" = prog; then 6942549e21daSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6943549e21daSmrg # is not unsupported. This is valid on all known static and 6944549e21daSmrg # shared platforms. 6945549e21daSmrg if test "$hardcode_direct" != unsupported; then 6946549e21daSmrg test -n "$old_library" && linklib="$old_library" 6947549e21daSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 6948549e21daSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949549e21daSmrg else 6950549e21daSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6951549e21daSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952549e21daSmrg fi 6953549e21daSmrg elif test "$build_libtool_libs" = yes; then 6954549e21daSmrg # Not a shared library 6955549e21daSmrg if test "$deplibs_check_method" != pass_all; then 6956549e21daSmrg # We're trying link a shared library against a static one 6957549e21daSmrg # but the system doesn't support it. 6958549e21daSmrg 6959549e21daSmrg # Just print a warning and add the library to dependency_libs so 6960549e21daSmrg # that the program can be linked against the static library. 6961549e21daSmrg echo 6962549e21daSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 6963549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 6964549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 6965549e21daSmrg echo "*** shared version of the library, which you do not appear to have." 6966549e21daSmrg if test "$module" = yes; then 6967549e21daSmrg echo "*** But as you try to build a module library, libtool will still create " 6968549e21daSmrg echo "*** a static module, that should work as long as the dlopening application" 6969549e21daSmrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970549e21daSmrg if test -z "$global_symbol_pipe"; then 6971549e21daSmrg echo 6972549e21daSmrg echo "*** However, this would only work if libtool was able to extract symbol" 6973549e21daSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6974549e21daSmrg echo "*** not find such a program. So, this module is probably useless." 6975549e21daSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976549e21daSmrg fi 6977549e21daSmrg if test "$build_old_libs" = no; then 6978549e21daSmrg build_libtool_libs=module 6979549e21daSmrg build_old_libs=yes 6980549e21daSmrg else 6981549e21daSmrg build_libtool_libs=no 6982549e21daSmrg fi 6983549e21daSmrg fi 6984549e21daSmrg else 6985549e21daSmrg deplibs="$dir/$old_library $deplibs" 6986549e21daSmrg link_static=yes 6987549e21daSmrg fi 6988549e21daSmrg fi # link shared/static library? 6989549e21daSmrg 6990549e21daSmrg if test "$linkmode" = lib; then 6991549e21daSmrg if test -n "$dependency_libs" && 6992549e21daSmrg { test "$hardcode_into_libs" != yes || 6993549e21daSmrg test "$build_old_libs" = yes || 6994549e21daSmrg test "$link_static" = yes; }; then 6995549e21daSmrg # Extract -R from dependency_libs 6996549e21daSmrg temp_deplibs= 6997549e21daSmrg for libdir in $dependency_libs; do 6998549e21daSmrg case $libdir in 6999549e21daSmrg -R*) func_stripname '-R' '' "$libdir" 7000549e21daSmrg temp_xrpath=$func_stripname_result 7001549e21daSmrg case " $xrpath " in 7002549e21daSmrg *" $temp_xrpath "*) ;; 70031bedbe3fSmrg *) func_append xrpath " $temp_xrpath";; 7004549e21daSmrg esac;; 70051bedbe3fSmrg *) func_append temp_deplibs " $libdir";; 7006549e21daSmrg esac 7007549e21daSmrg done 7008549e21daSmrg dependency_libs="$temp_deplibs" 7009549e21daSmrg fi 7010549e21daSmrg 70111bedbe3fSmrg func_append newlib_search_path " $absdir" 7012549e21daSmrg # Link against this library 7013549e21daSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014549e21daSmrg # ... and its dependency_libs 7015549e21daSmrg tmp_libs= 7016549e21daSmrg for deplib in $dependency_libs; do 7017549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 70181bedbe3fSmrg case $deplib in 70191bedbe3fSmrg -L*) func_stripname '-L' '' "$deplib" 70201bedbe3fSmrg func_resolve_sysroot "$func_stripname_result";; 70211bedbe3fSmrg *) func_resolve_sysroot "$deplib" ;; 70221bedbe3fSmrg esac 70231bedbe3fSmrg if $opt_preserve_dup_deps ; then 7024549e21daSmrg case "$tmp_libs " in 70251bedbe3fSmrg *" $func_resolve_sysroot_result "*) 70261bedbe3fSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027549e21daSmrg esac 7028549e21daSmrg fi 70291bedbe3fSmrg func_append tmp_libs " $func_resolve_sysroot_result" 7030549e21daSmrg done 7031549e21daSmrg 7032549e21daSmrg if test "$link_all_deplibs" != no; then 7033549e21daSmrg # Add the search paths of all dependency libraries 7034549e21daSmrg for deplib in $dependency_libs; do 7035549e21daSmrg path= 7036549e21daSmrg case $deplib in 7037549e21daSmrg -L*) path="$deplib" ;; 7038549e21daSmrg *.la) 70391bedbe3fSmrg func_resolve_sysroot "$deplib" 70401bedbe3fSmrg deplib=$func_resolve_sysroot_result 7041549e21daSmrg func_dirname "$deplib" "" "." 70421bedbe3fSmrg dir=$func_dirname_result 7043549e21daSmrg # We need an absolute path. 7044549e21daSmrg case $dir in 7045549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046549e21daSmrg *) 7047549e21daSmrg absdir=`cd "$dir" && pwd` 7048549e21daSmrg if test -z "$absdir"; then 7049549e21daSmrg func_warning "cannot determine absolute directory name of \`$dir'" 7050549e21daSmrg absdir="$dir" 7051549e21daSmrg fi 7052549e21daSmrg ;; 7053549e21daSmrg esac 7054549e21daSmrg if $GREP "^installed=no" $deplib > /dev/null; then 7055549e21daSmrg case $host in 7056549e21daSmrg *-*-darwin*) 7057549e21daSmrg depdepl= 7058549e21daSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059549e21daSmrg if test -n "$deplibrary_names" ; then 7060549e21daSmrg for tmp in $deplibrary_names ; do 7061549e21daSmrg depdepl=$tmp 7062549e21daSmrg done 7063549e21daSmrg if test -f "$absdir/$objdir/$depdepl" ; then 7064549e21daSmrg depdepl="$absdir/$objdir/$depdepl" 7065549e21daSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066549e21daSmrg if test -z "$darwin_install_name"; then 7067549e21daSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068549e21daSmrg fi 70691bedbe3fSmrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 70701bedbe3fSmrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071549e21daSmrg path= 7072549e21daSmrg fi 7073549e21daSmrg fi 7074549e21daSmrg ;; 7075549e21daSmrg *) 7076549e21daSmrg path="-L$absdir/$objdir" 7077549e21daSmrg ;; 7078549e21daSmrg esac 7079549e21daSmrg else 7080549e21daSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081549e21daSmrg test -z "$libdir" && \ 7082549e21daSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7083549e21daSmrg test "$absdir" != "$libdir" && \ 7084549e21daSmrg func_warning "\`$deplib' seems to be moved" 7085549e21daSmrg 7086549e21daSmrg path="-L$absdir" 7087549e21daSmrg fi 7088549e21daSmrg ;; 7089549e21daSmrg esac 7090549e21daSmrg case " $deplibs " in 7091549e21daSmrg *" $path "*) ;; 7092549e21daSmrg *) deplibs="$path $deplibs" ;; 7093549e21daSmrg esac 7094549e21daSmrg done 7095549e21daSmrg fi # link_all_deplibs != no 7096549e21daSmrg fi # linkmode = lib 7097549e21daSmrg done # for deplib in $libs 7098549e21daSmrg if test "$pass" = link; then 7099549e21daSmrg if test "$linkmode" = "prog"; then 7100549e21daSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101549e21daSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102549e21daSmrg else 7103549e21daSmrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104549e21daSmrg fi 7105549e21daSmrg fi 7106549e21daSmrg dependency_libs="$newdependency_libs" 7107549e21daSmrg if test "$pass" = dlpreopen; then 7108549e21daSmrg # Link the dlpreopened libraries before other libraries 7109549e21daSmrg for deplib in $save_deplibs; do 7110549e21daSmrg deplibs="$deplib $deplibs" 7111549e21daSmrg done 7112549e21daSmrg fi 7113549e21daSmrg if test "$pass" != dlopen; then 7114549e21daSmrg if test "$pass" != conv; then 7115549e21daSmrg # Make sure lib_search_path contains only unique directories. 7116549e21daSmrg lib_search_path= 7117549e21daSmrg for dir in $newlib_search_path; do 7118549e21daSmrg case "$lib_search_path " in 7119549e21daSmrg *" $dir "*) ;; 71201bedbe3fSmrg *) func_append lib_search_path " $dir" ;; 7121549e21daSmrg esac 7122549e21daSmrg done 7123549e21daSmrg newlib_search_path= 7124549e21daSmrg fi 7125549e21daSmrg 7126549e21daSmrg if test "$linkmode,$pass" != "prog,link"; then 7127549e21daSmrg vars="deplibs" 7128549e21daSmrg else 7129549e21daSmrg vars="compile_deplibs finalize_deplibs" 7130549e21daSmrg fi 7131549e21daSmrg for var in $vars dependency_libs; do 7132549e21daSmrg # Add libraries to $var in reverse order 7133549e21daSmrg eval tmp_libs=\"\$$var\" 7134549e21daSmrg new_libs= 7135549e21daSmrg for deplib in $tmp_libs; do 7136549e21daSmrg # FIXME: Pedantically, this is the right thing to do, so 7137549e21daSmrg # that some nasty dependency loop isn't accidentally 7138549e21daSmrg # broken: 7139549e21daSmrg #new_libs="$deplib $new_libs" 7140549e21daSmrg # Pragmatically, this seems to cause very few problems in 7141549e21daSmrg # practice: 7142549e21daSmrg case $deplib in 7143549e21daSmrg -L*) new_libs="$deplib $new_libs" ;; 7144549e21daSmrg -R*) ;; 7145549e21daSmrg *) 7146549e21daSmrg # And here is the reason: when a library appears more 7147549e21daSmrg # than once as an explicit dependence of a library, or 7148549e21daSmrg # is implicitly linked in more than once by the 7149549e21daSmrg # compiler, it is considered special, and multiple 7150549e21daSmrg # occurrences thereof are not removed. Compare this 7151549e21daSmrg # with having the same library being listed as a 7152549e21daSmrg # dependency of multiple other libraries: in this case, 7153549e21daSmrg # we know (pedantically, we assume) the library does not 7154549e21daSmrg # need to be listed more than once, so we keep only the 7155549e21daSmrg # last copy. This is not always right, but it is rare 7156549e21daSmrg # enough that we require users that really mean to play 7157549e21daSmrg # such unportable linking tricks to link the library 7158549e21daSmrg # using -Wl,-lname, so that libtool does not consider it 7159549e21daSmrg # for duplicate removal. 7160549e21daSmrg case " $specialdeplibs " in 7161549e21daSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162549e21daSmrg *) 7163549e21daSmrg case " $new_libs " in 7164549e21daSmrg *" $deplib "*) ;; 7165549e21daSmrg *) new_libs="$deplib $new_libs" ;; 7166549e21daSmrg esac 7167549e21daSmrg ;; 7168549e21daSmrg esac 7169549e21daSmrg ;; 7170549e21daSmrg esac 7171549e21daSmrg done 7172549e21daSmrg tmp_libs= 7173549e21daSmrg for deplib in $new_libs; do 7174549e21daSmrg case $deplib in 7175549e21daSmrg -L*) 7176549e21daSmrg case " $tmp_libs " in 7177549e21daSmrg *" $deplib "*) ;; 71781bedbe3fSmrg *) func_append tmp_libs " $deplib" ;; 7179549e21daSmrg esac 7180549e21daSmrg ;; 71811bedbe3fSmrg *) func_append tmp_libs " $deplib" ;; 7182549e21daSmrg esac 7183549e21daSmrg done 7184549e21daSmrg eval $var=\"$tmp_libs\" 7185549e21daSmrg done # for var 7186549e21daSmrg fi 7187549e21daSmrg # Last step: remove runtime libs from dependency_libs 7188549e21daSmrg # (they stay in deplibs) 7189549e21daSmrg tmp_libs= 7190549e21daSmrg for i in $dependency_libs ; do 7191549e21daSmrg case " $predeps $postdeps $compiler_lib_search_path " in 7192549e21daSmrg *" $i "*) 7193549e21daSmrg i="" 7194549e21daSmrg ;; 7195549e21daSmrg esac 7196549e21daSmrg if test -n "$i" ; then 71971bedbe3fSmrg func_append tmp_libs " $i" 7198549e21daSmrg fi 7199549e21daSmrg done 7200549e21daSmrg dependency_libs=$tmp_libs 7201549e21daSmrg done # for pass 7202549e21daSmrg if test "$linkmode" = prog; then 7203549e21daSmrg dlfiles="$newdlfiles" 7204549e21daSmrg fi 7205549e21daSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 7206549e21daSmrg dlprefiles="$newdlprefiles" 7207549e21daSmrg fi 7208549e21daSmrg 7209549e21daSmrg case $linkmode in 7210549e21daSmrg oldlib) 7211549e21daSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212549e21daSmrg func_warning "\`-dlopen' is ignored for archives" 7213549e21daSmrg fi 7214549e21daSmrg 7215549e21daSmrg case " $deplibs" in 7216549e21daSmrg *\ -l* | *\ -L*) 7217549e21daSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218549e21daSmrg esac 7219549e21daSmrg 7220549e21daSmrg test -n "$rpath" && \ 7221549e21daSmrg func_warning "\`-rpath' is ignored for archives" 7222549e21daSmrg 7223549e21daSmrg test -n "$xrpath" && \ 7224549e21daSmrg func_warning "\`-R' is ignored for archives" 7225549e21daSmrg 7226549e21daSmrg test -n "$vinfo" && \ 7227549e21daSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 7228549e21daSmrg 7229549e21daSmrg test -n "$release" && \ 7230549e21daSmrg func_warning "\`-release' is ignored for archives" 7231549e21daSmrg 7232549e21daSmrg test -n "$export_symbols$export_symbols_regex" && \ 7233549e21daSmrg func_warning "\`-export-symbols' is ignored for archives" 7234549e21daSmrg 7235549e21daSmrg # Now set the variables for building old libraries. 7236549e21daSmrg build_libtool_libs=no 7237549e21daSmrg oldlibs="$output" 72381bedbe3fSmrg func_append objs "$old_deplibs" 7239549e21daSmrg ;; 7240549e21daSmrg 7241549e21daSmrg lib) 7242549e21daSmrg # Make sure we only generate libraries of the form `libNAME.la'. 7243549e21daSmrg case $outputname in 7244549e21daSmrg lib*) 7245549e21daSmrg func_stripname 'lib' '.la' "$outputname" 7246549e21daSmrg name=$func_stripname_result 7247549e21daSmrg eval shared_ext=\"$shrext_cmds\" 7248549e21daSmrg eval libname=\"$libname_spec\" 7249549e21daSmrg ;; 7250549e21daSmrg *) 7251549e21daSmrg test "$module" = no && \ 7252549e21daSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253549e21daSmrg 7254549e21daSmrg if test "$need_lib_prefix" != no; then 7255549e21daSmrg # Add the "lib" prefix for modules if required 7256549e21daSmrg func_stripname '' '.la' "$outputname" 7257549e21daSmrg name=$func_stripname_result 7258549e21daSmrg eval shared_ext=\"$shrext_cmds\" 7259549e21daSmrg eval libname=\"$libname_spec\" 7260549e21daSmrg else 7261549e21daSmrg func_stripname '' '.la' "$outputname" 7262549e21daSmrg libname=$func_stripname_result 7263549e21daSmrg fi 7264549e21daSmrg ;; 7265549e21daSmrg esac 7266549e21daSmrg 7267549e21daSmrg if test -n "$objs"; then 7268549e21daSmrg if test "$deplibs_check_method" != pass_all; then 7269549e21daSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270549e21daSmrg else 7271549e21daSmrg echo 7272549e21daSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273549e21daSmrg $ECHO "*** objects $objs is not portable!" 72741bedbe3fSmrg func_append libobjs " $objs" 7275549e21daSmrg fi 7276549e21daSmrg fi 7277549e21daSmrg 7278549e21daSmrg test "$dlself" != no && \ 7279549e21daSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7280549e21daSmrg 7281549e21daSmrg set dummy $rpath 7282549e21daSmrg shift 7283549e21daSmrg test "$#" -gt 1 && \ 7284549e21daSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7285549e21daSmrg 7286549e21daSmrg install_libdir="$1" 7287549e21daSmrg 7288549e21daSmrg oldlibs= 7289549e21daSmrg if test -z "$rpath"; then 7290549e21daSmrg if test "$build_libtool_libs" = yes; then 7291549e21daSmrg # Building a libtool convenience library. 7292549e21daSmrg # Some compilers have problems with a `.al' extension so 7293549e21daSmrg # convenience libraries should have the same extension an 7294549e21daSmrg # archive normally would. 7295549e21daSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296549e21daSmrg build_libtool_libs=convenience 7297549e21daSmrg build_old_libs=yes 7298549e21daSmrg fi 7299549e21daSmrg 7300549e21daSmrg test -n "$vinfo" && \ 7301549e21daSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302549e21daSmrg 7303549e21daSmrg test -n "$release" && \ 7304549e21daSmrg func_warning "\`-release' is ignored for convenience libraries" 7305549e21daSmrg else 7306549e21daSmrg 7307549e21daSmrg # Parse the version information argument. 7308549e21daSmrg save_ifs="$IFS"; IFS=':' 7309549e21daSmrg set dummy $vinfo 0 0 0 7310549e21daSmrg shift 7311549e21daSmrg IFS="$save_ifs" 7312549e21daSmrg 7313549e21daSmrg test -n "$7" && \ 7314549e21daSmrg func_fatal_help "too many parameters to \`-version-info'" 7315549e21daSmrg 7316549e21daSmrg # convert absolute version numbers to libtool ages 7317549e21daSmrg # this retains compatibility with .la files and attempts 7318549e21daSmrg # to make the code below a bit more comprehensible 7319549e21daSmrg 7320549e21daSmrg case $vinfo_number in 7321549e21daSmrg yes) 7322549e21daSmrg number_major="$1" 7323549e21daSmrg number_minor="$2" 7324549e21daSmrg number_revision="$3" 7325549e21daSmrg # 7326549e21daSmrg # There are really only two kinds -- those that 7327549e21daSmrg # use the current revision as the major version 7328549e21daSmrg # and those that subtract age and use age as 7329549e21daSmrg # a minor version. But, then there is irix 7330549e21daSmrg # which has an extra 1 added just for fun 7331549e21daSmrg # 7332549e21daSmrg case $version_type in 73331bedbe3fSmrg # correct linux to gnu/linux during the next big refactor 7334549e21daSmrg darwin|linux|osf|windows|none) 7335549e21daSmrg func_arith $number_major + $number_minor 7336549e21daSmrg current=$func_arith_result 7337549e21daSmrg age="$number_minor" 7338549e21daSmrg revision="$number_revision" 7339549e21daSmrg ;; 7340549e21daSmrg freebsd-aout|freebsd-elf|qnx|sunos) 7341549e21daSmrg current="$number_major" 7342549e21daSmrg revision="$number_minor" 7343549e21daSmrg age="0" 7344549e21daSmrg ;; 7345549e21daSmrg irix|nonstopux) 7346549e21daSmrg func_arith $number_major + $number_minor 7347549e21daSmrg current=$func_arith_result 7348549e21daSmrg age="$number_minor" 7349549e21daSmrg revision="$number_minor" 7350549e21daSmrg lt_irix_increment=no 7351549e21daSmrg ;; 7352549e21daSmrg esac 7353549e21daSmrg ;; 7354549e21daSmrg no) 7355549e21daSmrg current="$1" 7356549e21daSmrg revision="$2" 7357549e21daSmrg age="$3" 7358549e21daSmrg ;; 7359549e21daSmrg esac 7360549e21daSmrg 7361549e21daSmrg # Check that each of the things are valid numbers. 7362549e21daSmrg case $current in 7363549e21daSmrg 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]) ;; 7364549e21daSmrg *) 7365549e21daSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 7366549e21daSmrg func_fatal_error "\`$vinfo' is not valid version information" 7367549e21daSmrg ;; 7368549e21daSmrg esac 7369549e21daSmrg 7370549e21daSmrg case $revision in 7371549e21daSmrg 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]) ;; 7372549e21daSmrg *) 7373549e21daSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 7374549e21daSmrg func_fatal_error "\`$vinfo' is not valid version information" 7375549e21daSmrg ;; 7376549e21daSmrg esac 7377549e21daSmrg 7378549e21daSmrg case $age in 7379549e21daSmrg 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]) ;; 7380549e21daSmrg *) 7381549e21daSmrg func_error "AGE \`$age' must be a nonnegative integer" 7382549e21daSmrg func_fatal_error "\`$vinfo' is not valid version information" 7383549e21daSmrg ;; 7384549e21daSmrg esac 7385549e21daSmrg 7386549e21daSmrg if test "$age" -gt "$current"; then 7387549e21daSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388549e21daSmrg func_fatal_error "\`$vinfo' is not valid version information" 7389549e21daSmrg fi 7390549e21daSmrg 7391549e21daSmrg # Calculate the version variables. 7392549e21daSmrg major= 7393549e21daSmrg versuffix= 7394549e21daSmrg verstring= 7395549e21daSmrg case $version_type in 7396549e21daSmrg none) ;; 7397549e21daSmrg 7398549e21daSmrg darwin) 7399549e21daSmrg # Like Linux, but with the current version available in 7400549e21daSmrg # verstring for coding it into the library header 7401549e21daSmrg func_arith $current - $age 7402549e21daSmrg major=.$func_arith_result 7403549e21daSmrg versuffix="$major.$age.$revision" 7404549e21daSmrg # Darwin ld doesn't like 0 for these options... 7405549e21daSmrg func_arith $current + 1 7406549e21daSmrg minor_current=$func_arith_result 7407549e21daSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408549e21daSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409549e21daSmrg ;; 7410549e21daSmrg 7411549e21daSmrg freebsd-aout) 7412549e21daSmrg major=".$current" 7413549e21daSmrg versuffix=".$current.$revision"; 7414549e21daSmrg ;; 7415549e21daSmrg 7416549e21daSmrg freebsd-elf) 7417549e21daSmrg major=".$current" 7418549e21daSmrg versuffix=".$current" 7419549e21daSmrg ;; 7420549e21daSmrg 7421549e21daSmrg irix | nonstopux) 7422549e21daSmrg if test "X$lt_irix_increment" = "Xno"; then 7423549e21daSmrg func_arith $current - $age 7424549e21daSmrg else 7425549e21daSmrg func_arith $current - $age + 1 7426549e21daSmrg fi 7427549e21daSmrg major=$func_arith_result 7428549e21daSmrg 7429549e21daSmrg case $version_type in 7430549e21daSmrg nonstopux) verstring_prefix=nonstopux ;; 7431549e21daSmrg *) verstring_prefix=sgi ;; 7432549e21daSmrg esac 7433549e21daSmrg verstring="$verstring_prefix$major.$revision" 7434549e21daSmrg 7435549e21daSmrg # Add in all the interfaces that we are compatible with. 7436549e21daSmrg loop=$revision 7437549e21daSmrg while test "$loop" -ne 0; do 7438549e21daSmrg func_arith $revision - $loop 7439549e21daSmrg iface=$func_arith_result 7440549e21daSmrg func_arith $loop - 1 7441549e21daSmrg loop=$func_arith_result 7442549e21daSmrg verstring="$verstring_prefix$major.$iface:$verstring" 7443549e21daSmrg done 7444549e21daSmrg 7445549e21daSmrg # Before this point, $major must not contain `.'. 7446549e21daSmrg major=.$major 7447549e21daSmrg versuffix="$major.$revision" 7448549e21daSmrg ;; 7449549e21daSmrg 74501bedbe3fSmrg linux) # correct to gnu/linux during the next big refactor 7451549e21daSmrg func_arith $current - $age 7452549e21daSmrg major=.$func_arith_result 7453549e21daSmrg versuffix="$major.$age.$revision" 7454549e21daSmrg ;; 7455549e21daSmrg 7456549e21daSmrg osf) 7457549e21daSmrg func_arith $current - $age 7458549e21daSmrg major=.$func_arith_result 7459549e21daSmrg versuffix=".$current.$age.$revision" 7460549e21daSmrg verstring="$current.$age.$revision" 7461549e21daSmrg 7462549e21daSmrg # Add in all the interfaces that we are compatible with. 7463549e21daSmrg loop=$age 7464549e21daSmrg while test "$loop" -ne 0; do 7465549e21daSmrg func_arith $current - $loop 7466549e21daSmrg iface=$func_arith_result 7467549e21daSmrg func_arith $loop - 1 7468549e21daSmrg loop=$func_arith_result 7469549e21daSmrg verstring="$verstring:${iface}.0" 7470549e21daSmrg done 7471549e21daSmrg 7472549e21daSmrg # Make executables depend on our current version. 74731bedbe3fSmrg func_append verstring ":${current}.0" 7474549e21daSmrg ;; 7475549e21daSmrg 7476549e21daSmrg qnx) 7477549e21daSmrg major=".$current" 7478549e21daSmrg versuffix=".$current" 7479549e21daSmrg ;; 7480549e21daSmrg 7481549e21daSmrg sunos) 7482549e21daSmrg major=".$current" 7483549e21daSmrg versuffix=".$current.$revision" 7484549e21daSmrg ;; 7485549e21daSmrg 7486549e21daSmrg windows) 7487549e21daSmrg # Use '-' rather than '.', since we only want one 7488549e21daSmrg # extension on DOS 8.3 filesystems. 7489549e21daSmrg func_arith $current - $age 7490549e21daSmrg major=$func_arith_result 7491549e21daSmrg versuffix="-$major" 7492549e21daSmrg ;; 7493549e21daSmrg 7494549e21daSmrg *) 7495549e21daSmrg func_fatal_configuration "unknown library version type \`$version_type'" 7496549e21daSmrg ;; 7497549e21daSmrg esac 7498549e21daSmrg 7499549e21daSmrg # Clear the version info if we defaulted, and they specified a release. 7500549e21daSmrg if test -z "$vinfo" && test -n "$release"; then 7501549e21daSmrg major= 7502549e21daSmrg case $version_type in 7503549e21daSmrg darwin) 7504549e21daSmrg # we can't check for "0.0" in archive_cmds due to quoting 7505549e21daSmrg # problems, so we reset it completely 7506549e21daSmrg verstring= 7507549e21daSmrg ;; 7508549e21daSmrg *) 7509549e21daSmrg verstring="0.0" 7510549e21daSmrg ;; 7511549e21daSmrg esac 7512549e21daSmrg if test "$need_version" = no; then 7513549e21daSmrg versuffix= 7514549e21daSmrg else 7515549e21daSmrg versuffix=".0.0" 7516549e21daSmrg fi 7517549e21daSmrg fi 7518549e21daSmrg 7519549e21daSmrg # Remove version info from name if versioning should be avoided 7520549e21daSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 7521549e21daSmrg major= 7522549e21daSmrg versuffix= 7523549e21daSmrg verstring="" 7524549e21daSmrg fi 7525549e21daSmrg 7526549e21daSmrg # Check to see if the archive will have undefined symbols. 7527549e21daSmrg if test "$allow_undefined" = yes; then 7528549e21daSmrg if test "$allow_undefined_flag" = unsupported; then 7529549e21daSmrg func_warning "undefined symbols not allowed in $host shared libraries" 7530549e21daSmrg build_libtool_libs=no 7531549e21daSmrg build_old_libs=yes 7532549e21daSmrg fi 7533549e21daSmrg else 7534549e21daSmrg # Don't allow undefined symbols. 7535549e21daSmrg allow_undefined_flag="$no_undefined_flag" 7536549e21daSmrg fi 7537549e21daSmrg 7538549e21daSmrg fi 7539549e21daSmrg 7540549e21daSmrg func_generate_dlsyms "$libname" "$libname" "yes" 75411bedbe3fSmrg func_append libobjs " $symfileobj" 7542549e21daSmrg test "X$libobjs" = "X " && libobjs= 7543549e21daSmrg 75441bedbe3fSmrg if test "$opt_mode" != relink; then 7545549e21daSmrg # Remove our outputs, but don't remove object files since they 7546549e21daSmrg # may have been created when compiling PIC objects. 7547549e21daSmrg removelist= 7548549e21daSmrg tempremovelist=`$ECHO "$output_objdir/*"` 7549549e21daSmrg for p in $tempremovelist; do 7550549e21daSmrg case $p in 7551549e21daSmrg *.$objext | *.gcno) 7552549e21daSmrg ;; 7553549e21daSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554549e21daSmrg if test "X$precious_files_regex" != "X"; then 7555549e21daSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556549e21daSmrg then 7557549e21daSmrg continue 7558549e21daSmrg fi 7559549e21daSmrg fi 75601bedbe3fSmrg func_append removelist " $p" 7561549e21daSmrg ;; 7562549e21daSmrg *) ;; 7563549e21daSmrg esac 7564549e21daSmrg done 7565549e21daSmrg test -n "$removelist" && \ 7566549e21daSmrg func_show_eval "${RM}r \$removelist" 7567549e21daSmrg fi 7568549e21daSmrg 7569549e21daSmrg # Now set the variables for building old libraries. 7570549e21daSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 75711bedbe3fSmrg func_append oldlibs " $output_objdir/$libname.$libext" 7572549e21daSmrg 7573549e21daSmrg # Transform .lo files to .o files. 7574549e21daSmrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575549e21daSmrg fi 7576549e21daSmrg 7577549e21daSmrg # Eliminate all temporary directories. 7578549e21daSmrg #for path in $notinst_path; do 7579549e21daSmrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7580549e21daSmrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7581549e21daSmrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582549e21daSmrg #done 7583549e21daSmrg 7584549e21daSmrg if test -n "$xrpath"; then 7585549e21daSmrg # If the user specified any rpath flags, then add them. 7586549e21daSmrg temp_xrpath= 7587549e21daSmrg for libdir in $xrpath; do 75881bedbe3fSmrg func_replace_sysroot "$libdir" 75891bedbe3fSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7590549e21daSmrg case "$finalize_rpath " in 7591549e21daSmrg *" $libdir "*) ;; 75921bedbe3fSmrg *) func_append finalize_rpath " $libdir" ;; 7593549e21daSmrg esac 7594549e21daSmrg done 7595549e21daSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596549e21daSmrg dependency_libs="$temp_xrpath $dependency_libs" 7597549e21daSmrg fi 7598549e21daSmrg fi 7599549e21daSmrg 7600549e21daSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 7601549e21daSmrg old_dlfiles="$dlfiles" 7602549e21daSmrg dlfiles= 7603549e21daSmrg for lib in $old_dlfiles; do 7604549e21daSmrg case " $dlprefiles $dlfiles " in 7605549e21daSmrg *" $lib "*) ;; 76061bedbe3fSmrg *) func_append dlfiles " $lib" ;; 7607549e21daSmrg esac 7608549e21daSmrg done 7609549e21daSmrg 7610549e21daSmrg # Make sure dlprefiles contains only unique files 7611549e21daSmrg old_dlprefiles="$dlprefiles" 7612549e21daSmrg dlprefiles= 7613549e21daSmrg for lib in $old_dlprefiles; do 7614549e21daSmrg case "$dlprefiles " in 7615549e21daSmrg *" $lib "*) ;; 76161bedbe3fSmrg *) func_append dlprefiles " $lib" ;; 7617549e21daSmrg esac 7618549e21daSmrg done 7619549e21daSmrg 7620549e21daSmrg if test "$build_libtool_libs" = yes; then 7621549e21daSmrg if test -n "$rpath"; then 7622549e21daSmrg case $host in 7623549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624549e21daSmrg # these systems don't actually have a c library (as such)! 7625549e21daSmrg ;; 7626549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7627549e21daSmrg # Rhapsody C library is in the System framework 76281bedbe3fSmrg func_append deplibs " System.ltframework" 7629549e21daSmrg ;; 7630549e21daSmrg *-*-netbsd*) 7631549e21daSmrg # Don't link with libc until the a.out ld.so is fixed. 7632549e21daSmrg ;; 7633549e21daSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634549e21daSmrg # Do not include libc due to us having libc/libc_r. 7635549e21daSmrg ;; 7636549e21daSmrg *-*-sco3.2v5* | *-*-sco5v6*) 7637549e21daSmrg # Causes problems with __ctype 7638549e21daSmrg ;; 7639549e21daSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640549e21daSmrg # Compiler inserts libc in the correct place for threads to work 7641549e21daSmrg ;; 7642549e21daSmrg *) 7643549e21daSmrg # Add libc to deplibs on all other systems if necessary. 7644549e21daSmrg if test "$build_libtool_need_lc" = "yes"; then 76451bedbe3fSmrg func_append deplibs " -lc" 7646549e21daSmrg fi 7647549e21daSmrg ;; 7648549e21daSmrg esac 7649549e21daSmrg fi 7650549e21daSmrg 7651549e21daSmrg # Transform deplibs into only deplibs that can be linked in shared. 7652549e21daSmrg name_save=$name 7653549e21daSmrg libname_save=$libname 7654549e21daSmrg release_save=$release 7655549e21daSmrg versuffix_save=$versuffix 7656549e21daSmrg major_save=$major 7657549e21daSmrg # I'm not sure if I'm treating the release correctly. I think 7658549e21daSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 7659549e21daSmrg # add it in twice. Is that correct? 7660549e21daSmrg release="" 7661549e21daSmrg versuffix="" 7662549e21daSmrg major="" 7663549e21daSmrg newdeplibs= 7664549e21daSmrg droppeddeps=no 7665549e21daSmrg case $deplibs_check_method in 7666549e21daSmrg pass_all) 7667549e21daSmrg # Don't check for shared/static. Everything works. 7668549e21daSmrg # This might be a little naive. We might want to check 7669549e21daSmrg # whether the library exists or not. But this is on 7670549e21daSmrg # osf3 & osf4 and I'm not really sure... Just 7671549e21daSmrg # implementing what was already the behavior. 7672549e21daSmrg newdeplibs=$deplibs 7673549e21daSmrg ;; 7674549e21daSmrg test_compile) 7675549e21daSmrg # This code stresses the "libraries are programs" paradigm to its 7676549e21daSmrg # limits. Maybe even breaks it. We compile a program, linking it 7677549e21daSmrg # against the deplibs as a proxy for the library. Then we can check 7678549e21daSmrg # whether they linked in statically or dynamically with ldd. 7679549e21daSmrg $opt_dry_run || $RM conftest.c 7680549e21daSmrg cat > conftest.c <<EOF 7681549e21daSmrg int main() { return 0; } 7682549e21daSmrgEOF 7683549e21daSmrg $opt_dry_run || $RM conftest 7684549e21daSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685549e21daSmrg ldd_output=`ldd conftest` 7686549e21daSmrg for i in $deplibs; do 7687549e21daSmrg case $i in 7688549e21daSmrg -l*) 7689549e21daSmrg func_stripname -l '' "$i" 7690549e21daSmrg name=$func_stripname_result 7691549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692549e21daSmrg case " $predeps $postdeps " in 7693549e21daSmrg *" $i "*) 76941bedbe3fSmrg func_append newdeplibs " $i" 7695549e21daSmrg i="" 7696549e21daSmrg ;; 7697549e21daSmrg esac 7698549e21daSmrg fi 7699549e21daSmrg if test -n "$i" ; then 7700549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 7701549e21daSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702549e21daSmrg set dummy $deplib_matches; shift 7703549e21daSmrg deplib_match=$1 7704549e21daSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77051bedbe3fSmrg func_append newdeplibs " $i" 7706549e21daSmrg else 7707549e21daSmrg droppeddeps=yes 7708549e21daSmrg echo 7709549e21daSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7710549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 7711549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 7712549e21daSmrg echo "*** shared version of the library, which I believe you do not have" 7713549e21daSmrg echo "*** because a test_compile did reveal that the linker did not use it for" 7714549e21daSmrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715549e21daSmrg fi 7716549e21daSmrg fi 7717549e21daSmrg ;; 7718549e21daSmrg *) 77191bedbe3fSmrg func_append newdeplibs " $i" 7720549e21daSmrg ;; 7721549e21daSmrg esac 7722549e21daSmrg done 7723549e21daSmrg else 7724549e21daSmrg # Error occurred in the first compile. Let's try to salvage 7725549e21daSmrg # the situation: Compile a separate program for each library. 7726549e21daSmrg for i in $deplibs; do 7727549e21daSmrg case $i in 7728549e21daSmrg -l*) 7729549e21daSmrg func_stripname -l '' "$i" 7730549e21daSmrg name=$func_stripname_result 7731549e21daSmrg $opt_dry_run || $RM conftest 7732549e21daSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733549e21daSmrg ldd_output=`ldd conftest` 7734549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735549e21daSmrg case " $predeps $postdeps " in 7736549e21daSmrg *" $i "*) 77371bedbe3fSmrg func_append newdeplibs " $i" 7738549e21daSmrg i="" 7739549e21daSmrg ;; 7740549e21daSmrg esac 7741549e21daSmrg fi 7742549e21daSmrg if test -n "$i" ; then 7743549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 7744549e21daSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745549e21daSmrg set dummy $deplib_matches; shift 7746549e21daSmrg deplib_match=$1 7747549e21daSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77481bedbe3fSmrg func_append newdeplibs " $i" 7749549e21daSmrg else 7750549e21daSmrg droppeddeps=yes 7751549e21daSmrg echo 7752549e21daSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7753549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 7754549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 7755549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 7756549e21daSmrg echo "*** because a test_compile did reveal that the linker did not use this one" 7757549e21daSmrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758549e21daSmrg fi 7759549e21daSmrg fi 7760549e21daSmrg else 7761549e21daSmrg droppeddeps=yes 7762549e21daSmrg echo 7763549e21daSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7764549e21daSmrg echo "*** make it link in! You will probably need to install it or some" 7765549e21daSmrg echo "*** library that it depends on before this library will be fully" 7766549e21daSmrg echo "*** functional. Installing it before continuing would be even better." 7767549e21daSmrg fi 7768549e21daSmrg ;; 7769549e21daSmrg *) 77701bedbe3fSmrg func_append newdeplibs " $i" 7771549e21daSmrg ;; 7772549e21daSmrg esac 7773549e21daSmrg done 7774549e21daSmrg fi 7775549e21daSmrg ;; 7776549e21daSmrg file_magic*) 7777549e21daSmrg set dummy $deplibs_check_method; shift 7778549e21daSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779549e21daSmrg for a_deplib in $deplibs; do 7780549e21daSmrg case $a_deplib in 7781549e21daSmrg -l*) 7782549e21daSmrg func_stripname -l '' "$a_deplib" 7783549e21daSmrg name=$func_stripname_result 7784549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785549e21daSmrg case " $predeps $postdeps " in 7786549e21daSmrg *" $a_deplib "*) 77871bedbe3fSmrg func_append newdeplibs " $a_deplib" 7788549e21daSmrg a_deplib="" 7789549e21daSmrg ;; 7790549e21daSmrg esac 7791549e21daSmrg fi 7792549e21daSmrg if test -n "$a_deplib" ; then 7793549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 77941bedbe3fSmrg if test -n "$file_magic_glob"; then 77951bedbe3fSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 77961bedbe3fSmrg else 77971bedbe3fSmrg libnameglob=$libname 77981bedbe3fSmrg fi 77991bedbe3fSmrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800549e21daSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78011bedbe3fSmrg if test "$want_nocaseglob" = yes; then 78021bedbe3fSmrg shopt -s nocaseglob 78031bedbe3fSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78041bedbe3fSmrg $nocaseglob 78051bedbe3fSmrg else 78061bedbe3fSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78071bedbe3fSmrg fi 7808549e21daSmrg for potent_lib in $potential_libs; do 7809549e21daSmrg # Follow soft links. 7810549e21daSmrg if ls -lLd "$potent_lib" 2>/dev/null | 7811549e21daSmrg $GREP " -> " >/dev/null; then 7812549e21daSmrg continue 7813549e21daSmrg fi 7814549e21daSmrg # The statement above tries to avoid entering an 7815549e21daSmrg # endless loop below, in case of cyclic links. 7816549e21daSmrg # We might still enter an endless loop, since a link 7817549e21daSmrg # loop can be closed while we follow links, 7818549e21daSmrg # but so what? 7819549e21daSmrg potlib="$potent_lib" 7820549e21daSmrg while test -h "$potlib" 2>/dev/null; do 7821549e21daSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822549e21daSmrg case $potliblink in 7823549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 7824549e21daSmrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825549e21daSmrg esac 7826549e21daSmrg done 7827549e21daSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828549e21daSmrg $SED -e 10q | 7829549e21daSmrg $EGREP "$file_magic_regex" > /dev/null; then 78301bedbe3fSmrg func_append newdeplibs " $a_deplib" 7831549e21daSmrg a_deplib="" 7832549e21daSmrg break 2 7833549e21daSmrg fi 7834549e21daSmrg done 7835549e21daSmrg done 7836549e21daSmrg fi 7837549e21daSmrg if test -n "$a_deplib" ; then 7838549e21daSmrg droppeddeps=yes 7839549e21daSmrg echo 7840549e21daSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7841549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 7842549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 7843549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 7844549e21daSmrg echo "*** because I did check the linker path looking for a file starting" 7845549e21daSmrg if test -z "$potlib" ; then 7846549e21daSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847549e21daSmrg else 7848549e21daSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7849549e21daSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 7850549e21daSmrg fi 7851549e21daSmrg fi 7852549e21daSmrg ;; 7853549e21daSmrg *) 7854549e21daSmrg # Add a -L argument. 78551bedbe3fSmrg func_append newdeplibs " $a_deplib" 7856549e21daSmrg ;; 7857549e21daSmrg esac 7858549e21daSmrg done # Gone through all deplibs. 7859549e21daSmrg ;; 7860549e21daSmrg match_pattern*) 7861549e21daSmrg set dummy $deplibs_check_method; shift 7862549e21daSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863549e21daSmrg for a_deplib in $deplibs; do 7864549e21daSmrg case $a_deplib in 7865549e21daSmrg -l*) 7866549e21daSmrg func_stripname -l '' "$a_deplib" 7867549e21daSmrg name=$func_stripname_result 7868549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869549e21daSmrg case " $predeps $postdeps " in 7870549e21daSmrg *" $a_deplib "*) 78711bedbe3fSmrg func_append newdeplibs " $a_deplib" 7872549e21daSmrg a_deplib="" 7873549e21daSmrg ;; 7874549e21daSmrg esac 7875549e21daSmrg fi 7876549e21daSmrg if test -n "$a_deplib" ; then 7877549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 7878549e21daSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879549e21daSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880549e21daSmrg for potent_lib in $potential_libs; do 7881549e21daSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 7882549e21daSmrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883549e21daSmrg $EGREP "$match_pattern_regex" > /dev/null; then 78841bedbe3fSmrg func_append newdeplibs " $a_deplib" 7885549e21daSmrg a_deplib="" 7886549e21daSmrg break 2 7887549e21daSmrg fi 7888549e21daSmrg done 7889549e21daSmrg done 7890549e21daSmrg fi 7891549e21daSmrg if test -n "$a_deplib" ; then 7892549e21daSmrg droppeddeps=yes 7893549e21daSmrg echo 7894549e21daSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7895549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 7896549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 7897549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 7898549e21daSmrg echo "*** because I did check the linker path looking for a file starting" 7899549e21daSmrg if test -z "$potlib" ; then 7900549e21daSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901549e21daSmrg else 7902549e21daSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7903549e21daSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904549e21daSmrg fi 7905549e21daSmrg fi 7906549e21daSmrg ;; 7907549e21daSmrg *) 7908549e21daSmrg # Add a -L argument. 79091bedbe3fSmrg func_append newdeplibs " $a_deplib" 7910549e21daSmrg ;; 7911549e21daSmrg esac 7912549e21daSmrg done # Gone through all deplibs. 7913549e21daSmrg ;; 7914549e21daSmrg none | unknown | *) 7915549e21daSmrg newdeplibs="" 7916549e21daSmrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918549e21daSmrg for i in $predeps $postdeps ; do 7919549e21daSmrg # can't use Xsed below, because $i might contain '/' 7920549e21daSmrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921549e21daSmrg done 7922549e21daSmrg fi 7923549e21daSmrg case $tmp_deplibs in 7924549e21daSmrg *[!\ \ ]*) 7925549e21daSmrg echo 7926549e21daSmrg if test "X$deplibs_check_method" = "Xnone"; then 7927549e21daSmrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7928549e21daSmrg else 7929549e21daSmrg echo "*** Warning: inter-library dependencies are not known to be supported." 7930549e21daSmrg fi 7931549e21daSmrg echo "*** All declared inter-library dependencies are being dropped." 7932549e21daSmrg droppeddeps=yes 7933549e21daSmrg ;; 7934549e21daSmrg esac 7935549e21daSmrg ;; 7936549e21daSmrg esac 7937549e21daSmrg versuffix=$versuffix_save 7938549e21daSmrg major=$major_save 7939549e21daSmrg release=$release_save 7940549e21daSmrg libname=$libname_save 7941549e21daSmrg name=$name_save 7942549e21daSmrg 7943549e21daSmrg case $host in 7944549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7945549e21daSmrg # On Rhapsody replace the C library with the System framework 7946549e21daSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947549e21daSmrg ;; 7948549e21daSmrg esac 7949549e21daSmrg 7950549e21daSmrg if test "$droppeddeps" = yes; then 7951549e21daSmrg if test "$module" = yes; then 7952549e21daSmrg echo 7953549e21daSmrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7954549e21daSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7955549e21daSmrg echo "*** a static module, that should work as long as the dlopening" 7956549e21daSmrg echo "*** application is linked with the -dlopen flag." 7957549e21daSmrg if test -z "$global_symbol_pipe"; then 7958549e21daSmrg echo 7959549e21daSmrg echo "*** However, this would only work if libtool was able to extract symbol" 7960549e21daSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7961549e21daSmrg echo "*** not find such a program. So, this module is probably useless." 7962549e21daSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963549e21daSmrg fi 7964549e21daSmrg if test "$build_old_libs" = no; then 7965549e21daSmrg oldlibs="$output_objdir/$libname.$libext" 7966549e21daSmrg build_libtool_libs=module 7967549e21daSmrg build_old_libs=yes 7968549e21daSmrg else 7969549e21daSmrg build_libtool_libs=no 7970549e21daSmrg fi 7971549e21daSmrg else 7972549e21daSmrg echo "*** The inter-library dependencies that have been dropped here will be" 7973549e21daSmrg echo "*** automatically added whenever a program is linked with this library" 7974549e21daSmrg echo "*** or is declared to -dlopen it." 7975549e21daSmrg 7976549e21daSmrg if test "$allow_undefined" = no; then 7977549e21daSmrg echo 7978549e21daSmrg echo "*** Since this library must not contain undefined symbols," 7979549e21daSmrg echo "*** because either the platform does not support them or" 7980549e21daSmrg echo "*** it was explicitly requested with -no-undefined," 7981549e21daSmrg echo "*** libtool will only create a static version of it." 7982549e21daSmrg if test "$build_old_libs" = no; then 7983549e21daSmrg oldlibs="$output_objdir/$libname.$libext" 7984549e21daSmrg build_libtool_libs=module 7985549e21daSmrg build_old_libs=yes 7986549e21daSmrg else 7987549e21daSmrg build_libtool_libs=no 7988549e21daSmrg fi 7989549e21daSmrg fi 7990549e21daSmrg fi 7991549e21daSmrg fi 7992549e21daSmrg # Done checking deplibs! 7993549e21daSmrg deplibs=$newdeplibs 7994549e21daSmrg fi 7995549e21daSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996549e21daSmrg case $host in 7997549e21daSmrg *-*-darwin*) 7998549e21daSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7999549e21daSmrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8000549e21daSmrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001549e21daSmrg ;; 8002549e21daSmrg esac 8003549e21daSmrg 8004549e21daSmrg # move library search paths that coincide with paths to not yet 8005549e21daSmrg # installed libraries to the beginning of the library search list 8006549e21daSmrg new_libs= 8007549e21daSmrg for path in $notinst_path; do 8008549e21daSmrg case " $new_libs " in 8009549e21daSmrg *" -L$path/$objdir "*) ;; 8010549e21daSmrg *) 8011549e21daSmrg case " $deplibs " in 8012549e21daSmrg *" -L$path/$objdir "*) 80131bedbe3fSmrg func_append new_libs " -L$path/$objdir" ;; 8014549e21daSmrg esac 8015549e21daSmrg ;; 8016549e21daSmrg esac 8017549e21daSmrg done 8018549e21daSmrg for deplib in $deplibs; do 8019549e21daSmrg case $deplib in 8020549e21daSmrg -L*) 8021549e21daSmrg case " $new_libs " in 8022549e21daSmrg *" $deplib "*) ;; 80231bedbe3fSmrg *) func_append new_libs " $deplib" ;; 8024549e21daSmrg esac 8025549e21daSmrg ;; 80261bedbe3fSmrg *) func_append new_libs " $deplib" ;; 8027549e21daSmrg esac 8028549e21daSmrg done 8029549e21daSmrg deplibs="$new_libs" 8030549e21daSmrg 8031549e21daSmrg # All the library-specific variables (install_libdir is set above). 8032549e21daSmrg library_names= 8033549e21daSmrg old_library= 8034549e21daSmrg dlname= 8035ba6a1819Smrg 8036549e21daSmrg # Test again, we may have decided not to build it any more 8037549e21daSmrg if test "$build_libtool_libs" = yes; then 80381bedbe3fSmrg # Remove ${wl} instances when linking with ld. 80391bedbe3fSmrg # FIXME: should test the right _cmds variable. 80401bedbe3fSmrg case $archive_cmds in 80411bedbe3fSmrg *\$LD\ *) wl= ;; 80421bedbe3fSmrg esac 8043549e21daSmrg if test "$hardcode_into_libs" = yes; then 8044549e21daSmrg # Hardcode the library paths 8045549e21daSmrg hardcode_libdirs= 8046549e21daSmrg dep_rpath= 8047549e21daSmrg rpath="$finalize_rpath" 80481bedbe3fSmrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049549e21daSmrg for libdir in $rpath; do 8050549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 8051549e21daSmrg if test -n "$hardcode_libdir_separator"; then 80521bedbe3fSmrg func_replace_sysroot "$libdir" 80531bedbe3fSmrg libdir=$func_replace_sysroot_result 8054549e21daSmrg if test -z "$hardcode_libdirs"; then 8055549e21daSmrg hardcode_libdirs="$libdir" 8056549e21daSmrg else 8057549e21daSmrg # Just accumulate the unique libdirs. 8058549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060549e21daSmrg ;; 8061549e21daSmrg *) 80621bedbe3fSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063549e21daSmrg ;; 8064549e21daSmrg esac 8065549e21daSmrg fi 8066549e21daSmrg else 8067549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 80681bedbe3fSmrg func_append dep_rpath " $flag" 8069549e21daSmrg fi 8070549e21daSmrg elif test -n "$runpath_var"; then 8071549e21daSmrg case "$perm_rpath " in 8072549e21daSmrg *" $libdir "*) ;; 80731bedbe3fSmrg *) func_append perm_rpath " $libdir" ;; 8074549e21daSmrg esac 8075549e21daSmrg fi 8076549e21daSmrg done 8077549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 8078549e21daSmrg if test -n "$hardcode_libdir_separator" && 8079549e21daSmrg test -n "$hardcode_libdirs"; then 8080549e21daSmrg libdir="$hardcode_libdirs" 80811bedbe3fSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082549e21daSmrg fi 8083549e21daSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084549e21daSmrg # We should set the runpath_var. 8085549e21daSmrg rpath= 8086549e21daSmrg for dir in $perm_rpath; do 80871bedbe3fSmrg func_append rpath "$dir:" 8088549e21daSmrg done 8089549e21daSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090549e21daSmrg fi 8091549e21daSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092549e21daSmrg fi 8093ba6a1819Smrg 8094549e21daSmrg shlibpath="$finalize_shlibpath" 80951bedbe3fSmrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096549e21daSmrg if test -n "$shlibpath"; then 8097549e21daSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098549e21daSmrg fi 8099ba6a1819Smrg 8100549e21daSmrg # Get the real and link names of the library. 8101549e21daSmrg eval shared_ext=\"$shrext_cmds\" 8102549e21daSmrg eval library_names=\"$library_names_spec\" 8103549e21daSmrg set dummy $library_names 8104549e21daSmrg shift 8105549e21daSmrg realname="$1" 8106549e21daSmrg shift 8107ba6a1819Smrg 8108549e21daSmrg if test -n "$soname_spec"; then 8109549e21daSmrg eval soname=\"$soname_spec\" 8110549e21daSmrg else 8111549e21daSmrg soname="$realname" 8112549e21daSmrg fi 8113549e21daSmrg if test -z "$dlname"; then 8114549e21daSmrg dlname=$soname 8115549e21daSmrg fi 8116ba6a1819Smrg 8117549e21daSmrg lib="$output_objdir/$realname" 8118549e21daSmrg linknames= 8119549e21daSmrg for link 8120549e21daSmrg do 81211bedbe3fSmrg func_append linknames " $link" 8122549e21daSmrg done 8123ba6a1819Smrg 8124549e21daSmrg # Use standard objects if they are pic 8125549e21daSmrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126549e21daSmrg test "X$libobjs" = "X " && libobjs= 8127ba6a1819Smrg 8128549e21daSmrg delfiles= 8129549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130549e21daSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131549e21daSmrg export_symbols="$output_objdir/$libname.uexp" 81321bedbe3fSmrg func_append delfiles " $export_symbols" 8133549e21daSmrg fi 8134ba6a1819Smrg 8135549e21daSmrg orig_export_symbols= 8136549e21daSmrg case $host_os in 8137549e21daSmrg cygwin* | mingw* | cegcc*) 8138549e21daSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139549e21daSmrg # exporting using user supplied symfile 8140549e21daSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141549e21daSmrg # and it's NOT already a .def file. Must figure out 8142549e21daSmrg # which of the given symbols are data symbols and tag 8143549e21daSmrg # them as such. So, trigger use of export_symbols_cmds. 8144549e21daSmrg # export_symbols gets reassigned inside the "prepare 8145549e21daSmrg # the list of exported symbols" if statement, so the 8146549e21daSmrg # include_expsyms logic still works. 8147549e21daSmrg orig_export_symbols="$export_symbols" 8148549e21daSmrg export_symbols= 8149549e21daSmrg always_export_symbols=yes 8150549e21daSmrg fi 8151549e21daSmrg fi 8152549e21daSmrg ;; 8153549e21daSmrg esac 8154ba6a1819Smrg 8155549e21daSmrg # Prepare the list of exported symbols 8156549e21daSmrg if test -z "$export_symbols"; then 8157549e21daSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158549e21daSmrg func_verbose "generating symbol list for \`$libname.la'" 8159549e21daSmrg export_symbols="$output_objdir/$libname.exp" 8160549e21daSmrg $opt_dry_run || $RM $export_symbols 8161549e21daSmrg cmds=$export_symbols_cmds 8162549e21daSmrg save_ifs="$IFS"; IFS='~' 81631bedbe3fSmrg for cmd1 in $cmds; do 8164549e21daSmrg IFS="$save_ifs" 81651bedbe3fSmrg # Take the normal branch if the nm_file_list_spec branch 81661bedbe3fSmrg # doesn't work or if tool conversion is not needed. 81671bedbe3fSmrg case $nm_file_list_spec~$to_tool_file_cmd in 81681bedbe3fSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 81691bedbe3fSmrg try_normal_branch=yes 81701bedbe3fSmrg eval cmd=\"$cmd1\" 81711bedbe3fSmrg func_len " $cmd" 81721bedbe3fSmrg len=$func_len_result 81731bedbe3fSmrg ;; 81741bedbe3fSmrg *) 81751bedbe3fSmrg try_normal_branch=no 81761bedbe3fSmrg ;; 81771bedbe3fSmrg esac 81781bedbe3fSmrg if test "$try_normal_branch" = yes \ 81791bedbe3fSmrg && { test "$len" -lt "$max_cmd_len" \ 81801bedbe3fSmrg || test "$max_cmd_len" -le -1; } 81811bedbe3fSmrg then 81821bedbe3fSmrg func_show_eval "$cmd" 'exit $?' 81831bedbe3fSmrg skipped_export=false 81841bedbe3fSmrg elif test -n "$nm_file_list_spec"; then 81851bedbe3fSmrg func_basename "$output" 81861bedbe3fSmrg output_la=$func_basename_result 81871bedbe3fSmrg save_libobjs=$libobjs 81881bedbe3fSmrg save_output=$output 81891bedbe3fSmrg output=${output_objdir}/${output_la}.nm 81901bedbe3fSmrg func_to_tool_file "$output" 81911bedbe3fSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 81921bedbe3fSmrg func_append delfiles " $output" 81931bedbe3fSmrg func_verbose "creating $NM input file list: $output" 81941bedbe3fSmrg for obj in $save_libobjs; do 81951bedbe3fSmrg func_to_tool_file "$obj" 81961bedbe3fSmrg $ECHO "$func_to_tool_file_result" 81971bedbe3fSmrg done > "$output" 81981bedbe3fSmrg eval cmd=\"$cmd1\" 8199549e21daSmrg func_show_eval "$cmd" 'exit $?' 82001bedbe3fSmrg output=$save_output 82011bedbe3fSmrg libobjs=$save_libobjs 8202549e21daSmrg skipped_export=false 8203549e21daSmrg else 8204549e21daSmrg # The command line is too long to execute in one step. 8205549e21daSmrg func_verbose "using reloadable object file for export list..." 8206549e21daSmrg skipped_export=: 8207549e21daSmrg # Break out early, otherwise skipped_export may be 8208549e21daSmrg # set to false by a later but shorter cmd. 8209549e21daSmrg break 8210549e21daSmrg fi 8211549e21daSmrg done 8212549e21daSmrg IFS="$save_ifs" 8213549e21daSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214549e21daSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215549e21daSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216549e21daSmrg fi 8217549e21daSmrg fi 8218549e21daSmrg fi 8219ba6a1819Smrg 8220549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221549e21daSmrg tmp_export_symbols="$export_symbols" 8222549e21daSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8223549e21daSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224549e21daSmrg fi 8225ba6a1819Smrg 8226549e21daSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227549e21daSmrg # The given exports_symbols file has to be filtered, so filter it. 8228549e21daSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229549e21daSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230549e21daSmrg # 's' commands which not all seds can handle. GNU sed should be fine 8231549e21daSmrg # though. Also, the filter scales superlinearly with the number of 8232549e21daSmrg # global variables. join(1) would be nice here, but unfortunately 8233549e21daSmrg # isn't a blessed tool. 8234549e21daSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 82351bedbe3fSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236549e21daSmrg export_symbols=$output_objdir/$libname.def 8237549e21daSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238ba6a1819Smrg fi 8239ba6a1819Smrg 8240549e21daSmrg tmp_deplibs= 8241549e21daSmrg for test_deplib in $deplibs; do 8242549e21daSmrg case " $convenience " in 8243549e21daSmrg *" $test_deplib "*) ;; 8244549e21daSmrg *) 82451bedbe3fSmrg func_append tmp_deplibs " $test_deplib" 8246549e21daSmrg ;; 8247549e21daSmrg esac 8248549e21daSmrg done 8249549e21daSmrg deplibs="$tmp_deplibs" 8250ba6a1819Smrg 8251549e21daSmrg if test -n "$convenience"; then 8252549e21daSmrg if test -n "$whole_archive_flag_spec" && 8253549e21daSmrg test "$compiler_needs_object" = yes && 8254549e21daSmrg test -z "$libobjs"; then 8255549e21daSmrg # extract the archives, so we have objects to list. 8256549e21daSmrg # TODO: could optimize this to just extract one archive. 8257549e21daSmrg whole_archive_flag_spec= 8258549e21daSmrg fi 8259549e21daSmrg if test -n "$whole_archive_flag_spec"; then 8260549e21daSmrg save_libobjs=$libobjs 8261549e21daSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262549e21daSmrg test "X$libobjs" = "X " && libobjs= 8263549e21daSmrg else 8264549e21daSmrg gentop="$output_objdir/${outputname}x" 82651bedbe3fSmrg func_append generated " $gentop" 8266ba6a1819Smrg 8267549e21daSmrg func_extract_archives $gentop $convenience 82681bedbe3fSmrg func_append libobjs " $func_extract_archives_result" 8269549e21daSmrg test "X$libobjs" = "X " && libobjs= 8270549e21daSmrg fi 8271549e21daSmrg fi 8272ba6a1819Smrg 8273549e21daSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274549e21daSmrg eval flag=\"$thread_safe_flag_spec\" 82751bedbe3fSmrg func_append linker_flags " $flag" 8276549e21daSmrg fi 8277ba6a1819Smrg 8278549e21daSmrg # Make a backup of the uninstalled library when relinking 82791bedbe3fSmrg if test "$opt_mode" = relink; then 8280549e21daSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281ba6a1819Smrg fi 8282ba6a1819Smrg 8283549e21daSmrg # Do each of the archive commands. 8284549e21daSmrg if test "$module" = yes && test -n "$module_cmds" ; then 8285549e21daSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286549e21daSmrg eval test_cmds=\"$module_expsym_cmds\" 8287549e21daSmrg cmds=$module_expsym_cmds 8288549e21daSmrg else 8289549e21daSmrg eval test_cmds=\"$module_cmds\" 8290549e21daSmrg cmds=$module_cmds 8291549e21daSmrg fi 8292549e21daSmrg else 8293549e21daSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294549e21daSmrg eval test_cmds=\"$archive_expsym_cmds\" 8295549e21daSmrg cmds=$archive_expsym_cmds 8296549e21daSmrg else 8297549e21daSmrg eval test_cmds=\"$archive_cmds\" 8298549e21daSmrg cmds=$archive_cmds 8299549e21daSmrg fi 8300ba6a1819Smrg fi 8301ba6a1819Smrg 8302549e21daSmrg if test "X$skipped_export" != "X:" && 8303549e21daSmrg func_len " $test_cmds" && 8304549e21daSmrg len=$func_len_result && 8305549e21daSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306549e21daSmrg : 8307549e21daSmrg else 8308549e21daSmrg # The command line is too long to link in one step, link piecewise 8309549e21daSmrg # or, if using GNU ld and skipped_export is not :, use a linker 8310549e21daSmrg # script. 8311ba6a1819Smrg 8312549e21daSmrg # Save the value of $output and $libobjs because we want to 8313549e21daSmrg # use them later. If we have whole_archive_flag_spec, we 8314549e21daSmrg # want to use save_libobjs as it was before 8315549e21daSmrg # whole_archive_flag_spec was expanded, because we can't 8316549e21daSmrg # assume the linker understands whole_archive_flag_spec. 8317549e21daSmrg # This may have to be revisited, in case too many 8318549e21daSmrg # convenience libraries get linked in and end up exceeding 8319549e21daSmrg # the spec. 8320549e21daSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321549e21daSmrg save_libobjs=$libobjs 8322549e21daSmrg fi 8323549e21daSmrg save_output=$output 8324549e21daSmrg func_basename "$output" 8325549e21daSmrg output_la=$func_basename_result 8326ba6a1819Smrg 8327549e21daSmrg # Clear the reloadable object creation command queue and 8328549e21daSmrg # initialize k to one. 8329549e21daSmrg test_cmds= 8330549e21daSmrg concat_cmds= 8331549e21daSmrg objlist= 8332549e21daSmrg last_robj= 8333549e21daSmrg k=1 8334549e21daSmrg 8335549e21daSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336549e21daSmrg output=${output_objdir}/${output_la}.lnkscript 8337549e21daSmrg func_verbose "creating GNU ld script: $output" 8338549e21daSmrg echo 'INPUT (' > $output 8339549e21daSmrg for obj in $save_libobjs 8340549e21daSmrg do 83411bedbe3fSmrg func_to_tool_file "$obj" 83421bedbe3fSmrg $ECHO "$func_to_tool_file_result" >> $output 8343549e21daSmrg done 8344549e21daSmrg echo ')' >> $output 83451bedbe3fSmrg func_append delfiles " $output" 83461bedbe3fSmrg func_to_tool_file "$output" 83471bedbe3fSmrg output=$func_to_tool_file_result 8348549e21daSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349549e21daSmrg output=${output_objdir}/${output_la}.lnk 8350549e21daSmrg func_verbose "creating linker input file list: $output" 8351549e21daSmrg : > $output 8352549e21daSmrg set x $save_libobjs 8353549e21daSmrg shift 8354549e21daSmrg firstobj= 8355549e21daSmrg if test "$compiler_needs_object" = yes; then 8356549e21daSmrg firstobj="$1 " 8357549e21daSmrg shift 8358549e21daSmrg fi 8359549e21daSmrg for obj 8360549e21daSmrg do 83611bedbe3fSmrg func_to_tool_file "$obj" 83621bedbe3fSmrg $ECHO "$func_to_tool_file_result" >> $output 8363549e21daSmrg done 83641bedbe3fSmrg func_append delfiles " $output" 83651bedbe3fSmrg func_to_tool_file "$output" 83661bedbe3fSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367549e21daSmrg else 8368549e21daSmrg if test -n "$save_libobjs"; then 8369549e21daSmrg func_verbose "creating reloadable object files..." 8370549e21daSmrg output=$output_objdir/$output_la-${k}.$objext 8371549e21daSmrg eval test_cmds=\"$reload_cmds\" 8372549e21daSmrg func_len " $test_cmds" 8373549e21daSmrg len0=$func_len_result 8374549e21daSmrg len=$len0 8375549e21daSmrg 8376549e21daSmrg # Loop over the list of objects to be linked. 8377549e21daSmrg for obj in $save_libobjs 8378549e21daSmrg do 8379549e21daSmrg func_len " $obj" 8380549e21daSmrg func_arith $len + $func_len_result 8381549e21daSmrg len=$func_arith_result 8382549e21daSmrg if test "X$objlist" = X || 8383549e21daSmrg test "$len" -lt "$max_cmd_len"; then 8384549e21daSmrg func_append objlist " $obj" 8385549e21daSmrg else 8386549e21daSmrg # The command $test_cmds is almost too long, add a 8387549e21daSmrg # command to the queue. 8388549e21daSmrg if test "$k" -eq 1 ; then 8389549e21daSmrg # The first file doesn't have a previous command to add. 8390549e21daSmrg reload_objs=$objlist 8391549e21daSmrg eval concat_cmds=\"$reload_cmds\" 8392549e21daSmrg else 8393549e21daSmrg # All subsequent reloadable object files will link in 8394549e21daSmrg # the last one created. 8395549e21daSmrg reload_objs="$objlist $last_robj" 8396549e21daSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397549e21daSmrg fi 8398549e21daSmrg last_robj=$output_objdir/$output_la-${k}.$objext 8399549e21daSmrg func_arith $k + 1 8400549e21daSmrg k=$func_arith_result 8401549e21daSmrg output=$output_objdir/$output_la-${k}.$objext 8402549e21daSmrg objlist=" $obj" 8403549e21daSmrg func_len " $last_robj" 8404549e21daSmrg func_arith $len0 + $func_len_result 8405549e21daSmrg len=$func_arith_result 8406549e21daSmrg fi 8407549e21daSmrg done 8408549e21daSmrg # Handle the remaining objects by creating one last 8409549e21daSmrg # reloadable object file. All subsequent reloadable object 8410549e21daSmrg # files will link in the last one created. 8411549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8412549e21daSmrg reload_objs="$objlist $last_robj" 8413549e21daSmrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414549e21daSmrg if test -n "$last_robj"; then 8415549e21daSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416549e21daSmrg fi 84171bedbe3fSmrg func_append delfiles " $output" 8418ba6a1819Smrg 8419549e21daSmrg else 8420549e21daSmrg output= 8421549e21daSmrg fi 8422ba6a1819Smrg 8423549e21daSmrg if ${skipped_export-false}; then 8424549e21daSmrg func_verbose "generating symbol list for \`$libname.la'" 8425549e21daSmrg export_symbols="$output_objdir/$libname.exp" 8426549e21daSmrg $opt_dry_run || $RM $export_symbols 8427549e21daSmrg libobjs=$output 8428549e21daSmrg # Append the command to create the export file. 8429549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430549e21daSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431549e21daSmrg if test -n "$last_robj"; then 8432549e21daSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433549e21daSmrg fi 8434549e21daSmrg fi 8435ba6a1819Smrg 8436549e21daSmrg test -n "$save_libobjs" && 8437549e21daSmrg func_verbose "creating a temporary reloadable object file: $output" 8438ba6a1819Smrg 8439549e21daSmrg # Loop through the commands generated above and execute them. 8440549e21daSmrg save_ifs="$IFS"; IFS='~' 8441549e21daSmrg for cmd in $concat_cmds; do 8442549e21daSmrg IFS="$save_ifs" 8443549e21daSmrg $opt_silent || { 8444549e21daSmrg func_quote_for_expand "$cmd" 8445549e21daSmrg eval "func_echo $func_quote_for_expand_result" 8446549e21daSmrg } 8447549e21daSmrg $opt_dry_run || eval "$cmd" || { 8448549e21daSmrg lt_exit=$? 8449549e21daSmrg 8450549e21daSmrg # Restore the uninstalled library and exit 84511bedbe3fSmrg if test "$opt_mode" = relink; then 8452549e21daSmrg ( cd "$output_objdir" && \ 8453549e21daSmrg $RM "${realname}T" && \ 8454549e21daSmrg $MV "${realname}U" "$realname" ) 8455549e21daSmrg fi 8456ba6a1819Smrg 8457549e21daSmrg exit $lt_exit 8458549e21daSmrg } 8459549e21daSmrg done 8460549e21daSmrg IFS="$save_ifs" 8461ba6a1819Smrg 8462549e21daSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463549e21daSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464549e21daSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8465ba6a1819Smrg fi 8466ba6a1819Smrg fi 8467ba6a1819Smrg 8468549e21daSmrg if ${skipped_export-false}; then 8469549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470549e21daSmrg tmp_export_symbols="$export_symbols" 8471549e21daSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8472549e21daSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473549e21daSmrg fi 8474ba6a1819Smrg 8475549e21daSmrg if test -n "$orig_export_symbols"; then 8476549e21daSmrg # The given exports_symbols file has to be filtered, so filter it. 8477549e21daSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478549e21daSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479549e21daSmrg # 's' commands which not all seds can handle. GNU sed should be fine 8480549e21daSmrg # though. Also, the filter scales superlinearly with the number of 8481549e21daSmrg # global variables. join(1) would be nice here, but unfortunately 8482549e21daSmrg # isn't a blessed tool. 8483549e21daSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 84841bedbe3fSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485549e21daSmrg export_symbols=$output_objdir/$libname.def 8486549e21daSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487549e21daSmrg fi 8488549e21daSmrg fi 8489ba6a1819Smrg 8490549e21daSmrg libobjs=$output 8491549e21daSmrg # Restore the value of output. 8492549e21daSmrg output=$save_output 8493ba6a1819Smrg 8494549e21daSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495549e21daSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496549e21daSmrg test "X$libobjs" = "X " && libobjs= 8497549e21daSmrg fi 8498549e21daSmrg # Expand the library linking commands again to reset the 8499549e21daSmrg # value of $libobjs for piecewise linking. 8500549e21daSmrg 8501549e21daSmrg # Do each of the archive commands. 8502549e21daSmrg if test "$module" = yes && test -n "$module_cmds" ; then 8503549e21daSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504549e21daSmrg cmds=$module_expsym_cmds 8505ba6a1819Smrg else 8506549e21daSmrg cmds=$module_cmds 8507ba6a1819Smrg fi 8508ba6a1819Smrg else 8509549e21daSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510549e21daSmrg cmds=$archive_expsym_cmds 8511549e21daSmrg else 8512549e21daSmrg cmds=$archive_cmds 8513549e21daSmrg fi 8514ba6a1819Smrg fi 8515ba6a1819Smrg fi 8516ba6a1819Smrg 8517549e21daSmrg if test -n "$delfiles"; then 8518549e21daSmrg # Append the command to remove temporary files to $cmds. 8519549e21daSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 8520549e21daSmrg fi 8521ba6a1819Smrg 8522549e21daSmrg # Add any objects from preloaded convenience libraries 8523549e21daSmrg if test -n "$dlprefiles"; then 8524549e21daSmrg gentop="$output_objdir/${outputname}x" 85251bedbe3fSmrg func_append generated " $gentop" 8526ba6a1819Smrg 8527549e21daSmrg func_extract_archives $gentop $dlprefiles 85281bedbe3fSmrg func_append libobjs " $func_extract_archives_result" 8529549e21daSmrg test "X$libobjs" = "X " && libobjs= 8530ba6a1819Smrg fi 8531ba6a1819Smrg 8532549e21daSmrg save_ifs="$IFS"; IFS='~' 8533549e21daSmrg for cmd in $cmds; do 8534549e21daSmrg IFS="$save_ifs" 8535549e21daSmrg eval cmd=\"$cmd\" 8536549e21daSmrg $opt_silent || { 8537549e21daSmrg func_quote_for_expand "$cmd" 8538549e21daSmrg eval "func_echo $func_quote_for_expand_result" 8539549e21daSmrg } 8540549e21daSmrg $opt_dry_run || eval "$cmd" || { 8541549e21daSmrg lt_exit=$? 8542ba6a1819Smrg 8543549e21daSmrg # Restore the uninstalled library and exit 85441bedbe3fSmrg if test "$opt_mode" = relink; then 8545549e21daSmrg ( cd "$output_objdir" && \ 8546549e21daSmrg $RM "${realname}T" && \ 8547549e21daSmrg $MV "${realname}U" "$realname" ) 8548ba6a1819Smrg fi 8549ba6a1819Smrg 8550549e21daSmrg exit $lt_exit 8551549e21daSmrg } 8552549e21daSmrg done 8553549e21daSmrg IFS="$save_ifs" 8554ba6a1819Smrg 8555549e21daSmrg # Restore the uninstalled library and exit 85561bedbe3fSmrg if test "$opt_mode" = relink; then 8557549e21daSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558ba6a1819Smrg 8559549e21daSmrg if test -n "$convenience"; then 8560549e21daSmrg if test -z "$whole_archive_flag_spec"; then 8561549e21daSmrg func_show_eval '${RM}r "$gentop"' 8562549e21daSmrg fi 8563549e21daSmrg fi 8564ba6a1819Smrg 8565549e21daSmrg exit $EXIT_SUCCESS 8566549e21daSmrg fi 8567ba6a1819Smrg 8568549e21daSmrg # Create links to the real library. 8569549e21daSmrg for linkname in $linknames; do 8570549e21daSmrg if test "$realname" != "$linkname"; then 8571549e21daSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8572ba6a1819Smrg fi 8573ba6a1819Smrg done 8574549e21daSmrg 8575549e21daSmrg # If -module or -export-dynamic was specified, set the dlname. 8576549e21daSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 8577549e21daSmrg # On all known operating systems, these are identical. 8578549e21daSmrg dlname="$soname" 8579549e21daSmrg fi 8580ba6a1819Smrg fi 8581ba6a1819Smrg ;; 8582ba6a1819Smrg 8583549e21daSmrg obj) 8584549e21daSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585549e21daSmrg func_warning "\`-dlopen' is ignored for objects" 8586549e21daSmrg fi 8587ba6a1819Smrg 8588549e21daSmrg case " $deplibs" in 8589549e21daSmrg *\ -l* | *\ -L*) 8590549e21daSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 8591ba6a1819Smrg esac 8592ba6a1819Smrg 8593549e21daSmrg test -n "$rpath" && \ 8594549e21daSmrg func_warning "\`-rpath' is ignored for objects" 8595ba6a1819Smrg 8596549e21daSmrg test -n "$xrpath" && \ 8597549e21daSmrg func_warning "\`-R' is ignored for objects" 8598ba6a1819Smrg 8599549e21daSmrg test -n "$vinfo" && \ 8600549e21daSmrg func_warning "\`-version-info' is ignored for objects" 8601549e21daSmrg 8602549e21daSmrg test -n "$release" && \ 8603549e21daSmrg func_warning "\`-release' is ignored for objects" 8604549e21daSmrg 8605549e21daSmrg case $output in 8606549e21daSmrg *.lo) 8607549e21daSmrg test -n "$objs$old_deplibs" && \ 8608549e21daSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609549e21daSmrg 8610549e21daSmrg libobj=$output 8611549e21daSmrg func_lo2o "$libobj" 8612549e21daSmrg obj=$func_lo2o_result 8613ba6a1819Smrg ;; 8614ba6a1819Smrg *) 8615549e21daSmrg libobj= 8616549e21daSmrg obj="$output" 8617ba6a1819Smrg ;; 8618ba6a1819Smrg esac 8619ba6a1819Smrg 8620549e21daSmrg # Delete the old objects. 8621549e21daSmrg $opt_dry_run || $RM $obj $libobj 8622ba6a1819Smrg 8623549e21daSmrg # Objects from convenience libraries. This assumes 8624549e21daSmrg # single-version convenience libraries. Whenever we create 8625549e21daSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 8626549e21daSmrg # the extraction. 8627549e21daSmrg reload_conv_objs= 8628549e21daSmrg gentop= 8629549e21daSmrg # reload_cmds runs $LD directly, so let us get rid of 8630549e21daSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 8631549e21daSmrg # turning comma into space.. 8632549e21daSmrg wl= 8633ba6a1819Smrg 8634549e21daSmrg if test -n "$convenience"; then 8635549e21daSmrg if test -n "$whole_archive_flag_spec"; then 8636549e21daSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 8637549e21daSmrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638549e21daSmrg else 8639549e21daSmrg gentop="$output_objdir/${obj}x" 86401bedbe3fSmrg func_append generated " $gentop" 8641ba6a1819Smrg 8642549e21daSmrg func_extract_archives $gentop $convenience 8643549e21daSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644549e21daSmrg fi 8645ba6a1819Smrg fi 8646ba6a1819Smrg 86471bedbe3fSmrg # If we're not building shared, we need to use non_pic_objs 86481bedbe3fSmrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 86491bedbe3fSmrg 8650549e21daSmrg # Create the old-style object. 8651549e21daSmrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8652ba6a1819Smrg 8653549e21daSmrg output="$obj" 8654549e21daSmrg func_execute_cmds "$reload_cmds" 'exit $?' 8655ba6a1819Smrg 8656549e21daSmrg # Exit if we aren't doing a library object file. 8657549e21daSmrg if test -z "$libobj"; then 8658549e21daSmrg if test -n "$gentop"; then 8659549e21daSmrg func_show_eval '${RM}r "$gentop"' 8660549e21daSmrg fi 8661549e21daSmrg 8662549e21daSmrg exit $EXIT_SUCCESS 8663ba6a1819Smrg fi 8664549e21daSmrg 8665549e21daSmrg if test "$build_libtool_libs" != yes; then 8666549e21daSmrg if test -n "$gentop"; then 8667549e21daSmrg func_show_eval '${RM}r "$gentop"' 8668549e21daSmrg fi 8669549e21daSmrg 8670549e21daSmrg # Create an invalid libtool object if no PIC, so that we don't 8671549e21daSmrg # accidentally link it into a program. 8672549e21daSmrg # $show "echo timestamp > $libobj" 8673549e21daSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674549e21daSmrg exit $EXIT_SUCCESS 8675549e21daSmrg fi 8676549e21daSmrg 8677549e21daSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8678549e21daSmrg # Only do commands if we really have different PIC objects. 8679549e21daSmrg reload_objs="$libobjs $reload_conv_objs" 8680549e21daSmrg output="$libobj" 8681549e21daSmrg func_execute_cmds "$reload_cmds" 'exit $?' 8682549e21daSmrg fi 8683549e21daSmrg 8684549e21daSmrg if test -n "$gentop"; then 8685549e21daSmrg func_show_eval '${RM}r "$gentop"' 8686549e21daSmrg fi 8687549e21daSmrg 8688549e21daSmrg exit $EXIT_SUCCESS 8689ba6a1819Smrg ;; 8690ba6a1819Smrg 8691549e21daSmrg prog) 8692549e21daSmrg case $host in 8693549e21daSmrg *cygwin*) func_stripname '' '.exe' "$output" 8694549e21daSmrg output=$func_stripname_result.exe;; 8695549e21daSmrg esac 8696549e21daSmrg test -n "$vinfo" && \ 8697549e21daSmrg func_warning "\`-version-info' is ignored for programs" 8698ba6a1819Smrg 8699549e21daSmrg test -n "$release" && \ 8700549e21daSmrg func_warning "\`-release' is ignored for programs" 8701ba6a1819Smrg 8702549e21daSmrg test "$preload" = yes \ 8703549e21daSmrg && test "$dlopen_support" = unknown \ 8704549e21daSmrg && test "$dlopen_self" = unknown \ 8705549e21daSmrg && test "$dlopen_self_static" = unknown && \ 8706549e21daSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707549e21daSmrg 8708549e21daSmrg case $host in 8709549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 8710549e21daSmrg # On Rhapsody replace the C library is the System framework 8711549e21daSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8712549e21daSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8713ba6a1819Smrg ;; 8714549e21daSmrg esac 8715ba6a1819Smrg 8716549e21daSmrg case $host in 8717549e21daSmrg *-*-darwin*) 8718549e21daSmrg # Don't allow lazy linking, it breaks C++ global constructors 8719549e21daSmrg # But is supposedly fixed on 10.4 or later (yay!). 8720549e21daSmrg if test "$tagname" = CXX ; then 8721549e21daSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722549e21daSmrg 10.[0123]) 87231bedbe3fSmrg func_append compile_command " ${wl}-bind_at_load" 87241bedbe3fSmrg func_append finalize_command " ${wl}-bind_at_load" 8725549e21daSmrg ;; 8726549e21daSmrg esac 8727ba6a1819Smrg fi 8728549e21daSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8729549e21daSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8730549e21daSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731549e21daSmrg ;; 8732549e21daSmrg esac 8733ba6a1819Smrg 8734ba6a1819Smrg 8735549e21daSmrg # move library search paths that coincide with paths to not yet 8736549e21daSmrg # installed libraries to the beginning of the library search list 8737549e21daSmrg new_libs= 8738549e21daSmrg for path in $notinst_path; do 8739549e21daSmrg case " $new_libs " in 8740549e21daSmrg *" -L$path/$objdir "*) ;; 8741549e21daSmrg *) 8742549e21daSmrg case " $compile_deplibs " in 8743549e21daSmrg *" -L$path/$objdir "*) 87441bedbe3fSmrg func_append new_libs " -L$path/$objdir" ;; 8745ba6a1819Smrg esac 8746549e21daSmrg ;; 8747549e21daSmrg esac 8748549e21daSmrg done 8749549e21daSmrg for deplib in $compile_deplibs; do 8750549e21daSmrg case $deplib in 8751549e21daSmrg -L*) 8752549e21daSmrg case " $new_libs " in 8753549e21daSmrg *" $deplib "*) ;; 87541bedbe3fSmrg *) func_append new_libs " $deplib" ;; 8755ba6a1819Smrg esac 8756549e21daSmrg ;; 87571bedbe3fSmrg *) func_append new_libs " $deplib" ;; 8758549e21daSmrg esac 8759549e21daSmrg done 8760549e21daSmrg compile_deplibs="$new_libs" 8761ba6a1819Smrg 8762ba6a1819Smrg 87631bedbe3fSmrg func_append compile_command " $compile_deplibs" 87641bedbe3fSmrg func_append finalize_command " $finalize_deplibs" 8765ba6a1819Smrg 8766549e21daSmrg if test -n "$rpath$xrpath"; then 8767549e21daSmrg # If the user specified any rpath flags, then add them. 8768549e21daSmrg for libdir in $rpath $xrpath; do 8769549e21daSmrg # This is the magic to use -rpath. 8770549e21daSmrg case "$finalize_rpath " in 8771549e21daSmrg *" $libdir "*) ;; 87721bedbe3fSmrg *) func_append finalize_rpath " $libdir" ;; 8773549e21daSmrg esac 8774549e21daSmrg done 8775549e21daSmrg fi 8776ba6a1819Smrg 8777549e21daSmrg # Now hardcode the library paths 8778549e21daSmrg rpath= 8779549e21daSmrg hardcode_libdirs= 8780549e21daSmrg for libdir in $compile_rpath $finalize_rpath; do 8781549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 8782549e21daSmrg if test -n "$hardcode_libdir_separator"; then 8783549e21daSmrg if test -z "$hardcode_libdirs"; then 8784549e21daSmrg hardcode_libdirs="$libdir" 8785549e21daSmrg else 8786549e21daSmrg # Just accumulate the unique libdirs. 8787549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789549e21daSmrg ;; 8790549e21daSmrg *) 87911bedbe3fSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792549e21daSmrg ;; 8793549e21daSmrg esac 8794549e21daSmrg fi 8795ba6a1819Smrg else 8796549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 87971bedbe3fSmrg func_append rpath " $flag" 8798ba6a1819Smrg fi 8799549e21daSmrg elif test -n "$runpath_var"; then 8800549e21daSmrg case "$perm_rpath " in 8801549e21daSmrg *" $libdir "*) ;; 88021bedbe3fSmrg *) func_append perm_rpath " $libdir" ;; 8803549e21daSmrg esac 8804549e21daSmrg fi 8805549e21daSmrg case $host in 8806549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807549e21daSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808549e21daSmrg case :$dllsearchpath: in 8809549e21daSmrg *":$libdir:"*) ;; 8810549e21daSmrg ::) dllsearchpath=$libdir;; 88111bedbe3fSmrg *) func_append dllsearchpath ":$libdir";; 8812549e21daSmrg esac 8813549e21daSmrg case :$dllsearchpath: in 8814549e21daSmrg *":$testbindir:"*) ;; 8815549e21daSmrg ::) dllsearchpath=$testbindir;; 88161bedbe3fSmrg *) func_append dllsearchpath ":$testbindir";; 8817549e21daSmrg esac 8818549e21daSmrg ;; 8819549e21daSmrg esac 8820549e21daSmrg done 8821549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 8822549e21daSmrg if test -n "$hardcode_libdir_separator" && 8823549e21daSmrg test -n "$hardcode_libdirs"; then 8824549e21daSmrg libdir="$hardcode_libdirs" 8825549e21daSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 8826549e21daSmrg fi 8827549e21daSmrg compile_rpath="$rpath" 8828ba6a1819Smrg 8829549e21daSmrg rpath= 8830549e21daSmrg hardcode_libdirs= 8831549e21daSmrg for libdir in $finalize_rpath; do 8832549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 8833549e21daSmrg if test -n "$hardcode_libdir_separator"; then 8834549e21daSmrg if test -z "$hardcode_libdirs"; then 8835549e21daSmrg hardcode_libdirs="$libdir" 8836549e21daSmrg else 8837549e21daSmrg # Just accumulate the unique libdirs. 8838549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840549e21daSmrg ;; 8841549e21daSmrg *) 88421bedbe3fSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843549e21daSmrg ;; 8844549e21daSmrg esac 8845549e21daSmrg fi 8846ba6a1819Smrg else 8847549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 88481bedbe3fSmrg func_append rpath " $flag" 8849ba6a1819Smrg fi 8850549e21daSmrg elif test -n "$runpath_var"; then 8851549e21daSmrg case "$finalize_perm_rpath " in 8852549e21daSmrg *" $libdir "*) ;; 88531bedbe3fSmrg *) func_append finalize_perm_rpath " $libdir" ;; 8854549e21daSmrg esac 8855ba6a1819Smrg fi 8856549e21daSmrg done 8857549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 8858549e21daSmrg if test -n "$hardcode_libdir_separator" && 8859549e21daSmrg test -n "$hardcode_libdirs"; then 8860549e21daSmrg libdir="$hardcode_libdirs" 8861549e21daSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 8862549e21daSmrg fi 8863549e21daSmrg finalize_rpath="$rpath" 8864ba6a1819Smrg 8865549e21daSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866549e21daSmrg # Transform all the library objects into standard objects. 8867549e21daSmrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8868549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869549e21daSmrg fi 8870ba6a1819Smrg 8871549e21daSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8872ba6a1819Smrg 8873549e21daSmrg # template prelinking step 8874549e21daSmrg if test -n "$prelink_cmds"; then 8875549e21daSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 8876549e21daSmrg fi 8877ba6a1819Smrg 8878549e21daSmrg wrappers_required=yes 8879549e21daSmrg case $host in 8880549e21daSmrg *cegcc* | *mingw32ce*) 8881549e21daSmrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8882549e21daSmrg wrappers_required=no 8883549e21daSmrg ;; 8884549e21daSmrg *cygwin* | *mingw* ) 8885549e21daSmrg if test "$build_libtool_libs" != yes; then 8886549e21daSmrg wrappers_required=no 8887549e21daSmrg fi 8888549e21daSmrg ;; 8889549e21daSmrg *) 8890549e21daSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891549e21daSmrg wrappers_required=no 8892549e21daSmrg fi 8893549e21daSmrg ;; 8894549e21daSmrg esac 8895549e21daSmrg if test "$wrappers_required" = no; then 8896549e21daSmrg # Replace the output file specification. 8897549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898549e21daSmrg link_command="$compile_command$compile_rpath" 8899ba6a1819Smrg 8900549e21daSmrg # We have no uninstalled library dependencies, so finalize right now. 8901549e21daSmrg exit_status=0 8902549e21daSmrg func_show_eval "$link_command" 'exit_status=$?' 8903ba6a1819Smrg 89041bedbe3fSmrg if test -n "$postlink_cmds"; then 89051bedbe3fSmrg func_to_tool_file "$output" 89061bedbe3fSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89071bedbe3fSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89081bedbe3fSmrg fi 89091bedbe3fSmrg 8910549e21daSmrg # Delete the generated files. 8911549e21daSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8912549e21daSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913ba6a1819Smrg fi 8914ba6a1819Smrg 8915549e21daSmrg exit $exit_status 8916549e21daSmrg fi 8917ba6a1819Smrg 8918549e21daSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919549e21daSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920549e21daSmrg fi 8921549e21daSmrg if test -n "$finalize_shlibpath"; then 8922549e21daSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923549e21daSmrg fi 8924ba6a1819Smrg 8925549e21daSmrg compile_var= 8926549e21daSmrg finalize_var= 8927549e21daSmrg if test -n "$runpath_var"; then 8928549e21daSmrg if test -n "$perm_rpath"; then 8929549e21daSmrg # We should set the runpath_var. 8930549e21daSmrg rpath= 8931549e21daSmrg for dir in $perm_rpath; do 89321bedbe3fSmrg func_append rpath "$dir:" 8933549e21daSmrg done 8934549e21daSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8935ba6a1819Smrg fi 8936549e21daSmrg if test -n "$finalize_perm_rpath"; then 8937549e21daSmrg # We should set the runpath_var. 8938549e21daSmrg rpath= 8939549e21daSmrg for dir in $finalize_perm_rpath; do 89401bedbe3fSmrg func_append rpath "$dir:" 8941549e21daSmrg done 8942549e21daSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943ba6a1819Smrg fi 8944549e21daSmrg fi 8945ba6a1819Smrg 8946549e21daSmrg if test "$no_install" = yes; then 8947549e21daSmrg # We don't need to create a wrapper script. 8948549e21daSmrg link_command="$compile_var$compile_command$compile_rpath" 8949549e21daSmrg # Replace the output file specification. 8950549e21daSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951549e21daSmrg # Delete the old output file. 8952549e21daSmrg $opt_dry_run || $RM $output 8953549e21daSmrg # Link the executable and exit 8954549e21daSmrg func_show_eval "$link_command" 'exit $?' 89551bedbe3fSmrg 89561bedbe3fSmrg if test -n "$postlink_cmds"; then 89571bedbe3fSmrg func_to_tool_file "$output" 89581bedbe3fSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89591bedbe3fSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89601bedbe3fSmrg fi 89611bedbe3fSmrg 8962ba6a1819Smrg exit $EXIT_SUCCESS 8963549e21daSmrg fi 8964ba6a1819Smrg 8965549e21daSmrg if test "$hardcode_action" = relink; then 8966549e21daSmrg # Fast installation is not supported 8967549e21daSmrg link_command="$compile_var$compile_command$compile_rpath" 8968549e21daSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8969549e21daSmrg 8970549e21daSmrg func_warning "this platform does not like uninstalled shared libraries" 8971549e21daSmrg func_warning "\`$output' will be relinked during installation" 8972549e21daSmrg else 8973549e21daSmrg if test "$fast_install" != no; then 8974549e21daSmrg link_command="$finalize_var$compile_command$finalize_rpath" 8975549e21daSmrg if test "$fast_install" = yes; then 8976549e21daSmrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977549e21daSmrg else 8978549e21daSmrg # fast_install is set to needless 8979549e21daSmrg relink_command= 8980549e21daSmrg fi 8981ba6a1819Smrg else 8982549e21daSmrg link_command="$compile_var$compile_command$compile_rpath" 8983549e21daSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8984ba6a1819Smrg fi 8985549e21daSmrg fi 8986ba6a1819Smrg 8987549e21daSmrg # Replace the output file specification. 8988549e21daSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8989ba6a1819Smrg 8990549e21daSmrg # Delete the old output files. 8991549e21daSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8992ba6a1819Smrg 8993549e21daSmrg func_show_eval "$link_command" 'exit $?' 8994ba6a1819Smrg 89951bedbe3fSmrg if test -n "$postlink_cmds"; then 89961bedbe3fSmrg func_to_tool_file "$output_objdir/$outputname" 89971bedbe3fSmrg 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'` 89981bedbe3fSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 89991bedbe3fSmrg fi 90001bedbe3fSmrg 9001549e21daSmrg # Now create the wrapper script. 9002549e21daSmrg func_verbose "creating $output" 9003ba6a1819Smrg 9004549e21daSmrg # Quote the relink command for shipping. 9005549e21daSmrg if test -n "$relink_command"; then 9006549e21daSmrg # Preserve any variables that may affect compiler behavior 9007549e21daSmrg for var in $variables_saved_for_relink; do 9008549e21daSmrg if eval test -z \"\${$var+set}\"; then 9009549e21daSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010549e21daSmrg elif eval var_value=\$$var; test -z "$var_value"; then 9011549e21daSmrg relink_command="$var=; export $var; $relink_command" 9012549e21daSmrg else 9013549e21daSmrg func_quote_for_eval "$var_value" 9014549e21daSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015549e21daSmrg fi 9016549e21daSmrg done 9017549e21daSmrg relink_command="(cd `pwd`; $relink_command)" 9018549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019549e21daSmrg fi 9020ba6a1819Smrg 9021549e21daSmrg # Only actually do things if not in dry run mode. 9022549e21daSmrg $opt_dry_run || { 9023549e21daSmrg # win32 will think the script is a binary if it has 9024549e21daSmrg # a .exe suffix, so we strip it off here. 9025549e21daSmrg case $output in 9026549e21daSmrg *.exe) func_stripname '' '.exe' "$output" 9027549e21daSmrg output=$func_stripname_result ;; 9028549e21daSmrg esac 9029549e21daSmrg # test for cygwin because mv fails w/o .exe extensions 9030549e21daSmrg case $host in 9031549e21daSmrg *cygwin*) 9032549e21daSmrg exeext=.exe 9033549e21daSmrg func_stripname '' '.exe' "$outputname" 9034549e21daSmrg outputname=$func_stripname_result ;; 9035549e21daSmrg *) exeext= ;; 9036549e21daSmrg esac 9037549e21daSmrg case $host in 9038549e21daSmrg *cygwin* | *mingw* ) 9039549e21daSmrg func_dirname_and_basename "$output" "" "." 9040549e21daSmrg output_name=$func_basename_result 9041549e21daSmrg output_path=$func_dirname_result 9042549e21daSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043549e21daSmrg cwrapper="$output_path/$output_name.exe" 9044549e21daSmrg $RM $cwrappersource $cwrapper 9045549e21daSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046549e21daSmrg 9047549e21daSmrg func_emit_cwrapperexe_src > $cwrappersource 9048549e21daSmrg 9049549e21daSmrg # The wrapper executable is built using the $host compiler, 9050549e21daSmrg # because it contains $host paths and files. If cross- 9051549e21daSmrg # compiling, it, like the target executable, must be 9052549e21daSmrg # executed on the $host or under an emulation environment. 9053549e21daSmrg $opt_dry_run || { 9054549e21daSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055549e21daSmrg $STRIP $cwrapper 9056549e21daSmrg } 9057549e21daSmrg 9058549e21daSmrg # Now, create the wrapper script for func_source use: 9059549e21daSmrg func_ltwrapper_scriptname $cwrapper 9060549e21daSmrg $RM $func_ltwrapper_scriptname_result 9061549e21daSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062549e21daSmrg $opt_dry_run || { 9063549e21daSmrg # note: this script will not be executed, so do not chmod. 9064549e21daSmrg if test "x$build" = "x$host" ; then 9065549e21daSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066ba6a1819Smrg else 9067549e21daSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068ba6a1819Smrg fi 9069549e21daSmrg } 9070549e21daSmrg ;; 9071549e21daSmrg * ) 9072549e21daSmrg $RM $output 9073549e21daSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9074ba6a1819Smrg 9075549e21daSmrg func_emit_wrapper no > $output 9076549e21daSmrg chmod +x $output 9077ba6a1819Smrg ;; 9078ba6a1819Smrg esac 9079549e21daSmrg } 9080549e21daSmrg exit $EXIT_SUCCESS 9081549e21daSmrg ;; 9082549e21daSmrg esac 9083ba6a1819Smrg 9084549e21daSmrg # See if we need to build an old-fashioned archive. 9085549e21daSmrg for oldlib in $oldlibs; do 9086ba6a1819Smrg 9087549e21daSmrg if test "$build_libtool_libs" = convenience; then 9088549e21daSmrg oldobjs="$libobjs_save $symfileobj" 9089549e21daSmrg addlibs="$convenience" 9090549e21daSmrg build_libtool_libs=no 9091549e21daSmrg else 9092549e21daSmrg if test "$build_libtool_libs" = module; then 9093549e21daSmrg oldobjs="$libobjs_save" 9094549e21daSmrg build_libtool_libs=no 9095549e21daSmrg else 9096549e21daSmrg oldobjs="$old_deplibs $non_pic_objects" 9097549e21daSmrg if test "$preload" = yes && test -f "$symfileobj"; then 90981bedbe3fSmrg func_append oldobjs " $symfileobj" 9099549e21daSmrg fi 9100549e21daSmrg fi 9101549e21daSmrg addlibs="$old_convenience" 9102ba6a1819Smrg fi 9103ba6a1819Smrg 9104549e21daSmrg if test -n "$addlibs"; then 9105549e21daSmrg gentop="$output_objdir/${outputname}x" 91061bedbe3fSmrg func_append generated " $gentop" 9107ba6a1819Smrg 9108549e21daSmrg func_extract_archives $gentop $addlibs 91091bedbe3fSmrg func_append oldobjs " $func_extract_archives_result" 9110549e21daSmrg fi 9111ba6a1819Smrg 9112549e21daSmrg # Do each command in the archive commands. 9113549e21daSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114549e21daSmrg cmds=$old_archive_from_new_cmds 9115549e21daSmrg else 9116ba6a1819Smrg 9117549e21daSmrg # Add any objects from preloaded convenience libraries 9118549e21daSmrg if test -n "$dlprefiles"; then 9119549e21daSmrg gentop="$output_objdir/${outputname}x" 91201bedbe3fSmrg func_append generated " $gentop" 9121ba6a1819Smrg 9122549e21daSmrg func_extract_archives $gentop $dlprefiles 91231bedbe3fSmrg func_append oldobjs " $func_extract_archives_result" 9124549e21daSmrg fi 9125ba6a1819Smrg 9126549e21daSmrg # POSIX demands no paths to be encoded in archives. We have 9127549e21daSmrg # to avoid creating archives with duplicate basenames if we 9128549e21daSmrg # might have to extract them afterwards, e.g., when creating a 9129549e21daSmrg # static archive out of a convenience library, or when linking 9130549e21daSmrg # the entirety of a libtool archive into another (currently 9131549e21daSmrg # not supported by libtool). 9132549e21daSmrg if (for obj in $oldobjs 9133549e21daSmrg do 9134549e21daSmrg func_basename "$obj" 9135549e21daSmrg $ECHO "$func_basename_result" 9136549e21daSmrg done | sort | sort -uc >/dev/null 2>&1); then 9137549e21daSmrg : 9138549e21daSmrg else 9139549e21daSmrg echo "copying selected object files to avoid basename conflicts..." 9140549e21daSmrg gentop="$output_objdir/${outputname}x" 91411bedbe3fSmrg func_append generated " $gentop" 9142549e21daSmrg func_mkdir_p "$gentop" 9143549e21daSmrg save_oldobjs=$oldobjs 9144549e21daSmrg oldobjs= 9145549e21daSmrg counter=1 9146549e21daSmrg for obj in $save_oldobjs 9147549e21daSmrg do 9148549e21daSmrg func_basename "$obj" 9149549e21daSmrg objbase="$func_basename_result" 9150549e21daSmrg case " $oldobjs " in 9151549e21daSmrg " ") oldobjs=$obj ;; 9152549e21daSmrg *[\ /]"$objbase "*) 9153549e21daSmrg while :; do 9154549e21daSmrg # Make sure we don't pick an alternate name that also 9155549e21daSmrg # overlaps. 9156549e21daSmrg newobj=lt$counter-$objbase 9157549e21daSmrg func_arith $counter + 1 9158549e21daSmrg counter=$func_arith_result 9159549e21daSmrg case " $oldobjs " in 9160549e21daSmrg *[\ /]"$newobj "*) ;; 9161549e21daSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162549e21daSmrg esac 9163549e21daSmrg done 9164549e21daSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 91651bedbe3fSmrg func_append oldobjs " $gentop/$newobj" 9166549e21daSmrg ;; 91671bedbe3fSmrg *) func_append oldobjs " $obj" ;; 9168549e21daSmrg esac 9169ba6a1819Smrg done 9170ba6a1819Smrg fi 91711bedbe3fSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 91721bedbe3fSmrg tool_oldlib=$func_to_tool_file_result 9173549e21daSmrg eval cmds=\"$old_archive_cmds\" 9174ba6a1819Smrg 9175549e21daSmrg func_len " $cmds" 9176549e21daSmrg len=$func_len_result 9177549e21daSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178549e21daSmrg cmds=$old_archive_cmds 91791bedbe3fSmrg elif test -n "$archiver_list_spec"; then 91801bedbe3fSmrg func_verbose "using command file archive linking..." 91811bedbe3fSmrg for obj in $oldobjs 91821bedbe3fSmrg do 91831bedbe3fSmrg func_to_tool_file "$obj" 91841bedbe3fSmrg $ECHO "$func_to_tool_file_result" 91851bedbe3fSmrg done > $output_objdir/$libname.libcmd 91861bedbe3fSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 91871bedbe3fSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 91881bedbe3fSmrg cmds=$old_archive_cmds 9189549e21daSmrg else 9190549e21daSmrg # the command line is too long to link in one step, link in parts 9191549e21daSmrg func_verbose "using piecewise archive linking..." 9192549e21daSmrg save_RANLIB=$RANLIB 9193549e21daSmrg RANLIB=: 9194549e21daSmrg objlist= 9195549e21daSmrg concat_cmds= 9196549e21daSmrg save_oldobjs=$oldobjs 9197549e21daSmrg oldobjs= 9198549e21daSmrg # Is there a better way of finding the last object in the list? 9199549e21daSmrg for obj in $save_oldobjs 9200549e21daSmrg do 9201549e21daSmrg last_oldobj=$obj 9202549e21daSmrg done 9203549e21daSmrg eval test_cmds=\"$old_archive_cmds\" 9204549e21daSmrg func_len " $test_cmds" 9205549e21daSmrg len0=$func_len_result 9206549e21daSmrg len=$len0 9207549e21daSmrg for obj in $save_oldobjs 9208549e21daSmrg do 9209549e21daSmrg func_len " $obj" 9210549e21daSmrg func_arith $len + $func_len_result 9211549e21daSmrg len=$func_arith_result 9212549e21daSmrg func_append objlist " $obj" 9213549e21daSmrg if test "$len" -lt "$max_cmd_len"; then 9214549e21daSmrg : 9215549e21daSmrg else 9216549e21daSmrg # the above command should be used before it gets too long 9217549e21daSmrg oldobjs=$objlist 9218549e21daSmrg if test "$obj" = "$last_oldobj" ; then 9219549e21daSmrg RANLIB=$save_RANLIB 9220549e21daSmrg fi 9221549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222549e21daSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223549e21daSmrg objlist= 9224549e21daSmrg len=$len0 9225549e21daSmrg fi 9226549e21daSmrg done 9227549e21daSmrg RANLIB=$save_RANLIB 9228549e21daSmrg oldobjs=$objlist 9229549e21daSmrg if test "X$oldobjs" = "X" ; then 9230549e21daSmrg eval cmds=\"\$concat_cmds\" 9231549e21daSmrg else 9232549e21daSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233549e21daSmrg fi 9234549e21daSmrg fi 9235549e21daSmrg fi 9236549e21daSmrg func_execute_cmds "$cmds" 'exit $?' 9237ba6a1819Smrg done 9238ba6a1819Smrg 9239549e21daSmrg test -n "$generated" && \ 9240549e21daSmrg func_show_eval "${RM}r$generated" 9241ba6a1819Smrg 9242549e21daSmrg # Now create the libtool archive. 9243549e21daSmrg case $output in 9244549e21daSmrg *.la) 9245549e21daSmrg old_library= 9246549e21daSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9247549e21daSmrg func_verbose "creating $output" 9248ba6a1819Smrg 9249549e21daSmrg # Preserve any variables that may affect compiler behavior 9250549e21daSmrg for var in $variables_saved_for_relink; do 9251549e21daSmrg if eval test -z \"\${$var+set}\"; then 9252549e21daSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253549e21daSmrg elif eval var_value=\$$var; test -z "$var_value"; then 9254549e21daSmrg relink_command="$var=; export $var; $relink_command" 9255ba6a1819Smrg else 9256549e21daSmrg func_quote_for_eval "$var_value" 9257549e21daSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9258ba6a1819Smrg fi 9259549e21daSmrg done 9260549e21daSmrg # Quote the link command for shipping. 9261549e21daSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9262549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263549e21daSmrg if test "$hardcode_automatic" = yes ; then 9264549e21daSmrg relink_command= 9265549e21daSmrg fi 9266ba6a1819Smrg 9267549e21daSmrg # Only create the output if not a dry run. 9268549e21daSmrg $opt_dry_run || { 9269549e21daSmrg for installed in no yes; do 9270549e21daSmrg if test "$installed" = yes; then 9271549e21daSmrg if test -z "$install_libdir"; then 9272549e21daSmrg break 9273549e21daSmrg fi 9274549e21daSmrg output="$output_objdir/$outputname"i 9275549e21daSmrg # Replace all uninstalled libtool libraries with the installed ones 9276549e21daSmrg newdependency_libs= 9277549e21daSmrg for deplib in $dependency_libs; do 9278549e21daSmrg case $deplib in 9279549e21daSmrg *.la) 9280549e21daSmrg func_basename "$deplib" 9281549e21daSmrg name="$func_basename_result" 92821bedbe3fSmrg func_resolve_sysroot "$deplib" 92831bedbe3fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284549e21daSmrg test -z "$libdir" && \ 9285549e21daSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 92861bedbe3fSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 92871bedbe3fSmrg ;; 92881bedbe3fSmrg -L*) 92891bedbe3fSmrg func_stripname -L '' "$deplib" 92901bedbe3fSmrg func_replace_sysroot "$func_stripname_result" 92911bedbe3fSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 92921bedbe3fSmrg ;; 92931bedbe3fSmrg -R*) 92941bedbe3fSmrg func_stripname -R '' "$deplib" 92951bedbe3fSmrg func_replace_sysroot "$func_stripname_result" 92961bedbe3fSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 9297549e21daSmrg ;; 92981bedbe3fSmrg *) func_append newdependency_libs " $deplib" ;; 9299549e21daSmrg esac 9300549e21daSmrg done 9301549e21daSmrg dependency_libs="$newdependency_libs" 9302549e21daSmrg newdlfiles= 9303549e21daSmrg 9304549e21daSmrg for lib in $dlfiles; do 9305549e21daSmrg case $lib in 9306549e21daSmrg *.la) 9307549e21daSmrg func_basename "$lib" 9308549e21daSmrg name="$func_basename_result" 9309549e21daSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310549e21daSmrg test -z "$libdir" && \ 9311549e21daSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 93121bedbe3fSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313549e21daSmrg ;; 93141bedbe3fSmrg *) func_append newdlfiles " $lib" ;; 9315549e21daSmrg esac 9316549e21daSmrg done 9317549e21daSmrg dlfiles="$newdlfiles" 9318549e21daSmrg newdlprefiles= 9319549e21daSmrg for lib in $dlprefiles; do 9320549e21daSmrg case $lib in 9321549e21daSmrg *.la) 9322549e21daSmrg # Only pass preopened files to the pseudo-archive (for 9323549e21daSmrg # eventual linking with the app. that links it) if we 9324549e21daSmrg # didn't already link the preopened objects directly into 9325549e21daSmrg # the library: 9326549e21daSmrg func_basename "$lib" 9327549e21daSmrg name="$func_basename_result" 9328549e21daSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329549e21daSmrg test -z "$libdir" && \ 9330549e21daSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 93311bedbe3fSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332549e21daSmrg ;; 9333549e21daSmrg esac 9334549e21daSmrg done 9335549e21daSmrg dlprefiles="$newdlprefiles" 9336549e21daSmrg else 9337549e21daSmrg newdlfiles= 9338549e21daSmrg for lib in $dlfiles; do 9339549e21daSmrg case $lib in 9340549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341549e21daSmrg *) abs=`pwd`"/$lib" ;; 9342549e21daSmrg esac 93431bedbe3fSmrg func_append newdlfiles " $abs" 9344549e21daSmrg done 9345549e21daSmrg dlfiles="$newdlfiles" 9346549e21daSmrg newdlprefiles= 9347549e21daSmrg for lib in $dlprefiles; do 9348549e21daSmrg case $lib in 9349549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350549e21daSmrg *) abs=`pwd`"/$lib" ;; 9351549e21daSmrg esac 93521bedbe3fSmrg func_append newdlprefiles " $abs" 9353549e21daSmrg done 9354549e21daSmrg dlprefiles="$newdlprefiles" 9355549e21daSmrg fi 9356549e21daSmrg $RM $output 9357549e21daSmrg # place dlname in correct position for cygwin 9358549e21daSmrg # In fact, it would be nice if we could use this code for all target 9359549e21daSmrg # systems that can't hard-code library paths into their executables 9360549e21daSmrg # and that have no shared library path variable independent of PATH, 9361549e21daSmrg # but it turns out we can't easily determine that from inspecting 9362549e21daSmrg # libtool variables, so we have to hard-code the OSs to which it 9363549e21daSmrg # applies here; at the moment, that means platforms that use the PE 9364549e21daSmrg # object format with DLL files. See the long comment at the top of 9365549e21daSmrg # tests/bindir.at for full details. 9366549e21daSmrg tdlname=$dlname 9367549e21daSmrg case $host,$output,$installed,$module,$dlname in 9368549e21daSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9369549e21daSmrg # If a -bindir argument was supplied, place the dll there. 9370549e21daSmrg if test "x$bindir" != x ; 9371549e21daSmrg then 9372549e21daSmrg func_relative_path "$install_libdir" "$bindir" 9373549e21daSmrg tdlname=$func_relative_path_result$dlname 9374549e21daSmrg else 9375549e21daSmrg # Otherwise fall back on heuristic. 9376549e21daSmrg tdlname=../bin/$dlname 9377549e21daSmrg fi 9378549e21daSmrg ;; 9379549e21daSmrg esac 9380549e21daSmrg $ECHO > $output "\ 9381549e21daSmrg# $outputname - a libtool library file 9382549e21daSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383549e21daSmrg# 9384549e21daSmrg# Please DO NOT delete this file! 9385549e21daSmrg# It is necessary for linking the library. 9386ba6a1819Smrg 9387549e21daSmrg# The name that we can dlopen(3). 9388549e21daSmrgdlname='$tdlname' 9389ba6a1819Smrg 9390549e21daSmrg# Names of this library. 9391549e21daSmrglibrary_names='$library_names' 9392ba6a1819Smrg 9393549e21daSmrg# The name of the static archive. 9394549e21daSmrgold_library='$old_library' 9395ba6a1819Smrg 9396549e21daSmrg# Linker flags that can not go in dependency_libs. 9397549e21daSmrginherited_linker_flags='$new_inherited_linker_flags' 9398ba6a1819Smrg 9399549e21daSmrg# Libraries that this one depends upon. 9400549e21daSmrgdependency_libs='$dependency_libs' 9401ba6a1819Smrg 9402549e21daSmrg# Names of additional weak libraries provided by this library 9403549e21daSmrgweak_library_names='$weak_libs' 9404ba6a1819Smrg 9405549e21daSmrg# Version information for $libname. 9406549e21daSmrgcurrent=$current 9407549e21daSmrgage=$age 9408549e21daSmrgrevision=$revision 9409ba6a1819Smrg 9410549e21daSmrg# Is this an already installed library? 9411549e21daSmrginstalled=$installed 9412ba6a1819Smrg 9413549e21daSmrg# Should we warn about portability when linking against -modules? 9414549e21daSmrgshouldnotlink=$module 9415ba6a1819Smrg 9416549e21daSmrg# Files to dlopen/dlpreopen 9417549e21daSmrgdlopen='$dlfiles' 9418549e21daSmrgdlpreopen='$dlprefiles' 9419ba6a1819Smrg 9420549e21daSmrg# Directory that this library needs to be installed in: 9421549e21daSmrglibdir='$install_libdir'" 9422549e21daSmrg if test "$installed" = no && test "$need_relink" = yes; then 9423549e21daSmrg $ECHO >> $output "\ 9424549e21daSmrgrelink_command=\"$relink_command\"" 9425549e21daSmrg fi 9426549e21daSmrg done 9427549e21daSmrg } 9428ba6a1819Smrg 9429549e21daSmrg # Do a symbolic link so that the libtool archive can be found in 9430549e21daSmrg # LD_LIBRARY_PATH before the program is installed. 9431549e21daSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432549e21daSmrg ;; 9433549e21daSmrg esac 9434549e21daSmrg exit $EXIT_SUCCESS 9435549e21daSmrg} 9436ba6a1819Smrg 94371bedbe3fSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438549e21daSmrg func_mode_link ${1+"$@"} 9439ba6a1819Smrg 9440ba6a1819Smrg 9441549e21daSmrg# func_mode_uninstall arg... 9442549e21daSmrgfunc_mode_uninstall () 9443549e21daSmrg{ 9444549e21daSmrg $opt_debug 9445549e21daSmrg RM="$nonopt" 9446ba6a1819Smrg files= 9447ba6a1819Smrg rmforce= 9448ba6a1819Smrg exit_status=0 9449ba6a1819Smrg 9450ba6a1819Smrg # This variable tells wrapper scripts just to set variables rather 9451ba6a1819Smrg # than running their programs. 9452ba6a1819Smrg libtool_install_magic="$magic" 9453ba6a1819Smrg 9454ba6a1819Smrg for arg 9455ba6a1819Smrg do 9456ba6a1819Smrg case $arg in 94571bedbe3fSmrg -f) func_append RM " $arg"; rmforce=yes ;; 94581bedbe3fSmrg -*) func_append RM " $arg" ;; 94591bedbe3fSmrg *) func_append files " $arg" ;; 9460ba6a1819Smrg esac 9461ba6a1819Smrg done 9462ba6a1819Smrg 9463549e21daSmrg test -z "$RM" && \ 9464549e21daSmrg func_fatal_help "you must specify an RM program" 9465ba6a1819Smrg 9466ba6a1819Smrg rmdirs= 9467ba6a1819Smrg 9468ba6a1819Smrg for file in $files; do 9469549e21daSmrg func_dirname "$file" "" "." 9470549e21daSmrg dir="$func_dirname_result" 9471549e21daSmrg if test "X$dir" = X.; then 94721bedbe3fSmrg odir="$objdir" 9473ba6a1819Smrg else 94741bedbe3fSmrg odir="$dir/$objdir" 9475ba6a1819Smrg fi 9476549e21daSmrg func_basename "$file" 9477549e21daSmrg name="$func_basename_result" 94781bedbe3fSmrg test "$opt_mode" = uninstall && odir="$dir" 9479ba6a1819Smrg 94801bedbe3fSmrg # Remember odir for removal later, being careful to avoid duplicates 94811bedbe3fSmrg if test "$opt_mode" = clean; then 9482ba6a1819Smrg case " $rmdirs " in 94831bedbe3fSmrg *" $odir "*) ;; 94841bedbe3fSmrg *) func_append rmdirs " $odir" ;; 9485ba6a1819Smrg esac 9486ba6a1819Smrg fi 9487ba6a1819Smrg 9488ba6a1819Smrg # Don't error if the file doesn't exist and rm -f was used. 9489549e21daSmrg if { test -L "$file"; } >/dev/null 2>&1 || 9490549e21daSmrg { test -h "$file"; } >/dev/null 2>&1 || 9491549e21daSmrg test -f "$file"; then 9492ba6a1819Smrg : 9493ba6a1819Smrg elif test -d "$file"; then 9494ba6a1819Smrg exit_status=1 9495ba6a1819Smrg continue 9496ba6a1819Smrg elif test "$rmforce" = yes; then 9497ba6a1819Smrg continue 9498ba6a1819Smrg fi 9499ba6a1819Smrg 9500ba6a1819Smrg rmfiles="$file" 9501ba6a1819Smrg 9502ba6a1819Smrg case $name in 9503ba6a1819Smrg *.la) 9504ba6a1819Smrg # Possibly a libtool archive, so verify it. 9505549e21daSmrg if func_lalib_p "$file"; then 9506549e21daSmrg func_source $dir/$name 9507ba6a1819Smrg 9508ba6a1819Smrg # Delete the libtool libraries and symlinks. 9509ba6a1819Smrg for n in $library_names; do 95101bedbe3fSmrg func_append rmfiles " $odir/$n" 9511ba6a1819Smrg done 95121bedbe3fSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9513ba6a1819Smrg 95141bedbe3fSmrg case "$opt_mode" in 9515ba6a1819Smrg clean) 95161bedbe3fSmrg case " $library_names " in 9517ba6a1819Smrg *" $dlname "*) ;; 95181bedbe3fSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9519ba6a1819Smrg esac 95201bedbe3fSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9521ba6a1819Smrg ;; 9522ba6a1819Smrg uninstall) 9523ba6a1819Smrg if test -n "$library_names"; then 9524ba6a1819Smrg # Do each command in the postuninstall commands. 9525549e21daSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9526ba6a1819Smrg fi 9527ba6a1819Smrg 9528ba6a1819Smrg if test -n "$old_library"; then 9529ba6a1819Smrg # Do each command in the old_postuninstall commands. 9530549e21daSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9531ba6a1819Smrg fi 9532ba6a1819Smrg # FIXME: should reinstall the best remaining shared library. 9533ba6a1819Smrg ;; 9534ba6a1819Smrg esac 9535ba6a1819Smrg fi 9536ba6a1819Smrg ;; 9537ba6a1819Smrg 9538ba6a1819Smrg *.lo) 9539ba6a1819Smrg # Possibly a libtool object, so verify it. 9540549e21daSmrg if func_lalib_p "$file"; then 9541ba6a1819Smrg 9542ba6a1819Smrg # Read the .lo file 9543549e21daSmrg func_source $dir/$name 9544ba6a1819Smrg 9545ba6a1819Smrg # Add PIC object to the list of files to remove. 9546549e21daSmrg if test -n "$pic_object" && 9547549e21daSmrg test "$pic_object" != none; then 95481bedbe3fSmrg func_append rmfiles " $dir/$pic_object" 9549ba6a1819Smrg fi 9550ba6a1819Smrg 9551ba6a1819Smrg # Add non-PIC object to the list of files to remove. 9552549e21daSmrg if test -n "$non_pic_object" && 9553549e21daSmrg test "$non_pic_object" != none; then 95541bedbe3fSmrg func_append rmfiles " $dir/$non_pic_object" 9555ba6a1819Smrg fi 9556ba6a1819Smrg fi 9557ba6a1819Smrg ;; 9558ba6a1819Smrg 9559ba6a1819Smrg *) 95601bedbe3fSmrg if test "$opt_mode" = clean ; then 9561ba6a1819Smrg noexename=$name 9562ba6a1819Smrg case $file in 9563ba6a1819Smrg *.exe) 9564549e21daSmrg func_stripname '' '.exe' "$file" 9565549e21daSmrg file=$func_stripname_result 9566549e21daSmrg func_stripname '' '.exe' "$name" 9567549e21daSmrg noexename=$func_stripname_result 9568ba6a1819Smrg # $file with .exe has already been added to rmfiles, 9569ba6a1819Smrg # add $file without .exe 95701bedbe3fSmrg func_append rmfiles " $file" 9571ba6a1819Smrg ;; 9572ba6a1819Smrg esac 9573ba6a1819Smrg # Do a test to see if this is a libtool program. 9574549e21daSmrg if func_ltwrapper_p "$file"; then 9575549e21daSmrg if func_ltwrapper_executable_p "$file"; then 9576549e21daSmrg func_ltwrapper_scriptname "$file" 9577549e21daSmrg relink_command= 9578549e21daSmrg func_source $func_ltwrapper_scriptname_result 95791bedbe3fSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9580549e21daSmrg else 9581549e21daSmrg relink_command= 9582549e21daSmrg func_source $dir/$noexename 9583549e21daSmrg fi 9584ba6a1819Smrg 9585ba6a1819Smrg # note $name still contains .exe if it was in $file originally 9586ba6a1819Smrg # as does the version of $file that was added into $rmfiles 95871bedbe3fSmrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9588ba6a1819Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 95891bedbe3fSmrg func_append rmfiles " $odir/lt-$name" 9590ba6a1819Smrg fi 9591ba6a1819Smrg if test "X$noexename" != "X$name" ; then 95921bedbe3fSmrg func_append rmfiles " $odir/lt-${noexename}.c" 9593ba6a1819Smrg fi 9594ba6a1819Smrg fi 9595ba6a1819Smrg fi 9596ba6a1819Smrg ;; 9597ba6a1819Smrg esac 9598549e21daSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9599ba6a1819Smrg done 9600ba6a1819Smrg 9601ba6a1819Smrg # Try to remove the ${objdir}s in the directories where we deleted files 9602ba6a1819Smrg for dir in $rmdirs; do 9603ba6a1819Smrg if test -d "$dir"; then 9604549e21daSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9605ba6a1819Smrg fi 9606ba6a1819Smrg done 9607ba6a1819Smrg 9608ba6a1819Smrg exit $exit_status 9609549e21daSmrg} 9610ba6a1819Smrg 96111bedbe3fSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612549e21daSmrg func_mode_uninstall ${1+"$@"} 9613ba6a1819Smrg 96141bedbe3fSmrgtest -z "$opt_mode" && { 9615549e21daSmrg help="$generic_help" 9616549e21daSmrg func_fatal_help "you must specify a MODE" 9617549e21daSmrg} 9618549e21daSmrg 9619549e21daSmrgtest -z "$exec_cmd" && \ 96201bedbe3fSmrg func_fatal_help "invalid operation mode \`$opt_mode'" 9621ba6a1819Smrg 9622ba6a1819Smrgif test -n "$exec_cmd"; then 9623549e21daSmrg eval exec "$exec_cmd" 9624ba6a1819Smrg exit $EXIT_FAILURE 9625ba6a1819Smrgfi 9626ba6a1819Smrg 9627549e21daSmrgexit $exit_status 9628ba6a1819Smrg 9629ba6a1819Smrg 9630ba6a1819Smrg# The TAGs below are defined such that we never get into a situation 9631ba6a1819Smrg# in which we disable both kinds of libraries. Given conflicting 9632ba6a1819Smrg# choices, we go for a static library, that is the most portable, 9633ba6a1819Smrg# since we can't tell whether shared libraries were disabled because 9634ba6a1819Smrg# the user asked for that or because the platform doesn't support 9635ba6a1819Smrg# them. This is particularly important on AIX, because we don't 9636ba6a1819Smrg# support having both static and shared libraries enabled at the same 9637ba6a1819Smrg# time on that platform, so we default to a shared-only configuration. 9638ba6a1819Smrg# If a disable-shared tag is given, we'll fallback to a static-only 9639ba6a1819Smrg# configuration. But we'll never go from static-only to shared-only. 9640ba6a1819Smrg 9641ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642549e21daSmrgbuild_libtool_libs=no 9643549e21daSmrgbuild_old_libs=yes 9644ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 9645ba6a1819Smrg 9646ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647549e21daSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9648ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-static 9649ba6a1819Smrg 9650ba6a1819Smrg# Local Variables: 9651ba6a1819Smrg# mode:shell-script 9652ba6a1819Smrg# sh-indentation:2 9653ba6a1819Smrg# End: 9654549e21daSmrg# vi:sw=2 9655549e21daSmrg 9656