ltmain.sh revision 200d7199
165eef222Smrg 2200d7199Smrg# libtool (GNU libtool) 2.4 365eef222Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 465eef222Smrg 556957a04Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 656957a04Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 765eef222Smrg# This is free software; see the source for copying conditions. There is NO 865eef222Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 965eef222Smrg 1065eef222Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11ef981d24Smrg# it under the terms of the GNU General Public License as published by 12ef981d24Smrg# the Free Software Foundation; either version 2 of the License, or 13ef981d24Smrg# (at your option) any later version. 14ef981d24Smrg# 1565eef222Smrg# As a special exception to the GNU General Public License, 1665eef222Smrg# if you distribute this file as part of a program or library that 1765eef222Smrg# is built using GNU Libtool, you may include this file under the 1865eef222Smrg# same distribution terms that you use for the rest of that program. 1965eef222Smrg# 2065eef222Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21ef981d24Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22ef981d24Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23ef981d24Smrg# General Public License for more details. 24ef981d24Smrg# 25ef981d24Smrg# You should have received a copy of the GNU General Public License 2665eef222Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 2765eef222Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 2865eef222Smrg# or obtained by writing to the Free Software Foundation, Inc., 2965eef222Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 3065eef222Smrg 3165eef222Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 3265eef222Smrg# 3365eef222Smrg# Provide generalized library-building support services. 34ef981d24Smrg# 3556957a04Smrg# --config show all configuration variables 3656957a04Smrg# --debug enable verbose shell tracing 3756957a04Smrg# -n, --dry-run display commands without modifying any files 3856957a04Smrg# --features display basic configuration information and exit 3956957a04Smrg# --mode=MODE use operation mode MODE 4056957a04Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 4156957a04Smrg# --quiet, --silent don't print informational messages 4256957a04Smrg# --no-quiet, --no-silent 4356957a04Smrg# print informational messages (default) 4456957a04Smrg# --tag=TAG use configuration variables from tag TAG 4556957a04Smrg# -v, --verbose print more informational messages than default 4656957a04Smrg# --no-verbose don't print the extra informational messages 4756957a04Smrg# --version print version information 4856957a04Smrg# -h, --help, --help-all print short, long, or detailed help message 4965eef222Smrg# 5065eef222Smrg# MODE must be one of the following: 5165eef222Smrg# 5256957a04Smrg# clean remove files from the build directory 5356957a04Smrg# compile compile a source file into a libtool object 5456957a04Smrg# execute automatically set library path, then run a program 5556957a04Smrg# finish complete the installation of libtool libraries 5656957a04Smrg# install install libraries or executables 5756957a04Smrg# link create a library or an executable 5856957a04Smrg# uninstall remove libraries from an installed directory 5965eef222Smrg# 6056957a04Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 6156957a04Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 6265eef222Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 6365eef222Smrg# 6465eef222Smrg# When reporting a bug, please describe a test case to reproduce it and 6565eef222Smrg# include the following information: 6665eef222Smrg# 6756957a04Smrg# host-triplet: $host 6856957a04Smrg# shell: $SHELL 6956957a04Smrg# compiler: $LTCC 7056957a04Smrg# compiler flags: $LTCFLAGS 7156957a04Smrg# linker: $LD (gnu? $with_gnu_ld) 72200d7199Smrg# $progname: (GNU libtool) 2.4 7356957a04Smrg# automake: $automake_version 7456957a04Smrg# autoconf: $autoconf_version 7565eef222Smrg# 7665eef222Smrg# Report bugs to <bug-libtool@gnu.org>. 77200d7199Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 78200d7199Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 7965eef222Smrg 8056957a04SmrgPROGRAM=libtool 8165eef222SmrgPACKAGE=libtool 82200d7199SmrgVERSION=2.4 8365eef222SmrgTIMESTAMP="" 84200d7199Smrgpackage_revision=1.3293 8565eef222Smrg 8665eef222Smrg# Be Bourne compatible 8765eef222Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8865eef222Smrg emulate sh 8965eef222Smrg NULLCMD=: 9065eef222Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 9165eef222Smrg # is contrary to our usage. Disable this feature. 9265eef222Smrg alias -g '${1+"$@"}'='"$@"' 9365eef222Smrg setopt NO_GLOB_SUBST 9465eef222Smrgelse 9565eef222Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 9665eef222Smrgfi 9765eef222SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9865eef222SmrgDUALCASE=1; export DUALCASE # for MKS sh 9965eef222Smrg 10056957a04Smrg# A function that is used when there is no print builtin or printf. 10156957a04Smrgfunc_fallback_echo () 10256957a04Smrg{ 10356957a04Smrg eval 'cat <<_LTECHO_EOF 10456957a04Smrg$1 10556957a04Smrg_LTECHO_EOF' 10656957a04Smrg} 10756957a04Smrg 10865eef222Smrg# NLS nuisances: We save the old values to restore during execute mode. 10965eef222Smrglt_user_locale= 11065eef222Smrglt_safe_locale= 11165eef222Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 11265eef222Smrgdo 11365eef222Smrg eval "if test \"\${$lt_var+set}\" = set; then 11465eef222Smrg save_$lt_var=\$$lt_var 11565eef222Smrg $lt_var=C 11665eef222Smrg export $lt_var 11765eef222Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 11865eef222Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 11965eef222Smrg fi" 12065eef222Smrgdone 12156957a04SmrgLC_ALL=C 12256957a04SmrgLANGUAGE=C 12356957a04Smrgexport LANGUAGE LC_ALL 12465eef222Smrg 12565eef222Smrg$lt_unset CDPATH 12665eef222Smrg 12765eef222Smrg 12856957a04Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 12956957a04Smrg# is ksh but when the shell is invoked as "sh" and the current value of 13056957a04Smrg# the _XPG environment variable is not equal to 1 (one), the special 13156957a04Smrg# positional parameter $0, within a function call, is the name of the 13256957a04Smrg# function. 13356957a04Smrgprogpath="$0" 13465eef222Smrg 13565eef222Smrg 13665eef222Smrg 13765eef222Smrg: ${CP="cp -f"} 13856957a04Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 13956957a04Smrg: ${EGREP="grep -E"} 14056957a04Smrg: ${FGREP="grep -F"} 14156957a04Smrg: ${GREP="grep"} 14265eef222Smrg: ${LN_S="ln -s"} 14365eef222Smrg: ${MAKE="make"} 14465eef222Smrg: ${MKDIR="mkdir"} 14565eef222Smrg: ${MV="mv -f"} 14665eef222Smrg: ${RM="rm -f"} 14756957a04Smrg: ${SED="sed"} 14865eef222Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 14965eef222Smrg: ${Xsed="$SED -e 1s/^X//"} 150ef981d24Smrg 15165eef222Smrg# Global variables: 15265eef222SmrgEXIT_SUCCESS=0 15365eef222SmrgEXIT_FAILURE=1 15465eef222SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 15565eef222SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 15665eef222Smrg 15765eef222Smrgexit_status=$EXIT_SUCCESS 15865eef222Smrg 15965eef222Smrg# Make sure IFS has a sensible default 16065eef222Smrglt_nl=' 16165eef222Smrg' 16265eef222SmrgIFS=" $lt_nl" 16365eef222Smrg 16465eef222Smrgdirname="s,/[^/]*$,," 16565eef222Smrgbasename="s,^.*/,," 16665eef222Smrg 167200d7199Smrg# func_dirname file append nondir_replacement 168200d7199Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 169200d7199Smrg# otherwise set result to NONDIR_REPLACEMENT. 170200d7199Smrgfunc_dirname () 171200d7199Smrg{ 172200d7199Smrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 173200d7199Smrg if test "X$func_dirname_result" = "X${1}"; then 174200d7199Smrg func_dirname_result="${3}" 175200d7199Smrg else 176200d7199Smrg func_dirname_result="$func_dirname_result${2}" 177200d7199Smrg fi 178200d7199Smrg} # func_dirname may be replaced by extended shell implementation 179200d7199Smrg 180200d7199Smrg 181200d7199Smrg# func_basename file 182200d7199Smrgfunc_basename () 183200d7199Smrg{ 184200d7199Smrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 185200d7199Smrg} # func_basename may be replaced by extended shell implementation 186200d7199Smrg 187200d7199Smrg 18865eef222Smrg# func_dirname_and_basename file append nondir_replacement 18965eef222Smrg# perform func_basename and func_dirname in a single function 19065eef222Smrg# call: 19165eef222Smrg# dirname: Compute the dirname of FILE. If nonempty, 19265eef222Smrg# add APPEND to the result, otherwise set result 19365eef222Smrg# to NONDIR_REPLACEMENT. 19465eef222Smrg# value returned in "$func_dirname_result" 19565eef222Smrg# basename: Compute filename of FILE. 19665eef222Smrg# value retuned in "$func_basename_result" 19765eef222Smrg# Implementation must be kept synchronized with func_dirname 19865eef222Smrg# and func_basename. For efficiency, we do not delegate to 19965eef222Smrg# those functions but instead duplicate the functionality here. 20065eef222Smrgfunc_dirname_and_basename () 20165eef222Smrg{ 202200d7199Smrg # Extract subdirectory from the argument. 203200d7199Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 204200d7199Smrg if test "X$func_dirname_result" = "X${1}"; then 205200d7199Smrg func_dirname_result="${3}" 206200d7199Smrg else 207200d7199Smrg func_dirname_result="$func_dirname_result${2}" 208200d7199Smrg fi 209200d7199Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 210200d7199Smrg} # func_dirname_and_basename may be replaced by extended shell implementation 211200d7199Smrg 212200d7199Smrg 213200d7199Smrg# func_stripname prefix suffix name 214200d7199Smrg# strip PREFIX and SUFFIX off of NAME. 215200d7199Smrg# PREFIX and SUFFIX must not contain globbing or regex special 216200d7199Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 217200d7199Smrg# dot (in which case that matches only a dot). 218200d7199Smrg# func_strip_suffix prefix name 219200d7199Smrgfunc_stripname () 220200d7199Smrg{ 221200d7199Smrg case ${2} in 222200d7199Smrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 223200d7199Smrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 224200d7199Smrg esac 225200d7199Smrg} # func_stripname may be replaced by extended shell implementation 22665eef222Smrg 227ef981d24Smrg 22856957a04Smrg# These SED scripts presuppose an absolute path with a trailing slash. 22956957a04Smrgpathcar='s,^/\([^/]*\).*$,\1,' 23056957a04Smrgpathcdr='s,^/[^/]*,,' 23156957a04Smrgremovedotparts=':dotsl 23256957a04Smrg s@/\./@/@g 23356957a04Smrg t dotsl 23456957a04Smrg s,/\.$,/,' 23556957a04Smrgcollapseslashes='s@/\{1,\}@/@g' 23656957a04Smrgfinalslash='s,/*$,/,' 23756957a04Smrg 23856957a04Smrg# func_normal_abspath PATH 23956957a04Smrg# Remove doubled-up and trailing slashes, "." path components, 24056957a04Smrg# and cancel out any ".." path components in PATH after making 24156957a04Smrg# it an absolute path. 24256957a04Smrg# value returned in "$func_normal_abspath_result" 24356957a04Smrgfunc_normal_abspath () 24456957a04Smrg{ 24556957a04Smrg # Start from root dir and reassemble the path. 24656957a04Smrg func_normal_abspath_result= 24756957a04Smrg func_normal_abspath_tpath=$1 24856957a04Smrg func_normal_abspath_altnamespace= 24956957a04Smrg case $func_normal_abspath_tpath in 25056957a04Smrg "") 25156957a04Smrg # Empty path, that just means $cwd. 25256957a04Smrg func_stripname '' '/' "`pwd`" 25356957a04Smrg func_normal_abspath_result=$func_stripname_result 25456957a04Smrg return 25556957a04Smrg ;; 25656957a04Smrg # The next three entries are used to spot a run of precisely 25756957a04Smrg # two leading slashes without using negated character classes; 25856957a04Smrg # we take advantage of case's first-match behaviour. 25956957a04Smrg ///*) 26056957a04Smrg # Unusual form of absolute path, do nothing. 26156957a04Smrg ;; 26256957a04Smrg //*) 26356957a04Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 26456957a04Smrg # and for example Cygwin uses it to access remote file shares 26556957a04Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 26656957a04Smrg func_normal_abspath_altnamespace=/ 26756957a04Smrg ;; 26856957a04Smrg /*) 26956957a04Smrg # Absolute path, do nothing. 27056957a04Smrg ;; 27156957a04Smrg *) 27256957a04Smrg # Relative path, prepend $cwd. 27356957a04Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 27456957a04Smrg ;; 27556957a04Smrg esac 27656957a04Smrg # Cancel out all the simple stuff to save iterations. We also want 27756957a04Smrg # the path to end with a slash for ease of parsing, so make sure 27856957a04Smrg # there is one (and only one) here. 27956957a04Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 28056957a04Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 28156957a04Smrg while :; do 28256957a04Smrg # Processed it all yet? 28356957a04Smrg if test "$func_normal_abspath_tpath" = / ; then 28456957a04Smrg # If we ascended to the root using ".." the result may be empty now. 28556957a04Smrg if test -z "$func_normal_abspath_result" ; then 28656957a04Smrg func_normal_abspath_result=/ 28756957a04Smrg fi 28856957a04Smrg break 28956957a04Smrg fi 29056957a04Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 29156957a04Smrg -e "$pathcar"` 29256957a04Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 29356957a04Smrg -e "$pathcdr"` 29456957a04Smrg # Figure out what to do with it 29556957a04Smrg case $func_normal_abspath_tcomponent in 29656957a04Smrg "") 29756957a04Smrg # Trailing empty path component, ignore it. 29856957a04Smrg ;; 29956957a04Smrg ..) 30056957a04Smrg # Parent dir; strip last assembled component from result. 30156957a04Smrg func_dirname "$func_normal_abspath_result" 30256957a04Smrg func_normal_abspath_result=$func_dirname_result 30356957a04Smrg ;; 30456957a04Smrg *) 30556957a04Smrg # Actual path component, append it. 30656957a04Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 30756957a04Smrg ;; 30856957a04Smrg esac 30956957a04Smrg done 31056957a04Smrg # Restore leading double-slash if one was found on entry. 31156957a04Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 31256957a04Smrg} 31356957a04Smrg 31456957a04Smrg# func_relative_path SRCDIR DSTDIR 31556957a04Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 31656957a04Smrg# slash if non-empty, suitable for immediately appending a filename 31756957a04Smrg# without needing to append a separator. 31856957a04Smrg# value returned in "$func_relative_path_result" 31956957a04Smrgfunc_relative_path () 32056957a04Smrg{ 32156957a04Smrg func_relative_path_result= 32256957a04Smrg func_normal_abspath "$1" 32356957a04Smrg func_relative_path_tlibdir=$func_normal_abspath_result 32456957a04Smrg func_normal_abspath "$2" 32556957a04Smrg func_relative_path_tbindir=$func_normal_abspath_result 32656957a04Smrg 32756957a04Smrg # Ascend the tree starting from libdir 32856957a04Smrg while :; do 32956957a04Smrg # check if we have found a prefix of bindir 33056957a04Smrg case $func_relative_path_tbindir in 33156957a04Smrg $func_relative_path_tlibdir) 33256957a04Smrg # found an exact match 33356957a04Smrg func_relative_path_tcancelled= 33456957a04Smrg break 33556957a04Smrg ;; 33656957a04Smrg $func_relative_path_tlibdir*) 33756957a04Smrg # found a matching prefix 33856957a04Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 33956957a04Smrg func_relative_path_tcancelled=$func_stripname_result 34056957a04Smrg if test -z "$func_relative_path_result"; then 34156957a04Smrg func_relative_path_result=. 34256957a04Smrg fi 34356957a04Smrg break 34456957a04Smrg ;; 34556957a04Smrg *) 34656957a04Smrg func_dirname $func_relative_path_tlibdir 34756957a04Smrg func_relative_path_tlibdir=${func_dirname_result} 34856957a04Smrg if test "x$func_relative_path_tlibdir" = x ; then 34956957a04Smrg # Have to descend all the way to the root! 35056957a04Smrg func_relative_path_result=../$func_relative_path_result 35156957a04Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 35256957a04Smrg break 35356957a04Smrg fi 35456957a04Smrg func_relative_path_result=../$func_relative_path_result 35556957a04Smrg ;; 35656957a04Smrg esac 35756957a04Smrg done 35856957a04Smrg 35956957a04Smrg # Now calculate path; take care to avoid doubling-up slashes. 36056957a04Smrg func_stripname '' '/' "$func_relative_path_result" 36156957a04Smrg func_relative_path_result=$func_stripname_result 36256957a04Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 36356957a04Smrg if test "x$func_stripname_result" != x ; then 36456957a04Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 36556957a04Smrg fi 36656957a04Smrg 36756957a04Smrg # Normalisation. If bindir is libdir, return empty string, 36856957a04Smrg # else relative path ending with a slash; either way, target 36956957a04Smrg # file name can be directly appended. 37056957a04Smrg if test ! -z "$func_relative_path_result"; then 37156957a04Smrg func_stripname './' '' "$func_relative_path_result/" 37256957a04Smrg func_relative_path_result=$func_stripname_result 37356957a04Smrg fi 37456957a04Smrg} 375ef981d24Smrg 376ef981d24Smrg# The name of this program: 37765eef222Smrgfunc_dirname_and_basename "$progpath" 37865eef222Smrgprogname=$func_basename_result 379ef981d24Smrg 38065eef222Smrg# Make sure we have an absolute path for reexecution: 38165eef222Smrgcase $progpath in 38265eef222Smrg [\\/]*|[A-Za-z]:\\*) ;; 38365eef222Smrg *[\\/]*) 38465eef222Smrg progdir=$func_dirname_result 38565eef222Smrg progdir=`cd "$progdir" && pwd` 38665eef222Smrg progpath="$progdir/$progname" 38765eef222Smrg ;; 38865eef222Smrg *) 38965eef222Smrg save_IFS="$IFS" 39065eef222Smrg IFS=: 39165eef222Smrg for progdir in $PATH; do 39265eef222Smrg IFS="$save_IFS" 39365eef222Smrg test -x "$progdir/$progname" && break 39465eef222Smrg done 39565eef222Smrg IFS="$save_IFS" 39665eef222Smrg test -n "$progdir" || progdir=`pwd` 39765eef222Smrg progpath="$progdir/$progname" 39865eef222Smrg ;; 39965eef222Smrgesac 400ef981d24Smrg 40165eef222Smrg# Sed substitution that helps us do robust quoting. It backslashifies 40265eef222Smrg# metacharacters that are still active within double-quoted strings. 40365eef222SmrgXsed="${SED}"' -e 1s/^X//' 40465eef222Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 40565eef222Smrg 40665eef222Smrg# Same as above, but do not quote variable references. 40765eef222Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 40865eef222Smrg 409200d7199Smrg# Sed substitution that turns a string into a regex matching for the 410200d7199Smrg# string literally. 411200d7199Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 412200d7199Smrg 413200d7199Smrg# Sed substitution that converts a w32 file name or path 414200d7199Smrg# which contains forward slashes, into one that contains 415200d7199Smrg# (escaped) backslashes. A very naive implementation. 416200d7199Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 417200d7199Smrg 41865eef222Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 41965eef222Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 42065eef222Smrg# in input to double_quote_subst, that '$' was protected from expansion. 42165eef222Smrg# Since each input `\' is now two `\'s, look for any number of runs of 42265eef222Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 42365eef222Smrgbs='\\' 42465eef222Smrgbs2='\\\\' 42565eef222Smrgbs4='\\\\\\\\' 42665eef222Smrgdollar='\$' 42765eef222Smrgsed_double_backslash="\ 42865eef222Smrg s/$bs4/&\\ 42965eef222Smrg/g 43065eef222Smrg s/^$bs2$dollar/$bs&/ 43165eef222Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 43265eef222Smrg s/\n//g" 43365eef222Smrg 43465eef222Smrg# Standard options: 43565eef222Smrgopt_dry_run=false 43665eef222Smrgopt_help=false 43765eef222Smrgopt_quiet=false 43865eef222Smrgopt_verbose=false 43965eef222Smrgopt_warning=: 44065eef222Smrg 44165eef222Smrg# func_echo arg... 44265eef222Smrg# Echo program name prefixed message, along with the current mode 44365eef222Smrg# name if it has been set yet. 44465eef222Smrgfunc_echo () 44565eef222Smrg{ 446200d7199Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 44765eef222Smrg} 448ef981d24Smrg 44965eef222Smrg# func_verbose arg... 45065eef222Smrg# Echo program name prefixed message in verbose mode only. 45165eef222Smrgfunc_verbose () 45265eef222Smrg{ 45365eef222Smrg $opt_verbose && func_echo ${1+"$@"} 454ef981d24Smrg 45565eef222Smrg # A bug in bash halts the script if the last line of a function 45665eef222Smrg # fails when set -e is in force, so we need another command to 45765eef222Smrg # work around that: 45865eef222Smrg : 45965eef222Smrg} 460ef981d24Smrg 46156957a04Smrg# func_echo_all arg... 46256957a04Smrg# Invoke $ECHO with all args, space-separated. 46356957a04Smrgfunc_echo_all () 46456957a04Smrg{ 46556957a04Smrg $ECHO "$*" 46656957a04Smrg} 46756957a04Smrg 46865eef222Smrg# func_error arg... 46965eef222Smrg# Echo program name prefixed message to standard error. 47065eef222Smrgfunc_error () 47165eef222Smrg{ 472200d7199Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 47365eef222Smrg} 474ef981d24Smrg 47565eef222Smrg# func_warning arg... 47665eef222Smrg# Echo program name prefixed warning message to standard error. 47765eef222Smrgfunc_warning () 47865eef222Smrg{ 479200d7199Smrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 480ef981d24Smrg 48165eef222Smrg # bash bug again: 48265eef222Smrg : 48365eef222Smrg} 484ef981d24Smrg 48565eef222Smrg# func_fatal_error arg... 48665eef222Smrg# Echo program name prefixed message to standard error, and exit. 48765eef222Smrgfunc_fatal_error () 48865eef222Smrg{ 48965eef222Smrg func_error ${1+"$@"} 49065eef222Smrg exit $EXIT_FAILURE 49165eef222Smrg} 492ef981d24Smrg 49365eef222Smrg# func_fatal_help arg... 49465eef222Smrg# Echo program name prefixed message to standard error, followed by 49565eef222Smrg# a help hint, and exit. 49665eef222Smrgfunc_fatal_help () 49765eef222Smrg{ 49865eef222Smrg func_error ${1+"$@"} 49965eef222Smrg func_fatal_error "$help" 50065eef222Smrg} 50165eef222Smrghelp="Try \`$progname --help' for more information." ## default 502ef981d24Smrg 503ef981d24Smrg 50465eef222Smrg# func_grep expression filename 50565eef222Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 50665eef222Smrgfunc_grep () 50765eef222Smrg{ 50865eef222Smrg $GREP "$1" "$2" >/dev/null 2>&1 50965eef222Smrg} 51065eef222Smrg 51165eef222Smrg 51265eef222Smrg# func_mkdir_p directory-path 51365eef222Smrg# Make sure the entire path to DIRECTORY-PATH is available. 51465eef222Smrgfunc_mkdir_p () 51565eef222Smrg{ 51665eef222Smrg my_directory_path="$1" 51765eef222Smrg my_dir_list= 51865eef222Smrg 51965eef222Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 52065eef222Smrg 52165eef222Smrg # Protect directory names starting with `-' 52265eef222Smrg case $my_directory_path in 52365eef222Smrg -*) my_directory_path="./$my_directory_path" ;; 52465eef222Smrg esac 52565eef222Smrg 52665eef222Smrg # While some portion of DIR does not yet exist... 52765eef222Smrg while test ! -d "$my_directory_path"; do 52865eef222Smrg # ...make a list in topmost first order. Use a colon delimited 52965eef222Smrg # list incase some portion of path contains whitespace. 53065eef222Smrg my_dir_list="$my_directory_path:$my_dir_list" 53165eef222Smrg 53265eef222Smrg # If the last portion added has no slash in it, the list is done 53365eef222Smrg case $my_directory_path in */*) ;; *) break ;; esac 53465eef222Smrg 53565eef222Smrg # ...otherwise throw away the child directory and loop 53656957a04Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 53765eef222Smrg done 53856957a04Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 53965eef222Smrg 54065eef222Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 54165eef222Smrg for my_dir in $my_dir_list; do 54265eef222Smrg IFS="$save_mkdir_p_IFS" 54365eef222Smrg # mkdir can fail with a `File exist' error if two processes 54465eef222Smrg # try to create one of the directories concurrently. Don't 54565eef222Smrg # stop in that case! 54665eef222Smrg $MKDIR "$my_dir" 2>/dev/null || : 54765eef222Smrg done 54865eef222Smrg IFS="$save_mkdir_p_IFS" 54965eef222Smrg 55065eef222Smrg # Bail out if we (or some other process) failed to create a directory. 55165eef222Smrg test -d "$my_directory_path" || \ 55265eef222Smrg func_fatal_error "Failed to create \`$1'" 55365eef222Smrg fi 55465eef222Smrg} 555ef981d24Smrg 556ef981d24Smrg 557ef981d24Smrg# func_mktempdir [string] 558ef981d24Smrg# Make a temporary directory that won't clash with other running 559ef981d24Smrg# libtool processes, and avoids race conditions if possible. If 560ef981d24Smrg# given, STRING is the basename for that directory. 561ef981d24Smrgfunc_mktempdir () 562ef981d24Smrg{ 563ef981d24Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 564ef981d24Smrg 56565eef222Smrg if test "$opt_dry_run" = ":"; then 566ef981d24Smrg # Return a directory name, but don't create it in dry-run mode 567ef981d24Smrg my_tmpdir="${my_template}-$$" 568ef981d24Smrg else 569ef981d24Smrg 570ef981d24Smrg # If mktemp works, use that first and foremost 571ef981d24Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 572ef981d24Smrg 573ef981d24Smrg if test ! -d "$my_tmpdir"; then 57465eef222Smrg # Failing that, at least try and use $RANDOM to avoid a race 57565eef222Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 576ef981d24Smrg 57765eef222Smrg save_mktempdir_umask=`umask` 57865eef222Smrg umask 0077 57965eef222Smrg $MKDIR "$my_tmpdir" 58065eef222Smrg umask $save_mktempdir_umask 581ef981d24Smrg fi 582ef981d24Smrg 583ef981d24Smrg # If we're not in dry-run mode, bomb out on failure 58465eef222Smrg test -d "$my_tmpdir" || \ 58565eef222Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 586ef981d24Smrg fi 587ef981d24Smrg 58856957a04Smrg $ECHO "$my_tmpdir" 589ef981d24Smrg} 590ef981d24Smrg 591ef981d24Smrg 59265eef222Smrg# func_quote_for_eval arg 59365eef222Smrg# Aesthetically quote ARG to be evaled later. 59465eef222Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 59565eef222Smrg# is double-quoted, suitable for a subsequent eval, whereas 59665eef222Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 59765eef222Smrg# which are still active within double quotes backslashified. 59865eef222Smrgfunc_quote_for_eval () 599ef981d24Smrg{ 60065eef222Smrg case $1 in 60165eef222Smrg *[\\\`\"\$]*) 60256957a04Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 60365eef222Smrg *) 60465eef222Smrg func_quote_for_eval_unquoted_result="$1" ;; 60565eef222Smrg esac 60665eef222Smrg 60765eef222Smrg case $func_quote_for_eval_unquoted_result in 60865eef222Smrg # Double-quote args containing shell metacharacters to delay 60965eef222Smrg # word splitting, command substitution and and variable 61065eef222Smrg # expansion for a subsequent eval. 61165eef222Smrg # Many Bourne shells cannot handle close brackets correctly 61265eef222Smrg # in scan sets, so we specify it separately. 61365eef222Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 61465eef222Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 61565eef222Smrg ;; 61665eef222Smrg *) 61765eef222Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 618ef981d24Smrg esac 619ef981d24Smrg} 620ef981d24Smrg 621ef981d24Smrg 62265eef222Smrg# func_quote_for_expand arg 62365eef222Smrg# Aesthetically quote ARG to be evaled later; same as above, 62465eef222Smrg# but do not quote variable references. 62565eef222Smrgfunc_quote_for_expand () 626ef981d24Smrg{ 62765eef222Smrg case $1 in 62865eef222Smrg *[\\\`\"]*) 62956957a04Smrg my_arg=`$ECHO "$1" | $SED \ 63065eef222Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 631ef981d24Smrg *) 63265eef222Smrg my_arg="$1" ;; 63365eef222Smrg esac 63465eef222Smrg 63565eef222Smrg case $my_arg in 63665eef222Smrg # Double-quote args containing shell metacharacters to delay 63765eef222Smrg # word splitting and command substitution for a subsequent eval. 63865eef222Smrg # Many Bourne shells cannot handle close brackets correctly 63965eef222Smrg # in scan sets, so we specify it separately. 64065eef222Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 64165eef222Smrg my_arg="\"$my_arg\"" 64265eef222Smrg ;; 64365eef222Smrg esac 64465eef222Smrg 64565eef222Smrg func_quote_for_expand_result="$my_arg" 646ef981d24Smrg} 647ef981d24Smrg 648ef981d24Smrg 64965eef222Smrg# func_show_eval cmd [fail_exp] 65065eef222Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 65165eef222Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 65265eef222Smrg# is given, then evaluate it. 65365eef222Smrgfunc_show_eval () 654ef981d24Smrg{ 65565eef222Smrg my_cmd="$1" 65665eef222Smrg my_fail_exp="${2-:}" 657ef981d24Smrg 65865eef222Smrg ${opt_silent-false} || { 65965eef222Smrg func_quote_for_expand "$my_cmd" 66065eef222Smrg eval "func_echo $func_quote_for_expand_result" 66165eef222Smrg } 66265eef222Smrg 66365eef222Smrg if ${opt_dry_run-false}; then :; else 66465eef222Smrg eval "$my_cmd" 66565eef222Smrg my_status=$? 66665eef222Smrg if test "$my_status" -eq 0; then :; else 66765eef222Smrg eval "(exit $my_status); $my_fail_exp" 66865eef222Smrg fi 669ef981d24Smrg fi 670ef981d24Smrg} 671ef981d24Smrg 67265eef222Smrg 67365eef222Smrg# func_show_eval_locale cmd [fail_exp] 67465eef222Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 67565eef222Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 67665eef222Smrg# is given, then evaluate it. Use the saved locale for evaluation. 67765eef222Smrgfunc_show_eval_locale () 678ef981d24Smrg{ 67965eef222Smrg my_cmd="$1" 68065eef222Smrg my_fail_exp="${2-:}" 681ef981d24Smrg 68265eef222Smrg ${opt_silent-false} || { 68365eef222Smrg func_quote_for_expand "$my_cmd" 68465eef222Smrg eval "func_echo $func_quote_for_expand_result" 68565eef222Smrg } 68665eef222Smrg 68765eef222Smrg if ${opt_dry_run-false}; then :; else 68865eef222Smrg eval "$lt_user_locale 68965eef222Smrg $my_cmd" 69065eef222Smrg my_status=$? 69165eef222Smrg eval "$lt_safe_locale" 69265eef222Smrg if test "$my_status" -eq 0; then :; else 69365eef222Smrg eval "(exit $my_status); $my_fail_exp" 694ef981d24Smrg fi 69565eef222Smrg fi 696ef981d24Smrg} 697ef981d24Smrg 698200d7199Smrg# func_tr_sh 699200d7199Smrg# Turn $1 into a string suitable for a shell variable name. 700200d7199Smrg# Result is stored in $func_tr_sh_result. All characters 701200d7199Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 702200d7199Smrg# if $1 begins with a digit, a '_' is prepended as well. 703200d7199Smrgfunc_tr_sh () 704200d7199Smrg{ 705200d7199Smrg case $1 in 706200d7199Smrg [0-9]* | *[!a-zA-Z0-9_]*) 707200d7199Smrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 708200d7199Smrg ;; 709200d7199Smrg * ) 710200d7199Smrg func_tr_sh_result=$1 711200d7199Smrg ;; 712200d7199Smrg esac 713200d7199Smrg} 714200d7199Smrg 715ef981d24Smrg 71665eef222Smrg# func_version 71765eef222Smrg# Echo version message to standard output and exit. 71865eef222Smrgfunc_version () 71965eef222Smrg{ 720200d7199Smrg $opt_debug 721200d7199Smrg 72256957a04Smrg $SED -n '/(C)/!b go 72356957a04Smrg :more 72456957a04Smrg /\./!{ 72556957a04Smrg N 72656957a04Smrg s/\n# / / 72756957a04Smrg b more 72856957a04Smrg } 72956957a04Smrg :go 73056957a04Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 73165eef222Smrg s/^# // 73265eef222Smrg s/^# *$// 73365eef222Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 73465eef222Smrg p 73565eef222Smrg }' < "$progpath" 73665eef222Smrg exit $? 73765eef222Smrg} 73865eef222Smrg 73965eef222Smrg# func_usage 74065eef222Smrg# Echo short help message to standard output and exit. 74165eef222Smrgfunc_usage () 74265eef222Smrg{ 743200d7199Smrg $opt_debug 744200d7199Smrg 74556957a04Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 74665eef222Smrg s/^# // 74765eef222Smrg s/^# *$// 74865eef222Smrg s/\$progname/'$progname'/ 74965eef222Smrg p 75065eef222Smrg }' < "$progpath" 75156957a04Smrg echo 75265eef222Smrg $ECHO "run \`$progname --help | more' for full usage" 75365eef222Smrg exit $? 75465eef222Smrg} 75565eef222Smrg 75656957a04Smrg# func_help [NOEXIT] 75756957a04Smrg# Echo long help message to standard output and exit, 75856957a04Smrg# unless 'noexit' is passed as argument. 75965eef222Smrgfunc_help () 76065eef222Smrg{ 761200d7199Smrg $opt_debug 762200d7199Smrg 76365eef222Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 764200d7199Smrg :print 76565eef222Smrg s/^# // 76665eef222Smrg s/^# *$// 76765eef222Smrg s*\$progname*'$progname'* 76865eef222Smrg s*\$host*'"$host"'* 76965eef222Smrg s*\$SHELL*'"$SHELL"'* 77065eef222Smrg s*\$LTCC*'"$LTCC"'* 77165eef222Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 77265eef222Smrg s*\$LD*'"$LD"'* 77365eef222Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 77465eef222Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 77565eef222Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 77665eef222Smrg p 777200d7199Smrg d 778200d7199Smrg } 779200d7199Smrg /^# .* home page:/b print 780200d7199Smrg /^# General help using/b print 781200d7199Smrg ' < "$progpath" 78256957a04Smrg ret=$? 78356957a04Smrg if test -z "$1"; then 78456957a04Smrg exit $ret 78556957a04Smrg fi 78665eef222Smrg} 78765eef222Smrg 78865eef222Smrg# func_missing_arg argname 78965eef222Smrg# Echo program name prefixed message to standard error and set global 79065eef222Smrg# exit_cmd. 79165eef222Smrgfunc_missing_arg () 79265eef222Smrg{ 793200d7199Smrg $opt_debug 794200d7199Smrg 79556957a04Smrg func_error "missing argument for $1." 79665eef222Smrg exit_cmd=exit 79765eef222Smrg} 79865eef222Smrg 79965eef222Smrg 800200d7199Smrg# func_split_short_opt shortopt 801200d7199Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 802200d7199Smrg# variables after splitting SHORTOPT after the 2nd character. 803200d7199Smrgfunc_split_short_opt () 804200d7199Smrg{ 805200d7199Smrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 806200d7199Smrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 807200d7199Smrg 808200d7199Smrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 809200d7199Smrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 810200d7199Smrg} # func_split_short_opt may be replaced by extended shell implementation 811200d7199Smrg 812200d7199Smrg 813200d7199Smrg# func_split_long_opt longopt 814200d7199Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 815200d7199Smrg# variables after splitting LONGOPT at the `=' sign. 816200d7199Smrgfunc_split_long_opt () 817200d7199Smrg{ 818200d7199Smrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 819200d7199Smrg my_sed_long_arg='1s/^--[^=]*=//' 820200d7199Smrg 821200d7199Smrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 822200d7199Smrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 823200d7199Smrg} # func_split_long_opt may be replaced by extended shell implementation 824200d7199Smrg 825200d7199Smrgexit_cmd=: 82665eef222Smrg 82765eef222Smrg 82865eef222Smrg 82965eef222Smrg 830ef981d24Smrg 83165eef222Smrgmagic="%%%MAGIC variable%%%" 83265eef222Smrgmagic_exe="%%%MAGIC EXE variable%%%" 833ef981d24Smrg 83465eef222Smrg# Global variables. 83565eef222Smrgnonopt= 83665eef222Smrgpreserve_args= 83765eef222Smrglo2o="s/\\.lo\$/.${objext}/" 83865eef222Smrgo2lo="s/\\.${objext}\$/.lo/" 83965eef222Smrgextracted_archives= 84065eef222Smrgextracted_serial=0 841ef981d24Smrg 84265eef222Smrg# If this variable is set in any of the actions, the command in it 84365eef222Smrg# will be execed at the end. This prevents here-documents from being 84465eef222Smrg# left over by shells. 84565eef222Smrgexec_cmd= 846ef981d24Smrg 847200d7199Smrg# func_append var value 848200d7199Smrg# Append VALUE to the end of shell variable VAR. 849200d7199Smrgfunc_append () 850200d7199Smrg{ 851200d7199Smrg eval "${1}=\$${1}\${2}" 852200d7199Smrg} # func_append may be replaced by extended shell implementation 853200d7199Smrg 854200d7199Smrg# func_append_quoted var value 855200d7199Smrg# Quote VALUE and append to the end of shell variable VAR, separated 856200d7199Smrg# by a space. 857200d7199Smrgfunc_append_quoted () 858200d7199Smrg{ 859200d7199Smrg func_quote_for_eval "${2}" 860200d7199Smrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 861200d7199Smrg} # func_append_quoted may be replaced by extended shell implementation 862200d7199Smrg 863200d7199Smrg 864200d7199Smrg# func_arith arithmetic-term... 865200d7199Smrgfunc_arith () 866200d7199Smrg{ 867200d7199Smrg func_arith_result=`expr "${@}"` 868200d7199Smrg} # func_arith may be replaced by extended shell implementation 869200d7199Smrg 870200d7199Smrg 871200d7199Smrg# func_len string 872200d7199Smrg# STRING may not start with a hyphen. 873200d7199Smrgfunc_len () 874200d7199Smrg{ 875200d7199Smrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 876200d7199Smrg} # func_len may be replaced by extended shell implementation 877200d7199Smrg 878200d7199Smrg 879200d7199Smrg# func_lo2o object 880200d7199Smrgfunc_lo2o () 881200d7199Smrg{ 882200d7199Smrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 883200d7199Smrg} # func_lo2o may be replaced by extended shell implementation 884200d7199Smrg 885200d7199Smrg 886200d7199Smrg# func_xform libobj-or-source 887200d7199Smrgfunc_xform () 888200d7199Smrg{ 889200d7199Smrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 890200d7199Smrg} # func_xform may be replaced by extended shell implementation 891200d7199Smrg 892200d7199Smrg 89365eef222Smrg# func_fatal_configuration arg... 89465eef222Smrg# Echo program name prefixed message to standard error, followed by 89565eef222Smrg# a configuration failure hint, and exit. 89665eef222Smrgfunc_fatal_configuration () 89765eef222Smrg{ 89865eef222Smrg func_error ${1+"$@"} 89965eef222Smrg func_error "See the $PACKAGE documentation for more information." 90065eef222Smrg func_fatal_error "Fatal configuration error." 90165eef222Smrg} 90265eef222Smrg 90365eef222Smrg 90465eef222Smrg# func_config 90565eef222Smrg# Display the configuration for all the tags in this script. 90665eef222Smrgfunc_config () 90765eef222Smrg{ 90865eef222Smrg re_begincf='^# ### BEGIN LIBTOOL' 90965eef222Smrg re_endcf='^# ### END LIBTOOL' 91065eef222Smrg 91165eef222Smrg # Default configuration. 91265eef222Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 913ef981d24Smrg 914ef981d24Smrg # Now print the configurations for the tags. 915ef981d24Smrg for tagname in $taglist; do 91665eef222Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 917ef981d24Smrg done 918ef981d24Smrg 91965eef222Smrg exit $? 92065eef222Smrg} 921ef981d24Smrg 92265eef222Smrg# func_features 92365eef222Smrg# Display the features supported by this script. 92465eef222Smrgfunc_features () 92565eef222Smrg{ 92656957a04Smrg echo "host: $host" 927ef981d24Smrg if test "$build_libtool_libs" = yes; then 92856957a04Smrg echo "enable shared libraries" 929ef981d24Smrg else 93056957a04Smrg echo "disable shared libraries" 931ef981d24Smrg fi 932ef981d24Smrg if test "$build_old_libs" = yes; then 93356957a04Smrg echo "enable static libraries" 934ef981d24Smrg else 93556957a04Smrg echo "disable static libraries" 936ef981d24Smrg fi 93765eef222Smrg 938ef981d24Smrg exit $? 93965eef222Smrg} 94065eef222Smrg 94165eef222Smrg# func_enable_tag tagname 94265eef222Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 94365eef222Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 94465eef222Smrg# variable here. 94565eef222Smrgfunc_enable_tag () 94665eef222Smrg{ 94765eef222Smrg # Global variable: 94865eef222Smrg tagname="$1" 949ef981d24Smrg 95065eef222Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 95165eef222Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 95265eef222Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 953ef981d24Smrg 95465eef222Smrg # Validate tagname. 95565eef222Smrg case $tagname in 95665eef222Smrg *[!-_A-Za-z0-9,/]*) 95765eef222Smrg func_fatal_error "invalid tag name: $tagname" 95865eef222Smrg ;; 95965eef222Smrg esac 960ef981d24Smrg 96165eef222Smrg # Don't test for the "default" C tag, as we know it's 96265eef222Smrg # there but not specially marked. 96365eef222Smrg case $tagname in 96465eef222Smrg CC) ;; 96565eef222Smrg *) 96665eef222Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 96765eef222Smrg taglist="$taglist $tagname" 96865eef222Smrg 96965eef222Smrg # Evaluate the configuration. Be careful to quote the path 97065eef222Smrg # and the sed script, to avoid splitting on whitespace, but 97165eef222Smrg # also don't use non-portable quotes within backquotes within 97265eef222Smrg # quotes we have to do it in 2 steps: 97365eef222Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 97465eef222Smrg eval "$extractedcf" 97565eef222Smrg else 97665eef222Smrg func_error "ignoring unknown tag $tagname" 97765eef222Smrg fi 97865eef222Smrg ;; 97965eef222Smrg esac 98065eef222Smrg} 981ef981d24Smrg 982200d7199Smrg# func_check_version_match 983200d7199Smrg# Ensure that we are using m4 macros, and libtool script from the same 984200d7199Smrg# release of libtool. 985200d7199Smrgfunc_check_version_match () 98665eef222Smrg{ 987200d7199Smrg if test "$package_revision" != "$macro_revision"; then 988200d7199Smrg if test "$VERSION" != "$macro_version"; then 989200d7199Smrg if test -z "$macro_version"; then 990200d7199Smrg cat >&2 <<_LT_EOF 991200d7199Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 992200d7199Smrg$progname: definition of this LT_INIT comes from an older release. 993200d7199Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 994200d7199Smrg$progname: and run autoconf again. 995200d7199Smrg_LT_EOF 996200d7199Smrg else 997200d7199Smrg cat >&2 <<_LT_EOF 998200d7199Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 999200d7199Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 1000200d7199Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 1001200d7199Smrg$progname: and run autoconf again. 1002200d7199Smrg_LT_EOF 1003200d7199Smrg fi 1004200d7199Smrg else 1005200d7199Smrg cat >&2 <<_LT_EOF 1006200d7199Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1007200d7199Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1008200d7199Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1009200d7199Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 1010200d7199Smrg_LT_EOF 1011200d7199Smrg fi 1012ef981d24Smrg 1013200d7199Smrg exit $EXIT_MISMATCH 1014200d7199Smrg fi 1015200d7199Smrg} 1016200d7199Smrg 1017200d7199Smrg 1018200d7199Smrg# Shorthand for --mode=foo, only valid as the first argument 1019200d7199Smrgcase $1 in 1020200d7199Smrgclean|clea|cle|cl) 1021200d7199Smrg shift; set dummy --mode clean ${1+"$@"}; shift 1022200d7199Smrg ;; 1023200d7199Smrgcompile|compil|compi|comp|com|co|c) 1024200d7199Smrg shift; set dummy --mode compile ${1+"$@"}; shift 1025200d7199Smrg ;; 1026200d7199Smrgexecute|execut|execu|exec|exe|ex|e) 1027200d7199Smrg shift; set dummy --mode execute ${1+"$@"}; shift 1028200d7199Smrg ;; 1029200d7199Smrgfinish|finis|fini|fin|fi|f) 1030200d7199Smrg shift; set dummy --mode finish ${1+"$@"}; shift 1031200d7199Smrg ;; 1032200d7199Smrginstall|instal|insta|inst|ins|in|i) 1033200d7199Smrg shift; set dummy --mode install ${1+"$@"}; shift 1034200d7199Smrg ;; 1035200d7199Smrglink|lin|li|l) 1036200d7199Smrg shift; set dummy --mode link ${1+"$@"}; shift 1037200d7199Smrg ;; 1038200d7199Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 1039200d7199Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 1040200d7199Smrg ;; 1041200d7199Smrgesac 1042ef981d24Smrg 1043200d7199Smrg 1044200d7199Smrg 1045200d7199Smrg# Option defaults: 1046200d7199Smrgopt_debug=: 1047200d7199Smrgopt_dry_run=false 1048200d7199Smrgopt_config=false 1049200d7199Smrgopt_preserve_dup_deps=false 1050200d7199Smrgopt_features=false 1051200d7199Smrgopt_finish=false 1052200d7199Smrgopt_help=false 1053200d7199Smrgopt_help_all=false 1054200d7199Smrgopt_silent=: 1055200d7199Smrgopt_verbose=: 1056200d7199Smrgopt_silent=false 1057200d7199Smrgopt_verbose=false 1058200d7199Smrg 1059200d7199Smrg 1060200d7199Smrg# Parse options once, thoroughly. This comes as soon as possible in the 1061200d7199Smrg# script to make things like `--version' happen as quickly as we can. 1062200d7199Smrg{ 1063200d7199Smrg # this just eases exit handling 1064200d7199Smrg while test $# -gt 0; do 106565eef222Smrg opt="$1" 106665eef222Smrg shift 106765eef222Smrg case $opt in 1068200d7199Smrg --debug|-x) opt_debug='set -x' 106965eef222Smrg func_echo "enabling shell trace mode" 107065eef222Smrg $opt_debug 107165eef222Smrg ;; 1072200d7199Smrg --dry-run|--dryrun|-n) 1073200d7199Smrg opt_dry_run=: 107465eef222Smrg ;; 1075200d7199Smrg --config) 1076200d7199Smrg opt_config=: 1077200d7199Smrgfunc_config 1078200d7199Smrg ;; 1079200d7199Smrg --dlopen|-dlopen) 1080200d7199Smrg optarg="$1" 1081200d7199Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 1082200d7199Smrg}$optarg" 108365eef222Smrg shift 108465eef222Smrg ;; 108565eef222Smrg --preserve-dup-deps) 1086200d7199Smrg opt_preserve_dup_deps=: 108756957a04Smrg ;; 1088200d7199Smrg --features) 1089200d7199Smrg opt_features=: 1090200d7199Smrgfunc_features 109165eef222Smrg ;; 1092200d7199Smrg --finish) 1093200d7199Smrg opt_finish=: 1094200d7199Smrgset dummy --mode finish ${1+"$@"}; shift 1095200d7199Smrg ;; 1096200d7199Smrg --help) 1097200d7199Smrg opt_help=: 1098200d7199Smrg ;; 1099200d7199Smrg --help-all) 1100200d7199Smrg opt_help_all=: 1101200d7199Smrgopt_help=': help-all' 1102200d7199Smrg ;; 1103200d7199Smrg --mode) 1104200d7199Smrg test $# = 0 && func_missing_arg $opt && break 1105200d7199Smrg optarg="$1" 1106200d7199Smrg opt_mode="$optarg" 1107200d7199Smrgcase $optarg in 1108200d7199Smrg # Valid mode arguments: 1109200d7199Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 1110200d7199Smrg 1111200d7199Smrg # Catch anything else as an error 1112200d7199Smrg *) func_error "invalid argument for $opt" 1113200d7199Smrg exit_cmd=exit 1114200d7199Smrg break 1115200d7199Smrg ;; 1116200d7199Smrgesac 1117200d7199Smrg shift 1118200d7199Smrg ;; 1119200d7199Smrg --no-silent|--no-quiet) 112065eef222Smrg opt_silent=false 1121200d7199Smrgfunc_append preserve_args " $opt" 112256957a04Smrg ;; 1123200d7199Smrg --no-verbose) 112456957a04Smrg opt_verbose=false 1125200d7199Smrgfunc_append preserve_args " $opt" 112665eef222Smrg ;; 1127200d7199Smrg --silent|--quiet) 1128200d7199Smrg opt_silent=: 1129200d7199Smrgfunc_append preserve_args " $opt" 1130200d7199Smrg opt_verbose=false 1131200d7199Smrg ;; 1132200d7199Smrg --verbose|-v) 1133200d7199Smrg opt_verbose=: 1134200d7199Smrgfunc_append preserve_args " $opt" 1135200d7199Smrgopt_silent=false 1136200d7199Smrg ;; 1137200d7199Smrg --tag) 1138200d7199Smrg test $# = 0 && func_missing_arg $opt && break 1139200d7199Smrg optarg="$1" 1140200d7199Smrg opt_tag="$optarg" 1141200d7199Smrgfunc_append preserve_args " $opt $optarg" 1142200d7199Smrgfunc_enable_tag "$optarg" 114365eef222Smrg shift 114465eef222Smrg ;; 114565eef222Smrg 1146200d7199Smrg -\?|-h) func_usage ;; 1147200d7199Smrg --help) func_help ;; 1148200d7199Smrg --version) func_version ;; 1149200d7199Smrg 115065eef222Smrg # Separate optargs to long options: 1151200d7199Smrg --*=*) 1152200d7199Smrg func_split_long_opt "$opt" 1153200d7199Smrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 115465eef222Smrg shift 115565eef222Smrg ;; 115665eef222Smrg 1157200d7199Smrg # Separate non-argument short options: 1158200d7199Smrg -\?*|-h*|-n*|-v*) 1159200d7199Smrg func_split_short_opt "$opt" 1160200d7199Smrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 1161200d7199Smrg shift 116265eef222Smrg ;; 1163200d7199Smrg 1164200d7199Smrg --) break ;; 1165200d7199Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 1166200d7199Smrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 116765eef222Smrg esac 116865eef222Smrg done 116965eef222Smrg 1170200d7199Smrg # Validate options: 1171200d7199Smrg 1172200d7199Smrg # save first non-option argument 1173200d7199Smrg if test "$#" -gt 0; then 1174200d7199Smrg nonopt="$opt" 1175200d7199Smrg shift 1176200d7199Smrg fi 1177200d7199Smrg 1178200d7199Smrg # preserve --debug 1179200d7199Smrg test "$opt_debug" = : || func_append preserve_args " --debug" 118065eef222Smrg 118165eef222Smrg case $host in 118265eef222Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 118365eef222Smrg # don't eliminate duplications in $postdeps and $predeps 118465eef222Smrg opt_duplicate_compiler_generated_deps=: 1185ef981d24Smrg ;; 1186ef981d24Smrg *) 1187200d7199Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 118865eef222Smrg ;; 118965eef222Smrg esac 1190ef981d24Smrg 1191200d7199Smrg $opt_help || { 1192200d7199Smrg # Sanity checks first: 1193200d7199Smrg func_check_version_match 119465eef222Smrg 1195200d7199Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1196200d7199Smrg func_fatal_configuration "not configured to build any kind of library" 119765eef222Smrg fi 119865eef222Smrg 1199200d7199Smrg # Darwin sucks 1200200d7199Smrg eval std_shrext=\"$shrext_cmds\" 120165eef222Smrg 1202200d7199Smrg # Only execute mode is allowed to have -dlopen flags. 1203200d7199Smrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 1204200d7199Smrg func_error "unrecognized option \`-dlopen'" 1205200d7199Smrg $ECHO "$help" 1>&2 1206200d7199Smrg exit $EXIT_FAILURE 1207200d7199Smrg fi 120865eef222Smrg 1209200d7199Smrg # Change the help message to a mode-specific one. 1210200d7199Smrg generic_help="$help" 1211200d7199Smrg help="Try \`$progname --help --mode=$opt_mode' for more information." 1212200d7199Smrg } 121365eef222Smrg 121465eef222Smrg 1215200d7199Smrg # Bail if the options were screwed 1216200d7199Smrg $exit_cmd $EXIT_FAILURE 1217200d7199Smrg} 121865eef222Smrg 121965eef222Smrg 1220ef981d24Smrg 1221ef981d24Smrg 1222200d7199Smrg## ----------- ## 1223200d7199Smrg## Main. ## 1224200d7199Smrg## ----------- ## 1225ef981d24Smrg 122665eef222Smrg# func_lalib_p file 122765eef222Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 122865eef222Smrg# This function is only a basic sanity check; it will hardly flush out 122965eef222Smrg# determined imposters. 123065eef222Smrgfunc_lalib_p () 123165eef222Smrg{ 123265eef222Smrg test -f "$1" && 123365eef222Smrg $SED -e 4q "$1" 2>/dev/null \ 123465eef222Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 123565eef222Smrg} 1236ef981d24Smrg 123765eef222Smrg# func_lalib_unsafe_p file 123865eef222Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 123965eef222Smrg# This function implements the same check as func_lalib_p without 124065eef222Smrg# resorting to external programs. To this end, it redirects stdin and 124165eef222Smrg# closes it afterwards, without saving the original file descriptor. 124265eef222Smrg# As a safety measure, use it only where a negative result would be 124365eef222Smrg# fatal anyway. Works if `file' does not exist. 124465eef222Smrgfunc_lalib_unsafe_p () 124565eef222Smrg{ 124665eef222Smrg lalib_p=no 124765eef222Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 124865eef222Smrg for lalib_p_l in 1 2 3 4 124965eef222Smrg do 125065eef222Smrg read lalib_p_line 125165eef222Smrg case "$lalib_p_line" in 125265eef222Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 125365eef222Smrg esac 125465eef222Smrg done 125565eef222Smrg exec 0<&5 5<&- 125665eef222Smrg fi 125765eef222Smrg test "$lalib_p" = yes 125865eef222Smrg} 1259ef981d24Smrg 126065eef222Smrg# func_ltwrapper_script_p file 126165eef222Smrg# True iff FILE is a libtool wrapper script 126265eef222Smrg# This function is only a basic sanity check; it will hardly flush out 126365eef222Smrg# determined imposters. 126465eef222Smrgfunc_ltwrapper_script_p () 126565eef222Smrg{ 126665eef222Smrg func_lalib_p "$1" 126765eef222Smrg} 1268ef981d24Smrg 126965eef222Smrg# func_ltwrapper_executable_p file 127065eef222Smrg# True iff FILE is a libtool wrapper executable 127165eef222Smrg# This function is only a basic sanity check; it will hardly flush out 127265eef222Smrg# determined imposters. 127365eef222Smrgfunc_ltwrapper_executable_p () 127465eef222Smrg{ 127565eef222Smrg func_ltwrapper_exec_suffix= 127665eef222Smrg case $1 in 127765eef222Smrg *.exe) ;; 127865eef222Smrg *) func_ltwrapper_exec_suffix=.exe ;; 127965eef222Smrg esac 128065eef222Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 128165eef222Smrg} 1282ef981d24Smrg 128365eef222Smrg# func_ltwrapper_scriptname file 128465eef222Smrg# Assumes file is an ltwrapper_executable 128565eef222Smrg# uses $file to determine the appropriate filename for a 128665eef222Smrg# temporary ltwrapper_script. 128765eef222Smrgfunc_ltwrapper_scriptname () 128865eef222Smrg{ 1289200d7199Smrg func_dirname_and_basename "$1" "" "." 1290200d7199Smrg func_stripname '' '.exe' "$func_basename_result" 1291200d7199Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 129265eef222Smrg} 1293ef981d24Smrg 129465eef222Smrg# func_ltwrapper_p file 129565eef222Smrg# True iff FILE is a libtool wrapper script or wrapper executable 129665eef222Smrg# This function is only a basic sanity check; it will hardly flush out 129765eef222Smrg# determined imposters. 129865eef222Smrgfunc_ltwrapper_p () 129965eef222Smrg{ 130065eef222Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 130165eef222Smrg} 1302ef981d24Smrg 1303ef981d24Smrg 130465eef222Smrg# func_execute_cmds commands fail_cmd 130565eef222Smrg# Execute tilde-delimited COMMANDS. 130665eef222Smrg# If FAIL_CMD is given, eval that upon failure. 130765eef222Smrg# FAIL_CMD may read-access the current command in variable CMD! 130865eef222Smrgfunc_execute_cmds () 130965eef222Smrg{ 131065eef222Smrg $opt_debug 131165eef222Smrg save_ifs=$IFS; IFS='~' 131265eef222Smrg for cmd in $1; do 131365eef222Smrg IFS=$save_ifs 131465eef222Smrg eval cmd=\"$cmd\" 131565eef222Smrg func_show_eval "$cmd" "${2-:}" 131665eef222Smrg done 131765eef222Smrg IFS=$save_ifs 131865eef222Smrg} 131965eef222Smrg 132065eef222Smrg 132165eef222Smrg# func_source file 132265eef222Smrg# Source FILE, adding directory component if necessary. 132365eef222Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 132465eef222Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 132565eef222Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 132665eef222Smrg# `FILE.' does not work on cygwin managed mounts. 132765eef222Smrgfunc_source () 132865eef222Smrg{ 132965eef222Smrg $opt_debug 133065eef222Smrg case $1 in 133165eef222Smrg */* | *\\*) . "$1" ;; 133265eef222Smrg *) . "./$1" ;; 133365eef222Smrg esac 133465eef222Smrg} 133565eef222Smrg 133665eef222Smrg 1337200d7199Smrg# func_resolve_sysroot PATH 1338200d7199Smrg# Replace a leading = in PATH with a sysroot. Store the result into 1339200d7199Smrg# func_resolve_sysroot_result 1340200d7199Smrgfunc_resolve_sysroot () 1341200d7199Smrg{ 1342200d7199Smrg func_resolve_sysroot_result=$1 1343200d7199Smrg case $func_resolve_sysroot_result in 1344200d7199Smrg =*) 1345200d7199Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 1346200d7199Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1347200d7199Smrg ;; 1348200d7199Smrg esac 1349200d7199Smrg} 1350200d7199Smrg 1351200d7199Smrg# func_replace_sysroot PATH 1352200d7199Smrg# If PATH begins with the sysroot, replace it with = and 1353200d7199Smrg# store the result into func_replace_sysroot_result. 1354200d7199Smrgfunc_replace_sysroot () 1355200d7199Smrg{ 1356200d7199Smrg case "$lt_sysroot:$1" in 1357200d7199Smrg ?*:"$lt_sysroot"*) 1358200d7199Smrg func_stripname "$lt_sysroot" '' "$1" 1359200d7199Smrg func_replace_sysroot_result="=$func_stripname_result" 1360200d7199Smrg ;; 1361200d7199Smrg *) 1362200d7199Smrg # Including no sysroot. 1363200d7199Smrg func_replace_sysroot_result=$1 1364200d7199Smrg ;; 1365200d7199Smrg esac 1366200d7199Smrg} 1367200d7199Smrg 136865eef222Smrg# func_infer_tag arg 136965eef222Smrg# Infer tagged configuration to use if any are available and 137065eef222Smrg# if one wasn't chosen via the "--tag" command line option. 137165eef222Smrg# Only attempt this if the compiler in the base compile 137265eef222Smrg# command doesn't match the default compiler. 137365eef222Smrg# arg is usually of the form 'gcc ...' 137465eef222Smrgfunc_infer_tag () 137565eef222Smrg{ 137665eef222Smrg $opt_debug 137765eef222Smrg if test -n "$available_tags" && test -z "$tagname"; then 137865eef222Smrg CC_quoted= 137965eef222Smrg for arg in $CC; do 1380200d7199Smrg func_append_quoted CC_quoted "$arg" 138165eef222Smrg done 138256957a04Smrg CC_expanded=`func_echo_all $CC` 138356957a04Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 138465eef222Smrg case $@ in 138565eef222Smrg # Blanks in the command may have been stripped by the calling shell, 138665eef222Smrg # but not from the CC environment variable when configure was run. 138756957a04Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 138856957a04Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 138965eef222Smrg # Blanks at the start of $base_compile will cause this to fail 139065eef222Smrg # if we don't check for them as well. 139165eef222Smrg *) 139265eef222Smrg for z in $available_tags; do 139365eef222Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 139465eef222Smrg # Evaluate the configuration. 139565eef222Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 139665eef222Smrg CC_quoted= 139765eef222Smrg for arg in $CC; do 139865eef222Smrg # Double-quote args containing other shell metacharacters. 1399200d7199Smrg func_append_quoted CC_quoted "$arg" 140065eef222Smrg done 140156957a04Smrg CC_expanded=`func_echo_all $CC` 140256957a04Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 140365eef222Smrg case "$@ " in 140456957a04Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 140556957a04Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 140665eef222Smrg # The compiler in the base compile command matches 140765eef222Smrg # the one in the tagged configuration. 140865eef222Smrg # Assume this is the tagged configuration we want. 140965eef222Smrg tagname=$z 141065eef222Smrg break 141165eef222Smrg ;; 1412ef981d24Smrg esac 141365eef222Smrg fi 141465eef222Smrg done 141565eef222Smrg # If $tagname still isn't set, then no tagged configuration 141665eef222Smrg # was found and let the user know that the "--tag" command 141765eef222Smrg # line option must be used. 141865eef222Smrg if test -z "$tagname"; then 141965eef222Smrg func_echo "unable to infer tagged configuration" 142065eef222Smrg func_fatal_error "specify a tag with \`--tag'" 142165eef222Smrg# else 142265eef222Smrg# func_verbose "using $tagname tagged configuration" 142365eef222Smrg fi 142465eef222Smrg ;; 142565eef222Smrg esac 142665eef222Smrg fi 142765eef222Smrg} 142865eef222Smrg 142965eef222Smrg 143065eef222Smrg 1431200d7199Smrg# func_write_libtool_object output_name pic_name nonpic_name 1432200d7199Smrg# Create a libtool object file (analogous to a ".la" file), 1433200d7199Smrg# but don't create it if we're doing a dry run. 1434200d7199Smrgfunc_write_libtool_object () 1435200d7199Smrg{ 1436200d7199Smrg write_libobj=${1} 1437200d7199Smrg if test "$build_libtool_libs" = yes; then 1438200d7199Smrg write_lobj=\'${2}\' 1439200d7199Smrg else 1440200d7199Smrg write_lobj=none 1441200d7199Smrg fi 1442200d7199Smrg 1443200d7199Smrg if test "$build_old_libs" = yes; then 1444200d7199Smrg write_oldobj=\'${3}\' 1445200d7199Smrg else 1446200d7199Smrg write_oldobj=none 1447200d7199Smrg fi 1448200d7199Smrg 1449200d7199Smrg $opt_dry_run || { 1450200d7199Smrg cat >${write_libobj}T <<EOF 1451200d7199Smrg# $write_libobj - a libtool object file 1452200d7199Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1453200d7199Smrg# 1454200d7199Smrg# Please DO NOT delete this file! 1455200d7199Smrg# It is necessary for linking the library. 1456200d7199Smrg 1457200d7199Smrg# Name of the PIC object. 1458200d7199Smrgpic_object=$write_lobj 1459200d7199Smrg 1460200d7199Smrg# Name of the non-PIC object 1461200d7199Smrgnon_pic_object=$write_oldobj 1462200d7199Smrg 1463200d7199SmrgEOF 1464200d7199Smrg $MV "${write_libobj}T" "${write_libobj}" 1465200d7199Smrg } 1466200d7199Smrg} 1467200d7199Smrg 1468200d7199Smrg 1469200d7199Smrg################################################## 1470200d7199Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1471200d7199Smrg################################################## 1472200d7199Smrg 1473200d7199Smrg# func_convert_core_file_wine_to_w32 ARG 1474200d7199Smrg# Helper function used by file name conversion functions when $build is *nix, 1475200d7199Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1476200d7199Smrg# correctly configured wine environment available, with the winepath program 1477200d7199Smrg# in $build's $PATH. 1478200d7199Smrg# 1479200d7199Smrg# ARG is the $build file name to be converted to w32 format. 1480200d7199Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1481200d7199Smrg# be empty on error (or when ARG is empty) 1482200d7199Smrgfunc_convert_core_file_wine_to_w32 () 1483200d7199Smrg{ 1484200d7199Smrg $opt_debug 1485200d7199Smrg func_convert_core_file_wine_to_w32_result="$1" 1486200d7199Smrg if test -n "$1"; then 1487200d7199Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 1488200d7199Smrg # are forced to check the contents of stdout. On the other hand, if the 1489200d7199Smrg # command is not found, the shell will set an exit code of 127 and print 1490200d7199Smrg # *an error message* to stdout. So we must check for both error code of 1491200d7199Smrg # zero AND non-empty stdout, which explains the odd construction: 1492200d7199Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 1493200d7199Smrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1494200d7199Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 1495200d7199Smrg $SED -e "$lt_sed_naive_backslashify"` 1496200d7199Smrg else 1497200d7199Smrg func_convert_core_file_wine_to_w32_result= 1498200d7199Smrg fi 1499200d7199Smrg fi 1500200d7199Smrg} 1501200d7199Smrg# end: func_convert_core_file_wine_to_w32 1502200d7199Smrg 1503200d7199Smrg 1504200d7199Smrg# func_convert_core_path_wine_to_w32 ARG 1505200d7199Smrg# Helper function used by path conversion functions when $build is *nix, and 1506200d7199Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1507200d7199Smrg# configured wine environment available, with the winepath program in $build's 1508200d7199Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 1509200d7199Smrg# 1510200d7199Smrg# ARG is path to be converted from $build format to win32. 1511200d7199Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 1512200d7199Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 1513200d7199Smrg# are convertible, then the result may be empty. 1514200d7199Smrgfunc_convert_core_path_wine_to_w32 () 1515200d7199Smrg{ 1516200d7199Smrg $opt_debug 1517200d7199Smrg # unfortunately, winepath doesn't convert paths, only file names 1518200d7199Smrg func_convert_core_path_wine_to_w32_result="" 1519200d7199Smrg if test -n "$1"; then 1520200d7199Smrg oldIFS=$IFS 1521200d7199Smrg IFS=: 1522200d7199Smrg for func_convert_core_path_wine_to_w32_f in $1; do 1523200d7199Smrg IFS=$oldIFS 1524200d7199Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 1525200d7199Smrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1526200d7199Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 1527200d7199Smrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1528200d7199Smrg else 1529200d7199Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1530200d7199Smrg fi 1531200d7199Smrg fi 1532200d7199Smrg done 1533200d7199Smrg IFS=$oldIFS 1534200d7199Smrg fi 1535200d7199Smrg} 1536200d7199Smrg# end: func_convert_core_path_wine_to_w32 1537200d7199Smrg 1538200d7199Smrg 1539200d7199Smrg# func_cygpath ARGS... 1540200d7199Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1541200d7199Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1542200d7199Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1543200d7199Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 1544200d7199Smrg# file name or path is assumed to be in w32 format, as previously converted 1545200d7199Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1546200d7199Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 1547200d7199Smrg# Cygwin format). Returns an empty string on error. 1548200d7199Smrg# 1549200d7199Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 1550200d7199Smrg# be converted. 1551200d7199Smrg# 1552200d7199Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1553200d7199Smrg# environment variable; do not put it in $PATH. 1554200d7199Smrgfunc_cygpath () 1555200d7199Smrg{ 1556200d7199Smrg $opt_debug 1557200d7199Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1558200d7199Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1559200d7199Smrg if test "$?" -ne 0; then 1560200d7199Smrg # on failure, ensure result is empty 1561200d7199Smrg func_cygpath_result= 1562200d7199Smrg fi 1563200d7199Smrg else 1564200d7199Smrg func_cygpath_result= 1565200d7199Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1566200d7199Smrg fi 1567200d7199Smrg} 1568200d7199Smrg#end: func_cygpath 1569200d7199Smrg 1570200d7199Smrg 1571200d7199Smrg# func_convert_core_msys_to_w32 ARG 1572200d7199Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 1573200d7199Smrg# result in func_convert_core_msys_to_w32_result. 1574200d7199Smrgfunc_convert_core_msys_to_w32 () 1575200d7199Smrg{ 1576200d7199Smrg $opt_debug 1577200d7199Smrg # awkward: cmd appends spaces to result 1578200d7199Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 1579200d7199Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1580200d7199Smrg} 1581200d7199Smrg#end: func_convert_core_msys_to_w32 1582200d7199Smrg 1583200d7199Smrg 1584200d7199Smrg# func_convert_file_check ARG1 ARG2 1585200d7199Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 1586200d7199Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 1587200d7199Smrg# func_to_host_file_result to ARG1). 1588200d7199Smrgfunc_convert_file_check () 1589200d7199Smrg{ 1590200d7199Smrg $opt_debug 1591200d7199Smrg if test -z "$2" && test -n "$1" ; then 1592200d7199Smrg func_error "Could not determine host file name corresponding to" 1593200d7199Smrg func_error " \`$1'" 1594200d7199Smrg func_error "Continuing, but uninstalled executables may not work." 1595200d7199Smrg # Fallback: 1596200d7199Smrg func_to_host_file_result="$1" 1597200d7199Smrg fi 1598200d7199Smrg} 1599200d7199Smrg# end func_convert_file_check 1600200d7199Smrg 1601200d7199Smrg 1602200d7199Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1603200d7199Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 1604200d7199Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1605200d7199Smrg# func_to_host_file_result to a simplistic fallback value (see below). 1606200d7199Smrgfunc_convert_path_check () 1607200d7199Smrg{ 1608200d7199Smrg $opt_debug 1609200d7199Smrg if test -z "$4" && test -n "$3"; then 1610200d7199Smrg func_error "Could not determine the host path corresponding to" 1611200d7199Smrg func_error " \`$3'" 1612200d7199Smrg func_error "Continuing, but uninstalled executables may not work." 1613200d7199Smrg # Fallback. This is a deliberately simplistic "conversion" and 1614200d7199Smrg # should not be "improved". See libtool.info. 1615200d7199Smrg if test "x$1" != "x$2"; then 1616200d7199Smrg lt_replace_pathsep_chars="s|$1|$2|g" 1617200d7199Smrg func_to_host_path_result=`echo "$3" | 1618200d7199Smrg $SED -e "$lt_replace_pathsep_chars"` 1619200d7199Smrg else 1620200d7199Smrg func_to_host_path_result="$3" 1621200d7199Smrg fi 1622200d7199Smrg fi 1623200d7199Smrg} 1624200d7199Smrg# end func_convert_path_check 1625200d7199Smrg 1626200d7199Smrg 1627200d7199Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1628200d7199Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1629200d7199Smrg# and appending REPL if ORIG matches BACKPAT. 1630200d7199Smrgfunc_convert_path_front_back_pathsep () 1631200d7199Smrg{ 1632200d7199Smrg $opt_debug 1633200d7199Smrg case $4 in 1634200d7199Smrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1635200d7199Smrg ;; 1636200d7199Smrg esac 1637200d7199Smrg case $4 in 1638200d7199Smrg $2 ) func_append func_to_host_path_result "$3" 1639200d7199Smrg ;; 1640200d7199Smrg esac 1641200d7199Smrg} 1642200d7199Smrg# end func_convert_path_front_back_pathsep 1643200d7199Smrg 1644200d7199Smrg 1645200d7199Smrg################################################## 1646200d7199Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 1647200d7199Smrg################################################## 1648200d7199Smrg# invoked via `$to_host_file_cmd ARG' 1649200d7199Smrg# 1650200d7199Smrg# In each case, ARG is the path to be converted from $build to $host format. 1651200d7199Smrg# Result will be available in $func_to_host_file_result. 1652200d7199Smrg 1653200d7199Smrg 1654200d7199Smrg# func_to_host_file ARG 1655200d7199Smrg# Converts the file name ARG from $build format to $host format. Return result 1656200d7199Smrg# in func_to_host_file_result. 1657200d7199Smrgfunc_to_host_file () 1658200d7199Smrg{ 1659200d7199Smrg $opt_debug 1660200d7199Smrg $to_host_file_cmd "$1" 1661200d7199Smrg} 1662200d7199Smrg# end func_to_host_file 1663200d7199Smrg 1664200d7199Smrg 1665200d7199Smrg# func_to_tool_file ARG LAZY 1666200d7199Smrg# converts the file name ARG from $build format to toolchain format. Return 1667200d7199Smrg# result in func_to_tool_file_result. If the conversion in use is listed 1668200d7199Smrg# in (the comma separated) LAZY, no conversion takes place. 1669200d7199Smrgfunc_to_tool_file () 1670200d7199Smrg{ 1671200d7199Smrg $opt_debug 1672200d7199Smrg case ,$2, in 1673200d7199Smrg *,"$to_tool_file_cmd",*) 1674200d7199Smrg func_to_tool_file_result=$1 1675200d7199Smrg ;; 1676200d7199Smrg *) 1677200d7199Smrg $to_tool_file_cmd "$1" 1678200d7199Smrg func_to_tool_file_result=$func_to_host_file_result 1679200d7199Smrg ;; 1680200d7199Smrg esac 1681200d7199Smrg} 1682200d7199Smrg# end func_to_tool_file 1683200d7199Smrg 1684200d7199Smrg 1685200d7199Smrg# func_convert_file_noop ARG 1686200d7199Smrg# Copy ARG to func_to_host_file_result. 1687200d7199Smrgfunc_convert_file_noop () 1688200d7199Smrg{ 1689200d7199Smrg func_to_host_file_result="$1" 1690200d7199Smrg} 1691200d7199Smrg# end func_convert_file_noop 1692200d7199Smrg 1693200d7199Smrg 1694200d7199Smrg# func_convert_file_msys_to_w32 ARG 1695200d7199Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1696200d7199Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 1697200d7199Smrg# func_to_host_file_result. 1698200d7199Smrgfunc_convert_file_msys_to_w32 () 1699200d7199Smrg{ 1700200d7199Smrg $opt_debug 1701200d7199Smrg func_to_host_file_result="$1" 1702200d7199Smrg if test -n "$1"; then 1703200d7199Smrg func_convert_core_msys_to_w32 "$1" 1704200d7199Smrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1705200d7199Smrg fi 1706200d7199Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1707200d7199Smrg} 1708200d7199Smrg# end func_convert_file_msys_to_w32 1709200d7199Smrg 1710200d7199Smrg 1711200d7199Smrg# func_convert_file_cygwin_to_w32 ARG 1712200d7199Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 1713200d7199Smrg# func_to_host_file_result. 1714200d7199Smrgfunc_convert_file_cygwin_to_w32 () 1715200d7199Smrg{ 1716200d7199Smrg $opt_debug 1717200d7199Smrg func_to_host_file_result="$1" 1718200d7199Smrg if test -n "$1"; then 1719200d7199Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1720200d7199Smrg # LT_CYGPATH in this case. 1721200d7199Smrg func_to_host_file_result=`cygpath -m "$1"` 1722200d7199Smrg fi 1723200d7199Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1724200d7199Smrg} 1725200d7199Smrg# end func_convert_file_cygwin_to_w32 1726200d7199Smrg 1727200d7199Smrg 1728200d7199Smrg# func_convert_file_nix_to_w32 ARG 1729200d7199Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 1730200d7199Smrg# and a working winepath. Returns result in func_to_host_file_result. 1731200d7199Smrgfunc_convert_file_nix_to_w32 () 1732200d7199Smrg{ 1733200d7199Smrg $opt_debug 1734200d7199Smrg func_to_host_file_result="$1" 1735200d7199Smrg if test -n "$1"; then 1736200d7199Smrg func_convert_core_file_wine_to_w32 "$1" 1737200d7199Smrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1738200d7199Smrg fi 1739200d7199Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1740200d7199Smrg} 1741200d7199Smrg# end func_convert_file_nix_to_w32 1742200d7199Smrg 1743200d7199Smrg 1744200d7199Smrg# func_convert_file_msys_to_cygwin ARG 1745200d7199Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1746200d7199Smrg# Returns result in func_to_host_file_result. 1747200d7199Smrgfunc_convert_file_msys_to_cygwin () 1748200d7199Smrg{ 1749200d7199Smrg $opt_debug 1750200d7199Smrg func_to_host_file_result="$1" 1751200d7199Smrg if test -n "$1"; then 1752200d7199Smrg func_convert_core_msys_to_w32 "$1" 1753200d7199Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 1754200d7199Smrg func_to_host_file_result="$func_cygpath_result" 1755200d7199Smrg fi 1756200d7199Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1757200d7199Smrg} 1758200d7199Smrg# end func_convert_file_msys_to_cygwin 1759200d7199Smrg 1760200d7199Smrg 1761200d7199Smrg# func_convert_file_nix_to_cygwin ARG 1762200d7199Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1763200d7199Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1764200d7199Smrg# in func_to_host_file_result. 1765200d7199Smrgfunc_convert_file_nix_to_cygwin () 1766200d7199Smrg{ 1767200d7199Smrg $opt_debug 1768200d7199Smrg func_to_host_file_result="$1" 1769200d7199Smrg if test -n "$1"; then 1770200d7199Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1771200d7199Smrg func_convert_core_file_wine_to_w32 "$1" 1772200d7199Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 1773200d7199Smrg func_to_host_file_result="$func_cygpath_result" 1774200d7199Smrg fi 1775200d7199Smrg func_convert_file_check "$1" "$func_to_host_file_result" 1776200d7199Smrg} 1777200d7199Smrg# end func_convert_file_nix_to_cygwin 1778200d7199Smrg 1779200d7199Smrg 1780200d7199Smrg############################################# 1781200d7199Smrg# $build to $host PATH CONVERSION FUNCTIONS # 1782200d7199Smrg############################################# 1783200d7199Smrg# invoked via `$to_host_path_cmd ARG' 1784200d7199Smrg# 1785200d7199Smrg# In each case, ARG is the path to be converted from $build to $host format. 1786200d7199Smrg# The result will be available in $func_to_host_path_result. 1787200d7199Smrg# 1788200d7199Smrg# Path separators are also converted from $build format to $host format. If 1789200d7199Smrg# ARG begins or ends with a path separator character, it is preserved (but 1790200d7199Smrg# converted to $host format) on output. 1791200d7199Smrg# 1792200d7199Smrg# All path conversion functions are named using the following convention: 1793200d7199Smrg# file name conversion function : func_convert_file_X_to_Y () 1794200d7199Smrg# path conversion function : func_convert_path_X_to_Y () 1795200d7199Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 1796200d7199Smrg# same. If conversion functions are added for new $build/$host combinations, 1797200d7199Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1798200d7199Smrg# will break. 1799200d7199Smrg 1800200d7199Smrg 1801200d7199Smrg# func_init_to_host_path_cmd 1802200d7199Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1803200d7199Smrg# appropriate value, based on the value of $to_host_file_cmd. 1804200d7199Smrgto_host_path_cmd= 1805200d7199Smrgfunc_init_to_host_path_cmd () 1806200d7199Smrg{ 1807200d7199Smrg $opt_debug 1808200d7199Smrg if test -z "$to_host_path_cmd"; then 1809200d7199Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 1810200d7199Smrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 1811200d7199Smrg fi 1812200d7199Smrg} 1813200d7199Smrg 1814200d7199Smrg 1815200d7199Smrg# func_to_host_path ARG 1816200d7199Smrg# Converts the path ARG from $build format to $host format. Return result 1817200d7199Smrg# in func_to_host_path_result. 1818200d7199Smrgfunc_to_host_path () 1819200d7199Smrg{ 1820200d7199Smrg $opt_debug 1821200d7199Smrg func_init_to_host_path_cmd 1822200d7199Smrg $to_host_path_cmd "$1" 1823200d7199Smrg} 1824200d7199Smrg# end func_to_host_path 1825200d7199Smrg 1826200d7199Smrg 1827200d7199Smrg# func_convert_path_noop ARG 1828200d7199Smrg# Copy ARG to func_to_host_path_result. 1829200d7199Smrgfunc_convert_path_noop () 1830200d7199Smrg{ 1831200d7199Smrg func_to_host_path_result="$1" 1832200d7199Smrg} 1833200d7199Smrg# end func_convert_path_noop 1834200d7199Smrg 1835200d7199Smrg 1836200d7199Smrg# func_convert_path_msys_to_w32 ARG 1837200d7199Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1838200d7199Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 1839200d7199Smrg# func_to_host_path_result. 1840200d7199Smrgfunc_convert_path_msys_to_w32 () 184165eef222Smrg{ 1842200d7199Smrg $opt_debug 1843200d7199Smrg func_to_host_path_result="$1" 1844200d7199Smrg if test -n "$1"; then 1845200d7199Smrg # Remove leading and trailing path separator characters from ARG. MSYS 1846200d7199Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1847200d7199Smrg # and winepath ignores them completely. 1848200d7199Smrg func_stripname : : "$1" 1849200d7199Smrg func_to_host_path_tmp1=$func_stripname_result 1850200d7199Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1851200d7199Smrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1852200d7199Smrg func_convert_path_check : ";" \ 1853200d7199Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1854200d7199Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1855200d7199Smrg fi 1856200d7199Smrg} 1857200d7199Smrg# end func_convert_path_msys_to_w32 185865eef222Smrg 185965eef222Smrg 1860200d7199Smrg# func_convert_path_cygwin_to_w32 ARG 1861200d7199Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 1862200d7199Smrg# func_to_host_file_result. 1863200d7199Smrgfunc_convert_path_cygwin_to_w32 () 1864200d7199Smrg{ 1865200d7199Smrg $opt_debug 1866200d7199Smrg func_to_host_path_result="$1" 1867200d7199Smrg if test -n "$1"; then 1868200d7199Smrg # See func_convert_path_msys_to_w32: 1869200d7199Smrg func_stripname : : "$1" 1870200d7199Smrg func_to_host_path_tmp1=$func_stripname_result 1871200d7199Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1872200d7199Smrg func_convert_path_check : ";" \ 1873200d7199Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1874200d7199Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1875200d7199Smrg fi 1876200d7199Smrg} 1877200d7199Smrg# end func_convert_path_cygwin_to_w32 187865eef222Smrg 187965eef222Smrg 1880200d7199Smrg# func_convert_path_nix_to_w32 ARG 1881200d7199Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 1882200d7199Smrg# a working winepath. Returns result in func_to_host_file_result. 1883200d7199Smrgfunc_convert_path_nix_to_w32 () 1884200d7199Smrg{ 1885200d7199Smrg $opt_debug 1886200d7199Smrg func_to_host_path_result="$1" 1887200d7199Smrg if test -n "$1"; then 1888200d7199Smrg # See func_convert_path_msys_to_w32: 1889200d7199Smrg func_stripname : : "$1" 1890200d7199Smrg func_to_host_path_tmp1=$func_stripname_result 1891200d7199Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1892200d7199Smrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1893200d7199Smrg func_convert_path_check : ";" \ 1894200d7199Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1895200d7199Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1896200d7199Smrg fi 1897200d7199Smrg} 1898200d7199Smrg# end func_convert_path_nix_to_w32 189965eef222Smrg 1900200d7199Smrg 1901200d7199Smrg# func_convert_path_msys_to_cygwin ARG 1902200d7199Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1903200d7199Smrg# Returns result in func_to_host_file_result. 1904200d7199Smrgfunc_convert_path_msys_to_cygwin () 1905200d7199Smrg{ 1906200d7199Smrg $opt_debug 1907200d7199Smrg func_to_host_path_result="$1" 1908200d7199Smrg if test -n "$1"; then 1909200d7199Smrg # See func_convert_path_msys_to_w32: 1910200d7199Smrg func_stripname : : "$1" 1911200d7199Smrg func_to_host_path_tmp1=$func_stripname_result 1912200d7199Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1913200d7199Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 1914200d7199Smrg func_to_host_path_result="$func_cygpath_result" 1915200d7199Smrg func_convert_path_check : : \ 1916200d7199Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1917200d7199Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1918200d7199Smrg fi 1919200d7199Smrg} 1920200d7199Smrg# end func_convert_path_msys_to_cygwin 1921200d7199Smrg 1922200d7199Smrg 1923200d7199Smrg# func_convert_path_nix_to_cygwin ARG 1924200d7199Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1925200d7199Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1926200d7199Smrg# func_to_host_file_result. 1927200d7199Smrgfunc_convert_path_nix_to_cygwin () 1928200d7199Smrg{ 1929200d7199Smrg $opt_debug 1930200d7199Smrg func_to_host_path_result="$1" 1931200d7199Smrg if test -n "$1"; then 1932200d7199Smrg # Remove leading and trailing path separator characters from 1933200d7199Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 1934200d7199Smrg # into '.;' and ';.', and winepath ignores them completely. 1935200d7199Smrg func_stripname : : "$1" 1936200d7199Smrg func_to_host_path_tmp1=$func_stripname_result 1937200d7199Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1938200d7199Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 1939200d7199Smrg func_to_host_path_result="$func_cygpath_result" 1940200d7199Smrg func_convert_path_check : : \ 1941200d7199Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 1942200d7199Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1943200d7199Smrg fi 194465eef222Smrg} 1945200d7199Smrg# end func_convert_path_nix_to_cygwin 1946200d7199Smrg 194765eef222Smrg 194865eef222Smrg# func_mode_compile arg... 194965eef222Smrgfunc_mode_compile () 195065eef222Smrg{ 195165eef222Smrg $opt_debug 195265eef222Smrg # Get the compilation command and the source file. 195365eef222Smrg base_compile= 195465eef222Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 195565eef222Smrg suppress_opt=yes 195665eef222Smrg suppress_output= 195765eef222Smrg arg_mode=normal 195865eef222Smrg libobj= 195965eef222Smrg later= 196065eef222Smrg pie_flag= 196165eef222Smrg 196265eef222Smrg for arg 196365eef222Smrg do 196465eef222Smrg case $arg_mode in 196565eef222Smrg arg ) 196665eef222Smrg # do not "continue". Instead, add this to base_compile 196765eef222Smrg lastarg="$arg" 196865eef222Smrg arg_mode=normal 196965eef222Smrg ;; 197065eef222Smrg 197165eef222Smrg target ) 197265eef222Smrg libobj="$arg" 197365eef222Smrg arg_mode=normal 197465eef222Smrg continue 197565eef222Smrg ;; 197665eef222Smrg 197765eef222Smrg normal ) 197865eef222Smrg # Accept any command-line options. 197965eef222Smrg case $arg in 198065eef222Smrg -o) 198165eef222Smrg test -n "$libobj" && \ 198265eef222Smrg func_fatal_error "you cannot specify \`-o' more than once" 198365eef222Smrg arg_mode=target 198465eef222Smrg continue 198565eef222Smrg ;; 198665eef222Smrg 198765eef222Smrg -pie | -fpie | -fPIE) 1988200d7199Smrg func_append pie_flag " $arg" 198965eef222Smrg continue 199065eef222Smrg ;; 199165eef222Smrg 199265eef222Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1993200d7199Smrg func_append later " $arg" 199465eef222Smrg continue 199565eef222Smrg ;; 199665eef222Smrg 199765eef222Smrg -no-suppress) 199865eef222Smrg suppress_opt=no 199965eef222Smrg continue 200065eef222Smrg ;; 200165eef222Smrg 200265eef222Smrg -Xcompiler) 200365eef222Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 200465eef222Smrg continue # The current "srcfile" will either be retained or 200565eef222Smrg ;; # replaced later. I would guess that would be a bug. 200665eef222Smrg 200765eef222Smrg -Wc,*) 200865eef222Smrg func_stripname '-Wc,' '' "$arg" 200965eef222Smrg args=$func_stripname_result 201065eef222Smrg lastarg= 201165eef222Smrg save_ifs="$IFS"; IFS=',' 201265eef222Smrg for arg in $args; do 201365eef222Smrg IFS="$save_ifs" 2014200d7199Smrg func_append_quoted lastarg "$arg" 2015ef981d24Smrg done 2016ef981d24Smrg IFS="$save_ifs" 201765eef222Smrg func_stripname ' ' '' "$lastarg" 201865eef222Smrg lastarg=$func_stripname_result 2019ef981d24Smrg 2020ef981d24Smrg # Add the arguments to base_compile. 2021200d7199Smrg func_append base_compile " $lastarg" 2022ef981d24Smrg continue 2023ef981d24Smrg ;; 2024ef981d24Smrg 202565eef222Smrg *) 2026ef981d24Smrg # Accept the current argument as the source file. 2027ef981d24Smrg # The previous "srcfile" becomes the current argument. 2028ef981d24Smrg # 2029ef981d24Smrg lastarg="$srcfile" 2030ef981d24Smrg srcfile="$arg" 2031ef981d24Smrg ;; 2032ef981d24Smrg esac # case $arg 2033ef981d24Smrg ;; 2034ef981d24Smrg esac # case $arg_mode 2035ef981d24Smrg 2036ef981d24Smrg # Aesthetically quote the previous argument. 2037200d7199Smrg func_append_quoted base_compile "$lastarg" 2038ef981d24Smrg done # for arg 2039ef981d24Smrg 2040ef981d24Smrg case $arg_mode in 2041ef981d24Smrg arg) 204265eef222Smrg func_fatal_error "you must specify an argument for -Xcompile" 2043ef981d24Smrg ;; 2044ef981d24Smrg target) 204565eef222Smrg func_fatal_error "you must specify a target with \`-o'" 2046ef981d24Smrg ;; 2047ef981d24Smrg *) 2048ef981d24Smrg # Get the name of the library object. 204965eef222Smrg test -z "$libobj" && { 205065eef222Smrg func_basename "$srcfile" 205165eef222Smrg libobj="$func_basename_result" 205265eef222Smrg } 2053ef981d24Smrg ;; 2054ef981d24Smrg esac 2055ef981d24Smrg 2056ef981d24Smrg # Recognize several different file suffixes. 2057ef981d24Smrg # If the user specifies -o file.o, it is replaced with file.lo 2058ef981d24Smrg case $libobj in 205965eef222Smrg *.[cCFSifmso] | \ 206065eef222Smrg *.ada | *.adb | *.ads | *.asm | \ 206165eef222Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 206256957a04Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 206365eef222Smrg func_xform "$libobj" 206465eef222Smrg libobj=$func_xform_result 206565eef222Smrg ;; 2066ef981d24Smrg esac 2067ef981d24Smrg 2068ef981d24Smrg case $libobj in 206965eef222Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2070ef981d24Smrg *) 207165eef222Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2072ef981d24Smrg ;; 2073ef981d24Smrg esac 2074ef981d24Smrg 2075ef981d24Smrg func_infer_tag $base_compile 2076ef981d24Smrg 2077ef981d24Smrg for arg in $later; do 2078ef981d24Smrg case $arg in 207965eef222Smrg -shared) 208065eef222Smrg test "$build_libtool_libs" != yes && \ 208165eef222Smrg func_fatal_configuration "can not build a shared library" 208265eef222Smrg build_old_libs=no 208365eef222Smrg continue 208465eef222Smrg ;; 208565eef222Smrg 2086ef981d24Smrg -static) 208765eef222Smrg build_libtool_libs=no 2088ef981d24Smrg build_old_libs=yes 2089ef981d24Smrg continue 2090ef981d24Smrg ;; 2091ef981d24Smrg 2092ef981d24Smrg -prefer-pic) 2093ef981d24Smrg pic_mode=yes 2094ef981d24Smrg continue 2095ef981d24Smrg ;; 2096ef981d24Smrg 2097ef981d24Smrg -prefer-non-pic) 2098ef981d24Smrg pic_mode=no 2099ef981d24Smrg continue 2100ef981d24Smrg ;; 2101ef981d24Smrg esac 2102ef981d24Smrg done 2103ef981d24Smrg 210465eef222Smrg func_quote_for_eval "$libobj" 210565eef222Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 210665eef222Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 210765eef222Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 210865eef222Smrg func_dirname_and_basename "$obj" "/" "" 210965eef222Smrg objname="$func_basename_result" 211065eef222Smrg xdir="$func_dirname_result" 2111ef981d24Smrg lobj=${xdir}$objdir/$objname 2112ef981d24Smrg 211365eef222Smrg test -z "$base_compile" && \ 211465eef222Smrg func_fatal_help "you must specify a compilation command" 2115ef981d24Smrg 2116ef981d24Smrg # Delete any leftover library objects. 2117ef981d24Smrg if test "$build_old_libs" = yes; then 2118ef981d24Smrg removelist="$obj $lobj $libobj ${libobj}T" 2119ef981d24Smrg else 2120ef981d24Smrg removelist="$lobj $libobj ${libobj}T" 2121ef981d24Smrg fi 2122ef981d24Smrg 2123ef981d24Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 2124ef981d24Smrg case $host_os in 212565eef222Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2126ef981d24Smrg pic_mode=default 2127ef981d24Smrg ;; 2128ef981d24Smrg esac 2129ef981d24Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2130ef981d24Smrg # non-PIC code in shared libraries is not supported 2131ef981d24Smrg pic_mode=default 2132ef981d24Smrg fi 2133ef981d24Smrg 2134ef981d24Smrg # Calculate the filename of the output object if compiler does 2135ef981d24Smrg # not support -o with -c 2136ef981d24Smrg if test "$compiler_c_o" = no; then 213756957a04Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2138ef981d24Smrg lockfile="$output_obj.lock" 2139ef981d24Smrg else 2140ef981d24Smrg output_obj= 2141ef981d24Smrg need_locks=no 2142ef981d24Smrg lockfile= 2143ef981d24Smrg fi 2144ef981d24Smrg 2145ef981d24Smrg # Lock this critical section if it is needed 2146ef981d24Smrg # We use this script file to make the link, it avoids creating a new file 2147ef981d24Smrg if test "$need_locks" = yes; then 214865eef222Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 214965eef222Smrg func_echo "Waiting for $lockfile to be removed" 2150ef981d24Smrg sleep 2 2151ef981d24Smrg done 2152ef981d24Smrg elif test "$need_locks" = warn; then 2153ef981d24Smrg if test -f "$lockfile"; then 215465eef222Smrg $ECHO "\ 2155ef981d24Smrg*** ERROR, $lockfile exists and contains: 2156ef981d24Smrg`cat $lockfile 2>/dev/null` 2157ef981d24Smrg 2158ef981d24SmrgThis indicates that another process is trying to use the same 2159ef981d24Smrgtemporary object file, and libtool could not work around it because 2160ef981d24Smrgyour compiler does not support \`-c' and \`-o' together. If you 2161ef981d24Smrgrepeat this compilation, it may succeed, by chance, but you had better 2162ef981d24Smrgavoid parallel builds (make -j) in this platform, or get a better 2163ef981d24Smrgcompiler." 2164ef981d24Smrg 216565eef222Smrg $opt_dry_run || $RM $removelist 2166ef981d24Smrg exit $EXIT_FAILURE 2167ef981d24Smrg fi 2168200d7199Smrg func_append removelist " $output_obj" 216965eef222Smrg $ECHO "$srcfile" > "$lockfile" 2170ef981d24Smrg fi 2171ef981d24Smrg 217265eef222Smrg $opt_dry_run || $RM $removelist 2173200d7199Smrg func_append removelist " $lockfile" 217465eef222Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 217565eef222Smrg 2176200d7199Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2177200d7199Smrg srcfile=$func_to_tool_file_result 217865eef222Smrg func_quote_for_eval "$srcfile" 217965eef222Smrg qsrcfile=$func_quote_for_eval_result 2180ef981d24Smrg 2181ef981d24Smrg # Only build a PIC object if we are building libtool libraries. 2182ef981d24Smrg if test "$build_libtool_libs" = yes; then 2183ef981d24Smrg # Without this assignment, base_compile gets emptied. 2184ef981d24Smrg fbsd_hideous_sh_bug=$base_compile 2185ef981d24Smrg 2186ef981d24Smrg if test "$pic_mode" != no; then 2187ef981d24Smrg command="$base_compile $qsrcfile $pic_flag" 2188ef981d24Smrg else 2189ef981d24Smrg # Don't build PIC code 2190ef981d24Smrg command="$base_compile $qsrcfile" 2191ef981d24Smrg fi 2192ef981d24Smrg 219365eef222Smrg func_mkdir_p "$xdir$objdir" 2194ef981d24Smrg 2195ef981d24Smrg if test -z "$output_obj"; then 2196ef981d24Smrg # Place PIC objects in $objdir 2197200d7199Smrg func_append command " -o $lobj" 2198ef981d24Smrg fi 2199ef981d24Smrg 220065eef222Smrg func_show_eval_locale "$command" \ 220165eef222Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2202ef981d24Smrg 2203ef981d24Smrg if test "$need_locks" = warn && 2204ef981d24Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 220565eef222Smrg $ECHO "\ 2206ef981d24Smrg*** ERROR, $lockfile contains: 2207ef981d24Smrg`cat $lockfile 2>/dev/null` 2208ef981d24Smrg 2209ef981d24Smrgbut it should contain: 2210ef981d24Smrg$srcfile 2211ef981d24Smrg 2212ef981d24SmrgThis indicates that another process is trying to use the same 2213ef981d24Smrgtemporary object file, and libtool could not work around it because 2214ef981d24Smrgyour compiler does not support \`-c' and \`-o' together. If you 2215ef981d24Smrgrepeat this compilation, it may succeed, by chance, but you had better 2216ef981d24Smrgavoid parallel builds (make -j) in this platform, or get a better 2217ef981d24Smrgcompiler." 2218ef981d24Smrg 221965eef222Smrg $opt_dry_run || $RM $removelist 2220ef981d24Smrg exit $EXIT_FAILURE 2221ef981d24Smrg fi 2222ef981d24Smrg 2223ef981d24Smrg # Just move the object if needed, then go on to compile the next one 2224ef981d24Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 222565eef222Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 222665eef222Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2227ef981d24Smrg fi 2228ef981d24Smrg 2229ef981d24Smrg # Allow error messages only from the first compilation. 2230ef981d24Smrg if test "$suppress_opt" = yes; then 223165eef222Smrg suppress_output=' >/dev/null 2>&1' 2232ef981d24Smrg fi 2233ef981d24Smrg fi 2234ef981d24Smrg 2235ef981d24Smrg # Only build a position-dependent object if we build old libraries. 2236ef981d24Smrg if test "$build_old_libs" = yes; then 2237ef981d24Smrg if test "$pic_mode" != yes; then 2238ef981d24Smrg # Don't build PIC code 223965eef222Smrg command="$base_compile $qsrcfile$pie_flag" 2240ef981d24Smrg else 2241ef981d24Smrg command="$base_compile $qsrcfile $pic_flag" 2242ef981d24Smrg fi 2243ef981d24Smrg if test "$compiler_c_o" = yes; then 2244200d7199Smrg func_append command " -o $obj" 2245ef981d24Smrg fi 2246ef981d24Smrg 2247ef981d24Smrg # Suppress compiler output if we already did a PIC compilation. 2248200d7199Smrg func_append command "$suppress_output" 224965eef222Smrg func_show_eval_locale "$command" \ 225065eef222Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2251ef981d24Smrg 2252ef981d24Smrg if test "$need_locks" = warn && 2253ef981d24Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 225465eef222Smrg $ECHO "\ 2255ef981d24Smrg*** ERROR, $lockfile contains: 2256ef981d24Smrg`cat $lockfile 2>/dev/null` 2257ef981d24Smrg 2258ef981d24Smrgbut it should contain: 2259ef981d24Smrg$srcfile 2260ef981d24Smrg 2261ef981d24SmrgThis indicates that another process is trying to use the same 2262ef981d24Smrgtemporary object file, and libtool could not work around it because 2263ef981d24Smrgyour compiler does not support \`-c' and \`-o' together. If you 2264ef981d24Smrgrepeat this compilation, it may succeed, by chance, but you had better 2265ef981d24Smrgavoid parallel builds (make -j) in this platform, or get a better 2266ef981d24Smrgcompiler." 2267ef981d24Smrg 226865eef222Smrg $opt_dry_run || $RM $removelist 2269ef981d24Smrg exit $EXIT_FAILURE 2270ef981d24Smrg fi 2271ef981d24Smrg 2272ef981d24Smrg # Just move the object if needed 2273ef981d24Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 227465eef222Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 227565eef222Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2276ef981d24Smrg fi 2277ef981d24Smrg fi 2278ef981d24Smrg 227965eef222Smrg $opt_dry_run || { 228065eef222Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2281ef981d24Smrg 228265eef222Smrg # Unlock the critical section if it was locked 228365eef222Smrg if test "$need_locks" != no; then 228465eef222Smrg removelist=$lockfile 228565eef222Smrg $RM "$lockfile" 228665eef222Smrg fi 228765eef222Smrg } 2288ef981d24Smrg 2289ef981d24Smrg exit $EXIT_SUCCESS 229065eef222Smrg} 2291ef981d24Smrg 229265eef222Smrg$opt_help || { 2293200d7199Smrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 229465eef222Smrg} 2295ef981d24Smrg 229665eef222Smrgfunc_mode_help () 229765eef222Smrg{ 229865eef222Smrg # We need to display help for each of the modes. 2299200d7199Smrg case $opt_mode in 230065eef222Smrg "") 230165eef222Smrg # Generic help is extracted from the usage comments 230265eef222Smrg # at the start of this file. 230365eef222Smrg func_help 230465eef222Smrg ;; 2305ef981d24Smrg 230665eef222Smrg clean) 230765eef222Smrg $ECHO \ 230865eef222Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2309ef981d24Smrg 231065eef222SmrgRemove files from the build directory. 2311ef981d24Smrg 231265eef222SmrgRM is the name of the program to use to delete files associated with each FILE 231365eef222Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 231465eef222Smrgto RM. 2315ef981d24Smrg 231665eef222SmrgIf FILE is a libtool library, object or program, all the files associated 231765eef222Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 231865eef222Smrg ;; 2319ef981d24Smrg 232065eef222Smrg compile) 232165eef222Smrg $ECHO \ 232265eef222Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2323ef981d24Smrg 232465eef222SmrgCompile a source file into a libtool library object. 2325ef981d24Smrg 232665eef222SmrgThis mode accepts the following additional options: 2327ef981d24Smrg 232865eef222Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 232965eef222Smrg -no-suppress do not suppress compiler output for multiple passes 233056957a04Smrg -prefer-pic try to build PIC objects only 233156957a04Smrg -prefer-non-pic try to build non-PIC objects only 233265eef222Smrg -shared do not build a \`.o' file suitable for static linking 233365eef222Smrg -static only build a \`.o' file suitable for static linking 233456957a04Smrg -Wc,FLAG pass FLAG directly to the compiler 2335ef981d24Smrg 233665eef222SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 233765eef222Smrgfrom the given SOURCEFILE. 2338ef981d24Smrg 233965eef222SmrgThe output file name is determined by removing the directory component from 234065eef222SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 234165eef222Smrglibrary object suffix, \`.lo'." 234265eef222Smrg ;; 2343ef981d24Smrg 234465eef222Smrg execute) 234565eef222Smrg $ECHO \ 234665eef222Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2347ef981d24Smrg 234865eef222SmrgAutomatically set library path, then run a program. 2349ef981d24Smrg 235065eef222SmrgThis mode accepts the following additional options: 2351ef981d24Smrg 235265eef222Smrg -dlopen FILE add the directory containing FILE to the library path 2353ef981d24Smrg 235465eef222SmrgThis mode sets the library path environment variable according to \`-dlopen' 235565eef222Smrgflags. 2356ef981d24Smrg 235765eef222SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 235865eef222Smrginto their corresponding uninstalled binary, and any of their required library 235965eef222Smrgdirectories are added to the library path. 2360ef981d24Smrg 236165eef222SmrgThen, COMMAND is executed, with ARGS as arguments." 236265eef222Smrg ;; 2363ef981d24Smrg 236465eef222Smrg finish) 236565eef222Smrg $ECHO \ 236665eef222Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2367ef981d24Smrg 236865eef222SmrgComplete the installation of libtool libraries. 2369ef981d24Smrg 237065eef222SmrgEach LIBDIR is a directory that contains libtool libraries. 2371ef981d24Smrg 237265eef222SmrgThe commands that this mode executes may require superuser privileges. Use 237365eef222Smrgthe \`--dry-run' option if you just want to see what would be executed." 237465eef222Smrg ;; 2375ef981d24Smrg 237665eef222Smrg install) 237765eef222Smrg $ECHO \ 237865eef222Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2379ef981d24Smrg 238065eef222SmrgInstall executables or libraries. 2381ef981d24Smrg 238265eef222SmrgINSTALL-COMMAND is the installation command. The first component should be 238365eef222Smrgeither the \`install' or \`cp' program. 2384ef981d24Smrg 238565eef222SmrgThe following components of INSTALL-COMMAND are treated specially: 2386ef981d24Smrg 238756957a04Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2388ef981d24Smrg 238965eef222SmrgThe rest of the components are interpreted as arguments to that command (only 239065eef222SmrgBSD-compatible install options are recognized)." 239165eef222Smrg ;; 2392ef981d24Smrg 239365eef222Smrg link) 239465eef222Smrg $ECHO \ 239565eef222Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2396ef981d24Smrg 239765eef222SmrgLink object files or libraries together to form another library, or to 239865eef222Smrgcreate an executable program. 2399ef981d24Smrg 240065eef222SmrgLINK-COMMAND is a command using the C compiler that you would use to create 240165eef222Smrga program from several object files. 2402ef981d24Smrg 240365eef222SmrgThe following components of LINK-COMMAND are treated specially: 2404ef981d24Smrg 240565eef222Smrg -all-static do not do any dynamic linking at all 240665eef222Smrg -avoid-version do not add a version suffix if possible 240756957a04Smrg -bindir BINDIR specify path to binaries directory (for systems where 240856957a04Smrg libraries must be found in the PATH setting at runtime) 240965eef222Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 241065eef222Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 241165eef222Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 241265eef222Smrg -export-symbols SYMFILE 241365eef222Smrg try to export only the symbols listed in SYMFILE 241465eef222Smrg -export-symbols-regex REGEX 241565eef222Smrg try to export only the symbols matching REGEX 241665eef222Smrg -LLIBDIR search LIBDIR for required installed libraries 241765eef222Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 241865eef222Smrg -module build a library that can dlopened 241965eef222Smrg -no-fast-install disable the fast-install mode 242065eef222Smrg -no-install link a not-installable executable 242165eef222Smrg -no-undefined declare that a library does not refer to external symbols 242265eef222Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 242365eef222Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 242465eef222Smrg -precious-files-regex REGEX 242565eef222Smrg don't remove output files matching REGEX 242665eef222Smrg -release RELEASE specify package release information 242765eef222Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 242865eef222Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 242965eef222Smrg -shared only do dynamic linking of libtool libraries 243065eef222Smrg -shrext SUFFIX override the standard shared library file extension 243165eef222Smrg -static do not do any dynamic linking of uninstalled libtool libraries 243265eef222Smrg -static-libtool-libs 243365eef222Smrg do not do any dynamic linking of libtool libraries 243465eef222Smrg -version-info CURRENT[:REVISION[:AGE]] 243565eef222Smrg specify library version info [each variable defaults to 0] 243665eef222Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 243756957a04Smrg -Wc,FLAG 243856957a04Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 243956957a04Smrg -Wl,FLAG 244056957a04Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 244156957a04Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2442ef981d24Smrg 244365eef222SmrgAll other options (arguments beginning with \`-') are ignored. 2444ef981d24Smrg 244565eef222SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 244665eef222Smrgtreated as uninstalled libtool libraries, other files are standard or library 244765eef222Smrgobject files. 2448ef981d24Smrg 244965eef222SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 245065eef222Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 245165eef222Smrgrequired, except when creating a convenience library. 2452ef981d24Smrg 245365eef222SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 245465eef222Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 2455ef981d24Smrg 245665eef222SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 245765eef222Smrgis created, otherwise an executable program is created." 2458ef981d24Smrg ;; 2459ef981d24Smrg 246065eef222Smrg uninstall) 246165eef222Smrg $ECHO \ 246265eef222Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2463ef981d24Smrg 246465eef222SmrgRemove libraries from an installation directory. 2465ef981d24Smrg 246665eef222SmrgRM is the name of the program to use to delete files associated with each FILE 246765eef222Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 246865eef222Smrgto RM. 2469ef981d24Smrg 247065eef222SmrgIf FILE is a libtool library, all the files associated with it are deleted. 247165eef222SmrgOtherwise, only FILE itself is deleted using RM." 247265eef222Smrg ;; 2473ef981d24Smrg 247465eef222Smrg *) 2475200d7199Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 247665eef222Smrg ;; 247765eef222Smrg esac 2478ef981d24Smrg 247956957a04Smrg echo 248065eef222Smrg $ECHO "Try \`$progname --help' for more information about other modes." 248165eef222Smrg} 2482ef981d24Smrg 248356957a04Smrg# Now that we've collected a possible --mode arg, show help if necessary 248456957a04Smrgif $opt_help; then 248556957a04Smrg if test "$opt_help" = :; then 248656957a04Smrg func_mode_help 248756957a04Smrg else 248856957a04Smrg { 248956957a04Smrg func_help noexit 2490200d7199Smrg for opt_mode in compile link execute install finish uninstall clean; do 249156957a04Smrg func_mode_help 249256957a04Smrg done 249356957a04Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 249456957a04Smrg { 249556957a04Smrg func_help noexit 2496200d7199Smrg for opt_mode in compile link execute install finish uninstall clean; do 249756957a04Smrg echo 249856957a04Smrg func_mode_help 249956957a04Smrg done 250056957a04Smrg } | 250156957a04Smrg sed '1d 250256957a04Smrg /^When reporting/,/^Report/{ 250356957a04Smrg H 250456957a04Smrg d 250556957a04Smrg } 250656957a04Smrg $x 250756957a04Smrg /information about other modes/d 250856957a04Smrg /more detailed .*MODE/d 250956957a04Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 251056957a04Smrg fi 251156957a04Smrg exit $? 251256957a04Smrgfi 2513ef981d24Smrg 2514ef981d24Smrg 251565eef222Smrg# func_mode_execute arg... 251665eef222Smrgfunc_mode_execute () 251765eef222Smrg{ 251865eef222Smrg $opt_debug 251965eef222Smrg # The first argument is the command name. 252065eef222Smrg cmd="$nonopt" 252165eef222Smrg test -z "$cmd" && \ 252265eef222Smrg func_fatal_help "you must specify a COMMAND" 2523ef981d24Smrg 252465eef222Smrg # Handle -dlopen flags immediately. 2525200d7199Smrg for file in $opt_dlopen; do 252665eef222Smrg test -f "$file" \ 252765eef222Smrg || func_fatal_help "\`$file' is not a file" 2528ef981d24Smrg 252965eef222Smrg dir= 253065eef222Smrg case $file in 253165eef222Smrg *.la) 2532200d7199Smrg func_resolve_sysroot "$file" 2533200d7199Smrg file=$func_resolve_sysroot_result 2534200d7199Smrg 253565eef222Smrg # Check to see that this really is a libtool archive. 253665eef222Smrg func_lalib_unsafe_p "$file" \ 253765eef222Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2538ef981d24Smrg 253965eef222Smrg # Read the libtool library. 254065eef222Smrg dlname= 254165eef222Smrg library_names= 254265eef222Smrg func_source "$file" 2543ef981d24Smrg 254465eef222Smrg # Skip this library if it cannot be dlopened. 254565eef222Smrg if test -z "$dlname"; then 254665eef222Smrg # Warn if it was a shared library. 254765eef222Smrg test -n "$library_names" && \ 254865eef222Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 254965eef222Smrg continue 255065eef222Smrg fi 2551ef981d24Smrg 255265eef222Smrg func_dirname "$file" "" "." 255365eef222Smrg dir="$func_dirname_result" 2554ef981d24Smrg 255565eef222Smrg if test -f "$dir/$objdir/$dlname"; then 2556200d7199Smrg func_append dir "/$objdir" 255765eef222Smrg else 255865eef222Smrg if test ! -f "$dir/$dlname"; then 255965eef222Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 256065eef222Smrg fi 256165eef222Smrg fi 2562ef981d24Smrg ;; 2563ef981d24Smrg 256465eef222Smrg *.lo) 256565eef222Smrg # Just add the directory containing the .lo file. 256665eef222Smrg func_dirname "$file" "" "." 256765eef222Smrg dir="$func_dirname_result" 2568ef981d24Smrg ;; 2569ef981d24Smrg 257065eef222Smrg *) 257165eef222Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2572ef981d24Smrg continue 2573ef981d24Smrg ;; 257465eef222Smrg esac 2575ef981d24Smrg 257665eef222Smrg # Get the absolute pathname. 257765eef222Smrg absdir=`cd "$dir" && pwd` 257865eef222Smrg test -n "$absdir" && dir="$absdir" 2579ef981d24Smrg 258065eef222Smrg # Now add the directory to shlibpath_var. 258165eef222Smrg if eval "test -z \"\$$shlibpath_var\""; then 258265eef222Smrg eval "$shlibpath_var=\"\$dir\"" 258365eef222Smrg else 258465eef222Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 258565eef222Smrg fi 258665eef222Smrg done 2587ef981d24Smrg 258865eef222Smrg # This variable tells wrapper scripts just to set shlibpath_var 258965eef222Smrg # rather than running their programs. 259065eef222Smrg libtool_execute_magic="$magic" 2591ef981d24Smrg 259265eef222Smrg # Check if any of the arguments is a wrapper script. 259365eef222Smrg args= 259465eef222Smrg for file 259565eef222Smrg do 259665eef222Smrg case $file in 259756957a04Smrg -* | *.la | *.lo ) ;; 259865eef222Smrg *) 259965eef222Smrg # Do a test to see if this is really a libtool program. 260065eef222Smrg if func_ltwrapper_script_p "$file"; then 260165eef222Smrg func_source "$file" 260265eef222Smrg # Transform arg to wrapped name. 260365eef222Smrg file="$progdir/$program" 260465eef222Smrg elif func_ltwrapper_executable_p "$file"; then 260565eef222Smrg func_ltwrapper_scriptname "$file" 260665eef222Smrg func_source "$func_ltwrapper_scriptname_result" 260765eef222Smrg # Transform arg to wrapped name. 260865eef222Smrg file="$progdir/$program" 260965eef222Smrg fi 261065eef222Smrg ;; 261165eef222Smrg esac 261265eef222Smrg # Quote arguments (to preserve shell metacharacters). 2613200d7199Smrg func_append_quoted args "$file" 261465eef222Smrg done 2615ef981d24Smrg 261665eef222Smrg if test "X$opt_dry_run" = Xfalse; then 261765eef222Smrg if test -n "$shlibpath_var"; then 261865eef222Smrg # Export the shlibpath_var. 261965eef222Smrg eval "export $shlibpath_var" 262065eef222Smrg fi 2621ef981d24Smrg 262265eef222Smrg # Restore saved environment variables 262365eef222Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 262465eef222Smrg do 262565eef222Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 262665eef222Smrg $lt_var=\$save_$lt_var; export $lt_var 262765eef222Smrg else 262865eef222Smrg $lt_unset $lt_var 262965eef222Smrg fi" 263065eef222Smrg done 2631ef981d24Smrg 263265eef222Smrg # Now prepare to actually exec the command. 263365eef222Smrg exec_cmd="\$cmd$args" 263465eef222Smrg else 263565eef222Smrg # Display what would be done. 263665eef222Smrg if test -n "$shlibpath_var"; then 263765eef222Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 263856957a04Smrg echo "export $shlibpath_var" 263965eef222Smrg fi 264065eef222Smrg $ECHO "$cmd$args" 264165eef222Smrg exit $EXIT_SUCCESS 264265eef222Smrg fi 264365eef222Smrg} 2644ef981d24Smrg 2645200d7199Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2646ef981d24Smrg 2647ef981d24Smrg 264865eef222Smrg# func_mode_finish arg... 264965eef222Smrgfunc_mode_finish () 265065eef222Smrg{ 265165eef222Smrg $opt_debug 2652200d7199Smrg libs= 2653200d7199Smrg libdirs= 265465eef222Smrg admincmds= 2655ef981d24Smrg 2656200d7199Smrg for opt in "$nonopt" ${1+"$@"} 2657200d7199Smrg do 2658200d7199Smrg if test -d "$opt"; then 2659200d7199Smrg func_append libdirs " $opt" 2660200d7199Smrg 2661200d7199Smrg elif test -f "$opt"; then 2662200d7199Smrg if func_lalib_unsafe_p "$opt"; then 2663200d7199Smrg func_append libs " $opt" 2664200d7199Smrg else 2665200d7199Smrg func_warning "\`$opt' is not a valid libtool archive" 2666200d7199Smrg fi 2667200d7199Smrg 2668200d7199Smrg else 2669200d7199Smrg func_fatal_error "invalid argument \`$opt'" 2670200d7199Smrg fi 2671200d7199Smrg done 2672200d7199Smrg 2673200d7199Smrg if test -n "$libs"; then 2674200d7199Smrg if test -n "$lt_sysroot"; then 2675200d7199Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2676200d7199Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2677200d7199Smrg else 2678200d7199Smrg sysroot_cmd= 2679200d7199Smrg fi 2680200d7199Smrg 2681200d7199Smrg # Remove sysroot references 2682200d7199Smrg if $opt_dry_run; then 2683200d7199Smrg for lib in $libs; do 2684200d7199Smrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2685200d7199Smrg done 2686200d7199Smrg else 2687200d7199Smrg tmpdir=`func_mktempdir` 2688200d7199Smrg for lib in $libs; do 2689200d7199Smrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2690200d7199Smrg > $tmpdir/tmp-la 2691200d7199Smrg mv -f $tmpdir/tmp-la $lib 2692200d7199Smrg done 2693200d7199Smrg ${RM}r "$tmpdir" 2694200d7199Smrg fi 2695200d7199Smrg fi 2696ef981d24Smrg 2697200d7199Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 269865eef222Smrg for libdir in $libdirs; do 269965eef222Smrg if test -n "$finish_cmds"; then 270065eef222Smrg # Do each command in the finish commands. 270165eef222Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 270265eef222Smrg'"$cmd"'"' 270365eef222Smrg fi 270465eef222Smrg if test -n "$finish_eval"; then 270565eef222Smrg # Do the single finish_eval. 270665eef222Smrg eval cmds=\"$finish_eval\" 2707200d7199Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 270865eef222Smrg $cmds" 270965eef222Smrg fi 271065eef222Smrg done 271165eef222Smrg fi 2712ef981d24Smrg 271365eef222Smrg # Exit here if they wanted silent mode. 271465eef222Smrg $opt_silent && exit $EXIT_SUCCESS 2715ef981d24Smrg 2716200d7199Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2717200d7199Smrg echo "----------------------------------------------------------------------" 2718200d7199Smrg echo "Libraries have been installed in:" 2719200d7199Smrg for libdir in $libdirs; do 2720200d7199Smrg $ECHO " $libdir" 2721200d7199Smrg done 2722200d7199Smrg echo 2723200d7199Smrg echo "If you ever happen to want to link against installed libraries" 2724200d7199Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 2725200d7199Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2726200d7199Smrg echo "flag during linking and do at least one of the following:" 2727200d7199Smrg if test -n "$shlibpath_var"; then 2728200d7199Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2729200d7199Smrg echo " during execution" 2730200d7199Smrg fi 2731200d7199Smrg if test -n "$runpath_var"; then 2732200d7199Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 2733200d7199Smrg echo " during linking" 2734200d7199Smrg fi 2735200d7199Smrg if test -n "$hardcode_libdir_flag_spec"; then 2736200d7199Smrg libdir=LIBDIR 2737200d7199Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2738ef981d24Smrg 2739200d7199Smrg $ECHO " - use the \`$flag' linker flag" 2740200d7199Smrg fi 2741200d7199Smrg if test -n "$admincmds"; then 2742200d7199Smrg $ECHO " - have your system administrator run these commands:$admincmds" 2743200d7199Smrg fi 2744200d7199Smrg if test -f /etc/ld.so.conf; then 2745200d7199Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2746200d7199Smrg fi 2747200d7199Smrg echo 2748ef981d24Smrg 2749200d7199Smrg echo "See any operating system documentation about shared libraries for" 2750200d7199Smrg case $host in 2751200d7199Smrg solaris2.[6789]|solaris2.1[0-9]) 2752200d7199Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2753200d7199Smrg echo "pages." 2754200d7199Smrg ;; 2755200d7199Smrg *) 2756200d7199Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 2757200d7199Smrg ;; 2758200d7199Smrg esac 2759200d7199Smrg echo "----------------------------------------------------------------------" 2760200d7199Smrg fi 276165eef222Smrg exit $EXIT_SUCCESS 276265eef222Smrg} 2763ef981d24Smrg 2764200d7199Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2765ef981d24Smrg 2766ef981d24Smrg 276765eef222Smrg# func_mode_install arg... 276865eef222Smrgfunc_mode_install () 276965eef222Smrg{ 277065eef222Smrg $opt_debug 277165eef222Smrg # There may be an optional sh(1) argument at the beginning of 277265eef222Smrg # install_prog (especially on Windows NT). 277365eef222Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 277465eef222Smrg # Allow the use of GNU shtool's install command. 277556957a04Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 277665eef222Smrg # Aesthetically quote it. 277765eef222Smrg func_quote_for_eval "$nonopt" 277865eef222Smrg install_prog="$func_quote_for_eval_result " 277965eef222Smrg arg=$1 278065eef222Smrg shift 278165eef222Smrg else 278265eef222Smrg install_prog= 278365eef222Smrg arg=$nonopt 278465eef222Smrg fi 2785ef981d24Smrg 278665eef222Smrg # The real first argument should be the name of the installation program. 278765eef222Smrg # Aesthetically quote it. 278865eef222Smrg func_quote_for_eval "$arg" 2789200d7199Smrg func_append install_prog "$func_quote_for_eval_result" 279056957a04Smrg install_shared_prog=$install_prog 279156957a04Smrg case " $install_prog " in 279256957a04Smrg *[\\\ /]cp\ *) install_cp=: ;; 279356957a04Smrg *) install_cp=false ;; 279456957a04Smrg esac 279565eef222Smrg 279665eef222Smrg # We need to accept at least all the BSD install flags. 279765eef222Smrg dest= 279865eef222Smrg files= 279965eef222Smrg opts= 280065eef222Smrg prev= 280165eef222Smrg install_type= 280265eef222Smrg isdir=no 280365eef222Smrg stripme= 280456957a04Smrg no_mode=: 280565eef222Smrg for arg 280665eef222Smrg do 280756957a04Smrg arg2= 280865eef222Smrg if test -n "$dest"; then 2809200d7199Smrg func_append files " $dest" 281065eef222Smrg dest=$arg 281165eef222Smrg continue 2812ef981d24Smrg fi 2813ef981d24Smrg 281465eef222Smrg case $arg in 281565eef222Smrg -d) isdir=yes ;; 281665eef222Smrg -f) 281756957a04Smrg if $install_cp; then :; else 281856957a04Smrg prev=$arg 281956957a04Smrg fi 282065eef222Smrg ;; 282165eef222Smrg -g | -m | -o) 282265eef222Smrg prev=$arg 282365eef222Smrg ;; 282465eef222Smrg -s) 282565eef222Smrg stripme=" -s" 282665eef222Smrg continue 282765eef222Smrg ;; 282865eef222Smrg -*) 282965eef222Smrg ;; 283065eef222Smrg *) 283165eef222Smrg # If the previous option needed an argument, then skip it. 283265eef222Smrg if test -n "$prev"; then 283356957a04Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 283456957a04Smrg arg2=$install_override_mode 283556957a04Smrg no_mode=false 283656957a04Smrg fi 283765eef222Smrg prev= 283865eef222Smrg else 283965eef222Smrg dest=$arg 284065eef222Smrg continue 284165eef222Smrg fi 284265eef222Smrg ;; 284365eef222Smrg esac 2844ef981d24Smrg 284565eef222Smrg # Aesthetically quote the argument. 284665eef222Smrg func_quote_for_eval "$arg" 2847200d7199Smrg func_append install_prog " $func_quote_for_eval_result" 284856957a04Smrg if test -n "$arg2"; then 284956957a04Smrg func_quote_for_eval "$arg2" 285056957a04Smrg fi 2851200d7199Smrg func_append install_shared_prog " $func_quote_for_eval_result" 285265eef222Smrg done 2853ef981d24Smrg 285465eef222Smrg test -z "$install_prog" && \ 285565eef222Smrg func_fatal_help "you must specify an install program" 2856ef981d24Smrg 285765eef222Smrg test -n "$prev" && \ 285865eef222Smrg func_fatal_help "the \`$prev' option requires an argument" 2859ef981d24Smrg 286056957a04Smrg if test -n "$install_override_mode" && $no_mode; then 286156957a04Smrg if $install_cp; then :; else 286256957a04Smrg func_quote_for_eval "$install_override_mode" 2863200d7199Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 286456957a04Smrg fi 286556957a04Smrg fi 286656957a04Smrg 286765eef222Smrg if test -z "$files"; then 286865eef222Smrg if test -z "$dest"; then 286965eef222Smrg func_fatal_help "no file or destination specified" 287065eef222Smrg else 287165eef222Smrg func_fatal_help "you must specify a destination" 2872ef981d24Smrg fi 2873ef981d24Smrg fi 2874ef981d24Smrg 287565eef222Smrg # Strip any trailing slash from the destination. 287665eef222Smrg func_stripname '' '/' "$dest" 287765eef222Smrg dest=$func_stripname_result 2878ef981d24Smrg 287965eef222Smrg # Check to see that the destination is a directory. 288065eef222Smrg test -d "$dest" && isdir=yes 288165eef222Smrg if test "$isdir" = yes; then 288265eef222Smrg destdir="$dest" 288365eef222Smrg destname= 288465eef222Smrg else 288565eef222Smrg func_dirname_and_basename "$dest" "" "." 288665eef222Smrg destdir="$func_dirname_result" 288765eef222Smrg destname="$func_basename_result" 288865eef222Smrg 288965eef222Smrg # Not a directory, so check to see that there is only one file specified. 289065eef222Smrg set dummy $files; shift 289165eef222Smrg test "$#" -gt 1 && \ 289265eef222Smrg func_fatal_help "\`$dest' is not a directory" 289365eef222Smrg fi 289465eef222Smrg case $destdir in 289565eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2896ef981d24Smrg *) 289765eef222Smrg for file in $files; do 289865eef222Smrg case $file in 289965eef222Smrg *.lo) ;; 290065eef222Smrg *) 290165eef222Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 290265eef222Smrg ;; 290365eef222Smrg esac 290465eef222Smrg done 2905ef981d24Smrg ;; 2906ef981d24Smrg esac 2907ef981d24Smrg 290865eef222Smrg # This variable tells wrapper scripts just to set variables rather 290965eef222Smrg # than running their programs. 291065eef222Smrg libtool_install_magic="$magic" 2911ef981d24Smrg 291265eef222Smrg staticlibs= 291365eef222Smrg future_libdirs= 291465eef222Smrg current_libdirs= 291565eef222Smrg for file in $files; do 2916ef981d24Smrg 291765eef222Smrg # Do each installation. 291865eef222Smrg case $file in 291965eef222Smrg *.$libext) 292065eef222Smrg # Do the static libraries later. 2921200d7199Smrg func_append staticlibs " $file" 292265eef222Smrg ;; 292365eef222Smrg 292465eef222Smrg *.la) 2925200d7199Smrg func_resolve_sysroot "$file" 2926200d7199Smrg file=$func_resolve_sysroot_result 2927200d7199Smrg 292865eef222Smrg # Check to see that this really is a libtool archive. 292965eef222Smrg func_lalib_unsafe_p "$file" \ 293065eef222Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 293165eef222Smrg 293265eef222Smrg library_names= 293365eef222Smrg old_library= 293465eef222Smrg relink_command= 293565eef222Smrg func_source "$file" 293665eef222Smrg 293765eef222Smrg # Add the libdir to current_libdirs if it is the destination. 293865eef222Smrg if test "X$destdir" = "X$libdir"; then 293965eef222Smrg case "$current_libdirs " in 294065eef222Smrg *" $libdir "*) ;; 2941200d7199Smrg *) func_append current_libdirs " $libdir" ;; 2942ef981d24Smrg esac 294365eef222Smrg else 294465eef222Smrg # Note the libdir as a future libdir. 294565eef222Smrg case "$future_libdirs " in 294665eef222Smrg *" $libdir "*) ;; 2947200d7199Smrg *) func_append future_libdirs " $libdir" ;; 294865eef222Smrg esac 294965eef222Smrg fi 2950ef981d24Smrg 295165eef222Smrg func_dirname "$file" "/" "" 295265eef222Smrg dir="$func_dirname_result" 2953200d7199Smrg func_append dir "$objdir" 295465eef222Smrg 295565eef222Smrg if test -n "$relink_command"; then 295665eef222Smrg # Determine the prefix the user has applied to our future dir. 295756957a04Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 295865eef222Smrg 295965eef222Smrg # Don't allow the user to place us outside of our expected 296065eef222Smrg # location b/c this prevents finding dependent libraries that 296165eef222Smrg # are installed to the same prefix. 296265eef222Smrg # At present, this check doesn't affect windows .dll's that 296365eef222Smrg # are installed into $libdir/../bin (currently, that works fine) 296465eef222Smrg # but it's something to keep an eye on. 296565eef222Smrg test "$inst_prefix_dir" = "$destdir" && \ 296665eef222Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 296765eef222Smrg 296865eef222Smrg if test -n "$inst_prefix_dir"; then 296965eef222Smrg # Stick the inst_prefix_dir data into the link command. 297056957a04Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 297165eef222Smrg else 297256957a04Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 297365eef222Smrg fi 297465eef222Smrg 297565eef222Smrg func_warning "relinking \`$file'" 297665eef222Smrg func_show_eval "$relink_command" \ 297765eef222Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 297865eef222Smrg fi 297965eef222Smrg 298065eef222Smrg # See the names of the shared library. 298165eef222Smrg set dummy $library_names; shift 298265eef222Smrg if test -n "$1"; then 298365eef222Smrg realname="$1" 298465eef222Smrg shift 298565eef222Smrg 298665eef222Smrg srcname="$realname" 298765eef222Smrg test -n "$relink_command" && srcname="$realname"T 298865eef222Smrg 298965eef222Smrg # Install the shared library and build the symlinks. 299056957a04Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 299165eef222Smrg 'exit $?' 299265eef222Smrg tstripme="$stripme" 299365eef222Smrg case $host_os in 299465eef222Smrg cygwin* | mingw* | pw32* | cegcc*) 299565eef222Smrg case $realname in 299665eef222Smrg *.dll.a) 299765eef222Smrg tstripme="" 299865eef222Smrg ;; 299965eef222Smrg esac 3000ef981d24Smrg ;; 3001ef981d24Smrg esac 300265eef222Smrg if test -n "$tstripme" && test -n "$striplib"; then 300365eef222Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 3004ef981d24Smrg fi 300565eef222Smrg 300665eef222Smrg if test "$#" -gt 0; then 300765eef222Smrg # Delete the old symlinks, and create new ones. 300865eef222Smrg # Try `ln -sf' first, because the `ln' binary might depend on 300965eef222Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 301065eef222Smrg # so we also need to try rm && ln -s. 301165eef222Smrg for linkname 301265eef222Smrg do 301365eef222Smrg test "$linkname" != "$realname" \ 301465eef222Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3015ef981d24Smrg done 3016ef981d24Smrg fi 3017ef981d24Smrg 301865eef222Smrg # Do each command in the postinstall commands. 301965eef222Smrg lib="$destdir/$realname" 302065eef222Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 3021ef981d24Smrg fi 3022ef981d24Smrg 302365eef222Smrg # Install the pseudo-library for information purposes. 302465eef222Smrg func_basename "$file" 302565eef222Smrg name="$func_basename_result" 302665eef222Smrg instname="$dir/$name"i 302765eef222Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3028ef981d24Smrg 302965eef222Smrg # Maybe install the static library, too. 3030200d7199Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 303165eef222Smrg ;; 3032ef981d24Smrg 303365eef222Smrg *.lo) 303465eef222Smrg # Install (i.e. copy) a libtool object. 3035ef981d24Smrg 303665eef222Smrg # Figure out destination file name, if it wasn't already specified. 303765eef222Smrg if test -n "$destname"; then 303865eef222Smrg destfile="$destdir/$destname" 303965eef222Smrg else 304065eef222Smrg func_basename "$file" 304165eef222Smrg destfile="$func_basename_result" 304265eef222Smrg destfile="$destdir/$destfile" 304365eef222Smrg fi 304465eef222Smrg 304565eef222Smrg # Deduce the name of the destination old-style object file. 304665eef222Smrg case $destfile in 304765eef222Smrg *.lo) 304865eef222Smrg func_lo2o "$destfile" 304965eef222Smrg staticdest=$func_lo2o_result 305065eef222Smrg ;; 305165eef222Smrg *.$objext) 305265eef222Smrg staticdest="$destfile" 305365eef222Smrg destfile= 305465eef222Smrg ;; 305565eef222Smrg *) 305665eef222Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 305765eef222Smrg ;; 3058ef981d24Smrg esac 3059ef981d24Smrg 306065eef222Smrg # Install the libtool object if requested. 306165eef222Smrg test -n "$destfile" && \ 306265eef222Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 306365eef222Smrg 306465eef222Smrg # Install the old object if enabled. 306565eef222Smrg if test "$build_old_libs" = yes; then 306665eef222Smrg # Deduce the name of the old-style object file. 306765eef222Smrg func_lo2o "$file" 306865eef222Smrg staticobj=$func_lo2o_result 306965eef222Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3070ef981d24Smrg fi 307165eef222Smrg exit $EXIT_SUCCESS 307265eef222Smrg ;; 3073ef981d24Smrg 307465eef222Smrg *) 307565eef222Smrg # Figure out destination file name, if it wasn't already specified. 307665eef222Smrg if test -n "$destname"; then 307765eef222Smrg destfile="$destdir/$destname" 307865eef222Smrg else 307965eef222Smrg func_basename "$file" 308065eef222Smrg destfile="$func_basename_result" 308165eef222Smrg destfile="$destdir/$destfile" 308265eef222Smrg fi 308365eef222Smrg 308465eef222Smrg # If the file is missing, and there is a .exe on the end, strip it 308565eef222Smrg # because it is most likely a libtool script we actually want to 308665eef222Smrg # install 308765eef222Smrg stripped_ext="" 308865eef222Smrg case $file in 308965eef222Smrg *.exe) 309065eef222Smrg if test ! -f "$file"; then 309165eef222Smrg func_stripname '' '.exe' "$file" 309265eef222Smrg file=$func_stripname_result 309365eef222Smrg stripped_ext=".exe" 3094ef981d24Smrg fi 309565eef222Smrg ;; 309665eef222Smrg esac 3097ef981d24Smrg 309865eef222Smrg # Do a test to see if this is really a libtool program. 309965eef222Smrg case $host in 310065eef222Smrg *cygwin* | *mingw*) 310165eef222Smrg if func_ltwrapper_executable_p "$file"; then 310265eef222Smrg func_ltwrapper_scriptname "$file" 310365eef222Smrg wrapper=$func_ltwrapper_scriptname_result 310465eef222Smrg else 310565eef222Smrg func_stripname '' '.exe' "$file" 310665eef222Smrg wrapper=$func_stripname_result 310765eef222Smrg fi 310865eef222Smrg ;; 310965eef222Smrg *) 311065eef222Smrg wrapper=$file 311165eef222Smrg ;; 311265eef222Smrg esac 311365eef222Smrg if func_ltwrapper_script_p "$wrapper"; then 311465eef222Smrg notinst_deplibs= 311565eef222Smrg relink_command= 3116ef981d24Smrg 311765eef222Smrg func_source "$wrapper" 3118ef981d24Smrg 311965eef222Smrg # Check the variables that should have been set. 312065eef222Smrg test -z "$generated_by_libtool_version" && \ 312165eef222Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 312265eef222Smrg 312365eef222Smrg finalize=yes 312465eef222Smrg for lib in $notinst_deplibs; do 312565eef222Smrg # Check to see that each library is installed. 312665eef222Smrg libdir= 312765eef222Smrg if test -f "$lib"; then 312865eef222Smrg func_source "$lib" 312965eef222Smrg fi 313056957a04Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 313165eef222Smrg if test -n "$libdir" && test ! -f "$libfile"; then 313265eef222Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 313365eef222Smrg finalize=no 313465eef222Smrg fi 313565eef222Smrg done 313665eef222Smrg 313765eef222Smrg relink_command= 313865eef222Smrg func_source "$wrapper" 313965eef222Smrg 314065eef222Smrg outputname= 314165eef222Smrg if test "$fast_install" = no && test -n "$relink_command"; then 314265eef222Smrg $opt_dry_run || { 314365eef222Smrg if test "$finalize" = yes; then 314465eef222Smrg tmpdir=`func_mktempdir` 314565eef222Smrg func_basename "$file$stripped_ext" 314665eef222Smrg file="$func_basename_result" 314765eef222Smrg outputname="$tmpdir/$file" 314865eef222Smrg # Replace the output file specification. 314956957a04Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 315065eef222Smrg 315165eef222Smrg $opt_silent || { 315265eef222Smrg func_quote_for_expand "$relink_command" 315365eef222Smrg eval "func_echo $func_quote_for_expand_result" 315465eef222Smrg } 315565eef222Smrg if eval "$relink_command"; then : 315665eef222Smrg else 315765eef222Smrg func_error "error: relink \`$file' with the above command before installing it" 315865eef222Smrg $opt_dry_run || ${RM}r "$tmpdir" 315965eef222Smrg continue 316065eef222Smrg fi 316165eef222Smrg file="$outputname" 316265eef222Smrg else 316365eef222Smrg func_warning "cannot relink \`$file'" 316465eef222Smrg fi 316565eef222Smrg } 3166ef981d24Smrg else 316765eef222Smrg # Install the binary that we compiled earlier. 316856957a04Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3169ef981d24Smrg fi 317065eef222Smrg fi 3171ef981d24Smrg 317265eef222Smrg # remove .exe since cygwin /usr/bin/install will append another 317365eef222Smrg # one anyway 317465eef222Smrg case $install_prog,$host in 317565eef222Smrg */usr/bin/install*,*cygwin*) 317665eef222Smrg case $file:$destfile in 317765eef222Smrg *.exe:*.exe) 317865eef222Smrg # this is ok 317965eef222Smrg ;; 318065eef222Smrg *.exe:*) 318165eef222Smrg destfile=$destfile.exe 318265eef222Smrg ;; 318365eef222Smrg *:*.exe) 318465eef222Smrg func_stripname '' '.exe' "$destfile" 318565eef222Smrg destfile=$func_stripname_result 318665eef222Smrg ;; 318765eef222Smrg esac 3188ef981d24Smrg ;; 3189ef981d24Smrg esac 319065eef222Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 319165eef222Smrg $opt_dry_run || if test -n "$outputname"; then 319265eef222Smrg ${RM}r "$tmpdir" 319365eef222Smrg fi 319465eef222Smrg ;; 319565eef222Smrg esac 319665eef222Smrg done 3197ef981d24Smrg 319865eef222Smrg for file in $staticlibs; do 319965eef222Smrg func_basename "$file" 320065eef222Smrg name="$func_basename_result" 3201ef981d24Smrg 320265eef222Smrg # Set up the ranlib parameters. 320365eef222Smrg oldlib="$destdir/$name" 3204ef981d24Smrg 320565eef222Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3206ef981d24Smrg 320765eef222Smrg if test -n "$stripme" && test -n "$old_striplib"; then 320865eef222Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 320965eef222Smrg fi 3210ef981d24Smrg 321165eef222Smrg # Do each command in the postinstall commands. 321265eef222Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 321365eef222Smrg done 3214ef981d24Smrg 321565eef222Smrg test -n "$future_libdirs" && \ 321665eef222Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3217ef981d24Smrg 321865eef222Smrg if test -n "$current_libdirs"; then 321965eef222Smrg # Maybe just do a dry run. 322065eef222Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 322165eef222Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 322265eef222Smrg else 322365eef222Smrg exit $EXIT_SUCCESS 322465eef222Smrg fi 322565eef222Smrg} 3226ef981d24Smrg 3227200d7199Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3228ef981d24Smrg 3229ef981d24Smrg 323065eef222Smrg# func_generate_dlsyms outputname originator pic_p 323165eef222Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 323265eef222Smrg# a dlpreopen symbol table. 323365eef222Smrgfunc_generate_dlsyms () 323465eef222Smrg{ 323565eef222Smrg $opt_debug 323665eef222Smrg my_outputname="$1" 323765eef222Smrg my_originator="$2" 323865eef222Smrg my_pic_p="${3-no}" 323965eef222Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 324065eef222Smrg my_dlsyms= 324165eef222Smrg 324265eef222Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 324365eef222Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 324465eef222Smrg my_dlsyms="${my_outputname}S.c" 324565eef222Smrg else 324665eef222Smrg func_error "not configured to extract global symbols from dlpreopened files" 324765eef222Smrg fi 324865eef222Smrg fi 3249ef981d24Smrg 325065eef222Smrg if test -n "$my_dlsyms"; then 325165eef222Smrg case $my_dlsyms in 325265eef222Smrg "") ;; 325365eef222Smrg *.c) 325465eef222Smrg # Discover the nlist of each of the dlfiles. 325565eef222Smrg nlist="$output_objdir/${my_outputname}.nm" 325665eef222Smrg 325765eef222Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 325865eef222Smrg 325965eef222Smrg # Parse the name list into a source file. 326065eef222Smrg func_verbose "creating $output_objdir/$my_dlsyms" 326165eef222Smrg 326265eef222Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 326365eef222Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 326465eef222Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 326565eef222Smrg 326665eef222Smrg#ifdef __cplusplus 326765eef222Smrgextern \"C\" { 326865eef222Smrg#endif 326965eef222Smrg 327056957a04Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 327156957a04Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 327256957a04Smrg#endif 327356957a04Smrg 3274200d7199Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3275200d7199Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3276200d7199Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 3277200d7199Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 3278200d7199Smrg# define LT_DLSYM_CONST 3279200d7199Smrg#elif defined(__osf__) 3280200d7199Smrg/* This system does not cope well with relocations in const data. */ 3281200d7199Smrg# define LT_DLSYM_CONST 3282200d7199Smrg#else 3283200d7199Smrg# define LT_DLSYM_CONST const 3284200d7199Smrg#endif 3285200d7199Smrg 328665eef222Smrg/* External symbol declarations for the compiler. */\ 328765eef222Smrg" 328865eef222Smrg 328965eef222Smrg if test "$dlself" = yes; then 329065eef222Smrg func_verbose "generating symbol list for \`$output'" 329165eef222Smrg 329265eef222Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 329365eef222Smrg 329465eef222Smrg # Add our own program objects to the symbol list. 329556957a04Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 329665eef222Smrg for progfile in $progfiles; do 3297200d7199Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 3298200d7199Smrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3299200d7199Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 330065eef222Smrg done 330165eef222Smrg 330265eef222Smrg if test -n "$exclude_expsyms"; then 330365eef222Smrg $opt_dry_run || { 330465eef222Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 330565eef222Smrg eval '$MV "$nlist"T "$nlist"' 330665eef222Smrg } 3307ef981d24Smrg fi 3308ef981d24Smrg 330965eef222Smrg if test -n "$export_symbols_regex"; then 331065eef222Smrg $opt_dry_run || { 331165eef222Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 331265eef222Smrg eval '$MV "$nlist"T "$nlist"' 331365eef222Smrg } 3314ef981d24Smrg fi 331565eef222Smrg 331665eef222Smrg # Prepare the list of exported symbols 331765eef222Smrg if test -z "$export_symbols"; then 331865eef222Smrg export_symbols="$output_objdir/$outputname.exp" 331965eef222Smrg $opt_dry_run || { 332065eef222Smrg $RM $export_symbols 332165eef222Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 332265eef222Smrg case $host in 332365eef222Smrg *cygwin* | *mingw* | *cegcc* ) 332465eef222Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 332565eef222Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 332665eef222Smrg ;; 3327ef981d24Smrg esac 332865eef222Smrg } 332965eef222Smrg else 333065eef222Smrg $opt_dry_run || { 333165eef222Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 333265eef222Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 333365eef222Smrg eval '$MV "$nlist"T "$nlist"' 333465eef222Smrg case $host in 333556957a04Smrg *cygwin* | *mingw* | *cegcc* ) 333665eef222Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 333765eef222Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 333865eef222Smrg ;; 3339ef981d24Smrg esac 334065eef222Smrg } 3341ef981d24Smrg fi 334265eef222Smrg fi 3343ef981d24Smrg 334465eef222Smrg for dlprefile in $dlprefiles; do 334565eef222Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 334665eef222Smrg func_basename "$dlprefile" 334765eef222Smrg name="$func_basename_result" 3348200d7199Smrg case $host in 3349200d7199Smrg *cygwin* | *mingw* | *cegcc* ) 3350200d7199Smrg # if an import library, we need to obtain dlname 3351200d7199Smrg if func_win32_import_lib_p "$dlprefile"; then 3352200d7199Smrg func_tr_sh "$dlprefile" 3353200d7199Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 3354200d7199Smrg dlprefile_dlbasename="" 3355200d7199Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3356200d7199Smrg # Use subshell, to avoid clobbering current variable values 3357200d7199Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 3358200d7199Smrg if test -n "$dlprefile_dlname" ; then 3359200d7199Smrg func_basename "$dlprefile_dlname" 3360200d7199Smrg dlprefile_dlbasename="$func_basename_result" 3361200d7199Smrg else 3362200d7199Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 3363200d7199Smrg $sharedlib_from_linklib_cmd "$dlprefile" 3364200d7199Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 3365200d7199Smrg fi 3366200d7199Smrg fi 3367200d7199Smrg $opt_dry_run || { 3368200d7199Smrg if test -n "$dlprefile_dlbasename" ; then 3369200d7199Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3370200d7199Smrg else 3371200d7199Smrg func_warning "Could not compute DLL name from $name" 3372200d7199Smrg eval '$ECHO ": $name " >> "$nlist"' 3373200d7199Smrg fi 3374200d7199Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3375200d7199Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3376200d7199Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3377200d7199Smrg } 3378200d7199Smrg else # not an import lib 3379200d7199Smrg $opt_dry_run || { 3380200d7199Smrg eval '$ECHO ": $name " >> "$nlist"' 3381200d7199Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3382200d7199Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3383200d7199Smrg } 3384200d7199Smrg fi 3385200d7199Smrg ;; 3386200d7199Smrg *) 3387200d7199Smrg $opt_dry_run || { 3388200d7199Smrg eval '$ECHO ": $name " >> "$nlist"' 3389200d7199Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3390200d7199Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3391200d7199Smrg } 3392200d7199Smrg ;; 3393200d7199Smrg esac 339465eef222Smrg done 3395ef981d24Smrg 339665eef222Smrg $opt_dry_run || { 339765eef222Smrg # Make sure we have at least an empty file. 339865eef222Smrg test -f "$nlist" || : > "$nlist" 3399ef981d24Smrg 340065eef222Smrg if test -n "$exclude_expsyms"; then 340165eef222Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 340265eef222Smrg $MV "$nlist"T "$nlist" 3403ef981d24Smrg fi 3404ef981d24Smrg 340565eef222Smrg # Try sorting and uniquifying the output. 340665eef222Smrg if $GREP -v "^: " < "$nlist" | 340765eef222Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 340865eef222Smrg sort -k 3 3409ef981d24Smrg else 341065eef222Smrg sort +2 341165eef222Smrg fi | 341265eef222Smrg uniq > "$nlist"S; then 341365eef222Smrg : 3414ef981d24Smrg else 341565eef222Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 3416ef981d24Smrg fi 3417ef981d24Smrg 341865eef222Smrg if test -f "$nlist"S; then 341965eef222Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3420ef981d24Smrg else 342156957a04Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3422ef981d24Smrg fi 3423ef981d24Smrg 342456957a04Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3425ef981d24Smrg 342665eef222Smrg/* The mapping between symbol names and symbols. */ 342765eef222Smrgtypedef struct { 342865eef222Smrg const char *name; 342965eef222Smrg void *address; 343065eef222Smrg} lt_dlsymlist; 3431200d7199Smrgextern LT_DLSYM_CONST lt_dlsymlist 343265eef222Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 3433200d7199SmrgLT_DLSYM_CONST lt_dlsymlist 343465eef222Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 343565eef222Smrg{\ 343665eef222Smrg { \"$my_originator\", (void *) 0 }," 343765eef222Smrg 343865eef222Smrg case $need_lib_prefix in 343965eef222Smrg no) 344065eef222Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 344165eef222Smrg ;; 344265eef222Smrg *) 344365eef222Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 344465eef222Smrg ;; 344565eef222Smrg esac 344656957a04Smrg echo >> "$output_objdir/$my_dlsyms" "\ 344765eef222Smrg {0, (void *) 0} 344865eef222Smrg}; 344965eef222Smrg 345065eef222Smrg/* This works around a problem in FreeBSD linker */ 345165eef222Smrg#ifdef FREEBSD_WORKAROUND 345265eef222Smrgstatic const void *lt_preloaded_setup() { 345365eef222Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 345465eef222Smrg} 345565eef222Smrg#endif 345665eef222Smrg 345765eef222Smrg#ifdef __cplusplus 345865eef222Smrg} 345965eef222Smrg#endif\ 346065eef222Smrg" 346165eef222Smrg } # !$opt_dry_run 346265eef222Smrg 346365eef222Smrg pic_flag_for_symtable= 346465eef222Smrg case "$compile_command " in 346565eef222Smrg *" -static "*) ;; 346665eef222Smrg *) 346765eef222Smrg case $host in 346865eef222Smrg # compiling the symbol table file with pic_flag works around 346965eef222Smrg # a FreeBSD bug that causes programs to crash when -lm is 347065eef222Smrg # linked before any other PIC object. But we must not use 347165eef222Smrg # pic_flag when linking with -static. The problem exists in 347265eef222Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 347365eef222Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 347465eef222Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 347565eef222Smrg *-*-hpux*) 347665eef222Smrg pic_flag_for_symtable=" $pic_flag" ;; 347765eef222Smrg *) 347865eef222Smrg if test "X$my_pic_p" != Xno; then 347965eef222Smrg pic_flag_for_symtable=" $pic_flag" 3480ef981d24Smrg fi 348165eef222Smrg ;; 348265eef222Smrg esac 348365eef222Smrg ;; 348465eef222Smrg esac 348565eef222Smrg symtab_cflags= 348665eef222Smrg for arg in $LTCFLAGS; do 348765eef222Smrg case $arg in 348865eef222Smrg -pie | -fpie | -fPIE) ;; 3489200d7199Smrg *) func_append symtab_cflags " $arg" ;; 349065eef222Smrg esac 349165eef222Smrg done 3492ef981d24Smrg 349365eef222Smrg # Now compile the dynamic symbol file. 349465eef222Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3495ef981d24Smrg 349665eef222Smrg # Clean up the generated files. 349765eef222Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 349865eef222Smrg 349965eef222Smrg # Transform the symbol file into the correct name. 350065eef222Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 350165eef222Smrg case $host in 350265eef222Smrg *cygwin* | *mingw* | *cegcc* ) 350365eef222Smrg if test -f "$output_objdir/$my_outputname.def"; then 350456957a04Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 350556957a04Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 350665eef222Smrg else 350756957a04Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 350856957a04Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 350965eef222Smrg fi 351065eef222Smrg ;; 351165eef222Smrg *) 351256957a04Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 351356957a04Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3514ef981d24Smrg ;; 3515ef981d24Smrg esac 351665eef222Smrg ;; 351765eef222Smrg *) 351865eef222Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 351965eef222Smrg ;; 352065eef222Smrg esac 352165eef222Smrg else 352265eef222Smrg # We keep going just in case the user didn't refer to 352365eef222Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 352465eef222Smrg # really was required. 352565eef222Smrg 352665eef222Smrg # Nullify the symbol file. 352756957a04Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 352856957a04Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3529ef981d24Smrg fi 353065eef222Smrg} 3531ef981d24Smrg 353265eef222Smrg# func_win32_libid arg 353365eef222Smrg# return the library type of file 'arg' 353465eef222Smrg# 353565eef222Smrg# Need a lot of goo to handle *both* DLLs and import libs 353665eef222Smrg# Has to be a shell function in order to 'eat' the argument 353765eef222Smrg# that is supplied when $file_magic_command is called. 353856957a04Smrg# Despite the name, also deal with 64 bit binaries. 353965eef222Smrgfunc_win32_libid () 354065eef222Smrg{ 354165eef222Smrg $opt_debug 354265eef222Smrg win32_libid_type="unknown" 354365eef222Smrg win32_fileres=`file -L $1 2>/dev/null` 354465eef222Smrg case $win32_fileres in 354565eef222Smrg *ar\ archive\ import\ library*) # definitely import 354665eef222Smrg win32_libid_type="x86 archive import" 354765eef222Smrg ;; 354865eef222Smrg *ar\ archive*) # could be an import, or static 354956957a04Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 355065eef222Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 355156957a04Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 3552200d7199Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3553200d7199Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 355465eef222Smrg $SED -n -e ' 355565eef222Smrg 1,100{ 355665eef222Smrg / I /{ 355765eef222Smrg s,.*,import, 355865eef222Smrg p 355965eef222Smrg q 356065eef222Smrg } 356165eef222Smrg }'` 356265eef222Smrg case $win32_nmres in 356365eef222Smrg import*) win32_libid_type="x86 archive import";; 356465eef222Smrg *) win32_libid_type="x86 archive static";; 356565eef222Smrg esac 356665eef222Smrg fi 356765eef222Smrg ;; 356865eef222Smrg *DLL*) 356965eef222Smrg win32_libid_type="x86 DLL" 357065eef222Smrg ;; 357165eef222Smrg *executable*) # but shell scripts are "executable" too... 357265eef222Smrg case $win32_fileres in 357365eef222Smrg *MS\ Windows\ PE\ Intel*) 357465eef222Smrg win32_libid_type="x86 DLL" 357565eef222Smrg ;; 357665eef222Smrg esac 357765eef222Smrg ;; 357865eef222Smrg esac 357965eef222Smrg $ECHO "$win32_libid_type" 358065eef222Smrg} 3581ef981d24Smrg 3582200d7199Smrg# func_cygming_dll_for_implib ARG 3583200d7199Smrg# 3584200d7199Smrg# Platform-specific function to extract the 3585200d7199Smrg# name of the DLL associated with the specified 3586200d7199Smrg# import library ARG. 3587200d7199Smrg# Invoked by eval'ing the libtool variable 3588200d7199Smrg# $sharedlib_from_linklib_cmd 3589200d7199Smrg# Result is available in the variable 3590200d7199Smrg# $sharedlib_from_linklib_result 3591200d7199Smrgfunc_cygming_dll_for_implib () 3592200d7199Smrg{ 3593200d7199Smrg $opt_debug 3594200d7199Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3595200d7199Smrg} 3596200d7199Smrg 3597200d7199Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3598200d7199Smrg# 3599200d7199Smrg# The is the core of a fallback implementation of a 3600200d7199Smrg# platform-specific function to extract the name of the 3601200d7199Smrg# DLL associated with the specified import library LIBNAME. 3602200d7199Smrg# 3603200d7199Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 3604200d7199Smrg# on the platform and compiler that created the implib. 3605200d7199Smrg# 3606200d7199Smrg# Echos the name of the DLL associated with the 3607200d7199Smrg# specified import library. 3608200d7199Smrgfunc_cygming_dll_for_implib_fallback_core () 3609200d7199Smrg{ 3610200d7199Smrg $opt_debug 3611200d7199Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3612200d7199Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3613200d7199Smrg $SED '/^Contents of section '"$match_literal"':/{ 3614200d7199Smrg # Place marker at beginning of archive member dllname section 3615200d7199Smrg s/.*/====MARK====/ 3616200d7199Smrg p 3617200d7199Smrg d 3618200d7199Smrg } 3619200d7199Smrg # These lines can sometimes be longer than 43 characters, but 3620200d7199Smrg # are always uninteresting 3621200d7199Smrg /:[ ]*file format pe[i]\{,1\}-/d 3622200d7199Smrg /^In archive [^:]*:/d 3623200d7199Smrg # Ensure marker is printed 3624200d7199Smrg /^====MARK====/p 3625200d7199Smrg # Remove all lines with less than 43 characters 3626200d7199Smrg /^.\{43\}/!d 3627200d7199Smrg # From remaining lines, remove first 43 characters 3628200d7199Smrg s/^.\{43\}//' | 3629200d7199Smrg $SED -n ' 3630200d7199Smrg # Join marker and all lines until next marker into a single line 3631200d7199Smrg /^====MARK====/ b para 3632200d7199Smrg H 3633200d7199Smrg $ b para 3634200d7199Smrg b 3635200d7199Smrg :para 3636200d7199Smrg x 3637200d7199Smrg s/\n//g 3638200d7199Smrg # Remove the marker 3639200d7199Smrg s/^====MARK====// 3640200d7199Smrg # Remove trailing dots and whitespace 3641200d7199Smrg s/[\. \t]*$// 3642200d7199Smrg # Print 3643200d7199Smrg /./p' | 3644200d7199Smrg # we now have a list, one entry per line, of the stringified 3645200d7199Smrg # contents of the appropriate section of all members of the 3646200d7199Smrg # archive which possess that section. Heuristic: eliminate 3647200d7199Smrg # all those which have a first or second character that is 3648200d7199Smrg # a '.' (that is, objdump's representation of an unprintable 3649200d7199Smrg # character.) This should work for all archives with less than 3650200d7199Smrg # 0x302f exports -- but will fail for DLLs whose name actually 3651200d7199Smrg # begins with a literal '.' or a single character followed by 3652200d7199Smrg # a '.'. 3653200d7199Smrg # 3654200d7199Smrg # Of those that remain, print the first one. 3655200d7199Smrg $SED -e '/^\./d;/^.\./d;q' 3656200d7199Smrg} 3657200d7199Smrg 3658200d7199Smrg# func_cygming_gnu_implib_p ARG 3659200d7199Smrg# This predicate returns with zero status (TRUE) if 3660200d7199Smrg# ARG is a GNU/binutils-style import library. Returns 3661200d7199Smrg# with nonzero status (FALSE) otherwise. 3662200d7199Smrgfunc_cygming_gnu_implib_p () 3663200d7199Smrg{ 3664200d7199Smrg $opt_debug 3665200d7199Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3666200d7199Smrg 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)$'` 3667200d7199Smrg test -n "$func_cygming_gnu_implib_tmp" 3668200d7199Smrg} 3669200d7199Smrg 3670200d7199Smrg# func_cygming_ms_implib_p ARG 3671200d7199Smrg# This predicate returns with zero status (TRUE) if 3672200d7199Smrg# ARG is an MS-style import library. Returns 3673200d7199Smrg# with nonzero status (FALSE) otherwise. 3674200d7199Smrgfunc_cygming_ms_implib_p () 3675200d7199Smrg{ 3676200d7199Smrg $opt_debug 3677200d7199Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 3678200d7199Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 3679200d7199Smrg test -n "$func_cygming_ms_implib_tmp" 3680200d7199Smrg} 3681200d7199Smrg 3682200d7199Smrg# func_cygming_dll_for_implib_fallback ARG 3683200d7199Smrg# Platform-specific function to extract the 3684200d7199Smrg# name of the DLL associated with the specified 3685200d7199Smrg# import library ARG. 3686200d7199Smrg# 3687200d7199Smrg# This fallback implementation is for use when $DLLTOOL 3688200d7199Smrg# does not support the --identify-strict option. 3689200d7199Smrg# Invoked by eval'ing the libtool variable 3690200d7199Smrg# $sharedlib_from_linklib_cmd 3691200d7199Smrg# Result is available in the variable 3692200d7199Smrg# $sharedlib_from_linklib_result 3693200d7199Smrgfunc_cygming_dll_for_implib_fallback () 3694200d7199Smrg{ 3695200d7199Smrg $opt_debug 3696200d7199Smrg if func_cygming_gnu_implib_p "$1" ; then 3697200d7199Smrg # binutils import library 3698200d7199Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 3699200d7199Smrg elif func_cygming_ms_implib_p "$1" ; then 3700200d7199Smrg # ms-generated import library 3701200d7199Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3702200d7199Smrg else 3703200d7199Smrg # unknown 3704200d7199Smrg sharedlib_from_linklib_result="" 3705200d7199Smrg fi 3706200d7199Smrg} 3707ef981d24Smrg 3708ef981d24Smrg 370965eef222Smrg# func_extract_an_archive dir oldlib 371065eef222Smrgfunc_extract_an_archive () 371165eef222Smrg{ 371265eef222Smrg $opt_debug 371365eef222Smrg f_ex_an_ar_dir="$1"; shift 371465eef222Smrg f_ex_an_ar_oldlib="$1" 371556957a04Smrg if test "$lock_old_archive_extraction" = yes; then 371656957a04Smrg lockfile=$f_ex_an_ar_oldlib.lock 371756957a04Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 371856957a04Smrg func_echo "Waiting for $lockfile to be removed" 371956957a04Smrg sleep 2 372056957a04Smrg done 372156957a04Smrg fi 372256957a04Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 372356957a04Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 372456957a04Smrg if test "$lock_old_archive_extraction" = yes; then 372556957a04Smrg $opt_dry_run || rm -f "$lockfile" 372656957a04Smrg fi 372765eef222Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 372865eef222Smrg : 372965eef222Smrg else 373065eef222Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 373165eef222Smrg fi 373265eef222Smrg} 3733ef981d24Smrg 3734ef981d24Smrg 373565eef222Smrg# func_extract_archives gentop oldlib ... 373665eef222Smrgfunc_extract_archives () 373765eef222Smrg{ 373865eef222Smrg $opt_debug 373965eef222Smrg my_gentop="$1"; shift 374065eef222Smrg my_oldlibs=${1+"$@"} 374165eef222Smrg my_oldobjs="" 374265eef222Smrg my_xlib="" 374365eef222Smrg my_xabs="" 374465eef222Smrg my_xdir="" 3745ef981d24Smrg 374665eef222Smrg for my_xlib in $my_oldlibs; do 374765eef222Smrg # Extract the objects. 374865eef222Smrg case $my_xlib in 374965eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 375065eef222Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 375165eef222Smrg esac 375265eef222Smrg func_basename "$my_xlib" 375365eef222Smrg my_xlib="$func_basename_result" 375465eef222Smrg my_xlib_u=$my_xlib 375565eef222Smrg while :; do 375665eef222Smrg case " $extracted_archives " in 375765eef222Smrg *" $my_xlib_u "*) 375865eef222Smrg func_arith $extracted_serial + 1 375965eef222Smrg extracted_serial=$func_arith_result 376065eef222Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 376165eef222Smrg *) break ;; 376265eef222Smrg esac 376365eef222Smrg done 376465eef222Smrg extracted_archives="$extracted_archives $my_xlib_u" 376565eef222Smrg my_xdir="$my_gentop/$my_xlib_u" 3766ef981d24Smrg 376765eef222Smrg func_mkdir_p "$my_xdir" 3768ef981d24Smrg 376965eef222Smrg case $host in 377065eef222Smrg *-darwin*) 377165eef222Smrg func_verbose "Extracting $my_xabs" 377265eef222Smrg # Do not bother doing anything if just a dry run 377365eef222Smrg $opt_dry_run || { 377465eef222Smrg darwin_orig_dir=`pwd` 377565eef222Smrg cd $my_xdir || exit $? 377665eef222Smrg darwin_archive=$my_xabs 377765eef222Smrg darwin_curdir=`pwd` 377865eef222Smrg darwin_base_archive=`basename "$darwin_archive"` 377965eef222Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 378065eef222Smrg if test -n "$darwin_arches"; then 378165eef222Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 378265eef222Smrg darwin_arch= 378365eef222Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 378465eef222Smrg for darwin_arch in $darwin_arches ; do 378565eef222Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 378665eef222Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 378765eef222Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 378865eef222Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 378965eef222Smrg cd "$darwin_curdir" 379065eef222Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 379165eef222Smrg done # $darwin_arches 379265eef222Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 379365eef222Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 379465eef222Smrg darwin_file= 379565eef222Smrg darwin_files= 379665eef222Smrg for darwin_file in $darwin_filelist; do 379756957a04Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 379865eef222Smrg $LIPO -create -output "$darwin_file" $darwin_files 379965eef222Smrg done # $darwin_filelist 380065eef222Smrg $RM -rf unfat-$$ 380165eef222Smrg cd "$darwin_orig_dir" 380265eef222Smrg else 380365eef222Smrg cd $darwin_orig_dir 380465eef222Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 380565eef222Smrg fi # $darwin_arches 380665eef222Smrg } # !$opt_dry_run 380765eef222Smrg ;; 380865eef222Smrg *) 380965eef222Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 381065eef222Smrg ;; 3811ef981d24Smrg esac 381256957a04Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 381365eef222Smrg done 3814ef981d24Smrg 381565eef222Smrg func_extract_archives_result="$my_oldobjs" 381665eef222Smrg} 3817ef981d24Smrg 3818ef981d24Smrg 381956957a04Smrg# func_emit_wrapper [arg=no] 382056957a04Smrg# 382156957a04Smrg# Emit a libtool wrapper script on stdout. 382256957a04Smrg# Don't directly open a file because we may want to 382356957a04Smrg# incorporate the script contents within a cygwin/mingw 382456957a04Smrg# wrapper executable. Must ONLY be called from within 382556957a04Smrg# func_mode_link because it depends on a number of variables 382656957a04Smrg# set therein. 382765eef222Smrg# 382856957a04Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 382956957a04Smrg# variable will take. If 'yes', then the emitted script 383056957a04Smrg# will assume that the directory in which it is stored is 383156957a04Smrg# the $objdir directory. This is a cygwin/mingw-specific 383256957a04Smrg# behavior. 383356957a04Smrgfunc_emit_wrapper () 383465eef222Smrg{ 383556957a04Smrg func_emit_wrapper_arg1=${1-no} 3836ef981d24Smrg 383765eef222Smrg $ECHO "\ 383865eef222Smrg#! $SHELL 3839ef981d24Smrg 384065eef222Smrg# $output - temporary wrapper script for $objdir/$outputname 384165eef222Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 384265eef222Smrg# 384365eef222Smrg# The $output program cannot be directly executed until all the libtool 384465eef222Smrg# libraries that it depends on are installed. 384565eef222Smrg# 384665eef222Smrg# This wrapper script should never be moved out of the build directory. 384765eef222Smrg# If it is, it will not operate correctly. 3848ef981d24Smrg 384965eef222Smrg# Sed substitution that helps us do robust quoting. It backslashifies 385065eef222Smrg# metacharacters that are still active within double-quoted strings. 385165eef222Smrgsed_quote_subst='$sed_quote_subst' 3852ef981d24Smrg 385365eef222Smrg# Be Bourne compatible 385465eef222Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 385565eef222Smrg emulate sh 385665eef222Smrg NULLCMD=: 385765eef222Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 385865eef222Smrg # is contrary to our usage. Disable this feature. 385965eef222Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 386065eef222Smrg setopt NO_GLOB_SUBST 386165eef222Smrgelse 386265eef222Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 386365eef222Smrgfi 386465eef222SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 386565eef222SmrgDUALCASE=1; export DUALCASE # for MKS sh 3866ef981d24Smrg 386765eef222Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 386865eef222Smrg# if CDPATH is set. 386965eef222Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3870ef981d24Smrg 387165eef222Smrgrelink_command=\"$relink_command\" 3872ef981d24Smrg 387365eef222Smrg# This environment variable determines our operation mode. 387465eef222Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 387565eef222Smrg # install mode needs the following variables: 387665eef222Smrg generated_by_libtool_version='$macro_version' 387765eef222Smrg notinst_deplibs='$notinst_deplibs' 387865eef222Smrgelse 387965eef222Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 388065eef222Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 388156957a04Smrg file=\"\$0\"" 388256957a04Smrg 388356957a04Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 388456957a04Smrg $ECHO "\ 388556957a04Smrg 388656957a04Smrg# A function that is used when there is no print builtin or printf. 388756957a04Smrgfunc_fallback_echo () 388856957a04Smrg{ 388956957a04Smrg eval 'cat <<_LTECHO_EOF 389056957a04Smrg\$1 389156957a04Smrg_LTECHO_EOF' 389256957a04Smrg} 389356957a04Smrg ECHO=\"$qECHO\" 389456957a04Smrg fi 389556957a04Smrg 389656957a04Smrg# Very basic option parsing. These options are (a) specific to 389756957a04Smrg# the libtool wrapper, (b) are identical between the wrapper 389856957a04Smrg# /script/ and the wrapper /executable/ which is used only on 389956957a04Smrg# windows platforms, and (c) all begin with the string "--lt-" 390056957a04Smrg# (application programs are unlikely to have options which match 390156957a04Smrg# this pattern). 390256957a04Smrg# 390356957a04Smrg# There are only two supported options: --lt-debug and 390456957a04Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 390556957a04Smrg# 390656957a04Smrg# The first argument to this parsing function should be the 390756957a04Smrg# script's $0 value, followed by "$@". 390856957a04Smrglt_option_debug= 390956957a04Smrgfunc_parse_lt_options () 391056957a04Smrg{ 391156957a04Smrg lt_script_arg0=\$0 391256957a04Smrg shift 391356957a04Smrg for lt_opt 391456957a04Smrg do 391556957a04Smrg case \"\$lt_opt\" in 391656957a04Smrg --lt-debug) lt_option_debug=1 ;; 391756957a04Smrg --lt-dump-script) 391856957a04Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 391956957a04Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 392056957a04Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 392156957a04Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 392256957a04Smrg exit 0 392356957a04Smrg ;; 392456957a04Smrg --lt-*) 392556957a04Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 392656957a04Smrg exit 1 392756957a04Smrg ;; 392856957a04Smrg esac 392956957a04Smrg done 393056957a04Smrg 393156957a04Smrg # Print the debug banner immediately: 393256957a04Smrg if test -n \"\$lt_option_debug\"; then 393356957a04Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 393456957a04Smrg fi 393556957a04Smrg} 393656957a04Smrg 393756957a04Smrg# Used when --lt-debug. Prints its arguments to stdout 393856957a04Smrg# (redirection is the responsibility of the caller) 393956957a04Smrgfunc_lt_dump_args () 394056957a04Smrg{ 394156957a04Smrg lt_dump_args_N=1; 394256957a04Smrg for lt_arg 394356957a04Smrg do 394456957a04Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 394556957a04Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 394656957a04Smrg done 394756957a04Smrg} 394856957a04Smrg 394956957a04Smrg# Core function for launching the target application 395056957a04Smrgfunc_exec_program_core () 395156957a04Smrg{ 395265eef222Smrg" 395356957a04Smrg case $host in 395456957a04Smrg # Backslashes separate directories on plain windows 395556957a04Smrg *-*-mingw | *-*-os2* | *-cegcc*) 395656957a04Smrg $ECHO "\ 395756957a04Smrg if test -n \"\$lt_option_debug\"; then 395856957a04Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 395956957a04Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 396056957a04Smrg fi 396156957a04Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 396256957a04Smrg" 396356957a04Smrg ;; 396456957a04Smrg 396556957a04Smrg *) 396656957a04Smrg $ECHO "\ 396756957a04Smrg if test -n \"\$lt_option_debug\"; then 396856957a04Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 396956957a04Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 397056957a04Smrg fi 397156957a04Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 397256957a04Smrg" 397356957a04Smrg ;; 397456957a04Smrg esac 397556957a04Smrg $ECHO "\ 397656957a04Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 397756957a04Smrg exit 1 397856957a04Smrg} 397956957a04Smrg 398056957a04Smrg# A function to encapsulate launching the target application 398156957a04Smrg# Strips options in the --lt-* namespace from \$@ and 398256957a04Smrg# launches target application with the remaining arguments. 398356957a04Smrgfunc_exec_program () 398456957a04Smrg{ 398556957a04Smrg for lt_wr_arg 398656957a04Smrg do 398756957a04Smrg case \$lt_wr_arg in 398856957a04Smrg --lt-*) ;; 398956957a04Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 399056957a04Smrg esac 399156957a04Smrg shift 399256957a04Smrg done 399356957a04Smrg func_exec_program_core \${1+\"\$@\"} 399456957a04Smrg} 399556957a04Smrg 399656957a04Smrg # Parse options 399756957a04Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 3998ef981d24Smrg 399965eef222Smrg # Find the directory that this script lives in. 400056957a04Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 400165eef222Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4002ef981d24Smrg 400365eef222Smrg # Follow symbolic links until we get to the real thisdir. 400456957a04Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 400565eef222Smrg while test -n \"\$file\"; do 400656957a04Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4007ef981d24Smrg 400865eef222Smrg # If there was a directory component, then change thisdir. 400965eef222Smrg if test \"x\$destdir\" != \"x\$file\"; then 401065eef222Smrg case \"\$destdir\" in 401165eef222Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 401265eef222Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 401365eef222Smrg esac 401465eef222Smrg fi 4015ef981d24Smrg 401656957a04Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 401756957a04Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 401865eef222Smrg done 4019ef981d24Smrg 402065eef222Smrg # Usually 'no', except on cygwin/mingw when embedded into 402165eef222Smrg # the cwrapper. 402256957a04Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 402365eef222Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 402465eef222Smrg # special case for '.' 402565eef222Smrg if test \"\$thisdir\" = \".\"; then 402665eef222Smrg thisdir=\`pwd\` 402765eef222Smrg fi 402865eef222Smrg # remove .libs from thisdir 402965eef222Smrg case \"\$thisdir\" in 403056957a04Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 403165eef222Smrg $objdir ) thisdir=. ;; 403265eef222Smrg esac 403365eef222Smrg fi 4034ef981d24Smrg 403565eef222Smrg # Try to get the absolute directory name. 403665eef222Smrg absdir=\`cd \"\$thisdir\" && pwd\` 403765eef222Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 403865eef222Smrg" 4039ef981d24Smrg 404065eef222Smrg if test "$fast_install" = yes; then 404165eef222Smrg $ECHO "\ 404265eef222Smrg program=lt-'$outputname'$exeext 404365eef222Smrg progdir=\"\$thisdir/$objdir\" 4044ef981d24Smrg 404565eef222Smrg if test ! -f \"\$progdir/\$program\" || 404665eef222Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 404765eef222Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4048ef981d24Smrg 404965eef222Smrg file=\"\$\$-\$program\" 4050ef981d24Smrg 405165eef222Smrg if test ! -d \"\$progdir\"; then 405265eef222Smrg $MKDIR \"\$progdir\" 405365eef222Smrg else 405465eef222Smrg $RM \"\$progdir/\$file\" 405565eef222Smrg fi" 4056ef981d24Smrg 405765eef222Smrg $ECHO "\ 4058ef981d24Smrg 405965eef222Smrg # relink executable if necessary 406065eef222Smrg if test -n \"\$relink_command\"; then 406165eef222Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 406265eef222Smrg else 406365eef222Smrg $ECHO \"\$relink_command_output\" >&2 406465eef222Smrg $RM \"\$progdir/\$file\" 406565eef222Smrg exit 1 406665eef222Smrg fi 406765eef222Smrg fi 4068ef981d24Smrg 406965eef222Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 407065eef222Smrg { $RM \"\$progdir/\$program\"; 407165eef222Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 407265eef222Smrg $RM \"\$progdir/\$file\" 407365eef222Smrg fi" 407465eef222Smrg else 407565eef222Smrg $ECHO "\ 407665eef222Smrg program='$outputname' 407765eef222Smrg progdir=\"\$thisdir/$objdir\" 407865eef222Smrg" 407965eef222Smrg fi 4080ef981d24Smrg 408165eef222Smrg $ECHO "\ 4082ef981d24Smrg 408365eef222Smrg if test -f \"\$progdir/\$program\"; then" 4084ef981d24Smrg 4085200d7199Smrg # fixup the dll searchpath if we need to. 4086200d7199Smrg # 4087200d7199Smrg # Fix the DLL searchpath if we need to. Do this before prepending 4088200d7199Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 4089200d7199Smrg # libraries must come first. 4090200d7199Smrg if test -n "$dllsearchpath"; then 4091200d7199Smrg $ECHO "\ 4092200d7199Smrg # Add the dll search path components to the executable PATH 4093200d7199Smrg PATH=$dllsearchpath:\$PATH 4094200d7199Smrg" 4095200d7199Smrg fi 4096200d7199Smrg 409765eef222Smrg # Export our shlibpath_var if we have one. 409865eef222Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 409965eef222Smrg $ECHO "\ 410065eef222Smrg # Add our own library path to $shlibpath_var 410165eef222Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4102ef981d24Smrg 410365eef222Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 410465eef222Smrg # The second colon is a workaround for a bug in BeOS R4 sed 410556957a04Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4106ef981d24Smrg 410765eef222Smrg export $shlibpath_var 410865eef222Smrg" 4109ef981d24Smrg fi 4110ef981d24Smrg 411165eef222Smrg $ECHO "\ 411265eef222Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 411365eef222Smrg # Run the actual program with our arguments. 411456957a04Smrg func_exec_program \${1+\"\$@\"} 411565eef222Smrg fi 411665eef222Smrg else 411765eef222Smrg # The program doesn't exist. 411865eef222Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 411965eef222Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 412056957a04Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 412165eef222Smrg exit 1 412265eef222Smrg fi 412365eef222Smrgfi\ 412465eef222Smrg" 412565eef222Smrg} 4126ef981d24Smrg 4127ef981d24Smrg 412865eef222Smrg# func_emit_cwrapperexe_src 412965eef222Smrg# emit the source code for a wrapper executable on stdout 413065eef222Smrg# Must ONLY be called from within func_mode_link because 413165eef222Smrg# it depends on a number of variable set therein. 413265eef222Smrgfunc_emit_cwrapperexe_src () 413365eef222Smrg{ 413465eef222Smrg cat <<EOF 4135ef981d24Smrg 413665eef222Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 413765eef222Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4138ef981d24Smrg 413965eef222Smrg The $output program cannot be directly executed until all the libtool 414065eef222Smrg libraries that it depends on are installed. 4141ef981d24Smrg 414265eef222Smrg This wrapper executable should never be moved out of the build directory. 414365eef222Smrg If it is, it will not operate correctly. 414465eef222Smrg*/ 414565eef222SmrgEOF 414665eef222Smrg cat <<"EOF" 414756957a04Smrg#ifdef _MSC_VER 414856957a04Smrg# define _CRT_SECURE_NO_DEPRECATE 1 414956957a04Smrg#endif 415065eef222Smrg#include <stdio.h> 415165eef222Smrg#include <stdlib.h> 415265eef222Smrg#ifdef _MSC_VER 415365eef222Smrg# include <direct.h> 415465eef222Smrg# include <process.h> 415565eef222Smrg# include <io.h> 415665eef222Smrg#else 415765eef222Smrg# include <unistd.h> 415865eef222Smrg# include <stdint.h> 415965eef222Smrg# ifdef __CYGWIN__ 416065eef222Smrg# include <io.h> 416165eef222Smrg# endif 416265eef222Smrg#endif 416365eef222Smrg#include <malloc.h> 416465eef222Smrg#include <stdarg.h> 416565eef222Smrg#include <assert.h> 416665eef222Smrg#include <string.h> 416765eef222Smrg#include <ctype.h> 416865eef222Smrg#include <errno.h> 416965eef222Smrg#include <fcntl.h> 417065eef222Smrg#include <sys/stat.h> 417165eef222Smrg 417256957a04Smrg/* declarations of non-ANSI functions */ 417356957a04Smrg#if defined(__MINGW32__) 417456957a04Smrg# ifdef __STRICT_ANSI__ 417556957a04Smrgint _putenv (const char *); 417656957a04Smrg# endif 417756957a04Smrg#elif defined(__CYGWIN__) 417856957a04Smrg# ifdef __STRICT_ANSI__ 417956957a04Smrgchar *realpath (const char *, char *); 418056957a04Smrgint putenv (char *); 418156957a04Smrgint setenv (const char *, const char *, int); 418256957a04Smrg# endif 418356957a04Smrg/* #elif defined (other platforms) ... */ 418456957a04Smrg#endif 418556957a04Smrg 418656957a04Smrg/* portability defines, excluding path handling macros */ 418756957a04Smrg#if defined(_MSC_VER) 418856957a04Smrg# define setmode _setmode 418956957a04Smrg# define stat _stat 419056957a04Smrg# define chmod _chmod 419156957a04Smrg# define getcwd _getcwd 419256957a04Smrg# define putenv _putenv 419356957a04Smrg# define S_IXUSR _S_IEXEC 419456957a04Smrg# ifndef _INTPTR_T_DEFINED 419556957a04Smrg# define _INTPTR_T_DEFINED 419656957a04Smrg# define intptr_t int 419756957a04Smrg# endif 419856957a04Smrg#elif defined(__MINGW32__) 419956957a04Smrg# define setmode _setmode 420056957a04Smrg# define stat _stat 420156957a04Smrg# define chmod _chmod 420256957a04Smrg# define getcwd _getcwd 420356957a04Smrg# define putenv _putenv 420456957a04Smrg#elif defined(__CYGWIN__) 420556957a04Smrg# define HAVE_SETENV 420656957a04Smrg# define FOPEN_WB "wb" 420756957a04Smrg/* #elif defined (other platforms) ... */ 420856957a04Smrg#endif 420956957a04Smrg 421065eef222Smrg#if defined(PATH_MAX) 421165eef222Smrg# define LT_PATHMAX PATH_MAX 421265eef222Smrg#elif defined(MAXPATHLEN) 421365eef222Smrg# define LT_PATHMAX MAXPATHLEN 421465eef222Smrg#else 421565eef222Smrg# define LT_PATHMAX 1024 421665eef222Smrg#endif 421765eef222Smrg 421865eef222Smrg#ifndef S_IXOTH 421965eef222Smrg# define S_IXOTH 0 422065eef222Smrg#endif 422165eef222Smrg#ifndef S_IXGRP 422265eef222Smrg# define S_IXGRP 0 422365eef222Smrg#endif 422465eef222Smrg 422556957a04Smrg/* path handling portability macros */ 422665eef222Smrg#ifndef DIR_SEPARATOR 422765eef222Smrg# define DIR_SEPARATOR '/' 422865eef222Smrg# define PATH_SEPARATOR ':' 422965eef222Smrg#endif 423065eef222Smrg 423165eef222Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 423265eef222Smrg defined (__OS2__) 423365eef222Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 423465eef222Smrg# define FOPEN_WB "wb" 423565eef222Smrg# ifndef DIR_SEPARATOR_2 423665eef222Smrg# define DIR_SEPARATOR_2 '\\' 423765eef222Smrg# endif 423865eef222Smrg# ifndef PATH_SEPARATOR_2 423965eef222Smrg# define PATH_SEPARATOR_2 ';' 424065eef222Smrg# endif 424165eef222Smrg#endif 424265eef222Smrg 424365eef222Smrg#ifndef DIR_SEPARATOR_2 424465eef222Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 424565eef222Smrg#else /* DIR_SEPARATOR_2 */ 424665eef222Smrg# define IS_DIR_SEPARATOR(ch) \ 424765eef222Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 424865eef222Smrg#endif /* DIR_SEPARATOR_2 */ 424965eef222Smrg 425065eef222Smrg#ifndef PATH_SEPARATOR_2 425165eef222Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 425265eef222Smrg#else /* PATH_SEPARATOR_2 */ 425365eef222Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 425465eef222Smrg#endif /* PATH_SEPARATOR_2 */ 425565eef222Smrg 425665eef222Smrg#ifndef FOPEN_WB 425765eef222Smrg# define FOPEN_WB "w" 425865eef222Smrg#endif 425965eef222Smrg#ifndef _O_BINARY 426065eef222Smrg# define _O_BINARY 0 426165eef222Smrg#endif 426265eef222Smrg 426365eef222Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 426465eef222Smrg#define XFREE(stale) do { \ 426565eef222Smrg if (stale) { free ((void *) stale); stale = 0; } \ 426665eef222Smrg} while (0) 426765eef222Smrg 426856957a04Smrg#if defined(LT_DEBUGWRAPPER) 426956957a04Smrgstatic int lt_debug = 1; 427065eef222Smrg#else 427156957a04Smrgstatic int lt_debug = 0; 427265eef222Smrg#endif 427365eef222Smrg 427456957a04Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 427565eef222Smrg 427665eef222Smrgvoid *xmalloc (size_t num); 427765eef222Smrgchar *xstrdup (const char *string); 427865eef222Smrgconst char *base_name (const char *name); 427965eef222Smrgchar *find_executable (const char *wrapper); 428065eef222Smrgchar *chase_symlinks (const char *pathspec); 428165eef222Smrgint make_executable (const char *path); 428265eef222Smrgint check_executable (const char *path); 428365eef222Smrgchar *strendzap (char *str, const char *pat); 428456957a04Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 428556957a04Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 428656957a04Smrgstatic const char *nonnull (const char *s); 428756957a04Smrgstatic const char *nonempty (const char *s); 428865eef222Smrgvoid lt_setenv (const char *name, const char *value); 428965eef222Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 429065eef222Smrgvoid lt_update_exe_path (const char *name, const char *value); 429165eef222Smrgvoid lt_update_lib_path (const char *name, const char *value); 429256957a04Smrgchar **prepare_spawn (char **argv); 429356957a04Smrgvoid lt_dump_script (FILE *f); 429465eef222SmrgEOF 429565eef222Smrg 429665eef222Smrg cat <<EOF 4297200d7199Smrgvolatile const char * MAGIC_EXE = "$magic_exe"; 429865eef222Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 429965eef222SmrgEOF 430065eef222Smrg 430165eef222Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4302200d7199Smrg func_to_host_path "$temp_rpath" 430365eef222Smrg cat <<EOF 4304200d7199Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4305ef981d24SmrgEOF 4306ef981d24Smrg else 430765eef222Smrg cat <<"EOF" 430865eef222Smrgconst char * LIB_PATH_VALUE = ""; 430965eef222SmrgEOF 4310ef981d24Smrg fi 431165eef222Smrg 431265eef222Smrg if test -n "$dllsearchpath"; then 4313200d7199Smrg func_to_host_path "$dllsearchpath:" 431465eef222Smrg cat <<EOF 431565eef222Smrgconst char * EXE_PATH_VARNAME = "PATH"; 4316200d7199Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 431765eef222SmrgEOF 4318ef981d24Smrg else 431965eef222Smrg cat <<"EOF" 432065eef222Smrgconst char * EXE_PATH_VARNAME = ""; 432165eef222Smrgconst char * EXE_PATH_VALUE = ""; 432265eef222SmrgEOF 4323ef981d24Smrg fi 432465eef222Smrg 432565eef222Smrg if test "$fast_install" = yes; then 432665eef222Smrg cat <<EOF 432765eef222Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 432865eef222SmrgEOF 4329ef981d24Smrg else 433065eef222Smrg cat <<EOF 433165eef222Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 433265eef222SmrgEOF 4333ef981d24Smrg fi 4334ef981d24Smrg 4335ef981d24Smrg 433665eef222Smrg cat <<"EOF" 4337ef981d24Smrg 433865eef222Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4339ef981d24Smrg 434065eef222Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 434165eef222Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 434256957a04Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4343ef981d24Smrg 434465eef222Smrgint 434565eef222Smrgmain (int argc, char *argv[]) 434665eef222Smrg{ 434765eef222Smrg char **newargz; 434865eef222Smrg int newargc; 434965eef222Smrg char *tmp_pathspec; 435065eef222Smrg char *actual_cwrapper_path; 435165eef222Smrg char *actual_cwrapper_name; 435265eef222Smrg char *target_name; 435365eef222Smrg char *lt_argv_zero; 435465eef222Smrg intptr_t rval = 127; 4355ef981d24Smrg 435665eef222Smrg int i; 4357ef981d24Smrg 435865eef222Smrg program_name = (char *) xstrdup (base_name (argv[0])); 435956957a04Smrg newargz = XMALLOC (char *, argc + 1); 4360ef981d24Smrg 436156957a04Smrg /* very simple arg parsing; don't want to rely on getopt 436256957a04Smrg * also, copy all non cwrapper options to newargz, except 436356957a04Smrg * argz[0], which is handled differently 436456957a04Smrg */ 436556957a04Smrg newargc=0; 436665eef222Smrg for (i = 1; i < argc; i++) 436765eef222Smrg { 436865eef222Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 436965eef222Smrg { 437065eef222SmrgEOF 437165eef222Smrg case "$host" in 437265eef222Smrg *mingw* | *cygwin* ) 437365eef222Smrg # make stdout use "unix" line endings 437465eef222Smrg echo " setmode(1,_O_BINARY);" 437565eef222Smrg ;; 437665eef222Smrg esac 4377ef981d24Smrg 437865eef222Smrg cat <<"EOF" 437956957a04Smrg lt_dump_script (stdout); 438065eef222Smrg return 0; 438165eef222Smrg } 438256957a04Smrg if (strcmp (argv[i], debug_opt) == 0) 438356957a04Smrg { 438456957a04Smrg lt_debug = 1; 438556957a04Smrg continue; 438656957a04Smrg } 438756957a04Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 438856957a04Smrg { 438956957a04Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 439056957a04Smrg namespace, but it is not one of the ones we know about and 439156957a04Smrg have already dealt with, above (inluding dump-script), then 439256957a04Smrg report an error. Otherwise, targets might begin to believe 439356957a04Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 439456957a04Smrg namespace. The first time any user complains about this, we'll 439556957a04Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 439656957a04Smrg or a configure.ac-settable value. 439756957a04Smrg */ 439856957a04Smrg lt_fatal (__FILE__, __LINE__, 439956957a04Smrg "unrecognized %s option: '%s'", 440056957a04Smrg ltwrapper_option_prefix, argv[i]); 440156957a04Smrg } 440256957a04Smrg /* otherwise ... */ 440356957a04Smrg newargz[++newargc] = xstrdup (argv[i]); 440465eef222Smrg } 440556957a04Smrg newargz[++newargc] = NULL; 440656957a04Smrg 440756957a04SmrgEOF 440856957a04Smrg cat <<EOF 440956957a04Smrg /* The GNU banner must be the first non-error debug message */ 441056957a04Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 441156957a04SmrgEOF 441256957a04Smrg cat <<"EOF" 441356957a04Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 441456957a04Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4415ef981d24Smrg 441665eef222Smrg tmp_pathspec = find_executable (argv[0]); 441765eef222Smrg if (tmp_pathspec == NULL) 441856957a04Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 441956957a04Smrg lt_debugprintf (__FILE__, __LINE__, 442056957a04Smrg "(main) found exe (before symlink chase) at: %s\n", 442156957a04Smrg tmp_pathspec); 442265eef222Smrg 442365eef222Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 442456957a04Smrg lt_debugprintf (__FILE__, __LINE__, 442556957a04Smrg "(main) found exe (after symlink chase) at: %s\n", 442656957a04Smrg actual_cwrapper_path); 442765eef222Smrg XFREE (tmp_pathspec); 442865eef222Smrg 442956957a04Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 443065eef222Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 443165eef222Smrg 443265eef222Smrg /* wrapper name transforms */ 443365eef222Smrg strendzap (actual_cwrapper_name, ".exe"); 443465eef222Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 443565eef222Smrg XFREE (actual_cwrapper_name); 443665eef222Smrg actual_cwrapper_name = tmp_pathspec; 443765eef222Smrg tmp_pathspec = 0; 443865eef222Smrg 443965eef222Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 444065eef222Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 444165eef222Smrg strendzap (target_name, ".exe"); 444265eef222Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 444365eef222Smrg XFREE (target_name); 444465eef222Smrg target_name = tmp_pathspec; 444565eef222Smrg tmp_pathspec = 0; 444665eef222Smrg 444756957a04Smrg lt_debugprintf (__FILE__, __LINE__, 444856957a04Smrg "(main) libtool target name: %s\n", 444956957a04Smrg target_name); 445065eef222SmrgEOF 4451ef981d24Smrg 445265eef222Smrg cat <<EOF 445365eef222Smrg newargz[0] = 445465eef222Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 445565eef222Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 445665eef222Smrg strcpy (newargz[0], actual_cwrapper_path); 445765eef222Smrg strcat (newargz[0], "$objdir"); 445865eef222Smrg strcat (newargz[0], "/"); 445965eef222SmrgEOF 4460ef981d24Smrg 446165eef222Smrg cat <<"EOF" 446265eef222Smrg /* stop here, and copy so we don't have to do this twice */ 446365eef222Smrg tmp_pathspec = xstrdup (newargz[0]); 4464ef981d24Smrg 446565eef222Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 446665eef222Smrg strcat (newargz[0], actual_cwrapper_name); 4467ef981d24Smrg 446865eef222Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 446965eef222Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 447065eef222Smrg XFREE (tmp_pathspec); 447165eef222Smrg tmp_pathspec = NULL; 447265eef222SmrgEOF 4473ef981d24Smrg 447465eef222Smrg case $host_os in 447565eef222Smrg mingw*) 447665eef222Smrg cat <<"EOF" 447765eef222Smrg { 447865eef222Smrg char* p; 447965eef222Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 448065eef222Smrg { 448165eef222Smrg *p = '/'; 448265eef222Smrg } 448365eef222Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 448465eef222Smrg { 448565eef222Smrg *p = '/'; 448665eef222Smrg } 448765eef222Smrg } 448865eef222SmrgEOF 448965eef222Smrg ;; 449065eef222Smrg esac 4491ef981d24Smrg 449265eef222Smrg cat <<"EOF" 449365eef222Smrg XFREE (target_name); 449465eef222Smrg XFREE (actual_cwrapper_path); 449565eef222Smrg XFREE (actual_cwrapper_name); 4496ef981d24Smrg 449765eef222Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 449865eef222Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4499200d7199Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4500200d7199Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4501200d7199Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 4502200d7199Smrg libraries must come first. */ 450365eef222Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4504200d7199Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4505ef981d24Smrg 450656957a04Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 450756957a04Smrg nonnull (lt_argv_zero)); 450865eef222Smrg for (i = 0; i < newargc; i++) 450965eef222Smrg { 451056957a04Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 451156957a04Smrg i, nonnull (newargz[i])); 451265eef222Smrg } 4513ef981d24Smrg 451465eef222SmrgEOF 4515ef981d24Smrg 451665eef222Smrg case $host_os in 451765eef222Smrg mingw*) 451865eef222Smrg cat <<"EOF" 451965eef222Smrg /* execv doesn't actually work on mingw as expected on unix */ 452056957a04Smrg newargz = prepare_spawn (newargz); 452165eef222Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 452265eef222Smrg if (rval == -1) 452365eef222Smrg { 452465eef222Smrg /* failed to start process */ 452556957a04Smrg lt_debugprintf (__FILE__, __LINE__, 452656957a04Smrg "(main) failed to launch target \"%s\": %s\n", 452756957a04Smrg lt_argv_zero, nonnull (strerror (errno))); 452865eef222Smrg return 127; 452965eef222Smrg } 453065eef222Smrg return rval; 453165eef222SmrgEOF 453265eef222Smrg ;; 453365eef222Smrg *) 453465eef222Smrg cat <<"EOF" 453565eef222Smrg execv (lt_argv_zero, newargz); 453665eef222Smrg return rval; /* =127, but avoids unused variable warning */ 453765eef222SmrgEOF 453865eef222Smrg ;; 453965eef222Smrg esac 4540ef981d24Smrg 454165eef222Smrg cat <<"EOF" 454265eef222Smrg} 4543ef981d24Smrg 454465eef222Smrgvoid * 454565eef222Smrgxmalloc (size_t num) 454665eef222Smrg{ 454765eef222Smrg void *p = (void *) malloc (num); 454865eef222Smrg if (!p) 454956957a04Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4550ef981d24Smrg 455165eef222Smrg return p; 455265eef222Smrg} 4553ef981d24Smrg 455465eef222Smrgchar * 455565eef222Smrgxstrdup (const char *string) 455665eef222Smrg{ 455765eef222Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 455865eef222Smrg string) : NULL; 455965eef222Smrg} 4560ef981d24Smrg 456165eef222Smrgconst char * 456265eef222Smrgbase_name (const char *name) 456365eef222Smrg{ 456465eef222Smrg const char *base; 4565ef981d24Smrg 456665eef222Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 456765eef222Smrg /* Skip over the disk name in MSDOS pathnames. */ 456865eef222Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 456965eef222Smrg name += 2; 457065eef222Smrg#endif 4571ef981d24Smrg 457265eef222Smrg for (base = name; *name; name++) 457365eef222Smrg if (IS_DIR_SEPARATOR (*name)) 457465eef222Smrg base = name + 1; 457565eef222Smrg return base; 457665eef222Smrg} 4577ef981d24Smrg 457865eef222Smrgint 457965eef222Smrgcheck_executable (const char *path) 458065eef222Smrg{ 458165eef222Smrg struct stat st; 4582ef981d24Smrg 458356957a04Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 458456957a04Smrg nonempty (path)); 458565eef222Smrg if ((!path) || (!*path)) 458665eef222Smrg return 0; 4587ef981d24Smrg 458865eef222Smrg if ((stat (path, &st) >= 0) 458965eef222Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 459065eef222Smrg return 1; 459165eef222Smrg else 459265eef222Smrg return 0; 459365eef222Smrg} 4594ef981d24Smrg 459565eef222Smrgint 459665eef222Smrgmake_executable (const char *path) 459765eef222Smrg{ 459865eef222Smrg int rval = 0; 459965eef222Smrg struct stat st; 4600ef981d24Smrg 460156957a04Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 460256957a04Smrg nonempty (path)); 460365eef222Smrg if ((!path) || (!*path)) 460465eef222Smrg return 0; 4605ef981d24Smrg 460665eef222Smrg if (stat (path, &st) >= 0) 460765eef222Smrg { 460865eef222Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 460965eef222Smrg } 461065eef222Smrg return rval; 461165eef222Smrg} 4612ef981d24Smrg 461365eef222Smrg/* Searches for the full path of the wrapper. Returns 461465eef222Smrg newly allocated full path name if found, NULL otherwise 461565eef222Smrg Does not chase symlinks, even on platforms that support them. 461665eef222Smrg*/ 461765eef222Smrgchar * 461865eef222Smrgfind_executable (const char *wrapper) 461965eef222Smrg{ 462065eef222Smrg int has_slash = 0; 462165eef222Smrg const char *p; 462265eef222Smrg const char *p_next; 462365eef222Smrg /* static buffer for getcwd */ 462465eef222Smrg char tmp[LT_PATHMAX + 1]; 462565eef222Smrg int tmp_len; 462665eef222Smrg char *concat_name; 4627ef981d24Smrg 462856957a04Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 462956957a04Smrg nonempty (wrapper)); 4630ef981d24Smrg 463165eef222Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 463265eef222Smrg return NULL; 4633ef981d24Smrg 463465eef222Smrg /* Absolute path? */ 463565eef222Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 463665eef222Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 463765eef222Smrg { 463865eef222Smrg concat_name = xstrdup (wrapper); 463965eef222Smrg if (check_executable (concat_name)) 464065eef222Smrg return concat_name; 464165eef222Smrg XFREE (concat_name); 464265eef222Smrg } 464365eef222Smrg else 464465eef222Smrg { 464565eef222Smrg#endif 464665eef222Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 464765eef222Smrg { 464865eef222Smrg concat_name = xstrdup (wrapper); 464965eef222Smrg if (check_executable (concat_name)) 465065eef222Smrg return concat_name; 465165eef222Smrg XFREE (concat_name); 465265eef222Smrg } 465365eef222Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 465465eef222Smrg } 465565eef222Smrg#endif 4656ef981d24Smrg 465765eef222Smrg for (p = wrapper; *p; p++) 465865eef222Smrg if (*p == '/') 465965eef222Smrg { 466065eef222Smrg has_slash = 1; 466165eef222Smrg break; 466265eef222Smrg } 466365eef222Smrg if (!has_slash) 466465eef222Smrg { 466565eef222Smrg /* no slashes; search PATH */ 466665eef222Smrg const char *path = getenv ("PATH"); 466765eef222Smrg if (path != NULL) 466865eef222Smrg { 466965eef222Smrg for (p = path; *p; p = p_next) 467065eef222Smrg { 467165eef222Smrg const char *q; 467265eef222Smrg size_t p_len; 467365eef222Smrg for (q = p; *q; q++) 467465eef222Smrg if (IS_PATH_SEPARATOR (*q)) 467565eef222Smrg break; 467665eef222Smrg p_len = q - p; 467765eef222Smrg p_next = (*q == '\0' ? q : q + 1); 467865eef222Smrg if (p_len == 0) 467965eef222Smrg { 468065eef222Smrg /* empty path: current directory */ 468165eef222Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 468256957a04Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 468356957a04Smrg nonnull (strerror (errno))); 468465eef222Smrg tmp_len = strlen (tmp); 468565eef222Smrg concat_name = 468665eef222Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 468765eef222Smrg memcpy (concat_name, tmp, tmp_len); 468865eef222Smrg concat_name[tmp_len] = '/'; 468965eef222Smrg strcpy (concat_name + tmp_len + 1, wrapper); 469065eef222Smrg } 469165eef222Smrg else 469265eef222Smrg { 469365eef222Smrg concat_name = 469465eef222Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 469565eef222Smrg memcpy (concat_name, p, p_len); 469665eef222Smrg concat_name[p_len] = '/'; 469765eef222Smrg strcpy (concat_name + p_len + 1, wrapper); 469865eef222Smrg } 469965eef222Smrg if (check_executable (concat_name)) 470065eef222Smrg return concat_name; 470165eef222Smrg XFREE (concat_name); 470265eef222Smrg } 470365eef222Smrg } 470465eef222Smrg /* not found in PATH; assume curdir */ 470565eef222Smrg } 470665eef222Smrg /* Relative path | not found in path: prepend cwd */ 470765eef222Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 470856957a04Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 470956957a04Smrg nonnull (strerror (errno))); 471065eef222Smrg tmp_len = strlen (tmp); 471165eef222Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 471265eef222Smrg memcpy (concat_name, tmp, tmp_len); 471365eef222Smrg concat_name[tmp_len] = '/'; 471465eef222Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4715ef981d24Smrg 471665eef222Smrg if (check_executable (concat_name)) 471765eef222Smrg return concat_name; 471865eef222Smrg XFREE (concat_name); 471965eef222Smrg return NULL; 472065eef222Smrg} 4721ef981d24Smrg 472265eef222Smrgchar * 472365eef222Smrgchase_symlinks (const char *pathspec) 472465eef222Smrg{ 472565eef222Smrg#ifndef S_ISLNK 472665eef222Smrg return xstrdup (pathspec); 472765eef222Smrg#else 472865eef222Smrg char buf[LT_PATHMAX]; 472965eef222Smrg struct stat s; 473065eef222Smrg char *tmp_pathspec = xstrdup (pathspec); 473165eef222Smrg char *p; 473265eef222Smrg int has_symlinks = 0; 473365eef222Smrg while (strlen (tmp_pathspec) && !has_symlinks) 473465eef222Smrg { 473556957a04Smrg lt_debugprintf (__FILE__, __LINE__, 473656957a04Smrg "checking path component for symlinks: %s\n", 473756957a04Smrg tmp_pathspec); 473865eef222Smrg if (lstat (tmp_pathspec, &s) == 0) 473965eef222Smrg { 474065eef222Smrg if (S_ISLNK (s.st_mode) != 0) 474165eef222Smrg { 474265eef222Smrg has_symlinks = 1; 474365eef222Smrg break; 474465eef222Smrg } 4745ef981d24Smrg 474665eef222Smrg /* search backwards for last DIR_SEPARATOR */ 474765eef222Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 474865eef222Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 474965eef222Smrg p--; 475065eef222Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 475165eef222Smrg { 475265eef222Smrg /* no more DIR_SEPARATORS left */ 475365eef222Smrg break; 475465eef222Smrg } 475565eef222Smrg *p = '\0'; 475665eef222Smrg } 475765eef222Smrg else 475865eef222Smrg { 475956957a04Smrg lt_fatal (__FILE__, __LINE__, 476056957a04Smrg "error accessing file \"%s\": %s", 476156957a04Smrg tmp_pathspec, nonnull (strerror (errno))); 476265eef222Smrg } 476365eef222Smrg } 476465eef222Smrg XFREE (tmp_pathspec); 4765ef981d24Smrg 476665eef222Smrg if (!has_symlinks) 476765eef222Smrg { 476865eef222Smrg return xstrdup (pathspec); 476965eef222Smrg } 4770ef981d24Smrg 477165eef222Smrg tmp_pathspec = realpath (pathspec, buf); 477265eef222Smrg if (tmp_pathspec == 0) 477365eef222Smrg { 477456957a04Smrg lt_fatal (__FILE__, __LINE__, 477556957a04Smrg "could not follow symlinks for %s", pathspec); 477665eef222Smrg } 477765eef222Smrg return xstrdup (tmp_pathspec); 477865eef222Smrg#endif 477965eef222Smrg} 4780ef981d24Smrg 478165eef222Smrgchar * 478265eef222Smrgstrendzap (char *str, const char *pat) 478365eef222Smrg{ 478465eef222Smrg size_t len, patlen; 4785ef981d24Smrg 478665eef222Smrg assert (str != NULL); 478765eef222Smrg assert (pat != NULL); 4788ef981d24Smrg 478965eef222Smrg len = strlen (str); 479065eef222Smrg patlen = strlen (pat); 4791ef981d24Smrg 479265eef222Smrg if (patlen <= len) 479365eef222Smrg { 479465eef222Smrg str += len - patlen; 479565eef222Smrg if (strcmp (str, pat) == 0) 479665eef222Smrg *str = '\0'; 479765eef222Smrg } 479865eef222Smrg return str; 479965eef222Smrg} 4800ef981d24Smrg 480156957a04Smrgvoid 480256957a04Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 480356957a04Smrg{ 480456957a04Smrg va_list args; 480556957a04Smrg if (lt_debug) 480656957a04Smrg { 480756957a04Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 480856957a04Smrg va_start (args, fmt); 480956957a04Smrg (void) vfprintf (stderr, fmt, args); 481056957a04Smrg va_end (args); 481156957a04Smrg } 481256957a04Smrg} 481356957a04Smrg 481465eef222Smrgstatic void 481556957a04Smrglt_error_core (int exit_status, const char *file, 481656957a04Smrg int line, const char *mode, 481765eef222Smrg const char *message, va_list ap) 481865eef222Smrg{ 481956957a04Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 482065eef222Smrg vfprintf (stderr, message, ap); 482165eef222Smrg fprintf (stderr, ".\n"); 4822ef981d24Smrg 482365eef222Smrg if (exit_status >= 0) 482465eef222Smrg exit (exit_status); 482565eef222Smrg} 4826ef981d24Smrg 482765eef222Smrgvoid 482856957a04Smrglt_fatal (const char *file, int line, const char *message, ...) 482965eef222Smrg{ 483065eef222Smrg va_list ap; 483165eef222Smrg va_start (ap, message); 483256957a04Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 483365eef222Smrg va_end (ap); 483465eef222Smrg} 4835ef981d24Smrg 483656957a04Smrgstatic const char * 483756957a04Smrgnonnull (const char *s) 483856957a04Smrg{ 483956957a04Smrg return s ? s : "(null)"; 484056957a04Smrg} 484156957a04Smrg 484256957a04Smrgstatic const char * 484356957a04Smrgnonempty (const char *s) 484456957a04Smrg{ 484556957a04Smrg return (s && !*s) ? "(empty)" : nonnull (s); 484656957a04Smrg} 484756957a04Smrg 484865eef222Smrgvoid 484965eef222Smrglt_setenv (const char *name, const char *value) 485065eef222Smrg{ 485156957a04Smrg lt_debugprintf (__FILE__, __LINE__, 485256957a04Smrg "(lt_setenv) setting '%s' to '%s'\n", 485356957a04Smrg nonnull (name), nonnull (value)); 485465eef222Smrg { 485565eef222Smrg#ifdef HAVE_SETENV 485665eef222Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 485765eef222Smrg char *str = xstrdup (value); 485865eef222Smrg setenv (name, str, 1); 485965eef222Smrg#else 486065eef222Smrg int len = strlen (name) + 1 + strlen (value) + 1; 486165eef222Smrg char *str = XMALLOC (char, len); 486265eef222Smrg sprintf (str, "%s=%s", name, value); 486365eef222Smrg if (putenv (str) != EXIT_SUCCESS) 486465eef222Smrg { 486565eef222Smrg XFREE (str); 486665eef222Smrg } 486765eef222Smrg#endif 486865eef222Smrg } 486965eef222Smrg} 4870ef981d24Smrg 487165eef222Smrgchar * 487265eef222Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 487365eef222Smrg{ 487465eef222Smrg char *new_value; 487565eef222Smrg if (orig_value && *orig_value) 487665eef222Smrg { 487765eef222Smrg int orig_value_len = strlen (orig_value); 487865eef222Smrg int add_len = strlen (add); 487965eef222Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 488065eef222Smrg if (to_end) 488165eef222Smrg { 488265eef222Smrg strcpy (new_value, orig_value); 488365eef222Smrg strcpy (new_value + orig_value_len, add); 488465eef222Smrg } 488565eef222Smrg else 488665eef222Smrg { 488765eef222Smrg strcpy (new_value, add); 488865eef222Smrg strcpy (new_value + add_len, orig_value); 488965eef222Smrg } 489065eef222Smrg } 489165eef222Smrg else 489265eef222Smrg { 489365eef222Smrg new_value = xstrdup (add); 489465eef222Smrg } 489565eef222Smrg return new_value; 489665eef222Smrg} 4897ef981d24Smrg 489865eef222Smrgvoid 489965eef222Smrglt_update_exe_path (const char *name, const char *value) 490065eef222Smrg{ 490156957a04Smrg lt_debugprintf (__FILE__, __LINE__, 490256957a04Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 490356957a04Smrg nonnull (name), nonnull (value)); 4904ef981d24Smrg 490565eef222Smrg if (name && *name && value && *value) 490665eef222Smrg { 490765eef222Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 490865eef222Smrg /* some systems can't cope with a ':'-terminated path #' */ 490965eef222Smrg int len = strlen (new_value); 491065eef222Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 491165eef222Smrg { 491265eef222Smrg new_value[len-1] = '\0'; 491365eef222Smrg } 491465eef222Smrg lt_setenv (name, new_value); 491565eef222Smrg XFREE (new_value); 491665eef222Smrg } 491765eef222Smrg} 4918ef981d24Smrg 491965eef222Smrgvoid 492065eef222Smrglt_update_lib_path (const char *name, const char *value) 492165eef222Smrg{ 492256957a04Smrg lt_debugprintf (__FILE__, __LINE__, 492356957a04Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 492456957a04Smrg nonnull (name), nonnull (value)); 4925ef981d24Smrg 492665eef222Smrg if (name && *name && value && *value) 492765eef222Smrg { 492865eef222Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 492965eef222Smrg lt_setenv (name, new_value); 493065eef222Smrg XFREE (new_value); 493165eef222Smrg } 493265eef222Smrg} 4933ef981d24Smrg 493456957a04SmrgEOF 493556957a04Smrg case $host_os in 493656957a04Smrg mingw*) 493756957a04Smrg cat <<"EOF" 493856957a04Smrg 493956957a04Smrg/* Prepares an argument vector before calling spawn(). 494056957a04Smrg Note that spawn() does not by itself call the command interpreter 494156957a04Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 494256957a04Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 494356957a04Smrg GetVersionEx(&v); 494456957a04Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 494556957a04Smrg }) ? "cmd.exe" : "command.com"). 494656957a04Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 494756957a04Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 494856957a04Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 494956957a04Smrg special way: 495056957a04Smrg - Space and tab are interpreted as delimiters. They are not treated as 495156957a04Smrg delimiters if they are surrounded by double quotes: "...". 495256957a04Smrg - Unescaped double quotes are removed from the input. Their only effect is 495356957a04Smrg that within double quotes, space and tab are treated like normal 495456957a04Smrg characters. 495556957a04Smrg - Backslashes not followed by double quotes are not special. 495656957a04Smrg - But 2*n+1 backslashes followed by a double quote become 495756957a04Smrg n backslashes followed by a double quote (n >= 0): 495856957a04Smrg \" -> " 495956957a04Smrg \\\" -> \" 496056957a04Smrg \\\\\" -> \\" 496156957a04Smrg */ 496256957a04Smrg#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" 496356957a04Smrg#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" 496456957a04Smrgchar ** 496556957a04Smrgprepare_spawn (char **argv) 496656957a04Smrg{ 496756957a04Smrg size_t argc; 496856957a04Smrg char **new_argv; 496956957a04Smrg size_t i; 497056957a04Smrg 497156957a04Smrg /* Count number of arguments. */ 497256957a04Smrg for (argc = 0; argv[argc] != NULL; argc++) 497356957a04Smrg ; 497456957a04Smrg 497556957a04Smrg /* Allocate new argument vector. */ 497656957a04Smrg new_argv = XMALLOC (char *, argc + 1); 497756957a04Smrg 497856957a04Smrg /* Put quoted arguments into the new argument vector. */ 497956957a04Smrg for (i = 0; i < argc; i++) 498056957a04Smrg { 498156957a04Smrg const char *string = argv[i]; 498256957a04Smrg 498356957a04Smrg if (string[0] == '\0') 498456957a04Smrg new_argv[i] = xstrdup ("\"\""); 498556957a04Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 498656957a04Smrg { 498756957a04Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 498856957a04Smrg size_t length; 498956957a04Smrg unsigned int backslashes; 499056957a04Smrg const char *s; 499156957a04Smrg char *quoted_string; 499256957a04Smrg char *p; 499356957a04Smrg 499456957a04Smrg length = 0; 499556957a04Smrg backslashes = 0; 499656957a04Smrg if (quote_around) 499756957a04Smrg length++; 499856957a04Smrg for (s = string; *s != '\0'; s++) 499956957a04Smrg { 500056957a04Smrg char c = *s; 500156957a04Smrg if (c == '"') 500256957a04Smrg length += backslashes + 1; 500356957a04Smrg length++; 500456957a04Smrg if (c == '\\') 500556957a04Smrg backslashes++; 500656957a04Smrg else 500756957a04Smrg backslashes = 0; 500856957a04Smrg } 500956957a04Smrg if (quote_around) 501056957a04Smrg length += backslashes + 1; 501156957a04Smrg 501256957a04Smrg quoted_string = XMALLOC (char, length + 1); 501356957a04Smrg 501456957a04Smrg p = quoted_string; 501556957a04Smrg backslashes = 0; 501656957a04Smrg if (quote_around) 501756957a04Smrg *p++ = '"'; 501856957a04Smrg for (s = string; *s != '\0'; s++) 501956957a04Smrg { 502056957a04Smrg char c = *s; 502156957a04Smrg if (c == '"') 502256957a04Smrg { 502356957a04Smrg unsigned int j; 502456957a04Smrg for (j = backslashes + 1; j > 0; j--) 502556957a04Smrg *p++ = '\\'; 502656957a04Smrg } 502756957a04Smrg *p++ = c; 502856957a04Smrg if (c == '\\') 502956957a04Smrg backslashes++; 503056957a04Smrg else 503156957a04Smrg backslashes = 0; 503256957a04Smrg } 503356957a04Smrg if (quote_around) 503456957a04Smrg { 503556957a04Smrg unsigned int j; 503656957a04Smrg for (j = backslashes; j > 0; j--) 503756957a04Smrg *p++ = '\\'; 503856957a04Smrg *p++ = '"'; 503956957a04Smrg } 504056957a04Smrg *p = '\0'; 504156957a04Smrg 504256957a04Smrg new_argv[i] = quoted_string; 504356957a04Smrg } 504456957a04Smrg else 504556957a04Smrg new_argv[i] = (char *) string; 504656957a04Smrg } 504756957a04Smrg new_argv[argc] = NULL; 504856957a04Smrg 504956957a04Smrg return new_argv; 505056957a04Smrg} 505156957a04SmrgEOF 505256957a04Smrg ;; 505356957a04Smrg esac 505456957a04Smrg 505556957a04Smrg cat <<"EOF" 505656957a04Smrgvoid lt_dump_script (FILE* f) 505756957a04Smrg{ 505856957a04SmrgEOF 505956957a04Smrg func_emit_wrapper yes | 506056957a04Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 506156957a04Smrg -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 5062ef981d24Smrg 506356957a04Smrg cat <<"EOF" 506456957a04Smrg} 506565eef222SmrgEOF 506665eef222Smrg} 506765eef222Smrg# end: func_emit_cwrapperexe_src 5068ef981d24Smrg 506956957a04Smrg# func_win32_import_lib_p ARG 507056957a04Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 507156957a04Smrgfunc_win32_import_lib_p () 507256957a04Smrg{ 507356957a04Smrg $opt_debug 507456957a04Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 507556957a04Smrg *import*) : ;; 507656957a04Smrg *) false ;; 507756957a04Smrg esac 507856957a04Smrg} 507956957a04Smrg 508065eef222Smrg# func_mode_link arg... 508165eef222Smrgfunc_mode_link () 508265eef222Smrg{ 508365eef222Smrg $opt_debug 508465eef222Smrg case $host in 508565eef222Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 508665eef222Smrg # It is impossible to link a dll without this setting, and 508765eef222Smrg # we shouldn't force the makefile maintainer to figure out 508865eef222Smrg # which system we are compiling for in order to pass an extra 508965eef222Smrg # flag for every libtool invocation. 509065eef222Smrg # allow_undefined=no 5091ef981d24Smrg 509265eef222Smrg # FIXME: Unfortunately, there are problems with the above when trying 509365eef222Smrg # to make a dll which has undefined symbols, in which case not 509465eef222Smrg # even a static library is built. For now, we need to specify 509565eef222Smrg # -no-undefined on the libtool link line when we can be certain 509665eef222Smrg # that all symbols are satisfied, otherwise we get a static library. 509765eef222Smrg allow_undefined=yes 509865eef222Smrg ;; 509965eef222Smrg *) 510065eef222Smrg allow_undefined=yes 510165eef222Smrg ;; 510265eef222Smrg esac 510365eef222Smrg libtool_args=$nonopt 510465eef222Smrg base_compile="$nonopt $@" 510565eef222Smrg compile_command=$nonopt 510665eef222Smrg finalize_command=$nonopt 5107ef981d24Smrg 510865eef222Smrg compile_rpath= 510965eef222Smrg finalize_rpath= 511065eef222Smrg compile_shlibpath= 511165eef222Smrg finalize_shlibpath= 511265eef222Smrg convenience= 511365eef222Smrg old_convenience= 511465eef222Smrg deplibs= 511565eef222Smrg old_deplibs= 511665eef222Smrg compiler_flags= 511765eef222Smrg linker_flags= 511865eef222Smrg dllsearchpath= 511965eef222Smrg lib_search_path=`pwd` 512065eef222Smrg inst_prefix_dir= 512165eef222Smrg new_inherited_linker_flags= 5122ef981d24Smrg 512365eef222Smrg avoid_version=no 512456957a04Smrg bindir= 512565eef222Smrg dlfiles= 512665eef222Smrg dlprefiles= 512765eef222Smrg dlself=no 512865eef222Smrg export_dynamic=no 512965eef222Smrg export_symbols= 513065eef222Smrg export_symbols_regex= 513165eef222Smrg generated= 513265eef222Smrg libobjs= 513365eef222Smrg ltlibs= 513465eef222Smrg module=no 513565eef222Smrg no_install=no 513665eef222Smrg objs= 513765eef222Smrg non_pic_objects= 513865eef222Smrg precious_files_regex= 513965eef222Smrg prefer_static_libs=no 514065eef222Smrg preload=no 514165eef222Smrg prev= 514265eef222Smrg prevarg= 514365eef222Smrg release= 514465eef222Smrg rpath= 514565eef222Smrg xrpath= 514665eef222Smrg perm_rpath= 514765eef222Smrg temp_rpath= 514865eef222Smrg thread_safe=no 514965eef222Smrg vinfo= 515065eef222Smrg vinfo_number=no 515165eef222Smrg weak_libs= 515265eef222Smrg single_module="${wl}-single_module" 515365eef222Smrg func_infer_tag $base_compile 5154ef981d24Smrg 515565eef222Smrg # We need to know -static, to get the right output filenames. 515665eef222Smrg for arg 515765eef222Smrg do 515865eef222Smrg case $arg in 515965eef222Smrg -shared) 516065eef222Smrg test "$build_libtool_libs" != yes && \ 516165eef222Smrg func_fatal_configuration "can not build a shared library" 516265eef222Smrg build_old_libs=no 516365eef222Smrg break 516465eef222Smrg ;; 516565eef222Smrg -all-static | -static | -static-libtool-libs) 516665eef222Smrg case $arg in 516765eef222Smrg -all-static) 516865eef222Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 516965eef222Smrg func_warning "complete static linking is impossible in this configuration" 5170ef981d24Smrg fi 517165eef222Smrg if test -n "$link_static_flag"; then 517265eef222Smrg dlopen_self=$dlopen_self_static 5173ef981d24Smrg fi 517465eef222Smrg prefer_static_libs=yes 5175ef981d24Smrg ;; 517665eef222Smrg -static) 517765eef222Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 517865eef222Smrg dlopen_self=$dlopen_self_static 517965eef222Smrg fi 518065eef222Smrg prefer_static_libs=built 518165eef222Smrg ;; 518265eef222Smrg -static-libtool-libs) 518365eef222Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 518465eef222Smrg dlopen_self=$dlopen_self_static 518565eef222Smrg fi 518665eef222Smrg prefer_static_libs=yes 5187ef981d24Smrg ;; 5188ef981d24Smrg esac 518965eef222Smrg build_libtool_libs=no 519065eef222Smrg build_old_libs=yes 519165eef222Smrg break 519265eef222Smrg ;; 519365eef222Smrg esac 519465eef222Smrg done 5195ef981d24Smrg 519665eef222Smrg # See if our shared archives depend on static archives. 519765eef222Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5198ef981d24Smrg 519965eef222Smrg # Go through the arguments, transforming them on the way. 520065eef222Smrg while test "$#" -gt 0; do 520165eef222Smrg arg="$1" 520265eef222Smrg shift 520365eef222Smrg func_quote_for_eval "$arg" 520465eef222Smrg qarg=$func_quote_for_eval_unquoted_result 520565eef222Smrg func_append libtool_args " $func_quote_for_eval_result" 5206ef981d24Smrg 520765eef222Smrg # If the previous option needs an argument, assign it. 520865eef222Smrg if test -n "$prev"; then 520965eef222Smrg case $prev in 521065eef222Smrg output) 521165eef222Smrg func_append compile_command " @OUTPUT@" 521265eef222Smrg func_append finalize_command " @OUTPUT@" 521365eef222Smrg ;; 521465eef222Smrg esac 5215ef981d24Smrg 521665eef222Smrg case $prev in 521756957a04Smrg bindir) 521856957a04Smrg bindir="$arg" 521956957a04Smrg prev= 522056957a04Smrg continue 522156957a04Smrg ;; 522265eef222Smrg dlfiles|dlprefiles) 522365eef222Smrg if test "$preload" = no; then 522465eef222Smrg # Add the symbol object into the linking commands. 522565eef222Smrg func_append compile_command " @SYMFILE@" 522665eef222Smrg func_append finalize_command " @SYMFILE@" 522765eef222Smrg preload=yes 522865eef222Smrg fi 522965eef222Smrg case $arg in 523065eef222Smrg *.la | *.lo) ;; # We handle these cases below. 523165eef222Smrg force) 523265eef222Smrg if test "$dlself" = no; then 523365eef222Smrg dlself=needless 523465eef222Smrg export_dynamic=yes 523565eef222Smrg fi 523665eef222Smrg prev= 523765eef222Smrg continue 523865eef222Smrg ;; 523965eef222Smrg self) 524065eef222Smrg if test "$prev" = dlprefiles; then 524165eef222Smrg dlself=yes 524265eef222Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 524365eef222Smrg dlself=yes 524465eef222Smrg else 524565eef222Smrg dlself=needless 524665eef222Smrg export_dynamic=yes 524765eef222Smrg fi 524865eef222Smrg prev= 524965eef222Smrg continue 5250ef981d24Smrg ;; 5251ef981d24Smrg *) 525265eef222Smrg if test "$prev" = dlfiles; then 5253200d7199Smrg func_append dlfiles " $arg" 525465eef222Smrg else 5255200d7199Smrg func_append dlprefiles " $arg" 525665eef222Smrg fi 525765eef222Smrg prev= 525865eef222Smrg continue 5259ef981d24Smrg ;; 5260ef981d24Smrg esac 526165eef222Smrg ;; 526265eef222Smrg expsyms) 526365eef222Smrg export_symbols="$arg" 526465eef222Smrg test -f "$arg" \ 526565eef222Smrg || func_fatal_error "symbol file \`$arg' does not exist" 526665eef222Smrg prev= 526765eef222Smrg continue 526865eef222Smrg ;; 526965eef222Smrg expsyms_regex) 527065eef222Smrg export_symbols_regex="$arg" 527165eef222Smrg prev= 527265eef222Smrg continue 527365eef222Smrg ;; 527465eef222Smrg framework) 527565eef222Smrg case $host in 527665eef222Smrg *-*-darwin*) 527765eef222Smrg case "$deplibs " in 527865eef222Smrg *" $qarg.ltframework "*) ;; 5279200d7199Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 528065eef222Smrg ;; 528165eef222Smrg esac 528265eef222Smrg ;; 528365eef222Smrg esac 528465eef222Smrg prev= 528565eef222Smrg continue 528665eef222Smrg ;; 528765eef222Smrg inst_prefix) 528865eef222Smrg inst_prefix_dir="$arg" 528965eef222Smrg prev= 529065eef222Smrg continue 529165eef222Smrg ;; 529265eef222Smrg objectlist) 529365eef222Smrg if test -f "$arg"; then 529465eef222Smrg save_arg=$arg 529565eef222Smrg moreargs= 529665eef222Smrg for fil in `cat "$save_arg"` 529765eef222Smrg do 5298200d7199Smrg# func_append moreargs " $fil" 529965eef222Smrg arg=$fil 530065eef222Smrg # A libtool-controlled object. 5301ef981d24Smrg 530265eef222Smrg # Check to see that this really is a libtool object. 530365eef222Smrg if func_lalib_unsafe_p "$arg"; then 530465eef222Smrg pic_object= 530565eef222Smrg non_pic_object= 5306ef981d24Smrg 530765eef222Smrg # Read the .lo file 530865eef222Smrg func_source "$arg" 5309ef981d24Smrg 531065eef222Smrg if test -z "$pic_object" || 531165eef222Smrg test -z "$non_pic_object" || 531265eef222Smrg test "$pic_object" = none && 531365eef222Smrg test "$non_pic_object" = none; then 531465eef222Smrg func_fatal_error "cannot find name of object for \`$arg'" 531565eef222Smrg fi 5316ef981d24Smrg 531765eef222Smrg # Extract subdirectory from the argument. 531865eef222Smrg func_dirname "$arg" "/" "" 531965eef222Smrg xdir="$func_dirname_result" 5320ef981d24Smrg 532165eef222Smrg if test "$pic_object" != none; then 532265eef222Smrg # Prepend the subdirectory the object is found in. 532365eef222Smrg pic_object="$xdir$pic_object" 5324ef981d24Smrg 532565eef222Smrg if test "$prev" = dlfiles; then 532665eef222Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5327200d7199Smrg func_append dlfiles " $pic_object" 532865eef222Smrg prev= 532965eef222Smrg continue 533065eef222Smrg else 533165eef222Smrg # If libtool objects are unsupported, then we need to preload. 533265eef222Smrg prev=dlprefiles 533365eef222Smrg fi 533465eef222Smrg fi 5335ef981d24Smrg 533665eef222Smrg # CHECK ME: I think I busted this. -Ossama 533765eef222Smrg if test "$prev" = dlprefiles; then 533865eef222Smrg # Preload the old-style object. 5339200d7199Smrg func_append dlprefiles " $pic_object" 534065eef222Smrg prev= 534165eef222Smrg fi 5342ef981d24Smrg 534365eef222Smrg # A PIC object. 534465eef222Smrg func_append libobjs " $pic_object" 534565eef222Smrg arg="$pic_object" 534665eef222Smrg fi 5347ef981d24Smrg 534865eef222Smrg # Non-PIC object. 534965eef222Smrg if test "$non_pic_object" != none; then 535065eef222Smrg # Prepend the subdirectory the object is found in. 535165eef222Smrg non_pic_object="$xdir$non_pic_object" 5352ef981d24Smrg 535365eef222Smrg # A standard non-PIC object 535465eef222Smrg func_append non_pic_objects " $non_pic_object" 535565eef222Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 535665eef222Smrg arg="$non_pic_object" 535765eef222Smrg fi 535865eef222Smrg else 535965eef222Smrg # If the PIC object exists, use it instead. 536065eef222Smrg # $xdir was prepended to $pic_object above. 536165eef222Smrg non_pic_object="$pic_object" 536265eef222Smrg func_append non_pic_objects " $non_pic_object" 536365eef222Smrg fi 536465eef222Smrg else 536565eef222Smrg # Only an error if not doing a dry-run. 536665eef222Smrg if $opt_dry_run; then 536765eef222Smrg # Extract subdirectory from the argument. 536865eef222Smrg func_dirname "$arg" "/" "" 536965eef222Smrg xdir="$func_dirname_result" 537065eef222Smrg 537165eef222Smrg func_lo2o "$arg" 537265eef222Smrg pic_object=$xdir$objdir/$func_lo2o_result 537365eef222Smrg non_pic_object=$xdir$func_lo2o_result 537465eef222Smrg func_append libobjs " $pic_object" 537565eef222Smrg func_append non_pic_objects " $non_pic_object" 537665eef222Smrg else 537765eef222Smrg func_fatal_error "\`$arg' is not a valid libtool object" 537865eef222Smrg fi 537965eef222Smrg fi 538065eef222Smrg done 538165eef222Smrg else 538265eef222Smrg func_fatal_error "link input file \`$arg' does not exist" 538365eef222Smrg fi 538465eef222Smrg arg=$save_arg 538565eef222Smrg prev= 538665eef222Smrg continue 538765eef222Smrg ;; 538865eef222Smrg precious_regex) 538965eef222Smrg precious_files_regex="$arg" 539065eef222Smrg prev= 539165eef222Smrg continue 539265eef222Smrg ;; 539365eef222Smrg release) 539465eef222Smrg release="-$arg" 539565eef222Smrg prev= 539665eef222Smrg continue 539765eef222Smrg ;; 539865eef222Smrg rpath | xrpath) 539965eef222Smrg # We need an absolute path. 540065eef222Smrg case $arg in 540165eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 540265eef222Smrg *) 540365eef222Smrg func_fatal_error "only absolute run-paths are allowed" 540465eef222Smrg ;; 540565eef222Smrg esac 540665eef222Smrg if test "$prev" = rpath; then 540765eef222Smrg case "$rpath " in 540865eef222Smrg *" $arg "*) ;; 5409200d7199Smrg *) func_append rpath " $arg" ;; 541065eef222Smrg esac 541165eef222Smrg else 541265eef222Smrg case "$xrpath " in 541365eef222Smrg *" $arg "*) ;; 5414200d7199Smrg *) func_append xrpath " $arg" ;; 541565eef222Smrg esac 541665eef222Smrg fi 541765eef222Smrg prev= 541865eef222Smrg continue 541965eef222Smrg ;; 542065eef222Smrg shrext) 542165eef222Smrg shrext_cmds="$arg" 542265eef222Smrg prev= 542365eef222Smrg continue 542465eef222Smrg ;; 542565eef222Smrg weak) 5426200d7199Smrg func_append weak_libs " $arg" 542765eef222Smrg prev= 542865eef222Smrg continue 542965eef222Smrg ;; 543065eef222Smrg xcclinker) 5431200d7199Smrg func_append linker_flags " $qarg" 5432200d7199Smrg func_append compiler_flags " $qarg" 543365eef222Smrg prev= 543465eef222Smrg func_append compile_command " $qarg" 543565eef222Smrg func_append finalize_command " $qarg" 543665eef222Smrg continue 543765eef222Smrg ;; 543865eef222Smrg xcompiler) 5439200d7199Smrg func_append compiler_flags " $qarg" 544065eef222Smrg prev= 544165eef222Smrg func_append compile_command " $qarg" 544265eef222Smrg func_append finalize_command " $qarg" 544365eef222Smrg continue 544465eef222Smrg ;; 544565eef222Smrg xlinker) 5446200d7199Smrg func_append linker_flags " $qarg" 5447200d7199Smrg func_append compiler_flags " $wl$qarg" 544865eef222Smrg prev= 544965eef222Smrg func_append compile_command " $wl$qarg" 545065eef222Smrg func_append finalize_command " $wl$qarg" 545165eef222Smrg continue 545265eef222Smrg ;; 545365eef222Smrg *) 545465eef222Smrg eval "$prev=\"\$arg\"" 545565eef222Smrg prev= 545665eef222Smrg continue 545765eef222Smrg ;; 5458ef981d24Smrg esac 545965eef222Smrg fi # test -n "$prev" 5460ef981d24Smrg 546165eef222Smrg prevarg="$arg" 5462ef981d24Smrg 546365eef222Smrg case $arg in 546465eef222Smrg -all-static) 546565eef222Smrg if test -n "$link_static_flag"; then 546665eef222Smrg # See comment for -static flag below, for more details. 546765eef222Smrg func_append compile_command " $link_static_flag" 546865eef222Smrg func_append finalize_command " $link_static_flag" 546965eef222Smrg fi 547065eef222Smrg continue 547165eef222Smrg ;; 5472ef981d24Smrg 547365eef222Smrg -allow-undefined) 547465eef222Smrg # FIXME: remove this flag sometime in the future. 547565eef222Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 547665eef222Smrg ;; 5477ef981d24Smrg 547865eef222Smrg -avoid-version) 547965eef222Smrg avoid_version=yes 548065eef222Smrg continue 548165eef222Smrg ;; 5482ef981d24Smrg 548356957a04Smrg -bindir) 548456957a04Smrg prev=bindir 548556957a04Smrg continue 548656957a04Smrg ;; 548756957a04Smrg 548865eef222Smrg -dlopen) 548965eef222Smrg prev=dlfiles 549065eef222Smrg continue 549165eef222Smrg ;; 5492ef981d24Smrg 549365eef222Smrg -dlpreopen) 549465eef222Smrg prev=dlprefiles 549565eef222Smrg continue 549665eef222Smrg ;; 5497ef981d24Smrg 549865eef222Smrg -export-dynamic) 549965eef222Smrg export_dynamic=yes 550065eef222Smrg continue 550165eef222Smrg ;; 5502ef981d24Smrg 550365eef222Smrg -export-symbols | -export-symbols-regex) 550465eef222Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 550565eef222Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 550665eef222Smrg fi 550765eef222Smrg if test "X$arg" = "X-export-symbols"; then 550865eef222Smrg prev=expsyms 550965eef222Smrg else 551065eef222Smrg prev=expsyms_regex 551165eef222Smrg fi 551265eef222Smrg continue 551365eef222Smrg ;; 5514ef981d24Smrg 551565eef222Smrg -framework) 551665eef222Smrg prev=framework 551765eef222Smrg continue 551865eef222Smrg ;; 5519ef981d24Smrg 552065eef222Smrg -inst-prefix-dir) 552165eef222Smrg prev=inst_prefix 552265eef222Smrg continue 552365eef222Smrg ;; 5524ef981d24Smrg 552565eef222Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 552665eef222Smrg # so, if we see these flags be careful not to treat them like -L 552765eef222Smrg -L[A-Z][A-Z]*:*) 552865eef222Smrg case $with_gcc/$host in 552965eef222Smrg no/*-*-irix* | /*-*-irix*) 553065eef222Smrg func_append compile_command " $arg" 553165eef222Smrg func_append finalize_command " $arg" 553265eef222Smrg ;; 553365eef222Smrg esac 553465eef222Smrg continue 553565eef222Smrg ;; 5536ef981d24Smrg 553765eef222Smrg -L*) 5538200d7199Smrg func_stripname "-L" '' "$arg" 5539200d7199Smrg if test -z "$func_stripname_result"; then 554065eef222Smrg if test "$#" -gt 0; then 554165eef222Smrg func_fatal_error "require no space between \`-L' and \`$1'" 554265eef222Smrg else 554365eef222Smrg func_fatal_error "need path for \`-L' option" 554465eef222Smrg fi 554565eef222Smrg fi 5546200d7199Smrg func_resolve_sysroot "$func_stripname_result" 5547200d7199Smrg dir=$func_resolve_sysroot_result 554865eef222Smrg # We need an absolute path. 554965eef222Smrg case $dir in 555065eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 555165eef222Smrg *) 555265eef222Smrg absdir=`cd "$dir" && pwd` 555365eef222Smrg test -z "$absdir" && \ 555465eef222Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 555565eef222Smrg dir="$absdir" 555665eef222Smrg ;; 555765eef222Smrg esac 555865eef222Smrg case "$deplibs " in 5559200d7199Smrg *" -L$dir "* | *" $arg "*) 5560200d7199Smrg # Will only happen for absolute or sysroot arguments 5561200d7199Smrg ;; 556265eef222Smrg *) 5563200d7199Smrg # Preserve sysroot, but never include relative directories 5564200d7199Smrg case $dir in 5565200d7199Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5566200d7199Smrg *) func_append deplibs " -L$dir" ;; 5567200d7199Smrg esac 5568200d7199Smrg func_append lib_search_path " $dir" 556965eef222Smrg ;; 557065eef222Smrg esac 557165eef222Smrg case $host in 557265eef222Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 557356957a04Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 557465eef222Smrg case :$dllsearchpath: in 557565eef222Smrg *":$dir:"*) ;; 557665eef222Smrg ::) dllsearchpath=$dir;; 5577200d7199Smrg *) func_append dllsearchpath ":$dir";; 557865eef222Smrg esac 557965eef222Smrg case :$dllsearchpath: in 558065eef222Smrg *":$testbindir:"*) ;; 558165eef222Smrg ::) dllsearchpath=$testbindir;; 5582200d7199Smrg *) func_append dllsearchpath ":$testbindir";; 558365eef222Smrg esac 558465eef222Smrg ;; 558565eef222Smrg esac 558665eef222Smrg continue 558765eef222Smrg ;; 5588ef981d24Smrg 558965eef222Smrg -l*) 559065eef222Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 559165eef222Smrg case $host in 559256957a04Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 559365eef222Smrg # These systems don't actually have a C or math library (as such) 559465eef222Smrg continue 559565eef222Smrg ;; 559665eef222Smrg *-*-os2*) 559765eef222Smrg # These systems don't actually have a C library (as such) 559865eef222Smrg test "X$arg" = "X-lc" && continue 559965eef222Smrg ;; 560065eef222Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 560165eef222Smrg # Do not include libc due to us having libc/libc_r. 560265eef222Smrg test "X$arg" = "X-lc" && continue 560365eef222Smrg ;; 560465eef222Smrg *-*-rhapsody* | *-*-darwin1.[012]) 560565eef222Smrg # Rhapsody C and math libraries are in the System framework 5606200d7199Smrg func_append deplibs " System.ltframework" 560765eef222Smrg continue 560865eef222Smrg ;; 560965eef222Smrg *-*-sco3.2v5* | *-*-sco5v6*) 561065eef222Smrg # Causes problems with __ctype 561165eef222Smrg test "X$arg" = "X-lc" && continue 561265eef222Smrg ;; 561365eef222Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 561465eef222Smrg # Compiler inserts libc in the correct place for threads to work 561565eef222Smrg test "X$arg" = "X-lc" && continue 561665eef222Smrg ;; 561765eef222Smrg esac 561865eef222Smrg elif test "X$arg" = "X-lc_r"; then 561965eef222Smrg case $host in 562065eef222Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 562165eef222Smrg # Do not include libc_r directly, use -pthread flag. 562265eef222Smrg continue 562365eef222Smrg ;; 562465eef222Smrg esac 562565eef222Smrg fi 5626200d7199Smrg func_append deplibs " $arg" 562765eef222Smrg continue 562865eef222Smrg ;; 5629ef981d24Smrg 563065eef222Smrg -module) 563165eef222Smrg module=yes 563265eef222Smrg continue 563365eef222Smrg ;; 5634ef981d24Smrg 563565eef222Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 563665eef222Smrg # classes, name mangling, and exception handling. 563765eef222Smrg # Darwin uses the -arch flag to determine output architecture. 5638200d7199Smrg -model|-arch|-isysroot|--sysroot) 5639200d7199Smrg func_append compiler_flags " $arg" 564065eef222Smrg func_append compile_command " $arg" 564165eef222Smrg func_append finalize_command " $arg" 564265eef222Smrg prev=xcompiler 564365eef222Smrg continue 564465eef222Smrg ;; 5645ef981d24Smrg 564665eef222Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5647200d7199Smrg func_append compiler_flags " $arg" 564865eef222Smrg func_append compile_command " $arg" 564965eef222Smrg func_append finalize_command " $arg" 565065eef222Smrg case "$new_inherited_linker_flags " in 565165eef222Smrg *" $arg "*) ;; 5652200d7199Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 565365eef222Smrg esac 565465eef222Smrg continue 565565eef222Smrg ;; 5656ef981d24Smrg 565765eef222Smrg -multi_module) 565865eef222Smrg single_module="${wl}-multi_module" 565965eef222Smrg continue 566065eef222Smrg ;; 5661ef981d24Smrg 566265eef222Smrg -no-fast-install) 566365eef222Smrg fast_install=no 566465eef222Smrg continue 566565eef222Smrg ;; 5666ef981d24Smrg 566765eef222Smrg -no-install) 566865eef222Smrg case $host in 566965eef222Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 567065eef222Smrg # The PATH hackery in wrapper scripts is required on Windows 567165eef222Smrg # and Darwin in order for the loader to find any dlls it needs. 567265eef222Smrg func_warning "\`-no-install' is ignored for $host" 567365eef222Smrg func_warning "assuming \`-no-fast-install' instead" 567465eef222Smrg fast_install=no 567565eef222Smrg ;; 567665eef222Smrg *) no_install=yes ;; 567765eef222Smrg esac 567865eef222Smrg continue 567965eef222Smrg ;; 5680ef981d24Smrg 568165eef222Smrg -no-undefined) 568265eef222Smrg allow_undefined=no 568365eef222Smrg continue 568465eef222Smrg ;; 5685ef981d24Smrg 568665eef222Smrg -objectlist) 568765eef222Smrg prev=objectlist 568865eef222Smrg continue 568965eef222Smrg ;; 5690ef981d24Smrg 569165eef222Smrg -o) prev=output ;; 5692ef981d24Smrg 569365eef222Smrg -precious-files-regex) 569465eef222Smrg prev=precious_regex 569565eef222Smrg continue 569665eef222Smrg ;; 5697ef981d24Smrg 569865eef222Smrg -release) 569965eef222Smrg prev=release 570065eef222Smrg continue 570165eef222Smrg ;; 5702ef981d24Smrg 570365eef222Smrg -rpath) 570465eef222Smrg prev=rpath 570565eef222Smrg continue 570665eef222Smrg ;; 5707ef981d24Smrg 570865eef222Smrg -R) 570965eef222Smrg prev=xrpath 571065eef222Smrg continue 571165eef222Smrg ;; 5712ef981d24Smrg 571365eef222Smrg -R*) 571465eef222Smrg func_stripname '-R' '' "$arg" 571565eef222Smrg dir=$func_stripname_result 571665eef222Smrg # We need an absolute path. 571765eef222Smrg case $dir in 571865eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5719200d7199Smrg =*) 5720200d7199Smrg func_stripname '=' '' "$dir" 5721200d7199Smrg dir=$lt_sysroot$func_stripname_result 5722200d7199Smrg ;; 572365eef222Smrg *) 572465eef222Smrg func_fatal_error "only absolute run-paths are allowed" 572565eef222Smrg ;; 572665eef222Smrg esac 572765eef222Smrg case "$xrpath " in 572865eef222Smrg *" $dir "*) ;; 5729200d7199Smrg *) func_append xrpath " $dir" ;; 573065eef222Smrg esac 573165eef222Smrg continue 573265eef222Smrg ;; 5733ef981d24Smrg 573465eef222Smrg -shared) 573565eef222Smrg # The effects of -shared are defined in a previous loop. 573665eef222Smrg continue 573765eef222Smrg ;; 5738ef981d24Smrg 573965eef222Smrg -shrext) 574065eef222Smrg prev=shrext 574165eef222Smrg continue 574265eef222Smrg ;; 5743ef981d24Smrg 574465eef222Smrg -static | -static-libtool-libs) 574565eef222Smrg # The effects of -static are defined in a previous loop. 574665eef222Smrg # We used to do the same as -all-static on platforms that 574765eef222Smrg # didn't have a PIC flag, but the assumption that the effects 574865eef222Smrg # would be equivalent was wrong. It would break on at least 574965eef222Smrg # Digital Unix and AIX. 575065eef222Smrg continue 575165eef222Smrg ;; 5752ef981d24Smrg 575365eef222Smrg -thread-safe) 575465eef222Smrg thread_safe=yes 575565eef222Smrg continue 575665eef222Smrg ;; 5757ef981d24Smrg 575865eef222Smrg -version-info) 575965eef222Smrg prev=vinfo 576065eef222Smrg continue 576165eef222Smrg ;; 5762ef981d24Smrg 576365eef222Smrg -version-number) 576465eef222Smrg prev=vinfo 576565eef222Smrg vinfo_number=yes 576665eef222Smrg continue 576765eef222Smrg ;; 5768ef981d24Smrg 576965eef222Smrg -weak) 577065eef222Smrg prev=weak 577165eef222Smrg continue 577265eef222Smrg ;; 5773ef981d24Smrg 577465eef222Smrg -Wc,*) 577565eef222Smrg func_stripname '-Wc,' '' "$arg" 577665eef222Smrg args=$func_stripname_result 577765eef222Smrg arg= 577865eef222Smrg save_ifs="$IFS"; IFS=',' 577965eef222Smrg for flag in $args; do 578065eef222Smrg IFS="$save_ifs" 578165eef222Smrg func_quote_for_eval "$flag" 5782200d7199Smrg func_append arg " $func_quote_for_eval_result" 5783200d7199Smrg func_append compiler_flags " $func_quote_for_eval_result" 578465eef222Smrg done 578565eef222Smrg IFS="$save_ifs" 578665eef222Smrg func_stripname ' ' '' "$arg" 578765eef222Smrg arg=$func_stripname_result 578865eef222Smrg ;; 5789ef981d24Smrg 579065eef222Smrg -Wl,*) 579165eef222Smrg func_stripname '-Wl,' '' "$arg" 579265eef222Smrg args=$func_stripname_result 579365eef222Smrg arg= 579465eef222Smrg save_ifs="$IFS"; IFS=',' 579565eef222Smrg for flag in $args; do 579665eef222Smrg IFS="$save_ifs" 579765eef222Smrg func_quote_for_eval "$flag" 5798200d7199Smrg func_append arg " $wl$func_quote_for_eval_result" 5799200d7199Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 5800200d7199Smrg func_append linker_flags " $func_quote_for_eval_result" 580165eef222Smrg done 580265eef222Smrg IFS="$save_ifs" 580365eef222Smrg func_stripname ' ' '' "$arg" 580465eef222Smrg arg=$func_stripname_result 580565eef222Smrg ;; 5806ef981d24Smrg 580765eef222Smrg -Xcompiler) 580865eef222Smrg prev=xcompiler 580965eef222Smrg continue 581065eef222Smrg ;; 5811ef981d24Smrg 581265eef222Smrg -Xlinker) 581365eef222Smrg prev=xlinker 581465eef222Smrg continue 581565eef222Smrg ;; 5816ef981d24Smrg 581765eef222Smrg -XCClinker) 581865eef222Smrg prev=xcclinker 581965eef222Smrg continue 582065eef222Smrg ;; 5821ef981d24Smrg 582265eef222Smrg # -msg_* for osf cc 582365eef222Smrg -msg_*) 582465eef222Smrg func_quote_for_eval "$arg" 582565eef222Smrg arg="$func_quote_for_eval_result" 582665eef222Smrg ;; 5827ef981d24Smrg 582856957a04Smrg # Flags to be passed through unchanged, with rationale: 582956957a04Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 583056957a04Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 583156957a04Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 583256957a04Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 583356957a04Smrg # -q* compiler args for the IBM compiler 583456957a04Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 583556957a04Smrg # -F/path path to uninstalled frameworks, gcc on darwin 583656957a04Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 583756957a04Smrg # @file GCC response files 583856957a04Smrg # -tp=* Portland pgcc target processor selection 5839200d7199Smrg # --sysroot=* for sysroot support 5840200d7199Smrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 584165eef222Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5842200d7199Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 5843200d7199Smrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 584465eef222Smrg func_quote_for_eval "$arg" 584565eef222Smrg arg="$func_quote_for_eval_result" 584665eef222Smrg func_append compile_command " $arg" 584765eef222Smrg func_append finalize_command " $arg" 5848200d7199Smrg func_append compiler_flags " $arg" 584965eef222Smrg continue 585065eef222Smrg ;; 5851ef981d24Smrg 585265eef222Smrg # Some other compiler flag. 585365eef222Smrg -* | +*) 585465eef222Smrg func_quote_for_eval "$arg" 585565eef222Smrg arg="$func_quote_for_eval_result" 585665eef222Smrg ;; 5857ef981d24Smrg 585865eef222Smrg *.$objext) 585965eef222Smrg # A standard object. 5860200d7199Smrg func_append objs " $arg" 586165eef222Smrg ;; 586265eef222Smrg 586365eef222Smrg *.lo) 586465eef222Smrg # A libtool-controlled object. 586565eef222Smrg 586665eef222Smrg # Check to see that this really is a libtool object. 586765eef222Smrg if func_lalib_unsafe_p "$arg"; then 586865eef222Smrg pic_object= 586965eef222Smrg non_pic_object= 587065eef222Smrg 587165eef222Smrg # Read the .lo file 587265eef222Smrg func_source "$arg" 587365eef222Smrg 587465eef222Smrg if test -z "$pic_object" || 587565eef222Smrg test -z "$non_pic_object" || 587665eef222Smrg test "$pic_object" = none && 587765eef222Smrg test "$non_pic_object" = none; then 587865eef222Smrg func_fatal_error "cannot find name of object for \`$arg'" 587965eef222Smrg fi 588065eef222Smrg 588165eef222Smrg # Extract subdirectory from the argument. 588265eef222Smrg func_dirname "$arg" "/" "" 588365eef222Smrg xdir="$func_dirname_result" 588465eef222Smrg 588565eef222Smrg if test "$pic_object" != none; then 588665eef222Smrg # Prepend the subdirectory the object is found in. 588765eef222Smrg pic_object="$xdir$pic_object" 588865eef222Smrg 588965eef222Smrg if test "$prev" = dlfiles; then 589065eef222Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5891200d7199Smrg func_append dlfiles " $pic_object" 589265eef222Smrg prev= 589365eef222Smrg continue 589465eef222Smrg else 589565eef222Smrg # If libtool objects are unsupported, then we need to preload. 589665eef222Smrg prev=dlprefiles 589765eef222Smrg fi 589865eef222Smrg fi 589965eef222Smrg 590065eef222Smrg # CHECK ME: I think I busted this. -Ossama 590165eef222Smrg if test "$prev" = dlprefiles; then 590265eef222Smrg # Preload the old-style object. 5903200d7199Smrg func_append dlprefiles " $pic_object" 590465eef222Smrg prev= 590565eef222Smrg fi 590665eef222Smrg 590765eef222Smrg # A PIC object. 590865eef222Smrg func_append libobjs " $pic_object" 590965eef222Smrg arg="$pic_object" 591065eef222Smrg fi 591165eef222Smrg 591265eef222Smrg # Non-PIC object. 591365eef222Smrg if test "$non_pic_object" != none; then 591465eef222Smrg # Prepend the subdirectory the object is found in. 591565eef222Smrg non_pic_object="$xdir$non_pic_object" 591665eef222Smrg 591765eef222Smrg # A standard non-PIC object 591865eef222Smrg func_append non_pic_objects " $non_pic_object" 591965eef222Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 592065eef222Smrg arg="$non_pic_object" 592165eef222Smrg fi 592265eef222Smrg else 592365eef222Smrg # If the PIC object exists, use it instead. 592465eef222Smrg # $xdir was prepended to $pic_object above. 592565eef222Smrg non_pic_object="$pic_object" 592665eef222Smrg func_append non_pic_objects " $non_pic_object" 592765eef222Smrg fi 592865eef222Smrg else 592965eef222Smrg # Only an error if not doing a dry-run. 593065eef222Smrg if $opt_dry_run; then 593165eef222Smrg # Extract subdirectory from the argument. 593265eef222Smrg func_dirname "$arg" "/" "" 593365eef222Smrg xdir="$func_dirname_result" 593465eef222Smrg 593565eef222Smrg func_lo2o "$arg" 593665eef222Smrg pic_object=$xdir$objdir/$func_lo2o_result 593765eef222Smrg non_pic_object=$xdir$func_lo2o_result 593865eef222Smrg func_append libobjs " $pic_object" 593965eef222Smrg func_append non_pic_objects " $non_pic_object" 594065eef222Smrg else 594165eef222Smrg func_fatal_error "\`$arg' is not a valid libtool object" 594265eef222Smrg fi 594365eef222Smrg fi 594465eef222Smrg ;; 594565eef222Smrg 594665eef222Smrg *.$libext) 594765eef222Smrg # An archive. 5948200d7199Smrg func_append deplibs " $arg" 5949200d7199Smrg func_append old_deplibs " $arg" 595065eef222Smrg continue 595165eef222Smrg ;; 595265eef222Smrg 595365eef222Smrg *.la) 595465eef222Smrg # A libtool-controlled library. 595565eef222Smrg 5956200d7199Smrg func_resolve_sysroot "$arg" 595765eef222Smrg if test "$prev" = dlfiles; then 595865eef222Smrg # This library was specified with -dlopen. 5959200d7199Smrg func_append dlfiles " $func_resolve_sysroot_result" 596065eef222Smrg prev= 596165eef222Smrg elif test "$prev" = dlprefiles; then 596265eef222Smrg # The library was specified with -dlpreopen. 5963200d7199Smrg func_append dlprefiles " $func_resolve_sysroot_result" 596465eef222Smrg prev= 596565eef222Smrg else 5966200d7199Smrg func_append deplibs " $func_resolve_sysroot_result" 596765eef222Smrg fi 596865eef222Smrg continue 596965eef222Smrg ;; 597065eef222Smrg 597165eef222Smrg # Some other compiler argument. 597265eef222Smrg *) 597365eef222Smrg # Unknown arguments in both finalize_command and compile_command need 597465eef222Smrg # to be aesthetically quoted because they are evaled later. 597565eef222Smrg func_quote_for_eval "$arg" 597665eef222Smrg arg="$func_quote_for_eval_result" 597765eef222Smrg ;; 597865eef222Smrg esac # arg 597965eef222Smrg 598065eef222Smrg # Now actually substitute the argument into the commands. 598165eef222Smrg if test -n "$arg"; then 598265eef222Smrg func_append compile_command " $arg" 598365eef222Smrg func_append finalize_command " $arg" 598465eef222Smrg fi 598565eef222Smrg done # argument parsing loop 598665eef222Smrg 598765eef222Smrg test -n "$prev" && \ 598865eef222Smrg func_fatal_help "the \`$prevarg' option requires an argument" 598965eef222Smrg 599065eef222Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 599165eef222Smrg eval arg=\"$export_dynamic_flag_spec\" 599265eef222Smrg func_append compile_command " $arg" 599365eef222Smrg func_append finalize_command " $arg" 599465eef222Smrg fi 599565eef222Smrg 599665eef222Smrg oldlibs= 599765eef222Smrg # calculate the name of the file, without its directory 599865eef222Smrg func_basename "$output" 599965eef222Smrg outputname="$func_basename_result" 600065eef222Smrg libobjs_save="$libobjs" 600165eef222Smrg 600265eef222Smrg if test -n "$shlibpath_var"; then 600365eef222Smrg # get the directories listed in $shlibpath_var 600456957a04Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6005ef981d24Smrg else 600665eef222Smrg shlib_search_path= 6007ef981d24Smrg fi 600865eef222Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 600965eef222Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6010ef981d24Smrg 601165eef222Smrg func_dirname "$output" "/" "" 601265eef222Smrg output_objdir="$func_dirname_result$objdir" 6013200d7199Smrg func_to_tool_file "$output_objdir/" 6014200d7199Smrg tool_output_objdir=$func_to_tool_file_result 601565eef222Smrg # Create the object directory. 601665eef222Smrg func_mkdir_p "$output_objdir" 6017ef981d24Smrg 601865eef222Smrg # Determine the type of output 601965eef222Smrg case $output in 602065eef222Smrg "") 602165eef222Smrg func_fatal_help "you must specify an output file" 602265eef222Smrg ;; 602365eef222Smrg *.$libext) linkmode=oldlib ;; 602465eef222Smrg *.lo | *.$objext) linkmode=obj ;; 602565eef222Smrg *.la) linkmode=lib ;; 602665eef222Smrg *) linkmode=prog ;; # Anything else should be a program. 602765eef222Smrg esac 602865eef222Smrg 602965eef222Smrg specialdeplibs= 603065eef222Smrg 603165eef222Smrg libs= 603265eef222Smrg # Find all interdependent deplibs by searching for libraries 603365eef222Smrg # that are linked more than once (e.g. -la -lb -la) 603465eef222Smrg for deplib in $deplibs; do 6035200d7199Smrg if $opt_preserve_dup_deps ; then 603665eef222Smrg case "$libs " in 6037200d7199Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 603865eef222Smrg esac 603965eef222Smrg fi 6040200d7199Smrg func_append libs " $deplib" 604165eef222Smrg done 604265eef222Smrg 604365eef222Smrg if test "$linkmode" = lib; then 604465eef222Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 604565eef222Smrg 604665eef222Smrg # Compute libraries that are listed more than once in $predeps 604765eef222Smrg # $postdeps and mark them as special (i.e., whose duplicates are 604865eef222Smrg # not to be eliminated). 604965eef222Smrg pre_post_deps= 605065eef222Smrg if $opt_duplicate_compiler_generated_deps; then 605165eef222Smrg for pre_post_dep in $predeps $postdeps; do 605265eef222Smrg case "$pre_post_deps " in 6053200d7199Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 605465eef222Smrg esac 6055200d7199Smrg func_append pre_post_deps " $pre_post_dep" 605665eef222Smrg done 605765eef222Smrg fi 605865eef222Smrg pre_post_deps= 605965eef222Smrg fi 606065eef222Smrg 606165eef222Smrg deplibs= 606265eef222Smrg newdependency_libs= 606365eef222Smrg newlib_search_path= 606465eef222Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 606565eef222Smrg notinst_deplibs= # not-installed libtool libraries 606665eef222Smrg notinst_path= # paths that contain not-installed libtool libraries 606765eef222Smrg 606865eef222Smrg case $linkmode in 606965eef222Smrg lib) 607065eef222Smrg passes="conv dlpreopen link" 607165eef222Smrg for file in $dlfiles $dlprefiles; do 607265eef222Smrg case $file in 607365eef222Smrg *.la) ;; 607465eef222Smrg *) 607565eef222Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 607665eef222Smrg ;; 607765eef222Smrg esac 607865eef222Smrg done 607965eef222Smrg ;; 608065eef222Smrg prog) 608165eef222Smrg compile_deplibs= 608265eef222Smrg finalize_deplibs= 608365eef222Smrg alldeplibs=no 608465eef222Smrg newdlfiles= 608565eef222Smrg newdlprefiles= 608665eef222Smrg passes="conv scan dlopen dlpreopen link" 608765eef222Smrg ;; 608865eef222Smrg *) passes="conv" 608965eef222Smrg ;; 609065eef222Smrg esac 609165eef222Smrg 609265eef222Smrg for pass in $passes; do 609365eef222Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 609465eef222Smrg # so that -L comes before libs that need it for instance... 609565eef222Smrg if test "$linkmode,$pass" = "lib,link"; then 609665eef222Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 609765eef222Smrg ## order, and fix it there properly 609865eef222Smrg tmp_deplibs= 609965eef222Smrg for deplib in $deplibs; do 610065eef222Smrg tmp_deplibs="$deplib $tmp_deplibs" 610165eef222Smrg done 610265eef222Smrg deplibs="$tmp_deplibs" 610365eef222Smrg fi 610465eef222Smrg 610565eef222Smrg if test "$linkmode,$pass" = "lib,link" || 610665eef222Smrg test "$linkmode,$pass" = "prog,scan"; then 610765eef222Smrg libs="$deplibs" 610865eef222Smrg deplibs= 610965eef222Smrg fi 611065eef222Smrg if test "$linkmode" = prog; then 611165eef222Smrg case $pass in 611265eef222Smrg dlopen) libs="$dlfiles" ;; 611365eef222Smrg dlpreopen) libs="$dlprefiles" ;; 611465eef222Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 611565eef222Smrg esac 611665eef222Smrg fi 611765eef222Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 611865eef222Smrg # Collect and forward deplibs of preopened libtool libs 611965eef222Smrg for lib in $dlprefiles; do 612065eef222Smrg # Ignore non-libtool-libs 612165eef222Smrg dependency_libs= 6122200d7199Smrg func_resolve_sysroot "$lib" 612365eef222Smrg case $lib in 6124200d7199Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 612565eef222Smrg esac 612665eef222Smrg 612765eef222Smrg # Collect preopened libtool deplibs, except any this library 612865eef222Smrg # has declared as weak libs 612965eef222Smrg for deplib in $dependency_libs; do 613056957a04Smrg func_basename "$deplib" 613156957a04Smrg deplib_base=$func_basename_result 613265eef222Smrg case " $weak_libs " in 613365eef222Smrg *" $deplib_base "*) ;; 6134200d7199Smrg *) func_append deplibs " $deplib" ;; 613565eef222Smrg esac 613665eef222Smrg done 613765eef222Smrg done 613865eef222Smrg libs="$dlprefiles" 613965eef222Smrg fi 614065eef222Smrg if test "$pass" = dlopen; then 614165eef222Smrg # Collect dlpreopened libraries 614265eef222Smrg save_deplibs="$deplibs" 614365eef222Smrg deplibs= 614465eef222Smrg fi 614565eef222Smrg 614665eef222Smrg for deplib in $libs; do 614765eef222Smrg lib= 614865eef222Smrg found=no 614965eef222Smrg case $deplib in 615065eef222Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 615165eef222Smrg if test "$linkmode,$pass" = "prog,link"; then 615265eef222Smrg compile_deplibs="$deplib $compile_deplibs" 615365eef222Smrg finalize_deplibs="$deplib $finalize_deplibs" 615465eef222Smrg else 6155200d7199Smrg func_append compiler_flags " $deplib" 615665eef222Smrg if test "$linkmode" = lib ; then 615765eef222Smrg case "$new_inherited_linker_flags " in 615865eef222Smrg *" $deplib "*) ;; 6159200d7199Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 616065eef222Smrg esac 616165eef222Smrg fi 616265eef222Smrg fi 616365eef222Smrg continue 616465eef222Smrg ;; 616565eef222Smrg -l*) 616665eef222Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 616765eef222Smrg func_warning "\`-l' is ignored for archives/objects" 616865eef222Smrg continue 616965eef222Smrg fi 617065eef222Smrg func_stripname '-l' '' "$deplib" 617165eef222Smrg name=$func_stripname_result 617265eef222Smrg if test "$linkmode" = lib; then 617365eef222Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 617465eef222Smrg else 617565eef222Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 617665eef222Smrg fi 617765eef222Smrg for searchdir in $searchdirs; do 617865eef222Smrg for search_ext in .la $std_shrext .so .a; do 617965eef222Smrg # Search the libtool library 618065eef222Smrg lib="$searchdir/lib${name}${search_ext}" 618165eef222Smrg if test -f "$lib"; then 618265eef222Smrg if test "$search_ext" = ".la"; then 618365eef222Smrg found=yes 618465eef222Smrg else 618565eef222Smrg found=no 618665eef222Smrg fi 618765eef222Smrg break 2 618865eef222Smrg fi 618965eef222Smrg done 619065eef222Smrg done 619165eef222Smrg if test "$found" != yes; then 619265eef222Smrg # deplib doesn't seem to be a libtool library 619365eef222Smrg if test "$linkmode,$pass" = "prog,link"; then 619465eef222Smrg compile_deplibs="$deplib $compile_deplibs" 619565eef222Smrg finalize_deplibs="$deplib $finalize_deplibs" 619665eef222Smrg else 619765eef222Smrg deplibs="$deplib $deplibs" 619865eef222Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 619965eef222Smrg fi 620065eef222Smrg continue 620165eef222Smrg else # deplib is a libtool library 620265eef222Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 620365eef222Smrg # We need to do some special things here, and not later. 620465eef222Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 620565eef222Smrg case " $predeps $postdeps " in 620665eef222Smrg *" $deplib "*) 620765eef222Smrg if func_lalib_p "$lib"; then 620865eef222Smrg library_names= 620965eef222Smrg old_library= 621065eef222Smrg func_source "$lib" 621165eef222Smrg for l in $old_library $library_names; do 621265eef222Smrg ll="$l" 621365eef222Smrg done 621465eef222Smrg if test "X$ll" = "X$old_library" ; then # only static version available 621565eef222Smrg found=no 621665eef222Smrg func_dirname "$lib" "" "." 621765eef222Smrg ladir="$func_dirname_result" 621865eef222Smrg lib=$ladir/$old_library 621965eef222Smrg if test "$linkmode,$pass" = "prog,link"; then 622065eef222Smrg compile_deplibs="$deplib $compile_deplibs" 622165eef222Smrg finalize_deplibs="$deplib $finalize_deplibs" 622265eef222Smrg else 622365eef222Smrg deplibs="$deplib $deplibs" 622465eef222Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 622565eef222Smrg fi 622665eef222Smrg continue 622765eef222Smrg fi 622865eef222Smrg fi 622965eef222Smrg ;; 623065eef222Smrg *) ;; 623165eef222Smrg esac 623265eef222Smrg fi 623365eef222Smrg fi 623465eef222Smrg ;; # -l 623565eef222Smrg *.ltframework) 623665eef222Smrg if test "$linkmode,$pass" = "prog,link"; then 623765eef222Smrg compile_deplibs="$deplib $compile_deplibs" 623865eef222Smrg finalize_deplibs="$deplib $finalize_deplibs" 623965eef222Smrg else 624065eef222Smrg deplibs="$deplib $deplibs" 624165eef222Smrg if test "$linkmode" = lib ; then 624265eef222Smrg case "$new_inherited_linker_flags " in 624365eef222Smrg *" $deplib "*) ;; 6244200d7199Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 624565eef222Smrg esac 624665eef222Smrg fi 624765eef222Smrg fi 624865eef222Smrg continue 624965eef222Smrg ;; 625065eef222Smrg -L*) 625165eef222Smrg case $linkmode in 625265eef222Smrg lib) 625365eef222Smrg deplibs="$deplib $deplibs" 625465eef222Smrg test "$pass" = conv && continue 625565eef222Smrg newdependency_libs="$deplib $newdependency_libs" 625665eef222Smrg func_stripname '-L' '' "$deplib" 6257200d7199Smrg func_resolve_sysroot "$func_stripname_result" 6258200d7199Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 625965eef222Smrg ;; 626065eef222Smrg prog) 626165eef222Smrg if test "$pass" = conv; then 626265eef222Smrg deplibs="$deplib $deplibs" 626365eef222Smrg continue 626465eef222Smrg fi 626565eef222Smrg if test "$pass" = scan; then 626665eef222Smrg deplibs="$deplib $deplibs" 626765eef222Smrg else 626865eef222Smrg compile_deplibs="$deplib $compile_deplibs" 626965eef222Smrg finalize_deplibs="$deplib $finalize_deplibs" 627065eef222Smrg fi 627165eef222Smrg func_stripname '-L' '' "$deplib" 6272200d7199Smrg func_resolve_sysroot "$func_stripname_result" 6273200d7199Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 627465eef222Smrg ;; 627565eef222Smrg *) 627665eef222Smrg func_warning "\`-L' is ignored for archives/objects" 627765eef222Smrg ;; 627865eef222Smrg esac # linkmode 627965eef222Smrg continue 628065eef222Smrg ;; # -L 628165eef222Smrg -R*) 628265eef222Smrg if test "$pass" = link; then 628365eef222Smrg func_stripname '-R' '' "$deplib" 6284200d7199Smrg func_resolve_sysroot "$func_stripname_result" 6285200d7199Smrg dir=$func_resolve_sysroot_result 628665eef222Smrg # Make sure the xrpath contains only unique directories. 628765eef222Smrg case "$xrpath " in 628865eef222Smrg *" $dir "*) ;; 6289200d7199Smrg *) func_append xrpath " $dir" ;; 629065eef222Smrg esac 629165eef222Smrg fi 629265eef222Smrg deplibs="$deplib $deplibs" 629365eef222Smrg continue 629465eef222Smrg ;; 6295200d7199Smrg *.la) 6296200d7199Smrg func_resolve_sysroot "$deplib" 6297200d7199Smrg lib=$func_resolve_sysroot_result 6298200d7199Smrg ;; 629965eef222Smrg *.$libext) 630065eef222Smrg if test "$pass" = conv; then 630165eef222Smrg deplibs="$deplib $deplibs" 630265eef222Smrg continue 630365eef222Smrg fi 630465eef222Smrg case $linkmode in 630565eef222Smrg lib) 630665eef222Smrg # Linking convenience modules into shared libraries is allowed, 630765eef222Smrg # but linking other static libraries is non-portable. 630865eef222Smrg case " $dlpreconveniencelibs " in 630965eef222Smrg *" $deplib "*) ;; 631065eef222Smrg *) 631165eef222Smrg valid_a_lib=no 631265eef222Smrg case $deplibs_check_method in 631365eef222Smrg match_pattern*) 631465eef222Smrg set dummy $deplibs_check_method; shift 631565eef222Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 631656957a04Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 631765eef222Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 631865eef222Smrg valid_a_lib=yes 631965eef222Smrg fi 632065eef222Smrg ;; 632165eef222Smrg pass_all) 632265eef222Smrg valid_a_lib=yes 632365eef222Smrg ;; 632465eef222Smrg esac 632565eef222Smrg if test "$valid_a_lib" != yes; then 632656957a04Smrg echo 632765eef222Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 632856957a04Smrg echo "*** I have the capability to make that library automatically link in when" 632956957a04Smrg echo "*** you link to this library. But I can only do this if you have a" 633056957a04Smrg echo "*** shared version of the library, which you do not appear to have" 633156957a04Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 633256957a04Smrg echo "*** that it is just a static archive that I should not use here." 633365eef222Smrg else 633456957a04Smrg echo 633565eef222Smrg $ECHO "*** Warning: Linking the shared library $output against the" 633665eef222Smrg $ECHO "*** static library $deplib is not portable!" 633765eef222Smrg deplibs="$deplib $deplibs" 633865eef222Smrg fi 633965eef222Smrg ;; 634065eef222Smrg esac 634165eef222Smrg continue 634265eef222Smrg ;; 634365eef222Smrg prog) 634465eef222Smrg if test "$pass" != link; then 634565eef222Smrg deplibs="$deplib $deplibs" 634665eef222Smrg else 634765eef222Smrg compile_deplibs="$deplib $compile_deplibs" 634865eef222Smrg finalize_deplibs="$deplib $finalize_deplibs" 634965eef222Smrg fi 635065eef222Smrg continue 635165eef222Smrg ;; 635265eef222Smrg esac # linkmode 635365eef222Smrg ;; # *.$libext 635465eef222Smrg *.lo | *.$objext) 635565eef222Smrg if test "$pass" = conv; then 635665eef222Smrg deplibs="$deplib $deplibs" 635765eef222Smrg elif test "$linkmode" = prog; then 635865eef222Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 635965eef222Smrg # If there is no dlopen support or we're linking statically, 636065eef222Smrg # we need to preload. 6361200d7199Smrg func_append newdlprefiles " $deplib" 636265eef222Smrg compile_deplibs="$deplib $compile_deplibs" 636365eef222Smrg finalize_deplibs="$deplib $finalize_deplibs" 636465eef222Smrg else 6365200d7199Smrg func_append newdlfiles " $deplib" 636665eef222Smrg fi 636765eef222Smrg fi 636865eef222Smrg continue 636965eef222Smrg ;; 637065eef222Smrg %DEPLIBS%) 637165eef222Smrg alldeplibs=yes 637265eef222Smrg continue 637365eef222Smrg ;; 637465eef222Smrg esac # case $deplib 637565eef222Smrg 637665eef222Smrg if test "$found" = yes || test -f "$lib"; then : 637765eef222Smrg else 637865eef222Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 637965eef222Smrg fi 638065eef222Smrg 638165eef222Smrg # Check to see that this really is a libtool archive. 638265eef222Smrg func_lalib_unsafe_p "$lib" \ 638365eef222Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 638465eef222Smrg 638565eef222Smrg func_dirname "$lib" "" "." 638665eef222Smrg ladir="$func_dirname_result" 638765eef222Smrg 638865eef222Smrg dlname= 638965eef222Smrg dlopen= 639065eef222Smrg dlpreopen= 639165eef222Smrg libdir= 639265eef222Smrg library_names= 639365eef222Smrg old_library= 639465eef222Smrg inherited_linker_flags= 639565eef222Smrg # If the library was installed with an old release of libtool, 639665eef222Smrg # it will not redefine variables installed, or shouldnotlink 639765eef222Smrg installed=yes 639865eef222Smrg shouldnotlink=no 639965eef222Smrg avoidtemprpath= 640065eef222Smrg 640165eef222Smrg 640265eef222Smrg # Read the .la file 640365eef222Smrg func_source "$lib" 640465eef222Smrg 640565eef222Smrg # Convert "-framework foo" to "foo.ltframework" 640665eef222Smrg if test -n "$inherited_linker_flags"; then 640756957a04Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 640865eef222Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 640965eef222Smrg case " $new_inherited_linker_flags " in 641065eef222Smrg *" $tmp_inherited_linker_flag "*) ;; 6411200d7199Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 641265eef222Smrg esac 641365eef222Smrg done 641465eef222Smrg fi 641556957a04Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 641665eef222Smrg if test "$linkmode,$pass" = "lib,link" || 641765eef222Smrg test "$linkmode,$pass" = "prog,scan" || 641865eef222Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6419200d7199Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 6420200d7199Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 642165eef222Smrg fi 642265eef222Smrg 642365eef222Smrg if test "$pass" = conv; then 642465eef222Smrg # Only check for convenience libraries 642565eef222Smrg deplibs="$lib $deplibs" 642665eef222Smrg if test -z "$libdir"; then 642765eef222Smrg if test -z "$old_library"; then 642865eef222Smrg func_fatal_error "cannot find name of link library for \`$lib'" 642965eef222Smrg fi 643065eef222Smrg # It is a libtool convenience library, so add in its objects. 6431200d7199Smrg func_append convenience " $ladir/$objdir/$old_library" 6432200d7199Smrg func_append old_convenience " $ladir/$objdir/$old_library" 643365eef222Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 643465eef222Smrg func_fatal_error "\`$lib' is not a convenience library" 643565eef222Smrg fi 643665eef222Smrg tmp_libs= 643765eef222Smrg for deplib in $dependency_libs; do 643865eef222Smrg deplibs="$deplib $deplibs" 6439200d7199Smrg if $opt_preserve_dup_deps ; then 644065eef222Smrg case "$tmp_libs " in 6441200d7199Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 644265eef222Smrg esac 644365eef222Smrg fi 6444200d7199Smrg func_append tmp_libs " $deplib" 644565eef222Smrg done 644665eef222Smrg continue 644765eef222Smrg fi # $pass = conv 644865eef222Smrg 644965eef222Smrg 645065eef222Smrg # Get the name of the library we link against. 645165eef222Smrg linklib= 6452200d7199Smrg if test -n "$old_library" && 6453200d7199Smrg { test "$prefer_static_libs" = yes || 6454200d7199Smrg test "$prefer_static_libs,$installed" = "built,no"; }; then 6455200d7199Smrg linklib=$old_library 6456200d7199Smrg else 6457200d7199Smrg for l in $old_library $library_names; do 6458200d7199Smrg linklib="$l" 6459200d7199Smrg done 6460200d7199Smrg fi 646165eef222Smrg if test -z "$linklib"; then 646265eef222Smrg func_fatal_error "cannot find name of link library for \`$lib'" 646365eef222Smrg fi 646465eef222Smrg 646565eef222Smrg # This library was specified with -dlopen. 646665eef222Smrg if test "$pass" = dlopen; then 646765eef222Smrg if test -z "$libdir"; then 646865eef222Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 646965eef222Smrg fi 647065eef222Smrg if test -z "$dlname" || 647165eef222Smrg test "$dlopen_support" != yes || 647265eef222Smrg test "$build_libtool_libs" = no; then 647365eef222Smrg # If there is no dlname, no dlopen support or we're linking 647465eef222Smrg # statically, we need to preload. We also need to preload any 647565eef222Smrg # dependent libraries so libltdl's deplib preloader doesn't 647665eef222Smrg # bomb out in the load deplibs phase. 6477200d7199Smrg func_append dlprefiles " $lib $dependency_libs" 647865eef222Smrg else 6479200d7199Smrg func_append newdlfiles " $lib" 648065eef222Smrg fi 648165eef222Smrg continue 648265eef222Smrg fi # $pass = dlopen 648365eef222Smrg 648465eef222Smrg # We need an absolute path. 648565eef222Smrg case $ladir in 648665eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 648765eef222Smrg *) 648865eef222Smrg abs_ladir=`cd "$ladir" && pwd` 648965eef222Smrg if test -z "$abs_ladir"; then 649065eef222Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 649165eef222Smrg func_warning "passing it literally to the linker, although it might fail" 649265eef222Smrg abs_ladir="$ladir" 649365eef222Smrg fi 649465eef222Smrg ;; 649565eef222Smrg esac 649665eef222Smrg func_basename "$lib" 649765eef222Smrg laname="$func_basename_result" 649865eef222Smrg 649965eef222Smrg # Find the relevant object directory and library name. 650065eef222Smrg if test "X$installed" = Xyes; then 6501200d7199Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 650265eef222Smrg func_warning "library \`$lib' was moved." 650365eef222Smrg dir="$ladir" 650465eef222Smrg absdir="$abs_ladir" 650565eef222Smrg libdir="$abs_ladir" 650665eef222Smrg else 6507200d7199Smrg dir="$lt_sysroot$libdir" 6508200d7199Smrg absdir="$lt_sysroot$libdir" 650965eef222Smrg fi 651065eef222Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 651165eef222Smrg else 651265eef222Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 651365eef222Smrg dir="$ladir" 651465eef222Smrg absdir="$abs_ladir" 651565eef222Smrg # Remove this search path later 6516200d7199Smrg func_append notinst_path " $abs_ladir" 651765eef222Smrg else 651865eef222Smrg dir="$ladir/$objdir" 651965eef222Smrg absdir="$abs_ladir/$objdir" 652065eef222Smrg # Remove this search path later 6521200d7199Smrg func_append notinst_path " $abs_ladir" 652265eef222Smrg fi 652365eef222Smrg fi # $installed = yes 652465eef222Smrg func_stripname 'lib' '.la' "$laname" 652565eef222Smrg name=$func_stripname_result 652665eef222Smrg 652765eef222Smrg # This library was specified with -dlpreopen. 652865eef222Smrg if test "$pass" = dlpreopen; then 652965eef222Smrg if test -z "$libdir" && test "$linkmode" = prog; then 653065eef222Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 653165eef222Smrg fi 6532200d7199Smrg case "$host" in 6533200d7199Smrg # special handling for platforms with PE-DLLs. 6534200d7199Smrg *cygwin* | *mingw* | *cegcc* ) 6535200d7199Smrg # Linker will automatically link against shared library if both 6536200d7199Smrg # static and shared are present. Therefore, ensure we extract 6537200d7199Smrg # symbols from the import library if a shared library is present 6538200d7199Smrg # (otherwise, the dlopen module name will be incorrect). We do 6539200d7199Smrg # this by putting the import library name into $newdlprefiles. 6540200d7199Smrg # We recover the dlopen module name by 'saving' the la file 6541200d7199Smrg # name in a special purpose variable, and (later) extracting the 6542200d7199Smrg # dlname from the la file. 6543200d7199Smrg if test -n "$dlname"; then 6544200d7199Smrg func_tr_sh "$dir/$linklib" 6545200d7199Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6546200d7199Smrg func_append newdlprefiles " $dir/$linklib" 6547200d7199Smrg else 6548200d7199Smrg func_append newdlprefiles " $dir/$old_library" 6549200d7199Smrg # Keep a list of preopened convenience libraries to check 6550200d7199Smrg # that they are being used correctly in the link pass. 6551200d7199Smrg test -z "$libdir" && \ 6552200d7199Smrg func_append dlpreconveniencelibs " $dir/$old_library" 6553200d7199Smrg fi 6554200d7199Smrg ;; 6555200d7199Smrg * ) 6556200d7199Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 6557200d7199Smrg # are required to link). 6558200d7199Smrg if test -n "$old_library"; then 6559200d7199Smrg func_append newdlprefiles " $dir/$old_library" 6560200d7199Smrg # Keep a list of preopened convenience libraries to check 6561200d7199Smrg # that they are being used correctly in the link pass. 6562200d7199Smrg test -z "$libdir" && \ 6563200d7199Smrg func_append dlpreconveniencelibs " $dir/$old_library" 6564200d7199Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 6565200d7199Smrg elif test -n "$dlname"; then 6566200d7199Smrg func_append newdlprefiles " $dir/$dlname" 6567200d7199Smrg else 6568200d7199Smrg func_append newdlprefiles " $dir/$linklib" 6569200d7199Smrg fi 6570200d7199Smrg ;; 6571200d7199Smrg esac 657265eef222Smrg fi # $pass = dlpreopen 657365eef222Smrg 657465eef222Smrg if test -z "$libdir"; then 657565eef222Smrg # Link the convenience library 657665eef222Smrg if test "$linkmode" = lib; then 657765eef222Smrg deplibs="$dir/$old_library $deplibs" 657865eef222Smrg elif test "$linkmode,$pass" = "prog,link"; then 657965eef222Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 658065eef222Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 658165eef222Smrg else 658265eef222Smrg deplibs="$lib $deplibs" # used for prog,scan pass 658365eef222Smrg fi 658465eef222Smrg continue 658565eef222Smrg fi 658665eef222Smrg 658765eef222Smrg 658865eef222Smrg if test "$linkmode" = prog && test "$pass" != link; then 6589200d7199Smrg func_append newlib_search_path " $ladir" 659065eef222Smrg deplibs="$lib $deplibs" 659165eef222Smrg 659265eef222Smrg linkalldeplibs=no 659365eef222Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 659465eef222Smrg test "$build_libtool_libs" = no; then 659565eef222Smrg linkalldeplibs=yes 659665eef222Smrg fi 659765eef222Smrg 659865eef222Smrg tmp_libs= 659965eef222Smrg for deplib in $dependency_libs; do 660065eef222Smrg case $deplib in 660165eef222Smrg -L*) func_stripname '-L' '' "$deplib" 6602200d7199Smrg func_resolve_sysroot "$func_stripname_result" 6603200d7199Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 660465eef222Smrg ;; 660565eef222Smrg esac 660665eef222Smrg # Need to link against all dependency_libs? 660765eef222Smrg if test "$linkalldeplibs" = yes; then 660865eef222Smrg deplibs="$deplib $deplibs" 660965eef222Smrg else 661065eef222Smrg # Need to hardcode shared library paths 661165eef222Smrg # or/and link against static libraries 661265eef222Smrg newdependency_libs="$deplib $newdependency_libs" 661365eef222Smrg fi 6614200d7199Smrg if $opt_preserve_dup_deps ; then 661565eef222Smrg case "$tmp_libs " in 6616200d7199Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 661765eef222Smrg esac 661865eef222Smrg fi 6619200d7199Smrg func_append tmp_libs " $deplib" 662065eef222Smrg done # for deplib 662165eef222Smrg continue 662265eef222Smrg fi # $linkmode = prog... 662365eef222Smrg 662465eef222Smrg if test "$linkmode,$pass" = "prog,link"; then 662565eef222Smrg if test -n "$library_names" && 662665eef222Smrg { { test "$prefer_static_libs" = no || 662765eef222Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 662865eef222Smrg test -z "$old_library"; }; then 662965eef222Smrg # We need to hardcode the library path 663065eef222Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 663165eef222Smrg # Make sure the rpath contains only unique directories. 663265eef222Smrg case "$temp_rpath:" in 663365eef222Smrg *"$absdir:"*) ;; 6634200d7199Smrg *) func_append temp_rpath "$absdir:" ;; 663565eef222Smrg esac 663665eef222Smrg fi 663765eef222Smrg 663865eef222Smrg # Hardcode the library path. 663965eef222Smrg # Skip directories that are in the system default run-time 664065eef222Smrg # search path. 664165eef222Smrg case " $sys_lib_dlsearch_path " in 664265eef222Smrg *" $absdir "*) ;; 664365eef222Smrg *) 664465eef222Smrg case "$compile_rpath " in 664565eef222Smrg *" $absdir "*) ;; 6646200d7199Smrg *) func_append compile_rpath " $absdir" ;; 664765eef222Smrg esac 664865eef222Smrg ;; 664965eef222Smrg esac 665065eef222Smrg case " $sys_lib_dlsearch_path " in 665165eef222Smrg *" $libdir "*) ;; 665265eef222Smrg *) 665365eef222Smrg case "$finalize_rpath " in 665465eef222Smrg *" $libdir "*) ;; 6655200d7199Smrg *) func_append finalize_rpath " $libdir" ;; 665665eef222Smrg esac 665765eef222Smrg ;; 665865eef222Smrg esac 665965eef222Smrg fi # $linkmode,$pass = prog,link... 666065eef222Smrg 666165eef222Smrg if test "$alldeplibs" = yes && 666265eef222Smrg { test "$deplibs_check_method" = pass_all || 666365eef222Smrg { test "$build_libtool_libs" = yes && 666465eef222Smrg test -n "$library_names"; }; }; then 666565eef222Smrg # We only need to search for static libraries 666665eef222Smrg continue 666765eef222Smrg fi 666865eef222Smrg fi 666965eef222Smrg 667065eef222Smrg link_static=no # Whether the deplib will be linked statically 667165eef222Smrg use_static_libs=$prefer_static_libs 667265eef222Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 667365eef222Smrg use_static_libs=no 667465eef222Smrg fi 667565eef222Smrg if test -n "$library_names" && 667665eef222Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 667765eef222Smrg case $host in 667865eef222Smrg *cygwin* | *mingw* | *cegcc*) 667965eef222Smrg # No point in relinking DLLs because paths are not encoded 6680200d7199Smrg func_append notinst_deplibs " $lib" 668165eef222Smrg need_relink=no 668265eef222Smrg ;; 668365eef222Smrg *) 668465eef222Smrg if test "$installed" = no; then 6685200d7199Smrg func_append notinst_deplibs " $lib" 668665eef222Smrg need_relink=yes 668765eef222Smrg fi 668865eef222Smrg ;; 668965eef222Smrg esac 669065eef222Smrg # This is a shared library 669165eef222Smrg 669265eef222Smrg # Warn about portability, can't link against -module's on some 669365eef222Smrg # systems (darwin). Don't bleat about dlopened modules though! 669465eef222Smrg dlopenmodule="" 669565eef222Smrg for dlpremoduletest in $dlprefiles; do 669665eef222Smrg if test "X$dlpremoduletest" = "X$lib"; then 669765eef222Smrg dlopenmodule="$dlpremoduletest" 669865eef222Smrg break 669965eef222Smrg fi 670065eef222Smrg done 670165eef222Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 670256957a04Smrg echo 670365eef222Smrg if test "$linkmode" = prog; then 670465eef222Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 670565eef222Smrg else 670665eef222Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 670765eef222Smrg fi 670865eef222Smrg $ECHO "*** $linklib is not portable!" 670965eef222Smrg fi 671065eef222Smrg if test "$linkmode" = lib && 671165eef222Smrg test "$hardcode_into_libs" = yes; then 671265eef222Smrg # Hardcode the library path. 671365eef222Smrg # Skip directories that are in the system default run-time 671465eef222Smrg # search path. 671565eef222Smrg case " $sys_lib_dlsearch_path " in 671665eef222Smrg *" $absdir "*) ;; 671765eef222Smrg *) 671865eef222Smrg case "$compile_rpath " in 671965eef222Smrg *" $absdir "*) ;; 6720200d7199Smrg *) func_append compile_rpath " $absdir" ;; 672165eef222Smrg esac 672265eef222Smrg ;; 672365eef222Smrg esac 672465eef222Smrg case " $sys_lib_dlsearch_path " in 672565eef222Smrg *" $libdir "*) ;; 672665eef222Smrg *) 672765eef222Smrg case "$finalize_rpath " in 672865eef222Smrg *" $libdir "*) ;; 6729200d7199Smrg *) func_append finalize_rpath " $libdir" ;; 673065eef222Smrg esac 673165eef222Smrg ;; 673265eef222Smrg esac 673365eef222Smrg fi 673465eef222Smrg 673565eef222Smrg if test -n "$old_archive_from_expsyms_cmds"; then 673665eef222Smrg # figure out the soname 673765eef222Smrg set dummy $library_names 673865eef222Smrg shift 673965eef222Smrg realname="$1" 674065eef222Smrg shift 674165eef222Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 674265eef222Smrg # use dlname if we got it. it's perfectly good, no? 674365eef222Smrg if test -n "$dlname"; then 674465eef222Smrg soname="$dlname" 674565eef222Smrg elif test -n "$soname_spec"; then 674665eef222Smrg # bleh windows 674765eef222Smrg case $host in 674865eef222Smrg *cygwin* | mingw* | *cegcc*) 674965eef222Smrg func_arith $current - $age 675065eef222Smrg major=$func_arith_result 675165eef222Smrg versuffix="-$major" 675265eef222Smrg ;; 675365eef222Smrg esac 675465eef222Smrg eval soname=\"$soname_spec\" 675565eef222Smrg else 675665eef222Smrg soname="$realname" 675765eef222Smrg fi 675865eef222Smrg 675965eef222Smrg # Make a new name for the extract_expsyms_cmds to use 676065eef222Smrg soroot="$soname" 676165eef222Smrg func_basename "$soroot" 676265eef222Smrg soname="$func_basename_result" 676365eef222Smrg func_stripname 'lib' '.dll' "$soname" 676465eef222Smrg newlib=libimp-$func_stripname_result.a 676565eef222Smrg 676665eef222Smrg # If the library has no export list, then create one now 676765eef222Smrg if test -f "$output_objdir/$soname-def"; then : 676865eef222Smrg else 676965eef222Smrg func_verbose "extracting exported symbol list from \`$soname'" 677065eef222Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 677165eef222Smrg fi 677265eef222Smrg 677365eef222Smrg # Create $newlib 677465eef222Smrg if test -f "$output_objdir/$newlib"; then :; else 677565eef222Smrg func_verbose "generating import library for \`$soname'" 677665eef222Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 677765eef222Smrg fi 677865eef222Smrg # make sure the library variables are pointing to the new library 677965eef222Smrg dir=$output_objdir 678065eef222Smrg linklib=$newlib 678165eef222Smrg fi # test -n "$old_archive_from_expsyms_cmds" 678265eef222Smrg 6783200d7199Smrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 678465eef222Smrg add_shlibpath= 678565eef222Smrg add_dir= 678665eef222Smrg add= 678765eef222Smrg lib_linked=yes 678865eef222Smrg case $hardcode_action in 678965eef222Smrg immediate | unsupported) 679065eef222Smrg if test "$hardcode_direct" = no; then 679165eef222Smrg add="$dir/$linklib" 679265eef222Smrg case $host in 679365eef222Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 679465eef222Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 679565eef222Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 679665eef222Smrg *-*-unixware7*) add_dir="-L$dir" ;; 679765eef222Smrg *-*-darwin* ) 679865eef222Smrg # if the lib is a (non-dlopened) module then we can not 679965eef222Smrg # link against it, someone is ignoring the earlier warnings 680065eef222Smrg if /usr/bin/file -L $add 2> /dev/null | 680165eef222Smrg $GREP ": [^:]* bundle" >/dev/null ; then 680265eef222Smrg if test "X$dlopenmodule" != "X$lib"; then 680365eef222Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 680465eef222Smrg if test -z "$old_library" ; then 680556957a04Smrg echo 680656957a04Smrg echo "*** And there doesn't seem to be a static archive available" 680756957a04Smrg echo "*** The link will probably fail, sorry" 680865eef222Smrg else 680965eef222Smrg add="$dir/$old_library" 681065eef222Smrg fi 681165eef222Smrg elif test -n "$old_library"; then 681265eef222Smrg add="$dir/$old_library" 681365eef222Smrg fi 681465eef222Smrg fi 681565eef222Smrg esac 681665eef222Smrg elif test "$hardcode_minus_L" = no; then 681765eef222Smrg case $host in 681865eef222Smrg *-*-sunos*) add_shlibpath="$dir" ;; 681965eef222Smrg esac 682065eef222Smrg add_dir="-L$dir" 682165eef222Smrg add="-l$name" 682265eef222Smrg elif test "$hardcode_shlibpath_var" = no; then 682365eef222Smrg add_shlibpath="$dir" 682465eef222Smrg add="-l$name" 682565eef222Smrg else 682665eef222Smrg lib_linked=no 682765eef222Smrg fi 682865eef222Smrg ;; 682965eef222Smrg relink) 683065eef222Smrg if test "$hardcode_direct" = yes && 683165eef222Smrg test "$hardcode_direct_absolute" = no; then 683265eef222Smrg add="$dir/$linklib" 683365eef222Smrg elif test "$hardcode_minus_L" = yes; then 683465eef222Smrg add_dir="-L$dir" 683565eef222Smrg # Try looking first in the location we're being installed to. 683665eef222Smrg if test -n "$inst_prefix_dir"; then 683765eef222Smrg case $libdir in 683865eef222Smrg [\\/]*) 6839200d7199Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 684065eef222Smrg ;; 684165eef222Smrg esac 684265eef222Smrg fi 684365eef222Smrg add="-l$name" 684465eef222Smrg elif test "$hardcode_shlibpath_var" = yes; then 684565eef222Smrg add_shlibpath="$dir" 684665eef222Smrg add="-l$name" 684765eef222Smrg else 684865eef222Smrg lib_linked=no 684965eef222Smrg fi 685065eef222Smrg ;; 685165eef222Smrg *) lib_linked=no ;; 685265eef222Smrg esac 685365eef222Smrg 685465eef222Smrg if test "$lib_linked" != yes; then 685565eef222Smrg func_fatal_configuration "unsupported hardcode properties" 685665eef222Smrg fi 685765eef222Smrg 685865eef222Smrg if test -n "$add_shlibpath"; then 685965eef222Smrg case :$compile_shlibpath: in 686065eef222Smrg *":$add_shlibpath:"*) ;; 6861200d7199Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 686265eef222Smrg esac 686365eef222Smrg fi 686465eef222Smrg if test "$linkmode" = prog; then 686565eef222Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 686665eef222Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 686765eef222Smrg else 686865eef222Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 686965eef222Smrg test -n "$add" && deplibs="$add $deplibs" 687065eef222Smrg if test "$hardcode_direct" != yes && 687165eef222Smrg test "$hardcode_minus_L" != yes && 687265eef222Smrg test "$hardcode_shlibpath_var" = yes; then 687365eef222Smrg case :$finalize_shlibpath: in 687465eef222Smrg *":$libdir:"*) ;; 6875200d7199Smrg *) func_append finalize_shlibpath "$libdir:" ;; 687665eef222Smrg esac 687765eef222Smrg fi 687865eef222Smrg fi 687965eef222Smrg fi 688065eef222Smrg 6881200d7199Smrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 688265eef222Smrg add_shlibpath= 688365eef222Smrg add_dir= 688465eef222Smrg add= 688565eef222Smrg # Finalize command for both is simple: just hardcode it. 688665eef222Smrg if test "$hardcode_direct" = yes && 688765eef222Smrg test "$hardcode_direct_absolute" = no; then 688865eef222Smrg add="$libdir/$linklib" 688965eef222Smrg elif test "$hardcode_minus_L" = yes; then 689065eef222Smrg add_dir="-L$libdir" 689165eef222Smrg add="-l$name" 689265eef222Smrg elif test "$hardcode_shlibpath_var" = yes; then 689365eef222Smrg case :$finalize_shlibpath: in 689465eef222Smrg *":$libdir:"*) ;; 6895200d7199Smrg *) func_append finalize_shlibpath "$libdir:" ;; 689665eef222Smrg esac 689765eef222Smrg add="-l$name" 689865eef222Smrg elif test "$hardcode_automatic" = yes; then 689965eef222Smrg if test -n "$inst_prefix_dir" && 690065eef222Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 690165eef222Smrg add="$inst_prefix_dir$libdir/$linklib" 690265eef222Smrg else 690365eef222Smrg add="$libdir/$linklib" 690465eef222Smrg fi 690565eef222Smrg else 690665eef222Smrg # We cannot seem to hardcode it, guess we'll fake it. 690765eef222Smrg add_dir="-L$libdir" 690865eef222Smrg # Try looking first in the location we're being installed to. 690965eef222Smrg if test -n "$inst_prefix_dir"; then 691065eef222Smrg case $libdir in 691165eef222Smrg [\\/]*) 6912200d7199Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 691365eef222Smrg ;; 691465eef222Smrg esac 691565eef222Smrg fi 691665eef222Smrg add="-l$name" 691765eef222Smrg fi 691865eef222Smrg 691965eef222Smrg if test "$linkmode" = prog; then 692065eef222Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 692165eef222Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 692265eef222Smrg else 692365eef222Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 692465eef222Smrg test -n "$add" && deplibs="$add $deplibs" 692565eef222Smrg fi 692665eef222Smrg fi 692765eef222Smrg elif test "$linkmode" = prog; then 692865eef222Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 692965eef222Smrg # is not unsupported. This is valid on all known static and 693065eef222Smrg # shared platforms. 693165eef222Smrg if test "$hardcode_direct" != unsupported; then 693265eef222Smrg test -n "$old_library" && linklib="$old_library" 693365eef222Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 693465eef222Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 693565eef222Smrg else 693665eef222Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 693765eef222Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 693865eef222Smrg fi 693965eef222Smrg elif test "$build_libtool_libs" = yes; then 694065eef222Smrg # Not a shared library 694165eef222Smrg if test "$deplibs_check_method" != pass_all; then 694265eef222Smrg # We're trying link a shared library against a static one 694365eef222Smrg # but the system doesn't support it. 694465eef222Smrg 694565eef222Smrg # Just print a warning and add the library to dependency_libs so 694665eef222Smrg # that the program can be linked against the static library. 694756957a04Smrg echo 694865eef222Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 694956957a04Smrg echo "*** I have the capability to make that library automatically link in when" 695056957a04Smrg echo "*** you link to this library. But I can only do this if you have a" 695156957a04Smrg echo "*** shared version of the library, which you do not appear to have." 695265eef222Smrg if test "$module" = yes; then 695356957a04Smrg echo "*** But as you try to build a module library, libtool will still create " 695456957a04Smrg echo "*** a static module, that should work as long as the dlopening application" 695556957a04Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 695665eef222Smrg if test -z "$global_symbol_pipe"; then 695756957a04Smrg echo 695856957a04Smrg echo "*** However, this would only work if libtool was able to extract symbol" 695956957a04Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 696056957a04Smrg echo "*** not find such a program. So, this module is probably useless." 696156957a04Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 696265eef222Smrg fi 696365eef222Smrg if test "$build_old_libs" = no; then 696465eef222Smrg build_libtool_libs=module 696565eef222Smrg build_old_libs=yes 696665eef222Smrg else 696765eef222Smrg build_libtool_libs=no 696865eef222Smrg fi 696965eef222Smrg fi 697065eef222Smrg else 697165eef222Smrg deplibs="$dir/$old_library $deplibs" 697265eef222Smrg link_static=yes 697365eef222Smrg fi 697465eef222Smrg fi # link shared/static library? 697565eef222Smrg 697665eef222Smrg if test "$linkmode" = lib; then 697765eef222Smrg if test -n "$dependency_libs" && 697865eef222Smrg { test "$hardcode_into_libs" != yes || 697965eef222Smrg test "$build_old_libs" = yes || 698065eef222Smrg test "$link_static" = yes; }; then 698165eef222Smrg # Extract -R from dependency_libs 698265eef222Smrg temp_deplibs= 698365eef222Smrg for libdir in $dependency_libs; do 698465eef222Smrg case $libdir in 698565eef222Smrg -R*) func_stripname '-R' '' "$libdir" 698665eef222Smrg temp_xrpath=$func_stripname_result 698765eef222Smrg case " $xrpath " in 698865eef222Smrg *" $temp_xrpath "*) ;; 6989200d7199Smrg *) func_append xrpath " $temp_xrpath";; 699065eef222Smrg esac;; 6991200d7199Smrg *) func_append temp_deplibs " $libdir";; 699265eef222Smrg esac 699365eef222Smrg done 699465eef222Smrg dependency_libs="$temp_deplibs" 699565eef222Smrg fi 699665eef222Smrg 6997200d7199Smrg func_append newlib_search_path " $absdir" 699865eef222Smrg # Link against this library 699965eef222Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 700065eef222Smrg # ... and its dependency_libs 700165eef222Smrg tmp_libs= 700265eef222Smrg for deplib in $dependency_libs; do 700365eef222Smrg newdependency_libs="$deplib $newdependency_libs" 7004200d7199Smrg case $deplib in 7005200d7199Smrg -L*) func_stripname '-L' '' "$deplib" 7006200d7199Smrg func_resolve_sysroot "$func_stripname_result";; 7007200d7199Smrg *) func_resolve_sysroot "$deplib" ;; 7008200d7199Smrg esac 7009200d7199Smrg if $opt_preserve_dup_deps ; then 701065eef222Smrg case "$tmp_libs " in 7011200d7199Smrg *" $func_resolve_sysroot_result "*) 7012200d7199Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 701365eef222Smrg esac 701465eef222Smrg fi 7015200d7199Smrg func_append tmp_libs " $func_resolve_sysroot_result" 701665eef222Smrg done 701765eef222Smrg 701865eef222Smrg if test "$link_all_deplibs" != no; then 701965eef222Smrg # Add the search paths of all dependency libraries 702065eef222Smrg for deplib in $dependency_libs; do 702156957a04Smrg path= 702265eef222Smrg case $deplib in 702365eef222Smrg -L*) path="$deplib" ;; 702465eef222Smrg *.la) 7025200d7199Smrg func_resolve_sysroot "$deplib" 7026200d7199Smrg deplib=$func_resolve_sysroot_result 702765eef222Smrg func_dirname "$deplib" "" "." 7028200d7199Smrg dir=$func_dirname_result 702965eef222Smrg # We need an absolute path. 703065eef222Smrg case $dir in 703165eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 703265eef222Smrg *) 703365eef222Smrg absdir=`cd "$dir" && pwd` 703465eef222Smrg if test -z "$absdir"; then 703565eef222Smrg func_warning "cannot determine absolute directory name of \`$dir'" 703665eef222Smrg absdir="$dir" 703765eef222Smrg fi 703865eef222Smrg ;; 703965eef222Smrg esac 704065eef222Smrg if $GREP "^installed=no" $deplib > /dev/null; then 704165eef222Smrg case $host in 704265eef222Smrg *-*-darwin*) 704365eef222Smrg depdepl= 704465eef222Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 704565eef222Smrg if test -n "$deplibrary_names" ; then 704665eef222Smrg for tmp in $deplibrary_names ; do 704765eef222Smrg depdepl=$tmp 704865eef222Smrg done 704965eef222Smrg if test -f "$absdir/$objdir/$depdepl" ; then 705065eef222Smrg depdepl="$absdir/$objdir/$depdepl" 705165eef222Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 705265eef222Smrg if test -z "$darwin_install_name"; then 705365eef222Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 705465eef222Smrg fi 7055200d7199Smrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 7056200d7199Smrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 705765eef222Smrg path= 705865eef222Smrg fi 705965eef222Smrg fi 706065eef222Smrg ;; 706165eef222Smrg *) 706265eef222Smrg path="-L$absdir/$objdir" 706365eef222Smrg ;; 706465eef222Smrg esac 706565eef222Smrg else 706665eef222Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 706765eef222Smrg test -z "$libdir" && \ 706865eef222Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 706965eef222Smrg test "$absdir" != "$libdir" && \ 707065eef222Smrg func_warning "\`$deplib' seems to be moved" 707165eef222Smrg 707265eef222Smrg path="-L$absdir" 707365eef222Smrg fi 707465eef222Smrg ;; 707565eef222Smrg esac 707665eef222Smrg case " $deplibs " in 707765eef222Smrg *" $path "*) ;; 707865eef222Smrg *) deplibs="$path $deplibs" ;; 707965eef222Smrg esac 708065eef222Smrg done 708165eef222Smrg fi # link_all_deplibs != no 708265eef222Smrg fi # linkmode = lib 708365eef222Smrg done # for deplib in $libs 708465eef222Smrg if test "$pass" = link; then 708565eef222Smrg if test "$linkmode" = "prog"; then 708665eef222Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 708765eef222Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 708865eef222Smrg else 708956957a04Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 709065eef222Smrg fi 709165eef222Smrg fi 709265eef222Smrg dependency_libs="$newdependency_libs" 709365eef222Smrg if test "$pass" = dlpreopen; then 709465eef222Smrg # Link the dlpreopened libraries before other libraries 709565eef222Smrg for deplib in $save_deplibs; do 709665eef222Smrg deplibs="$deplib $deplibs" 709765eef222Smrg done 709865eef222Smrg fi 709965eef222Smrg if test "$pass" != dlopen; then 710065eef222Smrg if test "$pass" != conv; then 710165eef222Smrg # Make sure lib_search_path contains only unique directories. 710265eef222Smrg lib_search_path= 710365eef222Smrg for dir in $newlib_search_path; do 710465eef222Smrg case "$lib_search_path " in 710565eef222Smrg *" $dir "*) ;; 7106200d7199Smrg *) func_append lib_search_path " $dir" ;; 710765eef222Smrg esac 710865eef222Smrg done 710965eef222Smrg newlib_search_path= 711065eef222Smrg fi 711165eef222Smrg 711265eef222Smrg if test "$linkmode,$pass" != "prog,link"; then 711365eef222Smrg vars="deplibs" 711465eef222Smrg else 711565eef222Smrg vars="compile_deplibs finalize_deplibs" 711665eef222Smrg fi 711765eef222Smrg for var in $vars dependency_libs; do 711865eef222Smrg # Add libraries to $var in reverse order 711965eef222Smrg eval tmp_libs=\"\$$var\" 712065eef222Smrg new_libs= 712165eef222Smrg for deplib in $tmp_libs; do 712265eef222Smrg # FIXME: Pedantically, this is the right thing to do, so 712365eef222Smrg # that some nasty dependency loop isn't accidentally 712465eef222Smrg # broken: 712565eef222Smrg #new_libs="$deplib $new_libs" 712665eef222Smrg # Pragmatically, this seems to cause very few problems in 712765eef222Smrg # practice: 712865eef222Smrg case $deplib in 712965eef222Smrg -L*) new_libs="$deplib $new_libs" ;; 713065eef222Smrg -R*) ;; 713165eef222Smrg *) 713265eef222Smrg # And here is the reason: when a library appears more 713365eef222Smrg # than once as an explicit dependence of a library, or 713465eef222Smrg # is implicitly linked in more than once by the 713565eef222Smrg # compiler, it is considered special, and multiple 713665eef222Smrg # occurrences thereof are not removed. Compare this 713765eef222Smrg # with having the same library being listed as a 713865eef222Smrg # dependency of multiple other libraries: in this case, 713965eef222Smrg # we know (pedantically, we assume) the library does not 714065eef222Smrg # need to be listed more than once, so we keep only the 714165eef222Smrg # last copy. This is not always right, but it is rare 714265eef222Smrg # enough that we require users that really mean to play 714365eef222Smrg # such unportable linking tricks to link the library 714465eef222Smrg # using -Wl,-lname, so that libtool does not consider it 714565eef222Smrg # for duplicate removal. 714665eef222Smrg case " $specialdeplibs " in 714765eef222Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 714865eef222Smrg *) 714965eef222Smrg case " $new_libs " in 715065eef222Smrg *" $deplib "*) ;; 715165eef222Smrg *) new_libs="$deplib $new_libs" ;; 715265eef222Smrg esac 715365eef222Smrg ;; 715465eef222Smrg esac 715565eef222Smrg ;; 715665eef222Smrg esac 715765eef222Smrg done 715865eef222Smrg tmp_libs= 715965eef222Smrg for deplib in $new_libs; do 716065eef222Smrg case $deplib in 716165eef222Smrg -L*) 716265eef222Smrg case " $tmp_libs " in 716365eef222Smrg *" $deplib "*) ;; 7164200d7199Smrg *) func_append tmp_libs " $deplib" ;; 716565eef222Smrg esac 716665eef222Smrg ;; 7167200d7199Smrg *) func_append tmp_libs " $deplib" ;; 716865eef222Smrg esac 716965eef222Smrg done 717065eef222Smrg eval $var=\"$tmp_libs\" 717165eef222Smrg done # for var 717265eef222Smrg fi 717365eef222Smrg # Last step: remove runtime libs from dependency_libs 717465eef222Smrg # (they stay in deplibs) 717565eef222Smrg tmp_libs= 717665eef222Smrg for i in $dependency_libs ; do 717765eef222Smrg case " $predeps $postdeps $compiler_lib_search_path " in 717865eef222Smrg *" $i "*) 717965eef222Smrg i="" 718065eef222Smrg ;; 718165eef222Smrg esac 718265eef222Smrg if test -n "$i" ; then 7183200d7199Smrg func_append tmp_libs " $i" 718465eef222Smrg fi 718565eef222Smrg done 718665eef222Smrg dependency_libs=$tmp_libs 718765eef222Smrg done # for pass 718865eef222Smrg if test "$linkmode" = prog; then 718965eef222Smrg dlfiles="$newdlfiles" 719065eef222Smrg fi 719165eef222Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 719265eef222Smrg dlprefiles="$newdlprefiles" 719365eef222Smrg fi 719465eef222Smrg 719565eef222Smrg case $linkmode in 719665eef222Smrg oldlib) 719765eef222Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 719865eef222Smrg func_warning "\`-dlopen' is ignored for archives" 719965eef222Smrg fi 720065eef222Smrg 720165eef222Smrg case " $deplibs" in 720265eef222Smrg *\ -l* | *\ -L*) 720365eef222Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 720465eef222Smrg esac 720565eef222Smrg 720665eef222Smrg test -n "$rpath" && \ 720765eef222Smrg func_warning "\`-rpath' is ignored for archives" 720865eef222Smrg 720965eef222Smrg test -n "$xrpath" && \ 721065eef222Smrg func_warning "\`-R' is ignored for archives" 721165eef222Smrg 721265eef222Smrg test -n "$vinfo" && \ 721365eef222Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 721465eef222Smrg 721565eef222Smrg test -n "$release" && \ 721665eef222Smrg func_warning "\`-release' is ignored for archives" 721765eef222Smrg 721865eef222Smrg test -n "$export_symbols$export_symbols_regex" && \ 721965eef222Smrg func_warning "\`-export-symbols' is ignored for archives" 722065eef222Smrg 722165eef222Smrg # Now set the variables for building old libraries. 722265eef222Smrg build_libtool_libs=no 722365eef222Smrg oldlibs="$output" 7224200d7199Smrg func_append objs "$old_deplibs" 722565eef222Smrg ;; 722665eef222Smrg 722765eef222Smrg lib) 722865eef222Smrg # Make sure we only generate libraries of the form `libNAME.la'. 722965eef222Smrg case $outputname in 723065eef222Smrg lib*) 723165eef222Smrg func_stripname 'lib' '.la' "$outputname" 723265eef222Smrg name=$func_stripname_result 723365eef222Smrg eval shared_ext=\"$shrext_cmds\" 723465eef222Smrg eval libname=\"$libname_spec\" 723565eef222Smrg ;; 723665eef222Smrg *) 723765eef222Smrg test "$module" = no && \ 723865eef222Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 723965eef222Smrg 724065eef222Smrg if test "$need_lib_prefix" != no; then 724165eef222Smrg # Add the "lib" prefix for modules if required 724265eef222Smrg func_stripname '' '.la' "$outputname" 724365eef222Smrg name=$func_stripname_result 724465eef222Smrg eval shared_ext=\"$shrext_cmds\" 724565eef222Smrg eval libname=\"$libname_spec\" 724665eef222Smrg else 724765eef222Smrg func_stripname '' '.la' "$outputname" 724865eef222Smrg libname=$func_stripname_result 724965eef222Smrg fi 725065eef222Smrg ;; 725165eef222Smrg esac 725265eef222Smrg 725365eef222Smrg if test -n "$objs"; then 725465eef222Smrg if test "$deplibs_check_method" != pass_all; then 725565eef222Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 725665eef222Smrg else 725756957a04Smrg echo 725865eef222Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 725965eef222Smrg $ECHO "*** objects $objs is not portable!" 7260200d7199Smrg func_append libobjs " $objs" 726165eef222Smrg fi 726265eef222Smrg fi 726365eef222Smrg 726465eef222Smrg test "$dlself" != no && \ 726565eef222Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 726665eef222Smrg 726765eef222Smrg set dummy $rpath 726865eef222Smrg shift 726965eef222Smrg test "$#" -gt 1 && \ 727065eef222Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 727165eef222Smrg 727265eef222Smrg install_libdir="$1" 727365eef222Smrg 727465eef222Smrg oldlibs= 727565eef222Smrg if test -z "$rpath"; then 727665eef222Smrg if test "$build_libtool_libs" = yes; then 727765eef222Smrg # Building a libtool convenience library. 727865eef222Smrg # Some compilers have problems with a `.al' extension so 727965eef222Smrg # convenience libraries should have the same extension an 728065eef222Smrg # archive normally would. 728165eef222Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 728265eef222Smrg build_libtool_libs=convenience 728365eef222Smrg build_old_libs=yes 728465eef222Smrg fi 728565eef222Smrg 728665eef222Smrg test -n "$vinfo" && \ 728765eef222Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 728865eef222Smrg 728965eef222Smrg test -n "$release" && \ 729065eef222Smrg func_warning "\`-release' is ignored for convenience libraries" 729165eef222Smrg else 729265eef222Smrg 729365eef222Smrg # Parse the version information argument. 729465eef222Smrg save_ifs="$IFS"; IFS=':' 729565eef222Smrg set dummy $vinfo 0 0 0 729665eef222Smrg shift 729765eef222Smrg IFS="$save_ifs" 729865eef222Smrg 729965eef222Smrg test -n "$7" && \ 730065eef222Smrg func_fatal_help "too many parameters to \`-version-info'" 730165eef222Smrg 730265eef222Smrg # convert absolute version numbers to libtool ages 730365eef222Smrg # this retains compatibility with .la files and attempts 730465eef222Smrg # to make the code below a bit more comprehensible 730565eef222Smrg 730665eef222Smrg case $vinfo_number in 730765eef222Smrg yes) 730865eef222Smrg number_major="$1" 730965eef222Smrg number_minor="$2" 731065eef222Smrg number_revision="$3" 731165eef222Smrg # 731265eef222Smrg # There are really only two kinds -- those that 731365eef222Smrg # use the current revision as the major version 731465eef222Smrg # and those that subtract age and use age as 731565eef222Smrg # a minor version. But, then there is irix 731665eef222Smrg # which has an extra 1 added just for fun 731765eef222Smrg # 731865eef222Smrg case $version_type in 731965eef222Smrg darwin|linux|osf|windows|none) 732065eef222Smrg func_arith $number_major + $number_minor 732165eef222Smrg current=$func_arith_result 732265eef222Smrg age="$number_minor" 732365eef222Smrg revision="$number_revision" 732465eef222Smrg ;; 732556957a04Smrg freebsd-aout|freebsd-elf|qnx|sunos) 732665eef222Smrg current="$number_major" 732765eef222Smrg revision="$number_minor" 732865eef222Smrg age="0" 732965eef222Smrg ;; 733065eef222Smrg irix|nonstopux) 733165eef222Smrg func_arith $number_major + $number_minor 733265eef222Smrg current=$func_arith_result 733365eef222Smrg age="$number_minor" 733465eef222Smrg revision="$number_minor" 733565eef222Smrg lt_irix_increment=no 733665eef222Smrg ;; 733765eef222Smrg esac 733865eef222Smrg ;; 733965eef222Smrg no) 734065eef222Smrg current="$1" 734165eef222Smrg revision="$2" 734265eef222Smrg age="$3" 734365eef222Smrg ;; 734465eef222Smrg esac 734565eef222Smrg 734665eef222Smrg # Check that each of the things are valid numbers. 734765eef222Smrg case $current in 734865eef222Smrg 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]) ;; 734965eef222Smrg *) 735065eef222Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 735165eef222Smrg func_fatal_error "\`$vinfo' is not valid version information" 735265eef222Smrg ;; 735365eef222Smrg esac 735465eef222Smrg 735565eef222Smrg case $revision in 735665eef222Smrg 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]) ;; 735765eef222Smrg *) 735865eef222Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 735965eef222Smrg func_fatal_error "\`$vinfo' is not valid version information" 736065eef222Smrg ;; 736165eef222Smrg esac 736265eef222Smrg 736365eef222Smrg case $age in 736465eef222Smrg 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]) ;; 736565eef222Smrg *) 736665eef222Smrg func_error "AGE \`$age' must be a nonnegative integer" 736765eef222Smrg func_fatal_error "\`$vinfo' is not valid version information" 736865eef222Smrg ;; 736965eef222Smrg esac 737065eef222Smrg 737165eef222Smrg if test "$age" -gt "$current"; then 737265eef222Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 737365eef222Smrg func_fatal_error "\`$vinfo' is not valid version information" 737465eef222Smrg fi 737565eef222Smrg 737665eef222Smrg # Calculate the version variables. 737765eef222Smrg major= 737865eef222Smrg versuffix= 737965eef222Smrg verstring= 738065eef222Smrg case $version_type in 738165eef222Smrg none) ;; 738265eef222Smrg 738365eef222Smrg darwin) 738465eef222Smrg # Like Linux, but with the current version available in 738565eef222Smrg # verstring for coding it into the library header 738665eef222Smrg func_arith $current - $age 738765eef222Smrg major=.$func_arith_result 738865eef222Smrg versuffix="$major.$age.$revision" 738965eef222Smrg # Darwin ld doesn't like 0 for these options... 739065eef222Smrg func_arith $current + 1 739165eef222Smrg minor_current=$func_arith_result 739265eef222Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 739365eef222Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 739465eef222Smrg ;; 739565eef222Smrg 739665eef222Smrg freebsd-aout) 739765eef222Smrg major=".$current" 739865eef222Smrg versuffix=".$current.$revision"; 739965eef222Smrg ;; 740065eef222Smrg 740165eef222Smrg freebsd-elf) 740265eef222Smrg major=".$current" 740365eef222Smrg versuffix=".$current" 740465eef222Smrg ;; 740565eef222Smrg 740665eef222Smrg irix | nonstopux) 740765eef222Smrg if test "X$lt_irix_increment" = "Xno"; then 740865eef222Smrg func_arith $current - $age 740965eef222Smrg else 741065eef222Smrg func_arith $current - $age + 1 741165eef222Smrg fi 741265eef222Smrg major=$func_arith_result 741365eef222Smrg 741465eef222Smrg case $version_type in 741565eef222Smrg nonstopux) verstring_prefix=nonstopux ;; 741665eef222Smrg *) verstring_prefix=sgi ;; 741765eef222Smrg esac 741865eef222Smrg verstring="$verstring_prefix$major.$revision" 741965eef222Smrg 742065eef222Smrg # Add in all the interfaces that we are compatible with. 742165eef222Smrg loop=$revision 742265eef222Smrg while test "$loop" -ne 0; do 742365eef222Smrg func_arith $revision - $loop 742465eef222Smrg iface=$func_arith_result 742565eef222Smrg func_arith $loop - 1 742665eef222Smrg loop=$func_arith_result 742765eef222Smrg verstring="$verstring_prefix$major.$iface:$verstring" 742865eef222Smrg done 742965eef222Smrg 743065eef222Smrg # Before this point, $major must not contain `.'. 743165eef222Smrg major=.$major 743265eef222Smrg versuffix="$major.$revision" 743365eef222Smrg ;; 743465eef222Smrg 743565eef222Smrg linux) 743665eef222Smrg func_arith $current - $age 743765eef222Smrg major=.$func_arith_result 743865eef222Smrg versuffix="$major.$age.$revision" 743965eef222Smrg ;; 744065eef222Smrg 744165eef222Smrg osf) 744265eef222Smrg func_arith $current - $age 744365eef222Smrg major=.$func_arith_result 744465eef222Smrg versuffix=".$current.$age.$revision" 744565eef222Smrg verstring="$current.$age.$revision" 744665eef222Smrg 744765eef222Smrg # Add in all the interfaces that we are compatible with. 744865eef222Smrg loop=$age 744965eef222Smrg while test "$loop" -ne 0; do 745065eef222Smrg func_arith $current - $loop 745165eef222Smrg iface=$func_arith_result 745265eef222Smrg func_arith $loop - 1 745365eef222Smrg loop=$func_arith_result 745465eef222Smrg verstring="$verstring:${iface}.0" 745565eef222Smrg done 745665eef222Smrg 745765eef222Smrg # Make executables depend on our current version. 7458200d7199Smrg func_append verstring ":${current}.0" 745965eef222Smrg ;; 746065eef222Smrg 746165eef222Smrg qnx) 746265eef222Smrg major=".$current" 746365eef222Smrg versuffix=".$current" 746465eef222Smrg ;; 746565eef222Smrg 746665eef222Smrg sunos) 746765eef222Smrg major=".$current" 746865eef222Smrg versuffix=".$current.$revision" 746965eef222Smrg ;; 747065eef222Smrg 747165eef222Smrg windows) 747265eef222Smrg # Use '-' rather than '.', since we only want one 747365eef222Smrg # extension on DOS 8.3 filesystems. 747465eef222Smrg func_arith $current - $age 747565eef222Smrg major=$func_arith_result 747665eef222Smrg versuffix="-$major" 747765eef222Smrg ;; 747865eef222Smrg 747965eef222Smrg *) 748065eef222Smrg func_fatal_configuration "unknown library version type \`$version_type'" 748165eef222Smrg ;; 748265eef222Smrg esac 748365eef222Smrg 748465eef222Smrg # Clear the version info if we defaulted, and they specified a release. 748565eef222Smrg if test -z "$vinfo" && test -n "$release"; then 748665eef222Smrg major= 748765eef222Smrg case $version_type in 748865eef222Smrg darwin) 748965eef222Smrg # we can't check for "0.0" in archive_cmds due to quoting 749065eef222Smrg # problems, so we reset it completely 749165eef222Smrg verstring= 749265eef222Smrg ;; 749365eef222Smrg *) 749465eef222Smrg verstring="0.0" 749565eef222Smrg ;; 749665eef222Smrg esac 749765eef222Smrg if test "$need_version" = no; then 749865eef222Smrg versuffix= 749965eef222Smrg else 750065eef222Smrg versuffix=".0.0" 750165eef222Smrg fi 750265eef222Smrg fi 750365eef222Smrg 750465eef222Smrg # Remove version info from name if versioning should be avoided 750565eef222Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 750665eef222Smrg major= 750765eef222Smrg versuffix= 750865eef222Smrg verstring="" 750965eef222Smrg fi 751065eef222Smrg 751165eef222Smrg # Check to see if the archive will have undefined symbols. 751265eef222Smrg if test "$allow_undefined" = yes; then 751365eef222Smrg if test "$allow_undefined_flag" = unsupported; then 751465eef222Smrg func_warning "undefined symbols not allowed in $host shared libraries" 751565eef222Smrg build_libtool_libs=no 751665eef222Smrg build_old_libs=yes 751765eef222Smrg fi 751865eef222Smrg else 751965eef222Smrg # Don't allow undefined symbols. 752065eef222Smrg allow_undefined_flag="$no_undefined_flag" 752165eef222Smrg fi 752265eef222Smrg 752365eef222Smrg fi 752465eef222Smrg 752565eef222Smrg func_generate_dlsyms "$libname" "$libname" "yes" 7526200d7199Smrg func_append libobjs " $symfileobj" 752765eef222Smrg test "X$libobjs" = "X " && libobjs= 752865eef222Smrg 7529200d7199Smrg if test "$opt_mode" != relink; then 753065eef222Smrg # Remove our outputs, but don't remove object files since they 753165eef222Smrg # may have been created when compiling PIC objects. 753265eef222Smrg removelist= 753365eef222Smrg tempremovelist=`$ECHO "$output_objdir/*"` 753465eef222Smrg for p in $tempremovelist; do 753565eef222Smrg case $p in 753665eef222Smrg *.$objext | *.gcno) 753765eef222Smrg ;; 753865eef222Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 753965eef222Smrg if test "X$precious_files_regex" != "X"; then 754065eef222Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 754165eef222Smrg then 754265eef222Smrg continue 754365eef222Smrg fi 754465eef222Smrg fi 7545200d7199Smrg func_append removelist " $p" 754665eef222Smrg ;; 754765eef222Smrg *) ;; 754865eef222Smrg esac 754965eef222Smrg done 755065eef222Smrg test -n "$removelist" && \ 755165eef222Smrg func_show_eval "${RM}r \$removelist" 755265eef222Smrg fi 755365eef222Smrg 755465eef222Smrg # Now set the variables for building old libraries. 755565eef222Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7556200d7199Smrg func_append oldlibs " $output_objdir/$libname.$libext" 755765eef222Smrg 755865eef222Smrg # Transform .lo files to .o files. 755956957a04Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 756065eef222Smrg fi 756165eef222Smrg 756265eef222Smrg # Eliminate all temporary directories. 756365eef222Smrg #for path in $notinst_path; do 756456957a04Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 756556957a04Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 756656957a04Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 756765eef222Smrg #done 756865eef222Smrg 756965eef222Smrg if test -n "$xrpath"; then 757065eef222Smrg # If the user specified any rpath flags, then add them. 757165eef222Smrg temp_xrpath= 757265eef222Smrg for libdir in $xrpath; do 7573200d7199Smrg func_replace_sysroot "$libdir" 7574200d7199Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 757565eef222Smrg case "$finalize_rpath " in 757665eef222Smrg *" $libdir "*) ;; 7577200d7199Smrg *) func_append finalize_rpath " $libdir" ;; 757865eef222Smrg esac 757965eef222Smrg done 758065eef222Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 758165eef222Smrg dependency_libs="$temp_xrpath $dependency_libs" 758265eef222Smrg fi 758365eef222Smrg fi 758465eef222Smrg 758565eef222Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 758665eef222Smrg old_dlfiles="$dlfiles" 758765eef222Smrg dlfiles= 758865eef222Smrg for lib in $old_dlfiles; do 758965eef222Smrg case " $dlprefiles $dlfiles " in 759065eef222Smrg *" $lib "*) ;; 7591200d7199Smrg *) func_append dlfiles " $lib" ;; 759265eef222Smrg esac 759365eef222Smrg done 759465eef222Smrg 759565eef222Smrg # Make sure dlprefiles contains only unique files 759665eef222Smrg old_dlprefiles="$dlprefiles" 759765eef222Smrg dlprefiles= 759865eef222Smrg for lib in $old_dlprefiles; do 759965eef222Smrg case "$dlprefiles " in 760065eef222Smrg *" $lib "*) ;; 7601200d7199Smrg *) func_append dlprefiles " $lib" ;; 760265eef222Smrg esac 760365eef222Smrg done 760465eef222Smrg 760565eef222Smrg if test "$build_libtool_libs" = yes; then 760665eef222Smrg if test -n "$rpath"; then 760765eef222Smrg case $host in 760856957a04Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 760965eef222Smrg # these systems don't actually have a c library (as such)! 761065eef222Smrg ;; 761165eef222Smrg *-*-rhapsody* | *-*-darwin1.[012]) 761265eef222Smrg # Rhapsody C library is in the System framework 7613200d7199Smrg func_append deplibs " System.ltframework" 761465eef222Smrg ;; 761565eef222Smrg *-*-netbsd*) 761665eef222Smrg # Don't link with libc until the a.out ld.so is fixed. 761765eef222Smrg ;; 761865eef222Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 761965eef222Smrg # Do not include libc due to us having libc/libc_r. 762065eef222Smrg ;; 762165eef222Smrg *-*-sco3.2v5* | *-*-sco5v6*) 762265eef222Smrg # Causes problems with __ctype 762365eef222Smrg ;; 762465eef222Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 762565eef222Smrg # Compiler inserts libc in the correct place for threads to work 762665eef222Smrg ;; 762765eef222Smrg *) 762865eef222Smrg # Add libc to deplibs on all other systems if necessary. 762965eef222Smrg if test "$build_libtool_need_lc" = "yes"; then 7630200d7199Smrg func_append deplibs " -lc" 763165eef222Smrg fi 763265eef222Smrg ;; 763365eef222Smrg esac 763465eef222Smrg fi 763565eef222Smrg 763665eef222Smrg # Transform deplibs into only deplibs that can be linked in shared. 763765eef222Smrg name_save=$name 763865eef222Smrg libname_save=$libname 763965eef222Smrg release_save=$release 764065eef222Smrg versuffix_save=$versuffix 764165eef222Smrg major_save=$major 764265eef222Smrg # I'm not sure if I'm treating the release correctly. I think 764365eef222Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 764465eef222Smrg # add it in twice. Is that correct? 764565eef222Smrg release="" 764665eef222Smrg versuffix="" 764765eef222Smrg major="" 764865eef222Smrg newdeplibs= 764965eef222Smrg droppeddeps=no 765065eef222Smrg case $deplibs_check_method in 765165eef222Smrg pass_all) 765265eef222Smrg # Don't check for shared/static. Everything works. 765365eef222Smrg # This might be a little naive. We might want to check 765465eef222Smrg # whether the library exists or not. But this is on 765565eef222Smrg # osf3 & osf4 and I'm not really sure... Just 765665eef222Smrg # implementing what was already the behavior. 765765eef222Smrg newdeplibs=$deplibs 765865eef222Smrg ;; 765965eef222Smrg test_compile) 766065eef222Smrg # This code stresses the "libraries are programs" paradigm to its 766165eef222Smrg # limits. Maybe even breaks it. We compile a program, linking it 766265eef222Smrg # against the deplibs as a proxy for the library. Then we can check 766365eef222Smrg # whether they linked in statically or dynamically with ldd. 766465eef222Smrg $opt_dry_run || $RM conftest.c 766565eef222Smrg cat > conftest.c <<EOF 766665eef222Smrg int main() { return 0; } 766765eef222SmrgEOF 766865eef222Smrg $opt_dry_run || $RM conftest 766965eef222Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 767065eef222Smrg ldd_output=`ldd conftest` 767165eef222Smrg for i in $deplibs; do 767265eef222Smrg case $i in 767365eef222Smrg -l*) 767465eef222Smrg func_stripname -l '' "$i" 767565eef222Smrg name=$func_stripname_result 767665eef222Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 767765eef222Smrg case " $predeps $postdeps " in 767865eef222Smrg *" $i "*) 7679200d7199Smrg func_append newdeplibs " $i" 768065eef222Smrg i="" 768165eef222Smrg ;; 768265eef222Smrg esac 768365eef222Smrg fi 768465eef222Smrg if test -n "$i" ; then 768565eef222Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 768665eef222Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 768765eef222Smrg set dummy $deplib_matches; shift 768865eef222Smrg deplib_match=$1 768965eef222Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7690200d7199Smrg func_append newdeplibs " $i" 769165eef222Smrg else 769265eef222Smrg droppeddeps=yes 769356957a04Smrg echo 769465eef222Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 769556957a04Smrg echo "*** I have the capability to make that library automatically link in when" 769656957a04Smrg echo "*** you link to this library. But I can only do this if you have a" 769756957a04Smrg echo "*** shared version of the library, which I believe you do not have" 769856957a04Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 769956957a04Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 770065eef222Smrg fi 770165eef222Smrg fi 770265eef222Smrg ;; 770365eef222Smrg *) 7704200d7199Smrg func_append newdeplibs " $i" 770565eef222Smrg ;; 770665eef222Smrg esac 770765eef222Smrg done 770865eef222Smrg else 770965eef222Smrg # Error occurred in the first compile. Let's try to salvage 771065eef222Smrg # the situation: Compile a separate program for each library. 771165eef222Smrg for i in $deplibs; do 771265eef222Smrg case $i in 771365eef222Smrg -l*) 771465eef222Smrg func_stripname -l '' "$i" 771565eef222Smrg name=$func_stripname_result 771665eef222Smrg $opt_dry_run || $RM conftest 771765eef222Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 771865eef222Smrg ldd_output=`ldd conftest` 771965eef222Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 772065eef222Smrg case " $predeps $postdeps " in 772165eef222Smrg *" $i "*) 7722200d7199Smrg func_append newdeplibs " $i" 772365eef222Smrg i="" 772465eef222Smrg ;; 772565eef222Smrg esac 772665eef222Smrg fi 772765eef222Smrg if test -n "$i" ; then 772865eef222Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 772965eef222Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 773065eef222Smrg set dummy $deplib_matches; shift 773165eef222Smrg deplib_match=$1 773265eef222Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7733200d7199Smrg func_append newdeplibs " $i" 773465eef222Smrg else 773565eef222Smrg droppeddeps=yes 773656957a04Smrg echo 773765eef222Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 773856957a04Smrg echo "*** I have the capability to make that library automatically link in when" 773956957a04Smrg echo "*** you link to this library. But I can only do this if you have a" 774056957a04Smrg echo "*** shared version of the library, which you do not appear to have" 774156957a04Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 774256957a04Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 774365eef222Smrg fi 774465eef222Smrg fi 774565eef222Smrg else 774665eef222Smrg droppeddeps=yes 774756957a04Smrg echo 774865eef222Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 774956957a04Smrg echo "*** make it link in! You will probably need to install it or some" 775056957a04Smrg echo "*** library that it depends on before this library will be fully" 775156957a04Smrg echo "*** functional. Installing it before continuing would be even better." 775265eef222Smrg fi 775365eef222Smrg ;; 775465eef222Smrg *) 7755200d7199Smrg func_append newdeplibs " $i" 775665eef222Smrg ;; 775765eef222Smrg esac 775865eef222Smrg done 775965eef222Smrg fi 776065eef222Smrg ;; 776165eef222Smrg file_magic*) 776265eef222Smrg set dummy $deplibs_check_method; shift 776365eef222Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 776465eef222Smrg for a_deplib in $deplibs; do 776565eef222Smrg case $a_deplib in 776665eef222Smrg -l*) 776765eef222Smrg func_stripname -l '' "$a_deplib" 776865eef222Smrg name=$func_stripname_result 776965eef222Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 777065eef222Smrg case " $predeps $postdeps " in 777165eef222Smrg *" $a_deplib "*) 7772200d7199Smrg func_append newdeplibs " $a_deplib" 777365eef222Smrg a_deplib="" 777465eef222Smrg ;; 777565eef222Smrg esac 777665eef222Smrg fi 777765eef222Smrg if test -n "$a_deplib" ; then 777865eef222Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 7779200d7199Smrg if test -n "$file_magic_glob"; then 7780200d7199Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7781200d7199Smrg else 7782200d7199Smrg libnameglob=$libname 7783200d7199Smrg fi 7784200d7199Smrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 778565eef222Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7786200d7199Smrg if test "$want_nocaseglob" = yes; then 7787200d7199Smrg shopt -s nocaseglob 7788200d7199Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7789200d7199Smrg $nocaseglob 7790200d7199Smrg else 7791200d7199Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7792200d7199Smrg fi 779365eef222Smrg for potent_lib in $potential_libs; do 779465eef222Smrg # Follow soft links. 779565eef222Smrg if ls -lLd "$potent_lib" 2>/dev/null | 779665eef222Smrg $GREP " -> " >/dev/null; then 779765eef222Smrg continue 779865eef222Smrg fi 779965eef222Smrg # The statement above tries to avoid entering an 780065eef222Smrg # endless loop below, in case of cyclic links. 780165eef222Smrg # We might still enter an endless loop, since a link 780265eef222Smrg # loop can be closed while we follow links, 780365eef222Smrg # but so what? 780465eef222Smrg potlib="$potent_lib" 780565eef222Smrg while test -h "$potlib" 2>/dev/null; do 780665eef222Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 780765eef222Smrg case $potliblink in 780865eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 780956957a04Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 781065eef222Smrg esac 781165eef222Smrg done 781265eef222Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 781365eef222Smrg $SED -e 10q | 781465eef222Smrg $EGREP "$file_magic_regex" > /dev/null; then 7815200d7199Smrg func_append newdeplibs " $a_deplib" 781665eef222Smrg a_deplib="" 781765eef222Smrg break 2 781865eef222Smrg fi 781965eef222Smrg done 782065eef222Smrg done 782165eef222Smrg fi 782265eef222Smrg if test -n "$a_deplib" ; then 782365eef222Smrg droppeddeps=yes 782456957a04Smrg echo 782565eef222Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 782656957a04Smrg echo "*** I have the capability to make that library automatically link in when" 782756957a04Smrg echo "*** you link to this library. But I can only do this if you have a" 782856957a04Smrg echo "*** shared version of the library, which you do not appear to have" 782956957a04Smrg echo "*** because I did check the linker path looking for a file starting" 783065eef222Smrg if test -z "$potlib" ; then 783165eef222Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 783265eef222Smrg else 783365eef222Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 783465eef222Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 783565eef222Smrg fi 783665eef222Smrg fi 783765eef222Smrg ;; 783865eef222Smrg *) 783965eef222Smrg # Add a -L argument. 7840200d7199Smrg func_append newdeplibs " $a_deplib" 784165eef222Smrg ;; 784265eef222Smrg esac 784365eef222Smrg done # Gone through all deplibs. 784465eef222Smrg ;; 784565eef222Smrg match_pattern*) 784665eef222Smrg set dummy $deplibs_check_method; shift 784765eef222Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 784865eef222Smrg for a_deplib in $deplibs; do 784965eef222Smrg case $a_deplib in 785065eef222Smrg -l*) 785165eef222Smrg func_stripname -l '' "$a_deplib" 785265eef222Smrg name=$func_stripname_result 785365eef222Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 785465eef222Smrg case " $predeps $postdeps " in 785565eef222Smrg *" $a_deplib "*) 7856200d7199Smrg func_append newdeplibs " $a_deplib" 785765eef222Smrg a_deplib="" 785865eef222Smrg ;; 785965eef222Smrg esac 786065eef222Smrg fi 786165eef222Smrg if test -n "$a_deplib" ; then 786265eef222Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 786365eef222Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 786465eef222Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 786565eef222Smrg for potent_lib in $potential_libs; do 786665eef222Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 786756957a04Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 786865eef222Smrg $EGREP "$match_pattern_regex" > /dev/null; then 7869200d7199Smrg func_append newdeplibs " $a_deplib" 787065eef222Smrg a_deplib="" 787165eef222Smrg break 2 787265eef222Smrg fi 787365eef222Smrg done 787465eef222Smrg done 787565eef222Smrg fi 787665eef222Smrg if test -n "$a_deplib" ; then 787765eef222Smrg droppeddeps=yes 787856957a04Smrg echo 787965eef222Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 788056957a04Smrg echo "*** I have the capability to make that library automatically link in when" 788156957a04Smrg echo "*** you link to this library. But I can only do this if you have a" 788256957a04Smrg echo "*** shared version of the library, which you do not appear to have" 788356957a04Smrg echo "*** because I did check the linker path looking for a file starting" 788465eef222Smrg if test -z "$potlib" ; then 788565eef222Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 788665eef222Smrg else 788765eef222Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 788865eef222Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 788965eef222Smrg fi 789065eef222Smrg fi 789165eef222Smrg ;; 789265eef222Smrg *) 789365eef222Smrg # Add a -L argument. 7894200d7199Smrg func_append newdeplibs " $a_deplib" 789565eef222Smrg ;; 789665eef222Smrg esac 789765eef222Smrg done # Gone through all deplibs. 789865eef222Smrg ;; 789965eef222Smrg none | unknown | *) 790065eef222Smrg newdeplibs="" 790156957a04Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 790265eef222Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 790365eef222Smrg for i in $predeps $postdeps ; do 790465eef222Smrg # can't use Xsed below, because $i might contain '/' 790556957a04Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 790665eef222Smrg done 790765eef222Smrg fi 790856957a04Smrg case $tmp_deplibs in 790956957a04Smrg *[!\ \ ]*) 791056957a04Smrg echo 791165eef222Smrg if test "X$deplibs_check_method" = "Xnone"; then 791256957a04Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 791365eef222Smrg else 791456957a04Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 791565eef222Smrg fi 791656957a04Smrg echo "*** All declared inter-library dependencies are being dropped." 791765eef222Smrg droppeddeps=yes 791856957a04Smrg ;; 791956957a04Smrg esac 792065eef222Smrg ;; 792165eef222Smrg esac 792265eef222Smrg versuffix=$versuffix_save 792365eef222Smrg major=$major_save 792465eef222Smrg release=$release_save 792565eef222Smrg libname=$libname_save 792665eef222Smrg name=$name_save 792765eef222Smrg 792865eef222Smrg case $host in 792965eef222Smrg *-*-rhapsody* | *-*-darwin1.[012]) 793065eef222Smrg # On Rhapsody replace the C library with the System framework 793156957a04Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 793265eef222Smrg ;; 793365eef222Smrg esac 793465eef222Smrg 793565eef222Smrg if test "$droppeddeps" = yes; then 793665eef222Smrg if test "$module" = yes; then 793756957a04Smrg echo 793856957a04Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 793965eef222Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 794056957a04Smrg echo "*** a static module, that should work as long as the dlopening" 794156957a04Smrg echo "*** application is linked with the -dlopen flag." 794265eef222Smrg if test -z "$global_symbol_pipe"; then 794356957a04Smrg echo 794456957a04Smrg echo "*** However, this would only work if libtool was able to extract symbol" 794556957a04Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 794656957a04Smrg echo "*** not find such a program. So, this module is probably useless." 794756957a04Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 794865eef222Smrg fi 794965eef222Smrg if test "$build_old_libs" = no; then 795065eef222Smrg oldlibs="$output_objdir/$libname.$libext" 795165eef222Smrg build_libtool_libs=module 795265eef222Smrg build_old_libs=yes 795365eef222Smrg else 795465eef222Smrg build_libtool_libs=no 795565eef222Smrg fi 795665eef222Smrg else 795756957a04Smrg echo "*** The inter-library dependencies that have been dropped here will be" 795856957a04Smrg echo "*** automatically added whenever a program is linked with this library" 795956957a04Smrg echo "*** or is declared to -dlopen it." 796065eef222Smrg 796165eef222Smrg if test "$allow_undefined" = no; then 796256957a04Smrg echo 796356957a04Smrg echo "*** Since this library must not contain undefined symbols," 796456957a04Smrg echo "*** because either the platform does not support them or" 796556957a04Smrg echo "*** it was explicitly requested with -no-undefined," 796656957a04Smrg echo "*** libtool will only create a static version of it." 796765eef222Smrg if test "$build_old_libs" = no; then 796865eef222Smrg oldlibs="$output_objdir/$libname.$libext" 796965eef222Smrg build_libtool_libs=module 797065eef222Smrg build_old_libs=yes 797165eef222Smrg else 797265eef222Smrg build_libtool_libs=no 797365eef222Smrg fi 797465eef222Smrg fi 797565eef222Smrg fi 797665eef222Smrg fi 797765eef222Smrg # Done checking deplibs! 797865eef222Smrg deplibs=$newdeplibs 797965eef222Smrg fi 798065eef222Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 798165eef222Smrg case $host in 798265eef222Smrg *-*-darwin*) 798356957a04Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 798456957a04Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 798556957a04Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 798665eef222Smrg ;; 798765eef222Smrg esac 798865eef222Smrg 798965eef222Smrg # move library search paths that coincide with paths to not yet 799065eef222Smrg # installed libraries to the beginning of the library search list 799165eef222Smrg new_libs= 799265eef222Smrg for path in $notinst_path; do 799365eef222Smrg case " $new_libs " in 799465eef222Smrg *" -L$path/$objdir "*) ;; 799565eef222Smrg *) 799665eef222Smrg case " $deplibs " in 799765eef222Smrg *" -L$path/$objdir "*) 7998200d7199Smrg func_append new_libs " -L$path/$objdir" ;; 799965eef222Smrg esac 800065eef222Smrg ;; 800165eef222Smrg esac 800265eef222Smrg done 800365eef222Smrg for deplib in $deplibs; do 800465eef222Smrg case $deplib in 800565eef222Smrg -L*) 800665eef222Smrg case " $new_libs " in 800765eef222Smrg *" $deplib "*) ;; 8008200d7199Smrg *) func_append new_libs " $deplib" ;; 800965eef222Smrg esac 801065eef222Smrg ;; 8011200d7199Smrg *) func_append new_libs " $deplib" ;; 801265eef222Smrg esac 801365eef222Smrg done 801465eef222Smrg deplibs="$new_libs" 801565eef222Smrg 801665eef222Smrg # All the library-specific variables (install_libdir is set above). 801765eef222Smrg library_names= 801865eef222Smrg old_library= 801965eef222Smrg dlname= 802065eef222Smrg 802165eef222Smrg # Test again, we may have decided not to build it any more 802265eef222Smrg if test "$build_libtool_libs" = yes; then 802365eef222Smrg if test "$hardcode_into_libs" = yes; then 802465eef222Smrg # Hardcode the library paths 802565eef222Smrg hardcode_libdirs= 802665eef222Smrg dep_rpath= 802765eef222Smrg rpath="$finalize_rpath" 8028200d7199Smrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 802965eef222Smrg for libdir in $rpath; do 803065eef222Smrg if test -n "$hardcode_libdir_flag_spec"; then 803165eef222Smrg if test -n "$hardcode_libdir_separator"; then 8032200d7199Smrg func_replace_sysroot "$libdir" 8033200d7199Smrg libdir=$func_replace_sysroot_result 803465eef222Smrg if test -z "$hardcode_libdirs"; then 803565eef222Smrg hardcode_libdirs="$libdir" 803665eef222Smrg else 803765eef222Smrg # Just accumulate the unique libdirs. 803865eef222Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 803965eef222Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 804065eef222Smrg ;; 804165eef222Smrg *) 8042200d7199Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 804365eef222Smrg ;; 804465eef222Smrg esac 804565eef222Smrg fi 804665eef222Smrg else 804765eef222Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8048200d7199Smrg func_append dep_rpath " $flag" 804965eef222Smrg fi 805065eef222Smrg elif test -n "$runpath_var"; then 805165eef222Smrg case "$perm_rpath " in 805265eef222Smrg *" $libdir "*) ;; 8053200d7199Smrg *) func_apped perm_rpath " $libdir" ;; 805465eef222Smrg esac 805565eef222Smrg fi 805665eef222Smrg done 805765eef222Smrg # Substitute the hardcoded libdirs into the rpath. 805865eef222Smrg if test -n "$hardcode_libdir_separator" && 805965eef222Smrg test -n "$hardcode_libdirs"; then 806065eef222Smrg libdir="$hardcode_libdirs" 806165eef222Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 806265eef222Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 806365eef222Smrg else 806465eef222Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 806565eef222Smrg fi 806665eef222Smrg fi 806765eef222Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 806865eef222Smrg # We should set the runpath_var. 806965eef222Smrg rpath= 807065eef222Smrg for dir in $perm_rpath; do 8071200d7199Smrg func_append rpath "$dir:" 807265eef222Smrg done 807365eef222Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 807465eef222Smrg fi 807565eef222Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 807665eef222Smrg fi 8077ef981d24Smrg 807865eef222Smrg shlibpath="$finalize_shlibpath" 8079200d7199Smrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 808065eef222Smrg if test -n "$shlibpath"; then 808165eef222Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 808265eef222Smrg fi 8083ef981d24Smrg 808465eef222Smrg # Get the real and link names of the library. 808565eef222Smrg eval shared_ext=\"$shrext_cmds\" 808665eef222Smrg eval library_names=\"$library_names_spec\" 808765eef222Smrg set dummy $library_names 808865eef222Smrg shift 808965eef222Smrg realname="$1" 809065eef222Smrg shift 8091ef981d24Smrg 809265eef222Smrg if test -n "$soname_spec"; then 809365eef222Smrg eval soname=\"$soname_spec\" 809465eef222Smrg else 809565eef222Smrg soname="$realname" 809665eef222Smrg fi 809765eef222Smrg if test -z "$dlname"; then 809865eef222Smrg dlname=$soname 809965eef222Smrg fi 8100ef981d24Smrg 810165eef222Smrg lib="$output_objdir/$realname" 810265eef222Smrg linknames= 810365eef222Smrg for link 810465eef222Smrg do 8105200d7199Smrg func_append linknames " $link" 810665eef222Smrg done 8107ef981d24Smrg 810865eef222Smrg # Use standard objects if they are pic 810956957a04Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 811065eef222Smrg test "X$libobjs" = "X " && libobjs= 8111ef981d24Smrg 811265eef222Smrg delfiles= 811365eef222Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 811465eef222Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 811565eef222Smrg export_symbols="$output_objdir/$libname.uexp" 8116200d7199Smrg func_append delfiles " $export_symbols" 811765eef222Smrg fi 8118ef981d24Smrg 811965eef222Smrg orig_export_symbols= 812065eef222Smrg case $host_os in 812165eef222Smrg cygwin* | mingw* | cegcc*) 812265eef222Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 812365eef222Smrg # exporting using user supplied symfile 812465eef222Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 812565eef222Smrg # and it's NOT already a .def file. Must figure out 812665eef222Smrg # which of the given symbols are data symbols and tag 812765eef222Smrg # them as such. So, trigger use of export_symbols_cmds. 812865eef222Smrg # export_symbols gets reassigned inside the "prepare 812965eef222Smrg # the list of exported symbols" if statement, so the 813065eef222Smrg # include_expsyms logic still works. 813165eef222Smrg orig_export_symbols="$export_symbols" 813265eef222Smrg export_symbols= 813365eef222Smrg always_export_symbols=yes 813465eef222Smrg fi 813565eef222Smrg fi 813665eef222Smrg ;; 813765eef222Smrg esac 8138ef981d24Smrg 813965eef222Smrg # Prepare the list of exported symbols 814065eef222Smrg if test -z "$export_symbols"; then 814165eef222Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 814265eef222Smrg func_verbose "generating symbol list for \`$libname.la'" 814365eef222Smrg export_symbols="$output_objdir/$libname.exp" 814465eef222Smrg $opt_dry_run || $RM $export_symbols 814565eef222Smrg cmds=$export_symbols_cmds 814665eef222Smrg save_ifs="$IFS"; IFS='~' 8147200d7199Smrg for cmd1 in $cmds; do 814865eef222Smrg IFS="$save_ifs" 8149200d7199Smrg # Take the normal branch if the nm_file_list_spec branch 8150200d7199Smrg # doesn't work or if tool conversion is not needed. 8151200d7199Smrg case $nm_file_list_spec~$to_tool_file_cmd in 8152200d7199Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8153200d7199Smrg try_normal_branch=yes 8154200d7199Smrg eval cmd=\"$cmd1\" 8155200d7199Smrg func_len " $cmd" 8156200d7199Smrg len=$func_len_result 8157200d7199Smrg ;; 8158200d7199Smrg *) 8159200d7199Smrg try_normal_branch=no 8160200d7199Smrg ;; 8161200d7199Smrg esac 8162200d7199Smrg if test "$try_normal_branch" = yes \ 8163200d7199Smrg && { test "$len" -lt "$max_cmd_len" \ 8164200d7199Smrg || test "$max_cmd_len" -le -1; } 8165200d7199Smrg then 8166200d7199Smrg func_show_eval "$cmd" 'exit $?' 8167200d7199Smrg skipped_export=false 8168200d7199Smrg elif test -n "$nm_file_list_spec"; then 8169200d7199Smrg func_basename "$output" 8170200d7199Smrg output_la=$func_basename_result 8171200d7199Smrg save_libobjs=$libobjs 8172200d7199Smrg save_output=$output 8173200d7199Smrg output=${output_objdir}/${output_la}.nm 8174200d7199Smrg func_to_tool_file "$output" 8175200d7199Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 8176200d7199Smrg func_append delfiles " $output" 8177200d7199Smrg func_verbose "creating $NM input file list: $output" 8178200d7199Smrg for obj in $save_libobjs; do 8179200d7199Smrg func_to_tool_file "$obj" 8180200d7199Smrg $ECHO "$func_to_tool_file_result" 8181200d7199Smrg done > "$output" 8182200d7199Smrg eval cmd=\"$cmd1\" 818365eef222Smrg func_show_eval "$cmd" 'exit $?' 8184200d7199Smrg output=$save_output 8185200d7199Smrg libobjs=$save_libobjs 818665eef222Smrg skipped_export=false 818765eef222Smrg else 818865eef222Smrg # The command line is too long to execute in one step. 818965eef222Smrg func_verbose "using reloadable object file for export list..." 819065eef222Smrg skipped_export=: 819165eef222Smrg # Break out early, otherwise skipped_export may be 819265eef222Smrg # set to false by a later but shorter cmd. 819365eef222Smrg break 819465eef222Smrg fi 819565eef222Smrg done 819665eef222Smrg IFS="$save_ifs" 819765eef222Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 819865eef222Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 819965eef222Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 820065eef222Smrg fi 820165eef222Smrg fi 820265eef222Smrg fi 8203ef981d24Smrg 820465eef222Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 820565eef222Smrg tmp_export_symbols="$export_symbols" 820665eef222Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 820756957a04Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 820865eef222Smrg fi 8209ef981d24Smrg 821065eef222Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 821165eef222Smrg # The given exports_symbols file has to be filtered, so filter it. 821265eef222Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 821365eef222Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 821465eef222Smrg # 's' commands which not all seds can handle. GNU sed should be fine 821565eef222Smrg # though. Also, the filter scales superlinearly with the number of 821665eef222Smrg # global variables. join(1) would be nice here, but unfortunately 821765eef222Smrg # isn't a blessed tool. 821865eef222Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8219200d7199Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 822065eef222Smrg export_symbols=$output_objdir/$libname.def 822165eef222Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8222ef981d24Smrg fi 8223ef981d24Smrg 822465eef222Smrg tmp_deplibs= 822565eef222Smrg for test_deplib in $deplibs; do 822665eef222Smrg case " $convenience " in 822765eef222Smrg *" $test_deplib "*) ;; 822865eef222Smrg *) 8229200d7199Smrg func_append tmp_deplibs " $test_deplib" 823065eef222Smrg ;; 823165eef222Smrg esac 823265eef222Smrg done 823365eef222Smrg deplibs="$tmp_deplibs" 8234ef981d24Smrg 823565eef222Smrg if test -n "$convenience"; then 823665eef222Smrg if test -n "$whole_archive_flag_spec" && 823765eef222Smrg test "$compiler_needs_object" = yes && 823865eef222Smrg test -z "$libobjs"; then 823965eef222Smrg # extract the archives, so we have objects to list. 824065eef222Smrg # TODO: could optimize this to just extract one archive. 824165eef222Smrg whole_archive_flag_spec= 824265eef222Smrg fi 824365eef222Smrg if test -n "$whole_archive_flag_spec"; then 824465eef222Smrg save_libobjs=$libobjs 824565eef222Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 824665eef222Smrg test "X$libobjs" = "X " && libobjs= 824765eef222Smrg else 824865eef222Smrg gentop="$output_objdir/${outputname}x" 8249200d7199Smrg func_append generated " $gentop" 8250ef981d24Smrg 825165eef222Smrg func_extract_archives $gentop $convenience 8252200d7199Smrg func_append libobjs " $func_extract_archives_result" 825365eef222Smrg test "X$libobjs" = "X " && libobjs= 825465eef222Smrg fi 825565eef222Smrg fi 8256ef981d24Smrg 825765eef222Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 825865eef222Smrg eval flag=\"$thread_safe_flag_spec\" 8259200d7199Smrg func_append linker_flags " $flag" 826065eef222Smrg fi 8261ef981d24Smrg 826265eef222Smrg # Make a backup of the uninstalled library when relinking 8263200d7199Smrg if test "$opt_mode" = relink; then 826465eef222Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8265ef981d24Smrg fi 8266ef981d24Smrg 826765eef222Smrg # Do each of the archive commands. 826865eef222Smrg if test "$module" = yes && test -n "$module_cmds" ; then 826965eef222Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 827065eef222Smrg eval test_cmds=\"$module_expsym_cmds\" 827165eef222Smrg cmds=$module_expsym_cmds 827265eef222Smrg else 827365eef222Smrg eval test_cmds=\"$module_cmds\" 827465eef222Smrg cmds=$module_cmds 827565eef222Smrg fi 827665eef222Smrg else 827765eef222Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 827865eef222Smrg eval test_cmds=\"$archive_expsym_cmds\" 827965eef222Smrg cmds=$archive_expsym_cmds 828065eef222Smrg else 828165eef222Smrg eval test_cmds=\"$archive_cmds\" 828265eef222Smrg cmds=$archive_cmds 828365eef222Smrg fi 8284ef981d24Smrg fi 8285ef981d24Smrg 828665eef222Smrg if test "X$skipped_export" != "X:" && 828765eef222Smrg func_len " $test_cmds" && 828865eef222Smrg len=$func_len_result && 828965eef222Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 829065eef222Smrg : 829165eef222Smrg else 829265eef222Smrg # The command line is too long to link in one step, link piecewise 829365eef222Smrg # or, if using GNU ld and skipped_export is not :, use a linker 829465eef222Smrg # script. 8295ef981d24Smrg 829665eef222Smrg # Save the value of $output and $libobjs because we want to 829765eef222Smrg # use them later. If we have whole_archive_flag_spec, we 829865eef222Smrg # want to use save_libobjs as it was before 829965eef222Smrg # whole_archive_flag_spec was expanded, because we can't 830065eef222Smrg # assume the linker understands whole_archive_flag_spec. 830165eef222Smrg # This may have to be revisited, in case too many 830265eef222Smrg # convenience libraries get linked in and end up exceeding 830365eef222Smrg # the spec. 830465eef222Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 830565eef222Smrg save_libobjs=$libobjs 830665eef222Smrg fi 830765eef222Smrg save_output=$output 830856957a04Smrg func_basename "$output" 830956957a04Smrg output_la=$func_basename_result 8310ef981d24Smrg 831165eef222Smrg # Clear the reloadable object creation command queue and 831265eef222Smrg # initialize k to one. 831365eef222Smrg test_cmds= 831465eef222Smrg concat_cmds= 831565eef222Smrg objlist= 831665eef222Smrg last_robj= 831765eef222Smrg k=1 8318ef981d24Smrg 831965eef222Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 832065eef222Smrg output=${output_objdir}/${output_la}.lnkscript 832165eef222Smrg func_verbose "creating GNU ld script: $output" 832256957a04Smrg echo 'INPUT (' > $output 832365eef222Smrg for obj in $save_libobjs 832465eef222Smrg do 8325200d7199Smrg func_to_tool_file "$obj" 8326200d7199Smrg $ECHO "$func_to_tool_file_result" >> $output 832765eef222Smrg done 832856957a04Smrg echo ')' >> $output 8329200d7199Smrg func_append delfiles " $output" 8330200d7199Smrg func_to_tool_file "$output" 8331200d7199Smrg output=$func_to_tool_file_result 833265eef222Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 833365eef222Smrg output=${output_objdir}/${output_la}.lnk 833465eef222Smrg func_verbose "creating linker input file list: $output" 833565eef222Smrg : > $output 833665eef222Smrg set x $save_libobjs 833765eef222Smrg shift 833865eef222Smrg firstobj= 833965eef222Smrg if test "$compiler_needs_object" = yes; then 834065eef222Smrg firstobj="$1 " 834165eef222Smrg shift 834265eef222Smrg fi 834365eef222Smrg for obj 834465eef222Smrg do 8345200d7199Smrg func_to_tool_file "$obj" 8346200d7199Smrg $ECHO "$func_to_tool_file_result" >> $output 834765eef222Smrg done 8348200d7199Smrg func_append delfiles " $output" 8349200d7199Smrg func_to_tool_file "$output" 8350200d7199Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 835165eef222Smrg else 835265eef222Smrg if test -n "$save_libobjs"; then 835365eef222Smrg func_verbose "creating reloadable object files..." 835465eef222Smrg output=$output_objdir/$output_la-${k}.$objext 835565eef222Smrg eval test_cmds=\"$reload_cmds\" 835665eef222Smrg func_len " $test_cmds" 835765eef222Smrg len0=$func_len_result 835865eef222Smrg len=$len0 835965eef222Smrg 836065eef222Smrg # Loop over the list of objects to be linked. 836165eef222Smrg for obj in $save_libobjs 836265eef222Smrg do 836365eef222Smrg func_len " $obj" 836465eef222Smrg func_arith $len + $func_len_result 836565eef222Smrg len=$func_arith_result 836665eef222Smrg if test "X$objlist" = X || 836765eef222Smrg test "$len" -lt "$max_cmd_len"; then 836865eef222Smrg func_append objlist " $obj" 836965eef222Smrg else 837065eef222Smrg # The command $test_cmds is almost too long, add a 837165eef222Smrg # command to the queue. 837265eef222Smrg if test "$k" -eq 1 ; then 837365eef222Smrg # The first file doesn't have a previous command to add. 837456957a04Smrg reload_objs=$objlist 837556957a04Smrg eval concat_cmds=\"$reload_cmds\" 837665eef222Smrg else 837765eef222Smrg # All subsequent reloadable object files will link in 837865eef222Smrg # the last one created. 837956957a04Smrg reload_objs="$objlist $last_robj" 838056957a04Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 838165eef222Smrg fi 838265eef222Smrg last_robj=$output_objdir/$output_la-${k}.$objext 838365eef222Smrg func_arith $k + 1 838465eef222Smrg k=$func_arith_result 838565eef222Smrg output=$output_objdir/$output_la-${k}.$objext 838656957a04Smrg objlist=" $obj" 838765eef222Smrg func_len " $last_robj" 838865eef222Smrg func_arith $len0 + $func_len_result 838965eef222Smrg len=$func_arith_result 839065eef222Smrg fi 839165eef222Smrg done 839265eef222Smrg # Handle the remaining objects by creating one last 839365eef222Smrg # reloadable object file. All subsequent reloadable object 839465eef222Smrg # files will link in the last one created. 839565eef222Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 839656957a04Smrg reload_objs="$objlist $last_robj" 839756957a04Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 839865eef222Smrg if test -n "$last_robj"; then 839965eef222Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 840065eef222Smrg fi 8401200d7199Smrg func_append delfiles " $output" 8402ef981d24Smrg 840365eef222Smrg else 840465eef222Smrg output= 840565eef222Smrg fi 8406ef981d24Smrg 840765eef222Smrg if ${skipped_export-false}; then 840865eef222Smrg func_verbose "generating symbol list for \`$libname.la'" 840965eef222Smrg export_symbols="$output_objdir/$libname.exp" 841065eef222Smrg $opt_dry_run || $RM $export_symbols 841165eef222Smrg libobjs=$output 841265eef222Smrg # Append the command to create the export file. 841365eef222Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 841465eef222Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 841565eef222Smrg if test -n "$last_robj"; then 841665eef222Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 841765eef222Smrg fi 841865eef222Smrg fi 8419ef981d24Smrg 842065eef222Smrg test -n "$save_libobjs" && 842165eef222Smrg func_verbose "creating a temporary reloadable object file: $output" 8422ef981d24Smrg 842365eef222Smrg # Loop through the commands generated above and execute them. 842465eef222Smrg save_ifs="$IFS"; IFS='~' 842565eef222Smrg for cmd in $concat_cmds; do 842665eef222Smrg IFS="$save_ifs" 842765eef222Smrg $opt_silent || { 842865eef222Smrg func_quote_for_expand "$cmd" 842965eef222Smrg eval "func_echo $func_quote_for_expand_result" 843065eef222Smrg } 843165eef222Smrg $opt_dry_run || eval "$cmd" || { 843265eef222Smrg lt_exit=$? 843365eef222Smrg 843465eef222Smrg # Restore the uninstalled library and exit 8435200d7199Smrg if test "$opt_mode" = relink; then 843665eef222Smrg ( cd "$output_objdir" && \ 843765eef222Smrg $RM "${realname}T" && \ 843865eef222Smrg $MV "${realname}U" "$realname" ) 843965eef222Smrg fi 8440ef981d24Smrg 844165eef222Smrg exit $lt_exit 844265eef222Smrg } 844365eef222Smrg done 844465eef222Smrg IFS="$save_ifs" 844565eef222Smrg 844665eef222Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 844765eef222Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 844865eef222Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8449ef981d24Smrg fi 8450ef981d24Smrg fi 8451ef981d24Smrg 845265eef222Smrg if ${skipped_export-false}; then 845365eef222Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 845465eef222Smrg tmp_export_symbols="$export_symbols" 845565eef222Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 845656957a04Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 845765eef222Smrg fi 8458ef981d24Smrg 845965eef222Smrg if test -n "$orig_export_symbols"; then 846065eef222Smrg # The given exports_symbols file has to be filtered, so filter it. 846165eef222Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 846265eef222Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 846365eef222Smrg # 's' commands which not all seds can handle. GNU sed should be fine 846465eef222Smrg # though. Also, the filter scales superlinearly with the number of 846565eef222Smrg # global variables. join(1) would be nice here, but unfortunately 846665eef222Smrg # isn't a blessed tool. 846765eef222Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8468200d7199Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 846965eef222Smrg export_symbols=$output_objdir/$libname.def 847065eef222Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 847165eef222Smrg fi 847265eef222Smrg fi 8473ef981d24Smrg 847465eef222Smrg libobjs=$output 847565eef222Smrg # Restore the value of output. 847665eef222Smrg output=$save_output 8477ef981d24Smrg 847865eef222Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 847965eef222Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 848065eef222Smrg test "X$libobjs" = "X " && libobjs= 848165eef222Smrg fi 848265eef222Smrg # Expand the library linking commands again to reset the 848365eef222Smrg # value of $libobjs for piecewise linking. 848465eef222Smrg 848565eef222Smrg # Do each of the archive commands. 848665eef222Smrg if test "$module" = yes && test -n "$module_cmds" ; then 848765eef222Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 848865eef222Smrg cmds=$module_expsym_cmds 8489ef981d24Smrg else 849065eef222Smrg cmds=$module_cmds 8491ef981d24Smrg fi 8492ef981d24Smrg else 849365eef222Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 849465eef222Smrg cmds=$archive_expsym_cmds 849565eef222Smrg else 849665eef222Smrg cmds=$archive_cmds 849765eef222Smrg fi 8498ef981d24Smrg fi 8499ef981d24Smrg fi 8500ef981d24Smrg 850165eef222Smrg if test -n "$delfiles"; then 850265eef222Smrg # Append the command to remove temporary files to $cmds. 850365eef222Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 850465eef222Smrg fi 8505ef981d24Smrg 850665eef222Smrg # Add any objects from preloaded convenience libraries 850765eef222Smrg if test -n "$dlprefiles"; then 850865eef222Smrg gentop="$output_objdir/${outputname}x" 8509200d7199Smrg func_append generated " $gentop" 8510ef981d24Smrg 851165eef222Smrg func_extract_archives $gentop $dlprefiles 8512200d7199Smrg func_append libobjs " $func_extract_archives_result" 851365eef222Smrg test "X$libobjs" = "X " && libobjs= 8514ef981d24Smrg fi 8515ef981d24Smrg 851665eef222Smrg save_ifs="$IFS"; IFS='~' 851765eef222Smrg for cmd in $cmds; do 851865eef222Smrg IFS="$save_ifs" 851965eef222Smrg eval cmd=\"$cmd\" 852065eef222Smrg $opt_silent || { 852165eef222Smrg func_quote_for_expand "$cmd" 852265eef222Smrg eval "func_echo $func_quote_for_expand_result" 852365eef222Smrg } 852465eef222Smrg $opt_dry_run || eval "$cmd" || { 852565eef222Smrg lt_exit=$? 8526ef981d24Smrg 852765eef222Smrg # Restore the uninstalled library and exit 8528200d7199Smrg if test "$opt_mode" = relink; then 852965eef222Smrg ( cd "$output_objdir" && \ 853065eef222Smrg $RM "${realname}T" && \ 853165eef222Smrg $MV "${realname}U" "$realname" ) 853265eef222Smrg fi 853365eef222Smrg 853465eef222Smrg exit $lt_exit 853565eef222Smrg } 853665eef222Smrg done 853765eef222Smrg IFS="$save_ifs" 853865eef222Smrg 853965eef222Smrg # Restore the uninstalled library and exit 8540200d7199Smrg if test "$opt_mode" = relink; then 854165eef222Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 854265eef222Smrg 854365eef222Smrg if test -n "$convenience"; then 854465eef222Smrg if test -z "$whole_archive_flag_spec"; then 854565eef222Smrg func_show_eval '${RM}r "$gentop"' 8546ef981d24Smrg fi 8547ef981d24Smrg fi 8548ef981d24Smrg 854965eef222Smrg exit $EXIT_SUCCESS 855065eef222Smrg fi 8551ef981d24Smrg 855265eef222Smrg # Create links to the real library. 855365eef222Smrg for linkname in $linknames; do 855465eef222Smrg if test "$realname" != "$linkname"; then 855565eef222Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 855665eef222Smrg fi 855765eef222Smrg done 855865eef222Smrg 855965eef222Smrg # If -module or -export-dynamic was specified, set the dlname. 856065eef222Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 856165eef222Smrg # On all known operating systems, these are identical. 856265eef222Smrg dlname="$soname" 856365eef222Smrg fi 856465eef222Smrg fi 856565eef222Smrg ;; 856665eef222Smrg 856765eef222Smrg obj) 856865eef222Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 856965eef222Smrg func_warning "\`-dlopen' is ignored for objects" 857065eef222Smrg fi 857165eef222Smrg 857265eef222Smrg case " $deplibs" in 857365eef222Smrg *\ -l* | *\ -L*) 857465eef222Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 857565eef222Smrg esac 857665eef222Smrg 857765eef222Smrg test -n "$rpath" && \ 857865eef222Smrg func_warning "\`-rpath' is ignored for objects" 857965eef222Smrg 858065eef222Smrg test -n "$xrpath" && \ 858165eef222Smrg func_warning "\`-R' is ignored for objects" 858265eef222Smrg 858365eef222Smrg test -n "$vinfo" && \ 858465eef222Smrg func_warning "\`-version-info' is ignored for objects" 858565eef222Smrg 858665eef222Smrg test -n "$release" && \ 858765eef222Smrg func_warning "\`-release' is ignored for objects" 858865eef222Smrg 858965eef222Smrg case $output in 859065eef222Smrg *.lo) 859165eef222Smrg test -n "$objs$old_deplibs" && \ 859265eef222Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 859365eef222Smrg 859465eef222Smrg libobj=$output 859565eef222Smrg func_lo2o "$libobj" 859665eef222Smrg obj=$func_lo2o_result 859765eef222Smrg ;; 859865eef222Smrg *) 859965eef222Smrg libobj= 860065eef222Smrg obj="$output" 860165eef222Smrg ;; 860265eef222Smrg esac 860365eef222Smrg 860465eef222Smrg # Delete the old objects. 860565eef222Smrg $opt_dry_run || $RM $obj $libobj 860665eef222Smrg 860765eef222Smrg # Objects from convenience libraries. This assumes 860865eef222Smrg # single-version convenience libraries. Whenever we create 860965eef222Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 861065eef222Smrg # the extraction. 861165eef222Smrg reload_conv_objs= 861265eef222Smrg gentop= 861365eef222Smrg # reload_cmds runs $LD directly, so let us get rid of 861465eef222Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 861565eef222Smrg # turning comma into space.. 861665eef222Smrg wl= 861765eef222Smrg 861865eef222Smrg if test -n "$convenience"; then 861965eef222Smrg if test -n "$whole_archive_flag_spec"; then 862065eef222Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 862156957a04Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 862265eef222Smrg else 862365eef222Smrg gentop="$output_objdir/${obj}x" 8624200d7199Smrg func_append generated " $gentop" 862565eef222Smrg 862665eef222Smrg func_extract_archives $gentop $convenience 862765eef222Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 862865eef222Smrg fi 862965eef222Smrg fi 8630ef981d24Smrg 8631200d7199Smrg # If we're not building shared, we need to use non_pic_objs 8632200d7199Smrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8633200d7199Smrg 863465eef222Smrg # Create the old-style object. 863556957a04Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8636ef981d24Smrg 863765eef222Smrg output="$obj" 863865eef222Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8639ef981d24Smrg 864065eef222Smrg # Exit if we aren't doing a library object file. 864165eef222Smrg if test -z "$libobj"; then 864265eef222Smrg if test -n "$gentop"; then 864365eef222Smrg func_show_eval '${RM}r "$gentop"' 864465eef222Smrg fi 8645ef981d24Smrg 864665eef222Smrg exit $EXIT_SUCCESS 864765eef222Smrg fi 8648ef981d24Smrg 864965eef222Smrg if test "$build_libtool_libs" != yes; then 865065eef222Smrg if test -n "$gentop"; then 865165eef222Smrg func_show_eval '${RM}r "$gentop"' 865265eef222Smrg fi 8653ef981d24Smrg 865465eef222Smrg # Create an invalid libtool object if no PIC, so that we don't 865565eef222Smrg # accidentally link it into a program. 865665eef222Smrg # $show "echo timestamp > $libobj" 865765eef222Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 865865eef222Smrg exit $EXIT_SUCCESS 865965eef222Smrg fi 8660ef981d24Smrg 866165eef222Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 866265eef222Smrg # Only do commands if we really have different PIC objects. 866365eef222Smrg reload_objs="$libobjs $reload_conv_objs" 866465eef222Smrg output="$libobj" 866565eef222Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8666ef981d24Smrg fi 8667ef981d24Smrg 866865eef222Smrg if test -n "$gentop"; then 866965eef222Smrg func_show_eval '${RM}r "$gentop"' 867065eef222Smrg fi 8671ef981d24Smrg 867265eef222Smrg exit $EXIT_SUCCESS 867365eef222Smrg ;; 8674ef981d24Smrg 867565eef222Smrg prog) 867665eef222Smrg case $host in 867765eef222Smrg *cygwin*) func_stripname '' '.exe' "$output" 867865eef222Smrg output=$func_stripname_result.exe;; 8679ef981d24Smrg esac 868065eef222Smrg test -n "$vinfo" && \ 868165eef222Smrg func_warning "\`-version-info' is ignored for programs" 8682ef981d24Smrg 868365eef222Smrg test -n "$release" && \ 868465eef222Smrg func_warning "\`-release' is ignored for programs" 8685ef981d24Smrg 868665eef222Smrg test "$preload" = yes \ 868765eef222Smrg && test "$dlopen_support" = unknown \ 868865eef222Smrg && test "$dlopen_self" = unknown \ 868965eef222Smrg && test "$dlopen_self_static" = unknown && \ 869065eef222Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8691ef981d24Smrg 869265eef222Smrg case $host in 869365eef222Smrg *-*-rhapsody* | *-*-darwin1.[012]) 869465eef222Smrg # On Rhapsody replace the C library is the System framework 869556957a04Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 869656957a04Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8697ef981d24Smrg ;; 8698ef981d24Smrg esac 8699ef981d24Smrg 870065eef222Smrg case $host in 870165eef222Smrg *-*-darwin*) 870265eef222Smrg # Don't allow lazy linking, it breaks C++ global constructors 870365eef222Smrg # But is supposedly fixed on 10.4 or later (yay!). 870465eef222Smrg if test "$tagname" = CXX ; then 870565eef222Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 870665eef222Smrg 10.[0123]) 8707200d7199Smrg func_append compile_command " ${wl}-bind_at_load" 8708200d7199Smrg func_append finalize_command " ${wl}-bind_at_load" 870965eef222Smrg ;; 871065eef222Smrg esac 871165eef222Smrg fi 871265eef222Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 871356957a04Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 871456957a04Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8715ef981d24Smrg ;; 8716ef981d24Smrg esac 8717ef981d24Smrg 8718ef981d24Smrg 871965eef222Smrg # move library search paths that coincide with paths to not yet 872065eef222Smrg # installed libraries to the beginning of the library search list 872165eef222Smrg new_libs= 872265eef222Smrg for path in $notinst_path; do 872365eef222Smrg case " $new_libs " in 872465eef222Smrg *" -L$path/$objdir "*) ;; 8725ef981d24Smrg *) 872665eef222Smrg case " $compile_deplibs " in 872765eef222Smrg *" -L$path/$objdir "*) 8728200d7199Smrg func_append new_libs " -L$path/$objdir" ;; 872965eef222Smrg esac 8730ef981d24Smrg ;; 8731ef981d24Smrg esac 8732ef981d24Smrg done 873365eef222Smrg for deplib in $compile_deplibs; do 873465eef222Smrg case $deplib in 873565eef222Smrg -L*) 873665eef222Smrg case " $new_libs " in 873765eef222Smrg *" $deplib "*) ;; 8738200d7199Smrg *) func_append new_libs " $deplib" ;; 873965eef222Smrg esac 874065eef222Smrg ;; 8741200d7199Smrg *) func_append new_libs " $deplib" ;; 874265eef222Smrg esac 874365eef222Smrg done 874465eef222Smrg compile_deplibs="$new_libs" 8745ef981d24Smrg 8746ef981d24Smrg 8747200d7199Smrg func_append compile_command " $compile_deplibs" 8748200d7199Smrg func_append finalize_command " $finalize_deplibs" 8749ef981d24Smrg 875065eef222Smrg if test -n "$rpath$xrpath"; then 875165eef222Smrg # If the user specified any rpath flags, then add them. 875265eef222Smrg for libdir in $rpath $xrpath; do 875365eef222Smrg # This is the magic to use -rpath. 875465eef222Smrg case "$finalize_rpath " in 875565eef222Smrg *" $libdir "*) ;; 8756200d7199Smrg *) func_append finalize_rpath " $libdir" ;; 875765eef222Smrg esac 875865eef222Smrg done 875965eef222Smrg fi 8760ef981d24Smrg 876165eef222Smrg # Now hardcode the library paths 876265eef222Smrg rpath= 876365eef222Smrg hardcode_libdirs= 876465eef222Smrg for libdir in $compile_rpath $finalize_rpath; do 876565eef222Smrg if test -n "$hardcode_libdir_flag_spec"; then 876665eef222Smrg if test -n "$hardcode_libdir_separator"; then 876765eef222Smrg if test -z "$hardcode_libdirs"; then 876865eef222Smrg hardcode_libdirs="$libdir" 876965eef222Smrg else 877065eef222Smrg # Just accumulate the unique libdirs. 877165eef222Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 877265eef222Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 877365eef222Smrg ;; 877465eef222Smrg *) 8775200d7199Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 877665eef222Smrg ;; 877765eef222Smrg esac 877865eef222Smrg fi 877965eef222Smrg else 878065eef222Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8781200d7199Smrg func_append rpath " $flag" 878265eef222Smrg fi 878365eef222Smrg elif test -n "$runpath_var"; then 878465eef222Smrg case "$perm_rpath " in 8785ef981d24Smrg *" $libdir "*) ;; 8786200d7199Smrg *) func_append perm_rpath " $libdir" ;; 8787ef981d24Smrg esac 878865eef222Smrg fi 878965eef222Smrg case $host in 879065eef222Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 879165eef222Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 879265eef222Smrg case :$dllsearchpath: in 879365eef222Smrg *":$libdir:"*) ;; 879465eef222Smrg ::) dllsearchpath=$libdir;; 8795200d7199Smrg *) func_append dllsearchpath ":$libdir";; 879665eef222Smrg esac 879765eef222Smrg case :$dllsearchpath: in 879865eef222Smrg *":$testbindir:"*) ;; 879965eef222Smrg ::) dllsearchpath=$testbindir;; 8800200d7199Smrg *) func_append dllsearchpath ":$testbindir";; 880165eef222Smrg esac 880265eef222Smrg ;; 880365eef222Smrg esac 880465eef222Smrg done 880565eef222Smrg # Substitute the hardcoded libdirs into the rpath. 880665eef222Smrg if test -n "$hardcode_libdir_separator" && 880765eef222Smrg test -n "$hardcode_libdirs"; then 880865eef222Smrg libdir="$hardcode_libdirs" 880965eef222Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 881065eef222Smrg fi 881165eef222Smrg compile_rpath="$rpath" 881265eef222Smrg 881365eef222Smrg rpath= 881465eef222Smrg hardcode_libdirs= 881565eef222Smrg for libdir in $finalize_rpath; do 881665eef222Smrg if test -n "$hardcode_libdir_flag_spec"; then 881765eef222Smrg if test -n "$hardcode_libdir_separator"; then 881865eef222Smrg if test -z "$hardcode_libdirs"; then 881965eef222Smrg hardcode_libdirs="$libdir" 882065eef222Smrg else 882165eef222Smrg # Just accumulate the unique libdirs. 882265eef222Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 882365eef222Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 882465eef222Smrg ;; 882565eef222Smrg *) 8826200d7199Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 882765eef222Smrg ;; 882865eef222Smrg esac 882965eef222Smrg fi 883065eef222Smrg else 883165eef222Smrg eval flag=\"$hardcode_libdir_flag_spec\" 8832200d7199Smrg func_append rpath " $flag" 883365eef222Smrg fi 883465eef222Smrg elif test -n "$runpath_var"; then 883565eef222Smrg case "$finalize_perm_rpath " in 8836ef981d24Smrg *" $libdir "*) ;; 8837200d7199Smrg *) func_append finalize_perm_rpath " $libdir" ;; 8838ef981d24Smrg esac 8839ef981d24Smrg fi 884065eef222Smrg done 884165eef222Smrg # Substitute the hardcoded libdirs into the rpath. 884265eef222Smrg if test -n "$hardcode_libdir_separator" && 884365eef222Smrg test -n "$hardcode_libdirs"; then 884465eef222Smrg libdir="$hardcode_libdirs" 884565eef222Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 884665eef222Smrg fi 884765eef222Smrg finalize_rpath="$rpath" 8848ef981d24Smrg 884965eef222Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 885065eef222Smrg # Transform all the library objects into standard objects. 885156957a04Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 885256957a04Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 885365eef222Smrg fi 8854ef981d24Smrg 885565eef222Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8856ef981d24Smrg 885765eef222Smrg # template prelinking step 885865eef222Smrg if test -n "$prelink_cmds"; then 885965eef222Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 886065eef222Smrg fi 8861ef981d24Smrg 886265eef222Smrg wrappers_required=yes 886365eef222Smrg case $host in 886456957a04Smrg *cegcc* | *mingw32ce*) 886556957a04Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 886656957a04Smrg wrappers_required=no 886756957a04Smrg ;; 886865eef222Smrg *cygwin* | *mingw* ) 886965eef222Smrg if test "$build_libtool_libs" != yes; then 887065eef222Smrg wrappers_required=no 887165eef222Smrg fi 887265eef222Smrg ;; 887365eef222Smrg *) 887465eef222Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 887565eef222Smrg wrappers_required=no 887665eef222Smrg fi 887765eef222Smrg ;; 887865eef222Smrg esac 887965eef222Smrg if test "$wrappers_required" = no; then 888065eef222Smrg # Replace the output file specification. 888156957a04Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 888265eef222Smrg link_command="$compile_command$compile_rpath" 8883ef981d24Smrg 888465eef222Smrg # We have no uninstalled library dependencies, so finalize right now. 888565eef222Smrg exit_status=0 888665eef222Smrg func_show_eval "$link_command" 'exit_status=$?' 8887ef981d24Smrg 8888200d7199Smrg if test -n "$postlink_cmds"; then 8889200d7199Smrg func_to_tool_file "$output" 8890200d7199Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8891200d7199Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8892200d7199Smrg fi 8893200d7199Smrg 889465eef222Smrg # Delete the generated files. 889565eef222Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 889665eef222Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 889765eef222Smrg fi 8898ef981d24Smrg 889965eef222Smrg exit $exit_status 890065eef222Smrg fi 8901ef981d24Smrg 890265eef222Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 890365eef222Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 890465eef222Smrg fi 890565eef222Smrg if test -n "$finalize_shlibpath"; then 890665eef222Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 890765eef222Smrg fi 8908ef981d24Smrg 890965eef222Smrg compile_var= 891065eef222Smrg finalize_var= 891165eef222Smrg if test -n "$runpath_var"; then 891265eef222Smrg if test -n "$perm_rpath"; then 891365eef222Smrg # We should set the runpath_var. 891465eef222Smrg rpath= 891565eef222Smrg for dir in $perm_rpath; do 8916200d7199Smrg func_append rpath "$dir:" 8917ef981d24Smrg done 891865eef222Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8919ef981d24Smrg fi 892065eef222Smrg if test -n "$finalize_perm_rpath"; then 892165eef222Smrg # We should set the runpath_var. 892265eef222Smrg rpath= 892365eef222Smrg for dir in $finalize_perm_rpath; do 8924200d7199Smrg func_append rpath "$dir:" 892565eef222Smrg done 892665eef222Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 892765eef222Smrg fi 892865eef222Smrg fi 8929ef981d24Smrg 893065eef222Smrg if test "$no_install" = yes; then 893165eef222Smrg # We don't need to create a wrapper script. 893265eef222Smrg link_command="$compile_var$compile_command$compile_rpath" 893365eef222Smrg # Replace the output file specification. 893456957a04Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 893565eef222Smrg # Delete the old output file. 893665eef222Smrg $opt_dry_run || $RM $output 893765eef222Smrg # Link the executable and exit 893865eef222Smrg func_show_eval "$link_command" 'exit $?' 8939200d7199Smrg 8940200d7199Smrg if test -n "$postlink_cmds"; then 8941200d7199Smrg func_to_tool_file "$output" 8942200d7199Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8943200d7199Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8944200d7199Smrg fi 8945200d7199Smrg 894665eef222Smrg exit $EXIT_SUCCESS 894765eef222Smrg fi 8948ef981d24Smrg 894965eef222Smrg if test "$hardcode_action" = relink; then 895065eef222Smrg # Fast installation is not supported 895165eef222Smrg link_command="$compile_var$compile_command$compile_rpath" 895265eef222Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8953ef981d24Smrg 895465eef222Smrg func_warning "this platform does not like uninstalled shared libraries" 895565eef222Smrg func_warning "\`$output' will be relinked during installation" 895665eef222Smrg else 895765eef222Smrg if test "$fast_install" != no; then 895865eef222Smrg link_command="$finalize_var$compile_command$finalize_rpath" 895965eef222Smrg if test "$fast_install" = yes; then 896056957a04Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 896165eef222Smrg else 896265eef222Smrg # fast_install is set to needless 896365eef222Smrg relink_command= 896465eef222Smrg fi 8965ef981d24Smrg else 896665eef222Smrg link_command="$compile_var$compile_command$compile_rpath" 896765eef222Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8968ef981d24Smrg fi 896965eef222Smrg fi 8970ef981d24Smrg 897165eef222Smrg # Replace the output file specification. 897256957a04Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8973ef981d24Smrg 897465eef222Smrg # Delete the old output files. 897565eef222Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8976ef981d24Smrg 897765eef222Smrg func_show_eval "$link_command" 'exit $?' 8978ef981d24Smrg 8979200d7199Smrg if test -n "$postlink_cmds"; then 8980200d7199Smrg func_to_tool_file "$output_objdir/$outputname" 8981200d7199Smrg 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'` 8982200d7199Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 8983200d7199Smrg fi 8984200d7199Smrg 898565eef222Smrg # Now create the wrapper script. 898665eef222Smrg func_verbose "creating $output" 8987ef981d24Smrg 898865eef222Smrg # Quote the relink command for shipping. 898965eef222Smrg if test -n "$relink_command"; then 899065eef222Smrg # Preserve any variables that may affect compiler behavior 899165eef222Smrg for var in $variables_saved_for_relink; do 899265eef222Smrg if eval test -z \"\${$var+set}\"; then 899365eef222Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 899465eef222Smrg elif eval var_value=\$$var; test -z "$var_value"; then 899565eef222Smrg relink_command="$var=; export $var; $relink_command" 899665eef222Smrg else 899765eef222Smrg func_quote_for_eval "$var_value" 899865eef222Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 899965eef222Smrg fi 900065eef222Smrg done 900165eef222Smrg relink_command="(cd `pwd`; $relink_command)" 900256957a04Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 900365eef222Smrg fi 9004ef981d24Smrg 900565eef222Smrg # Only actually do things if not in dry run mode. 900665eef222Smrg $opt_dry_run || { 900765eef222Smrg # win32 will think the script is a binary if it has 900865eef222Smrg # a .exe suffix, so we strip it off here. 900965eef222Smrg case $output in 901065eef222Smrg *.exe) func_stripname '' '.exe' "$output" 901165eef222Smrg output=$func_stripname_result ;; 901265eef222Smrg esac 901365eef222Smrg # test for cygwin because mv fails w/o .exe extensions 9014ef981d24Smrg case $host in 901565eef222Smrg *cygwin*) 901665eef222Smrg exeext=.exe 901765eef222Smrg func_stripname '' '.exe' "$outputname" 901865eef222Smrg outputname=$func_stripname_result ;; 901965eef222Smrg *) exeext= ;; 9020ef981d24Smrg esac 902165eef222Smrg case $host in 902265eef222Smrg *cygwin* | *mingw* ) 902365eef222Smrg func_dirname_and_basename "$output" "" "." 902465eef222Smrg output_name=$func_basename_result 902565eef222Smrg output_path=$func_dirname_result 902665eef222Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 902765eef222Smrg cwrapper="$output_path/$output_name.exe" 902865eef222Smrg $RM $cwrappersource $cwrapper 902965eef222Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 903065eef222Smrg 903165eef222Smrg func_emit_cwrapperexe_src > $cwrappersource 903265eef222Smrg 903365eef222Smrg # The wrapper executable is built using the $host compiler, 903465eef222Smrg # because it contains $host paths and files. If cross- 903565eef222Smrg # compiling, it, like the target executable, must be 903665eef222Smrg # executed on the $host or under an emulation environment. 903765eef222Smrg $opt_dry_run || { 903865eef222Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 903965eef222Smrg $STRIP $cwrapper 904065eef222Smrg } 9041ef981d24Smrg 904265eef222Smrg # Now, create the wrapper script for func_source use: 904365eef222Smrg func_ltwrapper_scriptname $cwrapper 904465eef222Smrg $RM $func_ltwrapper_scriptname_result 904565eef222Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 904665eef222Smrg $opt_dry_run || { 904765eef222Smrg # note: this script will not be executed, so do not chmod. 904865eef222Smrg if test "x$build" = "x$host" ; then 904965eef222Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9050ef981d24Smrg else 905165eef222Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9052ef981d24Smrg fi 905365eef222Smrg } 905465eef222Smrg ;; 905565eef222Smrg * ) 905665eef222Smrg $RM $output 905765eef222Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9058ef981d24Smrg 905965eef222Smrg func_emit_wrapper no > $output 906065eef222Smrg chmod +x $output 9061ef981d24Smrg ;; 9062ef981d24Smrg esac 906365eef222Smrg } 906465eef222Smrg exit $EXIT_SUCCESS 906565eef222Smrg ;; 906665eef222Smrg esac 9067ef981d24Smrg 906865eef222Smrg # See if we need to build an old-fashioned archive. 906965eef222Smrg for oldlib in $oldlibs; do 9070ef981d24Smrg 907165eef222Smrg if test "$build_libtool_libs" = convenience; then 907265eef222Smrg oldobjs="$libobjs_save $symfileobj" 907365eef222Smrg addlibs="$convenience" 907465eef222Smrg build_libtool_libs=no 907565eef222Smrg else 907665eef222Smrg if test "$build_libtool_libs" = module; then 907765eef222Smrg oldobjs="$libobjs_save" 907865eef222Smrg build_libtool_libs=no 907965eef222Smrg else 908065eef222Smrg oldobjs="$old_deplibs $non_pic_objects" 908165eef222Smrg if test "$preload" = yes && test -f "$symfileobj"; then 9082200d7199Smrg func_append oldobjs " $symfileobj" 908365eef222Smrg fi 908465eef222Smrg fi 908565eef222Smrg addlibs="$old_convenience" 9086ef981d24Smrg fi 9087ef981d24Smrg 908865eef222Smrg if test -n "$addlibs"; then 908965eef222Smrg gentop="$output_objdir/${outputname}x" 9090200d7199Smrg func_append generated " $gentop" 9091ef981d24Smrg 909265eef222Smrg func_extract_archives $gentop $addlibs 9093200d7199Smrg func_append oldobjs " $func_extract_archives_result" 909465eef222Smrg fi 9095ef981d24Smrg 909665eef222Smrg # Do each command in the archive commands. 909765eef222Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 909865eef222Smrg cmds=$old_archive_from_new_cmds 909965eef222Smrg else 9100ef981d24Smrg 910165eef222Smrg # Add any objects from preloaded convenience libraries 910265eef222Smrg if test -n "$dlprefiles"; then 910365eef222Smrg gentop="$output_objdir/${outputname}x" 9104200d7199Smrg func_append generated " $gentop" 9105ef981d24Smrg 910665eef222Smrg func_extract_archives $gentop $dlprefiles 9107200d7199Smrg func_append oldobjs " $func_extract_archives_result" 910865eef222Smrg fi 9109ef981d24Smrg 911065eef222Smrg # POSIX demands no paths to be encoded in archives. We have 911165eef222Smrg # to avoid creating archives with duplicate basenames if we 911265eef222Smrg # might have to extract them afterwards, e.g., when creating a 911365eef222Smrg # static archive out of a convenience library, or when linking 911465eef222Smrg # the entirety of a libtool archive into another (currently 911565eef222Smrg # not supported by libtool). 911665eef222Smrg if (for obj in $oldobjs 911765eef222Smrg do 911865eef222Smrg func_basename "$obj" 911965eef222Smrg $ECHO "$func_basename_result" 912065eef222Smrg done | sort | sort -uc >/dev/null 2>&1); then 912165eef222Smrg : 912265eef222Smrg else 912356957a04Smrg echo "copying selected object files to avoid basename conflicts..." 912465eef222Smrg gentop="$output_objdir/${outputname}x" 9125200d7199Smrg func_append generated " $gentop" 912665eef222Smrg func_mkdir_p "$gentop" 912765eef222Smrg save_oldobjs=$oldobjs 912865eef222Smrg oldobjs= 912965eef222Smrg counter=1 913065eef222Smrg for obj in $save_oldobjs 913165eef222Smrg do 913265eef222Smrg func_basename "$obj" 913365eef222Smrg objbase="$func_basename_result" 913465eef222Smrg case " $oldobjs " in 913565eef222Smrg " ") oldobjs=$obj ;; 913665eef222Smrg *[\ /]"$objbase "*) 913765eef222Smrg while :; do 913865eef222Smrg # Make sure we don't pick an alternate name that also 913965eef222Smrg # overlaps. 914065eef222Smrg newobj=lt$counter-$objbase 914165eef222Smrg func_arith $counter + 1 914265eef222Smrg counter=$func_arith_result 914365eef222Smrg case " $oldobjs " in 914465eef222Smrg *[\ /]"$newobj "*) ;; 914565eef222Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 914665eef222Smrg esac 914765eef222Smrg done 914865eef222Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9149200d7199Smrg func_append oldobjs " $gentop/$newobj" 915065eef222Smrg ;; 9151200d7199Smrg *) func_append oldobjs " $obj" ;; 915265eef222Smrg esac 9153ef981d24Smrg done 9154ef981d24Smrg fi 915565eef222Smrg eval cmds=\"$old_archive_cmds\" 9156ef981d24Smrg 915765eef222Smrg func_len " $cmds" 915865eef222Smrg len=$func_len_result 915965eef222Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 916065eef222Smrg cmds=$old_archive_cmds 9161200d7199Smrg elif test -n "$archiver_list_spec"; then 9162200d7199Smrg func_verbose "using command file archive linking..." 9163200d7199Smrg for obj in $oldobjs 9164200d7199Smrg do 9165200d7199Smrg func_to_tool_file "$obj" 9166200d7199Smrg $ECHO "$func_to_tool_file_result" 9167200d7199Smrg done > $output_objdir/$libname.libcmd 9168200d7199Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 9169200d7199Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9170200d7199Smrg cmds=$old_archive_cmds 917165eef222Smrg else 917265eef222Smrg # the command line is too long to link in one step, link in parts 917365eef222Smrg func_verbose "using piecewise archive linking..." 917465eef222Smrg save_RANLIB=$RANLIB 917565eef222Smrg RANLIB=: 917665eef222Smrg objlist= 917765eef222Smrg concat_cmds= 917865eef222Smrg save_oldobjs=$oldobjs 917965eef222Smrg oldobjs= 918065eef222Smrg # Is there a better way of finding the last object in the list? 918165eef222Smrg for obj in $save_oldobjs 918265eef222Smrg do 918365eef222Smrg last_oldobj=$obj 918465eef222Smrg done 918565eef222Smrg eval test_cmds=\"$old_archive_cmds\" 918665eef222Smrg func_len " $test_cmds" 918765eef222Smrg len0=$func_len_result 918865eef222Smrg len=$len0 918965eef222Smrg for obj in $save_oldobjs 919065eef222Smrg do 919165eef222Smrg func_len " $obj" 919265eef222Smrg func_arith $len + $func_len_result 919365eef222Smrg len=$func_arith_result 919465eef222Smrg func_append objlist " $obj" 919565eef222Smrg if test "$len" -lt "$max_cmd_len"; then 919665eef222Smrg : 919765eef222Smrg else 919865eef222Smrg # the above command should be used before it gets too long 919965eef222Smrg oldobjs=$objlist 920065eef222Smrg if test "$obj" = "$last_oldobj" ; then 920165eef222Smrg RANLIB=$save_RANLIB 920265eef222Smrg fi 920365eef222Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 920465eef222Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 920565eef222Smrg objlist= 920665eef222Smrg len=$len0 920765eef222Smrg fi 920865eef222Smrg done 920965eef222Smrg RANLIB=$save_RANLIB 921065eef222Smrg oldobjs=$objlist 921165eef222Smrg if test "X$oldobjs" = "X" ; then 921265eef222Smrg eval cmds=\"\$concat_cmds\" 921365eef222Smrg else 921465eef222Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 921565eef222Smrg fi 921665eef222Smrg fi 921765eef222Smrg fi 921865eef222Smrg func_execute_cmds "$cmds" 'exit $?' 9219ef981d24Smrg done 9220ef981d24Smrg 922165eef222Smrg test -n "$generated" && \ 922265eef222Smrg func_show_eval "${RM}r$generated" 9223ef981d24Smrg 922465eef222Smrg # Now create the libtool archive. 922565eef222Smrg case $output in 922665eef222Smrg *.la) 922765eef222Smrg old_library= 922865eef222Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 922965eef222Smrg func_verbose "creating $output" 9230ef981d24Smrg 923165eef222Smrg # Preserve any variables that may affect compiler behavior 923265eef222Smrg for var in $variables_saved_for_relink; do 923365eef222Smrg if eval test -z \"\${$var+set}\"; then 923465eef222Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 923565eef222Smrg elif eval var_value=\$$var; test -z "$var_value"; then 923665eef222Smrg relink_command="$var=; export $var; $relink_command" 9237ef981d24Smrg else 923865eef222Smrg func_quote_for_eval "$var_value" 923965eef222Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9240ef981d24Smrg fi 924165eef222Smrg done 924265eef222Smrg # Quote the link command for shipping. 924365eef222Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 924456957a04Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 924565eef222Smrg if test "$hardcode_automatic" = yes ; then 924665eef222Smrg relink_command= 924765eef222Smrg fi 9248ef981d24Smrg 924965eef222Smrg # Only create the output if not a dry run. 925065eef222Smrg $opt_dry_run || { 925165eef222Smrg for installed in no yes; do 925265eef222Smrg if test "$installed" = yes; then 925365eef222Smrg if test -z "$install_libdir"; then 925465eef222Smrg break 925565eef222Smrg fi 925665eef222Smrg output="$output_objdir/$outputname"i 925765eef222Smrg # Replace all uninstalled libtool libraries with the installed ones 925865eef222Smrg newdependency_libs= 925965eef222Smrg for deplib in $dependency_libs; do 926065eef222Smrg case $deplib in 926165eef222Smrg *.la) 926265eef222Smrg func_basename "$deplib" 926365eef222Smrg name="$func_basename_result" 926465eef222Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 926565eef222Smrg test -z "$libdir" && \ 926665eef222Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 9267200d7199Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9268200d7199Smrg ;; 9269200d7199Smrg -L*) 9270200d7199Smrg func_stripname -L '' "$deplib" 9271200d7199Smrg func_replace_sysroot "$func_stripname_result" 9272200d7199Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9273200d7199Smrg ;; 9274200d7199Smrg -R*) 9275200d7199Smrg func_stripname -R '' "$deplib" 9276200d7199Smrg func_replace_sysroot "$func_stripname_result" 9277200d7199Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 927865eef222Smrg ;; 9279200d7199Smrg *) func_append newdependency_libs " $deplib" ;; 928065eef222Smrg esac 928165eef222Smrg done 928265eef222Smrg dependency_libs="$newdependency_libs" 928365eef222Smrg newdlfiles= 928465eef222Smrg 928565eef222Smrg for lib in $dlfiles; do 928665eef222Smrg case $lib in 928765eef222Smrg *.la) 928865eef222Smrg func_basename "$lib" 928965eef222Smrg name="$func_basename_result" 929065eef222Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 929165eef222Smrg test -z "$libdir" && \ 929265eef222Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 9293200d7199Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 929465eef222Smrg ;; 9295200d7199Smrg *) func_append newdlfiles " $lib" ;; 929665eef222Smrg esac 929765eef222Smrg done 929865eef222Smrg dlfiles="$newdlfiles" 929965eef222Smrg newdlprefiles= 930065eef222Smrg for lib in $dlprefiles; do 930165eef222Smrg case $lib in 930265eef222Smrg *.la) 930365eef222Smrg # Only pass preopened files to the pseudo-archive (for 930465eef222Smrg # eventual linking with the app. that links it) if we 930565eef222Smrg # didn't already link the preopened objects directly into 930665eef222Smrg # the library: 930765eef222Smrg func_basename "$lib" 930865eef222Smrg name="$func_basename_result" 930965eef222Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 931065eef222Smrg test -z "$libdir" && \ 931165eef222Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 9312200d7199Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 931365eef222Smrg ;; 931465eef222Smrg esac 931565eef222Smrg done 931665eef222Smrg dlprefiles="$newdlprefiles" 931765eef222Smrg else 931865eef222Smrg newdlfiles= 931965eef222Smrg for lib in $dlfiles; do 932065eef222Smrg case $lib in 932165eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 932265eef222Smrg *) abs=`pwd`"/$lib" ;; 932365eef222Smrg esac 9324200d7199Smrg func_append newdlfiles " $abs" 932565eef222Smrg done 932665eef222Smrg dlfiles="$newdlfiles" 932765eef222Smrg newdlprefiles= 932865eef222Smrg for lib in $dlprefiles; do 932965eef222Smrg case $lib in 933065eef222Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 933165eef222Smrg *) abs=`pwd`"/$lib" ;; 933265eef222Smrg esac 9333200d7199Smrg func_append newdlprefiles " $abs" 933465eef222Smrg done 933565eef222Smrg dlprefiles="$newdlprefiles" 933665eef222Smrg fi 933765eef222Smrg $RM $output 933865eef222Smrg # place dlname in correct position for cygwin 933956957a04Smrg # In fact, it would be nice if we could use this code for all target 934056957a04Smrg # systems that can't hard-code library paths into their executables 934156957a04Smrg # and that have no shared library path variable independent of PATH, 934256957a04Smrg # but it turns out we can't easily determine that from inspecting 934356957a04Smrg # libtool variables, so we have to hard-code the OSs to which it 934456957a04Smrg # applies here; at the moment, that means platforms that use the PE 934556957a04Smrg # object format with DLL files. See the long comment at the top of 934656957a04Smrg # tests/bindir.at for full details. 934765eef222Smrg tdlname=$dlname 934865eef222Smrg case $host,$output,$installed,$module,$dlname in 934956957a04Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 935056957a04Smrg # If a -bindir argument was supplied, place the dll there. 935156957a04Smrg if test "x$bindir" != x ; 935256957a04Smrg then 935356957a04Smrg func_relative_path "$install_libdir" "$bindir" 935456957a04Smrg tdlname=$func_relative_path_result$dlname 935556957a04Smrg else 935656957a04Smrg # Otherwise fall back on heuristic. 935756957a04Smrg tdlname=../bin/$dlname 935856957a04Smrg fi 935956957a04Smrg ;; 936065eef222Smrg esac 936165eef222Smrg $ECHO > $output "\ 936265eef222Smrg# $outputname - a libtool library file 936365eef222Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 936465eef222Smrg# 936565eef222Smrg# Please DO NOT delete this file! 936665eef222Smrg# It is necessary for linking the library. 9367ef981d24Smrg 936865eef222Smrg# The name that we can dlopen(3). 936965eef222Smrgdlname='$tdlname' 9370ef981d24Smrg 937165eef222Smrg# Names of this library. 937265eef222Smrglibrary_names='$library_names' 9373ef981d24Smrg 937465eef222Smrg# The name of the static archive. 937565eef222Smrgold_library='$old_library' 9376ef981d24Smrg 937765eef222Smrg# Linker flags that can not go in dependency_libs. 937865eef222Smrginherited_linker_flags='$new_inherited_linker_flags' 9379ef981d24Smrg 938065eef222Smrg# Libraries that this one depends upon. 938165eef222Smrgdependency_libs='$dependency_libs' 9382ef981d24Smrg 938365eef222Smrg# Names of additional weak libraries provided by this library 938465eef222Smrgweak_library_names='$weak_libs' 9385ef981d24Smrg 938665eef222Smrg# Version information for $libname. 938765eef222Smrgcurrent=$current 938865eef222Smrgage=$age 938965eef222Smrgrevision=$revision 9390ef981d24Smrg 939165eef222Smrg# Is this an already installed library? 939265eef222Smrginstalled=$installed 9393ef981d24Smrg 939465eef222Smrg# Should we warn about portability when linking against -modules? 939565eef222Smrgshouldnotlink=$module 9396ef981d24Smrg 939765eef222Smrg# Files to dlopen/dlpreopen 939865eef222Smrgdlopen='$dlfiles' 939965eef222Smrgdlpreopen='$dlprefiles' 9400ef981d24Smrg 940165eef222Smrg# Directory that this library needs to be installed in: 940265eef222Smrglibdir='$install_libdir'" 940365eef222Smrg if test "$installed" = no && test "$need_relink" = yes; then 940465eef222Smrg $ECHO >> $output "\ 940565eef222Smrgrelink_command=\"$relink_command\"" 940665eef222Smrg fi 940765eef222Smrg done 940865eef222Smrg } 9409ef981d24Smrg 941065eef222Smrg # Do a symbolic link so that the libtool archive can be found in 941165eef222Smrg # LD_LIBRARY_PATH before the program is installed. 941265eef222Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 941365eef222Smrg ;; 941465eef222Smrg esac 941565eef222Smrg exit $EXIT_SUCCESS 941665eef222Smrg} 9417ef981d24Smrg 9418200d7199Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 941965eef222Smrg func_mode_link ${1+"$@"} 9420ef981d24Smrg 9421ef981d24Smrg 942265eef222Smrg# func_mode_uninstall arg... 942365eef222Smrgfunc_mode_uninstall () 942465eef222Smrg{ 942565eef222Smrg $opt_debug 942665eef222Smrg RM="$nonopt" 9427ef981d24Smrg files= 9428ef981d24Smrg rmforce= 9429ef981d24Smrg exit_status=0 9430ef981d24Smrg 9431ef981d24Smrg # This variable tells wrapper scripts just to set variables rather 9432ef981d24Smrg # than running their programs. 9433ef981d24Smrg libtool_install_magic="$magic" 9434ef981d24Smrg 9435ef981d24Smrg for arg 9436ef981d24Smrg do 9437ef981d24Smrg case $arg in 9438200d7199Smrg -f) func_append RM " $arg"; rmforce=yes ;; 9439200d7199Smrg -*) func_append RM " $arg" ;; 9440200d7199Smrg *) func_append files " $arg" ;; 9441ef981d24Smrg esac 9442ef981d24Smrg done 9443ef981d24Smrg 944465eef222Smrg test -z "$RM" && \ 944565eef222Smrg func_fatal_help "you must specify an RM program" 9446ef981d24Smrg 9447ef981d24Smrg rmdirs= 9448ef981d24Smrg 9449ef981d24Smrg for file in $files; do 945065eef222Smrg func_dirname "$file" "" "." 945165eef222Smrg dir="$func_dirname_result" 945265eef222Smrg if test "X$dir" = X.; then 9453200d7199Smrg odir="$objdir" 9454ef981d24Smrg else 9455200d7199Smrg odir="$dir/$objdir" 9456ef981d24Smrg fi 945765eef222Smrg func_basename "$file" 945865eef222Smrg name="$func_basename_result" 9459200d7199Smrg test "$opt_mode" = uninstall && odir="$dir" 9460ef981d24Smrg 9461200d7199Smrg # Remember odir for removal later, being careful to avoid duplicates 9462200d7199Smrg if test "$opt_mode" = clean; then 9463ef981d24Smrg case " $rmdirs " in 9464200d7199Smrg *" $odir "*) ;; 9465200d7199Smrg *) func_append rmdirs " $odir" ;; 9466ef981d24Smrg esac 9467ef981d24Smrg fi 9468ef981d24Smrg 9469ef981d24Smrg # Don't error if the file doesn't exist and rm -f was used. 947065eef222Smrg if { test -L "$file"; } >/dev/null 2>&1 || 947165eef222Smrg { test -h "$file"; } >/dev/null 2>&1 || 947265eef222Smrg test -f "$file"; then 9473ef981d24Smrg : 9474ef981d24Smrg elif test -d "$file"; then 9475ef981d24Smrg exit_status=1 9476ef981d24Smrg continue 9477ef981d24Smrg elif test "$rmforce" = yes; then 9478ef981d24Smrg continue 9479ef981d24Smrg fi 9480ef981d24Smrg 9481ef981d24Smrg rmfiles="$file" 9482ef981d24Smrg 9483ef981d24Smrg case $name in 9484ef981d24Smrg *.la) 9485ef981d24Smrg # Possibly a libtool archive, so verify it. 948665eef222Smrg if func_lalib_p "$file"; then 948765eef222Smrg func_source $dir/$name 9488ef981d24Smrg 9489ef981d24Smrg # Delete the libtool libraries and symlinks. 9490ef981d24Smrg for n in $library_names; do 9491200d7199Smrg func_append rmfiles " $odir/$n" 9492ef981d24Smrg done 9493200d7199Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9494ef981d24Smrg 9495200d7199Smrg case "$opt_mode" in 9496ef981d24Smrg clean) 9497200d7199Smrg case " $library_names " in 9498ef981d24Smrg *" $dlname "*) ;; 9499200d7199Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9500ef981d24Smrg esac 9501200d7199Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9502ef981d24Smrg ;; 9503ef981d24Smrg uninstall) 9504ef981d24Smrg if test -n "$library_names"; then 9505ef981d24Smrg # Do each command in the postuninstall commands. 950665eef222Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9507ef981d24Smrg fi 9508ef981d24Smrg 9509ef981d24Smrg if test -n "$old_library"; then 9510ef981d24Smrg # Do each command in the old_postuninstall commands. 951165eef222Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9512ef981d24Smrg fi 9513ef981d24Smrg # FIXME: should reinstall the best remaining shared library. 9514ef981d24Smrg ;; 9515ef981d24Smrg esac 9516ef981d24Smrg fi 9517ef981d24Smrg ;; 9518ef981d24Smrg 9519ef981d24Smrg *.lo) 9520ef981d24Smrg # Possibly a libtool object, so verify it. 952165eef222Smrg if func_lalib_p "$file"; then 9522ef981d24Smrg 9523ef981d24Smrg # Read the .lo file 952465eef222Smrg func_source $dir/$name 9525ef981d24Smrg 9526ef981d24Smrg # Add PIC object to the list of files to remove. 952765eef222Smrg if test -n "$pic_object" && 952865eef222Smrg test "$pic_object" != none; then 9529200d7199Smrg func_append rmfiles " $dir/$pic_object" 9530ef981d24Smrg fi 9531ef981d24Smrg 9532ef981d24Smrg # Add non-PIC object to the list of files to remove. 953365eef222Smrg if test -n "$non_pic_object" && 953465eef222Smrg test "$non_pic_object" != none; then 9535200d7199Smrg func_append rmfiles " $dir/$non_pic_object" 9536ef981d24Smrg fi 9537ef981d24Smrg fi 9538ef981d24Smrg ;; 9539ef981d24Smrg 9540ef981d24Smrg *) 9541200d7199Smrg if test "$opt_mode" = clean ; then 9542ef981d24Smrg noexename=$name 9543ef981d24Smrg case $file in 9544ef981d24Smrg *.exe) 954565eef222Smrg func_stripname '' '.exe' "$file" 954665eef222Smrg file=$func_stripname_result 954765eef222Smrg func_stripname '' '.exe' "$name" 954865eef222Smrg noexename=$func_stripname_result 9549ef981d24Smrg # $file with .exe has already been added to rmfiles, 9550ef981d24Smrg # add $file without .exe 9551200d7199Smrg func_append rmfiles " $file" 9552ef981d24Smrg ;; 9553ef981d24Smrg esac 9554ef981d24Smrg # Do a test to see if this is a libtool program. 955565eef222Smrg if func_ltwrapper_p "$file"; then 955665eef222Smrg if func_ltwrapper_executable_p "$file"; then 955765eef222Smrg func_ltwrapper_scriptname "$file" 955865eef222Smrg relink_command= 955965eef222Smrg func_source $func_ltwrapper_scriptname_result 9560200d7199Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 956165eef222Smrg else 956265eef222Smrg relink_command= 956365eef222Smrg func_source $dir/$noexename 956465eef222Smrg fi 9565ef981d24Smrg 9566ef981d24Smrg # note $name still contains .exe if it was in $file originally 9567ef981d24Smrg # as does the version of $file that was added into $rmfiles 9568200d7199Smrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9569ef981d24Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 9570200d7199Smrg func_append rmfiles " $odir/lt-$name" 9571ef981d24Smrg fi 9572ef981d24Smrg if test "X$noexename" != "X$name" ; then 9573200d7199Smrg func_append rmfiles " $odir/lt-${noexename}.c" 9574ef981d24Smrg fi 9575ef981d24Smrg fi 9576ef981d24Smrg fi 9577ef981d24Smrg ;; 9578ef981d24Smrg esac 957965eef222Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9580ef981d24Smrg done 9581ef981d24Smrg 9582ef981d24Smrg # Try to remove the ${objdir}s in the directories where we deleted files 9583ef981d24Smrg for dir in $rmdirs; do 9584ef981d24Smrg if test -d "$dir"; then 958565eef222Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9586ef981d24Smrg fi 9587ef981d24Smrg done 9588ef981d24Smrg 9589ef981d24Smrg exit $exit_status 959065eef222Smrg} 9591ef981d24Smrg 9592200d7199Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 959365eef222Smrg func_mode_uninstall ${1+"$@"} 9594ef981d24Smrg 9595200d7199Smrgtest -z "$opt_mode" && { 959665eef222Smrg help="$generic_help" 959765eef222Smrg func_fatal_help "you must specify a MODE" 959865eef222Smrg} 959965eef222Smrg 960065eef222Smrgtest -z "$exec_cmd" && \ 9601200d7199Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 9602ef981d24Smrg 9603ef981d24Smrgif test -n "$exec_cmd"; then 960465eef222Smrg eval exec "$exec_cmd" 9605ef981d24Smrg exit $EXIT_FAILURE 9606ef981d24Smrgfi 9607ef981d24Smrg 960865eef222Smrgexit $exit_status 9609ef981d24Smrg 9610ef981d24Smrg 9611ef981d24Smrg# The TAGs below are defined such that we never get into a situation 9612ef981d24Smrg# in which we disable both kinds of libraries. Given conflicting 9613ef981d24Smrg# choices, we go for a static library, that is the most portable, 9614ef981d24Smrg# since we can't tell whether shared libraries were disabled because 9615ef981d24Smrg# the user asked for that or because the platform doesn't support 9616ef981d24Smrg# them. This is particularly important on AIX, because we don't 9617ef981d24Smrg# support having both static and shared libraries enabled at the same 9618ef981d24Smrg# time on that platform, so we default to a shared-only configuration. 9619ef981d24Smrg# If a disable-shared tag is given, we'll fallback to a static-only 9620ef981d24Smrg# configuration. But we'll never go from static-only to shared-only. 9621ef981d24Smrg 9622ef981d24Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 962365eef222Smrgbuild_libtool_libs=no 962465eef222Smrgbuild_old_libs=yes 9625ef981d24Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 9626ef981d24Smrg 9627ef981d24Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 962865eef222Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9629ef981d24Smrg# ### END LIBTOOL TAG CONFIG: disable-static 9630ef981d24Smrg 9631ef981d24Smrg# Local Variables: 9632ef981d24Smrg# mode:shell-script 9633ef981d24Smrg# sh-indentation:2 9634ef981d24Smrg# End: 963565eef222Smrg# vi:sw=2 963665eef222Smrg 9637