ltmain.sh revision 85ee4c00
185ee4c00Smrg# Generated from ltmain.m4sh. 285ee4c00Smrg 385ee4c00Smrg# ltmain.sh (GNU libtool) 2.2.6 485ee4c00Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 585ee4c00Smrg 685ee4c00Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. 785ee4c00Smrg# This is free software; see the source for copying conditions. There is NO 885ee4c00Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 985ee4c00Smrg 1085ee4c00Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11692f60a7Smrg# it under the terms of the GNU General Public License as published by 12692f60a7Smrg# the Free Software Foundation; either version 2 of the License, or 13692f60a7Smrg# (at your option) any later version. 14692f60a7Smrg# 1585ee4c00Smrg# As a special exception to the GNU General Public License, 1685ee4c00Smrg# if you distribute this file as part of a program or library that 1785ee4c00Smrg# is built using GNU Libtool, you may include this file under the 1885ee4c00Smrg# same distribution terms that you use for the rest of that program. 1985ee4c00Smrg# 2085ee4c00Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21692f60a7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22692f60a7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23692f60a7Smrg# General Public License for more details. 24692f60a7Smrg# 25692f60a7Smrg# You should have received a copy of the GNU General Public License 2685ee4c00Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 2785ee4c00Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 2885ee4c00Smrg# or obtained by writing to the Free Software Foundation, Inc., 2985ee4c00Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30692f60a7Smrg 3185ee4c00Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 3285ee4c00Smrg# 3385ee4c00Smrg# Provide generalized library-building support services. 3485ee4c00Smrg# 3585ee4c00Smrg# --config show all configuration variables 3685ee4c00Smrg# --debug enable verbose shell tracing 3785ee4c00Smrg# -n, --dry-run display commands without modifying any files 3885ee4c00Smrg# --features display basic configuration information and exit 3985ee4c00Smrg# --mode=MODE use operation mode MODE 4085ee4c00Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 4185ee4c00Smrg# --quiet, --silent don't print informational messages 4285ee4c00Smrg# --tag=TAG use configuration variables from tag TAG 4385ee4c00Smrg# -v, --verbose print informational messages (default) 4485ee4c00Smrg# --version print version information 4585ee4c00Smrg# -h, --help print short or long help message 4685ee4c00Smrg# 4785ee4c00Smrg# MODE must be one of the following: 4885ee4c00Smrg# 4985ee4c00Smrg# clean remove files from the build directory 5085ee4c00Smrg# compile compile a source file into a libtool object 5185ee4c00Smrg# execute automatically set library path, then run a program 5285ee4c00Smrg# finish complete the installation of libtool libraries 5385ee4c00Smrg# install install libraries or executables 5485ee4c00Smrg# link create a library or an executable 5585ee4c00Smrg# uninstall remove libraries from an installed directory 5685ee4c00Smrg# 5785ee4c00Smrg# MODE-ARGS vary depending on the MODE. 5885ee4c00Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 5985ee4c00Smrg# 6085ee4c00Smrg# When reporting a bug, please describe a test case to reproduce it and 6185ee4c00Smrg# include the following information: 6285ee4c00Smrg# 6385ee4c00Smrg# host-triplet: $host 6485ee4c00Smrg# shell: $SHELL 6585ee4c00Smrg# compiler: $LTCC 6685ee4c00Smrg# compiler flags: $LTCFLAGS 6785ee4c00Smrg# linker: $LD (gnu? $with_gnu_ld) 6885ee4c00Smrg# $progname: (GNU libtool) 2.2.6 6985ee4c00Smrg# automake: $automake_version 7085ee4c00Smrg# autoconf: $autoconf_version 7185ee4c00Smrg# 7285ee4c00Smrg# Report bugs to <bug-libtool@gnu.org>. 73692f60a7Smrg 74692f60a7SmrgPROGRAM=ltmain.sh 75692f60a7SmrgPACKAGE=libtool 7685ee4c00SmrgVERSION=2.2.6 7785ee4c00SmrgTIMESTAMP="" 7885ee4c00Smrgpackage_revision=1.3012 7954569438Smrg 8085ee4c00Smrg# Be Bourne compatible 8154569438Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8254569438Smrg emulate sh 8354569438Smrg NULLCMD=: 8454569438Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 8554569438Smrg # is contrary to our usage. Disable this feature. 8654569438Smrg alias -g '${1+"$@"}'='"$@"' 87692f60a7Smrg setopt NO_GLOB_SUBST 8854569438Smrgelse 8954569438Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 90692f60a7Smrgfi 9154569438SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9254569438SmrgDUALCASE=1; export DUALCASE # for MKS sh 93692f60a7Smrg 9485ee4c00Smrg# NLS nuisances: We save the old values to restore during execute mode. 95692f60a7Smrg# Only set LANG and LC_ALL to C if already set. 96692f60a7Smrg# These must not be set unconditionally because not all systems understand 97692f60a7Smrg# e.g. LANG=C (notably SCO). 9885ee4c00Smrglt_user_locale= 9985ee4c00Smrglt_safe_locale= 10054569438Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 10154569438Smrgdo 10254569438Smrg eval "if test \"\${$lt_var+set}\" = set; then 10385ee4c00Smrg save_$lt_var=\$$lt_var 10485ee4c00Smrg $lt_var=C 10554569438Smrg export $lt_var 10685ee4c00Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 10785ee4c00Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 10854569438Smrg fi" 10954569438Smrgdone 11054569438Smrg 11185ee4c00Smrg$lt_unset CDPATH 11285ee4c00Smrg 11385ee4c00Smrg 11485ee4c00Smrg 11585ee4c00Smrg 11685ee4c00Smrg 11785ee4c00Smrg: ${CP="cp -f"} 11885ee4c00Smrg: ${ECHO="echo"} 11985ee4c00Smrg: ${EGREP="/bin/grep -E"} 12085ee4c00Smrg: ${FGREP="/bin/grep -F"} 12185ee4c00Smrg: ${GREP="/bin/grep"} 12285ee4c00Smrg: ${LN_S="ln -s"} 12385ee4c00Smrg: ${MAKE="make"} 12485ee4c00Smrg: ${MKDIR="mkdir"} 12585ee4c00Smrg: ${MV="mv -f"} 12685ee4c00Smrg: ${RM="rm -f"} 12785ee4c00Smrg: ${SED="/bin/sed"} 12885ee4c00Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 12985ee4c00Smrg: ${Xsed="$SED -e 1s/^X//"} 13085ee4c00Smrg 13185ee4c00Smrg# Global variables: 13285ee4c00SmrgEXIT_SUCCESS=0 13385ee4c00SmrgEXIT_FAILURE=1 13485ee4c00SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 13585ee4c00SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 13685ee4c00Smrg 13785ee4c00Smrgexit_status=$EXIT_SUCCESS 138692f60a7Smrg 139692f60a7Smrg# Make sure IFS has a sensible default 140692f60a7Smrglt_nl=' 141692f60a7Smrg' 142692f60a7SmrgIFS=" $lt_nl" 143692f60a7Smrg 14485ee4c00Smrgdirname="s,/[^/]*$,," 14585ee4c00Smrgbasename="s,^.*/,," 14685ee4c00Smrg 14785ee4c00Smrg# func_dirname_and_basename file append nondir_replacement 14885ee4c00Smrg# perform func_basename and func_dirname in a single function 14985ee4c00Smrg# call: 15085ee4c00Smrg# dirname: Compute the dirname of FILE. If nonempty, 15185ee4c00Smrg# add APPEND to the result, otherwise set result 15285ee4c00Smrg# to NONDIR_REPLACEMENT. 15385ee4c00Smrg# value returned in "$func_dirname_result" 15485ee4c00Smrg# basename: Compute filename of FILE. 15585ee4c00Smrg# value retuned in "$func_basename_result" 15685ee4c00Smrg# Implementation must be kept synchronized with func_dirname 15785ee4c00Smrg# and func_basename. For efficiency, we do not delegate to 15885ee4c00Smrg# those functions but instead duplicate the functionality here. 15985ee4c00Smrgfunc_dirname_and_basename () 16085ee4c00Smrg{ 16185ee4c00Smrg # Extract subdirectory from the argument. 16285ee4c00Smrg func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` 16385ee4c00Smrg if test "X$func_dirname_result" = "X${1}"; then 16485ee4c00Smrg func_dirname_result="${3}" 16585ee4c00Smrg else 16685ee4c00Smrg func_dirname_result="$func_dirname_result${2}" 16785ee4c00Smrg fi 16885ee4c00Smrg func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` 16985ee4c00Smrg} 170692f60a7Smrg 17185ee4c00Smrg# Generated shell functions inserted here. 17285ee4c00Smrg 17385ee4c00Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 17485ee4c00Smrg# is ksh but when the shell is invoked as "sh" and the current value of 17585ee4c00Smrg# the _XPG environment variable is not equal to 1 (one), the special 17685ee4c00Smrg# positional parameter $0, within a function call, is the name of the 17785ee4c00Smrg# function. 17885ee4c00Smrgprogpath="$0" 17985ee4c00Smrg 18085ee4c00Smrg# The name of this program: 18185ee4c00Smrg# In the unlikely event $progname began with a '-', it would play havoc with 18285ee4c00Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case: 18385ee4c00Smrgfunc_dirname_and_basename "$progpath" 18485ee4c00Smrgprogname=$func_basename_result 18585ee4c00Smrgcase $progname in 18685ee4c00Smrg -*) progname=./$progname ;; 18785ee4c00Smrgesac 18885ee4c00Smrg 18985ee4c00Smrg# Make sure we have an absolute path for reexecution: 19085ee4c00Smrgcase $progpath in 19185ee4c00Smrg [\\/]*|[A-Za-z]:\\*) ;; 19285ee4c00Smrg *[\\/]*) 19385ee4c00Smrg progdir=$func_dirname_result 19485ee4c00Smrg progdir=`cd "$progdir" && pwd` 19585ee4c00Smrg progpath="$progdir/$progname" 19685ee4c00Smrg ;; 19785ee4c00Smrg *) 19885ee4c00Smrg save_IFS="$IFS" 19985ee4c00Smrg IFS=: 20085ee4c00Smrg for progdir in $PATH; do 20185ee4c00Smrg IFS="$save_IFS" 20285ee4c00Smrg test -x "$progdir/$progname" && break 20385ee4c00Smrg done 20485ee4c00Smrg IFS="$save_IFS" 20585ee4c00Smrg test -n "$progdir" || progdir=`pwd` 20685ee4c00Smrg progpath="$progdir/$progname" 20785ee4c00Smrg ;; 20885ee4c00Smrgesac 20985ee4c00Smrg 21085ee4c00Smrg# Sed substitution that helps us do robust quoting. It backslashifies 21185ee4c00Smrg# metacharacters that are still active within double-quoted strings. 21285ee4c00SmrgXsed="${SED}"' -e 1s/^X//' 21385ee4c00Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 21485ee4c00Smrg 21585ee4c00Smrg# Same as above, but do not quote variable references. 21685ee4c00Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 21785ee4c00Smrg 21885ee4c00Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 21985ee4c00Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 22085ee4c00Smrg# in input to double_quote_subst, that '$' was protected from expansion. 22185ee4c00Smrg# Since each input `\' is now two `\'s, look for any number of runs of 22285ee4c00Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 22385ee4c00Smrgbs='\\' 22485ee4c00Smrgbs2='\\\\' 22585ee4c00Smrgbs4='\\\\\\\\' 22685ee4c00Smrgdollar='\$' 22785ee4c00Smrgsed_double_backslash="\ 22885ee4c00Smrg s/$bs4/&\\ 22985ee4c00Smrg/g 23085ee4c00Smrg s/^$bs2$dollar/$bs&/ 23185ee4c00Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 23285ee4c00Smrg s/\n//g" 23385ee4c00Smrg 23485ee4c00Smrg# Standard options: 23585ee4c00Smrgopt_dry_run=false 23685ee4c00Smrgopt_help=false 23785ee4c00Smrgopt_quiet=false 23885ee4c00Smrgopt_verbose=false 23985ee4c00Smrgopt_warning=: 24085ee4c00Smrg 24185ee4c00Smrg# func_echo arg... 24285ee4c00Smrg# Echo program name prefixed message, along with the current mode 24385ee4c00Smrg# name if it has been set yet. 24485ee4c00Smrgfunc_echo () 24585ee4c00Smrg{ 24685ee4c00Smrg $ECHO "$progname${mode+: }$mode: $*" 24785ee4c00Smrg} 24885ee4c00Smrg 24985ee4c00Smrg# func_verbose arg... 25085ee4c00Smrg# Echo program name prefixed message in verbose mode only. 25185ee4c00Smrgfunc_verbose () 25285ee4c00Smrg{ 25385ee4c00Smrg $opt_verbose && func_echo ${1+"$@"} 25485ee4c00Smrg 25585ee4c00Smrg # A bug in bash halts the script if the last line of a function 25685ee4c00Smrg # fails when set -e is in force, so we need another command to 25785ee4c00Smrg # work around that: 25885ee4c00Smrg : 25985ee4c00Smrg} 26085ee4c00Smrg 26185ee4c00Smrg# func_error arg... 26285ee4c00Smrg# Echo program name prefixed message to standard error. 26385ee4c00Smrgfunc_error () 26485ee4c00Smrg{ 26585ee4c00Smrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 26685ee4c00Smrg} 26785ee4c00Smrg 26885ee4c00Smrg# func_warning arg... 26985ee4c00Smrg# Echo program name prefixed warning message to standard error. 27085ee4c00Smrgfunc_warning () 27185ee4c00Smrg{ 27285ee4c00Smrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 27385ee4c00Smrg 27485ee4c00Smrg # bash bug again: 27585ee4c00Smrg : 27685ee4c00Smrg} 27785ee4c00Smrg 27885ee4c00Smrg# func_fatal_error arg... 27985ee4c00Smrg# Echo program name prefixed message to standard error, and exit. 28085ee4c00Smrgfunc_fatal_error () 28185ee4c00Smrg{ 28285ee4c00Smrg func_error ${1+"$@"} 28385ee4c00Smrg exit $EXIT_FAILURE 28485ee4c00Smrg} 28585ee4c00Smrg 28685ee4c00Smrg# func_fatal_help arg... 28785ee4c00Smrg# Echo program name prefixed message to standard error, followed by 28885ee4c00Smrg# a help hint, and exit. 28985ee4c00Smrgfunc_fatal_help () 29085ee4c00Smrg{ 29185ee4c00Smrg func_error ${1+"$@"} 29285ee4c00Smrg func_fatal_error "$help" 29385ee4c00Smrg} 29485ee4c00Smrghelp="Try \`$progname --help' for more information." ## default 29585ee4c00Smrg 29685ee4c00Smrg 29785ee4c00Smrg# func_grep expression filename 29885ee4c00Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 29985ee4c00Smrgfunc_grep () 30085ee4c00Smrg{ 30185ee4c00Smrg $GREP "$1" "$2" >/dev/null 2>&1 30285ee4c00Smrg} 30385ee4c00Smrg 30485ee4c00Smrg 30585ee4c00Smrg# func_mkdir_p directory-path 30685ee4c00Smrg# Make sure the entire path to DIRECTORY-PATH is available. 30785ee4c00Smrgfunc_mkdir_p () 30885ee4c00Smrg{ 30985ee4c00Smrg my_directory_path="$1" 31085ee4c00Smrg my_dir_list= 31185ee4c00Smrg 31285ee4c00Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 31385ee4c00Smrg 31485ee4c00Smrg # Protect directory names starting with `-' 31585ee4c00Smrg case $my_directory_path in 31685ee4c00Smrg -*) my_directory_path="./$my_directory_path" ;; 31785ee4c00Smrg esac 31885ee4c00Smrg 31985ee4c00Smrg # While some portion of DIR does not yet exist... 32085ee4c00Smrg while test ! -d "$my_directory_path"; do 32185ee4c00Smrg # ...make a list in topmost first order. Use a colon delimited 32285ee4c00Smrg # list incase some portion of path contains whitespace. 32385ee4c00Smrg my_dir_list="$my_directory_path:$my_dir_list" 32485ee4c00Smrg 32585ee4c00Smrg # If the last portion added has no slash in it, the list is done 32685ee4c00Smrg case $my_directory_path in */*) ;; *) break ;; esac 32785ee4c00Smrg 32885ee4c00Smrg # ...otherwise throw away the child directory and loop 32985ee4c00Smrg my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` 33085ee4c00Smrg done 33185ee4c00Smrg my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` 33285ee4c00Smrg 33385ee4c00Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 33485ee4c00Smrg for my_dir in $my_dir_list; do 33585ee4c00Smrg IFS="$save_mkdir_p_IFS" 33685ee4c00Smrg # mkdir can fail with a `File exist' error if two processes 33785ee4c00Smrg # try to create one of the directories concurrently. Don't 33885ee4c00Smrg # stop in that case! 33985ee4c00Smrg $MKDIR "$my_dir" 2>/dev/null || : 34085ee4c00Smrg done 34185ee4c00Smrg IFS="$save_mkdir_p_IFS" 34285ee4c00Smrg 34385ee4c00Smrg # Bail out if we (or some other process) failed to create a directory. 34485ee4c00Smrg test -d "$my_directory_path" || \ 34585ee4c00Smrg func_fatal_error "Failed to create \`$1'" 34685ee4c00Smrg fi 34785ee4c00Smrg} 348692f60a7Smrg 349692f60a7Smrg 350692f60a7Smrg# func_mktempdir [string] 351692f60a7Smrg# Make a temporary directory that won't clash with other running 352692f60a7Smrg# libtool processes, and avoids race conditions if possible. If 353692f60a7Smrg# given, STRING is the basename for that directory. 354692f60a7Smrgfunc_mktempdir () 355692f60a7Smrg{ 356692f60a7Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 357692f60a7Smrg 35885ee4c00Smrg if test "$opt_dry_run" = ":"; then 359692f60a7Smrg # Return a directory name, but don't create it in dry-run mode 360692f60a7Smrg my_tmpdir="${my_template}-$$" 361692f60a7Smrg else 362692f60a7Smrg 363692f60a7Smrg # If mktemp works, use that first and foremost 364692f60a7Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 365692f60a7Smrg 366692f60a7Smrg if test ! -d "$my_tmpdir"; then 36785ee4c00Smrg # Failing that, at least try and use $RANDOM to avoid a race 36885ee4c00Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 369692f60a7Smrg 37085ee4c00Smrg save_mktempdir_umask=`umask` 37185ee4c00Smrg umask 0077 37285ee4c00Smrg $MKDIR "$my_tmpdir" 37385ee4c00Smrg umask $save_mktempdir_umask 374692f60a7Smrg fi 375692f60a7Smrg 376692f60a7Smrg # If we're not in dry-run mode, bomb out on failure 37785ee4c00Smrg test -d "$my_tmpdir" || \ 37885ee4c00Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 379692f60a7Smrg fi 380692f60a7Smrg 38185ee4c00Smrg $ECHO "X$my_tmpdir" | $Xsed 382692f60a7Smrg} 383692f60a7Smrg 384692f60a7Smrg 38585ee4c00Smrg# func_quote_for_eval arg 38685ee4c00Smrg# Aesthetically quote ARG to be evaled later. 38785ee4c00Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 38885ee4c00Smrg# is double-quoted, suitable for a subsequent eval, whereas 38985ee4c00Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 39085ee4c00Smrg# which are still active within double quotes backslashified. 39185ee4c00Smrgfunc_quote_for_eval () 392692f60a7Smrg{ 39385ee4c00Smrg case $1 in 39485ee4c00Smrg *[\\\`\"\$]*) 39585ee4c00Smrg func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; 39685ee4c00Smrg *) 39785ee4c00Smrg func_quote_for_eval_unquoted_result="$1" ;; 39885ee4c00Smrg esac 39985ee4c00Smrg 40085ee4c00Smrg case $func_quote_for_eval_unquoted_result in 40185ee4c00Smrg # Double-quote args containing shell metacharacters to delay 40285ee4c00Smrg # word splitting, command substitution and and variable 40385ee4c00Smrg # expansion for a subsequent eval. 40485ee4c00Smrg # Many Bourne shells cannot handle close brackets correctly 40585ee4c00Smrg # in scan sets, so we specify it separately. 40685ee4c00Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 40785ee4c00Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 40885ee4c00Smrg ;; 40985ee4c00Smrg *) 41085ee4c00Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 411692f60a7Smrg esac 412692f60a7Smrg} 413692f60a7Smrg 414692f60a7Smrg 41585ee4c00Smrg# func_quote_for_expand arg 41685ee4c00Smrg# Aesthetically quote ARG to be evaled later; same as above, 41785ee4c00Smrg# but do not quote variable references. 41885ee4c00Smrgfunc_quote_for_expand () 419692f60a7Smrg{ 42085ee4c00Smrg case $1 in 42185ee4c00Smrg *[\\\`\"]*) 42285ee4c00Smrg my_arg=`$ECHO "X$1" | $Xsed \ 42385ee4c00Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 424692f60a7Smrg *) 42585ee4c00Smrg my_arg="$1" ;; 42685ee4c00Smrg esac 42785ee4c00Smrg 42885ee4c00Smrg case $my_arg in 42985ee4c00Smrg # Double-quote args containing shell metacharacters to delay 43085ee4c00Smrg # word splitting and command substitution for a subsequent eval. 43185ee4c00Smrg # Many Bourne shells cannot handle close brackets correctly 43285ee4c00Smrg # in scan sets, so we specify it separately. 43385ee4c00Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 43485ee4c00Smrg my_arg="\"$my_arg\"" 43585ee4c00Smrg ;; 43685ee4c00Smrg esac 43785ee4c00Smrg 43885ee4c00Smrg func_quote_for_expand_result="$my_arg" 439692f60a7Smrg} 440692f60a7Smrg 441692f60a7Smrg 44285ee4c00Smrg# func_show_eval cmd [fail_exp] 44385ee4c00Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 44485ee4c00Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 44585ee4c00Smrg# is given, then evaluate it. 44685ee4c00Smrgfunc_show_eval () 447692f60a7Smrg{ 44885ee4c00Smrg my_cmd="$1" 44985ee4c00Smrg my_fail_exp="${2-:}" 450692f60a7Smrg 45185ee4c00Smrg ${opt_silent-false} || { 45285ee4c00Smrg func_quote_for_expand "$my_cmd" 45385ee4c00Smrg eval "func_echo $func_quote_for_expand_result" 45485ee4c00Smrg } 45585ee4c00Smrg 45685ee4c00Smrg if ${opt_dry_run-false}; then :; else 45785ee4c00Smrg eval "$my_cmd" 45885ee4c00Smrg my_status=$? 45985ee4c00Smrg if test "$my_status" -eq 0; then :; else 46085ee4c00Smrg eval "(exit $my_status); $my_fail_exp" 46185ee4c00Smrg fi 462692f60a7Smrg fi 463692f60a7Smrg} 464692f60a7Smrg 46585ee4c00Smrg 46685ee4c00Smrg# func_show_eval_locale cmd [fail_exp] 46785ee4c00Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 46885ee4c00Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 46985ee4c00Smrg# is given, then evaluate it. Use the saved locale for evaluation. 47085ee4c00Smrgfunc_show_eval_locale () 471692f60a7Smrg{ 47285ee4c00Smrg my_cmd="$1" 47385ee4c00Smrg my_fail_exp="${2-:}" 47485ee4c00Smrg 47585ee4c00Smrg ${opt_silent-false} || { 47685ee4c00Smrg func_quote_for_expand "$my_cmd" 47785ee4c00Smrg eval "func_echo $func_quote_for_expand_result" 47885ee4c00Smrg } 47985ee4c00Smrg 48085ee4c00Smrg if ${opt_dry_run-false}; then :; else 48185ee4c00Smrg eval "$lt_user_locale 48285ee4c00Smrg $my_cmd" 48385ee4c00Smrg my_status=$? 48485ee4c00Smrg eval "$lt_safe_locale" 48585ee4c00Smrg if test "$my_status" -eq 0; then :; else 48685ee4c00Smrg eval "(exit $my_status); $my_fail_exp" 48785ee4c00Smrg fi 488692f60a7Smrg fi 48985ee4c00Smrg} 490692f60a7Smrg 491692f60a7Smrg 49285ee4c00Smrg 49385ee4c00Smrg 49485ee4c00Smrg 49585ee4c00Smrg# func_version 49685ee4c00Smrg# Echo version message to standard output and exit. 49785ee4c00Smrgfunc_version () 49885ee4c00Smrg{ 49985ee4c00Smrg $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { 50085ee4c00Smrg s/^# // 50185ee4c00Smrg s/^# *$// 50285ee4c00Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 50385ee4c00Smrg p 50485ee4c00Smrg }' < "$progpath" 50585ee4c00Smrg exit $? 50685ee4c00Smrg} 50785ee4c00Smrg 50885ee4c00Smrg# func_usage 50985ee4c00Smrg# Echo short help message to standard output and exit. 51085ee4c00Smrgfunc_usage () 51185ee4c00Smrg{ 51285ee4c00Smrg $SED -n '/^# Usage:/,/# -h/ { 51385ee4c00Smrg s/^# // 51485ee4c00Smrg s/^# *$// 51585ee4c00Smrg s/\$progname/'$progname'/ 51685ee4c00Smrg p 51785ee4c00Smrg }' < "$progpath" 51885ee4c00Smrg $ECHO 51985ee4c00Smrg $ECHO "run \`$progname --help | more' for full usage" 52085ee4c00Smrg exit $? 52185ee4c00Smrg} 52285ee4c00Smrg 52385ee4c00Smrg# func_help 52485ee4c00Smrg# Echo long help message to standard output and exit. 52585ee4c00Smrgfunc_help () 52685ee4c00Smrg{ 52785ee4c00Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 52885ee4c00Smrg s/^# // 52985ee4c00Smrg s/^# *$// 53085ee4c00Smrg s*\$progname*'$progname'* 53185ee4c00Smrg s*\$host*'"$host"'* 53285ee4c00Smrg s*\$SHELL*'"$SHELL"'* 53385ee4c00Smrg s*\$LTCC*'"$LTCC"'* 53485ee4c00Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 53585ee4c00Smrg s*\$LD*'"$LD"'* 53685ee4c00Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 53785ee4c00Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 53885ee4c00Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 53985ee4c00Smrg p 54085ee4c00Smrg }' < "$progpath" 54185ee4c00Smrg exit $? 54285ee4c00Smrg} 54385ee4c00Smrg 54485ee4c00Smrg# func_missing_arg argname 54585ee4c00Smrg# Echo program name prefixed message to standard error and set global 54685ee4c00Smrg# exit_cmd. 54785ee4c00Smrgfunc_missing_arg () 54885ee4c00Smrg{ 54985ee4c00Smrg func_error "missing argument for $1" 55085ee4c00Smrg exit_cmd=exit 551692f60a7Smrg} 552692f60a7Smrg 55385ee4c00Smrgexit_cmd=: 554692f60a7Smrg 555692f60a7Smrg 55685ee4c00Smrg 55785ee4c00Smrg 55885ee4c00Smrg 55985ee4c00Smrg# Check that we have a working $ECHO. 56085ee4c00Smrgif test "X$1" = X--no-reexec; then 56185ee4c00Smrg # Discard the --no-reexec flag, and continue. 562692f60a7Smrg shift 56385ee4c00Smrgelif test "X$1" = X--fallback-echo; then 56485ee4c00Smrg # Avoid inline document here, it may be left over 56585ee4c00Smrg : 56685ee4c00Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then 56785ee4c00Smrg # Yippee, $ECHO works! 56885ee4c00Smrg : 56985ee4c00Smrgelse 57085ee4c00Smrg # Restart under the correct shell, and then maybe $ECHO will work. 57185ee4c00Smrg exec $SHELL "$progpath" --no-reexec ${1+"$@"} 57285ee4c00Smrgfi 573692f60a7Smrg 57485ee4c00Smrgif test "X$1" = X--fallback-echo; then 57585ee4c00Smrg # used as fallback echo 57685ee4c00Smrg shift 57785ee4c00Smrg cat <<EOF 57885ee4c00Smrg$* 57985ee4c00SmrgEOF 58085ee4c00Smrg exit $EXIT_SUCCESS 58185ee4c00Smrgfi 582692f60a7Smrg 58385ee4c00Smrgmagic="%%%MAGIC variable%%%" 58485ee4c00Smrgmagic_exe="%%%MAGIC EXE variable%%%" 585692f60a7Smrg 58685ee4c00Smrg# Global variables. 58785ee4c00Smrg# $mode is unset 58885ee4c00Smrgnonopt= 58985ee4c00Smrgexecute_dlfiles= 59085ee4c00Smrgpreserve_args= 59185ee4c00Smrglo2o="s/\\.lo\$/.${objext}/" 59285ee4c00Smrgo2lo="s/\\.${objext}\$/.lo/" 59385ee4c00Smrgextracted_archives= 59485ee4c00Smrgextracted_serial=0 595692f60a7Smrg 59685ee4c00Smrgopt_dry_run=false 59785ee4c00Smrgopt_duplicate_deps=false 59885ee4c00Smrgopt_silent=false 59985ee4c00Smrgopt_debug=: 600692f60a7Smrg 60185ee4c00Smrg# If this variable is set in any of the actions, the command in it 60285ee4c00Smrg# will be execed at the end. This prevents here-documents from being 60385ee4c00Smrg# left over by shells. 60485ee4c00Smrgexec_cmd= 60585ee4c00Smrg 60685ee4c00Smrg# func_fatal_configuration arg... 60785ee4c00Smrg# Echo program name prefixed message to standard error, followed by 60885ee4c00Smrg# a configuration failure hint, and exit. 60985ee4c00Smrgfunc_fatal_configuration () 61085ee4c00Smrg{ 61185ee4c00Smrg func_error ${1+"$@"} 61285ee4c00Smrg func_error "See the $PACKAGE documentation for more information." 61385ee4c00Smrg func_fatal_error "Fatal configuration error." 61485ee4c00Smrg} 615692f60a7Smrg 61654569438Smrg 61785ee4c00Smrg# func_config 61885ee4c00Smrg# Display the configuration for all the tags in this script. 61985ee4c00Smrgfunc_config () 62085ee4c00Smrg{ 62185ee4c00Smrg re_begincf='^# ### BEGIN LIBTOOL' 62285ee4c00Smrg re_endcf='^# ### END LIBTOOL' 62385ee4c00Smrg 62485ee4c00Smrg # Default configuration. 62585ee4c00Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 626692f60a7Smrg 627692f60a7Smrg # Now print the configurations for the tags. 628692f60a7Smrg for tagname in $taglist; do 62985ee4c00Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 630692f60a7Smrg done 631692f60a7Smrg 63285ee4c00Smrg exit $? 63385ee4c00Smrg} 634692f60a7Smrg 63585ee4c00Smrg# func_features 63685ee4c00Smrg# Display the features supported by this script. 63785ee4c00Smrgfunc_features () 63885ee4c00Smrg{ 63985ee4c00Smrg $ECHO "host: $host" 640692f60a7Smrg if test "$build_libtool_libs" = yes; then 64185ee4c00Smrg $ECHO "enable shared libraries" 642692f60a7Smrg else 64385ee4c00Smrg $ECHO "disable shared libraries" 644692f60a7Smrg fi 645692f60a7Smrg if test "$build_old_libs" = yes; then 64685ee4c00Smrg $ECHO "enable static libraries" 647692f60a7Smrg else 64885ee4c00Smrg $ECHO "disable static libraries" 649692f60a7Smrg fi 65085ee4c00Smrg 651692f60a7Smrg exit $? 65285ee4c00Smrg} 653692f60a7Smrg 65485ee4c00Smrg# func_enable_tag tagname 65585ee4c00Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 65685ee4c00Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 65785ee4c00Smrg# variable here. 65885ee4c00Smrgfunc_enable_tag () 65985ee4c00Smrg{ 66085ee4c00Smrg # Global variable: 66185ee4c00Smrg tagname="$1" 662692f60a7Smrg 66385ee4c00Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 66485ee4c00Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 66585ee4c00Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 666692f60a7Smrg 66785ee4c00Smrg # Validate tagname. 66885ee4c00Smrg case $tagname in 66985ee4c00Smrg *[!-_A-Za-z0-9,/]*) 67085ee4c00Smrg func_fatal_error "invalid tag name: $tagname" 67185ee4c00Smrg ;; 67285ee4c00Smrg esac 673692f60a7Smrg 67485ee4c00Smrg # Don't test for the "default" C tag, as we know it's 67585ee4c00Smrg # there but not specially marked. 67685ee4c00Smrg case $tagname in 67785ee4c00Smrg CC) ;; 67885ee4c00Smrg *) 67985ee4c00Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 68085ee4c00Smrg taglist="$taglist $tagname" 68185ee4c00Smrg 68285ee4c00Smrg # Evaluate the configuration. Be careful to quote the path 68385ee4c00Smrg # and the sed script, to avoid splitting on whitespace, but 68485ee4c00Smrg # also don't use non-portable quotes within backquotes within 68585ee4c00Smrg # quotes we have to do it in 2 steps: 68685ee4c00Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 68785ee4c00Smrg eval "$extractedcf" 68885ee4c00Smrg else 68985ee4c00Smrg func_error "ignoring unknown tag $tagname" 69085ee4c00Smrg fi 69185ee4c00Smrg ;; 69285ee4c00Smrg esac 69385ee4c00Smrg} 69485ee4c00Smrg 69585ee4c00Smrg# Parse options once, thoroughly. This comes as soon as possible in 69685ee4c00Smrg# the script to make things like `libtool --version' happen quickly. 69785ee4c00Smrg{ 698692f60a7Smrg 69985ee4c00Smrg # Shorthand for --mode=foo, only valid as the first argument 70085ee4c00Smrg case $1 in 70185ee4c00Smrg clean|clea|cle|cl) 70285ee4c00Smrg shift; set dummy --mode clean ${1+"$@"}; shift 703692f60a7Smrg ;; 70485ee4c00Smrg compile|compil|compi|comp|com|co|c) 70585ee4c00Smrg shift; set dummy --mode compile ${1+"$@"}; shift 706692f60a7Smrg ;; 70785ee4c00Smrg execute|execut|execu|exec|exe|ex|e) 70885ee4c00Smrg shift; set dummy --mode execute ${1+"$@"}; shift 709692f60a7Smrg ;; 71085ee4c00Smrg finish|finis|fini|fin|fi|f) 71185ee4c00Smrg shift; set dummy --mode finish ${1+"$@"}; shift 712692f60a7Smrg ;; 71385ee4c00Smrg install|instal|insta|inst|ins|in|i) 71485ee4c00Smrg shift; set dummy --mode install ${1+"$@"}; shift 71585ee4c00Smrg ;; 71685ee4c00Smrg link|lin|li|l) 71785ee4c00Smrg shift; set dummy --mode link ${1+"$@"}; shift 71885ee4c00Smrg ;; 71985ee4c00Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 72085ee4c00Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 721692f60a7Smrg ;; 722692f60a7Smrg esac 723692f60a7Smrg 72485ee4c00Smrg # Parse non-mode specific arguments: 72585ee4c00Smrg while test "$#" -gt 0; do 72685ee4c00Smrg opt="$1" 72785ee4c00Smrg shift 728692f60a7Smrg 72985ee4c00Smrg case $opt in 73085ee4c00Smrg --config) func_config ;; 731692f60a7Smrg 73285ee4c00Smrg --debug) preserve_args="$preserve_args $opt" 73385ee4c00Smrg func_echo "enabling shell trace mode" 73485ee4c00Smrg opt_debug='set -x' 73585ee4c00Smrg $opt_debug 73685ee4c00Smrg ;; 737692f60a7Smrg 73885ee4c00Smrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 73985ee4c00Smrg execute_dlfiles="$execute_dlfiles $1" 74085ee4c00Smrg shift 74185ee4c00Smrg ;; 742692f60a7Smrg 74385ee4c00Smrg --dry-run | -n) opt_dry_run=: ;; 74485ee4c00Smrg --features) func_features ;; 74585ee4c00Smrg --finish) mode="finish" ;; 74685ee4c00Smrg 74785ee4c00Smrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 74885ee4c00Smrg case $1 in 74985ee4c00Smrg # Valid mode arguments: 75085ee4c00Smrg clean) ;; 75185ee4c00Smrg compile) ;; 75285ee4c00Smrg execute) ;; 75385ee4c00Smrg finish) ;; 75485ee4c00Smrg install) ;; 75585ee4c00Smrg link) ;; 75685ee4c00Smrg relink) ;; 75785ee4c00Smrg uninstall) ;; 75885ee4c00Smrg 75985ee4c00Smrg # Catch anything else as an error 76085ee4c00Smrg *) func_error "invalid argument for $opt" 76185ee4c00Smrg exit_cmd=exit 76285ee4c00Smrg break 76385ee4c00Smrg ;; 76485ee4c00Smrg esac 76585ee4c00Smrg 76685ee4c00Smrg mode="$1" 76785ee4c00Smrg shift 76885ee4c00Smrg ;; 76985ee4c00Smrg 77085ee4c00Smrg --preserve-dup-deps) 77185ee4c00Smrg opt_duplicate_deps=: ;; 77285ee4c00Smrg 77385ee4c00Smrg --quiet|--silent) preserve_args="$preserve_args $opt" 77485ee4c00Smrg opt_silent=: 77585ee4c00Smrg ;; 77685ee4c00Smrg 77785ee4c00Smrg --verbose| -v) preserve_args="$preserve_args $opt" 77885ee4c00Smrg opt_silent=false 77985ee4c00Smrg ;; 78085ee4c00Smrg 78185ee4c00Smrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 78285ee4c00Smrg preserve_args="$preserve_args $opt $1" 78385ee4c00Smrg func_enable_tag "$1" # tagname is set here 78485ee4c00Smrg shift 78585ee4c00Smrg ;; 78685ee4c00Smrg 78785ee4c00Smrg # Separate optargs to long options: 78885ee4c00Smrg -dlopen=*|--mode=*|--tag=*) 78985ee4c00Smrg func_opt_split "$opt" 79085ee4c00Smrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 79185ee4c00Smrg shift 79285ee4c00Smrg ;; 79385ee4c00Smrg 79485ee4c00Smrg -\?|-h) func_usage ;; 79585ee4c00Smrg --help) opt_help=: ;; 79685ee4c00Smrg --version) func_version ;; 79785ee4c00Smrg 79885ee4c00Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 79985ee4c00Smrg 80085ee4c00Smrg *) nonopt="$opt" 80185ee4c00Smrg break 80285ee4c00Smrg ;; 80385ee4c00Smrg esac 80485ee4c00Smrg done 80585ee4c00Smrg 80685ee4c00Smrg 80785ee4c00Smrg case $host in 80885ee4c00Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 80985ee4c00Smrg # don't eliminate duplications in $postdeps and $predeps 81085ee4c00Smrg opt_duplicate_compiler_generated_deps=: 811692f60a7Smrg ;; 812692f60a7Smrg *) 81385ee4c00Smrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 81485ee4c00Smrg ;; 81585ee4c00Smrg esac 816692f60a7Smrg 81785ee4c00Smrg # Having warned about all mis-specified options, bail out if 81885ee4c00Smrg # anything was wrong. 81985ee4c00Smrg $exit_cmd $EXIT_FAILURE 82085ee4c00Smrg} 82185ee4c00Smrg 82285ee4c00Smrg# func_check_version_match 82385ee4c00Smrg# Ensure that we are using m4 macros, and libtool script from the same 82485ee4c00Smrg# release of libtool. 82585ee4c00Smrgfunc_check_version_match () 82685ee4c00Smrg{ 82785ee4c00Smrg if test "$package_revision" != "$macro_revision"; then 82885ee4c00Smrg if test "$VERSION" != "$macro_version"; then 82985ee4c00Smrg if test -z "$macro_version"; then 83085ee4c00Smrg cat >&2 <<_LT_EOF 83185ee4c00Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 83285ee4c00Smrg$progname: definition of this LT_INIT comes from an older release. 83385ee4c00Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 83485ee4c00Smrg$progname: and run autoconf again. 83585ee4c00Smrg_LT_EOF 83685ee4c00Smrg else 83785ee4c00Smrg cat >&2 <<_LT_EOF 83885ee4c00Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 83985ee4c00Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 84085ee4c00Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 84185ee4c00Smrg$progname: and run autoconf again. 84285ee4c00Smrg_LT_EOF 843692f60a7Smrg fi 84485ee4c00Smrg else 84585ee4c00Smrg cat >&2 <<_LT_EOF 84685ee4c00Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 84785ee4c00Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 84885ee4c00Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 84985ee4c00Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 85085ee4c00Smrg_LT_EOF 85185ee4c00Smrg fi 85285ee4c00Smrg 85385ee4c00Smrg exit $EXIT_MISMATCH 85485ee4c00Smrg fi 85585ee4c00Smrg} 85685ee4c00Smrg 85785ee4c00Smrg 85885ee4c00Smrg## ----------- ## 85985ee4c00Smrg## Main. ## 86085ee4c00Smrg## ----------- ## 86185ee4c00Smrg 86285ee4c00Smrg$opt_help || { 86385ee4c00Smrg # Sanity checks first: 86485ee4c00Smrg func_check_version_match 86585ee4c00Smrg 86685ee4c00Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 86785ee4c00Smrg func_fatal_configuration "not configured to build any kind of library" 868692f60a7Smrg fi 869692f60a7Smrg 87085ee4c00Smrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 87185ee4c00Smrg 87285ee4c00Smrg 87385ee4c00Smrg # Darwin sucks 87485ee4c00Smrg eval std_shrext=\"$shrext_cmds\" 87585ee4c00Smrg 87685ee4c00Smrg 877692f60a7Smrg # Only execute mode is allowed to have -dlopen flags. 878692f60a7Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 87985ee4c00Smrg func_error "unrecognized option \`-dlopen'" 88085ee4c00Smrg $ECHO "$help" 1>&2 881692f60a7Smrg exit $EXIT_FAILURE 882692f60a7Smrg fi 883692f60a7Smrg 884692f60a7Smrg # Change the help message to a mode-specific one. 885692f60a7Smrg generic_help="$help" 88685ee4c00Smrg help="Try \`$progname --help --mode=$mode' for more information." 88785ee4c00Smrg} 888692f60a7Smrg 889692f60a7Smrg 89085ee4c00Smrg# func_lalib_p file 89185ee4c00Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 89285ee4c00Smrg# This function is only a basic sanity check; it will hardly flush out 89385ee4c00Smrg# determined imposters. 89485ee4c00Smrgfunc_lalib_p () 89585ee4c00Smrg{ 89685ee4c00Smrg test -f "$1" && 89785ee4c00Smrg $SED -e 4q "$1" 2>/dev/null \ 89885ee4c00Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 89985ee4c00Smrg} 900692f60a7Smrg 90185ee4c00Smrg# func_lalib_unsafe_p file 90285ee4c00Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 90385ee4c00Smrg# This function implements the same check as func_lalib_p without 90485ee4c00Smrg# resorting to external programs. To this end, it redirects stdin and 90585ee4c00Smrg# closes it afterwards, without saving the original file descriptor. 90685ee4c00Smrg# As a safety measure, use it only where a negative result would be 90785ee4c00Smrg# fatal anyway. Works if `file' does not exist. 90885ee4c00Smrgfunc_lalib_unsafe_p () 90985ee4c00Smrg{ 91085ee4c00Smrg lalib_p=no 91185ee4c00Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 91285ee4c00Smrg for lalib_p_l in 1 2 3 4 91385ee4c00Smrg do 91485ee4c00Smrg read lalib_p_line 91585ee4c00Smrg case "$lalib_p_line" in 91685ee4c00Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 91785ee4c00Smrg esac 91885ee4c00Smrg done 91985ee4c00Smrg exec 0<&5 5<&- 92085ee4c00Smrg fi 92185ee4c00Smrg test "$lalib_p" = yes 92285ee4c00Smrg} 923692f60a7Smrg 92485ee4c00Smrg# func_ltwrapper_script_p file 92585ee4c00Smrg# True iff FILE is a libtool wrapper script 92685ee4c00Smrg# This function is only a basic sanity check; it will hardly flush out 92785ee4c00Smrg# determined imposters. 92885ee4c00Smrgfunc_ltwrapper_script_p () 92985ee4c00Smrg{ 93085ee4c00Smrg func_lalib_p "$1" 93185ee4c00Smrg} 932692f60a7Smrg 93385ee4c00Smrg# func_ltwrapper_executable_p file 93485ee4c00Smrg# True iff FILE is a libtool wrapper executable 93585ee4c00Smrg# This function is only a basic sanity check; it will hardly flush out 93685ee4c00Smrg# determined imposters. 93785ee4c00Smrgfunc_ltwrapper_executable_p () 93885ee4c00Smrg{ 93985ee4c00Smrg func_ltwrapper_exec_suffix= 94085ee4c00Smrg case $1 in 94185ee4c00Smrg *.exe) ;; 94285ee4c00Smrg *) func_ltwrapper_exec_suffix=.exe ;; 94385ee4c00Smrg esac 94485ee4c00Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 94585ee4c00Smrg} 946692f60a7Smrg 94785ee4c00Smrg# func_ltwrapper_scriptname file 94885ee4c00Smrg# Assumes file is an ltwrapper_executable 94985ee4c00Smrg# uses $file to determine the appropriate filename for a 95085ee4c00Smrg# temporary ltwrapper_script. 95185ee4c00Smrgfunc_ltwrapper_scriptname () 95285ee4c00Smrg{ 95385ee4c00Smrg func_ltwrapper_scriptname_result="" 95485ee4c00Smrg if func_ltwrapper_executable_p "$1"; then 95585ee4c00Smrg func_dirname_and_basename "$1" "" "." 95685ee4c00Smrg func_stripname '' '.exe' "$func_basename_result" 95785ee4c00Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 95885ee4c00Smrg fi 95985ee4c00Smrg} 96085ee4c00Smrg 96185ee4c00Smrg# func_ltwrapper_p file 96285ee4c00Smrg# True iff FILE is a libtool wrapper script or wrapper executable 96385ee4c00Smrg# This function is only a basic sanity check; it will hardly flush out 96485ee4c00Smrg# determined imposters. 96585ee4c00Smrgfunc_ltwrapper_p () 96685ee4c00Smrg{ 96785ee4c00Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 96885ee4c00Smrg} 96985ee4c00Smrg 97085ee4c00Smrg 97185ee4c00Smrg# func_execute_cmds commands fail_cmd 97285ee4c00Smrg# Execute tilde-delimited COMMANDS. 97385ee4c00Smrg# If FAIL_CMD is given, eval that upon failure. 97485ee4c00Smrg# FAIL_CMD may read-access the current command in variable CMD! 97585ee4c00Smrgfunc_execute_cmds () 97685ee4c00Smrg{ 97785ee4c00Smrg $opt_debug 97885ee4c00Smrg save_ifs=$IFS; IFS='~' 97985ee4c00Smrg for cmd in $1; do 98085ee4c00Smrg IFS=$save_ifs 98185ee4c00Smrg eval cmd=\"$cmd\" 98285ee4c00Smrg func_show_eval "$cmd" "${2-:}" 98385ee4c00Smrg done 98485ee4c00Smrg IFS=$save_ifs 98585ee4c00Smrg} 98685ee4c00Smrg 98785ee4c00Smrg 98885ee4c00Smrg# func_source file 98985ee4c00Smrg# Source FILE, adding directory component if necessary. 99085ee4c00Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 99185ee4c00Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 99285ee4c00Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 99385ee4c00Smrg# `FILE.' does not work on cygwin managed mounts. 99485ee4c00Smrgfunc_source () 99585ee4c00Smrg{ 99685ee4c00Smrg $opt_debug 99785ee4c00Smrg case $1 in 99885ee4c00Smrg */* | *\\*) . "$1" ;; 99985ee4c00Smrg *) . "./$1" ;; 100085ee4c00Smrg esac 100185ee4c00Smrg} 100285ee4c00Smrg 100385ee4c00Smrg 100485ee4c00Smrg# func_infer_tag arg 100585ee4c00Smrg# Infer tagged configuration to use if any are available and 100685ee4c00Smrg# if one wasn't chosen via the "--tag" command line option. 100785ee4c00Smrg# Only attempt this if the compiler in the base compile 100885ee4c00Smrg# command doesn't match the default compiler. 100985ee4c00Smrg# arg is usually of the form 'gcc ...' 101085ee4c00Smrgfunc_infer_tag () 101185ee4c00Smrg{ 101285ee4c00Smrg $opt_debug 101385ee4c00Smrg if test -n "$available_tags" && test -z "$tagname"; then 101485ee4c00Smrg CC_quoted= 101585ee4c00Smrg for arg in $CC; do 101685ee4c00Smrg func_quote_for_eval "$arg" 101785ee4c00Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 101885ee4c00Smrg done 101985ee4c00Smrg case $@ in 102085ee4c00Smrg # Blanks in the command may have been stripped by the calling shell, 102185ee4c00Smrg # but not from the CC environment variable when configure was run. 102285ee4c00Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; 102385ee4c00Smrg # Blanks at the start of $base_compile will cause this to fail 102485ee4c00Smrg # if we don't check for them as well. 102585ee4c00Smrg *) 102685ee4c00Smrg for z in $available_tags; do 102785ee4c00Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 102885ee4c00Smrg # Evaluate the configuration. 102985ee4c00Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 103085ee4c00Smrg CC_quoted= 103185ee4c00Smrg for arg in $CC; do 103285ee4c00Smrg # Double-quote args containing other shell metacharacters. 103385ee4c00Smrg func_quote_for_eval "$arg" 103485ee4c00Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 103585ee4c00Smrg done 103685ee4c00Smrg case "$@ " in 103785ee4c00Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) 103885ee4c00Smrg # The compiler in the base compile command matches 103985ee4c00Smrg # the one in the tagged configuration. 104085ee4c00Smrg # Assume this is the tagged configuration we want. 104185ee4c00Smrg tagname=$z 104285ee4c00Smrg break 104385ee4c00Smrg ;; 104485ee4c00Smrg esac 104585ee4c00Smrg fi 104685ee4c00Smrg done 104785ee4c00Smrg # If $tagname still isn't set, then no tagged configuration 104885ee4c00Smrg # was found and let the user know that the "--tag" command 104985ee4c00Smrg # line option must be used. 105085ee4c00Smrg if test -z "$tagname"; then 105185ee4c00Smrg func_echo "unable to infer tagged configuration" 105285ee4c00Smrg func_fatal_error "specify a tag with \`--tag'" 105385ee4c00Smrg# else 105485ee4c00Smrg# func_verbose "using $tagname tagged configuration" 105585ee4c00Smrg fi 105685ee4c00Smrg ;; 105785ee4c00Smrg esac 105885ee4c00Smrg fi 105985ee4c00Smrg} 106085ee4c00Smrg 106185ee4c00Smrg 106285ee4c00Smrg 106385ee4c00Smrg# func_write_libtool_object output_name pic_name nonpic_name 106485ee4c00Smrg# Create a libtool object file (analogous to a ".la" file), 106585ee4c00Smrg# but don't create it if we're doing a dry run. 106685ee4c00Smrgfunc_write_libtool_object () 106785ee4c00Smrg{ 106885ee4c00Smrg write_libobj=${1} 106985ee4c00Smrg if test "$build_libtool_libs" = yes; then 107085ee4c00Smrg write_lobj=\'${2}\' 107185ee4c00Smrg else 107285ee4c00Smrg write_lobj=none 107385ee4c00Smrg fi 107485ee4c00Smrg 107585ee4c00Smrg if test "$build_old_libs" = yes; then 107685ee4c00Smrg write_oldobj=\'${3}\' 107785ee4c00Smrg else 107885ee4c00Smrg write_oldobj=none 107985ee4c00Smrg fi 108085ee4c00Smrg 108185ee4c00Smrg $opt_dry_run || { 108285ee4c00Smrg cat >${write_libobj}T <<EOF 108385ee4c00Smrg# $write_libobj - a libtool object file 108485ee4c00Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 108585ee4c00Smrg# 108685ee4c00Smrg# Please DO NOT delete this file! 108785ee4c00Smrg# It is necessary for linking the library. 108885ee4c00Smrg 108985ee4c00Smrg# Name of the PIC object. 109085ee4c00Smrgpic_object=$write_lobj 109185ee4c00Smrg 109285ee4c00Smrg# Name of the non-PIC object 109385ee4c00Smrgnon_pic_object=$write_oldobj 109485ee4c00Smrg 109585ee4c00SmrgEOF 109685ee4c00Smrg $MV "${write_libobj}T" "${write_libobj}" 109785ee4c00Smrg } 109885ee4c00Smrg} 109985ee4c00Smrg 110085ee4c00Smrg# func_mode_compile arg... 110185ee4c00Smrgfunc_mode_compile () 110285ee4c00Smrg{ 110385ee4c00Smrg $opt_debug 110485ee4c00Smrg # Get the compilation command and the source file. 110585ee4c00Smrg base_compile= 110685ee4c00Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 110785ee4c00Smrg suppress_opt=yes 110885ee4c00Smrg suppress_output= 110985ee4c00Smrg arg_mode=normal 111085ee4c00Smrg libobj= 111185ee4c00Smrg later= 111285ee4c00Smrg pie_flag= 111385ee4c00Smrg 111485ee4c00Smrg for arg 111585ee4c00Smrg do 111685ee4c00Smrg case $arg_mode in 111785ee4c00Smrg arg ) 111885ee4c00Smrg # do not "continue". Instead, add this to base_compile 111985ee4c00Smrg lastarg="$arg" 112085ee4c00Smrg arg_mode=normal 112185ee4c00Smrg ;; 112285ee4c00Smrg 112385ee4c00Smrg target ) 112485ee4c00Smrg libobj="$arg" 112585ee4c00Smrg arg_mode=normal 112685ee4c00Smrg continue 112785ee4c00Smrg ;; 112885ee4c00Smrg 112985ee4c00Smrg normal ) 113085ee4c00Smrg # Accept any command-line options. 113185ee4c00Smrg case $arg in 113285ee4c00Smrg -o) 113385ee4c00Smrg test -n "$libobj" && \ 113485ee4c00Smrg func_fatal_error "you cannot specify \`-o' more than once" 113585ee4c00Smrg arg_mode=target 113685ee4c00Smrg continue 113785ee4c00Smrg ;; 113885ee4c00Smrg 113985ee4c00Smrg -pie | -fpie | -fPIE) 114085ee4c00Smrg pie_flag="$pie_flag $arg" 114185ee4c00Smrg continue 114285ee4c00Smrg ;; 114385ee4c00Smrg 114485ee4c00Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 114585ee4c00Smrg later="$later $arg" 114685ee4c00Smrg continue 114785ee4c00Smrg ;; 114885ee4c00Smrg 114985ee4c00Smrg -no-suppress) 1150692f60a7Smrg suppress_opt=no 1151692f60a7Smrg continue 1152692f60a7Smrg ;; 1153692f60a7Smrg 1154692f60a7Smrg -Xcompiler) 1155692f60a7Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 1156692f60a7Smrg continue # The current "srcfile" will either be retained or 1157692f60a7Smrg ;; # replaced later. I would guess that would be a bug. 1158692f60a7Smrg 1159692f60a7Smrg -Wc,*) 116085ee4c00Smrg func_stripname '-Wc,' '' "$arg" 116185ee4c00Smrg args=$func_stripname_result 1162692f60a7Smrg lastarg= 1163692f60a7Smrg save_ifs="$IFS"; IFS=',' 116485ee4c00Smrg for arg in $args; do 1165692f60a7Smrg IFS="$save_ifs" 116685ee4c00Smrg func_quote_for_eval "$arg" 116785ee4c00Smrg lastarg="$lastarg $func_quote_for_eval_result" 1168692f60a7Smrg done 1169692f60a7Smrg IFS="$save_ifs" 117085ee4c00Smrg func_stripname ' ' '' "$lastarg" 117185ee4c00Smrg lastarg=$func_stripname_result 1172692f60a7Smrg 1173692f60a7Smrg # Add the arguments to base_compile. 1174692f60a7Smrg base_compile="$base_compile $lastarg" 1175692f60a7Smrg continue 1176692f60a7Smrg ;; 1177692f60a7Smrg 117885ee4c00Smrg *) 1179692f60a7Smrg # Accept the current argument as the source file. 1180692f60a7Smrg # The previous "srcfile" becomes the current argument. 1181692f60a7Smrg # 1182692f60a7Smrg lastarg="$srcfile" 1183692f60a7Smrg srcfile="$arg" 1184692f60a7Smrg ;; 1185692f60a7Smrg esac # case $arg 1186692f60a7Smrg ;; 1187692f60a7Smrg esac # case $arg_mode 1188692f60a7Smrg 1189692f60a7Smrg # Aesthetically quote the previous argument. 119085ee4c00Smrg func_quote_for_eval "$lastarg" 119185ee4c00Smrg base_compile="$base_compile $func_quote_for_eval_result" 1192692f60a7Smrg done # for arg 1193692f60a7Smrg 1194692f60a7Smrg case $arg_mode in 1195692f60a7Smrg arg) 119685ee4c00Smrg func_fatal_error "you must specify an argument for -Xcompile" 1197692f60a7Smrg ;; 1198692f60a7Smrg target) 119985ee4c00Smrg func_fatal_error "you must specify a target with \`-o'" 1200692f60a7Smrg ;; 1201692f60a7Smrg *) 1202692f60a7Smrg # Get the name of the library object. 120385ee4c00Smrg test -z "$libobj" && { 120485ee4c00Smrg func_basename "$srcfile" 120585ee4c00Smrg libobj="$func_basename_result" 120685ee4c00Smrg } 1207692f60a7Smrg ;; 1208692f60a7Smrg esac 1209692f60a7Smrg 1210692f60a7Smrg # Recognize several different file suffixes. 1211692f60a7Smrg # If the user specifies -o file.o, it is replaced with file.lo 1212692f60a7Smrg case $libobj in 121385ee4c00Smrg *.[cCFSifmso] | \ 121485ee4c00Smrg *.ada | *.adb | *.ads | *.asm | \ 121585ee4c00Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 121685ee4c00Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx) 121785ee4c00Smrg func_xform "$libobj" 121885ee4c00Smrg libobj=$func_xform_result 121985ee4c00Smrg ;; 1220692f60a7Smrg esac 1221692f60a7Smrg 1222692f60a7Smrg case $libobj in 122385ee4c00Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 1224692f60a7Smrg *) 122585ee4c00Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 1226692f60a7Smrg ;; 1227692f60a7Smrg esac 1228692f60a7Smrg 1229692f60a7Smrg func_infer_tag $base_compile 1230692f60a7Smrg 1231692f60a7Smrg for arg in $later; do 1232692f60a7Smrg case $arg in 123385ee4c00Smrg -shared) 123485ee4c00Smrg test "$build_libtool_libs" != yes && \ 123585ee4c00Smrg func_fatal_configuration "can not build a shared library" 123685ee4c00Smrg build_old_libs=no 123785ee4c00Smrg continue 123885ee4c00Smrg ;; 123985ee4c00Smrg 1240692f60a7Smrg -static) 124185ee4c00Smrg build_libtool_libs=no 1242692f60a7Smrg build_old_libs=yes 1243692f60a7Smrg continue 1244692f60a7Smrg ;; 1245692f60a7Smrg 1246692f60a7Smrg -prefer-pic) 1247692f60a7Smrg pic_mode=yes 1248692f60a7Smrg continue 1249692f60a7Smrg ;; 1250692f60a7Smrg 1251692f60a7Smrg -prefer-non-pic) 1252692f60a7Smrg pic_mode=no 1253692f60a7Smrg continue 1254692f60a7Smrg ;; 1255692f60a7Smrg esac 1256692f60a7Smrg done 1257692f60a7Smrg 125885ee4c00Smrg func_quote_for_eval "$libobj" 125985ee4c00Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 126085ee4c00Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 126185ee4c00Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 126285ee4c00Smrg func_dirname_and_basename "$obj" "/" "" 126385ee4c00Smrg objname="$func_basename_result" 126485ee4c00Smrg xdir="$func_dirname_result" 1265692f60a7Smrg lobj=${xdir}$objdir/$objname 1266692f60a7Smrg 126785ee4c00Smrg test -z "$base_compile" && \ 126885ee4c00Smrg func_fatal_help "you must specify a compilation command" 1269692f60a7Smrg 1270692f60a7Smrg # Delete any leftover library objects. 1271692f60a7Smrg if test "$build_old_libs" = yes; then 1272692f60a7Smrg removelist="$obj $lobj $libobj ${libobj}T" 1273692f60a7Smrg else 1274692f60a7Smrg removelist="$lobj $libobj ${libobj}T" 1275692f60a7Smrg fi 1276692f60a7Smrg 1277692f60a7Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 1278692f60a7Smrg case $host_os in 127985ee4c00Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 1280692f60a7Smrg pic_mode=default 1281692f60a7Smrg ;; 1282692f60a7Smrg esac 1283692f60a7Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 1284692f60a7Smrg # non-PIC code in shared libraries is not supported 1285692f60a7Smrg pic_mode=default 1286692f60a7Smrg fi 1287692f60a7Smrg 1288692f60a7Smrg # Calculate the filename of the output object if compiler does 1289692f60a7Smrg # not support -o with -c 1290692f60a7Smrg if test "$compiler_c_o" = no; then 129185ee4c00Smrg output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 1292692f60a7Smrg lockfile="$output_obj.lock" 1293692f60a7Smrg else 1294692f60a7Smrg output_obj= 1295692f60a7Smrg need_locks=no 1296692f60a7Smrg lockfile= 1297692f60a7Smrg fi 1298692f60a7Smrg 1299692f60a7Smrg # Lock this critical section if it is needed 1300692f60a7Smrg # We use this script file to make the link, it avoids creating a new file 1301692f60a7Smrg if test "$need_locks" = yes; then 130285ee4c00Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 130385ee4c00Smrg func_echo "Waiting for $lockfile to be removed" 1304692f60a7Smrg sleep 2 1305692f60a7Smrg done 1306692f60a7Smrg elif test "$need_locks" = warn; then 1307692f60a7Smrg if test -f "$lockfile"; then 130885ee4c00Smrg $ECHO "\ 1309692f60a7Smrg*** ERROR, $lockfile exists and contains: 1310692f60a7Smrg`cat $lockfile 2>/dev/null` 1311692f60a7Smrg 1312692f60a7SmrgThis indicates that another process is trying to use the same 1313692f60a7Smrgtemporary object file, and libtool could not work around it because 1314692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 1315692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 1316692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 1317692f60a7Smrgcompiler." 1318692f60a7Smrg 131985ee4c00Smrg $opt_dry_run || $RM $removelist 1320692f60a7Smrg exit $EXIT_FAILURE 1321692f60a7Smrg fi 132285ee4c00Smrg removelist="$removelist $output_obj" 132385ee4c00Smrg $ECHO "$srcfile" > "$lockfile" 1324692f60a7Smrg fi 1325692f60a7Smrg 132685ee4c00Smrg $opt_dry_run || $RM $removelist 132785ee4c00Smrg removelist="$removelist $lockfile" 132885ee4c00Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 132985ee4c00Smrg 1330692f60a7Smrg if test -n "$fix_srcfile_path"; then 1331692f60a7Smrg eval srcfile=\"$fix_srcfile_path\" 1332692f60a7Smrg fi 133385ee4c00Smrg func_quote_for_eval "$srcfile" 133485ee4c00Smrg qsrcfile=$func_quote_for_eval_result 1335692f60a7Smrg 1336692f60a7Smrg # Only build a PIC object if we are building libtool libraries. 1337692f60a7Smrg if test "$build_libtool_libs" = yes; then 1338692f60a7Smrg # Without this assignment, base_compile gets emptied. 1339692f60a7Smrg fbsd_hideous_sh_bug=$base_compile 1340692f60a7Smrg 1341692f60a7Smrg if test "$pic_mode" != no; then 1342692f60a7Smrg command="$base_compile $qsrcfile $pic_flag" 1343692f60a7Smrg else 1344692f60a7Smrg # Don't build PIC code 1345692f60a7Smrg command="$base_compile $qsrcfile" 1346692f60a7Smrg fi 1347692f60a7Smrg 134885ee4c00Smrg func_mkdir_p "$xdir$objdir" 1349692f60a7Smrg 1350692f60a7Smrg if test -z "$output_obj"; then 1351692f60a7Smrg # Place PIC objects in $objdir 1352692f60a7Smrg command="$command -o $lobj" 1353692f60a7Smrg fi 1354692f60a7Smrg 135585ee4c00Smrg func_show_eval_locale "$command" \ 135685ee4c00Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 1357692f60a7Smrg 1358692f60a7Smrg if test "$need_locks" = warn && 1359692f60a7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 136085ee4c00Smrg $ECHO "\ 1361692f60a7Smrg*** ERROR, $lockfile contains: 1362692f60a7Smrg`cat $lockfile 2>/dev/null` 1363692f60a7Smrg 1364692f60a7Smrgbut it should contain: 1365692f60a7Smrg$srcfile 1366692f60a7Smrg 1367692f60a7SmrgThis indicates that another process is trying to use the same 1368692f60a7Smrgtemporary object file, and libtool could not work around it because 1369692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 1370692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 1371692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 1372692f60a7Smrgcompiler." 1373692f60a7Smrg 137485ee4c00Smrg $opt_dry_run || $RM $removelist 1375692f60a7Smrg exit $EXIT_FAILURE 1376692f60a7Smrg fi 1377692f60a7Smrg 1378692f60a7Smrg # Just move the object if needed, then go on to compile the next one 1379692f60a7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 138085ee4c00Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 138185ee4c00Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1382692f60a7Smrg fi 1383692f60a7Smrg 1384692f60a7Smrg # Allow error messages only from the first compilation. 1385692f60a7Smrg if test "$suppress_opt" = yes; then 138685ee4c00Smrg suppress_output=' >/dev/null 2>&1' 1387692f60a7Smrg fi 1388692f60a7Smrg fi 1389692f60a7Smrg 1390692f60a7Smrg # Only build a position-dependent object if we build old libraries. 1391692f60a7Smrg if test "$build_old_libs" = yes; then 1392692f60a7Smrg if test "$pic_mode" != yes; then 1393692f60a7Smrg # Don't build PIC code 139485ee4c00Smrg command="$base_compile $qsrcfile$pie_flag" 1395692f60a7Smrg else 1396692f60a7Smrg command="$base_compile $qsrcfile $pic_flag" 1397692f60a7Smrg fi 1398692f60a7Smrg if test "$compiler_c_o" = yes; then 1399692f60a7Smrg command="$command -o $obj" 1400692f60a7Smrg fi 1401692f60a7Smrg 1402692f60a7Smrg # Suppress compiler output if we already did a PIC compilation. 1403692f60a7Smrg command="$command$suppress_output" 140485ee4c00Smrg func_show_eval_locale "$command" \ 140585ee4c00Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1406692f60a7Smrg 1407692f60a7Smrg if test "$need_locks" = warn && 1408692f60a7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 140985ee4c00Smrg $ECHO "\ 1410692f60a7Smrg*** ERROR, $lockfile contains: 1411692f60a7Smrg`cat $lockfile 2>/dev/null` 1412692f60a7Smrg 1413692f60a7Smrgbut it should contain: 1414692f60a7Smrg$srcfile 1415692f60a7Smrg 1416692f60a7SmrgThis indicates that another process is trying to use the same 1417692f60a7Smrgtemporary object file, and libtool could not work around it because 1418692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 1419692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 1420692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 1421692f60a7Smrgcompiler." 1422692f60a7Smrg 142385ee4c00Smrg $opt_dry_run || $RM $removelist 1424692f60a7Smrg exit $EXIT_FAILURE 1425692f60a7Smrg fi 1426692f60a7Smrg 1427692f60a7Smrg # Just move the object if needed 1428692f60a7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 142985ee4c00Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 143085ee4c00Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1431692f60a7Smrg fi 1432692f60a7Smrg fi 1433692f60a7Smrg 143485ee4c00Smrg $opt_dry_run || { 143585ee4c00Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 1436692f60a7Smrg 143785ee4c00Smrg # Unlock the critical section if it was locked 143885ee4c00Smrg if test "$need_locks" != no; then 143985ee4c00Smrg removelist=$lockfile 144085ee4c00Smrg $RM "$lockfile" 144185ee4c00Smrg fi 144285ee4c00Smrg } 1443692f60a7Smrg 1444692f60a7Smrg exit $EXIT_SUCCESS 144585ee4c00Smrg} 1446692f60a7Smrg 144785ee4c00Smrg$opt_help || { 144885ee4c00Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"} 144985ee4c00Smrg} 1450692f60a7Smrg 145185ee4c00Smrgfunc_mode_help () 145285ee4c00Smrg{ 145385ee4c00Smrg # We need to display help for each of the modes. 145485ee4c00Smrg case $mode in 145585ee4c00Smrg "") 145685ee4c00Smrg # Generic help is extracted from the usage comments 145785ee4c00Smrg # at the start of this file. 145885ee4c00Smrg func_help 145985ee4c00Smrg ;; 1460692f60a7Smrg 146185ee4c00Smrg clean) 146285ee4c00Smrg $ECHO \ 146385ee4c00Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 1464692f60a7Smrg 146585ee4c00SmrgRemove files from the build directory. 1466692f60a7Smrg 146785ee4c00SmrgRM is the name of the program to use to delete files associated with each FILE 146885ee4c00Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 146985ee4c00Smrgto RM. 1470692f60a7Smrg 147185ee4c00SmrgIf FILE is a libtool library, object or program, all the files associated 147285ee4c00Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 147385ee4c00Smrg ;; 1474692f60a7Smrg 147585ee4c00Smrg compile) 147685ee4c00Smrg $ECHO \ 147785ee4c00Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 1478692f60a7Smrg 147985ee4c00SmrgCompile a source file into a libtool library object. 1480692f60a7Smrg 148185ee4c00SmrgThis mode accepts the following additional options: 1482692f60a7Smrg 148385ee4c00Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 148485ee4c00Smrg -no-suppress do not suppress compiler output for multiple passes 148585ee4c00Smrg -prefer-pic try to building PIC objects only 148685ee4c00Smrg -prefer-non-pic try to building non-PIC objects only 148785ee4c00Smrg -shared do not build a \`.o' file suitable for static linking 148885ee4c00Smrg -static only build a \`.o' file suitable for static linking 1489692f60a7Smrg 149085ee4c00SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 149185ee4c00Smrgfrom the given SOURCEFILE. 1492692f60a7Smrg 149385ee4c00SmrgThe output file name is determined by removing the directory component from 149485ee4c00SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 149585ee4c00Smrglibrary object suffix, \`.lo'." 149685ee4c00Smrg ;; 1497692f60a7Smrg 149885ee4c00Smrg execute) 149985ee4c00Smrg $ECHO \ 150085ee4c00Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 1501692f60a7Smrg 150285ee4c00SmrgAutomatically set library path, then run a program. 1503692f60a7Smrg 150485ee4c00SmrgThis mode accepts the following additional options: 1505692f60a7Smrg 150685ee4c00Smrg -dlopen FILE add the directory containing FILE to the library path 1507692f60a7Smrg 150885ee4c00SmrgThis mode sets the library path environment variable according to \`-dlopen' 150985ee4c00Smrgflags. 1510692f60a7Smrg 151185ee4c00SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 151285ee4c00Smrginto their corresponding uninstalled binary, and any of their required library 151385ee4c00Smrgdirectories are added to the library path. 1514692f60a7Smrg 151585ee4c00SmrgThen, COMMAND is executed, with ARGS as arguments." 151685ee4c00Smrg ;; 1517692f60a7Smrg 151885ee4c00Smrg finish) 151985ee4c00Smrg $ECHO \ 152085ee4c00Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 1521692f60a7Smrg 152285ee4c00SmrgComplete the installation of libtool libraries. 1523692f60a7Smrg 152485ee4c00SmrgEach LIBDIR is a directory that contains libtool libraries. 1525692f60a7Smrg 152685ee4c00SmrgThe commands that this mode executes may require superuser privileges. Use 152785ee4c00Smrgthe \`--dry-run' option if you just want to see what would be executed." 152885ee4c00Smrg ;; 1529692f60a7Smrg 153085ee4c00Smrg install) 153185ee4c00Smrg $ECHO \ 153285ee4c00Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 1533692f60a7Smrg 153485ee4c00SmrgInstall executables or libraries. 1535692f60a7Smrg 153685ee4c00SmrgINSTALL-COMMAND is the installation command. The first component should be 153785ee4c00Smrgeither the \`install' or \`cp' program. 1538692f60a7Smrg 153985ee4c00SmrgThe following components of INSTALL-COMMAND are treated specially: 1540692f60a7Smrg 154185ee4c00Smrg -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation 1542692f60a7Smrg 154385ee4c00SmrgThe rest of the components are interpreted as arguments to that command (only 154485ee4c00SmrgBSD-compatible install options are recognized)." 154585ee4c00Smrg ;; 1546692f60a7Smrg 154785ee4c00Smrg link) 154885ee4c00Smrg $ECHO \ 154985ee4c00Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 1550692f60a7Smrg 155185ee4c00SmrgLink object files or libraries together to form another library, or to 155285ee4c00Smrgcreate an executable program. 1553692f60a7Smrg 155485ee4c00SmrgLINK-COMMAND is a command using the C compiler that you would use to create 155585ee4c00Smrga program from several object files. 1556692f60a7Smrg 155785ee4c00SmrgThe following components of LINK-COMMAND are treated specially: 1558692f60a7Smrg 155985ee4c00Smrg -all-static do not do any dynamic linking at all 156085ee4c00Smrg -avoid-version do not add a version suffix if possible 156185ee4c00Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 156285ee4c00Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 156385ee4c00Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 156485ee4c00Smrg -export-symbols SYMFILE 156585ee4c00Smrg try to export only the symbols listed in SYMFILE 156685ee4c00Smrg -export-symbols-regex REGEX 156785ee4c00Smrg try to export only the symbols matching REGEX 156885ee4c00Smrg -LLIBDIR search LIBDIR for required installed libraries 156985ee4c00Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 157085ee4c00Smrg -module build a library that can dlopened 157185ee4c00Smrg -no-fast-install disable the fast-install mode 157285ee4c00Smrg -no-install link a not-installable executable 157385ee4c00Smrg -no-undefined declare that a library does not refer to external symbols 157485ee4c00Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 157585ee4c00Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 157685ee4c00Smrg -precious-files-regex REGEX 157785ee4c00Smrg don't remove output files matching REGEX 157885ee4c00Smrg -release RELEASE specify package release information 157985ee4c00Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 158085ee4c00Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 158185ee4c00Smrg -shared only do dynamic linking of libtool libraries 158285ee4c00Smrg -shrext SUFFIX override the standard shared library file extension 158385ee4c00Smrg -static do not do any dynamic linking of uninstalled libtool libraries 158485ee4c00Smrg -static-libtool-libs 158585ee4c00Smrg do not do any dynamic linking of libtool libraries 158685ee4c00Smrg -version-info CURRENT[:REVISION[:AGE]] 158785ee4c00Smrg specify library version info [each variable defaults to 0] 158885ee4c00Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 1589692f60a7Smrg 159085ee4c00SmrgAll other options (arguments beginning with \`-') are ignored. 1591692f60a7Smrg 159285ee4c00SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 159385ee4c00Smrgtreated as uninstalled libtool libraries, other files are standard or library 159485ee4c00Smrgobject files. 159554569438Smrg 159685ee4c00SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 159785ee4c00Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 159885ee4c00Smrgrequired, except when creating a convenience library. 1599692f60a7Smrg 160085ee4c00SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 160185ee4c00Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 1602692f60a7Smrg 160385ee4c00SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 160485ee4c00Smrgis created, otherwise an executable program is created." 1605692f60a7Smrg ;; 1606692f60a7Smrg 160785ee4c00Smrg uninstall) 160885ee4c00Smrg $ECHO \ 160985ee4c00Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 1610692f60a7Smrg 161185ee4c00SmrgRemove libraries from an installation directory. 1612692f60a7Smrg 161385ee4c00SmrgRM is the name of the program to use to delete files associated with each FILE 161485ee4c00Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 161585ee4c00Smrgto RM. 1616692f60a7Smrg 161785ee4c00SmrgIf FILE is a libtool library, all the files associated with it are deleted. 161885ee4c00SmrgOtherwise, only FILE itself is deleted using RM." 161985ee4c00Smrg ;; 1620692f60a7Smrg 162185ee4c00Smrg *) 162285ee4c00Smrg func_fatal_help "invalid operation mode \`$mode'" 162385ee4c00Smrg ;; 162485ee4c00Smrg esac 1625692f60a7Smrg 162685ee4c00Smrg $ECHO 162785ee4c00Smrg $ECHO "Try \`$progname --help' for more information about other modes." 1628692f60a7Smrg 162985ee4c00Smrg exit $? 163085ee4c00Smrg} 1631692f60a7Smrg 163285ee4c00Smrg # Now that we've collected a possible --mode arg, show help if necessary 163385ee4c00Smrg $opt_help && func_mode_help 1634692f60a7Smrg 1635692f60a7Smrg 163685ee4c00Smrg# func_mode_execute arg... 163785ee4c00Smrgfunc_mode_execute () 163885ee4c00Smrg{ 163985ee4c00Smrg $opt_debug 164085ee4c00Smrg # The first argument is the command name. 164185ee4c00Smrg cmd="$nonopt" 164285ee4c00Smrg test -z "$cmd" && \ 164385ee4c00Smrg func_fatal_help "you must specify a COMMAND" 1644692f60a7Smrg 164585ee4c00Smrg # Handle -dlopen flags immediately. 164685ee4c00Smrg for file in $execute_dlfiles; do 164785ee4c00Smrg test -f "$file" \ 164885ee4c00Smrg || func_fatal_help "\`$file' is not a file" 1649692f60a7Smrg 165085ee4c00Smrg dir= 165185ee4c00Smrg case $file in 165285ee4c00Smrg *.la) 165385ee4c00Smrg # Check to see that this really is a libtool archive. 165485ee4c00Smrg func_lalib_unsafe_p "$file" \ 165585ee4c00Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 1656692f60a7Smrg 165785ee4c00Smrg # Read the libtool library. 165885ee4c00Smrg dlname= 165985ee4c00Smrg library_names= 166085ee4c00Smrg func_source "$file" 1661692f60a7Smrg 166285ee4c00Smrg # Skip this library if it cannot be dlopened. 166385ee4c00Smrg if test -z "$dlname"; then 166485ee4c00Smrg # Warn if it was a shared library. 166585ee4c00Smrg test -n "$library_names" && \ 166685ee4c00Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 166785ee4c00Smrg continue 166885ee4c00Smrg fi 1669692f60a7Smrg 167085ee4c00Smrg func_dirname "$file" "" "." 167185ee4c00Smrg dir="$func_dirname_result" 1672692f60a7Smrg 167385ee4c00Smrg if test -f "$dir/$objdir/$dlname"; then 167485ee4c00Smrg dir="$dir/$objdir" 167585ee4c00Smrg else 167685ee4c00Smrg if test ! -f "$dir/$dlname"; then 167785ee4c00Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 167885ee4c00Smrg fi 167985ee4c00Smrg fi 1680692f60a7Smrg ;; 1681692f60a7Smrg 168285ee4c00Smrg *.lo) 168385ee4c00Smrg # Just add the directory containing the .lo file. 168485ee4c00Smrg func_dirname "$file" "" "." 168585ee4c00Smrg dir="$func_dirname_result" 1686692f60a7Smrg ;; 1687692f60a7Smrg 168885ee4c00Smrg *) 168985ee4c00Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 1690692f60a7Smrg continue 1691692f60a7Smrg ;; 169285ee4c00Smrg esac 1693692f60a7Smrg 169485ee4c00Smrg # Get the absolute pathname. 169585ee4c00Smrg absdir=`cd "$dir" && pwd` 169685ee4c00Smrg test -n "$absdir" && dir="$absdir" 1697692f60a7Smrg 169885ee4c00Smrg # Now add the directory to shlibpath_var. 169985ee4c00Smrg if eval "test -z \"\$$shlibpath_var\""; then 170085ee4c00Smrg eval "$shlibpath_var=\"\$dir\"" 170185ee4c00Smrg else 170285ee4c00Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 170385ee4c00Smrg fi 170485ee4c00Smrg done 1705692f60a7Smrg 170685ee4c00Smrg # This variable tells wrapper scripts just to set shlibpath_var 170785ee4c00Smrg # rather than running their programs. 170885ee4c00Smrg libtool_execute_magic="$magic" 1709692f60a7Smrg 171085ee4c00Smrg # Check if any of the arguments is a wrapper script. 171185ee4c00Smrg args= 171285ee4c00Smrg for file 171385ee4c00Smrg do 171485ee4c00Smrg case $file in 171585ee4c00Smrg -*) ;; 171685ee4c00Smrg *) 171785ee4c00Smrg # Do a test to see if this is really a libtool program. 171885ee4c00Smrg if func_ltwrapper_script_p "$file"; then 171985ee4c00Smrg func_source "$file" 172085ee4c00Smrg # Transform arg to wrapped name. 172185ee4c00Smrg file="$progdir/$program" 172285ee4c00Smrg elif func_ltwrapper_executable_p "$file"; then 172385ee4c00Smrg func_ltwrapper_scriptname "$file" 172485ee4c00Smrg func_source "$func_ltwrapper_scriptname_result" 172585ee4c00Smrg # Transform arg to wrapped name. 172685ee4c00Smrg file="$progdir/$program" 172785ee4c00Smrg fi 172885ee4c00Smrg ;; 172985ee4c00Smrg esac 173085ee4c00Smrg # Quote arguments (to preserve shell metacharacters). 173185ee4c00Smrg func_quote_for_eval "$file" 173285ee4c00Smrg args="$args $func_quote_for_eval_result" 173385ee4c00Smrg done 1734692f60a7Smrg 173585ee4c00Smrg if test "X$opt_dry_run" = Xfalse; then 173685ee4c00Smrg if test -n "$shlibpath_var"; then 173785ee4c00Smrg # Export the shlibpath_var. 173885ee4c00Smrg eval "export $shlibpath_var" 173985ee4c00Smrg fi 1740692f60a7Smrg 174185ee4c00Smrg # Restore saved environment variables 174285ee4c00Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 174385ee4c00Smrg do 174485ee4c00Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 174585ee4c00Smrg $lt_var=\$save_$lt_var; export $lt_var 1746692f60a7Smrg else 174785ee4c00Smrg $lt_unset $lt_var 174885ee4c00Smrg fi" 174985ee4c00Smrg done 1750692f60a7Smrg 175185ee4c00Smrg # Now prepare to actually exec the command. 175285ee4c00Smrg exec_cmd="\$cmd$args" 175385ee4c00Smrg else 175485ee4c00Smrg # Display what would be done. 175585ee4c00Smrg if test -n "$shlibpath_var"; then 175685ee4c00Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 175785ee4c00Smrg $ECHO "export $shlibpath_var" 175885ee4c00Smrg fi 175985ee4c00Smrg $ECHO "$cmd$args" 176085ee4c00Smrg exit $EXIT_SUCCESS 176185ee4c00Smrg fi 176285ee4c00Smrg} 1763692f60a7Smrg 176485ee4c00Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 1765692f60a7Smrg 1766692f60a7Smrg 176785ee4c00Smrg# func_mode_finish arg... 176885ee4c00Smrgfunc_mode_finish () 176985ee4c00Smrg{ 177085ee4c00Smrg $opt_debug 177185ee4c00Smrg libdirs="$nonopt" 177285ee4c00Smrg admincmds= 1773692f60a7Smrg 177485ee4c00Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 177585ee4c00Smrg for dir 177685ee4c00Smrg do 177785ee4c00Smrg libdirs="$libdirs $dir" 177885ee4c00Smrg done 1779692f60a7Smrg 178085ee4c00Smrg for libdir in $libdirs; do 178185ee4c00Smrg if test -n "$finish_cmds"; then 178285ee4c00Smrg # Do each command in the finish commands. 178385ee4c00Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 178485ee4c00Smrg'"$cmd"'"' 1785692f60a7Smrg fi 178685ee4c00Smrg if test -n "$finish_eval"; then 178785ee4c00Smrg # Do the single finish_eval. 178885ee4c00Smrg eval cmds=\"$finish_eval\" 178985ee4c00Smrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 179085ee4c00Smrg $cmds" 179185ee4c00Smrg fi 179285ee4c00Smrg done 179385ee4c00Smrg fi 1794692f60a7Smrg 179585ee4c00Smrg # Exit here if they wanted silent mode. 179685ee4c00Smrg $opt_silent && exit $EXIT_SUCCESS 1797692f60a7Smrg 179885ee4c00Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 179985ee4c00Smrg $ECHO "Libraries have been installed in:" 180085ee4c00Smrg for libdir in $libdirs; do 180185ee4c00Smrg $ECHO " $libdir" 180285ee4c00Smrg done 180385ee4c00Smrg $ECHO 180485ee4c00Smrg $ECHO "If you ever happen to want to link against installed libraries" 180585ee4c00Smrg $ECHO "in a given directory, LIBDIR, you must either use libtool, and" 180685ee4c00Smrg $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" 180785ee4c00Smrg $ECHO "flag during linking and do at least one of the following:" 180885ee4c00Smrg if test -n "$shlibpath_var"; then 180985ee4c00Smrg $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" 181085ee4c00Smrg $ECHO " during execution" 181185ee4c00Smrg fi 181285ee4c00Smrg if test -n "$runpath_var"; then 181385ee4c00Smrg $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" 181485ee4c00Smrg $ECHO " during linking" 181585ee4c00Smrg fi 181685ee4c00Smrg if test -n "$hardcode_libdir_flag_spec"; then 181785ee4c00Smrg libdir=LIBDIR 181885ee4c00Smrg eval flag=\"$hardcode_libdir_flag_spec\" 181985ee4c00Smrg 182085ee4c00Smrg $ECHO " - use the \`$flag' linker flag" 182185ee4c00Smrg fi 182285ee4c00Smrg if test -n "$admincmds"; then 182385ee4c00Smrg $ECHO " - have your system administrator run these commands:$admincmds" 182485ee4c00Smrg fi 182585ee4c00Smrg if test -f /etc/ld.so.conf; then 182685ee4c00Smrg $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 182785ee4c00Smrg fi 182885ee4c00Smrg $ECHO 182985ee4c00Smrg 183085ee4c00Smrg $ECHO "See any operating system documentation about shared libraries for" 183185ee4c00Smrg case $host in 183285ee4c00Smrg solaris2.[6789]|solaris2.1[0-9]) 183385ee4c00Smrg $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" 183485ee4c00Smrg $ECHO "pages." 183585ee4c00Smrg ;; 183685ee4c00Smrg *) 183785ee4c00Smrg $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." 183885ee4c00Smrg ;; 183985ee4c00Smrg esac 184085ee4c00Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 184185ee4c00Smrg exit $EXIT_SUCCESS 184285ee4c00Smrg} 184385ee4c00Smrg 184485ee4c00Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 184585ee4c00Smrg 184685ee4c00Smrg 184785ee4c00Smrg# func_mode_install arg... 184885ee4c00Smrgfunc_mode_install () 184985ee4c00Smrg{ 185085ee4c00Smrg $opt_debug 185185ee4c00Smrg # There may be an optional sh(1) argument at the beginning of 185285ee4c00Smrg # install_prog (especially on Windows NT). 185385ee4c00Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 185485ee4c00Smrg # Allow the use of GNU shtool's install command. 185585ee4c00Smrg $ECHO "X$nonopt" | $GREP shtool >/dev/null; then 185685ee4c00Smrg # Aesthetically quote it. 185785ee4c00Smrg func_quote_for_eval "$nonopt" 185885ee4c00Smrg install_prog="$func_quote_for_eval_result " 185985ee4c00Smrg arg=$1 186085ee4c00Smrg shift 186185ee4c00Smrg else 186285ee4c00Smrg install_prog= 186385ee4c00Smrg arg=$nonopt 186485ee4c00Smrg fi 186585ee4c00Smrg 186685ee4c00Smrg # The real first argument should be the name of the installation program. 186785ee4c00Smrg # Aesthetically quote it. 186885ee4c00Smrg func_quote_for_eval "$arg" 186985ee4c00Smrg install_prog="$install_prog$func_quote_for_eval_result" 187085ee4c00Smrg 187185ee4c00Smrg # We need to accept at least all the BSD install flags. 187285ee4c00Smrg dest= 187385ee4c00Smrg files= 187485ee4c00Smrg opts= 187585ee4c00Smrg prev= 187685ee4c00Smrg install_type= 187785ee4c00Smrg isdir=no 187885ee4c00Smrg stripme= 187985ee4c00Smrg for arg 188085ee4c00Smrg do 188185ee4c00Smrg if test -n "$dest"; then 188285ee4c00Smrg files="$files $dest" 188385ee4c00Smrg dest=$arg 188485ee4c00Smrg continue 188585ee4c00Smrg fi 188685ee4c00Smrg 188785ee4c00Smrg case $arg in 188885ee4c00Smrg -d) isdir=yes ;; 188985ee4c00Smrg -f) 189085ee4c00Smrg case " $install_prog " in 189185ee4c00Smrg *[\\\ /]cp\ *) ;; 189285ee4c00Smrg *) prev=$arg ;; 189385ee4c00Smrg esac 189485ee4c00Smrg ;; 189585ee4c00Smrg -g | -m | -o) 189685ee4c00Smrg prev=$arg 189785ee4c00Smrg ;; 189885ee4c00Smrg -s) 189985ee4c00Smrg stripme=" -s" 190085ee4c00Smrg continue 190185ee4c00Smrg ;; 190285ee4c00Smrg -*) 190385ee4c00Smrg ;; 190485ee4c00Smrg *) 190585ee4c00Smrg # If the previous option needed an argument, then skip it. 190685ee4c00Smrg if test -n "$prev"; then 1907692f60a7Smrg prev= 1908692f60a7Smrg else 190985ee4c00Smrg dest=$arg 191085ee4c00Smrg continue 1911692f60a7Smrg fi 1912692f60a7Smrg ;; 191385ee4c00Smrg esac 1914692f60a7Smrg 191585ee4c00Smrg # Aesthetically quote the argument. 191685ee4c00Smrg func_quote_for_eval "$arg" 191785ee4c00Smrg install_prog="$install_prog $func_quote_for_eval_result" 191885ee4c00Smrg done 1919692f60a7Smrg 192085ee4c00Smrg test -z "$install_prog" && \ 192185ee4c00Smrg func_fatal_help "you must specify an install program" 1922692f60a7Smrg 192385ee4c00Smrg test -n "$prev" && \ 192485ee4c00Smrg func_fatal_help "the \`$prev' option requires an argument" 1925692f60a7Smrg 192685ee4c00Smrg if test -z "$files"; then 192785ee4c00Smrg if test -z "$dest"; then 192885ee4c00Smrg func_fatal_help "no file or destination specified" 192985ee4c00Smrg else 193085ee4c00Smrg func_fatal_help "you must specify a destination" 193185ee4c00Smrg fi 1932692f60a7Smrg fi 1933692f60a7Smrg 193485ee4c00Smrg # Strip any trailing slash from the destination. 193585ee4c00Smrg func_stripname '' '/' "$dest" 193685ee4c00Smrg dest=$func_stripname_result 1937692f60a7Smrg 193885ee4c00Smrg # Check to see that the destination is a directory. 193985ee4c00Smrg test -d "$dest" && isdir=yes 194085ee4c00Smrg if test "$isdir" = yes; then 194185ee4c00Smrg destdir="$dest" 194285ee4c00Smrg destname= 1943692f60a7Smrg else 194485ee4c00Smrg func_dirname_and_basename "$dest" "" "." 194585ee4c00Smrg destdir="$func_dirname_result" 194685ee4c00Smrg destname="$func_basename_result" 1947692f60a7Smrg 194885ee4c00Smrg # Not a directory, so check to see that there is only one file specified. 194985ee4c00Smrg set dummy $files; shift 195085ee4c00Smrg test "$#" -gt 1 && \ 195185ee4c00Smrg func_fatal_help "\`$dest' is not a directory" 1952692f60a7Smrg fi 195385ee4c00Smrg case $destdir in 195485ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 1955692f60a7Smrg *) 195685ee4c00Smrg for file in $files; do 195785ee4c00Smrg case $file in 195885ee4c00Smrg *.lo) ;; 195985ee4c00Smrg *) 196085ee4c00Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 196185ee4c00Smrg ;; 196285ee4c00Smrg esac 196385ee4c00Smrg done 1964692f60a7Smrg ;; 1965692f60a7Smrg esac 1966692f60a7Smrg 196785ee4c00Smrg # This variable tells wrapper scripts just to set variables rather 196885ee4c00Smrg # than running their programs. 196985ee4c00Smrg libtool_install_magic="$magic" 1970692f60a7Smrg 197185ee4c00Smrg staticlibs= 197285ee4c00Smrg future_libdirs= 197385ee4c00Smrg current_libdirs= 197485ee4c00Smrg for file in $files; do 1975692f60a7Smrg 197685ee4c00Smrg # Do each installation. 197785ee4c00Smrg case $file in 197885ee4c00Smrg *.$libext) 197985ee4c00Smrg # Do the static libraries later. 198085ee4c00Smrg staticlibs="$staticlibs $file" 198185ee4c00Smrg ;; 198285ee4c00Smrg 198385ee4c00Smrg *.la) 198485ee4c00Smrg # Check to see that this really is a libtool archive. 198585ee4c00Smrg func_lalib_unsafe_p "$file" \ 198685ee4c00Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 198785ee4c00Smrg 198885ee4c00Smrg library_names= 198985ee4c00Smrg old_library= 199085ee4c00Smrg relink_command= 199185ee4c00Smrg func_source "$file" 199285ee4c00Smrg 199385ee4c00Smrg # Add the libdir to current_libdirs if it is the destination. 199485ee4c00Smrg if test "X$destdir" = "X$libdir"; then 199585ee4c00Smrg case "$current_libdirs " in 199685ee4c00Smrg *" $libdir "*) ;; 199785ee4c00Smrg *) current_libdirs="$current_libdirs $libdir" ;; 1998692f60a7Smrg esac 199985ee4c00Smrg else 200085ee4c00Smrg # Note the libdir as a future libdir. 200185ee4c00Smrg case "$future_libdirs " in 200285ee4c00Smrg *" $libdir "*) ;; 200385ee4c00Smrg *) future_libdirs="$future_libdirs $libdir" ;; 200485ee4c00Smrg esac 200585ee4c00Smrg fi 2006692f60a7Smrg 200785ee4c00Smrg func_dirname "$file" "/" "" 200885ee4c00Smrg dir="$func_dirname_result" 200985ee4c00Smrg dir="$dir$objdir" 201085ee4c00Smrg 201185ee4c00Smrg if test -n "$relink_command"; then 201285ee4c00Smrg # Determine the prefix the user has applied to our future dir. 201385ee4c00Smrg inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` 201485ee4c00Smrg 201585ee4c00Smrg # Don't allow the user to place us outside of our expected 201685ee4c00Smrg # location b/c this prevents finding dependent libraries that 201785ee4c00Smrg # are installed to the same prefix. 201885ee4c00Smrg # At present, this check doesn't affect windows .dll's that 201985ee4c00Smrg # are installed into $libdir/../bin (currently, that works fine) 202085ee4c00Smrg # but it's something to keep an eye on. 202185ee4c00Smrg test "$inst_prefix_dir" = "$destdir" && \ 202285ee4c00Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 202385ee4c00Smrg 202485ee4c00Smrg if test -n "$inst_prefix_dir"; then 202585ee4c00Smrg # Stick the inst_prefix_dir data into the link command. 202685ee4c00Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 202785ee4c00Smrg else 202885ee4c00Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` 202985ee4c00Smrg fi 203085ee4c00Smrg 203185ee4c00Smrg func_warning "relinking \`$file'" 203285ee4c00Smrg func_show_eval "$relink_command" \ 203385ee4c00Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 203485ee4c00Smrg fi 203585ee4c00Smrg 203685ee4c00Smrg # See the names of the shared library. 203785ee4c00Smrg set dummy $library_names; shift 203885ee4c00Smrg if test -n "$1"; then 203985ee4c00Smrg realname="$1" 204085ee4c00Smrg shift 204185ee4c00Smrg 204285ee4c00Smrg srcname="$realname" 204385ee4c00Smrg test -n "$relink_command" && srcname="$realname"T 204485ee4c00Smrg 204585ee4c00Smrg # Install the shared library and build the symlinks. 204685ee4c00Smrg func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 204785ee4c00Smrg 'exit $?' 204885ee4c00Smrg tstripme="$stripme" 204985ee4c00Smrg case $host_os in 205085ee4c00Smrg cygwin* | mingw* | pw32* | cegcc*) 205185ee4c00Smrg case $realname in 205285ee4c00Smrg *.dll.a) 205385ee4c00Smrg tstripme="" 205485ee4c00Smrg ;; 205585ee4c00Smrg esac 2056692f60a7Smrg ;; 2057692f60a7Smrg esac 205885ee4c00Smrg if test -n "$tstripme" && test -n "$striplib"; then 205985ee4c00Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 2060692f60a7Smrg fi 206185ee4c00Smrg 206285ee4c00Smrg if test "$#" -gt 0; then 206385ee4c00Smrg # Delete the old symlinks, and create new ones. 206485ee4c00Smrg # Try `ln -sf' first, because the `ln' binary might depend on 206585ee4c00Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 206685ee4c00Smrg # so we also need to try rm && ln -s. 206785ee4c00Smrg for linkname 206885ee4c00Smrg do 206985ee4c00Smrg test "$linkname" != "$realname" \ 207085ee4c00Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 2071692f60a7Smrg done 2072692f60a7Smrg fi 2073692f60a7Smrg 207485ee4c00Smrg # Do each command in the postinstall commands. 207585ee4c00Smrg lib="$destdir/$realname" 207685ee4c00Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 2077692f60a7Smrg fi 2078692f60a7Smrg 207985ee4c00Smrg # Install the pseudo-library for information purposes. 208085ee4c00Smrg func_basename "$file" 208185ee4c00Smrg name="$func_basename_result" 208285ee4c00Smrg instname="$dir/$name"i 208385ee4c00Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 2084692f60a7Smrg 208585ee4c00Smrg # Maybe install the static library, too. 208685ee4c00Smrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 208785ee4c00Smrg ;; 2088692f60a7Smrg 208985ee4c00Smrg *.lo) 209085ee4c00Smrg # Install (i.e. copy) a libtool object. 2091692f60a7Smrg 209285ee4c00Smrg # Figure out destination file name, if it wasn't already specified. 209385ee4c00Smrg if test -n "$destname"; then 209485ee4c00Smrg destfile="$destdir/$destname" 209585ee4c00Smrg else 209685ee4c00Smrg func_basename "$file" 209785ee4c00Smrg destfile="$func_basename_result" 209885ee4c00Smrg destfile="$destdir/$destfile" 2099692f60a7Smrg fi 2100692f60a7Smrg 210185ee4c00Smrg # Deduce the name of the destination old-style object file. 210285ee4c00Smrg case $destfile in 210385ee4c00Smrg *.lo) 210485ee4c00Smrg func_lo2o "$destfile" 210585ee4c00Smrg staticdest=$func_lo2o_result 210685ee4c00Smrg ;; 210785ee4c00Smrg *.$objext) 210885ee4c00Smrg staticdest="$destfile" 210985ee4c00Smrg destfile= 211085ee4c00Smrg ;; 211185ee4c00Smrg *) 211285ee4c00Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 211385ee4c00Smrg ;; 211485ee4c00Smrg esac 2115692f60a7Smrg 211685ee4c00Smrg # Install the libtool object if requested. 211785ee4c00Smrg test -n "$destfile" && \ 211885ee4c00Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 2119692f60a7Smrg 212085ee4c00Smrg # Install the old object if enabled. 212185ee4c00Smrg if test "$build_old_libs" = yes; then 212285ee4c00Smrg # Deduce the name of the old-style object file. 212385ee4c00Smrg func_lo2o "$file" 212485ee4c00Smrg staticobj=$func_lo2o_result 212585ee4c00Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 2126692f60a7Smrg fi 212785ee4c00Smrg exit $EXIT_SUCCESS 212885ee4c00Smrg ;; 2129692f60a7Smrg 213085ee4c00Smrg *) 213185ee4c00Smrg # Figure out destination file name, if it wasn't already specified. 213285ee4c00Smrg if test -n "$destname"; then 213385ee4c00Smrg destfile="$destdir/$destname" 213485ee4c00Smrg else 213585ee4c00Smrg func_basename "$file" 213685ee4c00Smrg destfile="$func_basename_result" 213785ee4c00Smrg destfile="$destdir/$destfile" 213885ee4c00Smrg fi 2139692f60a7Smrg 214085ee4c00Smrg # If the file is missing, and there is a .exe on the end, strip it 214185ee4c00Smrg # because it is most likely a libtool script we actually want to 214285ee4c00Smrg # install 214385ee4c00Smrg stripped_ext="" 214485ee4c00Smrg case $file in 214585ee4c00Smrg *.exe) 214685ee4c00Smrg if test ! -f "$file"; then 214785ee4c00Smrg func_stripname '' '.exe' "$file" 214885ee4c00Smrg file=$func_stripname_result 214985ee4c00Smrg stripped_ext=".exe" 215085ee4c00Smrg fi 215185ee4c00Smrg ;; 215285ee4c00Smrg esac 215385ee4c00Smrg 215485ee4c00Smrg # Do a test to see if this is really a libtool program. 215585ee4c00Smrg case $host in 215685ee4c00Smrg *cygwin* | *mingw*) 215785ee4c00Smrg if func_ltwrapper_executable_p "$file"; then 215885ee4c00Smrg func_ltwrapper_scriptname "$file" 215985ee4c00Smrg wrapper=$func_ltwrapper_scriptname_result 216085ee4c00Smrg else 216185ee4c00Smrg func_stripname '' '.exe' "$file" 216285ee4c00Smrg wrapper=$func_stripname_result 216385ee4c00Smrg fi 216485ee4c00Smrg ;; 2165692f60a7Smrg *) 216685ee4c00Smrg wrapper=$file 216785ee4c00Smrg ;; 216885ee4c00Smrg esac 216985ee4c00Smrg if func_ltwrapper_script_p "$wrapper"; then 217085ee4c00Smrg notinst_deplibs= 217185ee4c00Smrg relink_command= 217285ee4c00Smrg 217385ee4c00Smrg func_source "$wrapper" 217485ee4c00Smrg 217585ee4c00Smrg # Check the variables that should have been set. 217685ee4c00Smrg test -z "$generated_by_libtool_version" && \ 217785ee4c00Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 217885ee4c00Smrg 217985ee4c00Smrg finalize=yes 218085ee4c00Smrg for lib in $notinst_deplibs; do 218185ee4c00Smrg # Check to see that each library is installed. 218285ee4c00Smrg libdir= 218385ee4c00Smrg if test -f "$lib"; then 218485ee4c00Smrg func_source "$lib" 218585ee4c00Smrg fi 218685ee4c00Smrg libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 218785ee4c00Smrg if test -n "$libdir" && test ! -f "$libfile"; then 218885ee4c00Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 218985ee4c00Smrg finalize=no 219085ee4c00Smrg fi 219185ee4c00Smrg done 219285ee4c00Smrg 219385ee4c00Smrg relink_command= 219485ee4c00Smrg func_source "$wrapper" 219585ee4c00Smrg 219685ee4c00Smrg outputname= 219785ee4c00Smrg if test "$fast_install" = no && test -n "$relink_command"; then 219885ee4c00Smrg $opt_dry_run || { 219985ee4c00Smrg if test "$finalize" = yes; then 220085ee4c00Smrg tmpdir=`func_mktempdir` 220185ee4c00Smrg func_basename "$file$stripped_ext" 220285ee4c00Smrg file="$func_basename_result" 220385ee4c00Smrg outputname="$tmpdir/$file" 220485ee4c00Smrg # Replace the output file specification. 220585ee4c00Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` 220685ee4c00Smrg 220785ee4c00Smrg $opt_silent || { 220885ee4c00Smrg func_quote_for_expand "$relink_command" 220985ee4c00Smrg eval "func_echo $func_quote_for_expand_result" 221085ee4c00Smrg } 221185ee4c00Smrg if eval "$relink_command"; then : 221285ee4c00Smrg else 221385ee4c00Smrg func_error "error: relink \`$file' with the above command before installing it" 221485ee4c00Smrg $opt_dry_run || ${RM}r "$tmpdir" 221585ee4c00Smrg continue 221685ee4c00Smrg fi 221785ee4c00Smrg file="$outputname" 221885ee4c00Smrg else 221985ee4c00Smrg func_warning "cannot relink \`$file'" 222085ee4c00Smrg fi 222185ee4c00Smrg } 222285ee4c00Smrg else 222385ee4c00Smrg # Install the binary that we compiled earlier. 222485ee4c00Smrg file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 2225692f60a7Smrg fi 222685ee4c00Smrg fi 222785ee4c00Smrg 222885ee4c00Smrg # remove .exe since cygwin /usr/bin/install will append another 222985ee4c00Smrg # one anyway 223085ee4c00Smrg case $install_prog,$host in 223185ee4c00Smrg */usr/bin/install*,*cygwin*) 223285ee4c00Smrg case $file:$destfile in 223385ee4c00Smrg *.exe:*.exe) 223485ee4c00Smrg # this is ok 223585ee4c00Smrg ;; 223685ee4c00Smrg *.exe:*) 223785ee4c00Smrg destfile=$destfile.exe 223885ee4c00Smrg ;; 223985ee4c00Smrg *:*.exe) 224085ee4c00Smrg func_stripname '' '.exe' "$destfile" 224185ee4c00Smrg destfile=$func_stripname_result 224285ee4c00Smrg ;; 224385ee4c00Smrg esac 2244692f60a7Smrg ;; 2245692f60a7Smrg esac 224685ee4c00Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 224785ee4c00Smrg $opt_dry_run || if test -n "$outputname"; then 224885ee4c00Smrg ${RM}r "$tmpdir" 224985ee4c00Smrg fi 225085ee4c00Smrg ;; 225185ee4c00Smrg esac 225285ee4c00Smrg done 2253692f60a7Smrg 225485ee4c00Smrg for file in $staticlibs; do 225585ee4c00Smrg func_basename "$file" 225685ee4c00Smrg name="$func_basename_result" 225785ee4c00Smrg 225885ee4c00Smrg # Set up the ranlib parameters. 225985ee4c00Smrg oldlib="$destdir/$name" 226085ee4c00Smrg 226185ee4c00Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 226285ee4c00Smrg 226385ee4c00Smrg if test -n "$stripme" && test -n "$old_striplib"; then 226485ee4c00Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 226585ee4c00Smrg fi 226685ee4c00Smrg 226785ee4c00Smrg # Do each command in the postinstall commands. 226885ee4c00Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 226985ee4c00Smrg done 227085ee4c00Smrg 227185ee4c00Smrg test -n "$future_libdirs" && \ 227285ee4c00Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 227385ee4c00Smrg 227485ee4c00Smrg if test -n "$current_libdirs"; then 227585ee4c00Smrg # Maybe just do a dry run. 227685ee4c00Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 227785ee4c00Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 227885ee4c00Smrg else 227985ee4c00Smrg exit $EXIT_SUCCESS 228085ee4c00Smrg fi 228185ee4c00Smrg} 228285ee4c00Smrg 228385ee4c00Smrgtest "$mode" = install && func_mode_install ${1+"$@"} 228485ee4c00Smrg 228585ee4c00Smrg 228685ee4c00Smrg# func_generate_dlsyms outputname originator pic_p 228785ee4c00Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 228885ee4c00Smrg# a dlpreopen symbol table. 228985ee4c00Smrgfunc_generate_dlsyms () 229085ee4c00Smrg{ 229185ee4c00Smrg $opt_debug 229285ee4c00Smrg my_outputname="$1" 229385ee4c00Smrg my_originator="$2" 229485ee4c00Smrg my_pic_p="${3-no}" 229585ee4c00Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 229685ee4c00Smrg my_dlsyms= 229785ee4c00Smrg 229885ee4c00Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 229985ee4c00Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 230085ee4c00Smrg my_dlsyms="${my_outputname}S.c" 230185ee4c00Smrg else 230285ee4c00Smrg func_error "not configured to extract global symbols from dlpreopened files" 230385ee4c00Smrg fi 230485ee4c00Smrg fi 230585ee4c00Smrg 230685ee4c00Smrg if test -n "$my_dlsyms"; then 230785ee4c00Smrg case $my_dlsyms in 230885ee4c00Smrg "") ;; 230985ee4c00Smrg *.c) 231085ee4c00Smrg # Discover the nlist of each of the dlfiles. 231185ee4c00Smrg nlist="$output_objdir/${my_outputname}.nm" 231285ee4c00Smrg 231385ee4c00Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 231485ee4c00Smrg 231585ee4c00Smrg # Parse the name list into a source file. 231685ee4c00Smrg func_verbose "creating $output_objdir/$my_dlsyms" 231785ee4c00Smrg 231885ee4c00Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 231985ee4c00Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 232085ee4c00Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 232185ee4c00Smrg 232285ee4c00Smrg#ifdef __cplusplus 232385ee4c00Smrgextern \"C\" { 232485ee4c00Smrg#endif 232585ee4c00Smrg 232685ee4c00Smrg/* External symbol declarations for the compiler. */\ 232785ee4c00Smrg" 232885ee4c00Smrg 232985ee4c00Smrg if test "$dlself" = yes; then 233085ee4c00Smrg func_verbose "generating symbol list for \`$output'" 233185ee4c00Smrg 233285ee4c00Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 233385ee4c00Smrg 233485ee4c00Smrg # Add our own program objects to the symbol list. 233585ee4c00Smrg progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 233685ee4c00Smrg for progfile in $progfiles; do 233785ee4c00Smrg func_verbose "extracting global C symbols from \`$progfile'" 233885ee4c00Smrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 233985ee4c00Smrg done 234085ee4c00Smrg 234185ee4c00Smrg if test -n "$exclude_expsyms"; then 234285ee4c00Smrg $opt_dry_run || { 234385ee4c00Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 234485ee4c00Smrg eval '$MV "$nlist"T "$nlist"' 234585ee4c00Smrg } 2346692f60a7Smrg fi 234785ee4c00Smrg 234885ee4c00Smrg if test -n "$export_symbols_regex"; then 234985ee4c00Smrg $opt_dry_run || { 235085ee4c00Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 235185ee4c00Smrg eval '$MV "$nlist"T "$nlist"' 235285ee4c00Smrg } 235385ee4c00Smrg fi 235485ee4c00Smrg 235585ee4c00Smrg # Prepare the list of exported symbols 235685ee4c00Smrg if test -z "$export_symbols"; then 235785ee4c00Smrg export_symbols="$output_objdir/$outputname.exp" 235885ee4c00Smrg $opt_dry_run || { 235985ee4c00Smrg $RM $export_symbols 236085ee4c00Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 236185ee4c00Smrg case $host in 236285ee4c00Smrg *cygwin* | *mingw* | *cegcc* ) 236385ee4c00Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 236485ee4c00Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 236585ee4c00Smrg ;; 236685ee4c00Smrg esac 236785ee4c00Smrg } 2368692f60a7Smrg else 236985ee4c00Smrg $opt_dry_run || { 237085ee4c00Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 237185ee4c00Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 237285ee4c00Smrg eval '$MV "$nlist"T "$nlist"' 237385ee4c00Smrg case $host in 237485ee4c00Smrg *cygwin | *mingw* | *cegcc* ) 237585ee4c00Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 237685ee4c00Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 237785ee4c00Smrg ;; 237885ee4c00Smrg esac 237985ee4c00Smrg } 2380692f60a7Smrg fi 238185ee4c00Smrg fi 2382692f60a7Smrg 238385ee4c00Smrg for dlprefile in $dlprefiles; do 238485ee4c00Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 238585ee4c00Smrg func_basename "$dlprefile" 238685ee4c00Smrg name="$func_basename_result" 238785ee4c00Smrg $opt_dry_run || { 238885ee4c00Smrg eval '$ECHO ": $name " >> "$nlist"' 238985ee4c00Smrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 239085ee4c00Smrg } 239185ee4c00Smrg done 239285ee4c00Smrg 239385ee4c00Smrg $opt_dry_run || { 239485ee4c00Smrg # Make sure we have at least an empty file. 239585ee4c00Smrg test -f "$nlist" || : > "$nlist" 239685ee4c00Smrg 239785ee4c00Smrg if test -n "$exclude_expsyms"; then 239885ee4c00Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 239985ee4c00Smrg $MV "$nlist"T "$nlist" 2400692f60a7Smrg fi 240185ee4c00Smrg 240285ee4c00Smrg # Try sorting and uniquifying the output. 240385ee4c00Smrg if $GREP -v "^: " < "$nlist" | 240485ee4c00Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 240585ee4c00Smrg sort -k 3 240685ee4c00Smrg else 240785ee4c00Smrg sort +2 240885ee4c00Smrg fi | 240985ee4c00Smrg uniq > "$nlist"S; then 241085ee4c00Smrg : 2411692f60a7Smrg else 241285ee4c00Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 2413692f60a7Smrg fi 2414692f60a7Smrg 241585ee4c00Smrg if test -f "$nlist"S; then 241685ee4c00Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 2417692f60a7Smrg else 241885ee4c00Smrg $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" 2419692f60a7Smrg fi 2420692f60a7Smrg 242185ee4c00Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2422692f60a7Smrg 242385ee4c00Smrg/* The mapping between symbol names and symbols. */ 242485ee4c00Smrgtypedef struct { 242585ee4c00Smrg const char *name; 242685ee4c00Smrg void *address; 242785ee4c00Smrg} lt_dlsymlist; 242885ee4c00Smrg" 242985ee4c00Smrg case $host in 243085ee4c00Smrg *cygwin* | *mingw* | *cegcc* ) 243185ee4c00Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 243285ee4c00Smrg/* DATA imports from DLLs on WIN32 con't be const, because 243385ee4c00Smrg runtime relocations are performed -- see ld's documentation 243485ee4c00Smrg on pseudo-relocs. */" 243585ee4c00Smrg lt_dlsym_const= ;; 243685ee4c00Smrg *osf5*) 243785ee4c00Smrg echo >> "$output_objdir/$my_dlsyms" "\ 243885ee4c00Smrg/* This system does not cope well with relocations in const data */" 243985ee4c00Smrg lt_dlsym_const= ;; 244085ee4c00Smrg *) 244185ee4c00Smrg lt_dlsym_const=const ;; 244285ee4c00Smrg esac 2443692f60a7Smrg 244485ee4c00Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 244585ee4c00Smrgextern $lt_dlsym_const lt_dlsymlist 244685ee4c00Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 244785ee4c00Smrg$lt_dlsym_const lt_dlsymlist 244885ee4c00Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 244985ee4c00Smrg{\ 245085ee4c00Smrg { \"$my_originator\", (void *) 0 }," 2451692f60a7Smrg 245285ee4c00Smrg case $need_lib_prefix in 245385ee4c00Smrg no) 245485ee4c00Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 245585ee4c00Smrg ;; 245685ee4c00Smrg *) 245785ee4c00Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 245885ee4c00Smrg ;; 245985ee4c00Smrg esac 246085ee4c00Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 246185ee4c00Smrg {0, (void *) 0} 246285ee4c00Smrg}; 2463692f60a7Smrg 246485ee4c00Smrg/* This works around a problem in FreeBSD linker */ 246585ee4c00Smrg#ifdef FREEBSD_WORKAROUND 246685ee4c00Smrgstatic const void *lt_preloaded_setup() { 246785ee4c00Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 246885ee4c00Smrg} 246985ee4c00Smrg#endif 247085ee4c00Smrg 247185ee4c00Smrg#ifdef __cplusplus 247285ee4c00Smrg} 247385ee4c00Smrg#endif\ 247485ee4c00Smrg" 247585ee4c00Smrg } # !$opt_dry_run 247685ee4c00Smrg 247785ee4c00Smrg pic_flag_for_symtable= 247885ee4c00Smrg case "$compile_command " in 247985ee4c00Smrg *" -static "*) ;; 248085ee4c00Smrg *) 248185ee4c00Smrg case $host in 248285ee4c00Smrg # compiling the symbol table file with pic_flag works around 248385ee4c00Smrg # a FreeBSD bug that causes programs to crash when -lm is 248485ee4c00Smrg # linked before any other PIC object. But we must not use 248585ee4c00Smrg # pic_flag when linking with -static. The problem exists in 248685ee4c00Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 248785ee4c00Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 248885ee4c00Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 248985ee4c00Smrg *-*-hpux*) 249085ee4c00Smrg pic_flag_for_symtable=" $pic_flag" ;; 249185ee4c00Smrg *) 249285ee4c00Smrg if test "X$my_pic_p" != Xno; then 249385ee4c00Smrg pic_flag_for_symtable=" $pic_flag" 2494692f60a7Smrg fi 249585ee4c00Smrg ;; 249685ee4c00Smrg esac 249785ee4c00Smrg ;; 249885ee4c00Smrg esac 249985ee4c00Smrg symtab_cflags= 250085ee4c00Smrg for arg in $LTCFLAGS; do 250185ee4c00Smrg case $arg in 250285ee4c00Smrg -pie | -fpie | -fPIE) ;; 250385ee4c00Smrg *) symtab_cflags="$symtab_cflags $arg" ;; 250485ee4c00Smrg esac 250585ee4c00Smrg done 2506692f60a7Smrg 250785ee4c00Smrg # Now compile the dynamic symbol file. 250885ee4c00Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 2509692f60a7Smrg 251085ee4c00Smrg # Clean up the generated files. 251185ee4c00Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2512692f60a7Smrg 251385ee4c00Smrg # Transform the symbol file into the correct name. 251485ee4c00Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 251585ee4c00Smrg case $host in 251685ee4c00Smrg *cygwin* | *mingw* | *cegcc* ) 251785ee4c00Smrg if test -f "$output_objdir/$my_outputname.def"; then 251885ee4c00Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 251985ee4c00Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 252085ee4c00Smrg else 252185ee4c00Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252285ee4c00Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2523692f60a7Smrg fi 252485ee4c00Smrg ;; 252585ee4c00Smrg *) 252685ee4c00Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252785ee4c00Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252885ee4c00Smrg ;; 252985ee4c00Smrg esac 253085ee4c00Smrg ;; 253185ee4c00Smrg *) 253285ee4c00Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 253385ee4c00Smrg ;; 253485ee4c00Smrg esac 253585ee4c00Smrg else 253685ee4c00Smrg # We keep going just in case the user didn't refer to 253785ee4c00Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 253885ee4c00Smrg # really was required. 2539692f60a7Smrg 254085ee4c00Smrg # Nullify the symbol file. 254185ee4c00Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` 254285ee4c00Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` 254385ee4c00Smrg fi 254485ee4c00Smrg} 2545692f60a7Smrg 254685ee4c00Smrg# func_win32_libid arg 254785ee4c00Smrg# return the library type of file 'arg' 254885ee4c00Smrg# 254985ee4c00Smrg# Need a lot of goo to handle *both* DLLs and import libs 255085ee4c00Smrg# Has to be a shell function in order to 'eat' the argument 255185ee4c00Smrg# that is supplied when $file_magic_command is called. 255285ee4c00Smrgfunc_win32_libid () 255385ee4c00Smrg{ 255485ee4c00Smrg $opt_debug 255585ee4c00Smrg win32_libid_type="unknown" 255685ee4c00Smrg win32_fileres=`file -L $1 2>/dev/null` 255785ee4c00Smrg case $win32_fileres in 255885ee4c00Smrg *ar\ archive\ import\ library*) # definitely import 255985ee4c00Smrg win32_libid_type="x86 archive import" 256085ee4c00Smrg ;; 256185ee4c00Smrg *ar\ archive*) # could be an import, or static 256285ee4c00Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 256385ee4c00Smrg $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 256485ee4c00Smrg win32_nmres=`eval $NM -f posix -A $1 | 256585ee4c00Smrg $SED -n -e ' 256685ee4c00Smrg 1,100{ 256785ee4c00Smrg / I /{ 256885ee4c00Smrg s,.*,import, 256985ee4c00Smrg p 257085ee4c00Smrg q 257185ee4c00Smrg } 257285ee4c00Smrg }'` 257385ee4c00Smrg case $win32_nmres in 257485ee4c00Smrg import*) win32_libid_type="x86 archive import";; 257585ee4c00Smrg *) win32_libid_type="x86 archive static";; 257685ee4c00Smrg esac 257785ee4c00Smrg fi 257885ee4c00Smrg ;; 257985ee4c00Smrg *DLL*) 258085ee4c00Smrg win32_libid_type="x86 DLL" 258185ee4c00Smrg ;; 258285ee4c00Smrg *executable*) # but shell scripts are "executable" too... 258385ee4c00Smrg case $win32_fileres in 258485ee4c00Smrg *MS\ Windows\ PE\ Intel*) 258585ee4c00Smrg win32_libid_type="x86 DLL" 258685ee4c00Smrg ;; 258785ee4c00Smrg esac 258885ee4c00Smrg ;; 258985ee4c00Smrg esac 259085ee4c00Smrg $ECHO "$win32_libid_type" 259185ee4c00Smrg} 2592692f60a7Smrg 2593692f60a7Smrg 2594692f60a7Smrg 259585ee4c00Smrg# func_extract_an_archive dir oldlib 259685ee4c00Smrgfunc_extract_an_archive () 259785ee4c00Smrg{ 259885ee4c00Smrg $opt_debug 259985ee4c00Smrg f_ex_an_ar_dir="$1"; shift 260085ee4c00Smrg f_ex_an_ar_oldlib="$1" 260185ee4c00Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 260285ee4c00Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 260385ee4c00Smrg : 260485ee4c00Smrg else 260585ee4c00Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 260685ee4c00Smrg fi 260785ee4c00Smrg} 2608692f60a7Smrg 2609692f60a7Smrg 261085ee4c00Smrg# func_extract_archives gentop oldlib ... 261185ee4c00Smrgfunc_extract_archives () 261285ee4c00Smrg{ 261385ee4c00Smrg $opt_debug 261485ee4c00Smrg my_gentop="$1"; shift 261585ee4c00Smrg my_oldlibs=${1+"$@"} 261685ee4c00Smrg my_oldobjs="" 261785ee4c00Smrg my_xlib="" 261885ee4c00Smrg my_xabs="" 261985ee4c00Smrg my_xdir="" 2620692f60a7Smrg 262185ee4c00Smrg for my_xlib in $my_oldlibs; do 262285ee4c00Smrg # Extract the objects. 262385ee4c00Smrg case $my_xlib in 262485ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 262585ee4c00Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 262685ee4c00Smrg esac 262785ee4c00Smrg func_basename "$my_xlib" 262885ee4c00Smrg my_xlib="$func_basename_result" 262985ee4c00Smrg my_xlib_u=$my_xlib 263085ee4c00Smrg while :; do 263185ee4c00Smrg case " $extracted_archives " in 263285ee4c00Smrg *" $my_xlib_u "*) 263385ee4c00Smrg func_arith $extracted_serial + 1 263485ee4c00Smrg extracted_serial=$func_arith_result 263585ee4c00Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 263685ee4c00Smrg *) break ;; 263785ee4c00Smrg esac 263885ee4c00Smrg done 263985ee4c00Smrg extracted_archives="$extracted_archives $my_xlib_u" 264085ee4c00Smrg my_xdir="$my_gentop/$my_xlib_u" 2641692f60a7Smrg 264285ee4c00Smrg func_mkdir_p "$my_xdir" 2643692f60a7Smrg 264485ee4c00Smrg case $host in 264585ee4c00Smrg *-darwin*) 264685ee4c00Smrg func_verbose "Extracting $my_xabs" 264785ee4c00Smrg # Do not bother doing anything if just a dry run 264885ee4c00Smrg $opt_dry_run || { 264985ee4c00Smrg darwin_orig_dir=`pwd` 265085ee4c00Smrg cd $my_xdir || exit $? 265185ee4c00Smrg darwin_archive=$my_xabs 265285ee4c00Smrg darwin_curdir=`pwd` 265385ee4c00Smrg darwin_base_archive=`basename "$darwin_archive"` 265485ee4c00Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 265585ee4c00Smrg if test -n "$darwin_arches"; then 265685ee4c00Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 265785ee4c00Smrg darwin_arch= 265885ee4c00Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 265985ee4c00Smrg for darwin_arch in $darwin_arches ; do 266085ee4c00Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 266185ee4c00Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 266285ee4c00Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 266385ee4c00Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 266485ee4c00Smrg cd "$darwin_curdir" 266585ee4c00Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 266685ee4c00Smrg done # $darwin_arches 266785ee4c00Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 266885ee4c00Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 266985ee4c00Smrg darwin_file= 267085ee4c00Smrg darwin_files= 267185ee4c00Smrg for darwin_file in $darwin_filelist; do 267285ee4c00Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 267385ee4c00Smrg $LIPO -create -output "$darwin_file" $darwin_files 267485ee4c00Smrg done # $darwin_filelist 267585ee4c00Smrg $RM -rf unfat-$$ 267685ee4c00Smrg cd "$darwin_orig_dir" 2677692f60a7Smrg else 267885ee4c00Smrg cd $darwin_orig_dir 267985ee4c00Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 268085ee4c00Smrg fi # $darwin_arches 268185ee4c00Smrg } # !$opt_dry_run 268285ee4c00Smrg ;; 268385ee4c00Smrg *) 268485ee4c00Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 268585ee4c00Smrg ;; 268685ee4c00Smrg esac 268785ee4c00Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 268885ee4c00Smrg done 2689692f60a7Smrg 269085ee4c00Smrg func_extract_archives_result="$my_oldobjs" 269185ee4c00Smrg} 2692692f60a7Smrg 2693692f60a7Smrg 2694692f60a7Smrg 269585ee4c00Smrg# func_emit_wrapper_part1 [arg=no] 269685ee4c00Smrg# 269785ee4c00Smrg# Emit the first part of a libtool wrapper script on stdout. 269885ee4c00Smrg# For more information, see the description associated with 269985ee4c00Smrg# func_emit_wrapper(), below. 270085ee4c00Smrgfunc_emit_wrapper_part1 () 270185ee4c00Smrg{ 270285ee4c00Smrg func_emit_wrapper_part1_arg1=no 270385ee4c00Smrg if test -n "$1" ; then 270485ee4c00Smrg func_emit_wrapper_part1_arg1=$1 2705692f60a7Smrg fi 2706692f60a7Smrg 270785ee4c00Smrg $ECHO "\ 270885ee4c00Smrg#! $SHELL 2709692f60a7Smrg 271085ee4c00Smrg# $output - temporary wrapper script for $objdir/$outputname 271185ee4c00Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 271285ee4c00Smrg# 271385ee4c00Smrg# The $output program cannot be directly executed until all the libtool 271485ee4c00Smrg# libraries that it depends on are installed. 271585ee4c00Smrg# 271685ee4c00Smrg# This wrapper script should never be moved out of the build directory. 271785ee4c00Smrg# If it is, it will not operate correctly. 2718692f60a7Smrg 271985ee4c00Smrg# Sed substitution that helps us do robust quoting. It backslashifies 272085ee4c00Smrg# metacharacters that are still active within double-quoted strings. 272185ee4c00SmrgXsed='${SED} -e 1s/^X//' 272285ee4c00Smrgsed_quote_subst='$sed_quote_subst' 2723692f60a7Smrg 272485ee4c00Smrg# Be Bourne compatible 272585ee4c00Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 272685ee4c00Smrg emulate sh 272785ee4c00Smrg NULLCMD=: 272885ee4c00Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 272985ee4c00Smrg # is contrary to our usage. Disable this feature. 273085ee4c00Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 273185ee4c00Smrg setopt NO_GLOB_SUBST 273285ee4c00Smrgelse 273385ee4c00Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 273485ee4c00Smrgfi 273585ee4c00SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 273685ee4c00SmrgDUALCASE=1; export DUALCASE # for MKS sh 2737692f60a7Smrg 273885ee4c00Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 273985ee4c00Smrg# if CDPATH is set. 274085ee4c00Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 2741692f60a7Smrg 274285ee4c00Smrgrelink_command=\"$relink_command\" 2743692f60a7Smrg 274485ee4c00Smrg# This environment variable determines our operation mode. 274585ee4c00Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 274685ee4c00Smrg # install mode needs the following variables: 274785ee4c00Smrg generated_by_libtool_version='$macro_version' 274885ee4c00Smrg notinst_deplibs='$notinst_deplibs' 274985ee4c00Smrgelse 275085ee4c00Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 275185ee4c00Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 275285ee4c00Smrg ECHO=\"$qecho\" 275385ee4c00Smrg file=\"\$0\" 275485ee4c00Smrg # Make sure echo works. 275585ee4c00Smrg if test \"X\$1\" = X--no-reexec; then 275685ee4c00Smrg # Discard the --no-reexec flag, and continue. 275785ee4c00Smrg shift 275885ee4c00Smrg elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then 275985ee4c00Smrg # Yippee, \$ECHO works! 276085ee4c00Smrg : 276185ee4c00Smrg else 276285ee4c00Smrg # Restart under the correct shell, and then maybe \$ECHO will work. 276385ee4c00Smrg exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 276485ee4c00Smrg fi 276585ee4c00Smrg fi\ 276685ee4c00Smrg" 276785ee4c00Smrg $ECHO "\ 2768692f60a7Smrg 276985ee4c00Smrg # Find the directory that this script lives in. 277085ee4c00Smrg thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 277185ee4c00Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 2772692f60a7Smrg 277385ee4c00Smrg # Follow symbolic links until we get to the real thisdir. 277485ee4c00Smrg file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 277585ee4c00Smrg while test -n \"\$file\"; do 277685ee4c00Smrg destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 2777692f60a7Smrg 277885ee4c00Smrg # If there was a directory component, then change thisdir. 277985ee4c00Smrg if test \"x\$destdir\" != \"x\$file\"; then 278085ee4c00Smrg case \"\$destdir\" in 278185ee4c00Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 278285ee4c00Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 2783692f60a7Smrg esac 278485ee4c00Smrg fi 2785692f60a7Smrg 278685ee4c00Smrg file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 278785ee4c00Smrg file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 278885ee4c00Smrg done 278985ee4c00Smrg" 279085ee4c00Smrg} 279185ee4c00Smrg# end: func_emit_wrapper_part1 279285ee4c00Smrg 279385ee4c00Smrg# func_emit_wrapper_part2 [arg=no] 279485ee4c00Smrg# 279585ee4c00Smrg# Emit the second part of a libtool wrapper script on stdout. 279685ee4c00Smrg# For more information, see the description associated with 279785ee4c00Smrg# func_emit_wrapper(), below. 279885ee4c00Smrgfunc_emit_wrapper_part2 () 279985ee4c00Smrg{ 280085ee4c00Smrg func_emit_wrapper_part2_arg1=no 280185ee4c00Smrg if test -n "$1" ; then 280285ee4c00Smrg func_emit_wrapper_part2_arg1=$1 2803692f60a7Smrg fi 2804692f60a7Smrg 280585ee4c00Smrg $ECHO "\ 2806692f60a7Smrg 280785ee4c00Smrg # Usually 'no', except on cygwin/mingw when embedded into 280885ee4c00Smrg # the cwrapper. 280985ee4c00Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 281085ee4c00Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 281185ee4c00Smrg # special case for '.' 281285ee4c00Smrg if test \"\$thisdir\" = \".\"; then 281385ee4c00Smrg thisdir=\`pwd\` 281485ee4c00Smrg fi 281585ee4c00Smrg # remove .libs from thisdir 281685ee4c00Smrg case \"\$thisdir\" in 281785ee4c00Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; 281885ee4c00Smrg $objdir ) thisdir=. ;; 281985ee4c00Smrg esac 282085ee4c00Smrg fi 282185ee4c00Smrg 282285ee4c00Smrg # Try to get the absolute directory name. 282385ee4c00Smrg absdir=\`cd \"\$thisdir\" && pwd\` 282485ee4c00Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 282585ee4c00Smrg" 282685ee4c00Smrg 282785ee4c00Smrg if test "$fast_install" = yes; then 282885ee4c00Smrg $ECHO "\ 282985ee4c00Smrg program=lt-'$outputname'$exeext 283085ee4c00Smrg progdir=\"\$thisdir/$objdir\" 283185ee4c00Smrg 283285ee4c00Smrg if test ! -f \"\$progdir/\$program\" || 283385ee4c00Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 283485ee4c00Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 283585ee4c00Smrg 283685ee4c00Smrg file=\"\$\$-\$program\" 283785ee4c00Smrg 283885ee4c00Smrg if test ! -d \"\$progdir\"; then 283985ee4c00Smrg $MKDIR \"\$progdir\" 284085ee4c00Smrg else 284185ee4c00Smrg $RM \"\$progdir/\$file\" 284285ee4c00Smrg fi" 284385ee4c00Smrg 284485ee4c00Smrg $ECHO "\ 284585ee4c00Smrg 284685ee4c00Smrg # relink executable if necessary 284785ee4c00Smrg if test -n \"\$relink_command\"; then 284885ee4c00Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 284985ee4c00Smrg else 285085ee4c00Smrg $ECHO \"\$relink_command_output\" >&2 285185ee4c00Smrg $RM \"\$progdir/\$file\" 285285ee4c00Smrg exit 1 2853692f60a7Smrg fi 285485ee4c00Smrg fi 2855692f60a7Smrg 285685ee4c00Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 285785ee4c00Smrg { $RM \"\$progdir/\$program\"; 285885ee4c00Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 285985ee4c00Smrg $RM \"\$progdir/\$file\" 286085ee4c00Smrg fi" 286185ee4c00Smrg else 286285ee4c00Smrg $ECHO "\ 286385ee4c00Smrg program='$outputname' 286485ee4c00Smrg progdir=\"\$thisdir/$objdir\" 286585ee4c00Smrg" 2866692f60a7Smrg fi 2867692f60a7Smrg 286885ee4c00Smrg $ECHO "\ 2869692f60a7Smrg 287085ee4c00Smrg if test -f \"\$progdir/\$program\"; then" 2871692f60a7Smrg 287285ee4c00Smrg # Export our shlibpath_var if we have one. 287385ee4c00Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 287485ee4c00Smrg $ECHO "\ 287585ee4c00Smrg # Add our own library path to $shlibpath_var 287685ee4c00Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 287785ee4c00Smrg 287885ee4c00Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 287985ee4c00Smrg # The second colon is a workaround for a bug in BeOS R4 sed 288085ee4c00Smrg $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 2881692f60a7Smrg 288285ee4c00Smrg export $shlibpath_var 288385ee4c00Smrg" 2884692f60a7Smrg fi 2885692f60a7Smrg 288685ee4c00Smrg # fixup the dll searchpath if we need to. 288785ee4c00Smrg if test -n "$dllsearchpath"; then 288885ee4c00Smrg $ECHO "\ 288985ee4c00Smrg # Add the dll search path components to the executable PATH 289085ee4c00Smrg PATH=$dllsearchpath:\$PATH 289185ee4c00Smrg" 289285ee4c00Smrg fi 2893692f60a7Smrg 289485ee4c00Smrg $ECHO "\ 289585ee4c00Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 289685ee4c00Smrg # Run the actual program with our arguments. 289785ee4c00Smrg" 289885ee4c00Smrg case $host in 289985ee4c00Smrg # Backslashes separate directories on plain windows 290085ee4c00Smrg *-*-mingw | *-*-os2* | *-cegcc*) 290185ee4c00Smrg $ECHO "\ 290285ee4c00Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 290385ee4c00Smrg" 2904692f60a7Smrg ;; 2905692f60a7Smrg 2906692f60a7Smrg *) 290785ee4c00Smrg $ECHO "\ 290885ee4c00Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 290985ee4c00Smrg" 2910692f60a7Smrg ;; 2911692f60a7Smrg esac 291285ee4c00Smrg $ECHO "\ 291385ee4c00Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 291485ee4c00Smrg exit 1 291585ee4c00Smrg fi 291685ee4c00Smrg else 291785ee4c00Smrg # The program doesn't exist. 291885ee4c00Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 291985ee4c00Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 292085ee4c00Smrg $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 292185ee4c00Smrg exit 1 292285ee4c00Smrg fi 292385ee4c00Smrgfi\ 292485ee4c00Smrg" 292585ee4c00Smrg} 292685ee4c00Smrg# end: func_emit_wrapper_part2 2927692f60a7Smrg 2928692f60a7Smrg 292985ee4c00Smrg# func_emit_wrapper [arg=no] 293085ee4c00Smrg# 293185ee4c00Smrg# Emit a libtool wrapper script on stdout. 293285ee4c00Smrg# Don't directly open a file because we may want to 293385ee4c00Smrg# incorporate the script contents within a cygwin/mingw 293485ee4c00Smrg# wrapper executable. Must ONLY be called from within 293585ee4c00Smrg# func_mode_link because it depends on a number of variables 293685ee4c00Smrg# set therein. 293785ee4c00Smrg# 293885ee4c00Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 293985ee4c00Smrg# variable will take. If 'yes', then the emitted script 294085ee4c00Smrg# will assume that the directory in which it is stored is 294185ee4c00Smrg# the $objdir directory. This is a cygwin/mingw-specific 294285ee4c00Smrg# behavior. 294385ee4c00Smrgfunc_emit_wrapper () 294485ee4c00Smrg{ 294585ee4c00Smrg func_emit_wrapper_arg1=no 294685ee4c00Smrg if test -n "$1" ; then 294785ee4c00Smrg func_emit_wrapper_arg1=$1 2948692f60a7Smrg fi 2949692f60a7Smrg 295085ee4c00Smrg # split this up so that func_emit_cwrapperexe_src 295185ee4c00Smrg # can call each part independently. 295285ee4c00Smrg func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" 295385ee4c00Smrg func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" 295485ee4c00Smrg} 2955692f60a7Smrg 2956692f60a7Smrg 295785ee4c00Smrg# func_to_host_path arg 295885ee4c00Smrg# 295985ee4c00Smrg# Convert paths to host format when used with build tools. 296085ee4c00Smrg# Intended for use with "native" mingw (where libtool itself 296185ee4c00Smrg# is running under the msys shell), or in the following cross- 296285ee4c00Smrg# build environments: 296385ee4c00Smrg# $build $host 296485ee4c00Smrg# mingw (msys) mingw [e.g. native] 296585ee4c00Smrg# cygwin mingw 296685ee4c00Smrg# *nix + wine mingw 296785ee4c00Smrg# where wine is equipped with the `winepath' executable. 296885ee4c00Smrg# In the native mingw case, the (msys) shell automatically 296985ee4c00Smrg# converts paths for any non-msys applications it launches, 297085ee4c00Smrg# but that facility isn't available from inside the cwrapper. 297185ee4c00Smrg# Similar accommodations are necessary for $host mingw and 297285ee4c00Smrg# $build cygwin. Calling this function does no harm for other 297385ee4c00Smrg# $host/$build combinations not listed above. 297485ee4c00Smrg# 297585ee4c00Smrg# ARG is the path (on $build) that should be converted to 297685ee4c00Smrg# the proper representation for $host. The result is stored 297785ee4c00Smrg# in $func_to_host_path_result. 297885ee4c00Smrgfunc_to_host_path () 297985ee4c00Smrg{ 298085ee4c00Smrg func_to_host_path_result="$1" 298185ee4c00Smrg if test -n "$1" ; then 298285ee4c00Smrg case $host in 298385ee4c00Smrg *mingw* ) 298485ee4c00Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 298585ee4c00Smrg case $build in 298685ee4c00Smrg *mingw* ) # actually, msys 298785ee4c00Smrg # awkward: cmd appends spaces to result 298885ee4c00Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 298985ee4c00Smrg func_to_host_path_tmp1=`( cmd //c echo "$1" |\ 299085ee4c00Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 299185ee4c00Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 299285ee4c00Smrg $SED -e "$lt_sed_naive_backslashify"` 299385ee4c00Smrg ;; 299485ee4c00Smrg *cygwin* ) 299585ee4c00Smrg func_to_host_path_tmp1=`cygpath -w "$1"` 299685ee4c00Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 299785ee4c00Smrg $SED -e "$lt_sed_naive_backslashify"` 299885ee4c00Smrg ;; 299985ee4c00Smrg * ) 300085ee4c00Smrg # Unfortunately, winepath does not exit with a non-zero 300185ee4c00Smrg # error code, so we are forced to check the contents of 300285ee4c00Smrg # stdout. On the other hand, if the command is not 300385ee4c00Smrg # found, the shell will set an exit code of 127 and print 300485ee4c00Smrg # *an error message* to stdout. So we must check for both 300585ee4c00Smrg # error code of zero AND non-empty stdout, which explains 300685ee4c00Smrg # the odd construction: 300785ee4c00Smrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 300885ee4c00Smrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 300985ee4c00Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 301085ee4c00Smrg $SED -e "$lt_sed_naive_backslashify"` 301185ee4c00Smrg else 301285ee4c00Smrg # Allow warning below. 301385ee4c00Smrg func_to_host_path_result="" 301485ee4c00Smrg fi 301585ee4c00Smrg ;; 301685ee4c00Smrg esac 301785ee4c00Smrg if test -z "$func_to_host_path_result" ; then 301885ee4c00Smrg func_error "Could not determine host path corresponding to" 301985ee4c00Smrg func_error " '$1'" 302085ee4c00Smrg func_error "Continuing, but uninstalled executables may not work." 302185ee4c00Smrg # Fallback: 302285ee4c00Smrg func_to_host_path_result="$1" 302385ee4c00Smrg fi 302485ee4c00Smrg ;; 302585ee4c00Smrg esac 302685ee4c00Smrg fi 302785ee4c00Smrg} 302885ee4c00Smrg# end: func_to_host_path 3029692f60a7Smrg 303085ee4c00Smrg# func_to_host_pathlist arg 303185ee4c00Smrg# 303285ee4c00Smrg# Convert pathlists to host format when used with build tools. 303385ee4c00Smrg# See func_to_host_path(), above. This function supports the 303485ee4c00Smrg# following $build/$host combinations (but does no harm for 303585ee4c00Smrg# combinations not listed here): 303685ee4c00Smrg# $build $host 303785ee4c00Smrg# mingw (msys) mingw [e.g. native] 303885ee4c00Smrg# cygwin mingw 303985ee4c00Smrg# *nix + wine mingw 304085ee4c00Smrg# 304185ee4c00Smrg# Path separators are also converted from $build format to 304285ee4c00Smrg# $host format. If ARG begins or ends with a path separator 304385ee4c00Smrg# character, it is preserved (but converted to $host format) 304485ee4c00Smrg# on output. 304585ee4c00Smrg# 304685ee4c00Smrg# ARG is a pathlist (on $build) that should be converted to 304785ee4c00Smrg# the proper representation on $host. The result is stored 304885ee4c00Smrg# in $func_to_host_pathlist_result. 304985ee4c00Smrgfunc_to_host_pathlist () 305085ee4c00Smrg{ 305185ee4c00Smrg func_to_host_pathlist_result="$1" 305285ee4c00Smrg if test -n "$1" ; then 305385ee4c00Smrg case $host in 305485ee4c00Smrg *mingw* ) 305585ee4c00Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 305685ee4c00Smrg # Remove leading and trailing path separator characters from 305785ee4c00Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 305885ee4c00Smrg # into '.;' and ';.', and winepath ignores them completely. 305985ee4c00Smrg func_to_host_pathlist_tmp2="$1" 306085ee4c00Smrg # Once set for this call, this variable should not be 306185ee4c00Smrg # reassigned. It is used in tha fallback case. 306285ee4c00Smrg func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ 306385ee4c00Smrg $SED -e 's|^:*||' -e 's|:*$||'` 306485ee4c00Smrg case $build in 306585ee4c00Smrg *mingw* ) # Actually, msys. 306685ee4c00Smrg # Awkward: cmd appends spaces to result. 306785ee4c00Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 306885ee4c00Smrg func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ 306985ee4c00Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 307085ee4c00Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 307185ee4c00Smrg $SED -e "$lt_sed_naive_backslashify"` 307285ee4c00Smrg ;; 307385ee4c00Smrg *cygwin* ) 307485ee4c00Smrg func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` 307585ee4c00Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 307685ee4c00Smrg $SED -e "$lt_sed_naive_backslashify"` 307785ee4c00Smrg ;; 307885ee4c00Smrg * ) 307985ee4c00Smrg # unfortunately, winepath doesn't convert pathlists 308085ee4c00Smrg func_to_host_pathlist_result="" 308185ee4c00Smrg func_to_host_pathlist_oldIFS=$IFS 308285ee4c00Smrg IFS=: 308385ee4c00Smrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 308485ee4c00Smrg IFS=$func_to_host_pathlist_oldIFS 308585ee4c00Smrg if test -n "$func_to_host_pathlist_f" ; then 308685ee4c00Smrg func_to_host_path "$func_to_host_pathlist_f" 308785ee4c00Smrg if test -n "$func_to_host_path_result" ; then 308885ee4c00Smrg if test -z "$func_to_host_pathlist_result" ; then 308985ee4c00Smrg func_to_host_pathlist_result="$func_to_host_path_result" 309085ee4c00Smrg else 309185ee4c00Smrg func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" 309285ee4c00Smrg fi 309385ee4c00Smrg fi 309485ee4c00Smrg fi 309585ee4c00Smrg IFS=: 309685ee4c00Smrg done 309785ee4c00Smrg IFS=$func_to_host_pathlist_oldIFS 309885ee4c00Smrg ;; 309985ee4c00Smrg esac 310085ee4c00Smrg if test -z "$func_to_host_pathlist_result" ; then 310185ee4c00Smrg func_error "Could not determine the host path(s) corresponding to" 310285ee4c00Smrg func_error " '$1'" 310385ee4c00Smrg func_error "Continuing, but uninstalled executables may not work." 310485ee4c00Smrg # Fallback. This may break if $1 contains DOS-style drive 310585ee4c00Smrg # specifications. The fix is not to complicate the expression 310685ee4c00Smrg # below, but for the user to provide a working wine installation 310785ee4c00Smrg # with winepath so that path translation in the cross-to-mingw 310885ee4c00Smrg # case works properly. 310985ee4c00Smrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 311085ee4c00Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 311185ee4c00Smrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 311285ee4c00Smrg fi 311385ee4c00Smrg # Now, add the leading and trailing path separators back 311485ee4c00Smrg case "$1" in 311585ee4c00Smrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 311685ee4c00Smrg ;; 311785ee4c00Smrg esac 311885ee4c00Smrg case "$1" in 311985ee4c00Smrg *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" 312085ee4c00Smrg ;; 312185ee4c00Smrg esac 312285ee4c00Smrg ;; 312385ee4c00Smrg esac 312485ee4c00Smrg fi 312585ee4c00Smrg} 312685ee4c00Smrg# end: func_to_host_pathlist 3127692f60a7Smrg 312885ee4c00Smrg# func_emit_cwrapperexe_src 312985ee4c00Smrg# emit the source code for a wrapper executable on stdout 313085ee4c00Smrg# Must ONLY be called from within func_mode_link because 313185ee4c00Smrg# it depends on a number of variable set therein. 313285ee4c00Smrgfunc_emit_cwrapperexe_src () 313385ee4c00Smrg{ 313485ee4c00Smrg cat <<EOF 3135692f60a7Smrg 313685ee4c00Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 313785ee4c00Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3138692f60a7Smrg 313985ee4c00Smrg The $output program cannot be directly executed until all the libtool 314085ee4c00Smrg libraries that it depends on are installed. 3141692f60a7Smrg 314285ee4c00Smrg This wrapper executable should never be moved out of the build directory. 314385ee4c00Smrg If it is, it will not operate correctly. 3144692f60a7Smrg 314585ee4c00Smrg Currently, it simply execs the wrapper *script* "$SHELL $output", 314685ee4c00Smrg but could eventually absorb all of the scripts functionality and 314785ee4c00Smrg exec $objdir/$outputname directly. 314885ee4c00Smrg*/ 314985ee4c00SmrgEOF 315085ee4c00Smrg cat <<"EOF" 315185ee4c00Smrg#include <stdio.h> 315285ee4c00Smrg#include <stdlib.h> 315385ee4c00Smrg#ifdef _MSC_VER 315485ee4c00Smrg# include <direct.h> 315585ee4c00Smrg# include <process.h> 315685ee4c00Smrg# include <io.h> 315785ee4c00Smrg# define setmode _setmode 315885ee4c00Smrg#else 315985ee4c00Smrg# include <unistd.h> 316085ee4c00Smrg# include <stdint.h> 316185ee4c00Smrg# ifdef __CYGWIN__ 316285ee4c00Smrg# include <io.h> 316385ee4c00Smrg# define HAVE_SETENV 316485ee4c00Smrg# ifdef __STRICT_ANSI__ 316585ee4c00Smrgchar *realpath (const char *, char *); 316685ee4c00Smrgint putenv (char *); 316785ee4c00Smrgint setenv (const char *, const char *, int); 316885ee4c00Smrg# endif 316985ee4c00Smrg# endif 317085ee4c00Smrg#endif 317185ee4c00Smrg#include <malloc.h> 317285ee4c00Smrg#include <stdarg.h> 317385ee4c00Smrg#include <assert.h> 317485ee4c00Smrg#include <string.h> 317585ee4c00Smrg#include <ctype.h> 317685ee4c00Smrg#include <errno.h> 317785ee4c00Smrg#include <fcntl.h> 317885ee4c00Smrg#include <sys/stat.h> 3179692f60a7Smrg 318085ee4c00Smrg#if defined(PATH_MAX) 318185ee4c00Smrg# define LT_PATHMAX PATH_MAX 318285ee4c00Smrg#elif defined(MAXPATHLEN) 318385ee4c00Smrg# define LT_PATHMAX MAXPATHLEN 318485ee4c00Smrg#else 318585ee4c00Smrg# define LT_PATHMAX 1024 318685ee4c00Smrg#endif 3187692f60a7Smrg 318885ee4c00Smrg#ifndef S_IXOTH 318985ee4c00Smrg# define S_IXOTH 0 319085ee4c00Smrg#endif 319185ee4c00Smrg#ifndef S_IXGRP 319285ee4c00Smrg# define S_IXGRP 0 319385ee4c00Smrg#endif 3194692f60a7Smrg 319585ee4c00Smrg#ifdef _MSC_VER 319685ee4c00Smrg# define S_IXUSR _S_IEXEC 319785ee4c00Smrg# define stat _stat 319885ee4c00Smrg# ifndef _INTPTR_T_DEFINED 319985ee4c00Smrg# define intptr_t int 320085ee4c00Smrg# endif 320185ee4c00Smrg#endif 3202692f60a7Smrg 320385ee4c00Smrg#ifndef DIR_SEPARATOR 320485ee4c00Smrg# define DIR_SEPARATOR '/' 320585ee4c00Smrg# define PATH_SEPARATOR ':' 320685ee4c00Smrg#endif 3207692f60a7Smrg 320885ee4c00Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 320985ee4c00Smrg defined (__OS2__) 321085ee4c00Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 321185ee4c00Smrg# define FOPEN_WB "wb" 321285ee4c00Smrg# ifndef DIR_SEPARATOR_2 321385ee4c00Smrg# define DIR_SEPARATOR_2 '\\' 321485ee4c00Smrg# endif 321585ee4c00Smrg# ifndef PATH_SEPARATOR_2 321685ee4c00Smrg# define PATH_SEPARATOR_2 ';' 321785ee4c00Smrg# endif 321885ee4c00Smrg#endif 3219692f60a7Smrg 322085ee4c00Smrg#ifndef DIR_SEPARATOR_2 322185ee4c00Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 322285ee4c00Smrg#else /* DIR_SEPARATOR_2 */ 322385ee4c00Smrg# define IS_DIR_SEPARATOR(ch) \ 322485ee4c00Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 322585ee4c00Smrg#endif /* DIR_SEPARATOR_2 */ 3226692f60a7Smrg 322785ee4c00Smrg#ifndef PATH_SEPARATOR_2 322885ee4c00Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 322985ee4c00Smrg#else /* PATH_SEPARATOR_2 */ 323085ee4c00Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 323185ee4c00Smrg#endif /* PATH_SEPARATOR_2 */ 3232692f60a7Smrg 323385ee4c00Smrg#ifdef __CYGWIN__ 323485ee4c00Smrg# define FOPEN_WB "wb" 323585ee4c00Smrg#endif 3236692f60a7Smrg 323785ee4c00Smrg#ifndef FOPEN_WB 323885ee4c00Smrg# define FOPEN_WB "w" 323985ee4c00Smrg#endif 324085ee4c00Smrg#ifndef _O_BINARY 324185ee4c00Smrg# define _O_BINARY 0 324285ee4c00Smrg#endif 3243692f60a7Smrg 324485ee4c00Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 324585ee4c00Smrg#define XFREE(stale) do { \ 324685ee4c00Smrg if (stale) { free ((void *) stale); stale = 0; } \ 324785ee4c00Smrg} while (0) 3248692f60a7Smrg 324985ee4c00Smrg#undef LTWRAPPER_DEBUGPRINTF 325085ee4c00Smrg#if defined DEBUGWRAPPER 325185ee4c00Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args 325285ee4c00Smrgstatic void 325385ee4c00Smrgltwrapper_debugprintf (const char *fmt, ...) 325485ee4c00Smrg{ 325585ee4c00Smrg va_list args; 325685ee4c00Smrg va_start (args, fmt); 325785ee4c00Smrg (void) vfprintf (stderr, fmt, args); 325885ee4c00Smrg va_end (args); 325985ee4c00Smrg} 326085ee4c00Smrg#else 326185ee4c00Smrg# define LTWRAPPER_DEBUGPRINTF(args) 326285ee4c00Smrg#endif 3263692f60a7Smrg 326485ee4c00Smrgconst char *program_name = NULL; 3265692f60a7Smrg 326685ee4c00Smrgvoid *xmalloc (size_t num); 326785ee4c00Smrgchar *xstrdup (const char *string); 326885ee4c00Smrgconst char *base_name (const char *name); 326985ee4c00Smrgchar *find_executable (const char *wrapper); 327085ee4c00Smrgchar *chase_symlinks (const char *pathspec); 327185ee4c00Smrgint make_executable (const char *path); 327285ee4c00Smrgint check_executable (const char *path); 327385ee4c00Smrgchar *strendzap (char *str, const char *pat); 327485ee4c00Smrgvoid lt_fatal (const char *message, ...); 327585ee4c00Smrgvoid lt_setenv (const char *name, const char *value); 327685ee4c00Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 327785ee4c00Smrgvoid lt_opt_process_env_set (const char *arg); 327885ee4c00Smrgvoid lt_opt_process_env_prepend (const char *arg); 327985ee4c00Smrgvoid lt_opt_process_env_append (const char *arg); 328085ee4c00Smrgint lt_split_name_value (const char *arg, char** name, char** value); 328185ee4c00Smrgvoid lt_update_exe_path (const char *name, const char *value); 328285ee4c00Smrgvoid lt_update_lib_path (const char *name, const char *value); 328385ee4c00Smrg 328485ee4c00Smrgstatic const char *script_text_part1 = 328585ee4c00SmrgEOF 3286692f60a7Smrg 328785ee4c00Smrg func_emit_wrapper_part1 yes | 328885ee4c00Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 328985ee4c00Smrg -e 's/^/ "/' -e 's/$/\\n"/' 329085ee4c00Smrg echo ";" 329185ee4c00Smrg cat <<EOF 3292692f60a7Smrg 329385ee4c00Smrgstatic const char *script_text_part2 = 329485ee4c00SmrgEOF 329585ee4c00Smrg func_emit_wrapper_part2 yes | 329685ee4c00Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 329785ee4c00Smrg -e 's/^/ "/' -e 's/$/\\n"/' 329885ee4c00Smrg echo ";" 329985ee4c00Smrg 330085ee4c00Smrg cat <<EOF 330185ee4c00Smrgconst char * MAGIC_EXE = "$magic_exe"; 330285ee4c00Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 330385ee4c00SmrgEOF 3304692f60a7Smrg 330585ee4c00Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 330685ee4c00Smrg func_to_host_pathlist "$temp_rpath" 330785ee4c00Smrg cat <<EOF 330885ee4c00Smrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 330985ee4c00SmrgEOF 331085ee4c00Smrg else 331185ee4c00Smrg cat <<"EOF" 331285ee4c00Smrgconst char * LIB_PATH_VALUE = ""; 331385ee4c00SmrgEOF 3314692f60a7Smrg fi 3315692f60a7Smrg 331685ee4c00Smrg if test -n "$dllsearchpath"; then 331785ee4c00Smrg func_to_host_pathlist "$dllsearchpath:" 331885ee4c00Smrg cat <<EOF 331985ee4c00Smrgconst char * EXE_PATH_VARNAME = "PATH"; 332085ee4c00Smrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 3321692f60a7SmrgEOF 3322692f60a7Smrg else 332385ee4c00Smrg cat <<"EOF" 332485ee4c00Smrgconst char * EXE_PATH_VARNAME = ""; 332585ee4c00Smrgconst char * EXE_PATH_VALUE = ""; 332685ee4c00SmrgEOF 3327692f60a7Smrg fi 332885ee4c00Smrg 332985ee4c00Smrg if test "$fast_install" = yes; then 333085ee4c00Smrg cat <<EOF 333185ee4c00Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 333285ee4c00SmrgEOF 3333692f60a7Smrg else 333485ee4c00Smrg cat <<EOF 333585ee4c00Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 333685ee4c00SmrgEOF 3337692f60a7Smrg fi 3338692f60a7Smrg 3339692f60a7Smrg 334085ee4c00Smrg cat <<"EOF" 3341692f60a7Smrg 334285ee4c00Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 334385ee4c00Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH 5 3344692f60a7Smrg 334585ee4c00Smrgstatic const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH; 334685ee4c00Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 3347692f60a7Smrg 334885ee4c00Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 3349692f60a7Smrg 335085ee4c00Smrgstatic const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7; 335185ee4c00Smrgstatic const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set"; 335285ee4c00Smrg /* argument is putenv-style "foo=bar", value of foo is set to bar */ 3353692f60a7Smrg 335485ee4c00Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11; 335585ee4c00Smrgstatic const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend"; 335685ee4c00Smrg /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */ 3357692f60a7Smrg 335885ee4c00Smrgstatic const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10; 335985ee4c00Smrgstatic const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append"; 336085ee4c00Smrg /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */ 3361692f60a7Smrg 336285ee4c00Smrgint 336385ee4c00Smrgmain (int argc, char *argv[]) 336485ee4c00Smrg{ 336585ee4c00Smrg char **newargz; 336685ee4c00Smrg int newargc; 336785ee4c00Smrg char *tmp_pathspec; 336885ee4c00Smrg char *actual_cwrapper_path; 336985ee4c00Smrg char *actual_cwrapper_name; 337085ee4c00Smrg char *target_name; 337185ee4c00Smrg char *lt_argv_zero; 337285ee4c00Smrg intptr_t rval = 127; 3373692f60a7Smrg 337485ee4c00Smrg int i; 3375692f60a7Smrg 337685ee4c00Smrg program_name = (char *) xstrdup (base_name (argv[0])); 337785ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0])); 337885ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name)); 3379692f60a7Smrg 338085ee4c00Smrg /* very simple arg parsing; don't want to rely on getopt */ 338185ee4c00Smrg for (i = 1; i < argc; i++) 338285ee4c00Smrg { 338385ee4c00Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 338485ee4c00Smrg { 338585ee4c00SmrgEOF 338685ee4c00Smrg case "$host" in 338785ee4c00Smrg *mingw* | *cygwin* ) 338885ee4c00Smrg # make stdout use "unix" line endings 338985ee4c00Smrg echo " setmode(1,_O_BINARY);" 339085ee4c00Smrg ;; 339185ee4c00Smrg esac 3392692f60a7Smrg 339385ee4c00Smrg cat <<"EOF" 339485ee4c00Smrg printf ("%s", script_text_part1); 339585ee4c00Smrg printf ("%s", script_text_part2); 339685ee4c00Smrg return 0; 339785ee4c00Smrg } 339885ee4c00Smrg } 3399692f60a7Smrg 340085ee4c00Smrg newargz = XMALLOC (char *, argc + 1); 340185ee4c00Smrg tmp_pathspec = find_executable (argv[0]); 340285ee4c00Smrg if (tmp_pathspec == NULL) 340385ee4c00Smrg lt_fatal ("Couldn't find %s", argv[0]); 340485ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", 340585ee4c00Smrg tmp_pathspec)); 340685ee4c00Smrg 340785ee4c00Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 340885ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", 340985ee4c00Smrg actual_cwrapper_path)); 341085ee4c00Smrg XFREE (tmp_pathspec); 341185ee4c00Smrg 341285ee4c00Smrg actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); 341385ee4c00Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 341485ee4c00Smrg 341585ee4c00Smrg /* wrapper name transforms */ 341685ee4c00Smrg strendzap (actual_cwrapper_name, ".exe"); 341785ee4c00Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 341885ee4c00Smrg XFREE (actual_cwrapper_name); 341985ee4c00Smrg actual_cwrapper_name = tmp_pathspec; 342085ee4c00Smrg tmp_pathspec = 0; 342185ee4c00Smrg 342285ee4c00Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 342385ee4c00Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 342485ee4c00Smrg strendzap (target_name, ".exe"); 342585ee4c00Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 342685ee4c00Smrg XFREE (target_name); 342785ee4c00Smrg target_name = tmp_pathspec; 342885ee4c00Smrg tmp_pathspec = 0; 342985ee4c00Smrg 343085ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", 343185ee4c00Smrg target_name)); 343285ee4c00SmrgEOF 3433692f60a7Smrg 343485ee4c00Smrg cat <<EOF 343585ee4c00Smrg newargz[0] = 343685ee4c00Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 343785ee4c00Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 343885ee4c00Smrg strcpy (newargz[0], actual_cwrapper_path); 343985ee4c00Smrg strcat (newargz[0], "$objdir"); 344085ee4c00Smrg strcat (newargz[0], "/"); 344185ee4c00SmrgEOF 3442692f60a7Smrg 344385ee4c00Smrg cat <<"EOF" 344485ee4c00Smrg /* stop here, and copy so we don't have to do this twice */ 344585ee4c00Smrg tmp_pathspec = xstrdup (newargz[0]); 3446692f60a7Smrg 344785ee4c00Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 344885ee4c00Smrg strcat (newargz[0], actual_cwrapper_name); 3449692f60a7Smrg 345085ee4c00Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 345185ee4c00Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 345285ee4c00Smrg XFREE (tmp_pathspec); 345385ee4c00Smrg tmp_pathspec = NULL; 345485ee4c00SmrgEOF 3455692f60a7Smrg 345685ee4c00Smrg case $host_os in 345785ee4c00Smrg mingw*) 345885ee4c00Smrg cat <<"EOF" 345985ee4c00Smrg { 346085ee4c00Smrg char* p; 346185ee4c00Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 346285ee4c00Smrg { 346385ee4c00Smrg *p = '/'; 346485ee4c00Smrg } 346585ee4c00Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 346685ee4c00Smrg { 346785ee4c00Smrg *p = '/'; 346885ee4c00Smrg } 346985ee4c00Smrg } 347085ee4c00SmrgEOF 347185ee4c00Smrg ;; 347285ee4c00Smrg esac 3473692f60a7Smrg 347485ee4c00Smrg cat <<"EOF" 347585ee4c00Smrg XFREE (target_name); 347685ee4c00Smrg XFREE (actual_cwrapper_path); 347785ee4c00Smrg XFREE (actual_cwrapper_name); 3478692f60a7Smrg 347985ee4c00Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 348085ee4c00Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 348185ee4c00Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 348285ee4c00Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 3483692f60a7Smrg 348485ee4c00Smrg newargc=0; 348585ee4c00Smrg for (i = 1; i < argc; i++) 348685ee4c00Smrg { 348785ee4c00Smrg if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) 348885ee4c00Smrg { 348985ee4c00Smrg if (argv[i][env_set_opt_len] == '=') 349085ee4c00Smrg { 349185ee4c00Smrg const char *p = argv[i] + env_set_opt_len + 1; 349285ee4c00Smrg lt_opt_process_env_set (p); 349385ee4c00Smrg } 349485ee4c00Smrg else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) 349585ee4c00Smrg { 349685ee4c00Smrg lt_opt_process_env_set (argv[++i]); /* don't copy */ 349785ee4c00Smrg } 349885ee4c00Smrg else 349985ee4c00Smrg lt_fatal ("%s missing required argument", env_set_opt); 350085ee4c00Smrg continue; 350185ee4c00Smrg } 350285ee4c00Smrg if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) 350385ee4c00Smrg { 350485ee4c00Smrg if (argv[i][env_prepend_opt_len] == '=') 350585ee4c00Smrg { 350685ee4c00Smrg const char *p = argv[i] + env_prepend_opt_len + 1; 350785ee4c00Smrg lt_opt_process_env_prepend (p); 350885ee4c00Smrg } 350985ee4c00Smrg else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) 351085ee4c00Smrg { 351185ee4c00Smrg lt_opt_process_env_prepend (argv[++i]); /* don't copy */ 351285ee4c00Smrg } 351385ee4c00Smrg else 351485ee4c00Smrg lt_fatal ("%s missing required argument", env_prepend_opt); 351585ee4c00Smrg continue; 351685ee4c00Smrg } 351785ee4c00Smrg if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) 351885ee4c00Smrg { 351985ee4c00Smrg if (argv[i][env_append_opt_len] == '=') 352085ee4c00Smrg { 352185ee4c00Smrg const char *p = argv[i] + env_append_opt_len + 1; 352285ee4c00Smrg lt_opt_process_env_append (p); 352385ee4c00Smrg } 352485ee4c00Smrg else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) 352585ee4c00Smrg { 352685ee4c00Smrg lt_opt_process_env_append (argv[++i]); /* don't copy */ 352785ee4c00Smrg } 352885ee4c00Smrg else 352985ee4c00Smrg lt_fatal ("%s missing required argument", env_append_opt); 353085ee4c00Smrg continue; 353185ee4c00Smrg } 353285ee4c00Smrg if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) 353385ee4c00Smrg { 353485ee4c00Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 353585ee4c00Smrg namespace, but it is not one of the ones we know about and 353685ee4c00Smrg have already dealt with, above (inluding dump-script), then 353785ee4c00Smrg report an error. Otherwise, targets might begin to believe 353885ee4c00Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 353985ee4c00Smrg namespace. The first time any user complains about this, we'll 354085ee4c00Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 354185ee4c00Smrg or a configure.ac-settable value. 354285ee4c00Smrg */ 354385ee4c00Smrg lt_fatal ("Unrecognized option in %s namespace: '%s'", 354485ee4c00Smrg ltwrapper_option_prefix, argv[i]); 354585ee4c00Smrg } 354685ee4c00Smrg /* otherwise ... */ 354785ee4c00Smrg newargz[++newargc] = xstrdup (argv[i]); 354885ee4c00Smrg } 354985ee4c00Smrg newargz[++newargc] = NULL; 3550692f60a7Smrg 355185ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>"))); 355285ee4c00Smrg for (i = 0; i < newargc; i++) 355385ee4c00Smrg { 355485ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>"))); 355585ee4c00Smrg } 3556692f60a7Smrg 355785ee4c00SmrgEOF 3558692f60a7Smrg 355985ee4c00Smrg case $host_os in 356085ee4c00Smrg mingw*) 356185ee4c00Smrg cat <<"EOF" 356285ee4c00Smrg /* execv doesn't actually work on mingw as expected on unix */ 356385ee4c00Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 356485ee4c00Smrg if (rval == -1) 356585ee4c00Smrg { 356685ee4c00Smrg /* failed to start process */ 356785ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); 356885ee4c00Smrg return 127; 356985ee4c00Smrg } 357085ee4c00Smrg return rval; 357185ee4c00SmrgEOF 357285ee4c00Smrg ;; 357385ee4c00Smrg *) 357485ee4c00Smrg cat <<"EOF" 357585ee4c00Smrg execv (lt_argv_zero, newargz); 357685ee4c00Smrg return rval; /* =127, but avoids unused variable warning */ 357785ee4c00SmrgEOF 357885ee4c00Smrg ;; 357985ee4c00Smrg esac 3580692f60a7Smrg 358185ee4c00Smrg cat <<"EOF" 358285ee4c00Smrg} 3583692f60a7Smrg 358485ee4c00Smrgvoid * 358585ee4c00Smrgxmalloc (size_t num) 358685ee4c00Smrg{ 358785ee4c00Smrg void *p = (void *) malloc (num); 358885ee4c00Smrg if (!p) 358985ee4c00Smrg lt_fatal ("Memory exhausted"); 3590692f60a7Smrg 359185ee4c00Smrg return p; 359285ee4c00Smrg} 3593692f60a7Smrg 359485ee4c00Smrgchar * 359585ee4c00Smrgxstrdup (const char *string) 359685ee4c00Smrg{ 359785ee4c00Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 359885ee4c00Smrg string) : NULL; 359985ee4c00Smrg} 3600692f60a7Smrg 360185ee4c00Smrgconst char * 360285ee4c00Smrgbase_name (const char *name) 360385ee4c00Smrg{ 360485ee4c00Smrg const char *base; 3605692f60a7Smrg 360685ee4c00Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 360785ee4c00Smrg /* Skip over the disk name in MSDOS pathnames. */ 360885ee4c00Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 360985ee4c00Smrg name += 2; 361085ee4c00Smrg#endif 3611692f60a7Smrg 361285ee4c00Smrg for (base = name; *name; name++) 361385ee4c00Smrg if (IS_DIR_SEPARATOR (*name)) 361485ee4c00Smrg base = name + 1; 361585ee4c00Smrg return base; 361685ee4c00Smrg} 3617692f60a7Smrg 361885ee4c00Smrgint 361985ee4c00Smrgcheck_executable (const char *path) 362085ee4c00Smrg{ 362185ee4c00Smrg struct stat st; 3622692f60a7Smrg 362385ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", 362485ee4c00Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 362585ee4c00Smrg if ((!path) || (!*path)) 362685ee4c00Smrg return 0; 3627692f60a7Smrg 362885ee4c00Smrg if ((stat (path, &st) >= 0) 362985ee4c00Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 363085ee4c00Smrg return 1; 363185ee4c00Smrg else 363285ee4c00Smrg return 0; 363385ee4c00Smrg} 3634692f60a7Smrg 363585ee4c00Smrgint 363685ee4c00Smrgmake_executable (const char *path) 363785ee4c00Smrg{ 363885ee4c00Smrg int rval = 0; 363985ee4c00Smrg struct stat st; 3640692f60a7Smrg 364185ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", 364285ee4c00Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 364385ee4c00Smrg if ((!path) || (!*path)) 364485ee4c00Smrg return 0; 3645692f60a7Smrg 364685ee4c00Smrg if (stat (path, &st) >= 0) 364785ee4c00Smrg { 364885ee4c00Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 364985ee4c00Smrg } 365085ee4c00Smrg return rval; 365185ee4c00Smrg} 3652692f60a7Smrg 365385ee4c00Smrg/* Searches for the full path of the wrapper. Returns 365485ee4c00Smrg newly allocated full path name if found, NULL otherwise 365585ee4c00Smrg Does not chase symlinks, even on platforms that support them. 365685ee4c00Smrg*/ 365785ee4c00Smrgchar * 365885ee4c00Smrgfind_executable (const char *wrapper) 365985ee4c00Smrg{ 366085ee4c00Smrg int has_slash = 0; 366185ee4c00Smrg const char *p; 366285ee4c00Smrg const char *p_next; 366385ee4c00Smrg /* static buffer for getcwd */ 366485ee4c00Smrg char tmp[LT_PATHMAX + 1]; 366585ee4c00Smrg int tmp_len; 366685ee4c00Smrg char *concat_name; 3667692f60a7Smrg 366885ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", 366985ee4c00Smrg wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 3670692f60a7Smrg 367185ee4c00Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 367285ee4c00Smrg return NULL; 3673692f60a7Smrg 367485ee4c00Smrg /* Absolute path? */ 367585ee4c00Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 367685ee4c00Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 367785ee4c00Smrg { 367885ee4c00Smrg concat_name = xstrdup (wrapper); 367985ee4c00Smrg if (check_executable (concat_name)) 368085ee4c00Smrg return concat_name; 368185ee4c00Smrg XFREE (concat_name); 368285ee4c00Smrg } 368385ee4c00Smrg else 368485ee4c00Smrg { 368585ee4c00Smrg#endif 368685ee4c00Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 368785ee4c00Smrg { 368885ee4c00Smrg concat_name = xstrdup (wrapper); 368985ee4c00Smrg if (check_executable (concat_name)) 369085ee4c00Smrg return concat_name; 369185ee4c00Smrg XFREE (concat_name); 369285ee4c00Smrg } 369385ee4c00Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 369485ee4c00Smrg } 369585ee4c00Smrg#endif 3696692f60a7Smrg 369785ee4c00Smrg for (p = wrapper; *p; p++) 369885ee4c00Smrg if (*p == '/') 369985ee4c00Smrg { 370085ee4c00Smrg has_slash = 1; 370185ee4c00Smrg break; 370285ee4c00Smrg } 370385ee4c00Smrg if (!has_slash) 370485ee4c00Smrg { 370585ee4c00Smrg /* no slashes; search PATH */ 370685ee4c00Smrg const char *path = getenv ("PATH"); 370785ee4c00Smrg if (path != NULL) 370885ee4c00Smrg { 370985ee4c00Smrg for (p = path; *p; p = p_next) 371085ee4c00Smrg { 371185ee4c00Smrg const char *q; 371285ee4c00Smrg size_t p_len; 371385ee4c00Smrg for (q = p; *q; q++) 371485ee4c00Smrg if (IS_PATH_SEPARATOR (*q)) 371585ee4c00Smrg break; 371685ee4c00Smrg p_len = q - p; 371785ee4c00Smrg p_next = (*q == '\0' ? q : q + 1); 371885ee4c00Smrg if (p_len == 0) 371985ee4c00Smrg { 372085ee4c00Smrg /* empty path: current directory */ 372185ee4c00Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 372285ee4c00Smrg lt_fatal ("getcwd failed"); 372385ee4c00Smrg tmp_len = strlen (tmp); 372485ee4c00Smrg concat_name = 372585ee4c00Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 372685ee4c00Smrg memcpy (concat_name, tmp, tmp_len); 372785ee4c00Smrg concat_name[tmp_len] = '/'; 372885ee4c00Smrg strcpy (concat_name + tmp_len + 1, wrapper); 372985ee4c00Smrg } 373085ee4c00Smrg else 373185ee4c00Smrg { 373285ee4c00Smrg concat_name = 373385ee4c00Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 373485ee4c00Smrg memcpy (concat_name, p, p_len); 373585ee4c00Smrg concat_name[p_len] = '/'; 373685ee4c00Smrg strcpy (concat_name + p_len + 1, wrapper); 373785ee4c00Smrg } 373885ee4c00Smrg if (check_executable (concat_name)) 373985ee4c00Smrg return concat_name; 374085ee4c00Smrg XFREE (concat_name); 374185ee4c00Smrg } 374285ee4c00Smrg } 374385ee4c00Smrg /* not found in PATH; assume curdir */ 374485ee4c00Smrg } 374585ee4c00Smrg /* Relative path | not found in path: prepend cwd */ 374685ee4c00Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 374785ee4c00Smrg lt_fatal ("getcwd failed"); 374885ee4c00Smrg tmp_len = strlen (tmp); 374985ee4c00Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 375085ee4c00Smrg memcpy (concat_name, tmp, tmp_len); 375185ee4c00Smrg concat_name[tmp_len] = '/'; 375285ee4c00Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3753692f60a7Smrg 375485ee4c00Smrg if (check_executable (concat_name)) 375585ee4c00Smrg return concat_name; 375685ee4c00Smrg XFREE (concat_name); 375785ee4c00Smrg return NULL; 375885ee4c00Smrg} 3759692f60a7Smrg 376085ee4c00Smrgchar * 376185ee4c00Smrgchase_symlinks (const char *pathspec) 376285ee4c00Smrg{ 376385ee4c00Smrg#ifndef S_ISLNK 376485ee4c00Smrg return xstrdup (pathspec); 376585ee4c00Smrg#else 376685ee4c00Smrg char buf[LT_PATHMAX]; 376785ee4c00Smrg struct stat s; 376885ee4c00Smrg char *tmp_pathspec = xstrdup (pathspec); 376985ee4c00Smrg char *p; 377085ee4c00Smrg int has_symlinks = 0; 377185ee4c00Smrg while (strlen (tmp_pathspec) && !has_symlinks) 377285ee4c00Smrg { 377385ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", 377485ee4c00Smrg tmp_pathspec)); 377585ee4c00Smrg if (lstat (tmp_pathspec, &s) == 0) 377685ee4c00Smrg { 377785ee4c00Smrg if (S_ISLNK (s.st_mode) != 0) 377885ee4c00Smrg { 377985ee4c00Smrg has_symlinks = 1; 378085ee4c00Smrg break; 378185ee4c00Smrg } 3782692f60a7Smrg 378385ee4c00Smrg /* search backwards for last DIR_SEPARATOR */ 378485ee4c00Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 378585ee4c00Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 378685ee4c00Smrg p--; 378785ee4c00Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 378885ee4c00Smrg { 378985ee4c00Smrg /* no more DIR_SEPARATORS left */ 379085ee4c00Smrg break; 379185ee4c00Smrg } 379285ee4c00Smrg *p = '\0'; 379385ee4c00Smrg } 379485ee4c00Smrg else 379585ee4c00Smrg { 379685ee4c00Smrg char *errstr = strerror (errno); 379785ee4c00Smrg lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); 379885ee4c00Smrg } 379985ee4c00Smrg } 380085ee4c00Smrg XFREE (tmp_pathspec); 3801692f60a7Smrg 380285ee4c00Smrg if (!has_symlinks) 380385ee4c00Smrg { 380485ee4c00Smrg return xstrdup (pathspec); 380585ee4c00Smrg } 3806692f60a7Smrg 380785ee4c00Smrg tmp_pathspec = realpath (pathspec, buf); 380885ee4c00Smrg if (tmp_pathspec == 0) 380985ee4c00Smrg { 381085ee4c00Smrg lt_fatal ("Could not follow symlinks for %s", pathspec); 381185ee4c00Smrg } 381285ee4c00Smrg return xstrdup (tmp_pathspec); 381385ee4c00Smrg#endif 381485ee4c00Smrg} 3815692f60a7Smrg 381685ee4c00Smrgchar * 381785ee4c00Smrgstrendzap (char *str, const char *pat) 381885ee4c00Smrg{ 381985ee4c00Smrg size_t len, patlen; 3820692f60a7Smrg 382185ee4c00Smrg assert (str != NULL); 382285ee4c00Smrg assert (pat != NULL); 3823692f60a7Smrg 382485ee4c00Smrg len = strlen (str); 382585ee4c00Smrg patlen = strlen (pat); 3826692f60a7Smrg 382785ee4c00Smrg if (patlen <= len) 382885ee4c00Smrg { 382985ee4c00Smrg str += len - patlen; 383085ee4c00Smrg if (strcmp (str, pat) == 0) 383185ee4c00Smrg *str = '\0'; 383285ee4c00Smrg } 383385ee4c00Smrg return str; 383485ee4c00Smrg} 3835692f60a7Smrg 383685ee4c00Smrgstatic void 383785ee4c00Smrglt_error_core (int exit_status, const char *mode, 383885ee4c00Smrg const char *message, va_list ap) 383985ee4c00Smrg{ 384085ee4c00Smrg fprintf (stderr, "%s: %s: ", program_name, mode); 384185ee4c00Smrg vfprintf (stderr, message, ap); 384285ee4c00Smrg fprintf (stderr, ".\n"); 3843692f60a7Smrg 384485ee4c00Smrg if (exit_status >= 0) 384585ee4c00Smrg exit (exit_status); 384685ee4c00Smrg} 3847692f60a7Smrg 384885ee4c00Smrgvoid 384985ee4c00Smrglt_fatal (const char *message, ...) 385085ee4c00Smrg{ 385185ee4c00Smrg va_list ap; 385285ee4c00Smrg va_start (ap, message); 385385ee4c00Smrg lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 385485ee4c00Smrg va_end (ap); 385585ee4c00Smrg} 3856692f60a7Smrg 385785ee4c00Smrgvoid 385885ee4c00Smrglt_setenv (const char *name, const char *value) 385985ee4c00Smrg{ 386085ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", 386185ee4c00Smrg (name ? name : "<NULL>"), 386285ee4c00Smrg (value ? value : "<NULL>"))); 386385ee4c00Smrg { 386485ee4c00Smrg#ifdef HAVE_SETENV 386585ee4c00Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 386685ee4c00Smrg char *str = xstrdup (value); 386785ee4c00Smrg setenv (name, str, 1); 386885ee4c00Smrg#else 386985ee4c00Smrg int len = strlen (name) + 1 + strlen (value) + 1; 387085ee4c00Smrg char *str = XMALLOC (char, len); 387185ee4c00Smrg sprintf (str, "%s=%s", name, value); 387285ee4c00Smrg if (putenv (str) != EXIT_SUCCESS) 387385ee4c00Smrg { 387485ee4c00Smrg XFREE (str); 387585ee4c00Smrg } 387685ee4c00Smrg#endif 387785ee4c00Smrg } 387885ee4c00Smrg} 3879692f60a7Smrg 388085ee4c00Smrgchar * 388185ee4c00Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 388285ee4c00Smrg{ 388385ee4c00Smrg char *new_value; 388485ee4c00Smrg if (orig_value && *orig_value) 388585ee4c00Smrg { 388685ee4c00Smrg int orig_value_len = strlen (orig_value); 388785ee4c00Smrg int add_len = strlen (add); 388885ee4c00Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 388985ee4c00Smrg if (to_end) 389085ee4c00Smrg { 389185ee4c00Smrg strcpy (new_value, orig_value); 389285ee4c00Smrg strcpy (new_value + orig_value_len, add); 389385ee4c00Smrg } 389485ee4c00Smrg else 389585ee4c00Smrg { 389685ee4c00Smrg strcpy (new_value, add); 389785ee4c00Smrg strcpy (new_value + add_len, orig_value); 389885ee4c00Smrg } 389985ee4c00Smrg } 390085ee4c00Smrg else 390185ee4c00Smrg { 390285ee4c00Smrg new_value = xstrdup (add); 390385ee4c00Smrg } 390485ee4c00Smrg return new_value; 390585ee4c00Smrg} 3906692f60a7Smrg 390785ee4c00Smrgint 390885ee4c00Smrglt_split_name_value (const char *arg, char** name, char** value) 390985ee4c00Smrg{ 391085ee4c00Smrg const char *p; 391185ee4c00Smrg int len; 391285ee4c00Smrg if (!arg || !*arg) 391385ee4c00Smrg return 1; 3914692f60a7Smrg 391585ee4c00Smrg p = strchr (arg, (int)'='); 3916692f60a7Smrg 391785ee4c00Smrg if (!p) 391885ee4c00Smrg return 1; 3919692f60a7Smrg 392085ee4c00Smrg *value = xstrdup (++p); 3921692f60a7Smrg 392285ee4c00Smrg len = strlen (arg) - strlen (*value); 392385ee4c00Smrg *name = XMALLOC (char, len); 392485ee4c00Smrg strncpy (*name, arg, len-1); 392585ee4c00Smrg (*name)[len - 1] = '\0'; 3926692f60a7Smrg 392785ee4c00Smrg return 0; 392885ee4c00Smrg} 3929692f60a7Smrg 393085ee4c00Smrgvoid 393185ee4c00Smrglt_opt_process_env_set (const char *arg) 393285ee4c00Smrg{ 393385ee4c00Smrg char *name = NULL; 393485ee4c00Smrg char *value = NULL; 3935692f60a7Smrg 393685ee4c00Smrg if (lt_split_name_value (arg, &name, &value) != 0) 393785ee4c00Smrg { 393885ee4c00Smrg XFREE (name); 393985ee4c00Smrg XFREE (value); 394085ee4c00Smrg lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); 394185ee4c00Smrg } 3942692f60a7Smrg 394385ee4c00Smrg lt_setenv (name, value); 394485ee4c00Smrg XFREE (name); 394585ee4c00Smrg XFREE (value); 394685ee4c00Smrg} 3947692f60a7Smrg 394885ee4c00Smrgvoid 394985ee4c00Smrglt_opt_process_env_prepend (const char *arg) 395085ee4c00Smrg{ 395185ee4c00Smrg char *name = NULL; 395285ee4c00Smrg char *value = NULL; 395385ee4c00Smrg char *new_value = NULL; 3954692f60a7Smrg 395585ee4c00Smrg if (lt_split_name_value (arg, &name, &value) != 0) 395685ee4c00Smrg { 395785ee4c00Smrg XFREE (name); 395885ee4c00Smrg XFREE (value); 395985ee4c00Smrg lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); 396085ee4c00Smrg } 3961692f60a7Smrg 396285ee4c00Smrg new_value = lt_extend_str (getenv (name), value, 0); 396385ee4c00Smrg lt_setenv (name, new_value); 396485ee4c00Smrg XFREE (new_value); 396585ee4c00Smrg XFREE (name); 396685ee4c00Smrg XFREE (value); 396785ee4c00Smrg} 3968692f60a7Smrg 396985ee4c00Smrgvoid 397085ee4c00Smrglt_opt_process_env_append (const char *arg) 397185ee4c00Smrg{ 397285ee4c00Smrg char *name = NULL; 397385ee4c00Smrg char *value = NULL; 397485ee4c00Smrg char *new_value = NULL; 3975692f60a7Smrg 397685ee4c00Smrg if (lt_split_name_value (arg, &name, &value) != 0) 397785ee4c00Smrg { 397885ee4c00Smrg XFREE (name); 397985ee4c00Smrg XFREE (value); 398085ee4c00Smrg lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); 398185ee4c00Smrg } 3982692f60a7Smrg 398385ee4c00Smrg new_value = lt_extend_str (getenv (name), value, 1); 398485ee4c00Smrg lt_setenv (name, new_value); 398585ee4c00Smrg XFREE (new_value); 398685ee4c00Smrg XFREE (name); 398785ee4c00Smrg XFREE (value); 398885ee4c00Smrg} 3989692f60a7Smrg 399085ee4c00Smrgvoid 399185ee4c00Smrglt_update_exe_path (const char *name, const char *value) 399285ee4c00Smrg{ 399385ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 399485ee4c00Smrg (name ? name : "<NULL>"), 399585ee4c00Smrg (value ? value : "<NULL>"))); 3996692f60a7Smrg 399785ee4c00Smrg if (name && *name && value && *value) 399885ee4c00Smrg { 399985ee4c00Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 400085ee4c00Smrg /* some systems can't cope with a ':'-terminated path #' */ 400185ee4c00Smrg int len = strlen (new_value); 400285ee4c00Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 400385ee4c00Smrg { 400485ee4c00Smrg new_value[len-1] = '\0'; 400585ee4c00Smrg } 400685ee4c00Smrg lt_setenv (name, new_value); 400785ee4c00Smrg XFREE (new_value); 400885ee4c00Smrg } 400985ee4c00Smrg} 4010692f60a7Smrg 401185ee4c00Smrgvoid 401285ee4c00Smrglt_update_lib_path (const char *name, const char *value) 401385ee4c00Smrg{ 401485ee4c00Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 401585ee4c00Smrg (name ? name : "<NULL>"), 401685ee4c00Smrg (value ? value : "<NULL>"))); 4017692f60a7Smrg 401885ee4c00Smrg if (name && *name && value && *value) 401985ee4c00Smrg { 402085ee4c00Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 402185ee4c00Smrg lt_setenv (name, new_value); 402285ee4c00Smrg XFREE (new_value); 402385ee4c00Smrg } 402485ee4c00Smrg} 4025692f60a7Smrg 4026692f60a7Smrg 402785ee4c00SmrgEOF 402885ee4c00Smrg} 402985ee4c00Smrg# end: func_emit_cwrapperexe_src 4030692f60a7Smrg 403185ee4c00Smrg# func_mode_link arg... 403285ee4c00Smrgfunc_mode_link () 403385ee4c00Smrg{ 403485ee4c00Smrg $opt_debug 403585ee4c00Smrg case $host in 403685ee4c00Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 403785ee4c00Smrg # It is impossible to link a dll without this setting, and 403885ee4c00Smrg # we shouldn't force the makefile maintainer to figure out 403985ee4c00Smrg # which system we are compiling for in order to pass an extra 404085ee4c00Smrg # flag for every libtool invocation. 404185ee4c00Smrg # allow_undefined=no 4042692f60a7Smrg 404385ee4c00Smrg # FIXME: Unfortunately, there are problems with the above when trying 404485ee4c00Smrg # to make a dll which has undefined symbols, in which case not 404585ee4c00Smrg # even a static library is built. For now, we need to specify 404685ee4c00Smrg # -no-undefined on the libtool link line when we can be certain 404785ee4c00Smrg # that all symbols are satisfied, otherwise we get a static library. 404885ee4c00Smrg allow_undefined=yes 404985ee4c00Smrg ;; 405085ee4c00Smrg *) 405185ee4c00Smrg allow_undefined=yes 405285ee4c00Smrg ;; 405385ee4c00Smrg esac 405485ee4c00Smrg libtool_args=$nonopt 405585ee4c00Smrg base_compile="$nonopt $@" 405685ee4c00Smrg compile_command=$nonopt 405785ee4c00Smrg finalize_command=$nonopt 4058692f60a7Smrg 405985ee4c00Smrg compile_rpath= 406085ee4c00Smrg finalize_rpath= 406185ee4c00Smrg compile_shlibpath= 406285ee4c00Smrg finalize_shlibpath= 406385ee4c00Smrg convenience= 406485ee4c00Smrg old_convenience= 406585ee4c00Smrg deplibs= 406685ee4c00Smrg old_deplibs= 406785ee4c00Smrg compiler_flags= 406885ee4c00Smrg linker_flags= 406985ee4c00Smrg dllsearchpath= 407085ee4c00Smrg lib_search_path=`pwd` 407185ee4c00Smrg inst_prefix_dir= 407285ee4c00Smrg new_inherited_linker_flags= 4073692f60a7Smrg 407485ee4c00Smrg avoid_version=no 407585ee4c00Smrg dlfiles= 407685ee4c00Smrg dlprefiles= 407785ee4c00Smrg dlself=no 407885ee4c00Smrg export_dynamic=no 407985ee4c00Smrg export_symbols= 408085ee4c00Smrg export_symbols_regex= 408185ee4c00Smrg generated= 408285ee4c00Smrg libobjs= 408385ee4c00Smrg ltlibs= 408485ee4c00Smrg module=no 408585ee4c00Smrg no_install=no 408685ee4c00Smrg objs= 408785ee4c00Smrg non_pic_objects= 408885ee4c00Smrg precious_files_regex= 408985ee4c00Smrg prefer_static_libs=no 409085ee4c00Smrg preload=no 409185ee4c00Smrg prev= 409285ee4c00Smrg prevarg= 409385ee4c00Smrg release= 409485ee4c00Smrg rpath= 409585ee4c00Smrg xrpath= 409685ee4c00Smrg perm_rpath= 409785ee4c00Smrg temp_rpath= 409885ee4c00Smrg thread_safe=no 409985ee4c00Smrg vinfo= 410085ee4c00Smrg vinfo_number=no 410185ee4c00Smrg weak_libs= 410285ee4c00Smrg single_module="${wl}-single_module" 410385ee4c00Smrg func_infer_tag $base_compile 410485ee4c00Smrg 410585ee4c00Smrg # We need to know -static, to get the right output filenames. 410685ee4c00Smrg for arg 410785ee4c00Smrg do 410885ee4c00Smrg case $arg in 410985ee4c00Smrg -shared) 411085ee4c00Smrg test "$build_libtool_libs" != yes && \ 411185ee4c00Smrg func_fatal_configuration "can not build a shared library" 411285ee4c00Smrg build_old_libs=no 411385ee4c00Smrg break 411485ee4c00Smrg ;; 411585ee4c00Smrg -all-static | -static | -static-libtool-libs) 411685ee4c00Smrg case $arg in 411785ee4c00Smrg -all-static) 411885ee4c00Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 411985ee4c00Smrg func_warning "complete static linking is impossible in this configuration" 412085ee4c00Smrg fi 412185ee4c00Smrg if test -n "$link_static_flag"; then 412285ee4c00Smrg dlopen_self=$dlopen_self_static 412385ee4c00Smrg fi 412485ee4c00Smrg prefer_static_libs=yes 412585ee4c00Smrg ;; 412685ee4c00Smrg -static) 412785ee4c00Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 412885ee4c00Smrg dlopen_self=$dlopen_self_static 412985ee4c00Smrg fi 413085ee4c00Smrg prefer_static_libs=built 413185ee4c00Smrg ;; 413285ee4c00Smrg -static-libtool-libs) 413385ee4c00Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 413485ee4c00Smrg dlopen_self=$dlopen_self_static 4135692f60a7Smrg fi 413685ee4c00Smrg prefer_static_libs=yes 413785ee4c00Smrg ;; 413885ee4c00Smrg esac 413985ee4c00Smrg build_libtool_libs=no 414085ee4c00Smrg build_old_libs=yes 414185ee4c00Smrg break 414285ee4c00Smrg ;; 414385ee4c00Smrg esac 414485ee4c00Smrg done 4145692f60a7Smrg 414685ee4c00Smrg # See if our shared archives depend on static archives. 414785ee4c00Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 4148692f60a7Smrg 414985ee4c00Smrg # Go through the arguments, transforming them on the way. 415085ee4c00Smrg while test "$#" -gt 0; do 415185ee4c00Smrg arg="$1" 415285ee4c00Smrg shift 415385ee4c00Smrg func_quote_for_eval "$arg" 415485ee4c00Smrg qarg=$func_quote_for_eval_unquoted_result 415585ee4c00Smrg func_append libtool_args " $func_quote_for_eval_result" 4156692f60a7Smrg 415785ee4c00Smrg # If the previous option needs an argument, assign it. 415885ee4c00Smrg if test -n "$prev"; then 415985ee4c00Smrg case $prev in 416085ee4c00Smrg output) 416185ee4c00Smrg func_append compile_command " @OUTPUT@" 416285ee4c00Smrg func_append finalize_command " @OUTPUT@" 416385ee4c00Smrg ;; 416485ee4c00Smrg esac 4165692f60a7Smrg 416685ee4c00Smrg case $prev in 416785ee4c00Smrg dlfiles|dlprefiles) 416885ee4c00Smrg if test "$preload" = no; then 416985ee4c00Smrg # Add the symbol object into the linking commands. 417085ee4c00Smrg func_append compile_command " @SYMFILE@" 417185ee4c00Smrg func_append finalize_command " @SYMFILE@" 417285ee4c00Smrg preload=yes 417385ee4c00Smrg fi 417485ee4c00Smrg case $arg in 417585ee4c00Smrg *.la | *.lo) ;; # We handle these cases below. 417685ee4c00Smrg force) 417785ee4c00Smrg if test "$dlself" = no; then 417885ee4c00Smrg dlself=needless 417985ee4c00Smrg export_dynamic=yes 418085ee4c00Smrg fi 418185ee4c00Smrg prev= 418285ee4c00Smrg continue 418385ee4c00Smrg ;; 418485ee4c00Smrg self) 418585ee4c00Smrg if test "$prev" = dlprefiles; then 418685ee4c00Smrg dlself=yes 418785ee4c00Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 418885ee4c00Smrg dlself=yes 4189692f60a7Smrg else 419085ee4c00Smrg dlself=needless 419185ee4c00Smrg export_dynamic=yes 4192692f60a7Smrg fi 419385ee4c00Smrg prev= 419485ee4c00Smrg continue 419585ee4c00Smrg ;; 419685ee4c00Smrg *) 419785ee4c00Smrg if test "$prev" = dlfiles; then 419885ee4c00Smrg dlfiles="$dlfiles $arg" 4199692f60a7Smrg else 420085ee4c00Smrg dlprefiles="$dlprefiles $arg" 4201692f60a7Smrg fi 420285ee4c00Smrg prev= 420385ee4c00Smrg continue 420485ee4c00Smrg ;; 420585ee4c00Smrg esac 420685ee4c00Smrg ;; 420785ee4c00Smrg expsyms) 420885ee4c00Smrg export_symbols="$arg" 420985ee4c00Smrg test -f "$arg" \ 421085ee4c00Smrg || func_fatal_error "symbol file \`$arg' does not exist" 421185ee4c00Smrg prev= 421285ee4c00Smrg continue 421385ee4c00Smrg ;; 421485ee4c00Smrg expsyms_regex) 421585ee4c00Smrg export_symbols_regex="$arg" 421685ee4c00Smrg prev= 421785ee4c00Smrg continue 421885ee4c00Smrg ;; 421985ee4c00Smrg framework) 4220692f60a7Smrg case $host in 422185ee4c00Smrg *-*-darwin*) 422285ee4c00Smrg case "$deplibs " in 422385ee4c00Smrg *" $qarg.ltframework "*) ;; 422485ee4c00Smrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 422585ee4c00Smrg ;; 422685ee4c00Smrg esac 422785ee4c00Smrg ;; 4228692f60a7Smrg esac 422985ee4c00Smrg prev= 423085ee4c00Smrg continue 4231692f60a7Smrg ;; 423285ee4c00Smrg inst_prefix) 423385ee4c00Smrg inst_prefix_dir="$arg" 423485ee4c00Smrg prev= 423585ee4c00Smrg continue 4236692f60a7Smrg ;; 423785ee4c00Smrg objectlist) 423885ee4c00Smrg if test -f "$arg"; then 423985ee4c00Smrg save_arg=$arg 424085ee4c00Smrg moreargs= 424185ee4c00Smrg for fil in `cat "$save_arg"` 424285ee4c00Smrg do 424385ee4c00Smrg# moreargs="$moreargs $fil" 424485ee4c00Smrg arg=$fil 424585ee4c00Smrg # A libtool-controlled object. 4246692f60a7Smrg 424785ee4c00Smrg # Check to see that this really is a libtool object. 424885ee4c00Smrg if func_lalib_unsafe_p "$arg"; then 424985ee4c00Smrg pic_object= 425085ee4c00Smrg non_pic_object= 4251692f60a7Smrg 425285ee4c00Smrg # Read the .lo file 425385ee4c00Smrg func_source "$arg" 4254692f60a7Smrg 425585ee4c00Smrg if test -z "$pic_object" || 425685ee4c00Smrg test -z "$non_pic_object" || 425785ee4c00Smrg test "$pic_object" = none && 425885ee4c00Smrg test "$non_pic_object" = none; then 425985ee4c00Smrg func_fatal_error "cannot find name of object for \`$arg'" 426085ee4c00Smrg fi 4261692f60a7Smrg 426285ee4c00Smrg # Extract subdirectory from the argument. 426385ee4c00Smrg func_dirname "$arg" "/" "" 426485ee4c00Smrg xdir="$func_dirname_result" 4265692f60a7Smrg 426685ee4c00Smrg if test "$pic_object" != none; then 426785ee4c00Smrg # Prepend the subdirectory the object is found in. 426885ee4c00Smrg pic_object="$xdir$pic_object" 4269692f60a7Smrg 427085ee4c00Smrg if test "$prev" = dlfiles; then 427185ee4c00Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 427285ee4c00Smrg dlfiles="$dlfiles $pic_object" 427385ee4c00Smrg prev= 427485ee4c00Smrg continue 427585ee4c00Smrg else 427685ee4c00Smrg # If libtool objects are unsupported, then we need to preload. 427785ee4c00Smrg prev=dlprefiles 427885ee4c00Smrg fi 427985ee4c00Smrg fi 4280692f60a7Smrg 428185ee4c00Smrg # CHECK ME: I think I busted this. -Ossama 428285ee4c00Smrg if test "$prev" = dlprefiles; then 428385ee4c00Smrg # Preload the old-style object. 428485ee4c00Smrg dlprefiles="$dlprefiles $pic_object" 428585ee4c00Smrg prev= 428685ee4c00Smrg fi 4287692f60a7Smrg 428885ee4c00Smrg # A PIC object. 428985ee4c00Smrg func_append libobjs " $pic_object" 429085ee4c00Smrg arg="$pic_object" 429185ee4c00Smrg fi 4292692f60a7Smrg 429385ee4c00Smrg # Non-PIC object. 429485ee4c00Smrg if test "$non_pic_object" != none; then 429585ee4c00Smrg # Prepend the subdirectory the object is found in. 429685ee4c00Smrg non_pic_object="$xdir$non_pic_object" 4297692f60a7Smrg 429885ee4c00Smrg # A standard non-PIC object 429985ee4c00Smrg func_append non_pic_objects " $non_pic_object" 430085ee4c00Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 430185ee4c00Smrg arg="$non_pic_object" 430285ee4c00Smrg fi 430385ee4c00Smrg else 430485ee4c00Smrg # If the PIC object exists, use it instead. 430585ee4c00Smrg # $xdir was prepended to $pic_object above. 430685ee4c00Smrg non_pic_object="$pic_object" 430785ee4c00Smrg func_append non_pic_objects " $non_pic_object" 430885ee4c00Smrg fi 430985ee4c00Smrg else 431085ee4c00Smrg # Only an error if not doing a dry-run. 431185ee4c00Smrg if $opt_dry_run; then 431285ee4c00Smrg # Extract subdirectory from the argument. 431385ee4c00Smrg func_dirname "$arg" "/" "" 431485ee4c00Smrg xdir="$func_dirname_result" 431585ee4c00Smrg 431685ee4c00Smrg func_lo2o "$arg" 431785ee4c00Smrg pic_object=$xdir$objdir/$func_lo2o_result 431885ee4c00Smrg non_pic_object=$xdir$func_lo2o_result 431985ee4c00Smrg func_append libobjs " $pic_object" 432085ee4c00Smrg func_append non_pic_objects " $non_pic_object" 432185ee4c00Smrg else 432285ee4c00Smrg func_fatal_error "\`$arg' is not a valid libtool object" 432385ee4c00Smrg fi 432485ee4c00Smrg fi 432585ee4c00Smrg done 4326692f60a7Smrg else 432785ee4c00Smrg func_fatal_error "link input file \`$arg' does not exist" 4328692f60a7Smrg fi 432985ee4c00Smrg arg=$save_arg 433085ee4c00Smrg prev= 433185ee4c00Smrg continue 433285ee4c00Smrg ;; 433385ee4c00Smrg precious_regex) 433485ee4c00Smrg precious_files_regex="$arg" 433585ee4c00Smrg prev= 433685ee4c00Smrg continue 433785ee4c00Smrg ;; 433885ee4c00Smrg release) 433985ee4c00Smrg release="-$arg" 434085ee4c00Smrg prev= 434185ee4c00Smrg continue 434285ee4c00Smrg ;; 434385ee4c00Smrg rpath | xrpath) 434485ee4c00Smrg # We need an absolute path. 434585ee4c00Smrg case $arg in 434685ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 434785ee4c00Smrg *) 434885ee4c00Smrg func_fatal_error "only absolute run-paths are allowed" 434985ee4c00Smrg ;; 435085ee4c00Smrg esac 435185ee4c00Smrg if test "$prev" = rpath; then 435285ee4c00Smrg case "$rpath " in 435385ee4c00Smrg *" $arg "*) ;; 435485ee4c00Smrg *) rpath="$rpath $arg" ;; 435585ee4c00Smrg esac 4356692f60a7Smrg else 435785ee4c00Smrg case "$xrpath " in 435885ee4c00Smrg *" $arg "*) ;; 435985ee4c00Smrg *) xrpath="$xrpath $arg" ;; 436085ee4c00Smrg esac 4361692f60a7Smrg fi 436285ee4c00Smrg prev= 436385ee4c00Smrg continue 436485ee4c00Smrg ;; 436585ee4c00Smrg shrext) 436685ee4c00Smrg shrext_cmds="$arg" 436785ee4c00Smrg prev= 436885ee4c00Smrg continue 436985ee4c00Smrg ;; 437085ee4c00Smrg weak) 437185ee4c00Smrg weak_libs="$weak_libs $arg" 437285ee4c00Smrg prev= 437385ee4c00Smrg continue 437485ee4c00Smrg ;; 437585ee4c00Smrg xcclinker) 437685ee4c00Smrg linker_flags="$linker_flags $qarg" 437785ee4c00Smrg compiler_flags="$compiler_flags $qarg" 437885ee4c00Smrg prev= 437985ee4c00Smrg func_append compile_command " $qarg" 438085ee4c00Smrg func_append finalize_command " $qarg" 438185ee4c00Smrg continue 438285ee4c00Smrg ;; 438385ee4c00Smrg xcompiler) 438485ee4c00Smrg compiler_flags="$compiler_flags $qarg" 438585ee4c00Smrg prev= 438685ee4c00Smrg func_append compile_command " $qarg" 438785ee4c00Smrg func_append finalize_command " $qarg" 438885ee4c00Smrg continue 438985ee4c00Smrg ;; 439085ee4c00Smrg xlinker) 439185ee4c00Smrg linker_flags="$linker_flags $qarg" 439285ee4c00Smrg compiler_flags="$compiler_flags $wl$qarg" 439385ee4c00Smrg prev= 439485ee4c00Smrg func_append compile_command " $wl$qarg" 439585ee4c00Smrg func_append finalize_command " $wl$qarg" 439685ee4c00Smrg continue 439785ee4c00Smrg ;; 439885ee4c00Smrg *) 439985ee4c00Smrg eval "$prev=\"\$arg\"" 440085ee4c00Smrg prev= 440185ee4c00Smrg continue 440285ee4c00Smrg ;; 4403692f60a7Smrg esac 440485ee4c00Smrg fi # test -n "$prev" 4405692f60a7Smrg 440685ee4c00Smrg prevarg="$arg" 4407692f60a7Smrg 440885ee4c00Smrg case $arg in 440985ee4c00Smrg -all-static) 441085ee4c00Smrg if test -n "$link_static_flag"; then 441185ee4c00Smrg # See comment for -static flag below, for more details. 441285ee4c00Smrg func_append compile_command " $link_static_flag" 441385ee4c00Smrg func_append finalize_command " $link_static_flag" 441485ee4c00Smrg fi 441585ee4c00Smrg continue 441685ee4c00Smrg ;; 4417692f60a7Smrg 441885ee4c00Smrg -allow-undefined) 441985ee4c00Smrg # FIXME: remove this flag sometime in the future. 442085ee4c00Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 442185ee4c00Smrg ;; 4422692f60a7Smrg 442385ee4c00Smrg -avoid-version) 442485ee4c00Smrg avoid_version=yes 442585ee4c00Smrg continue 442685ee4c00Smrg ;; 4427692f60a7Smrg 442885ee4c00Smrg -dlopen) 442985ee4c00Smrg prev=dlfiles 443085ee4c00Smrg continue 443185ee4c00Smrg ;; 4432692f60a7Smrg 443385ee4c00Smrg -dlpreopen) 443485ee4c00Smrg prev=dlprefiles 443585ee4c00Smrg continue 443685ee4c00Smrg ;; 4437692f60a7Smrg 443885ee4c00Smrg -export-dynamic) 443985ee4c00Smrg export_dynamic=yes 444085ee4c00Smrg continue 444185ee4c00Smrg ;; 4442692f60a7Smrg 444385ee4c00Smrg -export-symbols | -export-symbols-regex) 444485ee4c00Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 444585ee4c00Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 444685ee4c00Smrg fi 444785ee4c00Smrg if test "X$arg" = "X-export-symbols"; then 444885ee4c00Smrg prev=expsyms 444985ee4c00Smrg else 445085ee4c00Smrg prev=expsyms_regex 445185ee4c00Smrg fi 445285ee4c00Smrg continue 445385ee4c00Smrg ;; 4454692f60a7Smrg 445585ee4c00Smrg -framework) 445685ee4c00Smrg prev=framework 445785ee4c00Smrg continue 445885ee4c00Smrg ;; 4459692f60a7Smrg 446085ee4c00Smrg -inst-prefix-dir) 446185ee4c00Smrg prev=inst_prefix 446285ee4c00Smrg continue 446385ee4c00Smrg ;; 4464692f60a7Smrg 446585ee4c00Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 446685ee4c00Smrg # so, if we see these flags be careful not to treat them like -L 446785ee4c00Smrg -L[A-Z][A-Z]*:*) 446885ee4c00Smrg case $with_gcc/$host in 446985ee4c00Smrg no/*-*-irix* | /*-*-irix*) 447085ee4c00Smrg func_append compile_command " $arg" 447185ee4c00Smrg func_append finalize_command " $arg" 447285ee4c00Smrg ;; 447385ee4c00Smrg esac 447485ee4c00Smrg continue 447585ee4c00Smrg ;; 4476692f60a7Smrg 447785ee4c00Smrg -L*) 447885ee4c00Smrg func_stripname '-L' '' "$arg" 447985ee4c00Smrg dir=$func_stripname_result 448085ee4c00Smrg if test -z "$dir"; then 448185ee4c00Smrg if test "$#" -gt 0; then 448285ee4c00Smrg func_fatal_error "require no space between \`-L' and \`$1'" 448385ee4c00Smrg else 448485ee4c00Smrg func_fatal_error "need path for \`-L' option" 448585ee4c00Smrg fi 448685ee4c00Smrg fi 448785ee4c00Smrg # We need an absolute path. 448885ee4c00Smrg case $dir in 448985ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 449085ee4c00Smrg *) 449185ee4c00Smrg absdir=`cd "$dir" && pwd` 449285ee4c00Smrg test -z "$absdir" && \ 449385ee4c00Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 449485ee4c00Smrg dir="$absdir" 449585ee4c00Smrg ;; 449685ee4c00Smrg esac 449785ee4c00Smrg case "$deplibs " in 449885ee4c00Smrg *" -L$dir "*) ;; 449985ee4c00Smrg *) 450085ee4c00Smrg deplibs="$deplibs -L$dir" 450185ee4c00Smrg lib_search_path="$lib_search_path $dir" 450285ee4c00Smrg ;; 450385ee4c00Smrg esac 450485ee4c00Smrg case $host in 450585ee4c00Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 450685ee4c00Smrg testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` 450785ee4c00Smrg case :$dllsearchpath: in 450885ee4c00Smrg *":$dir:"*) ;; 450985ee4c00Smrg ::) dllsearchpath=$dir;; 451085ee4c00Smrg *) dllsearchpath="$dllsearchpath:$dir";; 451185ee4c00Smrg esac 451285ee4c00Smrg case :$dllsearchpath: in 451385ee4c00Smrg *":$testbindir:"*) ;; 451485ee4c00Smrg ::) dllsearchpath=$testbindir;; 451585ee4c00Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 451685ee4c00Smrg esac 451785ee4c00Smrg ;; 451885ee4c00Smrg esac 451985ee4c00Smrg continue 452085ee4c00Smrg ;; 4521692f60a7Smrg 452285ee4c00Smrg -l*) 452385ee4c00Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 452485ee4c00Smrg case $host in 452585ee4c00Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) 452685ee4c00Smrg # These systems don't actually have a C or math library (as such) 452785ee4c00Smrg continue 452885ee4c00Smrg ;; 452985ee4c00Smrg *-*-os2*) 453085ee4c00Smrg # These systems don't actually have a C library (as such) 453185ee4c00Smrg test "X$arg" = "X-lc" && continue 453285ee4c00Smrg ;; 453385ee4c00Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 453485ee4c00Smrg # Do not include libc due to us having libc/libc_r. 453585ee4c00Smrg test "X$arg" = "X-lc" && continue 453685ee4c00Smrg ;; 453785ee4c00Smrg *-*-rhapsody* | *-*-darwin1.[012]) 453885ee4c00Smrg # Rhapsody C and math libraries are in the System framework 453985ee4c00Smrg deplibs="$deplibs System.ltframework" 454085ee4c00Smrg continue 454185ee4c00Smrg ;; 454285ee4c00Smrg *-*-sco3.2v5* | *-*-sco5v6*) 454385ee4c00Smrg # Causes problems with __ctype 454485ee4c00Smrg test "X$arg" = "X-lc" && continue 454585ee4c00Smrg ;; 454685ee4c00Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 454785ee4c00Smrg # Compiler inserts libc in the correct place for threads to work 454885ee4c00Smrg test "X$arg" = "X-lc" && continue 454985ee4c00Smrg ;; 455085ee4c00Smrg esac 455185ee4c00Smrg elif test "X$arg" = "X-lc_r"; then 455285ee4c00Smrg case $host in 455385ee4c00Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 455485ee4c00Smrg # Do not include libc_r directly, use -pthread flag. 455585ee4c00Smrg continue 455685ee4c00Smrg ;; 455785ee4c00Smrg esac 455885ee4c00Smrg fi 455985ee4c00Smrg deplibs="$deplibs $arg" 456085ee4c00Smrg continue 456185ee4c00Smrg ;; 4562692f60a7Smrg 456385ee4c00Smrg -module) 456485ee4c00Smrg module=yes 456585ee4c00Smrg continue 456685ee4c00Smrg ;; 4567692f60a7Smrg 456885ee4c00Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 456985ee4c00Smrg # classes, name mangling, and exception handling. 457085ee4c00Smrg # Darwin uses the -arch flag to determine output architecture. 457185ee4c00Smrg -model|-arch|-isysroot) 457285ee4c00Smrg compiler_flags="$compiler_flags $arg" 457385ee4c00Smrg func_append compile_command " $arg" 457485ee4c00Smrg func_append finalize_command " $arg" 457585ee4c00Smrg prev=xcompiler 457685ee4c00Smrg continue 457785ee4c00Smrg ;; 4578692f60a7Smrg 457985ee4c00Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 458085ee4c00Smrg compiler_flags="$compiler_flags $arg" 458185ee4c00Smrg func_append compile_command " $arg" 458285ee4c00Smrg func_append finalize_command " $arg" 458385ee4c00Smrg case "$new_inherited_linker_flags " in 458485ee4c00Smrg *" $arg "*) ;; 458585ee4c00Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 458685ee4c00Smrg esac 458785ee4c00Smrg continue 458885ee4c00Smrg ;; 4589692f60a7Smrg 459085ee4c00Smrg -multi_module) 459185ee4c00Smrg single_module="${wl}-multi_module" 459285ee4c00Smrg continue 459385ee4c00Smrg ;; 4594692f60a7Smrg 459585ee4c00Smrg -no-fast-install) 459685ee4c00Smrg fast_install=no 459785ee4c00Smrg continue 459885ee4c00Smrg ;; 4599692f60a7Smrg 460085ee4c00Smrg -no-install) 460185ee4c00Smrg case $host in 460285ee4c00Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 460385ee4c00Smrg # The PATH hackery in wrapper scripts is required on Windows 460485ee4c00Smrg # and Darwin in order for the loader to find any dlls it needs. 460585ee4c00Smrg func_warning "\`-no-install' is ignored for $host" 460685ee4c00Smrg func_warning "assuming \`-no-fast-install' instead" 460785ee4c00Smrg fast_install=no 460885ee4c00Smrg ;; 460985ee4c00Smrg *) no_install=yes ;; 461085ee4c00Smrg esac 461185ee4c00Smrg continue 461285ee4c00Smrg ;; 4613692f60a7Smrg 461485ee4c00Smrg -no-undefined) 461585ee4c00Smrg allow_undefined=no 461685ee4c00Smrg continue 461785ee4c00Smrg ;; 4618692f60a7Smrg 461985ee4c00Smrg -objectlist) 462085ee4c00Smrg prev=objectlist 462185ee4c00Smrg continue 462285ee4c00Smrg ;; 4623692f60a7Smrg 462485ee4c00Smrg -o) prev=output ;; 4625692f60a7Smrg 462685ee4c00Smrg -precious-files-regex) 462785ee4c00Smrg prev=precious_regex 462885ee4c00Smrg continue 462985ee4c00Smrg ;; 4630692f60a7Smrg 463185ee4c00Smrg -release) 463285ee4c00Smrg prev=release 463385ee4c00Smrg continue 463485ee4c00Smrg ;; 4635692f60a7Smrg 463685ee4c00Smrg -rpath) 463785ee4c00Smrg prev=rpath 463885ee4c00Smrg continue 463985ee4c00Smrg ;; 4640692f60a7Smrg 464185ee4c00Smrg -R) 464285ee4c00Smrg prev=xrpath 464385ee4c00Smrg continue 464485ee4c00Smrg ;; 4645692f60a7Smrg 464685ee4c00Smrg -R*) 464785ee4c00Smrg func_stripname '-R' '' "$arg" 464885ee4c00Smrg dir=$func_stripname_result 464985ee4c00Smrg # We need an absolute path. 465085ee4c00Smrg case $dir in 465185ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 465285ee4c00Smrg *) 465385ee4c00Smrg func_fatal_error "only absolute run-paths are allowed" 465485ee4c00Smrg ;; 465585ee4c00Smrg esac 465685ee4c00Smrg case "$xrpath " in 465785ee4c00Smrg *" $dir "*) ;; 465885ee4c00Smrg *) xrpath="$xrpath $dir" ;; 465985ee4c00Smrg esac 466085ee4c00Smrg continue 466185ee4c00Smrg ;; 4662692f60a7Smrg 466385ee4c00Smrg -shared) 466485ee4c00Smrg # The effects of -shared are defined in a previous loop. 466585ee4c00Smrg continue 466685ee4c00Smrg ;; 4667692f60a7Smrg 466885ee4c00Smrg -shrext) 466985ee4c00Smrg prev=shrext 467085ee4c00Smrg continue 467185ee4c00Smrg ;; 4672692f60a7Smrg 467385ee4c00Smrg -static | -static-libtool-libs) 467485ee4c00Smrg # The effects of -static are defined in a previous loop. 467585ee4c00Smrg # We used to do the same as -all-static on platforms that 467685ee4c00Smrg # didn't have a PIC flag, but the assumption that the effects 467785ee4c00Smrg # would be equivalent was wrong. It would break on at least 467885ee4c00Smrg # Digital Unix and AIX. 467985ee4c00Smrg continue 468085ee4c00Smrg ;; 4681692f60a7Smrg 468285ee4c00Smrg -thread-safe) 468385ee4c00Smrg thread_safe=yes 468485ee4c00Smrg continue 468585ee4c00Smrg ;; 4686692f60a7Smrg 468785ee4c00Smrg -version-info) 468885ee4c00Smrg prev=vinfo 468985ee4c00Smrg continue 469085ee4c00Smrg ;; 4691692f60a7Smrg 469285ee4c00Smrg -version-number) 469385ee4c00Smrg prev=vinfo 469485ee4c00Smrg vinfo_number=yes 469585ee4c00Smrg continue 469685ee4c00Smrg ;; 4697692f60a7Smrg 469885ee4c00Smrg -weak) 469985ee4c00Smrg prev=weak 470085ee4c00Smrg continue 470185ee4c00Smrg ;; 4702692f60a7Smrg 470385ee4c00Smrg -Wc,*) 470485ee4c00Smrg func_stripname '-Wc,' '' "$arg" 470585ee4c00Smrg args=$func_stripname_result 470685ee4c00Smrg arg= 470785ee4c00Smrg save_ifs="$IFS"; IFS=',' 470885ee4c00Smrg for flag in $args; do 470985ee4c00Smrg IFS="$save_ifs" 471085ee4c00Smrg func_quote_for_eval "$flag" 471185ee4c00Smrg arg="$arg $wl$func_quote_for_eval_result" 471285ee4c00Smrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 471385ee4c00Smrg done 471485ee4c00Smrg IFS="$save_ifs" 471585ee4c00Smrg func_stripname ' ' '' "$arg" 471685ee4c00Smrg arg=$func_stripname_result 471785ee4c00Smrg ;; 4718692f60a7Smrg 471985ee4c00Smrg -Wl,*) 472085ee4c00Smrg func_stripname '-Wl,' '' "$arg" 472185ee4c00Smrg args=$func_stripname_result 472285ee4c00Smrg arg= 472385ee4c00Smrg save_ifs="$IFS"; IFS=',' 472485ee4c00Smrg for flag in $args; do 472585ee4c00Smrg IFS="$save_ifs" 472685ee4c00Smrg func_quote_for_eval "$flag" 472785ee4c00Smrg arg="$arg $wl$func_quote_for_eval_result" 472885ee4c00Smrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 472985ee4c00Smrg linker_flags="$linker_flags $func_quote_for_eval_result" 473085ee4c00Smrg done 473185ee4c00Smrg IFS="$save_ifs" 473285ee4c00Smrg func_stripname ' ' '' "$arg" 473385ee4c00Smrg arg=$func_stripname_result 473485ee4c00Smrg ;; 4735692f60a7Smrg 473685ee4c00Smrg -Xcompiler) 473785ee4c00Smrg prev=xcompiler 473885ee4c00Smrg continue 473985ee4c00Smrg ;; 4740692f60a7Smrg 474185ee4c00Smrg -Xlinker) 474285ee4c00Smrg prev=xlinker 474385ee4c00Smrg continue 474485ee4c00Smrg ;; 4745692f60a7Smrg 474685ee4c00Smrg -XCClinker) 474785ee4c00Smrg prev=xcclinker 474885ee4c00Smrg continue 474985ee4c00Smrg ;; 4750692f60a7Smrg 475185ee4c00Smrg # -msg_* for osf cc 475285ee4c00Smrg -msg_*) 475385ee4c00Smrg func_quote_for_eval "$arg" 475485ee4c00Smrg arg="$func_quote_for_eval_result" 475585ee4c00Smrg ;; 4756692f60a7Smrg 475785ee4c00Smrg # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 475885ee4c00Smrg # -r[0-9][0-9]* specifies the processor on the SGI compiler 475985ee4c00Smrg # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 476085ee4c00Smrg # +DA*, +DD* enable 64-bit mode on the HP compiler 476185ee4c00Smrg # -q* pass through compiler args for the IBM compiler 476285ee4c00Smrg # -m*, -t[45]*, -txscale* pass through architecture-specific 476385ee4c00Smrg # compiler args for GCC 476485ee4c00Smrg # -F/path gives path to uninstalled frameworks, gcc on darwin 476585ee4c00Smrg # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 476685ee4c00Smrg # @file GCC response files 476785ee4c00Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 476885ee4c00Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 476985ee4c00Smrg func_quote_for_eval "$arg" 477085ee4c00Smrg arg="$func_quote_for_eval_result" 477185ee4c00Smrg func_append compile_command " $arg" 477285ee4c00Smrg func_append finalize_command " $arg" 477385ee4c00Smrg compiler_flags="$compiler_flags $arg" 477485ee4c00Smrg continue 477585ee4c00Smrg ;; 4776692f60a7Smrg 477785ee4c00Smrg # Some other compiler flag. 477885ee4c00Smrg -* | +*) 477985ee4c00Smrg func_quote_for_eval "$arg" 478085ee4c00Smrg arg="$func_quote_for_eval_result" 478185ee4c00Smrg ;; 4782692f60a7Smrg 478385ee4c00Smrg *.$objext) 478485ee4c00Smrg # A standard object. 478585ee4c00Smrg objs="$objs $arg" 478685ee4c00Smrg ;; 4787692f60a7Smrg 478885ee4c00Smrg *.lo) 478985ee4c00Smrg # A libtool-controlled object. 4790692f60a7Smrg 479185ee4c00Smrg # Check to see that this really is a libtool object. 479285ee4c00Smrg if func_lalib_unsafe_p "$arg"; then 479385ee4c00Smrg pic_object= 479485ee4c00Smrg non_pic_object= 4795692f60a7Smrg 479685ee4c00Smrg # Read the .lo file 479785ee4c00Smrg func_source "$arg" 4798692f60a7Smrg 479985ee4c00Smrg if test -z "$pic_object" || 480085ee4c00Smrg test -z "$non_pic_object" || 480185ee4c00Smrg test "$pic_object" = none && 480285ee4c00Smrg test "$non_pic_object" = none; then 480385ee4c00Smrg func_fatal_error "cannot find name of object for \`$arg'" 480485ee4c00Smrg fi 4805692f60a7Smrg 480685ee4c00Smrg # Extract subdirectory from the argument. 480785ee4c00Smrg func_dirname "$arg" "/" "" 480885ee4c00Smrg xdir="$func_dirname_result" 480954569438Smrg 481085ee4c00Smrg if test "$pic_object" != none; then 481185ee4c00Smrg # Prepend the subdirectory the object is found in. 481285ee4c00Smrg pic_object="$xdir$pic_object" 4813692f60a7Smrg 481485ee4c00Smrg if test "$prev" = dlfiles; then 481585ee4c00Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 481685ee4c00Smrg dlfiles="$dlfiles $pic_object" 481785ee4c00Smrg prev= 481885ee4c00Smrg continue 481985ee4c00Smrg else 482085ee4c00Smrg # If libtool objects are unsupported, then we need to preload. 482185ee4c00Smrg prev=dlprefiles 482285ee4c00Smrg fi 482385ee4c00Smrg fi 4824692f60a7Smrg 482585ee4c00Smrg # CHECK ME: I think I busted this. -Ossama 482685ee4c00Smrg if test "$prev" = dlprefiles; then 482785ee4c00Smrg # Preload the old-style object. 482885ee4c00Smrg dlprefiles="$dlprefiles $pic_object" 482985ee4c00Smrg prev= 483085ee4c00Smrg fi 4831692f60a7Smrg 483285ee4c00Smrg # A PIC object. 483385ee4c00Smrg func_append libobjs " $pic_object" 483485ee4c00Smrg arg="$pic_object" 483585ee4c00Smrg fi 4836692f60a7Smrg 483785ee4c00Smrg # Non-PIC object. 483885ee4c00Smrg if test "$non_pic_object" != none; then 483985ee4c00Smrg # Prepend the subdirectory the object is found in. 484085ee4c00Smrg non_pic_object="$xdir$non_pic_object" 4841692f60a7Smrg 484285ee4c00Smrg # A standard non-PIC object 484385ee4c00Smrg func_append non_pic_objects " $non_pic_object" 484485ee4c00Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 484585ee4c00Smrg arg="$non_pic_object" 484685ee4c00Smrg fi 484785ee4c00Smrg else 484885ee4c00Smrg # If the PIC object exists, use it instead. 484985ee4c00Smrg # $xdir was prepended to $pic_object above. 485085ee4c00Smrg non_pic_object="$pic_object" 485185ee4c00Smrg func_append non_pic_objects " $non_pic_object" 485285ee4c00Smrg fi 485385ee4c00Smrg else 485485ee4c00Smrg # Only an error if not doing a dry-run. 485585ee4c00Smrg if $opt_dry_run; then 485685ee4c00Smrg # Extract subdirectory from the argument. 485785ee4c00Smrg func_dirname "$arg" "/" "" 485885ee4c00Smrg xdir="$func_dirname_result" 485985ee4c00Smrg 486085ee4c00Smrg func_lo2o "$arg" 486185ee4c00Smrg pic_object=$xdir$objdir/$func_lo2o_result 486285ee4c00Smrg non_pic_object=$xdir$func_lo2o_result 486385ee4c00Smrg func_append libobjs " $pic_object" 486485ee4c00Smrg func_append non_pic_objects " $non_pic_object" 486585ee4c00Smrg else 486685ee4c00Smrg func_fatal_error "\`$arg' is not a valid libtool object" 486785ee4c00Smrg fi 486885ee4c00Smrg fi 486985ee4c00Smrg ;; 4870692f60a7Smrg 487185ee4c00Smrg *.$libext) 487285ee4c00Smrg # An archive. 487385ee4c00Smrg deplibs="$deplibs $arg" 487485ee4c00Smrg old_deplibs="$old_deplibs $arg" 487585ee4c00Smrg continue 487685ee4c00Smrg ;; 487785ee4c00Smrg 487885ee4c00Smrg *.la) 487985ee4c00Smrg # A libtool-controlled library. 488085ee4c00Smrg 488185ee4c00Smrg if test "$prev" = dlfiles; then 488285ee4c00Smrg # This library was specified with -dlopen. 488385ee4c00Smrg dlfiles="$dlfiles $arg" 488485ee4c00Smrg prev= 488585ee4c00Smrg elif test "$prev" = dlprefiles; then 488685ee4c00Smrg # The library was specified with -dlpreopen. 488785ee4c00Smrg dlprefiles="$dlprefiles $arg" 488885ee4c00Smrg prev= 488985ee4c00Smrg else 489085ee4c00Smrg deplibs="$deplibs $arg" 489185ee4c00Smrg fi 489285ee4c00Smrg continue 489385ee4c00Smrg ;; 489485ee4c00Smrg 489585ee4c00Smrg # Some other compiler argument. 489685ee4c00Smrg *) 489785ee4c00Smrg # Unknown arguments in both finalize_command and compile_command need 489885ee4c00Smrg # to be aesthetically quoted because they are evaled later. 489985ee4c00Smrg func_quote_for_eval "$arg" 490085ee4c00Smrg arg="$func_quote_for_eval_result" 490185ee4c00Smrg ;; 490285ee4c00Smrg esac # arg 490385ee4c00Smrg 490485ee4c00Smrg # Now actually substitute the argument into the commands. 490585ee4c00Smrg if test -n "$arg"; then 490685ee4c00Smrg func_append compile_command " $arg" 490785ee4c00Smrg func_append finalize_command " $arg" 490885ee4c00Smrg fi 490985ee4c00Smrg done # argument parsing loop 491085ee4c00Smrg 491185ee4c00Smrg test -n "$prev" && \ 491285ee4c00Smrg func_fatal_help "the \`$prevarg' option requires an argument" 491385ee4c00Smrg 491485ee4c00Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 491585ee4c00Smrg eval arg=\"$export_dynamic_flag_spec\" 491685ee4c00Smrg func_append compile_command " $arg" 491785ee4c00Smrg func_append finalize_command " $arg" 491885ee4c00Smrg fi 491985ee4c00Smrg 492085ee4c00Smrg oldlibs= 492185ee4c00Smrg # calculate the name of the file, without its directory 492285ee4c00Smrg func_basename "$output" 492385ee4c00Smrg outputname="$func_basename_result" 492485ee4c00Smrg libobjs_save="$libobjs" 492585ee4c00Smrg 492685ee4c00Smrg if test -n "$shlibpath_var"; then 492785ee4c00Smrg # get the directories listed in $shlibpath_var 492885ee4c00Smrg eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 492985ee4c00Smrg else 493085ee4c00Smrg shlib_search_path= 493185ee4c00Smrg fi 493285ee4c00Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 493385ee4c00Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 493485ee4c00Smrg 493585ee4c00Smrg func_dirname "$output" "/" "" 493685ee4c00Smrg output_objdir="$func_dirname_result$objdir" 493785ee4c00Smrg # Create the object directory. 493885ee4c00Smrg func_mkdir_p "$output_objdir" 493985ee4c00Smrg 494085ee4c00Smrg # Determine the type of output 494185ee4c00Smrg case $output in 494285ee4c00Smrg "") 494385ee4c00Smrg func_fatal_help "you must specify an output file" 494485ee4c00Smrg ;; 494585ee4c00Smrg *.$libext) linkmode=oldlib ;; 494685ee4c00Smrg *.lo | *.$objext) linkmode=obj ;; 494785ee4c00Smrg *.la) linkmode=lib ;; 494885ee4c00Smrg *) linkmode=prog ;; # Anything else should be a program. 494985ee4c00Smrg esac 495085ee4c00Smrg 495185ee4c00Smrg specialdeplibs= 495285ee4c00Smrg 495385ee4c00Smrg libs= 495485ee4c00Smrg # Find all interdependent deplibs by searching for libraries 495585ee4c00Smrg # that are linked more than once (e.g. -la -lb -la) 495685ee4c00Smrg for deplib in $deplibs; do 495785ee4c00Smrg if $opt_duplicate_deps ; then 495885ee4c00Smrg case "$libs " in 495985ee4c00Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 496085ee4c00Smrg esac 496185ee4c00Smrg fi 496285ee4c00Smrg libs="$libs $deplib" 496385ee4c00Smrg done 496485ee4c00Smrg 496585ee4c00Smrg if test "$linkmode" = lib; then 496685ee4c00Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 496785ee4c00Smrg 496885ee4c00Smrg # Compute libraries that are listed more than once in $predeps 496985ee4c00Smrg # $postdeps and mark them as special (i.e., whose duplicates are 497085ee4c00Smrg # not to be eliminated). 497185ee4c00Smrg pre_post_deps= 497285ee4c00Smrg if $opt_duplicate_compiler_generated_deps; then 497385ee4c00Smrg for pre_post_dep in $predeps $postdeps; do 497485ee4c00Smrg case "$pre_post_deps " in 497585ee4c00Smrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 497685ee4c00Smrg esac 497785ee4c00Smrg pre_post_deps="$pre_post_deps $pre_post_dep" 497885ee4c00Smrg done 497985ee4c00Smrg fi 498085ee4c00Smrg pre_post_deps= 498185ee4c00Smrg fi 498285ee4c00Smrg 498385ee4c00Smrg deplibs= 498485ee4c00Smrg newdependency_libs= 498585ee4c00Smrg newlib_search_path= 498685ee4c00Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 498785ee4c00Smrg notinst_deplibs= # not-installed libtool libraries 498885ee4c00Smrg notinst_path= # paths that contain not-installed libtool libraries 498985ee4c00Smrg 499085ee4c00Smrg case $linkmode in 499185ee4c00Smrg lib) 499285ee4c00Smrg passes="conv dlpreopen link" 499385ee4c00Smrg for file in $dlfiles $dlprefiles; do 499485ee4c00Smrg case $file in 499585ee4c00Smrg *.la) ;; 499685ee4c00Smrg *) 499785ee4c00Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 499885ee4c00Smrg ;; 499985ee4c00Smrg esac 500085ee4c00Smrg done 500185ee4c00Smrg ;; 500285ee4c00Smrg prog) 500385ee4c00Smrg compile_deplibs= 500485ee4c00Smrg finalize_deplibs= 500585ee4c00Smrg alldeplibs=no 500685ee4c00Smrg newdlfiles= 500785ee4c00Smrg newdlprefiles= 500885ee4c00Smrg passes="conv scan dlopen dlpreopen link" 500985ee4c00Smrg ;; 501085ee4c00Smrg *) passes="conv" 501185ee4c00Smrg ;; 501285ee4c00Smrg esac 501385ee4c00Smrg 501485ee4c00Smrg for pass in $passes; do 501585ee4c00Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 501685ee4c00Smrg # so that -L comes before libs that need it for instance... 501785ee4c00Smrg if test "$linkmode,$pass" = "lib,link"; then 501885ee4c00Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 501985ee4c00Smrg ## order, and fix it there properly 502085ee4c00Smrg tmp_deplibs= 502185ee4c00Smrg for deplib in $deplibs; do 502285ee4c00Smrg tmp_deplibs="$deplib $tmp_deplibs" 502385ee4c00Smrg done 502485ee4c00Smrg deplibs="$tmp_deplibs" 502585ee4c00Smrg fi 502685ee4c00Smrg 502785ee4c00Smrg if test "$linkmode,$pass" = "lib,link" || 502885ee4c00Smrg test "$linkmode,$pass" = "prog,scan"; then 502985ee4c00Smrg libs="$deplibs" 503085ee4c00Smrg deplibs= 503185ee4c00Smrg fi 503285ee4c00Smrg if test "$linkmode" = prog; then 503385ee4c00Smrg case $pass in 503485ee4c00Smrg dlopen) libs="$dlfiles" ;; 503585ee4c00Smrg dlpreopen) libs="$dlprefiles" ;; 503685ee4c00Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 503785ee4c00Smrg esac 503885ee4c00Smrg fi 503985ee4c00Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 504085ee4c00Smrg # Collect and forward deplibs of preopened libtool libs 504185ee4c00Smrg for lib in $dlprefiles; do 504285ee4c00Smrg # Ignore non-libtool-libs 504385ee4c00Smrg dependency_libs= 504485ee4c00Smrg case $lib in 504585ee4c00Smrg *.la) func_source "$lib" ;; 504685ee4c00Smrg esac 504785ee4c00Smrg 504885ee4c00Smrg # Collect preopened libtool deplibs, except any this library 504985ee4c00Smrg # has declared as weak libs 505085ee4c00Smrg for deplib in $dependency_libs; do 505185ee4c00Smrg deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` 505285ee4c00Smrg case " $weak_libs " in 505385ee4c00Smrg *" $deplib_base "*) ;; 505485ee4c00Smrg *) deplibs="$deplibs $deplib" ;; 505585ee4c00Smrg esac 505685ee4c00Smrg done 505785ee4c00Smrg done 505885ee4c00Smrg libs="$dlprefiles" 505985ee4c00Smrg fi 506085ee4c00Smrg if test "$pass" = dlopen; then 506185ee4c00Smrg # Collect dlpreopened libraries 506285ee4c00Smrg save_deplibs="$deplibs" 506385ee4c00Smrg deplibs= 506485ee4c00Smrg fi 506585ee4c00Smrg 506685ee4c00Smrg for deplib in $libs; do 506785ee4c00Smrg lib= 506885ee4c00Smrg found=no 506985ee4c00Smrg case $deplib in 507085ee4c00Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 507185ee4c00Smrg if test "$linkmode,$pass" = "prog,link"; then 507285ee4c00Smrg compile_deplibs="$deplib $compile_deplibs" 507385ee4c00Smrg finalize_deplibs="$deplib $finalize_deplibs" 507485ee4c00Smrg else 507585ee4c00Smrg compiler_flags="$compiler_flags $deplib" 507685ee4c00Smrg if test "$linkmode" = lib ; then 507785ee4c00Smrg case "$new_inherited_linker_flags " in 507885ee4c00Smrg *" $deplib "*) ;; 507985ee4c00Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 508085ee4c00Smrg esac 508185ee4c00Smrg fi 508285ee4c00Smrg fi 508385ee4c00Smrg continue 508485ee4c00Smrg ;; 508585ee4c00Smrg -l*) 508685ee4c00Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 508785ee4c00Smrg func_warning "\`-l' is ignored for archives/objects" 508885ee4c00Smrg continue 508985ee4c00Smrg fi 509085ee4c00Smrg func_stripname '-l' '' "$deplib" 509185ee4c00Smrg name=$func_stripname_result 509285ee4c00Smrg if test "$linkmode" = lib; then 509385ee4c00Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 509485ee4c00Smrg else 509585ee4c00Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 509685ee4c00Smrg fi 509785ee4c00Smrg for searchdir in $searchdirs; do 509885ee4c00Smrg for search_ext in .la $std_shrext .so .a; do 509985ee4c00Smrg # Search the libtool library 510085ee4c00Smrg lib="$searchdir/lib${name}${search_ext}" 510185ee4c00Smrg if test -f "$lib"; then 510285ee4c00Smrg if test "$search_ext" = ".la"; then 510385ee4c00Smrg found=yes 510485ee4c00Smrg else 510585ee4c00Smrg found=no 510685ee4c00Smrg fi 510785ee4c00Smrg break 2 510885ee4c00Smrg fi 510985ee4c00Smrg done 511085ee4c00Smrg done 511185ee4c00Smrg if test "$found" != yes; then 511285ee4c00Smrg # deplib doesn't seem to be a libtool library 511385ee4c00Smrg if test "$linkmode,$pass" = "prog,link"; then 511485ee4c00Smrg compile_deplibs="$deplib $compile_deplibs" 511585ee4c00Smrg finalize_deplibs="$deplib $finalize_deplibs" 511685ee4c00Smrg else 511785ee4c00Smrg deplibs="$deplib $deplibs" 511885ee4c00Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 511985ee4c00Smrg fi 512085ee4c00Smrg continue 512185ee4c00Smrg else # deplib is a libtool library 512285ee4c00Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 512385ee4c00Smrg # We need to do some special things here, and not later. 512485ee4c00Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 512585ee4c00Smrg case " $predeps $postdeps " in 512685ee4c00Smrg *" $deplib "*) 512785ee4c00Smrg if func_lalib_p "$lib"; then 512885ee4c00Smrg library_names= 512985ee4c00Smrg old_library= 513085ee4c00Smrg func_source "$lib" 513185ee4c00Smrg for l in $old_library $library_names; do 513285ee4c00Smrg ll="$l" 513385ee4c00Smrg done 513485ee4c00Smrg if test "X$ll" = "X$old_library" ; then # only static version available 513585ee4c00Smrg found=no 513685ee4c00Smrg func_dirname "$lib" "" "." 513785ee4c00Smrg ladir="$func_dirname_result" 513885ee4c00Smrg lib=$ladir/$old_library 513985ee4c00Smrg if test "$linkmode,$pass" = "prog,link"; then 514085ee4c00Smrg compile_deplibs="$deplib $compile_deplibs" 514185ee4c00Smrg finalize_deplibs="$deplib $finalize_deplibs" 514285ee4c00Smrg else 514385ee4c00Smrg deplibs="$deplib $deplibs" 514485ee4c00Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 514585ee4c00Smrg fi 514685ee4c00Smrg continue 514785ee4c00Smrg fi 514885ee4c00Smrg fi 514985ee4c00Smrg ;; 515085ee4c00Smrg *) ;; 515185ee4c00Smrg esac 515285ee4c00Smrg fi 515385ee4c00Smrg fi 515485ee4c00Smrg ;; # -l 515585ee4c00Smrg *.ltframework) 515685ee4c00Smrg if test "$linkmode,$pass" = "prog,link"; then 515785ee4c00Smrg compile_deplibs="$deplib $compile_deplibs" 515885ee4c00Smrg finalize_deplibs="$deplib $finalize_deplibs" 515985ee4c00Smrg else 516085ee4c00Smrg deplibs="$deplib $deplibs" 516185ee4c00Smrg if test "$linkmode" = lib ; then 516285ee4c00Smrg case "$new_inherited_linker_flags " in 516385ee4c00Smrg *" $deplib "*) ;; 516485ee4c00Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 516585ee4c00Smrg esac 516685ee4c00Smrg fi 516785ee4c00Smrg fi 516885ee4c00Smrg continue 516985ee4c00Smrg ;; 517085ee4c00Smrg -L*) 517185ee4c00Smrg case $linkmode in 517285ee4c00Smrg lib) 517385ee4c00Smrg deplibs="$deplib $deplibs" 517485ee4c00Smrg test "$pass" = conv && continue 517585ee4c00Smrg newdependency_libs="$deplib $newdependency_libs" 517685ee4c00Smrg func_stripname '-L' '' "$deplib" 517785ee4c00Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 517885ee4c00Smrg ;; 517985ee4c00Smrg prog) 518085ee4c00Smrg if test "$pass" = conv; then 518185ee4c00Smrg deplibs="$deplib $deplibs" 518285ee4c00Smrg continue 518385ee4c00Smrg fi 518485ee4c00Smrg if test "$pass" = scan; then 518585ee4c00Smrg deplibs="$deplib $deplibs" 518685ee4c00Smrg else 518785ee4c00Smrg compile_deplibs="$deplib $compile_deplibs" 518885ee4c00Smrg finalize_deplibs="$deplib $finalize_deplibs" 518985ee4c00Smrg fi 519085ee4c00Smrg func_stripname '-L' '' "$deplib" 519185ee4c00Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 519285ee4c00Smrg ;; 519385ee4c00Smrg *) 519485ee4c00Smrg func_warning "\`-L' is ignored for archives/objects" 519585ee4c00Smrg ;; 519685ee4c00Smrg esac # linkmode 519785ee4c00Smrg continue 519885ee4c00Smrg ;; # -L 519985ee4c00Smrg -R*) 520085ee4c00Smrg if test "$pass" = link; then 520185ee4c00Smrg func_stripname '-R' '' "$deplib" 520285ee4c00Smrg dir=$func_stripname_result 520385ee4c00Smrg # Make sure the xrpath contains only unique directories. 520485ee4c00Smrg case "$xrpath " in 520585ee4c00Smrg *" $dir "*) ;; 520685ee4c00Smrg *) xrpath="$xrpath $dir" ;; 520785ee4c00Smrg esac 520885ee4c00Smrg fi 520985ee4c00Smrg deplibs="$deplib $deplibs" 521085ee4c00Smrg continue 521185ee4c00Smrg ;; 521285ee4c00Smrg *.la) lib="$deplib" ;; 521385ee4c00Smrg *.$libext) 521485ee4c00Smrg if test "$pass" = conv; then 521585ee4c00Smrg deplibs="$deplib $deplibs" 521685ee4c00Smrg continue 521785ee4c00Smrg fi 521885ee4c00Smrg case $linkmode in 521985ee4c00Smrg lib) 522085ee4c00Smrg # Linking convenience modules into shared libraries is allowed, 522185ee4c00Smrg # but linking other static libraries is non-portable. 522285ee4c00Smrg case " $dlpreconveniencelibs " in 522385ee4c00Smrg *" $deplib "*) ;; 522485ee4c00Smrg *) 522585ee4c00Smrg valid_a_lib=no 522685ee4c00Smrg case $deplibs_check_method in 522785ee4c00Smrg match_pattern*) 522885ee4c00Smrg set dummy $deplibs_check_method; shift 522985ee4c00Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 523085ee4c00Smrg if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ 523185ee4c00Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 523285ee4c00Smrg valid_a_lib=yes 523385ee4c00Smrg fi 523485ee4c00Smrg ;; 523585ee4c00Smrg pass_all) 523685ee4c00Smrg valid_a_lib=yes 523785ee4c00Smrg ;; 523885ee4c00Smrg esac 523985ee4c00Smrg if test "$valid_a_lib" != yes; then 524085ee4c00Smrg $ECHO 524185ee4c00Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 524285ee4c00Smrg $ECHO "*** I have the capability to make that library automatically link in when" 524385ee4c00Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 524485ee4c00Smrg $ECHO "*** shared version of the library, which you do not appear to have" 524585ee4c00Smrg $ECHO "*** because the file extensions .$libext of this argument makes me believe" 524685ee4c00Smrg $ECHO "*** that it is just a static archive that I should not use here." 524785ee4c00Smrg else 524885ee4c00Smrg $ECHO 524985ee4c00Smrg $ECHO "*** Warning: Linking the shared library $output against the" 525085ee4c00Smrg $ECHO "*** static library $deplib is not portable!" 525185ee4c00Smrg deplibs="$deplib $deplibs" 525285ee4c00Smrg fi 525385ee4c00Smrg ;; 525485ee4c00Smrg esac 525585ee4c00Smrg continue 525685ee4c00Smrg ;; 525785ee4c00Smrg prog) 525885ee4c00Smrg if test "$pass" != link; then 525985ee4c00Smrg deplibs="$deplib $deplibs" 526085ee4c00Smrg else 526185ee4c00Smrg compile_deplibs="$deplib $compile_deplibs" 526285ee4c00Smrg finalize_deplibs="$deplib $finalize_deplibs" 526385ee4c00Smrg fi 526485ee4c00Smrg continue 526585ee4c00Smrg ;; 526685ee4c00Smrg esac # linkmode 526785ee4c00Smrg ;; # *.$libext 526885ee4c00Smrg *.lo | *.$objext) 526985ee4c00Smrg if test "$pass" = conv; then 527085ee4c00Smrg deplibs="$deplib $deplibs" 527185ee4c00Smrg elif test "$linkmode" = prog; then 527285ee4c00Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 527385ee4c00Smrg # If there is no dlopen support or we're linking statically, 527485ee4c00Smrg # we need to preload. 527585ee4c00Smrg newdlprefiles="$newdlprefiles $deplib" 527685ee4c00Smrg compile_deplibs="$deplib $compile_deplibs" 527785ee4c00Smrg finalize_deplibs="$deplib $finalize_deplibs" 527885ee4c00Smrg else 527985ee4c00Smrg newdlfiles="$newdlfiles $deplib" 528085ee4c00Smrg fi 528185ee4c00Smrg fi 528285ee4c00Smrg continue 528385ee4c00Smrg ;; 528485ee4c00Smrg %DEPLIBS%) 528585ee4c00Smrg alldeplibs=yes 528685ee4c00Smrg continue 528785ee4c00Smrg ;; 528885ee4c00Smrg esac # case $deplib 528985ee4c00Smrg 529085ee4c00Smrg if test "$found" = yes || test -f "$lib"; then : 529185ee4c00Smrg else 529285ee4c00Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 529385ee4c00Smrg fi 529485ee4c00Smrg 529585ee4c00Smrg # Check to see that this really is a libtool archive. 529685ee4c00Smrg func_lalib_unsafe_p "$lib" \ 529785ee4c00Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 529885ee4c00Smrg 529985ee4c00Smrg func_dirname "$lib" "" "." 530085ee4c00Smrg ladir="$func_dirname_result" 530185ee4c00Smrg 530285ee4c00Smrg dlname= 530385ee4c00Smrg dlopen= 530485ee4c00Smrg dlpreopen= 530585ee4c00Smrg libdir= 530685ee4c00Smrg library_names= 530785ee4c00Smrg old_library= 530885ee4c00Smrg inherited_linker_flags= 530985ee4c00Smrg # If the library was installed with an old release of libtool, 531085ee4c00Smrg # it will not redefine variables installed, or shouldnotlink 531185ee4c00Smrg installed=yes 531285ee4c00Smrg shouldnotlink=no 531385ee4c00Smrg avoidtemprpath= 531485ee4c00Smrg 531585ee4c00Smrg 531685ee4c00Smrg # Read the .la file 531785ee4c00Smrg func_source "$lib" 531885ee4c00Smrg 531985ee4c00Smrg # Convert "-framework foo" to "foo.ltframework" 532085ee4c00Smrg if test -n "$inherited_linker_flags"; then 532185ee4c00Smrg tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` 532285ee4c00Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 532385ee4c00Smrg case " $new_inherited_linker_flags " in 532485ee4c00Smrg *" $tmp_inherited_linker_flag "*) ;; 532585ee4c00Smrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 532685ee4c00Smrg esac 532785ee4c00Smrg done 532885ee4c00Smrg fi 532985ee4c00Smrg dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 533085ee4c00Smrg if test "$linkmode,$pass" = "lib,link" || 533185ee4c00Smrg test "$linkmode,$pass" = "prog,scan" || 533285ee4c00Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 533385ee4c00Smrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 533485ee4c00Smrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 533585ee4c00Smrg fi 533685ee4c00Smrg 533785ee4c00Smrg if test "$pass" = conv; then 533885ee4c00Smrg # Only check for convenience libraries 533985ee4c00Smrg deplibs="$lib $deplibs" 534085ee4c00Smrg if test -z "$libdir"; then 534185ee4c00Smrg if test -z "$old_library"; then 534285ee4c00Smrg func_fatal_error "cannot find name of link library for \`$lib'" 534385ee4c00Smrg fi 534485ee4c00Smrg # It is a libtool convenience library, so add in its objects. 534585ee4c00Smrg convenience="$convenience $ladir/$objdir/$old_library" 534685ee4c00Smrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 534785ee4c00Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 534885ee4c00Smrg func_fatal_error "\`$lib' is not a convenience library" 534985ee4c00Smrg fi 535085ee4c00Smrg tmp_libs= 535185ee4c00Smrg for deplib in $dependency_libs; do 535285ee4c00Smrg deplibs="$deplib $deplibs" 535385ee4c00Smrg if $opt_duplicate_deps ; then 535485ee4c00Smrg case "$tmp_libs " in 535585ee4c00Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 535685ee4c00Smrg esac 535785ee4c00Smrg fi 535885ee4c00Smrg tmp_libs="$tmp_libs $deplib" 535985ee4c00Smrg done 536085ee4c00Smrg continue 536185ee4c00Smrg fi # $pass = conv 536285ee4c00Smrg 536385ee4c00Smrg 536485ee4c00Smrg # Get the name of the library we link against. 536585ee4c00Smrg linklib= 536685ee4c00Smrg for l in $old_library $library_names; do 536785ee4c00Smrg linklib="$l" 536885ee4c00Smrg done 536985ee4c00Smrg if test -z "$linklib"; then 537085ee4c00Smrg func_fatal_error "cannot find name of link library for \`$lib'" 537185ee4c00Smrg fi 537285ee4c00Smrg 537385ee4c00Smrg # This library was specified with -dlopen. 537485ee4c00Smrg if test "$pass" = dlopen; then 537585ee4c00Smrg if test -z "$libdir"; then 537685ee4c00Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 537785ee4c00Smrg fi 537885ee4c00Smrg if test -z "$dlname" || 537985ee4c00Smrg test "$dlopen_support" != yes || 538085ee4c00Smrg test "$build_libtool_libs" = no; then 538185ee4c00Smrg # If there is no dlname, no dlopen support or we're linking 538285ee4c00Smrg # statically, we need to preload. We also need to preload any 538385ee4c00Smrg # dependent libraries so libltdl's deplib preloader doesn't 538485ee4c00Smrg # bomb out in the load deplibs phase. 538585ee4c00Smrg dlprefiles="$dlprefiles $lib $dependency_libs" 538685ee4c00Smrg else 538785ee4c00Smrg newdlfiles="$newdlfiles $lib" 538885ee4c00Smrg fi 538985ee4c00Smrg continue 539085ee4c00Smrg fi # $pass = dlopen 539185ee4c00Smrg 539285ee4c00Smrg # We need an absolute path. 539385ee4c00Smrg case $ladir in 539485ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 539585ee4c00Smrg *) 539685ee4c00Smrg abs_ladir=`cd "$ladir" && pwd` 539785ee4c00Smrg if test -z "$abs_ladir"; then 539885ee4c00Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 539985ee4c00Smrg func_warning "passing it literally to the linker, although it might fail" 540085ee4c00Smrg abs_ladir="$ladir" 540185ee4c00Smrg fi 540285ee4c00Smrg ;; 540385ee4c00Smrg esac 540485ee4c00Smrg func_basename "$lib" 540585ee4c00Smrg laname="$func_basename_result" 540685ee4c00Smrg 540785ee4c00Smrg # Find the relevant object directory and library name. 540885ee4c00Smrg if test "X$installed" = Xyes; then 540985ee4c00Smrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 541085ee4c00Smrg func_warning "library \`$lib' was moved." 541185ee4c00Smrg dir="$ladir" 541285ee4c00Smrg absdir="$abs_ladir" 541385ee4c00Smrg libdir="$abs_ladir" 541485ee4c00Smrg else 541585ee4c00Smrg dir="$libdir" 541685ee4c00Smrg absdir="$libdir" 541785ee4c00Smrg fi 541885ee4c00Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 541985ee4c00Smrg else 542085ee4c00Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 542185ee4c00Smrg dir="$ladir" 542285ee4c00Smrg absdir="$abs_ladir" 542385ee4c00Smrg # Remove this search path later 542485ee4c00Smrg notinst_path="$notinst_path $abs_ladir" 542585ee4c00Smrg else 542685ee4c00Smrg dir="$ladir/$objdir" 542785ee4c00Smrg absdir="$abs_ladir/$objdir" 542885ee4c00Smrg # Remove this search path later 542985ee4c00Smrg notinst_path="$notinst_path $abs_ladir" 543085ee4c00Smrg fi 543185ee4c00Smrg fi # $installed = yes 543285ee4c00Smrg func_stripname 'lib' '.la' "$laname" 543385ee4c00Smrg name=$func_stripname_result 543485ee4c00Smrg 543585ee4c00Smrg # This library was specified with -dlpreopen. 543685ee4c00Smrg if test "$pass" = dlpreopen; then 543785ee4c00Smrg if test -z "$libdir" && test "$linkmode" = prog; then 543885ee4c00Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 543985ee4c00Smrg fi 544085ee4c00Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 544185ee4c00Smrg # are required to link). 544285ee4c00Smrg if test -n "$old_library"; then 544385ee4c00Smrg newdlprefiles="$newdlprefiles $dir/$old_library" 544485ee4c00Smrg # Keep a list of preopened convenience libraries to check 544585ee4c00Smrg # that they are being used correctly in the link pass. 544685ee4c00Smrg test -z "$libdir" && \ 544785ee4c00Smrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 544885ee4c00Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 544985ee4c00Smrg elif test -n "$dlname"; then 545085ee4c00Smrg newdlprefiles="$newdlprefiles $dir/$dlname" 545185ee4c00Smrg else 545285ee4c00Smrg newdlprefiles="$newdlprefiles $dir/$linklib" 545385ee4c00Smrg fi 545485ee4c00Smrg fi # $pass = dlpreopen 545585ee4c00Smrg 545685ee4c00Smrg if test -z "$libdir"; then 545785ee4c00Smrg # Link the convenience library 545885ee4c00Smrg if test "$linkmode" = lib; then 545985ee4c00Smrg deplibs="$dir/$old_library $deplibs" 546085ee4c00Smrg elif test "$linkmode,$pass" = "prog,link"; then 546185ee4c00Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 546285ee4c00Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 546385ee4c00Smrg else 546485ee4c00Smrg deplibs="$lib $deplibs" # used for prog,scan pass 546585ee4c00Smrg fi 546685ee4c00Smrg continue 546785ee4c00Smrg fi 546885ee4c00Smrg 546985ee4c00Smrg 547085ee4c00Smrg if test "$linkmode" = prog && test "$pass" != link; then 547185ee4c00Smrg newlib_search_path="$newlib_search_path $ladir" 547285ee4c00Smrg deplibs="$lib $deplibs" 547385ee4c00Smrg 547485ee4c00Smrg linkalldeplibs=no 547585ee4c00Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 547685ee4c00Smrg test "$build_libtool_libs" = no; then 547785ee4c00Smrg linkalldeplibs=yes 547885ee4c00Smrg fi 547985ee4c00Smrg 548085ee4c00Smrg tmp_libs= 548185ee4c00Smrg for deplib in $dependency_libs; do 548285ee4c00Smrg case $deplib in 548385ee4c00Smrg -L*) func_stripname '-L' '' "$deplib" 548485ee4c00Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 548585ee4c00Smrg ;; 548685ee4c00Smrg esac 548785ee4c00Smrg # Need to link against all dependency_libs? 548885ee4c00Smrg if test "$linkalldeplibs" = yes; then 548985ee4c00Smrg deplibs="$deplib $deplibs" 549085ee4c00Smrg else 549185ee4c00Smrg # Need to hardcode shared library paths 549285ee4c00Smrg # or/and link against static libraries 549385ee4c00Smrg newdependency_libs="$deplib $newdependency_libs" 549485ee4c00Smrg fi 549585ee4c00Smrg if $opt_duplicate_deps ; then 549685ee4c00Smrg case "$tmp_libs " in 549785ee4c00Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 549885ee4c00Smrg esac 549985ee4c00Smrg fi 550085ee4c00Smrg tmp_libs="$tmp_libs $deplib" 550185ee4c00Smrg done # for deplib 550285ee4c00Smrg continue 550385ee4c00Smrg fi # $linkmode = prog... 550485ee4c00Smrg 550585ee4c00Smrg if test "$linkmode,$pass" = "prog,link"; then 550685ee4c00Smrg if test -n "$library_names" && 550785ee4c00Smrg { { test "$prefer_static_libs" = no || 550885ee4c00Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 550985ee4c00Smrg test -z "$old_library"; }; then 551085ee4c00Smrg # We need to hardcode the library path 551185ee4c00Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 551285ee4c00Smrg # Make sure the rpath contains only unique directories. 551385ee4c00Smrg case "$temp_rpath:" in 551485ee4c00Smrg *"$absdir:"*) ;; 551585ee4c00Smrg *) temp_rpath="$temp_rpath$absdir:" ;; 551685ee4c00Smrg esac 551785ee4c00Smrg fi 551885ee4c00Smrg 551985ee4c00Smrg # Hardcode the library path. 552085ee4c00Smrg # Skip directories that are in the system default run-time 552185ee4c00Smrg # search path. 552285ee4c00Smrg case " $sys_lib_dlsearch_path " in 552385ee4c00Smrg *" $absdir "*) ;; 552485ee4c00Smrg *) 552585ee4c00Smrg case "$compile_rpath " in 552685ee4c00Smrg *" $absdir "*) ;; 552785ee4c00Smrg *) compile_rpath="$compile_rpath $absdir" 552885ee4c00Smrg esac 552985ee4c00Smrg ;; 553085ee4c00Smrg esac 553185ee4c00Smrg case " $sys_lib_dlsearch_path " in 553285ee4c00Smrg *" $libdir "*) ;; 553385ee4c00Smrg *) 553485ee4c00Smrg case "$finalize_rpath " in 553585ee4c00Smrg *" $libdir "*) ;; 553685ee4c00Smrg *) finalize_rpath="$finalize_rpath $libdir" 553785ee4c00Smrg esac 553885ee4c00Smrg ;; 553985ee4c00Smrg esac 554085ee4c00Smrg fi # $linkmode,$pass = prog,link... 554185ee4c00Smrg 554285ee4c00Smrg if test "$alldeplibs" = yes && 554385ee4c00Smrg { test "$deplibs_check_method" = pass_all || 554485ee4c00Smrg { test "$build_libtool_libs" = yes && 554585ee4c00Smrg test -n "$library_names"; }; }; then 554685ee4c00Smrg # We only need to search for static libraries 554785ee4c00Smrg continue 554885ee4c00Smrg fi 554985ee4c00Smrg fi 555085ee4c00Smrg 555185ee4c00Smrg link_static=no # Whether the deplib will be linked statically 555285ee4c00Smrg use_static_libs=$prefer_static_libs 555385ee4c00Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 555485ee4c00Smrg use_static_libs=no 555585ee4c00Smrg fi 555685ee4c00Smrg if test -n "$library_names" && 555785ee4c00Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 555885ee4c00Smrg case $host in 555985ee4c00Smrg *cygwin* | *mingw* | *cegcc*) 556085ee4c00Smrg # No point in relinking DLLs because paths are not encoded 556185ee4c00Smrg notinst_deplibs="$notinst_deplibs $lib" 556285ee4c00Smrg need_relink=no 556385ee4c00Smrg ;; 556485ee4c00Smrg *) 556585ee4c00Smrg if test "$installed" = no; then 556685ee4c00Smrg notinst_deplibs="$notinst_deplibs $lib" 556785ee4c00Smrg need_relink=yes 556885ee4c00Smrg fi 556985ee4c00Smrg ;; 557085ee4c00Smrg esac 557185ee4c00Smrg # This is a shared library 557285ee4c00Smrg 557385ee4c00Smrg # Warn about portability, can't link against -module's on some 557485ee4c00Smrg # systems (darwin). Don't bleat about dlopened modules though! 557585ee4c00Smrg dlopenmodule="" 557685ee4c00Smrg for dlpremoduletest in $dlprefiles; do 557785ee4c00Smrg if test "X$dlpremoduletest" = "X$lib"; then 557885ee4c00Smrg dlopenmodule="$dlpremoduletest" 557985ee4c00Smrg break 558085ee4c00Smrg fi 558185ee4c00Smrg done 558285ee4c00Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 558385ee4c00Smrg $ECHO 558485ee4c00Smrg if test "$linkmode" = prog; then 558585ee4c00Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 558685ee4c00Smrg else 558785ee4c00Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 558885ee4c00Smrg fi 558985ee4c00Smrg $ECHO "*** $linklib is not portable!" 559085ee4c00Smrg fi 559185ee4c00Smrg if test "$linkmode" = lib && 559285ee4c00Smrg test "$hardcode_into_libs" = yes; then 559385ee4c00Smrg # Hardcode the library path. 559485ee4c00Smrg # Skip directories that are in the system default run-time 559585ee4c00Smrg # search path. 559685ee4c00Smrg case " $sys_lib_dlsearch_path " in 559785ee4c00Smrg *" $absdir "*) ;; 559885ee4c00Smrg *) 559985ee4c00Smrg case "$compile_rpath " in 560085ee4c00Smrg *" $absdir "*) ;; 560185ee4c00Smrg *) compile_rpath="$compile_rpath $absdir" 560285ee4c00Smrg esac 560385ee4c00Smrg ;; 560485ee4c00Smrg esac 560585ee4c00Smrg case " $sys_lib_dlsearch_path " in 560685ee4c00Smrg *" $libdir "*) ;; 560785ee4c00Smrg *) 560885ee4c00Smrg case "$finalize_rpath " in 560985ee4c00Smrg *" $libdir "*) ;; 561085ee4c00Smrg *) finalize_rpath="$finalize_rpath $libdir" 561185ee4c00Smrg esac 561285ee4c00Smrg ;; 561385ee4c00Smrg esac 561485ee4c00Smrg fi 561585ee4c00Smrg 561685ee4c00Smrg if test -n "$old_archive_from_expsyms_cmds"; then 561785ee4c00Smrg # figure out the soname 561885ee4c00Smrg set dummy $library_names 561985ee4c00Smrg shift 562085ee4c00Smrg realname="$1" 562185ee4c00Smrg shift 562285ee4c00Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 562385ee4c00Smrg # use dlname if we got it. it's perfectly good, no? 562485ee4c00Smrg if test -n "$dlname"; then 562585ee4c00Smrg soname="$dlname" 562685ee4c00Smrg elif test -n "$soname_spec"; then 562785ee4c00Smrg # bleh windows 562885ee4c00Smrg case $host in 562985ee4c00Smrg *cygwin* | mingw* | *cegcc*) 563085ee4c00Smrg func_arith $current - $age 563185ee4c00Smrg major=$func_arith_result 563285ee4c00Smrg versuffix="-$major" 563385ee4c00Smrg ;; 563485ee4c00Smrg esac 563585ee4c00Smrg eval soname=\"$soname_spec\" 563685ee4c00Smrg else 563785ee4c00Smrg soname="$realname" 563885ee4c00Smrg fi 563985ee4c00Smrg 564085ee4c00Smrg # Make a new name for the extract_expsyms_cmds to use 564185ee4c00Smrg soroot="$soname" 564285ee4c00Smrg func_basename "$soroot" 564385ee4c00Smrg soname="$func_basename_result" 564485ee4c00Smrg func_stripname 'lib' '.dll' "$soname" 564585ee4c00Smrg newlib=libimp-$func_stripname_result.a 564685ee4c00Smrg 564785ee4c00Smrg # If the library has no export list, then create one now 564885ee4c00Smrg if test -f "$output_objdir/$soname-def"; then : 564985ee4c00Smrg else 565085ee4c00Smrg func_verbose "extracting exported symbol list from \`$soname'" 565185ee4c00Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 565285ee4c00Smrg fi 565385ee4c00Smrg 565485ee4c00Smrg # Create $newlib 565585ee4c00Smrg if test -f "$output_objdir/$newlib"; then :; else 565685ee4c00Smrg func_verbose "generating import library for \`$soname'" 565785ee4c00Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 565885ee4c00Smrg fi 565985ee4c00Smrg # make sure the library variables are pointing to the new library 566085ee4c00Smrg dir=$output_objdir 566185ee4c00Smrg linklib=$newlib 566285ee4c00Smrg fi # test -n "$old_archive_from_expsyms_cmds" 566385ee4c00Smrg 566485ee4c00Smrg if test "$linkmode" = prog || test "$mode" != relink; then 566585ee4c00Smrg add_shlibpath= 566685ee4c00Smrg add_dir= 566785ee4c00Smrg add= 566885ee4c00Smrg lib_linked=yes 566985ee4c00Smrg case $hardcode_action in 567085ee4c00Smrg immediate | unsupported) 567185ee4c00Smrg if test "$hardcode_direct" = no; then 567285ee4c00Smrg add="$dir/$linklib" 567385ee4c00Smrg case $host in 567485ee4c00Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 567585ee4c00Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 567685ee4c00Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 567785ee4c00Smrg *-*-unixware7*) add_dir="-L$dir" ;; 567885ee4c00Smrg *-*-darwin* ) 567985ee4c00Smrg # if the lib is a (non-dlopened) module then we can not 568085ee4c00Smrg # link against it, someone is ignoring the earlier warnings 568185ee4c00Smrg if /usr/bin/file -L $add 2> /dev/null | 568285ee4c00Smrg $GREP ": [^:]* bundle" >/dev/null ; then 568385ee4c00Smrg if test "X$dlopenmodule" != "X$lib"; then 568485ee4c00Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 568585ee4c00Smrg if test -z "$old_library" ; then 568685ee4c00Smrg $ECHO 568785ee4c00Smrg $ECHO "*** And there doesn't seem to be a static archive available" 568885ee4c00Smrg $ECHO "*** The link will probably fail, sorry" 568985ee4c00Smrg else 569085ee4c00Smrg add="$dir/$old_library" 569185ee4c00Smrg fi 569285ee4c00Smrg elif test -n "$old_library"; then 569385ee4c00Smrg add="$dir/$old_library" 569485ee4c00Smrg fi 569585ee4c00Smrg fi 569685ee4c00Smrg esac 569785ee4c00Smrg elif test "$hardcode_minus_L" = no; then 569885ee4c00Smrg case $host in 569985ee4c00Smrg *-*-sunos*) add_shlibpath="$dir" ;; 570085ee4c00Smrg esac 570185ee4c00Smrg add_dir="-L$dir" 570285ee4c00Smrg add="-l$name" 570385ee4c00Smrg elif test "$hardcode_shlibpath_var" = no; then 570485ee4c00Smrg add_shlibpath="$dir" 570585ee4c00Smrg add="-l$name" 570685ee4c00Smrg else 570785ee4c00Smrg lib_linked=no 570885ee4c00Smrg fi 570985ee4c00Smrg ;; 571085ee4c00Smrg relink) 571185ee4c00Smrg if test "$hardcode_direct" = yes && 571285ee4c00Smrg test "$hardcode_direct_absolute" = no; then 571385ee4c00Smrg add="$dir/$linklib" 571485ee4c00Smrg elif test "$hardcode_minus_L" = yes; then 571585ee4c00Smrg add_dir="-L$dir" 571685ee4c00Smrg # Try looking first in the location we're being installed to. 571785ee4c00Smrg if test -n "$inst_prefix_dir"; then 571885ee4c00Smrg case $libdir in 571985ee4c00Smrg [\\/]*) 572085ee4c00Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 572185ee4c00Smrg ;; 572285ee4c00Smrg esac 572385ee4c00Smrg fi 572485ee4c00Smrg add="-l$name" 572585ee4c00Smrg elif test "$hardcode_shlibpath_var" = yes; then 572685ee4c00Smrg add_shlibpath="$dir" 572785ee4c00Smrg add="-l$name" 572885ee4c00Smrg else 572985ee4c00Smrg lib_linked=no 573085ee4c00Smrg fi 573185ee4c00Smrg ;; 573285ee4c00Smrg *) lib_linked=no ;; 573385ee4c00Smrg esac 573485ee4c00Smrg 573585ee4c00Smrg if test "$lib_linked" != yes; then 573685ee4c00Smrg func_fatal_configuration "unsupported hardcode properties" 573785ee4c00Smrg fi 573885ee4c00Smrg 573985ee4c00Smrg if test -n "$add_shlibpath"; then 574085ee4c00Smrg case :$compile_shlibpath: in 574185ee4c00Smrg *":$add_shlibpath:"*) ;; 574285ee4c00Smrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 574385ee4c00Smrg esac 574485ee4c00Smrg fi 574585ee4c00Smrg if test "$linkmode" = prog; then 574685ee4c00Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 574785ee4c00Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 574885ee4c00Smrg else 574985ee4c00Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 575085ee4c00Smrg test -n "$add" && deplibs="$add $deplibs" 575185ee4c00Smrg if test "$hardcode_direct" != yes && 575285ee4c00Smrg test "$hardcode_minus_L" != yes && 575385ee4c00Smrg test "$hardcode_shlibpath_var" = yes; then 575485ee4c00Smrg case :$finalize_shlibpath: in 575585ee4c00Smrg *":$libdir:"*) ;; 575685ee4c00Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 575785ee4c00Smrg esac 575885ee4c00Smrg fi 575985ee4c00Smrg fi 576085ee4c00Smrg fi 576185ee4c00Smrg 576285ee4c00Smrg if test "$linkmode" = prog || test "$mode" = relink; then 576385ee4c00Smrg add_shlibpath= 576485ee4c00Smrg add_dir= 576585ee4c00Smrg add= 576685ee4c00Smrg # Finalize command for both is simple: just hardcode it. 576785ee4c00Smrg if test "$hardcode_direct" = yes && 576885ee4c00Smrg test "$hardcode_direct_absolute" = no; then 576985ee4c00Smrg add="$libdir/$linklib" 577085ee4c00Smrg elif test "$hardcode_minus_L" = yes; then 577185ee4c00Smrg add_dir="-L$libdir" 577285ee4c00Smrg add="-l$name" 577385ee4c00Smrg elif test "$hardcode_shlibpath_var" = yes; then 577485ee4c00Smrg case :$finalize_shlibpath: in 577585ee4c00Smrg *":$libdir:"*) ;; 577685ee4c00Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 577785ee4c00Smrg esac 577885ee4c00Smrg add="-l$name" 577985ee4c00Smrg elif test "$hardcode_automatic" = yes; then 578085ee4c00Smrg if test -n "$inst_prefix_dir" && 578185ee4c00Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 578285ee4c00Smrg add="$inst_prefix_dir$libdir/$linklib" 578385ee4c00Smrg else 578485ee4c00Smrg add="$libdir/$linklib" 578585ee4c00Smrg fi 578685ee4c00Smrg else 578785ee4c00Smrg # We cannot seem to hardcode it, guess we'll fake it. 578885ee4c00Smrg add_dir="-L$libdir" 578985ee4c00Smrg # Try looking first in the location we're being installed to. 579085ee4c00Smrg if test -n "$inst_prefix_dir"; then 579185ee4c00Smrg case $libdir in 579285ee4c00Smrg [\\/]*) 579385ee4c00Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 579485ee4c00Smrg ;; 579585ee4c00Smrg esac 579685ee4c00Smrg fi 579785ee4c00Smrg add="-l$name" 579885ee4c00Smrg fi 579985ee4c00Smrg 580085ee4c00Smrg if test "$linkmode" = prog; then 580185ee4c00Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 580285ee4c00Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 580385ee4c00Smrg else 580485ee4c00Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 580585ee4c00Smrg test -n "$add" && deplibs="$add $deplibs" 580685ee4c00Smrg fi 580785ee4c00Smrg fi 580885ee4c00Smrg elif test "$linkmode" = prog; then 580985ee4c00Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 581085ee4c00Smrg # is not unsupported. This is valid on all known static and 581185ee4c00Smrg # shared platforms. 581285ee4c00Smrg if test "$hardcode_direct" != unsupported; then 581385ee4c00Smrg test -n "$old_library" && linklib="$old_library" 581485ee4c00Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 581585ee4c00Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 581685ee4c00Smrg else 581785ee4c00Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 581885ee4c00Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 581985ee4c00Smrg fi 582085ee4c00Smrg elif test "$build_libtool_libs" = yes; then 582185ee4c00Smrg # Not a shared library 582285ee4c00Smrg if test "$deplibs_check_method" != pass_all; then 582385ee4c00Smrg # We're trying link a shared library against a static one 582485ee4c00Smrg # but the system doesn't support it. 582585ee4c00Smrg 582685ee4c00Smrg # Just print a warning and add the library to dependency_libs so 582785ee4c00Smrg # that the program can be linked against the static library. 582885ee4c00Smrg $ECHO 582985ee4c00Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 583085ee4c00Smrg $ECHO "*** I have the capability to make that library automatically link in when" 583185ee4c00Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 583285ee4c00Smrg $ECHO "*** shared version of the library, which you do not appear to have." 583385ee4c00Smrg if test "$module" = yes; then 583485ee4c00Smrg $ECHO "*** But as you try to build a module library, libtool will still create " 583585ee4c00Smrg $ECHO "*** a static module, that should work as long as the dlopening application" 583685ee4c00Smrg $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." 583785ee4c00Smrg if test -z "$global_symbol_pipe"; then 583885ee4c00Smrg $ECHO 583985ee4c00Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 584085ee4c00Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 584185ee4c00Smrg $ECHO "*** not find such a program. So, this module is probably useless." 584285ee4c00Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 584385ee4c00Smrg fi 584485ee4c00Smrg if test "$build_old_libs" = no; then 584585ee4c00Smrg build_libtool_libs=module 584685ee4c00Smrg build_old_libs=yes 584785ee4c00Smrg else 584885ee4c00Smrg build_libtool_libs=no 584985ee4c00Smrg fi 585085ee4c00Smrg fi 585185ee4c00Smrg else 585285ee4c00Smrg deplibs="$dir/$old_library $deplibs" 585385ee4c00Smrg link_static=yes 585485ee4c00Smrg fi 585585ee4c00Smrg fi # link shared/static library? 585685ee4c00Smrg 585785ee4c00Smrg if test "$linkmode" = lib; then 585885ee4c00Smrg if test -n "$dependency_libs" && 585985ee4c00Smrg { test "$hardcode_into_libs" != yes || 586085ee4c00Smrg test "$build_old_libs" = yes || 586185ee4c00Smrg test "$link_static" = yes; }; then 586285ee4c00Smrg # Extract -R from dependency_libs 586385ee4c00Smrg temp_deplibs= 586485ee4c00Smrg for libdir in $dependency_libs; do 586585ee4c00Smrg case $libdir in 586685ee4c00Smrg -R*) func_stripname '-R' '' "$libdir" 586785ee4c00Smrg temp_xrpath=$func_stripname_result 586885ee4c00Smrg case " $xrpath " in 586985ee4c00Smrg *" $temp_xrpath "*) ;; 587085ee4c00Smrg *) xrpath="$xrpath $temp_xrpath";; 587185ee4c00Smrg esac;; 587285ee4c00Smrg *) temp_deplibs="$temp_deplibs $libdir";; 587385ee4c00Smrg esac 587485ee4c00Smrg done 587585ee4c00Smrg dependency_libs="$temp_deplibs" 587685ee4c00Smrg fi 587785ee4c00Smrg 587885ee4c00Smrg newlib_search_path="$newlib_search_path $absdir" 587985ee4c00Smrg # Link against this library 588085ee4c00Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 588185ee4c00Smrg # ... and its dependency_libs 588285ee4c00Smrg tmp_libs= 588385ee4c00Smrg for deplib in $dependency_libs; do 588485ee4c00Smrg newdependency_libs="$deplib $newdependency_libs" 588585ee4c00Smrg if $opt_duplicate_deps ; then 588685ee4c00Smrg case "$tmp_libs " in 588785ee4c00Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 588885ee4c00Smrg esac 588985ee4c00Smrg fi 589085ee4c00Smrg tmp_libs="$tmp_libs $deplib" 589185ee4c00Smrg done 589285ee4c00Smrg 589385ee4c00Smrg if test "$link_all_deplibs" != no; then 589485ee4c00Smrg # Add the search paths of all dependency libraries 589585ee4c00Smrg for deplib in $dependency_libs; do 589685ee4c00Smrg case $deplib in 589785ee4c00Smrg -L*) path="$deplib" ;; 589885ee4c00Smrg *.la) 589985ee4c00Smrg func_dirname "$deplib" "" "." 590085ee4c00Smrg dir="$func_dirname_result" 590185ee4c00Smrg # We need an absolute path. 590285ee4c00Smrg case $dir in 590385ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 590485ee4c00Smrg *) 590585ee4c00Smrg absdir=`cd "$dir" && pwd` 590685ee4c00Smrg if test -z "$absdir"; then 590785ee4c00Smrg func_warning "cannot determine absolute directory name of \`$dir'" 590885ee4c00Smrg absdir="$dir" 590985ee4c00Smrg fi 591085ee4c00Smrg ;; 591185ee4c00Smrg esac 591285ee4c00Smrg if $GREP "^installed=no" $deplib > /dev/null; then 591385ee4c00Smrg case $host in 591485ee4c00Smrg *-*-darwin*) 591585ee4c00Smrg depdepl= 591685ee4c00Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 591785ee4c00Smrg if test -n "$deplibrary_names" ; then 591885ee4c00Smrg for tmp in $deplibrary_names ; do 591985ee4c00Smrg depdepl=$tmp 592085ee4c00Smrg done 592185ee4c00Smrg if test -f "$absdir/$objdir/$depdepl" ; then 592285ee4c00Smrg depdepl="$absdir/$objdir/$depdepl" 592385ee4c00Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 592485ee4c00Smrg if test -z "$darwin_install_name"; then 592585ee4c00Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 592685ee4c00Smrg fi 592785ee4c00Smrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 592885ee4c00Smrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 592985ee4c00Smrg path= 593085ee4c00Smrg fi 593185ee4c00Smrg fi 593285ee4c00Smrg ;; 593385ee4c00Smrg *) 593485ee4c00Smrg path="-L$absdir/$objdir" 593585ee4c00Smrg ;; 593685ee4c00Smrg esac 593785ee4c00Smrg else 593885ee4c00Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 593985ee4c00Smrg test -z "$libdir" && \ 594085ee4c00Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 594185ee4c00Smrg test "$absdir" != "$libdir" && \ 594285ee4c00Smrg func_warning "\`$deplib' seems to be moved" 594385ee4c00Smrg 594485ee4c00Smrg path="-L$absdir" 594585ee4c00Smrg fi 594685ee4c00Smrg ;; 594785ee4c00Smrg esac 594885ee4c00Smrg case " $deplibs " in 594985ee4c00Smrg *" $path "*) ;; 595085ee4c00Smrg *) deplibs="$path $deplibs" ;; 595185ee4c00Smrg esac 595285ee4c00Smrg done 595385ee4c00Smrg fi # link_all_deplibs != no 595485ee4c00Smrg fi # linkmode = lib 595585ee4c00Smrg done # for deplib in $libs 595685ee4c00Smrg if test "$pass" = link; then 595785ee4c00Smrg if test "$linkmode" = "prog"; then 595885ee4c00Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 595985ee4c00Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 596085ee4c00Smrg else 596185ee4c00Smrg compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 596285ee4c00Smrg fi 596385ee4c00Smrg fi 596485ee4c00Smrg dependency_libs="$newdependency_libs" 596585ee4c00Smrg if test "$pass" = dlpreopen; then 596685ee4c00Smrg # Link the dlpreopened libraries before other libraries 596785ee4c00Smrg for deplib in $save_deplibs; do 596885ee4c00Smrg deplibs="$deplib $deplibs" 596985ee4c00Smrg done 597085ee4c00Smrg fi 597185ee4c00Smrg if test "$pass" != dlopen; then 597285ee4c00Smrg if test "$pass" != conv; then 597385ee4c00Smrg # Make sure lib_search_path contains only unique directories. 597485ee4c00Smrg lib_search_path= 597585ee4c00Smrg for dir in $newlib_search_path; do 597685ee4c00Smrg case "$lib_search_path " in 597785ee4c00Smrg *" $dir "*) ;; 597885ee4c00Smrg *) lib_search_path="$lib_search_path $dir" ;; 597985ee4c00Smrg esac 598085ee4c00Smrg done 598185ee4c00Smrg newlib_search_path= 598285ee4c00Smrg fi 598385ee4c00Smrg 598485ee4c00Smrg if test "$linkmode,$pass" != "prog,link"; then 598585ee4c00Smrg vars="deplibs" 598685ee4c00Smrg else 598785ee4c00Smrg vars="compile_deplibs finalize_deplibs" 598885ee4c00Smrg fi 598985ee4c00Smrg for var in $vars dependency_libs; do 599085ee4c00Smrg # Add libraries to $var in reverse order 599185ee4c00Smrg eval tmp_libs=\"\$$var\" 599285ee4c00Smrg new_libs= 599385ee4c00Smrg for deplib in $tmp_libs; do 599485ee4c00Smrg # FIXME: Pedantically, this is the right thing to do, so 599585ee4c00Smrg # that some nasty dependency loop isn't accidentally 599685ee4c00Smrg # broken: 599785ee4c00Smrg #new_libs="$deplib $new_libs" 599885ee4c00Smrg # Pragmatically, this seems to cause very few problems in 599985ee4c00Smrg # practice: 600085ee4c00Smrg case $deplib in 600185ee4c00Smrg -L*) new_libs="$deplib $new_libs" ;; 600285ee4c00Smrg -R*) ;; 600385ee4c00Smrg *) 600485ee4c00Smrg # And here is the reason: when a library appears more 600585ee4c00Smrg # than once as an explicit dependence of a library, or 600685ee4c00Smrg # is implicitly linked in more than once by the 600785ee4c00Smrg # compiler, it is considered special, and multiple 600885ee4c00Smrg # occurrences thereof are not removed. Compare this 600985ee4c00Smrg # with having the same library being listed as a 601085ee4c00Smrg # dependency of multiple other libraries: in this case, 601185ee4c00Smrg # we know (pedantically, we assume) the library does not 601285ee4c00Smrg # need to be listed more than once, so we keep only the 601385ee4c00Smrg # last copy. This is not always right, but it is rare 601485ee4c00Smrg # enough that we require users that really mean to play 601585ee4c00Smrg # such unportable linking tricks to link the library 601685ee4c00Smrg # using -Wl,-lname, so that libtool does not consider it 601785ee4c00Smrg # for duplicate removal. 601885ee4c00Smrg case " $specialdeplibs " in 601985ee4c00Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 602085ee4c00Smrg *) 602185ee4c00Smrg case " $new_libs " in 602285ee4c00Smrg *" $deplib "*) ;; 602385ee4c00Smrg *) new_libs="$deplib $new_libs" ;; 602485ee4c00Smrg esac 602585ee4c00Smrg ;; 602685ee4c00Smrg esac 602785ee4c00Smrg ;; 602885ee4c00Smrg esac 602985ee4c00Smrg done 603085ee4c00Smrg tmp_libs= 603185ee4c00Smrg for deplib in $new_libs; do 603285ee4c00Smrg case $deplib in 603385ee4c00Smrg -L*) 603485ee4c00Smrg case " $tmp_libs " in 603585ee4c00Smrg *" $deplib "*) ;; 603685ee4c00Smrg *) tmp_libs="$tmp_libs $deplib" ;; 603785ee4c00Smrg esac 603885ee4c00Smrg ;; 603985ee4c00Smrg *) tmp_libs="$tmp_libs $deplib" ;; 604085ee4c00Smrg esac 604185ee4c00Smrg done 604285ee4c00Smrg eval $var=\"$tmp_libs\" 604385ee4c00Smrg done # for var 604485ee4c00Smrg fi 604585ee4c00Smrg # Last step: remove runtime libs from dependency_libs 604685ee4c00Smrg # (they stay in deplibs) 604785ee4c00Smrg tmp_libs= 604885ee4c00Smrg for i in $dependency_libs ; do 604985ee4c00Smrg case " $predeps $postdeps $compiler_lib_search_path " in 605085ee4c00Smrg *" $i "*) 605185ee4c00Smrg i="" 605285ee4c00Smrg ;; 605385ee4c00Smrg esac 605485ee4c00Smrg if test -n "$i" ; then 605585ee4c00Smrg tmp_libs="$tmp_libs $i" 605685ee4c00Smrg fi 605785ee4c00Smrg done 605885ee4c00Smrg dependency_libs=$tmp_libs 605985ee4c00Smrg done # for pass 606085ee4c00Smrg if test "$linkmode" = prog; then 606185ee4c00Smrg dlfiles="$newdlfiles" 606285ee4c00Smrg fi 606385ee4c00Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 606485ee4c00Smrg dlprefiles="$newdlprefiles" 606585ee4c00Smrg fi 606685ee4c00Smrg 606785ee4c00Smrg case $linkmode in 606885ee4c00Smrg oldlib) 606985ee4c00Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 607085ee4c00Smrg func_warning "\`-dlopen' is ignored for archives" 607185ee4c00Smrg fi 607285ee4c00Smrg 607385ee4c00Smrg case " $deplibs" in 607485ee4c00Smrg *\ -l* | *\ -L*) 607585ee4c00Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 607685ee4c00Smrg esac 607785ee4c00Smrg 607885ee4c00Smrg test -n "$rpath" && \ 607985ee4c00Smrg func_warning "\`-rpath' is ignored for archives" 608085ee4c00Smrg 608185ee4c00Smrg test -n "$xrpath" && \ 608285ee4c00Smrg func_warning "\`-R' is ignored for archives" 608385ee4c00Smrg 608485ee4c00Smrg test -n "$vinfo" && \ 608585ee4c00Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 608685ee4c00Smrg 608785ee4c00Smrg test -n "$release" && \ 608885ee4c00Smrg func_warning "\`-release' is ignored for archives" 608985ee4c00Smrg 609085ee4c00Smrg test -n "$export_symbols$export_symbols_regex" && \ 609185ee4c00Smrg func_warning "\`-export-symbols' is ignored for archives" 609285ee4c00Smrg 609385ee4c00Smrg # Now set the variables for building old libraries. 609485ee4c00Smrg build_libtool_libs=no 609585ee4c00Smrg oldlibs="$output" 609685ee4c00Smrg objs="$objs$old_deplibs" 609785ee4c00Smrg ;; 609885ee4c00Smrg 609985ee4c00Smrg lib) 610085ee4c00Smrg # Make sure we only generate libraries of the form `libNAME.la'. 610185ee4c00Smrg case $outputname in 610285ee4c00Smrg lib*) 610385ee4c00Smrg func_stripname 'lib' '.la' "$outputname" 610485ee4c00Smrg name=$func_stripname_result 610585ee4c00Smrg eval shared_ext=\"$shrext_cmds\" 610685ee4c00Smrg eval libname=\"$libname_spec\" 610785ee4c00Smrg ;; 610885ee4c00Smrg *) 610985ee4c00Smrg test "$module" = no && \ 611085ee4c00Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 611185ee4c00Smrg 611285ee4c00Smrg if test "$need_lib_prefix" != no; then 611385ee4c00Smrg # Add the "lib" prefix for modules if required 611485ee4c00Smrg func_stripname '' '.la' "$outputname" 611585ee4c00Smrg name=$func_stripname_result 611685ee4c00Smrg eval shared_ext=\"$shrext_cmds\" 611785ee4c00Smrg eval libname=\"$libname_spec\" 611885ee4c00Smrg else 611985ee4c00Smrg func_stripname '' '.la' "$outputname" 612085ee4c00Smrg libname=$func_stripname_result 612185ee4c00Smrg fi 612285ee4c00Smrg ;; 612385ee4c00Smrg esac 612485ee4c00Smrg 612585ee4c00Smrg if test -n "$objs"; then 612685ee4c00Smrg if test "$deplibs_check_method" != pass_all; then 612785ee4c00Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 612885ee4c00Smrg else 612985ee4c00Smrg $ECHO 613085ee4c00Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 613185ee4c00Smrg $ECHO "*** objects $objs is not portable!" 613285ee4c00Smrg libobjs="$libobjs $objs" 613385ee4c00Smrg fi 613485ee4c00Smrg fi 613585ee4c00Smrg 613685ee4c00Smrg test "$dlself" != no && \ 613785ee4c00Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 613885ee4c00Smrg 613985ee4c00Smrg set dummy $rpath 614085ee4c00Smrg shift 614185ee4c00Smrg test "$#" -gt 1 && \ 614285ee4c00Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 614385ee4c00Smrg 614485ee4c00Smrg install_libdir="$1" 614585ee4c00Smrg 614685ee4c00Smrg oldlibs= 614785ee4c00Smrg if test -z "$rpath"; then 614885ee4c00Smrg if test "$build_libtool_libs" = yes; then 614985ee4c00Smrg # Building a libtool convenience library. 615085ee4c00Smrg # Some compilers have problems with a `.al' extension so 615185ee4c00Smrg # convenience libraries should have the same extension an 615285ee4c00Smrg # archive normally would. 615385ee4c00Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 615485ee4c00Smrg build_libtool_libs=convenience 615585ee4c00Smrg build_old_libs=yes 615685ee4c00Smrg fi 615785ee4c00Smrg 615885ee4c00Smrg test -n "$vinfo" && \ 615985ee4c00Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 616085ee4c00Smrg 616185ee4c00Smrg test -n "$release" && \ 616285ee4c00Smrg func_warning "\`-release' is ignored for convenience libraries" 616385ee4c00Smrg else 616485ee4c00Smrg 616585ee4c00Smrg # Parse the version information argument. 616685ee4c00Smrg save_ifs="$IFS"; IFS=':' 616785ee4c00Smrg set dummy $vinfo 0 0 0 616885ee4c00Smrg shift 616985ee4c00Smrg IFS="$save_ifs" 617085ee4c00Smrg 617185ee4c00Smrg test -n "$7" && \ 617285ee4c00Smrg func_fatal_help "too many parameters to \`-version-info'" 617385ee4c00Smrg 617485ee4c00Smrg # convert absolute version numbers to libtool ages 617585ee4c00Smrg # this retains compatibility with .la files and attempts 617685ee4c00Smrg # to make the code below a bit more comprehensible 617785ee4c00Smrg 617885ee4c00Smrg case $vinfo_number in 617985ee4c00Smrg yes) 618085ee4c00Smrg number_major="$1" 618185ee4c00Smrg number_minor="$2" 618285ee4c00Smrg number_revision="$3" 618385ee4c00Smrg # 618485ee4c00Smrg # There are really only two kinds -- those that 618585ee4c00Smrg # use the current revision as the major version 618685ee4c00Smrg # and those that subtract age and use age as 618785ee4c00Smrg # a minor version. But, then there is irix 618885ee4c00Smrg # which has an extra 1 added just for fun 618985ee4c00Smrg # 619085ee4c00Smrg case $version_type in 619185ee4c00Smrg darwin|linux|osf|windows|none) 619285ee4c00Smrg func_arith $number_major + $number_minor 619385ee4c00Smrg current=$func_arith_result 619485ee4c00Smrg age="$number_minor" 619585ee4c00Smrg revision="$number_revision" 619685ee4c00Smrg ;; 619785ee4c00Smrg freebsd-aout|freebsd-elf|sunos) 619885ee4c00Smrg current="$number_major" 619985ee4c00Smrg revision="$number_minor" 620085ee4c00Smrg age="0" 620185ee4c00Smrg ;; 620285ee4c00Smrg irix|nonstopux) 620385ee4c00Smrg func_arith $number_major + $number_minor 620485ee4c00Smrg current=$func_arith_result 620585ee4c00Smrg age="$number_minor" 620685ee4c00Smrg revision="$number_minor" 620785ee4c00Smrg lt_irix_increment=no 620885ee4c00Smrg ;; 620985ee4c00Smrg esac 621085ee4c00Smrg ;; 621185ee4c00Smrg no) 621285ee4c00Smrg current="$1" 621385ee4c00Smrg revision="$2" 621485ee4c00Smrg age="$3" 621585ee4c00Smrg ;; 621685ee4c00Smrg esac 621785ee4c00Smrg 621885ee4c00Smrg # Check that each of the things are valid numbers. 621985ee4c00Smrg case $current in 622085ee4c00Smrg 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]) ;; 622185ee4c00Smrg *) 622285ee4c00Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 622385ee4c00Smrg func_fatal_error "\`$vinfo' is not valid version information" 622485ee4c00Smrg ;; 622585ee4c00Smrg esac 622685ee4c00Smrg 622785ee4c00Smrg case $revision in 622885ee4c00Smrg 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]) ;; 622985ee4c00Smrg *) 623085ee4c00Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 623185ee4c00Smrg func_fatal_error "\`$vinfo' is not valid version information" 623285ee4c00Smrg ;; 623385ee4c00Smrg esac 623485ee4c00Smrg 623585ee4c00Smrg case $age in 623685ee4c00Smrg 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]) ;; 623785ee4c00Smrg *) 623885ee4c00Smrg func_error "AGE \`$age' must be a nonnegative integer" 623985ee4c00Smrg func_fatal_error "\`$vinfo' is not valid version information" 624085ee4c00Smrg ;; 624185ee4c00Smrg esac 624285ee4c00Smrg 624385ee4c00Smrg if test "$age" -gt "$current"; then 624485ee4c00Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 624585ee4c00Smrg func_fatal_error "\`$vinfo' is not valid version information" 624685ee4c00Smrg fi 624785ee4c00Smrg 624885ee4c00Smrg # Calculate the version variables. 624985ee4c00Smrg major= 625085ee4c00Smrg versuffix= 625185ee4c00Smrg verstring= 625285ee4c00Smrg case $version_type in 625385ee4c00Smrg none) ;; 625485ee4c00Smrg 625585ee4c00Smrg darwin) 625685ee4c00Smrg # Like Linux, but with the current version available in 625785ee4c00Smrg # verstring for coding it into the library header 625885ee4c00Smrg func_arith $current - $age 625985ee4c00Smrg major=.$func_arith_result 626085ee4c00Smrg versuffix="$major.$age.$revision" 626185ee4c00Smrg # Darwin ld doesn't like 0 for these options... 626285ee4c00Smrg func_arith $current + 1 626385ee4c00Smrg minor_current=$func_arith_result 626485ee4c00Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 626585ee4c00Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 626685ee4c00Smrg ;; 626785ee4c00Smrg 626885ee4c00Smrg freebsd-aout) 626985ee4c00Smrg major=".$current" 627085ee4c00Smrg versuffix=".$current.$revision"; 627185ee4c00Smrg ;; 627285ee4c00Smrg 627385ee4c00Smrg freebsd-elf) 627485ee4c00Smrg major=".$current" 627585ee4c00Smrg versuffix=".$current" 627685ee4c00Smrg ;; 627785ee4c00Smrg 627885ee4c00Smrg irix | nonstopux) 627985ee4c00Smrg if test "X$lt_irix_increment" = "Xno"; then 628085ee4c00Smrg func_arith $current - $age 628185ee4c00Smrg else 628285ee4c00Smrg func_arith $current - $age + 1 628385ee4c00Smrg fi 628485ee4c00Smrg major=$func_arith_result 628585ee4c00Smrg 628685ee4c00Smrg case $version_type in 628785ee4c00Smrg nonstopux) verstring_prefix=nonstopux ;; 628885ee4c00Smrg *) verstring_prefix=sgi ;; 628985ee4c00Smrg esac 629085ee4c00Smrg verstring="$verstring_prefix$major.$revision" 629185ee4c00Smrg 629285ee4c00Smrg # Add in all the interfaces that we are compatible with. 629385ee4c00Smrg loop=$revision 629485ee4c00Smrg while test "$loop" -ne 0; do 629585ee4c00Smrg func_arith $revision - $loop 629685ee4c00Smrg iface=$func_arith_result 629785ee4c00Smrg func_arith $loop - 1 629885ee4c00Smrg loop=$func_arith_result 629985ee4c00Smrg verstring="$verstring_prefix$major.$iface:$verstring" 630085ee4c00Smrg done 630185ee4c00Smrg 630285ee4c00Smrg # Before this point, $major must not contain `.'. 630385ee4c00Smrg major=.$major 630485ee4c00Smrg versuffix="$major.$revision" 630585ee4c00Smrg ;; 630685ee4c00Smrg 630785ee4c00Smrg linux) 630885ee4c00Smrg func_arith $current - $age 630985ee4c00Smrg major=.$func_arith_result 631085ee4c00Smrg versuffix="$major.$age.$revision" 631185ee4c00Smrg ;; 631285ee4c00Smrg 631385ee4c00Smrg osf) 631485ee4c00Smrg func_arith $current - $age 631585ee4c00Smrg major=.$func_arith_result 631685ee4c00Smrg versuffix=".$current.$age.$revision" 631785ee4c00Smrg verstring="$current.$age.$revision" 631885ee4c00Smrg 631985ee4c00Smrg # Add in all the interfaces that we are compatible with. 632085ee4c00Smrg loop=$age 632185ee4c00Smrg while test "$loop" -ne 0; do 632285ee4c00Smrg func_arith $current - $loop 632385ee4c00Smrg iface=$func_arith_result 632485ee4c00Smrg func_arith $loop - 1 632585ee4c00Smrg loop=$func_arith_result 632685ee4c00Smrg verstring="$verstring:${iface}.0" 632785ee4c00Smrg done 632885ee4c00Smrg 632985ee4c00Smrg # Make executables depend on our current version. 633085ee4c00Smrg verstring="$verstring:${current}.0" 633185ee4c00Smrg ;; 633285ee4c00Smrg 633385ee4c00Smrg qnx) 633485ee4c00Smrg major=".$current" 633585ee4c00Smrg versuffix=".$current" 633685ee4c00Smrg ;; 633785ee4c00Smrg 633885ee4c00Smrg sunos) 633985ee4c00Smrg major=".$current" 634085ee4c00Smrg versuffix=".$current.$revision" 634185ee4c00Smrg ;; 634285ee4c00Smrg 634385ee4c00Smrg windows) 634485ee4c00Smrg # Use '-' rather than '.', since we only want one 634585ee4c00Smrg # extension on DOS 8.3 filesystems. 634685ee4c00Smrg func_arith $current - $age 634785ee4c00Smrg major=$func_arith_result 634885ee4c00Smrg versuffix="-$major" 634985ee4c00Smrg ;; 635085ee4c00Smrg 635185ee4c00Smrg *) 635285ee4c00Smrg func_fatal_configuration "unknown library version type \`$version_type'" 635385ee4c00Smrg ;; 635485ee4c00Smrg esac 635585ee4c00Smrg 635685ee4c00Smrg # Clear the version info if we defaulted, and they specified a release. 635785ee4c00Smrg if test -z "$vinfo" && test -n "$release"; then 635885ee4c00Smrg major= 635985ee4c00Smrg case $version_type in 636085ee4c00Smrg darwin) 636185ee4c00Smrg # we can't check for "0.0" in archive_cmds due to quoting 636285ee4c00Smrg # problems, so we reset it completely 636385ee4c00Smrg verstring= 636485ee4c00Smrg ;; 636585ee4c00Smrg *) 636685ee4c00Smrg verstring="0.0" 636785ee4c00Smrg ;; 636885ee4c00Smrg esac 636985ee4c00Smrg if test "$need_version" = no; then 637085ee4c00Smrg versuffix= 637185ee4c00Smrg else 637285ee4c00Smrg versuffix=".0.0" 637385ee4c00Smrg fi 637485ee4c00Smrg fi 637585ee4c00Smrg 637685ee4c00Smrg # Remove version info from name if versioning should be avoided 637785ee4c00Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 637885ee4c00Smrg major= 637985ee4c00Smrg versuffix= 638085ee4c00Smrg verstring="" 638185ee4c00Smrg fi 638285ee4c00Smrg 638385ee4c00Smrg # Check to see if the archive will have undefined symbols. 638485ee4c00Smrg if test "$allow_undefined" = yes; then 638585ee4c00Smrg if test "$allow_undefined_flag" = unsupported; then 638685ee4c00Smrg func_warning "undefined symbols not allowed in $host shared libraries" 638785ee4c00Smrg build_libtool_libs=no 638885ee4c00Smrg build_old_libs=yes 638985ee4c00Smrg fi 639085ee4c00Smrg else 639185ee4c00Smrg # Don't allow undefined symbols. 639285ee4c00Smrg allow_undefined_flag="$no_undefined_flag" 639385ee4c00Smrg fi 639485ee4c00Smrg 639585ee4c00Smrg fi 639685ee4c00Smrg 639785ee4c00Smrg func_generate_dlsyms "$libname" "$libname" "yes" 639885ee4c00Smrg libobjs="$libobjs $symfileobj" 639985ee4c00Smrg test "X$libobjs" = "X " && libobjs= 640085ee4c00Smrg 640185ee4c00Smrg if test "$mode" != relink; then 640285ee4c00Smrg # Remove our outputs, but don't remove object files since they 640385ee4c00Smrg # may have been created when compiling PIC objects. 640485ee4c00Smrg removelist= 640585ee4c00Smrg tempremovelist=`$ECHO "$output_objdir/*"` 640685ee4c00Smrg for p in $tempremovelist; do 640785ee4c00Smrg case $p in 640885ee4c00Smrg *.$objext | *.gcno) 640985ee4c00Smrg ;; 641085ee4c00Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 641185ee4c00Smrg if test "X$precious_files_regex" != "X"; then 641285ee4c00Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 641385ee4c00Smrg then 641485ee4c00Smrg continue 641585ee4c00Smrg fi 641685ee4c00Smrg fi 641785ee4c00Smrg removelist="$removelist $p" 641885ee4c00Smrg ;; 641985ee4c00Smrg *) ;; 642085ee4c00Smrg esac 642185ee4c00Smrg done 642285ee4c00Smrg test -n "$removelist" && \ 642385ee4c00Smrg func_show_eval "${RM}r \$removelist" 642485ee4c00Smrg fi 642585ee4c00Smrg 642685ee4c00Smrg # Now set the variables for building old libraries. 642785ee4c00Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 642885ee4c00Smrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 642985ee4c00Smrg 643085ee4c00Smrg # Transform .lo files to .o files. 643185ee4c00Smrg oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 643285ee4c00Smrg fi 643385ee4c00Smrg 643485ee4c00Smrg # Eliminate all temporary directories. 643585ee4c00Smrg #for path in $notinst_path; do 643685ee4c00Smrg # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` 643785ee4c00Smrg # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` 643885ee4c00Smrg # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` 643985ee4c00Smrg #done 644085ee4c00Smrg 644185ee4c00Smrg if test -n "$xrpath"; then 644285ee4c00Smrg # If the user specified any rpath flags, then add them. 644385ee4c00Smrg temp_xrpath= 644485ee4c00Smrg for libdir in $xrpath; do 644585ee4c00Smrg temp_xrpath="$temp_xrpath -R$libdir" 644685ee4c00Smrg case "$finalize_rpath " in 644785ee4c00Smrg *" $libdir "*) ;; 644885ee4c00Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 644985ee4c00Smrg esac 645085ee4c00Smrg done 645185ee4c00Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 645285ee4c00Smrg dependency_libs="$temp_xrpath $dependency_libs" 645385ee4c00Smrg fi 645485ee4c00Smrg fi 645585ee4c00Smrg 645685ee4c00Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 645785ee4c00Smrg old_dlfiles="$dlfiles" 645885ee4c00Smrg dlfiles= 645985ee4c00Smrg for lib in $old_dlfiles; do 646085ee4c00Smrg case " $dlprefiles $dlfiles " in 646185ee4c00Smrg *" $lib "*) ;; 646285ee4c00Smrg *) dlfiles="$dlfiles $lib" ;; 646385ee4c00Smrg esac 646485ee4c00Smrg done 646585ee4c00Smrg 646685ee4c00Smrg # Make sure dlprefiles contains only unique files 646785ee4c00Smrg old_dlprefiles="$dlprefiles" 646885ee4c00Smrg dlprefiles= 646985ee4c00Smrg for lib in $old_dlprefiles; do 647085ee4c00Smrg case "$dlprefiles " in 647185ee4c00Smrg *" $lib "*) ;; 647285ee4c00Smrg *) dlprefiles="$dlprefiles $lib" ;; 647385ee4c00Smrg esac 647485ee4c00Smrg done 647585ee4c00Smrg 647685ee4c00Smrg if test "$build_libtool_libs" = yes; then 647785ee4c00Smrg if test -n "$rpath"; then 647885ee4c00Smrg case $host in 647985ee4c00Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) 648085ee4c00Smrg # these systems don't actually have a c library (as such)! 648185ee4c00Smrg ;; 648285ee4c00Smrg *-*-rhapsody* | *-*-darwin1.[012]) 648385ee4c00Smrg # Rhapsody C library is in the System framework 648485ee4c00Smrg deplibs="$deplibs System.ltframework" 648585ee4c00Smrg ;; 648685ee4c00Smrg *-*-netbsd*) 648785ee4c00Smrg # Don't link with libc until the a.out ld.so is fixed. 648885ee4c00Smrg ;; 648985ee4c00Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 649085ee4c00Smrg # Do not include libc due to us having libc/libc_r. 649185ee4c00Smrg ;; 649285ee4c00Smrg *-*-sco3.2v5* | *-*-sco5v6*) 649385ee4c00Smrg # Causes problems with __ctype 649485ee4c00Smrg ;; 649585ee4c00Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 649685ee4c00Smrg # Compiler inserts libc in the correct place for threads to work 649785ee4c00Smrg ;; 649885ee4c00Smrg *) 649985ee4c00Smrg # Add libc to deplibs on all other systems if necessary. 650085ee4c00Smrg if test "$build_libtool_need_lc" = "yes"; then 650185ee4c00Smrg deplibs="$deplibs -lc" 650285ee4c00Smrg fi 650385ee4c00Smrg ;; 650485ee4c00Smrg esac 650585ee4c00Smrg fi 650685ee4c00Smrg 650785ee4c00Smrg # Transform deplibs into only deplibs that can be linked in shared. 650885ee4c00Smrg name_save=$name 650985ee4c00Smrg libname_save=$libname 651085ee4c00Smrg release_save=$release 651185ee4c00Smrg versuffix_save=$versuffix 651285ee4c00Smrg major_save=$major 651385ee4c00Smrg # I'm not sure if I'm treating the release correctly. I think 651485ee4c00Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 651585ee4c00Smrg # add it in twice. Is that correct? 651685ee4c00Smrg release="" 651785ee4c00Smrg versuffix="" 651885ee4c00Smrg major="" 651985ee4c00Smrg newdeplibs= 652085ee4c00Smrg droppeddeps=no 652185ee4c00Smrg case $deplibs_check_method in 652285ee4c00Smrg pass_all) 652385ee4c00Smrg # Don't check for shared/static. Everything works. 652485ee4c00Smrg # This might be a little naive. We might want to check 652585ee4c00Smrg # whether the library exists or not. But this is on 652685ee4c00Smrg # osf3 & osf4 and I'm not really sure... Just 652785ee4c00Smrg # implementing what was already the behavior. 652885ee4c00Smrg newdeplibs=$deplibs 652985ee4c00Smrg ;; 653085ee4c00Smrg test_compile) 653185ee4c00Smrg # This code stresses the "libraries are programs" paradigm to its 653285ee4c00Smrg # limits. Maybe even breaks it. We compile a program, linking it 653385ee4c00Smrg # against the deplibs as a proxy for the library. Then we can check 653485ee4c00Smrg # whether they linked in statically or dynamically with ldd. 653585ee4c00Smrg $opt_dry_run || $RM conftest.c 653685ee4c00Smrg cat > conftest.c <<EOF 653785ee4c00Smrg int main() { return 0; } 653885ee4c00SmrgEOF 653985ee4c00Smrg $opt_dry_run || $RM conftest 654085ee4c00Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 654185ee4c00Smrg ldd_output=`ldd conftest` 654285ee4c00Smrg for i in $deplibs; do 654385ee4c00Smrg case $i in 654485ee4c00Smrg -l*) 654585ee4c00Smrg func_stripname -l '' "$i" 654685ee4c00Smrg name=$func_stripname_result 654785ee4c00Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 654885ee4c00Smrg case " $predeps $postdeps " in 654985ee4c00Smrg *" $i "*) 655085ee4c00Smrg newdeplibs="$newdeplibs $i" 655185ee4c00Smrg i="" 655285ee4c00Smrg ;; 655385ee4c00Smrg esac 655485ee4c00Smrg fi 655585ee4c00Smrg if test -n "$i" ; then 655685ee4c00Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 655785ee4c00Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 655885ee4c00Smrg set dummy $deplib_matches; shift 655985ee4c00Smrg deplib_match=$1 656085ee4c00Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 656185ee4c00Smrg newdeplibs="$newdeplibs $i" 656285ee4c00Smrg else 656385ee4c00Smrg droppeddeps=yes 656485ee4c00Smrg $ECHO 656585ee4c00Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 656685ee4c00Smrg $ECHO "*** I have the capability to make that library automatically link in when" 656785ee4c00Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 656885ee4c00Smrg $ECHO "*** shared version of the library, which I believe you do not have" 656985ee4c00Smrg $ECHO "*** because a test_compile did reveal that the linker did not use it for" 657085ee4c00Smrg $ECHO "*** its dynamic dependency list that programs get resolved with at runtime." 657185ee4c00Smrg fi 657285ee4c00Smrg fi 657385ee4c00Smrg ;; 657485ee4c00Smrg *) 657585ee4c00Smrg newdeplibs="$newdeplibs $i" 657685ee4c00Smrg ;; 657785ee4c00Smrg esac 657885ee4c00Smrg done 657985ee4c00Smrg else 658085ee4c00Smrg # Error occurred in the first compile. Let's try to salvage 658185ee4c00Smrg # the situation: Compile a separate program for each library. 658285ee4c00Smrg for i in $deplibs; do 658385ee4c00Smrg case $i in 658485ee4c00Smrg -l*) 658585ee4c00Smrg func_stripname -l '' "$i" 658685ee4c00Smrg name=$func_stripname_result 658785ee4c00Smrg $opt_dry_run || $RM conftest 658885ee4c00Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 658985ee4c00Smrg ldd_output=`ldd conftest` 659085ee4c00Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 659185ee4c00Smrg case " $predeps $postdeps " in 659285ee4c00Smrg *" $i "*) 659385ee4c00Smrg newdeplibs="$newdeplibs $i" 659485ee4c00Smrg i="" 659585ee4c00Smrg ;; 659685ee4c00Smrg esac 659785ee4c00Smrg fi 659885ee4c00Smrg if test -n "$i" ; then 659985ee4c00Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 660085ee4c00Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 660185ee4c00Smrg set dummy $deplib_matches; shift 660285ee4c00Smrg deplib_match=$1 660385ee4c00Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 660485ee4c00Smrg newdeplibs="$newdeplibs $i" 660585ee4c00Smrg else 660685ee4c00Smrg droppeddeps=yes 660785ee4c00Smrg $ECHO 660885ee4c00Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 660985ee4c00Smrg $ECHO "*** I have the capability to make that library automatically link in when" 661085ee4c00Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 661185ee4c00Smrg $ECHO "*** shared version of the library, which you do not appear to have" 661285ee4c00Smrg $ECHO "*** because a test_compile did reveal that the linker did not use this one" 661385ee4c00Smrg $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime." 661485ee4c00Smrg fi 661585ee4c00Smrg fi 661685ee4c00Smrg else 661785ee4c00Smrg droppeddeps=yes 661885ee4c00Smrg $ECHO 661985ee4c00Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 662085ee4c00Smrg $ECHO "*** make it link in! You will probably need to install it or some" 662185ee4c00Smrg $ECHO "*** library that it depends on before this library will be fully" 662285ee4c00Smrg $ECHO "*** functional. Installing it before continuing would be even better." 662385ee4c00Smrg fi 662485ee4c00Smrg ;; 662585ee4c00Smrg *) 662685ee4c00Smrg newdeplibs="$newdeplibs $i" 662785ee4c00Smrg ;; 662885ee4c00Smrg esac 662985ee4c00Smrg done 663085ee4c00Smrg fi 663185ee4c00Smrg ;; 663285ee4c00Smrg file_magic*) 663385ee4c00Smrg set dummy $deplibs_check_method; shift 663485ee4c00Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 663585ee4c00Smrg for a_deplib in $deplibs; do 663685ee4c00Smrg case $a_deplib in 663785ee4c00Smrg -l*) 663885ee4c00Smrg func_stripname -l '' "$a_deplib" 663985ee4c00Smrg name=$func_stripname_result 664085ee4c00Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 664185ee4c00Smrg case " $predeps $postdeps " in 664285ee4c00Smrg *" $a_deplib "*) 664385ee4c00Smrg newdeplibs="$newdeplibs $a_deplib" 664485ee4c00Smrg a_deplib="" 664585ee4c00Smrg ;; 664685ee4c00Smrg esac 664785ee4c00Smrg fi 664885ee4c00Smrg if test -n "$a_deplib" ; then 664985ee4c00Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 665085ee4c00Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 665185ee4c00Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 665285ee4c00Smrg for potent_lib in $potential_libs; do 665385ee4c00Smrg # Follow soft links. 665485ee4c00Smrg if ls -lLd "$potent_lib" 2>/dev/null | 665585ee4c00Smrg $GREP " -> " >/dev/null; then 665685ee4c00Smrg continue 665785ee4c00Smrg fi 665885ee4c00Smrg # The statement above tries to avoid entering an 665985ee4c00Smrg # endless loop below, in case of cyclic links. 666085ee4c00Smrg # We might still enter an endless loop, since a link 666185ee4c00Smrg # loop can be closed while we follow links, 666285ee4c00Smrg # but so what? 666385ee4c00Smrg potlib="$potent_lib" 666485ee4c00Smrg while test -h "$potlib" 2>/dev/null; do 666585ee4c00Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 666685ee4c00Smrg case $potliblink in 666785ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 666885ee4c00Smrg *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 666985ee4c00Smrg esac 667085ee4c00Smrg done 667185ee4c00Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 667285ee4c00Smrg $SED -e 10q | 667385ee4c00Smrg $EGREP "$file_magic_regex" > /dev/null; then 667485ee4c00Smrg newdeplibs="$newdeplibs $a_deplib" 667585ee4c00Smrg a_deplib="" 667685ee4c00Smrg break 2 667785ee4c00Smrg fi 667885ee4c00Smrg done 667985ee4c00Smrg done 668085ee4c00Smrg fi 668185ee4c00Smrg if test -n "$a_deplib" ; then 668285ee4c00Smrg droppeddeps=yes 668385ee4c00Smrg $ECHO 668485ee4c00Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 668585ee4c00Smrg $ECHO "*** I have the capability to make that library automatically link in when" 668685ee4c00Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 668785ee4c00Smrg $ECHO "*** shared version of the library, which you do not appear to have" 668885ee4c00Smrg $ECHO "*** because I did check the linker path looking for a file starting" 668985ee4c00Smrg if test -z "$potlib" ; then 669085ee4c00Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 669185ee4c00Smrg else 669285ee4c00Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 669385ee4c00Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 669485ee4c00Smrg fi 669585ee4c00Smrg fi 669685ee4c00Smrg ;; 669785ee4c00Smrg *) 669885ee4c00Smrg # Add a -L argument. 669985ee4c00Smrg newdeplibs="$newdeplibs $a_deplib" 670085ee4c00Smrg ;; 670185ee4c00Smrg esac 670285ee4c00Smrg done # Gone through all deplibs. 670385ee4c00Smrg ;; 670485ee4c00Smrg match_pattern*) 670585ee4c00Smrg set dummy $deplibs_check_method; shift 670685ee4c00Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 670785ee4c00Smrg for a_deplib in $deplibs; do 670885ee4c00Smrg case $a_deplib in 670985ee4c00Smrg -l*) 671085ee4c00Smrg func_stripname -l '' "$a_deplib" 671185ee4c00Smrg name=$func_stripname_result 671285ee4c00Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 671385ee4c00Smrg case " $predeps $postdeps " in 671485ee4c00Smrg *" $a_deplib "*) 671585ee4c00Smrg newdeplibs="$newdeplibs $a_deplib" 671685ee4c00Smrg a_deplib="" 671785ee4c00Smrg ;; 671885ee4c00Smrg esac 671985ee4c00Smrg fi 672085ee4c00Smrg if test -n "$a_deplib" ; then 672185ee4c00Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 672285ee4c00Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 672385ee4c00Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 672485ee4c00Smrg for potent_lib in $potential_libs; do 672585ee4c00Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 672685ee4c00Smrg if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ 672785ee4c00Smrg $EGREP "$match_pattern_regex" > /dev/null; then 672885ee4c00Smrg newdeplibs="$newdeplibs $a_deplib" 672985ee4c00Smrg a_deplib="" 673085ee4c00Smrg break 2 673185ee4c00Smrg fi 673285ee4c00Smrg done 673385ee4c00Smrg done 673485ee4c00Smrg fi 673585ee4c00Smrg if test -n "$a_deplib" ; then 673685ee4c00Smrg droppeddeps=yes 673785ee4c00Smrg $ECHO 673885ee4c00Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 673985ee4c00Smrg $ECHO "*** I have the capability to make that library automatically link in when" 674085ee4c00Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 674185ee4c00Smrg $ECHO "*** shared version of the library, which you do not appear to have" 674285ee4c00Smrg $ECHO "*** because I did check the linker path looking for a file starting" 674385ee4c00Smrg if test -z "$potlib" ; then 674485ee4c00Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 674585ee4c00Smrg else 674685ee4c00Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 674785ee4c00Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 674885ee4c00Smrg fi 674985ee4c00Smrg fi 675085ee4c00Smrg ;; 675185ee4c00Smrg *) 675285ee4c00Smrg # Add a -L argument. 675385ee4c00Smrg newdeplibs="$newdeplibs $a_deplib" 675485ee4c00Smrg ;; 675585ee4c00Smrg esac 675685ee4c00Smrg done # Gone through all deplibs. 675785ee4c00Smrg ;; 675885ee4c00Smrg none | unknown | *) 675985ee4c00Smrg newdeplibs="" 676085ee4c00Smrg tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ 676185ee4c00Smrg -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` 676285ee4c00Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 676385ee4c00Smrg for i in $predeps $postdeps ; do 676485ee4c00Smrg # can't use Xsed below, because $i might contain '/' 676585ee4c00Smrg tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` 676685ee4c00Smrg done 676785ee4c00Smrg fi 676885ee4c00Smrg if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | 676985ee4c00Smrg $GREP . >/dev/null; then 677085ee4c00Smrg $ECHO 677185ee4c00Smrg if test "X$deplibs_check_method" = "Xnone"; then 677285ee4c00Smrg $ECHO "*** Warning: inter-library dependencies are not supported in this platform." 677385ee4c00Smrg else 677485ee4c00Smrg $ECHO "*** Warning: inter-library dependencies are not known to be supported." 677585ee4c00Smrg fi 677685ee4c00Smrg $ECHO "*** All declared inter-library dependencies are being dropped." 677785ee4c00Smrg droppeddeps=yes 677885ee4c00Smrg fi 677985ee4c00Smrg ;; 678085ee4c00Smrg esac 678185ee4c00Smrg versuffix=$versuffix_save 678285ee4c00Smrg major=$major_save 678385ee4c00Smrg release=$release_save 678485ee4c00Smrg libname=$libname_save 678585ee4c00Smrg name=$name_save 678685ee4c00Smrg 678785ee4c00Smrg case $host in 678885ee4c00Smrg *-*-rhapsody* | *-*-darwin1.[012]) 678985ee4c00Smrg # On Rhapsody replace the C library with the System framework 679085ee4c00Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 679185ee4c00Smrg ;; 679285ee4c00Smrg esac 679385ee4c00Smrg 679485ee4c00Smrg if test "$droppeddeps" = yes; then 679585ee4c00Smrg if test "$module" = yes; then 679685ee4c00Smrg $ECHO 679785ee4c00Smrg $ECHO "*** Warning: libtool could not satisfy all declared inter-library" 679885ee4c00Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 679985ee4c00Smrg $ECHO "*** a static module, that should work as long as the dlopening" 680085ee4c00Smrg $ECHO "*** application is linked with the -dlopen flag." 680185ee4c00Smrg if test -z "$global_symbol_pipe"; then 680285ee4c00Smrg $ECHO 680385ee4c00Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 680485ee4c00Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 680585ee4c00Smrg $ECHO "*** not find such a program. So, this module is probably useless." 680685ee4c00Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 680785ee4c00Smrg fi 680885ee4c00Smrg if test "$build_old_libs" = no; then 680985ee4c00Smrg oldlibs="$output_objdir/$libname.$libext" 681085ee4c00Smrg build_libtool_libs=module 681185ee4c00Smrg build_old_libs=yes 681285ee4c00Smrg else 681385ee4c00Smrg build_libtool_libs=no 681485ee4c00Smrg fi 681585ee4c00Smrg else 681685ee4c00Smrg $ECHO "*** The inter-library dependencies that have been dropped here will be" 681785ee4c00Smrg $ECHO "*** automatically added whenever a program is linked with this library" 681885ee4c00Smrg $ECHO "*** or is declared to -dlopen it." 681985ee4c00Smrg 682085ee4c00Smrg if test "$allow_undefined" = no; then 682185ee4c00Smrg $ECHO 682285ee4c00Smrg $ECHO "*** Since this library must not contain undefined symbols," 682385ee4c00Smrg $ECHO "*** because either the platform does not support them or" 682485ee4c00Smrg $ECHO "*** it was explicitly requested with -no-undefined," 682585ee4c00Smrg $ECHO "*** libtool will only create a static version of it." 682685ee4c00Smrg if test "$build_old_libs" = no; then 682785ee4c00Smrg oldlibs="$output_objdir/$libname.$libext" 682885ee4c00Smrg build_libtool_libs=module 682985ee4c00Smrg build_old_libs=yes 683085ee4c00Smrg else 683185ee4c00Smrg build_libtool_libs=no 683285ee4c00Smrg fi 683385ee4c00Smrg fi 683485ee4c00Smrg fi 683585ee4c00Smrg fi 683685ee4c00Smrg # Done checking deplibs! 683785ee4c00Smrg deplibs=$newdeplibs 683885ee4c00Smrg fi 683985ee4c00Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 684085ee4c00Smrg case $host in 684185ee4c00Smrg *-*-darwin*) 684285ee4c00Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684385ee4c00Smrg new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684485ee4c00Smrg deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684585ee4c00Smrg ;; 684685ee4c00Smrg esac 684785ee4c00Smrg 684885ee4c00Smrg # move library search paths that coincide with paths to not yet 684985ee4c00Smrg # installed libraries to the beginning of the library search list 685085ee4c00Smrg new_libs= 685185ee4c00Smrg for path in $notinst_path; do 685285ee4c00Smrg case " $new_libs " in 685385ee4c00Smrg *" -L$path/$objdir "*) ;; 685485ee4c00Smrg *) 685585ee4c00Smrg case " $deplibs " in 685685ee4c00Smrg *" -L$path/$objdir "*) 685785ee4c00Smrg new_libs="$new_libs -L$path/$objdir" ;; 685885ee4c00Smrg esac 685985ee4c00Smrg ;; 686085ee4c00Smrg esac 686185ee4c00Smrg done 686285ee4c00Smrg for deplib in $deplibs; do 686385ee4c00Smrg case $deplib in 686485ee4c00Smrg -L*) 686585ee4c00Smrg case " $new_libs " in 686685ee4c00Smrg *" $deplib "*) ;; 686785ee4c00Smrg *) new_libs="$new_libs $deplib" ;; 686885ee4c00Smrg esac 686985ee4c00Smrg ;; 687085ee4c00Smrg *) new_libs="$new_libs $deplib" ;; 687185ee4c00Smrg esac 687285ee4c00Smrg done 687385ee4c00Smrg deplibs="$new_libs" 687485ee4c00Smrg 687585ee4c00Smrg # All the library-specific variables (install_libdir is set above). 687685ee4c00Smrg library_names= 687785ee4c00Smrg old_library= 687885ee4c00Smrg dlname= 687985ee4c00Smrg 688085ee4c00Smrg # Test again, we may have decided not to build it any more 688185ee4c00Smrg if test "$build_libtool_libs" = yes; then 688285ee4c00Smrg if test "$hardcode_into_libs" = yes; then 688385ee4c00Smrg # Hardcode the library paths 688485ee4c00Smrg hardcode_libdirs= 688585ee4c00Smrg dep_rpath= 688685ee4c00Smrg rpath="$finalize_rpath" 688785ee4c00Smrg test "$mode" != relink && rpath="$compile_rpath$rpath" 688885ee4c00Smrg for libdir in $rpath; do 688985ee4c00Smrg if test -n "$hardcode_libdir_flag_spec"; then 689085ee4c00Smrg if test -n "$hardcode_libdir_separator"; then 689185ee4c00Smrg if test -z "$hardcode_libdirs"; then 689285ee4c00Smrg hardcode_libdirs="$libdir" 689385ee4c00Smrg else 689485ee4c00Smrg # Just accumulate the unique libdirs. 689585ee4c00Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 689685ee4c00Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 689785ee4c00Smrg ;; 689885ee4c00Smrg *) 689985ee4c00Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 690085ee4c00Smrg ;; 690185ee4c00Smrg esac 690285ee4c00Smrg fi 690385ee4c00Smrg else 690485ee4c00Smrg eval flag=\"$hardcode_libdir_flag_spec\" 690585ee4c00Smrg dep_rpath="$dep_rpath $flag" 690685ee4c00Smrg fi 690785ee4c00Smrg elif test -n "$runpath_var"; then 690885ee4c00Smrg case "$perm_rpath " in 690985ee4c00Smrg *" $libdir "*) ;; 691085ee4c00Smrg *) perm_rpath="$perm_rpath $libdir" ;; 691185ee4c00Smrg esac 691285ee4c00Smrg fi 691385ee4c00Smrg done 691485ee4c00Smrg # Substitute the hardcoded libdirs into the rpath. 691585ee4c00Smrg if test -n "$hardcode_libdir_separator" && 691685ee4c00Smrg test -n "$hardcode_libdirs"; then 691785ee4c00Smrg libdir="$hardcode_libdirs" 691885ee4c00Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 691985ee4c00Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 692085ee4c00Smrg else 692185ee4c00Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 692285ee4c00Smrg fi 692385ee4c00Smrg fi 692485ee4c00Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 692585ee4c00Smrg # We should set the runpath_var. 692685ee4c00Smrg rpath= 692785ee4c00Smrg for dir in $perm_rpath; do 692885ee4c00Smrg rpath="$rpath$dir:" 692985ee4c00Smrg done 693085ee4c00Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 693185ee4c00Smrg fi 693285ee4c00Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 693385ee4c00Smrg fi 6934692f60a7Smrg 693585ee4c00Smrg shlibpath="$finalize_shlibpath" 693685ee4c00Smrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 693785ee4c00Smrg if test -n "$shlibpath"; then 693885ee4c00Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 693985ee4c00Smrg fi 6940692f60a7Smrg 694185ee4c00Smrg # Get the real and link names of the library. 694285ee4c00Smrg eval shared_ext=\"$shrext_cmds\" 694385ee4c00Smrg eval library_names=\"$library_names_spec\" 694485ee4c00Smrg set dummy $library_names 694585ee4c00Smrg shift 694685ee4c00Smrg realname="$1" 694785ee4c00Smrg shift 6948692f60a7Smrg 694985ee4c00Smrg if test -n "$soname_spec"; then 695085ee4c00Smrg eval soname=\"$soname_spec\" 695185ee4c00Smrg else 695285ee4c00Smrg soname="$realname" 695385ee4c00Smrg fi 695485ee4c00Smrg if test -z "$dlname"; then 695585ee4c00Smrg dlname=$soname 695685ee4c00Smrg fi 6957692f60a7Smrg 695885ee4c00Smrg lib="$output_objdir/$realname" 695985ee4c00Smrg linknames= 696085ee4c00Smrg for link 696185ee4c00Smrg do 696285ee4c00Smrg linknames="$linknames $link" 696385ee4c00Smrg done 6964692f60a7Smrg 696585ee4c00Smrg # Use standard objects if they are pic 696685ee4c00Smrg test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 696785ee4c00Smrg test "X$libobjs" = "X " && libobjs= 6968692f60a7Smrg 696985ee4c00Smrg delfiles= 697085ee4c00Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 697185ee4c00Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 697285ee4c00Smrg export_symbols="$output_objdir/$libname.uexp" 697385ee4c00Smrg delfiles="$delfiles $export_symbols" 697485ee4c00Smrg fi 6975692f60a7Smrg 697685ee4c00Smrg orig_export_symbols= 697785ee4c00Smrg case $host_os in 697885ee4c00Smrg cygwin* | mingw* | cegcc*) 697985ee4c00Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 698085ee4c00Smrg # exporting using user supplied symfile 698185ee4c00Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 698285ee4c00Smrg # and it's NOT already a .def file. Must figure out 698385ee4c00Smrg # which of the given symbols are data symbols and tag 698485ee4c00Smrg # them as such. So, trigger use of export_symbols_cmds. 698585ee4c00Smrg # export_symbols gets reassigned inside the "prepare 698685ee4c00Smrg # the list of exported symbols" if statement, so the 698785ee4c00Smrg # include_expsyms logic still works. 698885ee4c00Smrg orig_export_symbols="$export_symbols" 698985ee4c00Smrg export_symbols= 699085ee4c00Smrg always_export_symbols=yes 699185ee4c00Smrg fi 699285ee4c00Smrg fi 699385ee4c00Smrg ;; 699485ee4c00Smrg esac 6995692f60a7Smrg 699685ee4c00Smrg # Prepare the list of exported symbols 699785ee4c00Smrg if test -z "$export_symbols"; then 699885ee4c00Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 699985ee4c00Smrg func_verbose "generating symbol list for \`$libname.la'" 700085ee4c00Smrg export_symbols="$output_objdir/$libname.exp" 700185ee4c00Smrg $opt_dry_run || $RM $export_symbols 700285ee4c00Smrg cmds=$export_symbols_cmds 700385ee4c00Smrg save_ifs="$IFS"; IFS='~' 700485ee4c00Smrg for cmd in $cmds; do 700585ee4c00Smrg IFS="$save_ifs" 700685ee4c00Smrg eval cmd=\"$cmd\" 700785ee4c00Smrg func_len " $cmd" 700885ee4c00Smrg len=$func_len_result 700985ee4c00Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 701085ee4c00Smrg func_show_eval "$cmd" 'exit $?' 701185ee4c00Smrg skipped_export=false 701285ee4c00Smrg else 701385ee4c00Smrg # The command line is too long to execute in one step. 701485ee4c00Smrg func_verbose "using reloadable object file for export list..." 701585ee4c00Smrg skipped_export=: 701685ee4c00Smrg # Break out early, otherwise skipped_export may be 701785ee4c00Smrg # set to false by a later but shorter cmd. 701885ee4c00Smrg break 701985ee4c00Smrg fi 702085ee4c00Smrg done 702185ee4c00Smrg IFS="$save_ifs" 702285ee4c00Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 702385ee4c00Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 702485ee4c00Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 702585ee4c00Smrg fi 702685ee4c00Smrg fi 7027692f60a7Smrg fi 7028692f60a7Smrg 702985ee4c00Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 703085ee4c00Smrg tmp_export_symbols="$export_symbols" 703185ee4c00Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 703285ee4c00Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 703385ee4c00Smrg fi 7034692f60a7Smrg 703585ee4c00Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 703685ee4c00Smrg # The given exports_symbols file has to be filtered, so filter it. 703785ee4c00Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 703885ee4c00Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 703985ee4c00Smrg # 's' commands which not all seds can handle. GNU sed should be fine 704085ee4c00Smrg # though. Also, the filter scales superlinearly with the number of 704185ee4c00Smrg # global variables. join(1) would be nice here, but unfortunately 704285ee4c00Smrg # isn't a blessed tool. 704385ee4c00Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 704485ee4c00Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 704585ee4c00Smrg export_symbols=$output_objdir/$libname.def 704685ee4c00Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 704785ee4c00Smrg fi 7048692f60a7Smrg 704985ee4c00Smrg tmp_deplibs= 705085ee4c00Smrg for test_deplib in $deplibs; do 705185ee4c00Smrg case " $convenience " in 705285ee4c00Smrg *" $test_deplib "*) ;; 705385ee4c00Smrg *) 705485ee4c00Smrg tmp_deplibs="$tmp_deplibs $test_deplib" 705585ee4c00Smrg ;; 705685ee4c00Smrg esac 705785ee4c00Smrg done 705885ee4c00Smrg deplibs="$tmp_deplibs" 7059692f60a7Smrg 706085ee4c00Smrg if test -n "$convenience"; then 706185ee4c00Smrg if test -n "$whole_archive_flag_spec" && 706285ee4c00Smrg test "$compiler_needs_object" = yes && 706385ee4c00Smrg test -z "$libobjs"; then 706485ee4c00Smrg # extract the archives, so we have objects to list. 706585ee4c00Smrg # TODO: could optimize this to just extract one archive. 706685ee4c00Smrg whole_archive_flag_spec= 706785ee4c00Smrg fi 706885ee4c00Smrg if test -n "$whole_archive_flag_spec"; then 706985ee4c00Smrg save_libobjs=$libobjs 707085ee4c00Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 707185ee4c00Smrg test "X$libobjs" = "X " && libobjs= 707285ee4c00Smrg else 707385ee4c00Smrg gentop="$output_objdir/${outputname}x" 707485ee4c00Smrg generated="$generated $gentop" 7075692f60a7Smrg 707685ee4c00Smrg func_extract_archives $gentop $convenience 707785ee4c00Smrg libobjs="$libobjs $func_extract_archives_result" 707885ee4c00Smrg test "X$libobjs" = "X " && libobjs= 707985ee4c00Smrg fi 7080692f60a7Smrg fi 7081692f60a7Smrg 708285ee4c00Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 708385ee4c00Smrg eval flag=\"$thread_safe_flag_spec\" 708485ee4c00Smrg linker_flags="$linker_flags $flag" 7085692f60a7Smrg fi 7086692f60a7Smrg 708785ee4c00Smrg # Make a backup of the uninstalled library when relinking 708885ee4c00Smrg if test "$mode" = relink; then 708985ee4c00Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 709085ee4c00Smrg fi 7091692f60a7Smrg 709285ee4c00Smrg # Do each of the archive commands. 709385ee4c00Smrg if test "$module" = yes && test -n "$module_cmds" ; then 709485ee4c00Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 709585ee4c00Smrg eval test_cmds=\"$module_expsym_cmds\" 709685ee4c00Smrg cmds=$module_expsym_cmds 709785ee4c00Smrg else 709885ee4c00Smrg eval test_cmds=\"$module_cmds\" 709985ee4c00Smrg cmds=$module_cmds 710085ee4c00Smrg fi 7101692f60a7Smrg else 710285ee4c00Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 710385ee4c00Smrg eval test_cmds=\"$archive_expsym_cmds\" 710485ee4c00Smrg cmds=$archive_expsym_cmds 710585ee4c00Smrg else 710685ee4c00Smrg eval test_cmds=\"$archive_cmds\" 710785ee4c00Smrg cmds=$archive_cmds 710885ee4c00Smrg fi 7109692f60a7Smrg fi 7110692f60a7Smrg 711185ee4c00Smrg if test "X$skipped_export" != "X:" && 711285ee4c00Smrg func_len " $test_cmds" && 711385ee4c00Smrg len=$func_len_result && 711485ee4c00Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 711585ee4c00Smrg : 711685ee4c00Smrg else 711785ee4c00Smrg # The command line is too long to link in one step, link piecewise 711885ee4c00Smrg # or, if using GNU ld and skipped_export is not :, use a linker 711985ee4c00Smrg # script. 7120692f60a7Smrg 712185ee4c00Smrg # Save the value of $output and $libobjs because we want to 712285ee4c00Smrg # use them later. If we have whole_archive_flag_spec, we 712385ee4c00Smrg # want to use save_libobjs as it was before 712485ee4c00Smrg # whole_archive_flag_spec was expanded, because we can't 712585ee4c00Smrg # assume the linker understands whole_archive_flag_spec. 712685ee4c00Smrg # This may have to be revisited, in case too many 712785ee4c00Smrg # convenience libraries get linked in and end up exceeding 712885ee4c00Smrg # the spec. 712985ee4c00Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 713085ee4c00Smrg save_libobjs=$libobjs 713185ee4c00Smrg fi 713285ee4c00Smrg save_output=$output 713385ee4c00Smrg output_la=`$ECHO "X$output" | $Xsed -e "$basename"` 7134692f60a7Smrg 713585ee4c00Smrg # Clear the reloadable object creation command queue and 713685ee4c00Smrg # initialize k to one. 713785ee4c00Smrg test_cmds= 713885ee4c00Smrg concat_cmds= 713985ee4c00Smrg objlist= 714085ee4c00Smrg last_robj= 714185ee4c00Smrg k=1 714285ee4c00Smrg 714385ee4c00Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 714485ee4c00Smrg output=${output_objdir}/${output_la}.lnkscript 714585ee4c00Smrg func_verbose "creating GNU ld script: $output" 714685ee4c00Smrg $ECHO 'INPUT (' > $output 714785ee4c00Smrg for obj in $save_libobjs 7148692f60a7Smrg do 714985ee4c00Smrg $ECHO "$obj" >> $output 715085ee4c00Smrg done 715185ee4c00Smrg $ECHO ')' >> $output 715285ee4c00Smrg delfiles="$delfiles $output" 715385ee4c00Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 715485ee4c00Smrg output=${output_objdir}/${output_la}.lnk 715585ee4c00Smrg func_verbose "creating linker input file list: $output" 715685ee4c00Smrg : > $output 715785ee4c00Smrg set x $save_libobjs 715885ee4c00Smrg shift 715985ee4c00Smrg firstobj= 716085ee4c00Smrg if test "$compiler_needs_object" = yes; then 716185ee4c00Smrg firstobj="$1 " 716285ee4c00Smrg shift 716385ee4c00Smrg fi 716485ee4c00Smrg for obj 716585ee4c00Smrg do 716685ee4c00Smrg $ECHO "$obj" >> $output 716785ee4c00Smrg done 716885ee4c00Smrg delfiles="$delfiles $output" 716985ee4c00Smrg output=$firstobj\"$file_list_spec$output\" 717085ee4c00Smrg else 717185ee4c00Smrg if test -n "$save_libobjs"; then 717285ee4c00Smrg func_verbose "creating reloadable object files..." 717385ee4c00Smrg output=$output_objdir/$output_la-${k}.$objext 717485ee4c00Smrg eval test_cmds=\"$reload_cmds\" 717585ee4c00Smrg func_len " $test_cmds" 717685ee4c00Smrg len0=$func_len_result 717785ee4c00Smrg len=$len0 717885ee4c00Smrg 717985ee4c00Smrg # Loop over the list of objects to be linked. 718085ee4c00Smrg for obj in $save_libobjs 718185ee4c00Smrg do 718285ee4c00Smrg func_len " $obj" 718385ee4c00Smrg func_arith $len + $func_len_result 718485ee4c00Smrg len=$func_arith_result 718585ee4c00Smrg if test "X$objlist" = X || 718685ee4c00Smrg test "$len" -lt "$max_cmd_len"; then 718785ee4c00Smrg func_append objlist " $obj" 718885ee4c00Smrg else 718985ee4c00Smrg # The command $test_cmds is almost too long, add a 719085ee4c00Smrg # command to the queue. 719185ee4c00Smrg if test "$k" -eq 1 ; then 719285ee4c00Smrg # The first file doesn't have a previous command to add. 719385ee4c00Smrg eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 719485ee4c00Smrg else 719585ee4c00Smrg # All subsequent reloadable object files will link in 719685ee4c00Smrg # the last one created. 719785ee4c00Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" 719885ee4c00Smrg fi 719985ee4c00Smrg last_robj=$output_objdir/$output_la-${k}.$objext 720085ee4c00Smrg func_arith $k + 1 720185ee4c00Smrg k=$func_arith_result 720285ee4c00Smrg output=$output_objdir/$output_la-${k}.$objext 720385ee4c00Smrg objlist=$obj 720485ee4c00Smrg func_len " $last_robj" 720585ee4c00Smrg func_arith $len0 + $func_len_result 720685ee4c00Smrg len=$func_arith_result 720785ee4c00Smrg fi 720885ee4c00Smrg done 720985ee4c00Smrg # Handle the remaining objects by creating one last 721085ee4c00Smrg # reloadable object file. All subsequent reloadable object 721185ee4c00Smrg # files will link in the last one created. 721285ee4c00Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 721385ee4c00Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 721485ee4c00Smrg if test -n "$last_robj"; then 721585ee4c00Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 721685ee4c00Smrg fi 721785ee4c00Smrg delfiles="$delfiles $output" 7218692f60a7Smrg 721985ee4c00Smrg else 722085ee4c00Smrg output= 722185ee4c00Smrg fi 7222692f60a7Smrg 722385ee4c00Smrg if ${skipped_export-false}; then 722485ee4c00Smrg func_verbose "generating symbol list for \`$libname.la'" 722585ee4c00Smrg export_symbols="$output_objdir/$libname.exp" 722685ee4c00Smrg $opt_dry_run || $RM $export_symbols 722785ee4c00Smrg libobjs=$output 722885ee4c00Smrg # Append the command to create the export file. 722985ee4c00Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 723085ee4c00Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 723185ee4c00Smrg if test -n "$last_robj"; then 723285ee4c00Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 723385ee4c00Smrg fi 7234692f60a7Smrg fi 7235692f60a7Smrg 723685ee4c00Smrg test -n "$save_libobjs" && 723785ee4c00Smrg func_verbose "creating a temporary reloadable object file: $output" 7238692f60a7Smrg 723985ee4c00Smrg # Loop through the commands generated above and execute them. 724085ee4c00Smrg save_ifs="$IFS"; IFS='~' 724185ee4c00Smrg for cmd in $concat_cmds; do 724285ee4c00Smrg IFS="$save_ifs" 724385ee4c00Smrg $opt_silent || { 724485ee4c00Smrg func_quote_for_expand "$cmd" 724585ee4c00Smrg eval "func_echo $func_quote_for_expand_result" 724685ee4c00Smrg } 724785ee4c00Smrg $opt_dry_run || eval "$cmd" || { 724885ee4c00Smrg lt_exit=$? 724985ee4c00Smrg 725085ee4c00Smrg # Restore the uninstalled library and exit 725185ee4c00Smrg if test "$mode" = relink; then 725285ee4c00Smrg ( cd "$output_objdir" && \ 725385ee4c00Smrg $RM "${realname}T" && \ 725485ee4c00Smrg $MV "${realname}U" "$realname" ) 725585ee4c00Smrg fi 7256692f60a7Smrg 725785ee4c00Smrg exit $lt_exit 725885ee4c00Smrg } 725985ee4c00Smrg done 726085ee4c00Smrg IFS="$save_ifs" 7261692f60a7Smrg 726285ee4c00Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 726385ee4c00Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 726485ee4c00Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7265692f60a7Smrg fi 7266692f60a7Smrg fi 7267692f60a7Smrg 726885ee4c00Smrg if ${skipped_export-false}; then 726985ee4c00Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 727085ee4c00Smrg tmp_export_symbols="$export_symbols" 727185ee4c00Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 727285ee4c00Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 727385ee4c00Smrg fi 7274692f60a7Smrg 727585ee4c00Smrg if test -n "$orig_export_symbols"; then 727685ee4c00Smrg # The given exports_symbols file has to be filtered, so filter it. 727785ee4c00Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 727885ee4c00Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 727985ee4c00Smrg # 's' commands which not all seds can handle. GNU sed should be fine 728085ee4c00Smrg # though. Also, the filter scales superlinearly with the number of 728185ee4c00Smrg # global variables. join(1) would be nice here, but unfortunately 728285ee4c00Smrg # isn't a blessed tool. 728385ee4c00Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 728485ee4c00Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 728585ee4c00Smrg export_symbols=$output_objdir/$libname.def 728685ee4c00Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 728785ee4c00Smrg fi 728885ee4c00Smrg fi 7289692f60a7Smrg 729085ee4c00Smrg libobjs=$output 729185ee4c00Smrg # Restore the value of output. 729285ee4c00Smrg output=$save_output 7293692f60a7Smrg 729485ee4c00Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 729585ee4c00Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 729685ee4c00Smrg test "X$libobjs" = "X " && libobjs= 729785ee4c00Smrg fi 729885ee4c00Smrg # Expand the library linking commands again to reset the 729985ee4c00Smrg # value of $libobjs for piecewise linking. 7300692f60a7Smrg 730185ee4c00Smrg # Do each of the archive commands. 730285ee4c00Smrg if test "$module" = yes && test -n "$module_cmds" ; then 730385ee4c00Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 730485ee4c00Smrg cmds=$module_expsym_cmds 730585ee4c00Smrg else 730685ee4c00Smrg cmds=$module_cmds 7307692f60a7Smrg fi 7308692f60a7Smrg else 730985ee4c00Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 731085ee4c00Smrg cmds=$archive_expsym_cmds 731185ee4c00Smrg else 731285ee4c00Smrg cmds=$archive_cmds 731385ee4c00Smrg fi 7314692f60a7Smrg fi 731585ee4c00Smrg fi 7316692f60a7Smrg 731785ee4c00Smrg if test -n "$delfiles"; then 731885ee4c00Smrg # Append the command to remove temporary files to $cmds. 731985ee4c00Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 732085ee4c00Smrg fi 7321692f60a7Smrg 732285ee4c00Smrg # Add any objects from preloaded convenience libraries 732385ee4c00Smrg if test -n "$dlprefiles"; then 732485ee4c00Smrg gentop="$output_objdir/${outputname}x" 732585ee4c00Smrg generated="$generated $gentop" 7326692f60a7Smrg 732785ee4c00Smrg func_extract_archives $gentop $dlprefiles 732885ee4c00Smrg libobjs="$libobjs $func_extract_archives_result" 732985ee4c00Smrg test "X$libobjs" = "X " && libobjs= 733085ee4c00Smrg fi 7331692f60a7Smrg 733285ee4c00Smrg save_ifs="$IFS"; IFS='~' 733385ee4c00Smrg for cmd in $cmds; do 733485ee4c00Smrg IFS="$save_ifs" 733585ee4c00Smrg eval cmd=\"$cmd\" 733685ee4c00Smrg $opt_silent || { 733785ee4c00Smrg func_quote_for_expand "$cmd" 733885ee4c00Smrg eval "func_echo $func_quote_for_expand_result" 733985ee4c00Smrg } 734085ee4c00Smrg $opt_dry_run || eval "$cmd" || { 734185ee4c00Smrg lt_exit=$? 7342692f60a7Smrg 734385ee4c00Smrg # Restore the uninstalled library and exit 734485ee4c00Smrg if test "$mode" = relink; then 734585ee4c00Smrg ( cd "$output_objdir" && \ 734685ee4c00Smrg $RM "${realname}T" && \ 734785ee4c00Smrg $MV "${realname}U" "$realname" ) 734885ee4c00Smrg fi 7349692f60a7Smrg 735085ee4c00Smrg exit $lt_exit 735185ee4c00Smrg } 735285ee4c00Smrg done 735385ee4c00Smrg IFS="$save_ifs" 7354692f60a7Smrg 735585ee4c00Smrg # Restore the uninstalled library and exit 735685ee4c00Smrg if test "$mode" = relink; then 735785ee4c00Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 7358692f60a7Smrg 735985ee4c00Smrg if test -n "$convenience"; then 736085ee4c00Smrg if test -z "$whole_archive_flag_spec"; then 736185ee4c00Smrg func_show_eval '${RM}r "$gentop"' 736285ee4c00Smrg fi 736385ee4c00Smrg fi 7364692f60a7Smrg 736585ee4c00Smrg exit $EXIT_SUCCESS 736685ee4c00Smrg fi 736785ee4c00Smrg 736885ee4c00Smrg # Create links to the real library. 736985ee4c00Smrg for linkname in $linknames; do 737085ee4c00Smrg if test "$realname" != "$linkname"; then 737185ee4c00Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 7372692f60a7Smrg fi 7373692f60a7Smrg done 7374692f60a7Smrg 737585ee4c00Smrg # If -module or -export-dynamic was specified, set the dlname. 737685ee4c00Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 737785ee4c00Smrg # On all known operating systems, these are identical. 737885ee4c00Smrg dlname="$soname" 737985ee4c00Smrg fi 738085ee4c00Smrg fi 7381692f60a7Smrg ;; 7382692f60a7Smrg 738385ee4c00Smrg obj) 738485ee4c00Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 738585ee4c00Smrg func_warning "\`-dlopen' is ignored for objects" 738685ee4c00Smrg fi 7387692f60a7Smrg 738885ee4c00Smrg case " $deplibs" in 738985ee4c00Smrg *\ -l* | *\ -L*) 739085ee4c00Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 7391692f60a7Smrg esac 7392692f60a7Smrg 739385ee4c00Smrg test -n "$rpath" && \ 739485ee4c00Smrg func_warning "\`-rpath' is ignored for objects" 739585ee4c00Smrg 739685ee4c00Smrg test -n "$xrpath" && \ 739785ee4c00Smrg func_warning "\`-R' is ignored for objects" 7398692f60a7Smrg 739985ee4c00Smrg test -n "$vinfo" && \ 740085ee4c00Smrg func_warning "\`-version-info' is ignored for objects" 7401692f60a7Smrg 740285ee4c00Smrg test -n "$release" && \ 740385ee4c00Smrg func_warning "\`-release' is ignored for objects" 740485ee4c00Smrg 740585ee4c00Smrg case $output in 740685ee4c00Smrg *.lo) 740785ee4c00Smrg test -n "$objs$old_deplibs" && \ 740885ee4c00Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 740985ee4c00Smrg 741085ee4c00Smrg libobj=$output 741185ee4c00Smrg func_lo2o "$libobj" 741285ee4c00Smrg obj=$func_lo2o_result 7413692f60a7Smrg ;; 7414692f60a7Smrg *) 741585ee4c00Smrg libobj= 741685ee4c00Smrg obj="$output" 7417692f60a7Smrg ;; 7418692f60a7Smrg esac 7419692f60a7Smrg 742085ee4c00Smrg # Delete the old objects. 742185ee4c00Smrg $opt_dry_run || $RM $obj $libobj 7422692f60a7Smrg 742385ee4c00Smrg # Objects from convenience libraries. This assumes 742485ee4c00Smrg # single-version convenience libraries. Whenever we create 742585ee4c00Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 742685ee4c00Smrg # the extraction. 742785ee4c00Smrg reload_conv_objs= 742885ee4c00Smrg gentop= 742985ee4c00Smrg # reload_cmds runs $LD directly, so let us get rid of 743085ee4c00Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 743185ee4c00Smrg # turning comma into space.. 743285ee4c00Smrg wl= 7433692f60a7Smrg 743485ee4c00Smrg if test -n "$convenience"; then 743585ee4c00Smrg if test -n "$whole_archive_flag_spec"; then 743685ee4c00Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 743785ee4c00Smrg reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 743885ee4c00Smrg else 743985ee4c00Smrg gentop="$output_objdir/${obj}x" 744085ee4c00Smrg generated="$generated $gentop" 7441692f60a7Smrg 744285ee4c00Smrg func_extract_archives $gentop $convenience 744385ee4c00Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 744485ee4c00Smrg fi 7445692f60a7Smrg fi 7446692f60a7Smrg 744785ee4c00Smrg # Create the old-style object. 744885ee4c00Smrg reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 7449692f60a7Smrg 745085ee4c00Smrg output="$obj" 745185ee4c00Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7452692f60a7Smrg 745385ee4c00Smrg # Exit if we aren't doing a library object file. 745485ee4c00Smrg if test -z "$libobj"; then 745585ee4c00Smrg if test -n "$gentop"; then 745685ee4c00Smrg func_show_eval '${RM}r "$gentop"' 745785ee4c00Smrg fi 745885ee4c00Smrg 745985ee4c00Smrg exit $EXIT_SUCCESS 7460692f60a7Smrg fi 746185ee4c00Smrg 746285ee4c00Smrg if test "$build_libtool_libs" != yes; then 746385ee4c00Smrg if test -n "$gentop"; then 746485ee4c00Smrg func_show_eval '${RM}r "$gentop"' 746585ee4c00Smrg fi 746685ee4c00Smrg 746785ee4c00Smrg # Create an invalid libtool object if no PIC, so that we don't 746885ee4c00Smrg # accidentally link it into a program. 746985ee4c00Smrg # $show "echo timestamp > $libobj" 747085ee4c00Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 747185ee4c00Smrg exit $EXIT_SUCCESS 747285ee4c00Smrg fi 747385ee4c00Smrg 747485ee4c00Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 747585ee4c00Smrg # Only do commands if we really have different PIC objects. 747685ee4c00Smrg reload_objs="$libobjs $reload_conv_objs" 747785ee4c00Smrg output="$libobj" 747885ee4c00Smrg func_execute_cmds "$reload_cmds" 'exit $?' 747985ee4c00Smrg fi 748085ee4c00Smrg 748185ee4c00Smrg if test -n "$gentop"; then 748285ee4c00Smrg func_show_eval '${RM}r "$gentop"' 748385ee4c00Smrg fi 748485ee4c00Smrg 748585ee4c00Smrg exit $EXIT_SUCCESS 7486692f60a7Smrg ;; 7487692f60a7Smrg 748885ee4c00Smrg prog) 748985ee4c00Smrg case $host in 749085ee4c00Smrg *cygwin*) func_stripname '' '.exe' "$output" 749185ee4c00Smrg output=$func_stripname_result.exe;; 749285ee4c00Smrg esac 749385ee4c00Smrg test -n "$vinfo" && \ 749485ee4c00Smrg func_warning "\`-version-info' is ignored for programs" 7495692f60a7Smrg 749685ee4c00Smrg test -n "$release" && \ 749785ee4c00Smrg func_warning "\`-release' is ignored for programs" 7498692f60a7Smrg 749985ee4c00Smrg test "$preload" = yes \ 750085ee4c00Smrg && test "$dlopen_support" = unknown \ 750185ee4c00Smrg && test "$dlopen_self" = unknown \ 750285ee4c00Smrg && test "$dlopen_self_static" = unknown && \ 750385ee4c00Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 750485ee4c00Smrg 750585ee4c00Smrg case $host in 750685ee4c00Smrg *-*-rhapsody* | *-*-darwin1.[012]) 750785ee4c00Smrg # On Rhapsody replace the C library is the System framework 750885ee4c00Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 750985ee4c00Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 7510692f60a7Smrg ;; 751185ee4c00Smrg esac 7512692f60a7Smrg 751385ee4c00Smrg case $host in 751485ee4c00Smrg *-*-darwin*) 751585ee4c00Smrg # Don't allow lazy linking, it breaks C++ global constructors 751685ee4c00Smrg # But is supposedly fixed on 10.4 or later (yay!). 751785ee4c00Smrg if test "$tagname" = CXX ; then 751885ee4c00Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 751985ee4c00Smrg 10.[0123]) 752085ee4c00Smrg compile_command="$compile_command ${wl}-bind_at_load" 752185ee4c00Smrg finalize_command="$finalize_command ${wl}-bind_at_load" 752285ee4c00Smrg ;; 752385ee4c00Smrg esac 7524692f60a7Smrg fi 752585ee4c00Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 752685ee4c00Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 752785ee4c00Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 752885ee4c00Smrg ;; 752985ee4c00Smrg esac 7530692f60a7Smrg 7531692f60a7Smrg 753285ee4c00Smrg # move library search paths that coincide with paths to not yet 753385ee4c00Smrg # installed libraries to the beginning of the library search list 753485ee4c00Smrg new_libs= 753585ee4c00Smrg for path in $notinst_path; do 753685ee4c00Smrg case " $new_libs " in 753785ee4c00Smrg *" -L$path/$objdir "*) ;; 753885ee4c00Smrg *) 753985ee4c00Smrg case " $compile_deplibs " in 754085ee4c00Smrg *" -L$path/$objdir "*) 754185ee4c00Smrg new_libs="$new_libs -L$path/$objdir" ;; 7542692f60a7Smrg esac 754385ee4c00Smrg ;; 754485ee4c00Smrg esac 754585ee4c00Smrg done 754685ee4c00Smrg for deplib in $compile_deplibs; do 754785ee4c00Smrg case $deplib in 754885ee4c00Smrg -L*) 754985ee4c00Smrg case " $new_libs " in 755085ee4c00Smrg *" $deplib "*) ;; 755185ee4c00Smrg *) new_libs="$new_libs $deplib" ;; 7552692f60a7Smrg esac 755385ee4c00Smrg ;; 755485ee4c00Smrg *) new_libs="$new_libs $deplib" ;; 755585ee4c00Smrg esac 755685ee4c00Smrg done 755785ee4c00Smrg compile_deplibs="$new_libs" 7558692f60a7Smrg 7559692f60a7Smrg 756085ee4c00Smrg compile_command="$compile_command $compile_deplibs" 756185ee4c00Smrg finalize_command="$finalize_command $finalize_deplibs" 7562692f60a7Smrg 756385ee4c00Smrg if test -n "$rpath$xrpath"; then 756485ee4c00Smrg # If the user specified any rpath flags, then add them. 756585ee4c00Smrg for libdir in $rpath $xrpath; do 756685ee4c00Smrg # This is the magic to use -rpath. 756785ee4c00Smrg case "$finalize_rpath " in 756885ee4c00Smrg *" $libdir "*) ;; 756985ee4c00Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 757085ee4c00Smrg esac 757185ee4c00Smrg done 757285ee4c00Smrg fi 7573692f60a7Smrg 757485ee4c00Smrg # Now hardcode the library paths 757585ee4c00Smrg rpath= 757685ee4c00Smrg hardcode_libdirs= 757785ee4c00Smrg for libdir in $compile_rpath $finalize_rpath; do 757885ee4c00Smrg if test -n "$hardcode_libdir_flag_spec"; then 757985ee4c00Smrg if test -n "$hardcode_libdir_separator"; then 758085ee4c00Smrg if test -z "$hardcode_libdirs"; then 758185ee4c00Smrg hardcode_libdirs="$libdir" 758285ee4c00Smrg else 758385ee4c00Smrg # Just accumulate the unique libdirs. 758485ee4c00Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 758585ee4c00Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 758685ee4c00Smrg ;; 758785ee4c00Smrg *) 758885ee4c00Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 758985ee4c00Smrg ;; 759085ee4c00Smrg esac 759185ee4c00Smrg fi 7592692f60a7Smrg else 759385ee4c00Smrg eval flag=\"$hardcode_libdir_flag_spec\" 759485ee4c00Smrg rpath="$rpath $flag" 7595692f60a7Smrg fi 759685ee4c00Smrg elif test -n "$runpath_var"; then 759785ee4c00Smrg case "$perm_rpath " in 759885ee4c00Smrg *" $libdir "*) ;; 759985ee4c00Smrg *) perm_rpath="$perm_rpath $libdir" ;; 760085ee4c00Smrg esac 760185ee4c00Smrg fi 760285ee4c00Smrg case $host in 760385ee4c00Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 760485ee4c00Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 760585ee4c00Smrg case :$dllsearchpath: in 760685ee4c00Smrg *":$libdir:"*) ;; 760785ee4c00Smrg ::) dllsearchpath=$libdir;; 760885ee4c00Smrg *) dllsearchpath="$dllsearchpath:$libdir";; 760985ee4c00Smrg esac 761085ee4c00Smrg case :$dllsearchpath: in 761185ee4c00Smrg *":$testbindir:"*) ;; 761285ee4c00Smrg ::) dllsearchpath=$testbindir;; 761385ee4c00Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 761485ee4c00Smrg esac 761585ee4c00Smrg ;; 761685ee4c00Smrg esac 761785ee4c00Smrg done 761885ee4c00Smrg # Substitute the hardcoded libdirs into the rpath. 761985ee4c00Smrg if test -n "$hardcode_libdir_separator" && 762085ee4c00Smrg test -n "$hardcode_libdirs"; then 762185ee4c00Smrg libdir="$hardcode_libdirs" 762285ee4c00Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 762385ee4c00Smrg fi 762485ee4c00Smrg compile_rpath="$rpath" 7625692f60a7Smrg 762685ee4c00Smrg rpath= 762785ee4c00Smrg hardcode_libdirs= 762885ee4c00Smrg for libdir in $finalize_rpath; do 762985ee4c00Smrg if test -n "$hardcode_libdir_flag_spec"; then 763085ee4c00Smrg if test -n "$hardcode_libdir_separator"; then 763185ee4c00Smrg if test -z "$hardcode_libdirs"; then 763285ee4c00Smrg hardcode_libdirs="$libdir" 763385ee4c00Smrg else 763485ee4c00Smrg # Just accumulate the unique libdirs. 763585ee4c00Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 763685ee4c00Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 763785ee4c00Smrg ;; 763885ee4c00Smrg *) 763985ee4c00Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 764085ee4c00Smrg ;; 764185ee4c00Smrg esac 764285ee4c00Smrg fi 7643692f60a7Smrg else 764485ee4c00Smrg eval flag=\"$hardcode_libdir_flag_spec\" 764585ee4c00Smrg rpath="$rpath $flag" 7646692f60a7Smrg fi 764785ee4c00Smrg elif test -n "$runpath_var"; then 764885ee4c00Smrg case "$finalize_perm_rpath " in 764985ee4c00Smrg *" $libdir "*) ;; 765085ee4c00Smrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 765185ee4c00Smrg esac 7652692f60a7Smrg fi 765385ee4c00Smrg done 765485ee4c00Smrg # Substitute the hardcoded libdirs into the rpath. 765585ee4c00Smrg if test -n "$hardcode_libdir_separator" && 765685ee4c00Smrg test -n "$hardcode_libdirs"; then 765785ee4c00Smrg libdir="$hardcode_libdirs" 765885ee4c00Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 765985ee4c00Smrg fi 766085ee4c00Smrg finalize_rpath="$rpath" 7661692f60a7Smrg 766285ee4c00Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 766385ee4c00Smrg # Transform all the library objects into standard objects. 766485ee4c00Smrg compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 766585ee4c00Smrg finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 766685ee4c00Smrg fi 7667692f60a7Smrg 766885ee4c00Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 7669692f60a7Smrg 767085ee4c00Smrg # template prelinking step 767185ee4c00Smrg if test -n "$prelink_cmds"; then 767285ee4c00Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 767385ee4c00Smrg fi 7674692f60a7Smrg 767585ee4c00Smrg wrappers_required=yes 767685ee4c00Smrg case $host in 767785ee4c00Smrg *cygwin* | *mingw* ) 767885ee4c00Smrg if test "$build_libtool_libs" != yes; then 767985ee4c00Smrg wrappers_required=no 768085ee4c00Smrg fi 768185ee4c00Smrg ;; 768285ee4c00Smrg *cegcc) 768385ee4c00Smrg # Disable wrappers for cegcc, we are cross compiling anyway. 768485ee4c00Smrg wrappers_required=no 768585ee4c00Smrg ;; 768685ee4c00Smrg *) 768785ee4c00Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 768885ee4c00Smrg wrappers_required=no 768985ee4c00Smrg fi 769085ee4c00Smrg ;; 769185ee4c00Smrg esac 769285ee4c00Smrg if test "$wrappers_required" = no; then 769385ee4c00Smrg # Replace the output file specification. 769485ee4c00Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 769585ee4c00Smrg link_command="$compile_command$compile_rpath" 7696692f60a7Smrg 769785ee4c00Smrg # We have no uninstalled library dependencies, so finalize right now. 769885ee4c00Smrg exit_status=0 769985ee4c00Smrg func_show_eval "$link_command" 'exit_status=$?' 7700692f60a7Smrg 770185ee4c00Smrg # Delete the generated files. 770285ee4c00Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 770385ee4c00Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 7704692f60a7Smrg fi 7705692f60a7Smrg 770685ee4c00Smrg exit $exit_status 770785ee4c00Smrg fi 7708692f60a7Smrg 770985ee4c00Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 771085ee4c00Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 771185ee4c00Smrg fi 771285ee4c00Smrg if test -n "$finalize_shlibpath"; then 771385ee4c00Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 771485ee4c00Smrg fi 7715692f60a7Smrg 771685ee4c00Smrg compile_var= 771785ee4c00Smrg finalize_var= 771885ee4c00Smrg if test -n "$runpath_var"; then 771985ee4c00Smrg if test -n "$perm_rpath"; then 772085ee4c00Smrg # We should set the runpath_var. 772185ee4c00Smrg rpath= 772285ee4c00Smrg for dir in $perm_rpath; do 772385ee4c00Smrg rpath="$rpath$dir:" 772485ee4c00Smrg done 772585ee4c00Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 7726692f60a7Smrg fi 772785ee4c00Smrg if test -n "$finalize_perm_rpath"; then 772885ee4c00Smrg # We should set the runpath_var. 772985ee4c00Smrg rpath= 773085ee4c00Smrg for dir in $finalize_perm_rpath; do 773185ee4c00Smrg rpath="$rpath$dir:" 773285ee4c00Smrg done 773385ee4c00Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 7734692f60a7Smrg fi 773585ee4c00Smrg fi 7736692f60a7Smrg 773785ee4c00Smrg if test "$no_install" = yes; then 773885ee4c00Smrg # We don't need to create a wrapper script. 773985ee4c00Smrg link_command="$compile_var$compile_command$compile_rpath" 774085ee4c00Smrg # Replace the output file specification. 774185ee4c00Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 774285ee4c00Smrg # Delete the old output file. 774385ee4c00Smrg $opt_dry_run || $RM $output 774485ee4c00Smrg # Link the executable and exit 774585ee4c00Smrg func_show_eval "$link_command" 'exit $?' 7746692f60a7Smrg exit $EXIT_SUCCESS 774785ee4c00Smrg fi 7748692f60a7Smrg 774985ee4c00Smrg if test "$hardcode_action" = relink; then 775085ee4c00Smrg # Fast installation is not supported 775185ee4c00Smrg link_command="$compile_var$compile_command$compile_rpath" 775285ee4c00Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 775385ee4c00Smrg 775485ee4c00Smrg func_warning "this platform does not like uninstalled shared libraries" 775585ee4c00Smrg func_warning "\`$output' will be relinked during installation" 775685ee4c00Smrg else 775785ee4c00Smrg if test "$fast_install" != no; then 775885ee4c00Smrg link_command="$finalize_var$compile_command$finalize_rpath" 775985ee4c00Smrg if test "$fast_install" = yes; then 776085ee4c00Smrg relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` 776185ee4c00Smrg else 776285ee4c00Smrg # fast_install is set to needless 776385ee4c00Smrg relink_command= 776485ee4c00Smrg fi 7765692f60a7Smrg else 776685ee4c00Smrg link_command="$compile_var$compile_command$compile_rpath" 776785ee4c00Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 7768692f60a7Smrg fi 776985ee4c00Smrg fi 7770692f60a7Smrg 777185ee4c00Smrg # Replace the output file specification. 777285ee4c00Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 7773692f60a7Smrg 777485ee4c00Smrg # Delete the old output files. 777585ee4c00Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 7776692f60a7Smrg 777785ee4c00Smrg func_show_eval "$link_command" 'exit $?' 7778692f60a7Smrg 777985ee4c00Smrg # Now create the wrapper script. 778085ee4c00Smrg func_verbose "creating $output" 7781692f60a7Smrg 778285ee4c00Smrg # Quote the relink command for shipping. 778385ee4c00Smrg if test -n "$relink_command"; then 778485ee4c00Smrg # Preserve any variables that may affect compiler behavior 778585ee4c00Smrg for var in $variables_saved_for_relink; do 778685ee4c00Smrg if eval test -z \"\${$var+set}\"; then 778785ee4c00Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 778885ee4c00Smrg elif eval var_value=\$$var; test -z "$var_value"; then 778985ee4c00Smrg relink_command="$var=; export $var; $relink_command" 7790692f60a7Smrg else 779185ee4c00Smrg func_quote_for_eval "$var_value" 779285ee4c00Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 7793692f60a7Smrg fi 779485ee4c00Smrg done 779585ee4c00Smrg relink_command="(cd `pwd`; $relink_command)" 779685ee4c00Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 779785ee4c00Smrg fi 7798692f60a7Smrg 779985ee4c00Smrg # Quote $ECHO for shipping. 780085ee4c00Smrg if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then 780185ee4c00Smrg case $progpath in 780285ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 780385ee4c00Smrg *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 780485ee4c00Smrg esac 780585ee4c00Smrg qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` 780685ee4c00Smrg else 780785ee4c00Smrg qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` 780885ee4c00Smrg fi 780985ee4c00Smrg 781085ee4c00Smrg # Only actually do things if not in dry run mode. 781185ee4c00Smrg $opt_dry_run || { 781285ee4c00Smrg # win32 will think the script is a binary if it has 781385ee4c00Smrg # a .exe suffix, so we strip it off here. 781485ee4c00Smrg case $output in 781585ee4c00Smrg *.exe) func_stripname '' '.exe' "$output" 781685ee4c00Smrg output=$func_stripname_result ;; 781785ee4c00Smrg esac 781885ee4c00Smrg # test for cygwin because mv fails w/o .exe extensions 781985ee4c00Smrg case $host in 782085ee4c00Smrg *cygwin*) 782185ee4c00Smrg exeext=.exe 782285ee4c00Smrg func_stripname '' '.exe' "$outputname" 782385ee4c00Smrg outputname=$func_stripname_result ;; 782485ee4c00Smrg *) exeext= ;; 7825692f60a7Smrg esac 782685ee4c00Smrg case $host in 782785ee4c00Smrg *cygwin* | *mingw* ) 782885ee4c00Smrg func_dirname_and_basename "$output" "" "." 782985ee4c00Smrg output_name=$func_basename_result 783085ee4c00Smrg output_path=$func_dirname_result 783185ee4c00Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 783285ee4c00Smrg cwrapper="$output_path/$output_name.exe" 783385ee4c00Smrg $RM $cwrappersource $cwrapper 783485ee4c00Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 783585ee4c00Smrg 783685ee4c00Smrg func_emit_cwrapperexe_src > $cwrappersource 783785ee4c00Smrg 783885ee4c00Smrg # The wrapper executable is built using the $host compiler, 783985ee4c00Smrg # because it contains $host paths and files. If cross- 784085ee4c00Smrg # compiling, it, like the target executable, must be 784185ee4c00Smrg # executed on the $host or under an emulation environment. 784285ee4c00Smrg $opt_dry_run || { 784385ee4c00Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 784485ee4c00Smrg $STRIP $cwrapper 784585ee4c00Smrg } 7846692f60a7Smrg 784785ee4c00Smrg # Now, create the wrapper script for func_source use: 784885ee4c00Smrg func_ltwrapper_scriptname $cwrapper 784985ee4c00Smrg $RM $func_ltwrapper_scriptname_result 785085ee4c00Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 785185ee4c00Smrg $opt_dry_run || { 785285ee4c00Smrg # note: this script will not be executed, so do not chmod. 785385ee4c00Smrg if test "x$build" = "x$host" ; then 785485ee4c00Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 785585ee4c00Smrg else 785685ee4c00Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 785785ee4c00Smrg fi 785885ee4c00Smrg } 785985ee4c00Smrg ;; 786085ee4c00Smrg * ) 786185ee4c00Smrg $RM $output 786285ee4c00Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 7863692f60a7Smrg 786485ee4c00Smrg func_emit_wrapper no > $output 786585ee4c00Smrg chmod +x $output 786685ee4c00Smrg ;; 786785ee4c00Smrg esac 786885ee4c00Smrg } 786985ee4c00Smrg exit $EXIT_SUCCESS 787085ee4c00Smrg ;; 787185ee4c00Smrg esac 7872692f60a7Smrg 787385ee4c00Smrg # See if we need to build an old-fashioned archive. 787485ee4c00Smrg for oldlib in $oldlibs; do 7875692f60a7Smrg 787685ee4c00Smrg if test "$build_libtool_libs" = convenience; then 787785ee4c00Smrg oldobjs="$libobjs_save $symfileobj" 787885ee4c00Smrg addlibs="$convenience" 787985ee4c00Smrg build_libtool_libs=no 788085ee4c00Smrg else 788185ee4c00Smrg if test "$build_libtool_libs" = module; then 788285ee4c00Smrg oldobjs="$libobjs_save" 788385ee4c00Smrg build_libtool_libs=no 788485ee4c00Smrg else 788585ee4c00Smrg oldobjs="$old_deplibs $non_pic_objects" 788685ee4c00Smrg if test "$preload" = yes && test -f "$symfileobj"; then 788785ee4c00Smrg oldobjs="$oldobjs $symfileobj" 788885ee4c00Smrg fi 788985ee4c00Smrg fi 789085ee4c00Smrg addlibs="$old_convenience" 7891692f60a7Smrg fi 7892692f60a7Smrg 789385ee4c00Smrg if test -n "$addlibs"; then 789485ee4c00Smrg gentop="$output_objdir/${outputname}x" 789585ee4c00Smrg generated="$generated $gentop" 7896692f60a7Smrg 789785ee4c00Smrg func_extract_archives $gentop $addlibs 789885ee4c00Smrg oldobjs="$oldobjs $func_extract_archives_result" 789985ee4c00Smrg fi 7900692f60a7Smrg 790185ee4c00Smrg # Do each command in the archive commands. 790285ee4c00Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 790385ee4c00Smrg cmds=$old_archive_from_new_cmds 790485ee4c00Smrg else 7905692f60a7Smrg 790685ee4c00Smrg # Add any objects from preloaded convenience libraries 790785ee4c00Smrg if test -n "$dlprefiles"; then 790885ee4c00Smrg gentop="$output_objdir/${outputname}x" 790985ee4c00Smrg generated="$generated $gentop" 7910692f60a7Smrg 791185ee4c00Smrg func_extract_archives $gentop $dlprefiles 791285ee4c00Smrg oldobjs="$oldobjs $func_extract_archives_result" 791385ee4c00Smrg fi 7914692f60a7Smrg 791585ee4c00Smrg # POSIX demands no paths to be encoded in archives. We have 791685ee4c00Smrg # to avoid creating archives with duplicate basenames if we 791785ee4c00Smrg # might have to extract them afterwards, e.g., when creating a 791885ee4c00Smrg # static archive out of a convenience library, or when linking 791985ee4c00Smrg # the entirety of a libtool archive into another (currently 792085ee4c00Smrg # not supported by libtool). 792185ee4c00Smrg if (for obj in $oldobjs 792285ee4c00Smrg do 792385ee4c00Smrg func_basename "$obj" 792485ee4c00Smrg $ECHO "$func_basename_result" 792585ee4c00Smrg done | sort | sort -uc >/dev/null 2>&1); then 792685ee4c00Smrg : 792785ee4c00Smrg else 792885ee4c00Smrg $ECHO "copying selected object files to avoid basename conflicts..." 792985ee4c00Smrg gentop="$output_objdir/${outputname}x" 793085ee4c00Smrg generated="$generated $gentop" 793185ee4c00Smrg func_mkdir_p "$gentop" 793285ee4c00Smrg save_oldobjs=$oldobjs 793385ee4c00Smrg oldobjs= 793485ee4c00Smrg counter=1 793585ee4c00Smrg for obj in $save_oldobjs 793685ee4c00Smrg do 793785ee4c00Smrg func_basename "$obj" 793885ee4c00Smrg objbase="$func_basename_result" 793985ee4c00Smrg case " $oldobjs " in 794085ee4c00Smrg " ") oldobjs=$obj ;; 794185ee4c00Smrg *[\ /]"$objbase "*) 794285ee4c00Smrg while :; do 794385ee4c00Smrg # Make sure we don't pick an alternate name that also 794485ee4c00Smrg # overlaps. 794585ee4c00Smrg newobj=lt$counter-$objbase 794685ee4c00Smrg func_arith $counter + 1 794785ee4c00Smrg counter=$func_arith_result 794885ee4c00Smrg case " $oldobjs " in 794985ee4c00Smrg *[\ /]"$newobj "*) ;; 795085ee4c00Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 795185ee4c00Smrg esac 795285ee4c00Smrg done 795385ee4c00Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 795485ee4c00Smrg oldobjs="$oldobjs $gentop/$newobj" 795585ee4c00Smrg ;; 795685ee4c00Smrg *) oldobjs="$oldobjs $obj" ;; 795785ee4c00Smrg esac 7958692f60a7Smrg done 7959692f60a7Smrg fi 796085ee4c00Smrg eval cmds=\"$old_archive_cmds\" 7961692f60a7Smrg 796285ee4c00Smrg func_len " $cmds" 796385ee4c00Smrg len=$func_len_result 796485ee4c00Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 796585ee4c00Smrg cmds=$old_archive_cmds 796685ee4c00Smrg else 796785ee4c00Smrg # the command line is too long to link in one step, link in parts 796885ee4c00Smrg func_verbose "using piecewise archive linking..." 796985ee4c00Smrg save_RANLIB=$RANLIB 797085ee4c00Smrg RANLIB=: 797185ee4c00Smrg objlist= 797285ee4c00Smrg concat_cmds= 797385ee4c00Smrg save_oldobjs=$oldobjs 797485ee4c00Smrg oldobjs= 797585ee4c00Smrg # Is there a better way of finding the last object in the list? 797685ee4c00Smrg for obj in $save_oldobjs 797785ee4c00Smrg do 797885ee4c00Smrg last_oldobj=$obj 797985ee4c00Smrg done 798085ee4c00Smrg eval test_cmds=\"$old_archive_cmds\" 798185ee4c00Smrg func_len " $test_cmds" 798285ee4c00Smrg len0=$func_len_result 798385ee4c00Smrg len=$len0 798485ee4c00Smrg for obj in $save_oldobjs 798585ee4c00Smrg do 798685ee4c00Smrg func_len " $obj" 798785ee4c00Smrg func_arith $len + $func_len_result 798885ee4c00Smrg len=$func_arith_result 798985ee4c00Smrg func_append objlist " $obj" 799085ee4c00Smrg if test "$len" -lt "$max_cmd_len"; then 799185ee4c00Smrg : 799285ee4c00Smrg else 799385ee4c00Smrg # the above command should be used before it gets too long 799485ee4c00Smrg oldobjs=$objlist 799585ee4c00Smrg if test "$obj" = "$last_oldobj" ; then 799685ee4c00Smrg RANLIB=$save_RANLIB 799785ee4c00Smrg fi 799885ee4c00Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 799985ee4c00Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 800085ee4c00Smrg objlist= 800185ee4c00Smrg len=$len0 800285ee4c00Smrg fi 800385ee4c00Smrg done 800485ee4c00Smrg RANLIB=$save_RANLIB 800585ee4c00Smrg oldobjs=$objlist 800685ee4c00Smrg if test "X$oldobjs" = "X" ; then 800785ee4c00Smrg eval cmds=\"\$concat_cmds\" 800885ee4c00Smrg else 800985ee4c00Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 801085ee4c00Smrg fi 801185ee4c00Smrg fi 801285ee4c00Smrg fi 801385ee4c00Smrg func_execute_cmds "$cmds" 'exit $?' 8014692f60a7Smrg done 8015692f60a7Smrg 801685ee4c00Smrg test -n "$generated" && \ 801785ee4c00Smrg func_show_eval "${RM}r$generated" 8018692f60a7Smrg 801985ee4c00Smrg # Now create the libtool archive. 802085ee4c00Smrg case $output in 802185ee4c00Smrg *.la) 802285ee4c00Smrg old_library= 802385ee4c00Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 802485ee4c00Smrg func_verbose "creating $output" 8025692f60a7Smrg 802685ee4c00Smrg # Preserve any variables that may affect compiler behavior 802785ee4c00Smrg for var in $variables_saved_for_relink; do 802885ee4c00Smrg if eval test -z \"\${$var+set}\"; then 802985ee4c00Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 803085ee4c00Smrg elif eval var_value=\$$var; test -z "$var_value"; then 803185ee4c00Smrg relink_command="$var=; export $var; $relink_command" 8032692f60a7Smrg else 803385ee4c00Smrg func_quote_for_eval "$var_value" 803485ee4c00Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8035692f60a7Smrg fi 803685ee4c00Smrg done 803785ee4c00Smrg # Quote the link command for shipping. 803885ee4c00Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 803985ee4c00Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 804085ee4c00Smrg if test "$hardcode_automatic" = yes ; then 804185ee4c00Smrg relink_command= 804285ee4c00Smrg fi 8043692f60a7Smrg 804485ee4c00Smrg # Only create the output if not a dry run. 804585ee4c00Smrg $opt_dry_run || { 804685ee4c00Smrg for installed in no yes; do 804785ee4c00Smrg if test "$installed" = yes; then 804885ee4c00Smrg if test -z "$install_libdir"; then 804985ee4c00Smrg break 805085ee4c00Smrg fi 805185ee4c00Smrg output="$output_objdir/$outputname"i 805285ee4c00Smrg # Replace all uninstalled libtool libraries with the installed ones 805385ee4c00Smrg newdependency_libs= 805485ee4c00Smrg for deplib in $dependency_libs; do 805585ee4c00Smrg case $deplib in 805685ee4c00Smrg *.la) 805785ee4c00Smrg func_basename "$deplib" 805885ee4c00Smrg name="$func_basename_result" 805985ee4c00Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 806085ee4c00Smrg test -z "$libdir" && \ 806185ee4c00Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 806285ee4c00Smrg newdependency_libs="$newdependency_libs $libdir/$name" 806385ee4c00Smrg ;; 806485ee4c00Smrg *) newdependency_libs="$newdependency_libs $deplib" ;; 806585ee4c00Smrg esac 806685ee4c00Smrg done 806785ee4c00Smrg dependency_libs="$newdependency_libs" 806885ee4c00Smrg newdlfiles= 806985ee4c00Smrg 807085ee4c00Smrg for lib in $dlfiles; do 807185ee4c00Smrg case $lib in 807285ee4c00Smrg *.la) 807385ee4c00Smrg func_basename "$lib" 807485ee4c00Smrg name="$func_basename_result" 807585ee4c00Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 807685ee4c00Smrg test -z "$libdir" && \ 807785ee4c00Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 807885ee4c00Smrg newdlfiles="$newdlfiles $libdir/$name" 807985ee4c00Smrg ;; 808085ee4c00Smrg *) newdlfiles="$newdlfiles $lib" ;; 808185ee4c00Smrg esac 808285ee4c00Smrg done 808385ee4c00Smrg dlfiles="$newdlfiles" 808485ee4c00Smrg newdlprefiles= 808585ee4c00Smrg for lib in $dlprefiles; do 808685ee4c00Smrg case $lib in 808785ee4c00Smrg *.la) 808885ee4c00Smrg # Only pass preopened files to the pseudo-archive (for 808985ee4c00Smrg # eventual linking with the app. that links it) if we 809085ee4c00Smrg # didn't already link the preopened objects directly into 809185ee4c00Smrg # the library: 809285ee4c00Smrg func_basename "$lib" 809385ee4c00Smrg name="$func_basename_result" 809485ee4c00Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 809585ee4c00Smrg test -z "$libdir" && \ 809685ee4c00Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 809785ee4c00Smrg newdlprefiles="$newdlprefiles $libdir/$name" 809885ee4c00Smrg ;; 809985ee4c00Smrg esac 810085ee4c00Smrg done 810185ee4c00Smrg dlprefiles="$newdlprefiles" 810285ee4c00Smrg else 810385ee4c00Smrg newdlfiles= 810485ee4c00Smrg for lib in $dlfiles; do 810585ee4c00Smrg case $lib in 810685ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 810785ee4c00Smrg *) abs=`pwd`"/$lib" ;; 810885ee4c00Smrg esac 810985ee4c00Smrg newdlfiles="$newdlfiles $abs" 811085ee4c00Smrg done 811185ee4c00Smrg dlfiles="$newdlfiles" 811285ee4c00Smrg newdlprefiles= 811385ee4c00Smrg for lib in $dlprefiles; do 811485ee4c00Smrg case $lib in 811585ee4c00Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 811685ee4c00Smrg *) abs=`pwd`"/$lib" ;; 811785ee4c00Smrg esac 811885ee4c00Smrg newdlprefiles="$newdlprefiles $abs" 811985ee4c00Smrg done 812085ee4c00Smrg dlprefiles="$newdlprefiles" 812185ee4c00Smrg fi 812285ee4c00Smrg $RM $output 812385ee4c00Smrg # place dlname in correct position for cygwin 812485ee4c00Smrg tdlname=$dlname 812585ee4c00Smrg case $host,$output,$installed,$module,$dlname in 812685ee4c00Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 812785ee4c00Smrg esac 812885ee4c00Smrg $ECHO > $output "\ 812985ee4c00Smrg# $outputname - a libtool library file 813085ee4c00Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 813185ee4c00Smrg# 813285ee4c00Smrg# Please DO NOT delete this file! 813385ee4c00Smrg# It is necessary for linking the library. 8134692f60a7Smrg 813585ee4c00Smrg# The name that we can dlopen(3). 813685ee4c00Smrgdlname='$tdlname' 8137692f60a7Smrg 813885ee4c00Smrg# Names of this library. 813985ee4c00Smrglibrary_names='$library_names' 8140692f60a7Smrg 814185ee4c00Smrg# The name of the static archive. 814285ee4c00Smrgold_library='$old_library' 8143692f60a7Smrg 814485ee4c00Smrg# Linker flags that can not go in dependency_libs. 814585ee4c00Smrginherited_linker_flags='$new_inherited_linker_flags' 8146692f60a7Smrg 814785ee4c00Smrg# Libraries that this one depends upon. 814885ee4c00Smrgdependency_libs='$dependency_libs' 8149692f60a7Smrg 815085ee4c00Smrg# Names of additional weak libraries provided by this library 815185ee4c00Smrgweak_library_names='$weak_libs' 8152692f60a7Smrg 815385ee4c00Smrg# Version information for $libname. 815485ee4c00Smrgcurrent=$current 815585ee4c00Smrgage=$age 815685ee4c00Smrgrevision=$revision 8157692f60a7Smrg 815885ee4c00Smrg# Is this an already installed library? 815985ee4c00Smrginstalled=$installed 8160692f60a7Smrg 816185ee4c00Smrg# Should we warn about portability when linking against -modules? 816285ee4c00Smrgshouldnotlink=$module 8163692f60a7Smrg 816485ee4c00Smrg# Files to dlopen/dlpreopen 816585ee4c00Smrgdlopen='$dlfiles' 816685ee4c00Smrgdlpreopen='$dlprefiles' 8167692f60a7Smrg 816885ee4c00Smrg# Directory that this library needs to be installed in: 816985ee4c00Smrglibdir='$install_libdir'" 817085ee4c00Smrg if test "$installed" = no && test "$need_relink" = yes; then 817185ee4c00Smrg $ECHO >> $output "\ 817285ee4c00Smrgrelink_command=\"$relink_command\"" 817385ee4c00Smrg fi 817485ee4c00Smrg done 817585ee4c00Smrg } 8176692f60a7Smrg 817785ee4c00Smrg # Do a symbolic link so that the libtool archive can be found in 817885ee4c00Smrg # LD_LIBRARY_PATH before the program is installed. 817985ee4c00Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 818085ee4c00Smrg ;; 818185ee4c00Smrg esac 818285ee4c00Smrg exit $EXIT_SUCCESS 818385ee4c00Smrg} 8184692f60a7Smrg 818585ee4c00Smrg{ test "$mode" = link || test "$mode" = relink; } && 818685ee4c00Smrg func_mode_link ${1+"$@"} 8187692f60a7Smrg 8188692f60a7Smrg 818985ee4c00Smrg# func_mode_uninstall arg... 819085ee4c00Smrgfunc_mode_uninstall () 819185ee4c00Smrg{ 819285ee4c00Smrg $opt_debug 819385ee4c00Smrg RM="$nonopt" 8194692f60a7Smrg files= 8195692f60a7Smrg rmforce= 8196692f60a7Smrg exit_status=0 8197692f60a7Smrg 8198692f60a7Smrg # This variable tells wrapper scripts just to set variables rather 8199692f60a7Smrg # than running their programs. 8200692f60a7Smrg libtool_install_magic="$magic" 8201692f60a7Smrg 8202692f60a7Smrg for arg 8203692f60a7Smrg do 8204692f60a7Smrg case $arg in 820585ee4c00Smrg -f) RM="$RM $arg"; rmforce=yes ;; 820685ee4c00Smrg -*) RM="$RM $arg" ;; 8207692f60a7Smrg *) files="$files $arg" ;; 8208692f60a7Smrg esac 8209692f60a7Smrg done 8210692f60a7Smrg 821185ee4c00Smrg test -z "$RM" && \ 821285ee4c00Smrg func_fatal_help "you must specify an RM program" 8213692f60a7Smrg 8214692f60a7Smrg rmdirs= 8215692f60a7Smrg 8216692f60a7Smrg origobjdir="$objdir" 8217692f60a7Smrg for file in $files; do 821885ee4c00Smrg func_dirname "$file" "" "." 821985ee4c00Smrg dir="$func_dirname_result" 822085ee4c00Smrg if test "X$dir" = X.; then 8221692f60a7Smrg objdir="$origobjdir" 8222692f60a7Smrg else 8223692f60a7Smrg objdir="$dir/$origobjdir" 8224692f60a7Smrg fi 822585ee4c00Smrg func_basename "$file" 822685ee4c00Smrg name="$func_basename_result" 8227692f60a7Smrg test "$mode" = uninstall && objdir="$dir" 8228692f60a7Smrg 8229692f60a7Smrg # Remember objdir for removal later, being careful to avoid duplicates 8230692f60a7Smrg if test "$mode" = clean; then 8231692f60a7Smrg case " $rmdirs " in 8232692f60a7Smrg *" $objdir "*) ;; 8233692f60a7Smrg *) rmdirs="$rmdirs $objdir" ;; 8234692f60a7Smrg esac 8235692f60a7Smrg fi 8236692f60a7Smrg 8237692f60a7Smrg # Don't error if the file doesn't exist and rm -f was used. 823885ee4c00Smrg if { test -L "$file"; } >/dev/null 2>&1 || 823985ee4c00Smrg { test -h "$file"; } >/dev/null 2>&1 || 824085ee4c00Smrg test -f "$file"; then 8241692f60a7Smrg : 8242692f60a7Smrg elif test -d "$file"; then 8243692f60a7Smrg exit_status=1 8244692f60a7Smrg continue 8245692f60a7Smrg elif test "$rmforce" = yes; then 8246692f60a7Smrg continue 8247692f60a7Smrg fi 8248692f60a7Smrg 8249692f60a7Smrg rmfiles="$file" 8250692f60a7Smrg 8251692f60a7Smrg case $name in 8252692f60a7Smrg *.la) 8253692f60a7Smrg # Possibly a libtool archive, so verify it. 825485ee4c00Smrg if func_lalib_p "$file"; then 825585ee4c00Smrg func_source $dir/$name 8256692f60a7Smrg 8257692f60a7Smrg # Delete the libtool libraries and symlinks. 8258692f60a7Smrg for n in $library_names; do 8259692f60a7Smrg rmfiles="$rmfiles $objdir/$n" 8260692f60a7Smrg done 8261692f60a7Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 8262692f60a7Smrg 8263692f60a7Smrg case "$mode" in 8264692f60a7Smrg clean) 8265692f60a7Smrg case " $library_names " in 8266692f60a7Smrg # " " in the beginning catches empty $dlname 8267692f60a7Smrg *" $dlname "*) ;; 8268692f60a7Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 8269692f60a7Smrg esac 827085ee4c00Smrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 8271692f60a7Smrg ;; 8272692f60a7Smrg uninstall) 8273692f60a7Smrg if test -n "$library_names"; then 8274692f60a7Smrg # Do each command in the postuninstall commands. 827585ee4c00Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8276692f60a7Smrg fi 8277692f60a7Smrg 8278692f60a7Smrg if test -n "$old_library"; then 8279692f60a7Smrg # Do each command in the old_postuninstall commands. 828085ee4c00Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8281692f60a7Smrg fi 8282692f60a7Smrg # FIXME: should reinstall the best remaining shared library. 8283692f60a7Smrg ;; 8284692f60a7Smrg esac 8285692f60a7Smrg fi 8286692f60a7Smrg ;; 8287692f60a7Smrg 8288692f60a7Smrg *.lo) 8289692f60a7Smrg # Possibly a libtool object, so verify it. 829085ee4c00Smrg if func_lalib_p "$file"; then 8291692f60a7Smrg 8292692f60a7Smrg # Read the .lo file 829385ee4c00Smrg func_source $dir/$name 8294692f60a7Smrg 8295692f60a7Smrg # Add PIC object to the list of files to remove. 829685ee4c00Smrg if test -n "$pic_object" && 829785ee4c00Smrg test "$pic_object" != none; then 8298692f60a7Smrg rmfiles="$rmfiles $dir/$pic_object" 8299692f60a7Smrg fi 8300692f60a7Smrg 8301692f60a7Smrg # Add non-PIC object to the list of files to remove. 830285ee4c00Smrg if test -n "$non_pic_object" && 830385ee4c00Smrg test "$non_pic_object" != none; then 8304692f60a7Smrg rmfiles="$rmfiles $dir/$non_pic_object" 8305692f60a7Smrg fi 8306692f60a7Smrg fi 8307692f60a7Smrg ;; 8308692f60a7Smrg 8309692f60a7Smrg *) 8310692f60a7Smrg if test "$mode" = clean ; then 8311692f60a7Smrg noexename=$name 8312692f60a7Smrg case $file in 8313692f60a7Smrg *.exe) 831485ee4c00Smrg func_stripname '' '.exe' "$file" 831585ee4c00Smrg file=$func_stripname_result 831685ee4c00Smrg func_stripname '' '.exe' "$name" 831785ee4c00Smrg noexename=$func_stripname_result 8318692f60a7Smrg # $file with .exe has already been added to rmfiles, 8319692f60a7Smrg # add $file without .exe 8320692f60a7Smrg rmfiles="$rmfiles $file" 8321692f60a7Smrg ;; 8322692f60a7Smrg esac 8323692f60a7Smrg # Do a test to see if this is a libtool program. 832485ee4c00Smrg if func_ltwrapper_p "$file"; then 832585ee4c00Smrg if func_ltwrapper_executable_p "$file"; then 832685ee4c00Smrg func_ltwrapper_scriptname "$file" 832785ee4c00Smrg relink_command= 832885ee4c00Smrg func_source $func_ltwrapper_scriptname_result 832985ee4c00Smrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 833085ee4c00Smrg else 833185ee4c00Smrg relink_command= 833285ee4c00Smrg func_source $dir/$noexename 833385ee4c00Smrg fi 8334692f60a7Smrg 8335692f60a7Smrg # note $name still contains .exe if it was in $file originally 8336692f60a7Smrg # as does the version of $file that was added into $rmfiles 8337692f60a7Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 8338692f60a7Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 8339692f60a7Smrg rmfiles="$rmfiles $objdir/lt-$name" 8340692f60a7Smrg fi 8341692f60a7Smrg if test "X$noexename" != "X$name" ; then 8342692f60a7Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 8343692f60a7Smrg fi 8344692f60a7Smrg fi 8345692f60a7Smrg fi 8346692f60a7Smrg ;; 8347692f60a7Smrg esac 834885ee4c00Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 8349692f60a7Smrg done 8350692f60a7Smrg objdir="$origobjdir" 8351692f60a7Smrg 8352692f60a7Smrg # Try to remove the ${objdir}s in the directories where we deleted files 8353692f60a7Smrg for dir in $rmdirs; do 8354692f60a7Smrg if test -d "$dir"; then 835585ee4c00Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 8356692f60a7Smrg fi 8357692f60a7Smrg done 8358692f60a7Smrg 8359692f60a7Smrg exit $exit_status 836085ee4c00Smrg} 8361692f60a7Smrg 836285ee4c00Smrg{ test "$mode" = uninstall || test "$mode" = clean; } && 836385ee4c00Smrg func_mode_uninstall ${1+"$@"} 8364692f60a7Smrg 836585ee4c00Smrgtest -z "$mode" && { 836685ee4c00Smrg help="$generic_help" 836785ee4c00Smrg func_fatal_help "you must specify a MODE" 836885ee4c00Smrg} 836985ee4c00Smrg 837085ee4c00Smrgtest -z "$exec_cmd" && \ 837185ee4c00Smrg func_fatal_help "invalid operation mode \`$mode'" 8372692f60a7Smrg 8373692f60a7Smrgif test -n "$exec_cmd"; then 837485ee4c00Smrg eval exec "$exec_cmd" 8375692f60a7Smrg exit $EXIT_FAILURE 8376692f60a7Smrgfi 8377692f60a7Smrg 837885ee4c00Smrgexit $exit_status 8379692f60a7Smrg 8380692f60a7Smrg 8381692f60a7Smrg# The TAGs below are defined such that we never get into a situation 8382692f60a7Smrg# in which we disable both kinds of libraries. Given conflicting 8383692f60a7Smrg# choices, we go for a static library, that is the most portable, 8384692f60a7Smrg# since we can't tell whether shared libraries were disabled because 8385692f60a7Smrg# the user asked for that or because the platform doesn't support 8386692f60a7Smrg# them. This is particularly important on AIX, because we don't 8387692f60a7Smrg# support having both static and shared libraries enabled at the same 8388692f60a7Smrg# time on that platform, so we default to a shared-only configuration. 8389692f60a7Smrg# If a disable-shared tag is given, we'll fallback to a static-only 8390692f60a7Smrg# configuration. But we'll never go from static-only to shared-only. 8391692f60a7Smrg 8392692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 839385ee4c00Smrgbuild_libtool_libs=no 839485ee4c00Smrgbuild_old_libs=yes 8395692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 8396692f60a7Smrg 8397692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 839885ee4c00Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 8399692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-static 8400692f60a7Smrg 8401692f60a7Smrg# Local Variables: 8402692f60a7Smrg# mode:shell-script 8403692f60a7Smrg# sh-indentation:2 8404692f60a7Smrg# End: 840585ee4c00Smrg# vi:sw=2 840685ee4c00Smrg 8407