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