ltmain.sh revision d63fdb69
1d63fdb69Smrg# Generated from ltmain.m4sh. 2d63fdb69Smrg 3d63fdb69Smrg# ltmain.sh (GNU libtool) 2.2.6 4d63fdb69Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 5d63fdb69Smrg 6d63fdb69Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. 7d63fdb69Smrg# This is free software; see the source for copying conditions. There is NO 8d63fdb69Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9d63fdb69Smrg 10d63fdb69Smrg# GNU Libtool is free software; you can redistribute it and/or modify 113da084b3Smrg# it under the terms of the GNU General Public License as published by 123da084b3Smrg# the Free Software Foundation; either version 2 of the License, or 133da084b3Smrg# (at your option) any later version. 143da084b3Smrg# 15d63fdb69Smrg# As a special exception to the GNU General Public License, 16d63fdb69Smrg# if you distribute this file as part of a program or library that 17d63fdb69Smrg# is built using GNU Libtool, you may include this file under the 18d63fdb69Smrg# same distribution terms that you use for the rest of that program. 19d63fdb69Smrg# 20d63fdb69Smrg# GNU Libtool is distributed in the hope that it will be useful, but 213da084b3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 223da084b3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 233da084b3Smrg# General Public License for more details. 243da084b3Smrg# 253da084b3Smrg# You should have received a copy of the GNU General Public License 26d63fdb69Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 27d63fdb69Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28d63fdb69Smrg# or obtained by writing to the Free Software Foundation, Inc., 29d63fdb69Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30d63fdb69Smrg 31d63fdb69Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 32d63fdb69Smrg# 33d63fdb69Smrg# Provide generalized library-building support services. 343da084b3Smrg# 35d63fdb69Smrg# --config show all configuration variables 36d63fdb69Smrg# --debug enable verbose shell tracing 37d63fdb69Smrg# -n, --dry-run display commands without modifying any files 38d63fdb69Smrg# --features display basic configuration information and exit 39d63fdb69Smrg# --mode=MODE use operation mode MODE 40d63fdb69Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 41d63fdb69Smrg# --quiet, --silent don't print informational messages 42d63fdb69Smrg# --tag=TAG use configuration variables from tag TAG 43d63fdb69Smrg# -v, --verbose print informational messages (default) 44d63fdb69Smrg# --version print version information 45d63fdb69Smrg# -h, --help print short or long help message 46d63fdb69Smrg# 47d63fdb69Smrg# MODE must be one of the following: 48d63fdb69Smrg# 49d63fdb69Smrg# clean remove files from the build directory 50d63fdb69Smrg# compile compile a source file into a libtool object 51d63fdb69Smrg# execute automatically set library path, then run a program 52d63fdb69Smrg# finish complete the installation of libtool libraries 53d63fdb69Smrg# install install libraries or executables 54d63fdb69Smrg# link create a library or an executable 55d63fdb69Smrg# uninstall remove libraries from an installed directory 56d63fdb69Smrg# 57d63fdb69Smrg# MODE-ARGS vary depending on the MODE. 58d63fdb69Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 59d63fdb69Smrg# 60d63fdb69Smrg# When reporting a bug, please describe a test case to reproduce it and 61d63fdb69Smrg# include the following information: 62d63fdb69Smrg# 63d63fdb69Smrg# host-triplet: $host 64d63fdb69Smrg# shell: $SHELL 65d63fdb69Smrg# compiler: $LTCC 66d63fdb69Smrg# compiler flags: $LTCFLAGS 67d63fdb69Smrg# linker: $LD (gnu? $with_gnu_ld) 68d63fdb69Smrg# $progname: (GNU libtool) 2.2.6 69d63fdb69Smrg# automake: $automake_version 70d63fdb69Smrg# autoconf: $autoconf_version 71d63fdb69Smrg# 72d63fdb69Smrg# Report bugs to <bug-libtool@gnu.org>. 73d63fdb69Smrg 74d63fdb69SmrgPROGRAM=ltmain.sh 75d63fdb69SmrgPACKAGE=libtool 76d63fdb69SmrgVERSION=2.2.6 77d63fdb69SmrgTIMESTAMP="" 78d63fdb69Smrgpackage_revision=1.3012 79d63fdb69Smrg 80d63fdb69Smrg# Be Bourne compatible 81d63fdb69Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 82d63fdb69Smrg emulate sh 83d63fdb69Smrg NULLCMD=: 84d63fdb69Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 85d63fdb69Smrg # is contrary to our usage. Disable this feature. 86d63fdb69Smrg alias -g '${1+"$@"}'='"$@"' 87d63fdb69Smrg setopt NO_GLOB_SUBST 88d63fdb69Smrgelse 89d63fdb69Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 90d63fdb69Smrgfi 91d63fdb69SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 92d63fdb69SmrgDUALCASE=1; export DUALCASE # for MKS sh 93d63fdb69Smrg 94d63fdb69Smrg# NLS nuisances: We save the old values to restore during execute mode. 95d63fdb69Smrg# Only set LANG and LC_ALL to C if already set. 96d63fdb69Smrg# These must not be set unconditionally because not all systems understand 97d63fdb69Smrg# e.g. LANG=C (notably SCO). 98d63fdb69Smrglt_user_locale= 99d63fdb69Smrglt_safe_locale= 100d63fdb69Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 101d63fdb69Smrgdo 102d63fdb69Smrg eval "if test \"\${$lt_var+set}\" = set; then 103d63fdb69Smrg save_$lt_var=\$$lt_var 104d63fdb69Smrg $lt_var=C 105d63fdb69Smrg export $lt_var 106d63fdb69Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 107d63fdb69Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 108d63fdb69Smrg fi" 109d63fdb69Smrgdone 110d63fdb69Smrg 111d63fdb69Smrg$lt_unset CDPATH 112d63fdb69Smrg 113d63fdb69Smrg 114d63fdb69Smrg 115d63fdb69Smrg 116d63fdb69Smrg 117d63fdb69Smrg: ${CP="cp -f"} 118d63fdb69Smrg: ${ECHO="echo"} 119d63fdb69Smrg: ${EGREP="/bin/grep -E"} 120d63fdb69Smrg: ${FGREP="/bin/grep -F"} 121d63fdb69Smrg: ${GREP="/bin/grep"} 122d63fdb69Smrg: ${LN_S="ln -s"} 123d63fdb69Smrg: ${MAKE="make"} 124d63fdb69Smrg: ${MKDIR="mkdir"} 125d63fdb69Smrg: ${MV="mv -f"} 126d63fdb69Smrg: ${RM="rm -f"} 127d63fdb69Smrg: ${SED="/bin/sed"} 128d63fdb69Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 129d63fdb69Smrg: ${Xsed="$SED -e 1s/^X//"} 1303da084b3Smrg 131d63fdb69Smrg# Global variables: 132d63fdb69SmrgEXIT_SUCCESS=0 133d63fdb69SmrgEXIT_FAILURE=1 134d63fdb69SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 135d63fdb69SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 136d63fdb69Smrg 137d63fdb69Smrgexit_status=$EXIT_SUCCESS 138d63fdb69Smrg 139d63fdb69Smrg# Make sure IFS has a sensible default 140d63fdb69Smrglt_nl=' 141d63fdb69Smrg' 142d63fdb69SmrgIFS=" $lt_nl" 143d63fdb69Smrg 144d63fdb69Smrgdirname="s,/[^/]*$,," 145d63fdb69Smrgbasename="s,^.*/,," 146d63fdb69Smrg 147d63fdb69Smrg# func_dirname_and_basename file append nondir_replacement 148d63fdb69Smrg# perform func_basename and func_dirname in a single function 149d63fdb69Smrg# call: 150d63fdb69Smrg# dirname: Compute the dirname of FILE. If nonempty, 151d63fdb69Smrg# add APPEND to the result, otherwise set result 152d63fdb69Smrg# to NONDIR_REPLACEMENT. 153d63fdb69Smrg# value returned in "$func_dirname_result" 154d63fdb69Smrg# basename: Compute filename of FILE. 155d63fdb69Smrg# value retuned in "$func_basename_result" 156d63fdb69Smrg# Implementation must be kept synchronized with func_dirname 157d63fdb69Smrg# and func_basename. For efficiency, we do not delegate to 158d63fdb69Smrg# those functions but instead duplicate the functionality here. 159d63fdb69Smrgfunc_dirname_and_basename () 160d63fdb69Smrg{ 161d63fdb69Smrg # Extract subdirectory from the argument. 162d63fdb69Smrg func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` 163d63fdb69Smrg if test "X$func_dirname_result" = "X${1}"; then 164d63fdb69Smrg func_dirname_result="${3}" 165d63fdb69Smrg else 166d63fdb69Smrg func_dirname_result="$func_dirname_result${2}" 167d63fdb69Smrg fi 168d63fdb69Smrg func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` 169d63fdb69Smrg} 170d63fdb69Smrg 171d63fdb69Smrg# Generated shell functions inserted here. 1723da084b3Smrg 1733da084b3Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1743da084b3Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1753da084b3Smrg# the _XPG environment variable is not equal to 1 (one), the special 1763da084b3Smrg# positional parameter $0, within a function call, is the name of the 1773da084b3Smrg# function. 1783da084b3Smrgprogpath="$0" 1793da084b3Smrg 1803da084b3Smrg# The name of this program: 181d63fdb69Smrg# In the unlikely event $progname began with a '-', it would play havoc with 182d63fdb69Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case: 183d63fdb69Smrgfunc_dirname_and_basename "$progpath" 184d63fdb69Smrgprogname=$func_basename_result 185d63fdb69Smrgcase $progname in 186d63fdb69Smrg -*) progname=./$progname ;; 187d63fdb69Smrgesac 1883da084b3Smrg 189d63fdb69Smrg# Make sure we have an absolute path for reexecution: 190d63fdb69Smrgcase $progpath in 191d63fdb69Smrg [\\/]*|[A-Za-z]:\\*) ;; 192d63fdb69Smrg *[\\/]*) 193d63fdb69Smrg progdir=$func_dirname_result 194d63fdb69Smrg progdir=`cd "$progdir" && pwd` 195d63fdb69Smrg progpath="$progdir/$progname" 196d63fdb69Smrg ;; 197d63fdb69Smrg *) 198d63fdb69Smrg save_IFS="$IFS" 199d63fdb69Smrg IFS=: 200d63fdb69Smrg for progdir in $PATH; do 201d63fdb69Smrg IFS="$save_IFS" 202d63fdb69Smrg test -x "$progdir/$progname" && break 203d63fdb69Smrg done 204d63fdb69Smrg IFS="$save_IFS" 205d63fdb69Smrg test -n "$progdir" || progdir=`pwd` 206d63fdb69Smrg progpath="$progdir/$progname" 207d63fdb69Smrg ;; 208d63fdb69Smrgesac 2093da084b3Smrg 210d63fdb69Smrg# Sed substitution that helps us do robust quoting. It backslashifies 211d63fdb69Smrg# metacharacters that are still active within double-quoted strings. 212d63fdb69SmrgXsed="${SED}"' -e 1s/^X//' 213d63fdb69Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 214d63fdb69Smrg 215d63fdb69Smrg# Same as above, but do not quote variable references. 216d63fdb69Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 217d63fdb69Smrg 218d63fdb69Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 219d63fdb69Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 220d63fdb69Smrg# in input to double_quote_subst, that '$' was protected from expansion. 221d63fdb69Smrg# Since each input `\' is now two `\'s, look for any number of runs of 222d63fdb69Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 223d63fdb69Smrgbs='\\' 224d63fdb69Smrgbs2='\\\\' 225d63fdb69Smrgbs4='\\\\\\\\' 226d63fdb69Smrgdollar='\$' 227d63fdb69Smrgsed_double_backslash="\ 228d63fdb69Smrg s/$bs4/&\\ 229d63fdb69Smrg/g 230d63fdb69Smrg s/^$bs2$dollar/$bs&/ 231d63fdb69Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 232d63fdb69Smrg s/\n//g" 233d63fdb69Smrg 234d63fdb69Smrg# Standard options: 235d63fdb69Smrgopt_dry_run=false 236d63fdb69Smrgopt_help=false 237d63fdb69Smrgopt_quiet=false 238d63fdb69Smrgopt_verbose=false 239d63fdb69Smrgopt_warning=: 240d63fdb69Smrg 241d63fdb69Smrg# func_echo arg... 242d63fdb69Smrg# Echo program name prefixed message, along with the current mode 243d63fdb69Smrg# name if it has been set yet. 244d63fdb69Smrgfunc_echo () 245d63fdb69Smrg{ 246d63fdb69Smrg $ECHO "$progname${mode+: }$mode: $*" 247d63fdb69Smrg} 2483da084b3Smrg 249d63fdb69Smrg# func_verbose arg... 250d63fdb69Smrg# Echo program name prefixed message in verbose mode only. 251d63fdb69Smrgfunc_verbose () 252d63fdb69Smrg{ 253d63fdb69Smrg $opt_verbose && func_echo ${1+"$@"} 2543da084b3Smrg 255d63fdb69Smrg # A bug in bash halts the script if the last line of a function 256d63fdb69Smrg # fails when set -e is in force, so we need another command to 257d63fdb69Smrg # work around that: 258d63fdb69Smrg : 259d63fdb69Smrg} 2603da084b3Smrg 261d63fdb69Smrg# func_error arg... 262d63fdb69Smrg# Echo program name prefixed message to standard error. 263d63fdb69Smrgfunc_error () 264d63fdb69Smrg{ 265d63fdb69Smrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 266d63fdb69Smrg} 2673da084b3Smrg 268d63fdb69Smrg# func_warning arg... 269d63fdb69Smrg# Echo program name prefixed warning message to standard error. 270d63fdb69Smrgfunc_warning () 271d63fdb69Smrg{ 272d63fdb69Smrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 2733da084b3Smrg 274d63fdb69Smrg # bash bug again: 275d63fdb69Smrg : 276d63fdb69Smrg} 2773da084b3Smrg 278d63fdb69Smrg# func_fatal_error arg... 279d63fdb69Smrg# Echo program name prefixed message to standard error, and exit. 280d63fdb69Smrgfunc_fatal_error () 281d63fdb69Smrg{ 282d63fdb69Smrg func_error ${1+"$@"} 283d63fdb69Smrg exit $EXIT_FAILURE 284d63fdb69Smrg} 2853da084b3Smrg 286d63fdb69Smrg# func_fatal_help arg... 287d63fdb69Smrg# Echo program name prefixed message to standard error, followed by 288d63fdb69Smrg# a help hint, and exit. 289d63fdb69Smrgfunc_fatal_help () 290d63fdb69Smrg{ 291d63fdb69Smrg func_error ${1+"$@"} 292d63fdb69Smrg func_fatal_error "$help" 293d63fdb69Smrg} 294d63fdb69Smrghelp="Try \`$progname --help' for more information." ## default 2953da084b3Smrg 2963da084b3Smrg 297d63fdb69Smrg# func_grep expression filename 298d63fdb69Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 299d63fdb69Smrgfunc_grep () 300d63fdb69Smrg{ 301d63fdb69Smrg $GREP "$1" "$2" >/dev/null 2>&1 302d63fdb69Smrg} 303d63fdb69Smrg 304d63fdb69Smrg 305d63fdb69Smrg# func_mkdir_p directory-path 306d63fdb69Smrg# Make sure the entire path to DIRECTORY-PATH is available. 307d63fdb69Smrgfunc_mkdir_p () 308d63fdb69Smrg{ 309d63fdb69Smrg my_directory_path="$1" 310d63fdb69Smrg my_dir_list= 311d63fdb69Smrg 312d63fdb69Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 313d63fdb69Smrg 314d63fdb69Smrg # Protect directory names starting with `-' 315d63fdb69Smrg case $my_directory_path in 316d63fdb69Smrg -*) my_directory_path="./$my_directory_path" ;; 317d63fdb69Smrg esac 318d63fdb69Smrg 319d63fdb69Smrg # While some portion of DIR does not yet exist... 320d63fdb69Smrg while test ! -d "$my_directory_path"; do 321d63fdb69Smrg # ...make a list in topmost first order. Use a colon delimited 322d63fdb69Smrg # list incase some portion of path contains whitespace. 323d63fdb69Smrg my_dir_list="$my_directory_path:$my_dir_list" 324d63fdb69Smrg 325d63fdb69Smrg # If the last portion added has no slash in it, the list is done 326d63fdb69Smrg case $my_directory_path in */*) ;; *) break ;; esac 327d63fdb69Smrg 328d63fdb69Smrg # ...otherwise throw away the child directory and loop 329d63fdb69Smrg my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` 330d63fdb69Smrg done 331d63fdb69Smrg my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` 332d63fdb69Smrg 333d63fdb69Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 334d63fdb69Smrg for my_dir in $my_dir_list; do 335d63fdb69Smrg IFS="$save_mkdir_p_IFS" 336d63fdb69Smrg # mkdir can fail with a `File exist' error if two processes 337d63fdb69Smrg # try to create one of the directories concurrently. Don't 338d63fdb69Smrg # stop in that case! 339d63fdb69Smrg $MKDIR "$my_dir" 2>/dev/null || : 340d63fdb69Smrg done 341d63fdb69Smrg IFS="$save_mkdir_p_IFS" 342d63fdb69Smrg 343d63fdb69Smrg # Bail out if we (or some other process) failed to create a directory. 344d63fdb69Smrg test -d "$my_directory_path" || \ 345d63fdb69Smrg func_fatal_error "Failed to create \`$1'" 346d63fdb69Smrg fi 347d63fdb69Smrg} 3483da084b3Smrg 3493da084b3Smrg 3503da084b3Smrg# func_mktempdir [string] 3513da084b3Smrg# Make a temporary directory that won't clash with other running 3523da084b3Smrg# libtool processes, and avoids race conditions if possible. If 3533da084b3Smrg# given, STRING is the basename for that directory. 3543da084b3Smrgfunc_mktempdir () 3553da084b3Smrg{ 3563da084b3Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 3573da084b3Smrg 358d63fdb69Smrg if test "$opt_dry_run" = ":"; then 3593da084b3Smrg # Return a directory name, but don't create it in dry-run mode 3603da084b3Smrg my_tmpdir="${my_template}-$$" 3613da084b3Smrg else 3623da084b3Smrg 3633da084b3Smrg # If mktemp works, use that first and foremost 3643da084b3Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 3653da084b3Smrg 3663da084b3Smrg if test ! -d "$my_tmpdir"; then 367d63fdb69Smrg # Failing that, at least try and use $RANDOM to avoid a race 368d63fdb69Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 3693da084b3Smrg 370d63fdb69Smrg save_mktempdir_umask=`umask` 371d63fdb69Smrg umask 0077 372d63fdb69Smrg $MKDIR "$my_tmpdir" 373d63fdb69Smrg umask $save_mktempdir_umask 3743da084b3Smrg fi 3753da084b3Smrg 3763da084b3Smrg # If we're not in dry-run mode, bomb out on failure 377d63fdb69Smrg test -d "$my_tmpdir" || \ 378d63fdb69Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 3793da084b3Smrg fi 3803da084b3Smrg 381d63fdb69Smrg $ECHO "X$my_tmpdir" | $Xsed 3823da084b3Smrg} 3833da084b3Smrg 3843da084b3Smrg 385d63fdb69Smrg# func_quote_for_eval arg 386d63fdb69Smrg# Aesthetically quote ARG to be evaled later. 387d63fdb69Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 388d63fdb69Smrg# is double-quoted, suitable for a subsequent eval, whereas 389d63fdb69Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 390d63fdb69Smrg# which are still active within double quotes backslashified. 391d63fdb69Smrgfunc_quote_for_eval () 3923da084b3Smrg{ 393d63fdb69Smrg case $1 in 394d63fdb69Smrg *[\\\`\"\$]*) 395d63fdb69Smrg func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; 396d63fdb69Smrg *) 397d63fdb69Smrg func_quote_for_eval_unquoted_result="$1" ;; 398d63fdb69Smrg esac 399d63fdb69Smrg 400d63fdb69Smrg case $func_quote_for_eval_unquoted_result in 401d63fdb69Smrg # Double-quote args containing shell metacharacters to delay 402d63fdb69Smrg # word splitting, command substitution and and variable 403d63fdb69Smrg # expansion for a subsequent eval. 404d63fdb69Smrg # Many Bourne shells cannot handle close brackets correctly 405d63fdb69Smrg # in scan sets, so we specify it separately. 406d63fdb69Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 407d63fdb69Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 408d63fdb69Smrg ;; 409d63fdb69Smrg *) 410d63fdb69Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 4113da084b3Smrg esac 4123da084b3Smrg} 4133da084b3Smrg 4143da084b3Smrg 415d63fdb69Smrg# func_quote_for_expand arg 416d63fdb69Smrg# Aesthetically quote ARG to be evaled later; same as above, 417d63fdb69Smrg# but do not quote variable references. 418d63fdb69Smrgfunc_quote_for_expand () 4193da084b3Smrg{ 420d63fdb69Smrg case $1 in 421d63fdb69Smrg *[\\\`\"]*) 422d63fdb69Smrg my_arg=`$ECHO "X$1" | $Xsed \ 423d63fdb69Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 4243da084b3Smrg *) 425d63fdb69Smrg my_arg="$1" ;; 426d63fdb69Smrg esac 427d63fdb69Smrg 428d63fdb69Smrg case $my_arg in 429d63fdb69Smrg # Double-quote args containing shell metacharacters to delay 430d63fdb69Smrg # word splitting and command substitution for a subsequent eval. 431d63fdb69Smrg # Many Bourne shells cannot handle close brackets correctly 432d63fdb69Smrg # in scan sets, so we specify it separately. 433d63fdb69Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 434d63fdb69Smrg my_arg="\"$my_arg\"" 435d63fdb69Smrg ;; 436d63fdb69Smrg esac 437d63fdb69Smrg 438d63fdb69Smrg func_quote_for_expand_result="$my_arg" 4393da084b3Smrg} 4403da084b3Smrg 4413da084b3Smrg 442d63fdb69Smrg# func_show_eval cmd [fail_exp] 443d63fdb69Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 444d63fdb69Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 445d63fdb69Smrg# is given, then evaluate it. 446d63fdb69Smrgfunc_show_eval () 4473da084b3Smrg{ 448d63fdb69Smrg my_cmd="$1" 449d63fdb69Smrg my_fail_exp="${2-:}" 4503da084b3Smrg 451d63fdb69Smrg ${opt_silent-false} || { 452d63fdb69Smrg func_quote_for_expand "$my_cmd" 453d63fdb69Smrg eval "func_echo $func_quote_for_expand_result" 454d63fdb69Smrg } 455d63fdb69Smrg 456d63fdb69Smrg if ${opt_dry_run-false}; then :; else 457d63fdb69Smrg eval "$my_cmd" 458d63fdb69Smrg my_status=$? 459d63fdb69Smrg if test "$my_status" -eq 0; then :; else 460d63fdb69Smrg eval "(exit $my_status); $my_fail_exp" 461d63fdb69Smrg fi 4623da084b3Smrg fi 4633da084b3Smrg} 4643da084b3Smrg 465d63fdb69Smrg 466d63fdb69Smrg# func_show_eval_locale cmd [fail_exp] 467d63fdb69Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 468d63fdb69Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 469d63fdb69Smrg# is given, then evaluate it. Use the saved locale for evaluation. 470d63fdb69Smrgfunc_show_eval_locale () 4713da084b3Smrg{ 472d63fdb69Smrg my_cmd="$1" 473d63fdb69Smrg my_fail_exp="${2-:}" 4743da084b3Smrg 475d63fdb69Smrg ${opt_silent-false} || { 476d63fdb69Smrg func_quote_for_expand "$my_cmd" 477d63fdb69Smrg eval "func_echo $func_quote_for_expand_result" 478d63fdb69Smrg } 479d63fdb69Smrg 480d63fdb69Smrg if ${opt_dry_run-false}; then :; else 481d63fdb69Smrg eval "$lt_user_locale 482d63fdb69Smrg $my_cmd" 483d63fdb69Smrg my_status=$? 484d63fdb69Smrg eval "$lt_safe_locale" 485d63fdb69Smrg if test "$my_status" -eq 0; then :; else 486d63fdb69Smrg eval "(exit $my_status); $my_fail_exp" 4873da084b3Smrg fi 488d63fdb69Smrg fi 4893da084b3Smrg} 4903da084b3Smrg 4913da084b3Smrg 4923da084b3Smrg 493d63fdb69Smrg 494d63fdb69Smrg 495d63fdb69Smrg# func_version 496d63fdb69Smrg# Echo version message to standard output and exit. 497d63fdb69Smrgfunc_version () 498d63fdb69Smrg{ 499d63fdb69Smrg $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { 500d63fdb69Smrg s/^# // 501d63fdb69Smrg s/^# *$// 502d63fdb69Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 503d63fdb69Smrg p 504d63fdb69Smrg }' < "$progpath" 505d63fdb69Smrg exit $? 506d63fdb69Smrg} 507d63fdb69Smrg 508d63fdb69Smrg# func_usage 509d63fdb69Smrg# Echo short help message to standard output and exit. 510d63fdb69Smrgfunc_usage () 511d63fdb69Smrg{ 512d63fdb69Smrg $SED -n '/^# Usage:/,/# -h/ { 513d63fdb69Smrg s/^# // 514d63fdb69Smrg s/^# *$// 515d63fdb69Smrg s/\$progname/'$progname'/ 516d63fdb69Smrg p 517d63fdb69Smrg }' < "$progpath" 518d63fdb69Smrg $ECHO 519d63fdb69Smrg $ECHO "run \`$progname --help | more' for full usage" 520d63fdb69Smrg exit $? 521d63fdb69Smrg} 522d63fdb69Smrg 523d63fdb69Smrg# func_help 524d63fdb69Smrg# Echo long help message to standard output and exit. 525d63fdb69Smrgfunc_help () 526d63fdb69Smrg{ 527d63fdb69Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 528d63fdb69Smrg s/^# // 529d63fdb69Smrg s/^# *$// 530d63fdb69Smrg s*\$progname*'$progname'* 531d63fdb69Smrg s*\$host*'"$host"'* 532d63fdb69Smrg s*\$SHELL*'"$SHELL"'* 533d63fdb69Smrg s*\$LTCC*'"$LTCC"'* 534d63fdb69Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 535d63fdb69Smrg s*\$LD*'"$LD"'* 536d63fdb69Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 537d63fdb69Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 538d63fdb69Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 539d63fdb69Smrg p 540d63fdb69Smrg }' < "$progpath" 541d63fdb69Smrg exit $? 542d63fdb69Smrg} 543d63fdb69Smrg 544d63fdb69Smrg# func_missing_arg argname 545d63fdb69Smrg# Echo program name prefixed message to standard error and set global 546d63fdb69Smrg# exit_cmd. 547d63fdb69Smrgfunc_missing_arg () 548d63fdb69Smrg{ 549d63fdb69Smrg func_error "missing argument for $1" 550d63fdb69Smrg exit_cmd=exit 551d63fdb69Smrg} 552d63fdb69Smrg 553d63fdb69Smrgexit_cmd=: 554d63fdb69Smrg 555d63fdb69Smrg 556d63fdb69Smrg 557d63fdb69Smrg 558d63fdb69Smrg 559d63fdb69Smrg# Check that we have a working $ECHO. 560d63fdb69Smrgif test "X$1" = X--no-reexec; then 561d63fdb69Smrg # Discard the --no-reexec flag, and continue. 5623da084b3Smrg shift 563d63fdb69Smrgelif test "X$1" = X--fallback-echo; then 564d63fdb69Smrg # Avoid inline document here, it may be left over 565d63fdb69Smrg : 566d63fdb69Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then 567d63fdb69Smrg # Yippee, $ECHO works! 568d63fdb69Smrg : 569d63fdb69Smrgelse 570d63fdb69Smrg # Restart under the correct shell, and then maybe $ECHO will work. 571d63fdb69Smrg exec $SHELL "$progpath" --no-reexec ${1+"$@"} 572d63fdb69Smrgfi 5733da084b3Smrg 574d63fdb69Smrgif test "X$1" = X--fallback-echo; then 575d63fdb69Smrg # used as fallback echo 576d63fdb69Smrg shift 577d63fdb69Smrg cat <<EOF 578d63fdb69Smrg$* 579d63fdb69SmrgEOF 580d63fdb69Smrg exit $EXIT_SUCCESS 581d63fdb69Smrgfi 5823da084b3Smrg 583d63fdb69Smrgmagic="%%%MAGIC variable%%%" 584d63fdb69Smrgmagic_exe="%%%MAGIC EXE variable%%%" 5853da084b3Smrg 586d63fdb69Smrg# Global variables. 587d63fdb69Smrg# $mode is unset 588d63fdb69Smrgnonopt= 589d63fdb69Smrgexecute_dlfiles= 590d63fdb69Smrgpreserve_args= 591d63fdb69Smrglo2o="s/\\.lo\$/.${objext}/" 592d63fdb69Smrgo2lo="s/\\.${objext}\$/.lo/" 593d63fdb69Smrgextracted_archives= 594d63fdb69Smrgextracted_serial=0 5953da084b3Smrg 596d63fdb69Smrgopt_dry_run=false 597d63fdb69Smrgopt_duplicate_deps=false 598d63fdb69Smrgopt_silent=false 599d63fdb69Smrgopt_debug=: 6003da084b3Smrg 601d63fdb69Smrg# If this variable is set in any of the actions, the command in it 602d63fdb69Smrg# will be execed at the end. This prevents here-documents from being 603d63fdb69Smrg# left over by shells. 604d63fdb69Smrgexec_cmd= 6053da084b3Smrg 606d63fdb69Smrg# func_fatal_configuration arg... 607d63fdb69Smrg# Echo program name prefixed message to standard error, followed by 608d63fdb69Smrg# a configuration failure hint, and exit. 609d63fdb69Smrgfunc_fatal_configuration () 610d63fdb69Smrg{ 611d63fdb69Smrg func_error ${1+"$@"} 612d63fdb69Smrg func_error "See the $PACKAGE documentation for more information." 613d63fdb69Smrg func_fatal_error "Fatal configuration error." 614d63fdb69Smrg} 615d63fdb69Smrg 616d63fdb69Smrg 617d63fdb69Smrg# func_config 618d63fdb69Smrg# Display the configuration for all the tags in this script. 619d63fdb69Smrgfunc_config () 620d63fdb69Smrg{ 621d63fdb69Smrg re_begincf='^# ### BEGIN LIBTOOL' 622d63fdb69Smrg re_endcf='^# ### END LIBTOOL' 623d63fdb69Smrg 624d63fdb69Smrg # Default configuration. 625d63fdb69Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 6263da084b3Smrg 6273da084b3Smrg # Now print the configurations for the tags. 6283da084b3Smrg for tagname in $taglist; do 629d63fdb69Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 6303da084b3Smrg done 6313da084b3Smrg 632d63fdb69Smrg exit $? 633d63fdb69Smrg} 6343da084b3Smrg 635d63fdb69Smrg# func_features 636d63fdb69Smrg# Display the features supported by this script. 637d63fdb69Smrgfunc_features () 638d63fdb69Smrg{ 639d63fdb69Smrg $ECHO "host: $host" 6403da084b3Smrg if test "$build_libtool_libs" = yes; then 641d63fdb69Smrg $ECHO "enable shared libraries" 6423da084b3Smrg else 643d63fdb69Smrg $ECHO "disable shared libraries" 6443da084b3Smrg fi 6453da084b3Smrg if test "$build_old_libs" = yes; then 646d63fdb69Smrg $ECHO "enable static libraries" 6473da084b3Smrg else 648d63fdb69Smrg $ECHO "disable static libraries" 6493da084b3Smrg fi 650d63fdb69Smrg 6513da084b3Smrg exit $? 652d63fdb69Smrg} 653d63fdb69Smrg 654d63fdb69Smrg# func_enable_tag tagname 655d63fdb69Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 656d63fdb69Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 657d63fdb69Smrg# variable here. 658d63fdb69Smrgfunc_enable_tag () 659d63fdb69Smrg{ 660d63fdb69Smrg # Global variable: 661d63fdb69Smrg tagname="$1" 6623da084b3Smrg 663d63fdb69Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 664d63fdb69Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 665d63fdb69Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 6663da084b3Smrg 667d63fdb69Smrg # Validate tagname. 668d63fdb69Smrg case $tagname in 669d63fdb69Smrg *[!-_A-Za-z0-9,/]*) 670d63fdb69Smrg func_fatal_error "invalid tag name: $tagname" 671d63fdb69Smrg ;; 672d63fdb69Smrg esac 6733da084b3Smrg 674d63fdb69Smrg # Don't test for the "default" C tag, as we know it's 675d63fdb69Smrg # there but not specially marked. 676d63fdb69Smrg case $tagname in 677d63fdb69Smrg CC) ;; 678d63fdb69Smrg *) 679d63fdb69Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 680d63fdb69Smrg taglist="$taglist $tagname" 681d63fdb69Smrg 682d63fdb69Smrg # Evaluate the configuration. Be careful to quote the path 683d63fdb69Smrg # and the sed script, to avoid splitting on whitespace, but 684d63fdb69Smrg # also don't use non-portable quotes within backquotes within 685d63fdb69Smrg # quotes we have to do it in 2 steps: 686d63fdb69Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 687d63fdb69Smrg eval "$extractedcf" 688d63fdb69Smrg else 689d63fdb69Smrg func_error "ignoring unknown tag $tagname" 690d63fdb69Smrg fi 691d63fdb69Smrg ;; 692d63fdb69Smrg esac 693d63fdb69Smrg} 6943da084b3Smrg 695d63fdb69Smrg# Parse options once, thoroughly. This comes as soon as possible in 696d63fdb69Smrg# the script to make things like `libtool --version' happen quickly. 697d63fdb69Smrg{ 6983da084b3Smrg 699d63fdb69Smrg # Shorthand for --mode=foo, only valid as the first argument 700d63fdb69Smrg case $1 in 701d63fdb69Smrg clean|clea|cle|cl) 702d63fdb69Smrg shift; set dummy --mode clean ${1+"$@"}; shift 7033da084b3Smrg ;; 704d63fdb69Smrg compile|compil|compi|comp|com|co|c) 705d63fdb69Smrg shift; set dummy --mode compile ${1+"$@"}; shift 7063da084b3Smrg ;; 707d63fdb69Smrg execute|execut|execu|exec|exe|ex|e) 708d63fdb69Smrg shift; set dummy --mode execute ${1+"$@"}; shift 7093da084b3Smrg ;; 710d63fdb69Smrg finish|finis|fini|fin|fi|f) 711d63fdb69Smrg shift; set dummy --mode finish ${1+"$@"}; shift 7123da084b3Smrg ;; 713d63fdb69Smrg install|instal|insta|inst|ins|in|i) 714d63fdb69Smrg shift; set dummy --mode install ${1+"$@"}; shift 715d63fdb69Smrg ;; 716d63fdb69Smrg link|lin|li|l) 717d63fdb69Smrg shift; set dummy --mode link ${1+"$@"}; shift 718d63fdb69Smrg ;; 719d63fdb69Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 720d63fdb69Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 7213da084b3Smrg ;; 7223da084b3Smrg esac 7233da084b3Smrg 724d63fdb69Smrg # Parse non-mode specific arguments: 725d63fdb69Smrg while test "$#" -gt 0; do 726d63fdb69Smrg opt="$1" 727d63fdb69Smrg shift 7283da084b3Smrg 729d63fdb69Smrg case $opt in 730d63fdb69Smrg --config) func_config ;; 7313da084b3Smrg 732d63fdb69Smrg --debug) preserve_args="$preserve_args $opt" 733d63fdb69Smrg func_echo "enabling shell trace mode" 734d63fdb69Smrg opt_debug='set -x' 735d63fdb69Smrg $opt_debug 736d63fdb69Smrg ;; 7373da084b3Smrg 738d63fdb69Smrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 739d63fdb69Smrg execute_dlfiles="$execute_dlfiles $1" 740d63fdb69Smrg shift 741d63fdb69Smrg ;; 7423da084b3Smrg 743d63fdb69Smrg --dry-run | -n) opt_dry_run=: ;; 744d63fdb69Smrg --features) func_features ;; 745d63fdb69Smrg --finish) mode="finish" ;; 746d63fdb69Smrg 747d63fdb69Smrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 748d63fdb69Smrg case $1 in 749d63fdb69Smrg # Valid mode arguments: 750d63fdb69Smrg clean) ;; 751d63fdb69Smrg compile) ;; 752d63fdb69Smrg execute) ;; 753d63fdb69Smrg finish) ;; 754d63fdb69Smrg install) ;; 755d63fdb69Smrg link) ;; 756d63fdb69Smrg relink) ;; 757d63fdb69Smrg uninstall) ;; 758d63fdb69Smrg 759d63fdb69Smrg # Catch anything else as an error 760d63fdb69Smrg *) func_error "invalid argument for $opt" 761d63fdb69Smrg exit_cmd=exit 762d63fdb69Smrg break 763d63fdb69Smrg ;; 764d63fdb69Smrg esac 765d63fdb69Smrg 766d63fdb69Smrg mode="$1" 767d63fdb69Smrg shift 768d63fdb69Smrg ;; 769d63fdb69Smrg 770d63fdb69Smrg --preserve-dup-deps) 771d63fdb69Smrg opt_duplicate_deps=: ;; 772d63fdb69Smrg 773d63fdb69Smrg --quiet|--silent) preserve_args="$preserve_args $opt" 774d63fdb69Smrg opt_silent=: 775d63fdb69Smrg ;; 776d63fdb69Smrg 777d63fdb69Smrg --verbose| -v) preserve_args="$preserve_args $opt" 778d63fdb69Smrg opt_silent=false 779d63fdb69Smrg ;; 780d63fdb69Smrg 781d63fdb69Smrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 782d63fdb69Smrg preserve_args="$preserve_args $opt $1" 783d63fdb69Smrg func_enable_tag "$1" # tagname is set here 784d63fdb69Smrg shift 785d63fdb69Smrg ;; 786d63fdb69Smrg 787d63fdb69Smrg # Separate optargs to long options: 788d63fdb69Smrg -dlopen=*|--mode=*|--tag=*) 789d63fdb69Smrg func_opt_split "$opt" 790d63fdb69Smrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 791d63fdb69Smrg shift 792d63fdb69Smrg ;; 793d63fdb69Smrg 794d63fdb69Smrg -\?|-h) func_usage ;; 795d63fdb69Smrg --help) opt_help=: ;; 796d63fdb69Smrg --version) func_version ;; 797d63fdb69Smrg 798d63fdb69Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 799d63fdb69Smrg 800d63fdb69Smrg *) nonopt="$opt" 801d63fdb69Smrg break 802d63fdb69Smrg ;; 803d63fdb69Smrg esac 804d63fdb69Smrg done 805d63fdb69Smrg 806d63fdb69Smrg 807d63fdb69Smrg case $host in 808d63fdb69Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 809d63fdb69Smrg # don't eliminate duplications in $postdeps and $predeps 810d63fdb69Smrg opt_duplicate_compiler_generated_deps=: 8113da084b3Smrg ;; 8123da084b3Smrg *) 813d63fdb69Smrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 814d63fdb69Smrg ;; 815d63fdb69Smrg esac 8163da084b3Smrg 817d63fdb69Smrg # Having warned about all mis-specified options, bail out if 818d63fdb69Smrg # anything was wrong. 819d63fdb69Smrg $exit_cmd $EXIT_FAILURE 820d63fdb69Smrg} 821d63fdb69Smrg 822d63fdb69Smrg# func_check_version_match 823d63fdb69Smrg# Ensure that we are using m4 macros, and libtool script from the same 824d63fdb69Smrg# release of libtool. 825d63fdb69Smrgfunc_check_version_match () 826d63fdb69Smrg{ 827d63fdb69Smrg if test "$package_revision" != "$macro_revision"; then 828d63fdb69Smrg if test "$VERSION" != "$macro_version"; then 829d63fdb69Smrg if test -z "$macro_version"; then 830d63fdb69Smrg cat >&2 <<_LT_EOF 831d63fdb69Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 832d63fdb69Smrg$progname: definition of this LT_INIT comes from an older release. 833d63fdb69Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 834d63fdb69Smrg$progname: and run autoconf again. 835d63fdb69Smrg_LT_EOF 836d63fdb69Smrg else 837d63fdb69Smrg cat >&2 <<_LT_EOF 838d63fdb69Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 839d63fdb69Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 840d63fdb69Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 841d63fdb69Smrg$progname: and run autoconf again. 842d63fdb69Smrg_LT_EOF 8433da084b3Smrg fi 844d63fdb69Smrg else 845d63fdb69Smrg cat >&2 <<_LT_EOF 846d63fdb69Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 847d63fdb69Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 848d63fdb69Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 849d63fdb69Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 850d63fdb69Smrg_LT_EOF 851d63fdb69Smrg fi 852d63fdb69Smrg 853d63fdb69Smrg exit $EXIT_MISMATCH 854d63fdb69Smrg fi 855d63fdb69Smrg} 856d63fdb69Smrg 857d63fdb69Smrg 858d63fdb69Smrg## ----------- ## 859d63fdb69Smrg## Main. ## 860d63fdb69Smrg## ----------- ## 861d63fdb69Smrg 862d63fdb69Smrg$opt_help || { 863d63fdb69Smrg # Sanity checks first: 864d63fdb69Smrg func_check_version_match 865d63fdb69Smrg 866d63fdb69Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 867d63fdb69Smrg func_fatal_configuration "not configured to build any kind of library" 8683da084b3Smrg fi 8693da084b3Smrg 870d63fdb69Smrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 871d63fdb69Smrg 872d63fdb69Smrg 873d63fdb69Smrg # Darwin sucks 874d63fdb69Smrg eval std_shrext=\"$shrext_cmds\" 875d63fdb69Smrg 876d63fdb69Smrg 8773da084b3Smrg # Only execute mode is allowed to have -dlopen flags. 8783da084b3Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 879d63fdb69Smrg func_error "unrecognized option \`-dlopen'" 880d63fdb69Smrg $ECHO "$help" 1>&2 8813da084b3Smrg exit $EXIT_FAILURE 8823da084b3Smrg fi 8833da084b3Smrg 8843da084b3Smrg # Change the help message to a mode-specific one. 8853da084b3Smrg generic_help="$help" 886d63fdb69Smrg help="Try \`$progname --help --mode=$mode' for more information." 887d63fdb69Smrg} 8883da084b3Smrg 8893da084b3Smrg 890d63fdb69Smrg# func_lalib_p file 891d63fdb69Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 892d63fdb69Smrg# This function is only a basic sanity check; it will hardly flush out 893d63fdb69Smrg# determined imposters. 894d63fdb69Smrgfunc_lalib_p () 895d63fdb69Smrg{ 896d63fdb69Smrg test -f "$1" && 897d63fdb69Smrg $SED -e 4q "$1" 2>/dev/null \ 898d63fdb69Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 899d63fdb69Smrg} 9003da084b3Smrg 901d63fdb69Smrg# func_lalib_unsafe_p file 902d63fdb69Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 903d63fdb69Smrg# This function implements the same check as func_lalib_p without 904d63fdb69Smrg# resorting to external programs. To this end, it redirects stdin and 905d63fdb69Smrg# closes it afterwards, without saving the original file descriptor. 906d63fdb69Smrg# As a safety measure, use it only where a negative result would be 907d63fdb69Smrg# fatal anyway. Works if `file' does not exist. 908d63fdb69Smrgfunc_lalib_unsafe_p () 909d63fdb69Smrg{ 910d63fdb69Smrg lalib_p=no 911d63fdb69Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 912d63fdb69Smrg for lalib_p_l in 1 2 3 4 913d63fdb69Smrg do 914d63fdb69Smrg read lalib_p_line 915d63fdb69Smrg case "$lalib_p_line" in 916d63fdb69Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 917d63fdb69Smrg esac 918d63fdb69Smrg done 919d63fdb69Smrg exec 0<&5 5<&- 920d63fdb69Smrg fi 921d63fdb69Smrg test "$lalib_p" = yes 922d63fdb69Smrg} 9233da084b3Smrg 924d63fdb69Smrg# func_ltwrapper_script_p file 925d63fdb69Smrg# True iff FILE is a libtool wrapper script 926d63fdb69Smrg# This function is only a basic sanity check; it will hardly flush out 927d63fdb69Smrg# determined imposters. 928d63fdb69Smrgfunc_ltwrapper_script_p () 929d63fdb69Smrg{ 930d63fdb69Smrg func_lalib_p "$1" 931d63fdb69Smrg} 9323da084b3Smrg 933d63fdb69Smrg# func_ltwrapper_executable_p file 934d63fdb69Smrg# True iff FILE is a libtool wrapper executable 935d63fdb69Smrg# This function is only a basic sanity check; it will hardly flush out 936d63fdb69Smrg# determined imposters. 937d63fdb69Smrgfunc_ltwrapper_executable_p () 938d63fdb69Smrg{ 939d63fdb69Smrg func_ltwrapper_exec_suffix= 940d63fdb69Smrg case $1 in 941d63fdb69Smrg *.exe) ;; 942d63fdb69Smrg *) func_ltwrapper_exec_suffix=.exe ;; 943d63fdb69Smrg esac 944d63fdb69Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 945d63fdb69Smrg} 9463da084b3Smrg 947d63fdb69Smrg# func_ltwrapper_scriptname file 948d63fdb69Smrg# Assumes file is an ltwrapper_executable 949d63fdb69Smrg# uses $file to determine the appropriate filename for a 950d63fdb69Smrg# temporary ltwrapper_script. 951d63fdb69Smrgfunc_ltwrapper_scriptname () 952d63fdb69Smrg{ 953d63fdb69Smrg func_ltwrapper_scriptname_result="" 954d63fdb69Smrg if func_ltwrapper_executable_p "$1"; then 955d63fdb69Smrg func_dirname_and_basename "$1" "" "." 956d63fdb69Smrg func_stripname '' '.exe' "$func_basename_result" 957d63fdb69Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 958d63fdb69Smrg fi 959d63fdb69Smrg} 9603da084b3Smrg 961d63fdb69Smrg# func_ltwrapper_p file 962d63fdb69Smrg# True iff FILE is a libtool wrapper script or wrapper executable 963d63fdb69Smrg# This function is only a basic sanity check; it will hardly flush out 964d63fdb69Smrg# determined imposters. 965d63fdb69Smrgfunc_ltwrapper_p () 966d63fdb69Smrg{ 967d63fdb69Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 968d63fdb69Smrg} 9693da084b3Smrg 9703da084b3Smrg 971d63fdb69Smrg# func_execute_cmds commands fail_cmd 972d63fdb69Smrg# Execute tilde-delimited COMMANDS. 973d63fdb69Smrg# If FAIL_CMD is given, eval that upon failure. 974d63fdb69Smrg# FAIL_CMD may read-access the current command in variable CMD! 975d63fdb69Smrgfunc_execute_cmds () 976d63fdb69Smrg{ 977d63fdb69Smrg $opt_debug 978d63fdb69Smrg save_ifs=$IFS; IFS='~' 979d63fdb69Smrg for cmd in $1; do 980d63fdb69Smrg IFS=$save_ifs 981d63fdb69Smrg eval cmd=\"$cmd\" 982d63fdb69Smrg func_show_eval "$cmd" "${2-:}" 983d63fdb69Smrg done 984d63fdb69Smrg IFS=$save_ifs 985d63fdb69Smrg} 986d63fdb69Smrg 987d63fdb69Smrg 988d63fdb69Smrg# func_source file 989d63fdb69Smrg# Source FILE, adding directory component if necessary. 990d63fdb69Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 991d63fdb69Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 992d63fdb69Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 993d63fdb69Smrg# `FILE.' does not work on cygwin managed mounts. 994d63fdb69Smrgfunc_source () 995d63fdb69Smrg{ 996d63fdb69Smrg $opt_debug 997d63fdb69Smrg case $1 in 998d63fdb69Smrg */* | *\\*) . "$1" ;; 999d63fdb69Smrg *) . "./$1" ;; 1000d63fdb69Smrg esac 1001d63fdb69Smrg} 1002d63fdb69Smrg 1003d63fdb69Smrg 1004d63fdb69Smrg# func_infer_tag arg 1005d63fdb69Smrg# Infer tagged configuration to use if any are available and 1006d63fdb69Smrg# if one wasn't chosen via the "--tag" command line option. 1007d63fdb69Smrg# Only attempt this if the compiler in the base compile 1008d63fdb69Smrg# command doesn't match the default compiler. 1009d63fdb69Smrg# arg is usually of the form 'gcc ...' 1010d63fdb69Smrgfunc_infer_tag () 1011d63fdb69Smrg{ 1012d63fdb69Smrg $opt_debug 1013d63fdb69Smrg if test -n "$available_tags" && test -z "$tagname"; then 1014d63fdb69Smrg CC_quoted= 1015d63fdb69Smrg for arg in $CC; do 1016d63fdb69Smrg func_quote_for_eval "$arg" 1017d63fdb69Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1018d63fdb69Smrg done 1019d63fdb69Smrg case $@ in 1020d63fdb69Smrg # Blanks in the command may have been stripped by the calling shell, 1021d63fdb69Smrg # but not from the CC environment variable when configure was run. 1022d63fdb69Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; 1023d63fdb69Smrg # Blanks at the start of $base_compile will cause this to fail 1024d63fdb69Smrg # if we don't check for them as well. 1025d63fdb69Smrg *) 1026d63fdb69Smrg for z in $available_tags; do 1027d63fdb69Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1028d63fdb69Smrg # Evaluate the configuration. 1029d63fdb69Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1030d63fdb69Smrg CC_quoted= 1031d63fdb69Smrg for arg in $CC; do 1032d63fdb69Smrg # Double-quote args containing other shell metacharacters. 1033d63fdb69Smrg func_quote_for_eval "$arg" 1034d63fdb69Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1035d63fdb69Smrg done 1036d63fdb69Smrg case "$@ " in 1037d63fdb69Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) 1038d63fdb69Smrg # The compiler in the base compile command matches 1039d63fdb69Smrg # the one in the tagged configuration. 1040d63fdb69Smrg # Assume this is the tagged configuration we want. 1041d63fdb69Smrg tagname=$z 1042d63fdb69Smrg break 1043d63fdb69Smrg ;; 10443da084b3Smrg esac 1045d63fdb69Smrg fi 1046d63fdb69Smrg done 1047d63fdb69Smrg # If $tagname still isn't set, then no tagged configuration 1048d63fdb69Smrg # was found and let the user know that the "--tag" command 1049d63fdb69Smrg # line option must be used. 1050d63fdb69Smrg if test -z "$tagname"; then 1051d63fdb69Smrg func_echo "unable to infer tagged configuration" 1052d63fdb69Smrg func_fatal_error "specify a tag with \`--tag'" 1053d63fdb69Smrg# else 1054d63fdb69Smrg# func_verbose "using $tagname tagged configuration" 1055d63fdb69Smrg fi 1056d63fdb69Smrg ;; 1057d63fdb69Smrg esac 1058d63fdb69Smrg fi 1059d63fdb69Smrg} 1060d63fdb69Smrg 1061d63fdb69Smrg 1062d63fdb69Smrg 1063d63fdb69Smrg# func_write_libtool_object output_name pic_name nonpic_name 1064d63fdb69Smrg# Create a libtool object file (analogous to a ".la" file), 1065d63fdb69Smrg# but don't create it if we're doing a dry run. 1066d63fdb69Smrgfunc_write_libtool_object () 1067d63fdb69Smrg{ 1068d63fdb69Smrg write_libobj=${1} 1069d63fdb69Smrg if test "$build_libtool_libs" = yes; then 1070d63fdb69Smrg write_lobj=\'${2}\' 1071d63fdb69Smrg else 1072d63fdb69Smrg write_lobj=none 1073d63fdb69Smrg fi 1074d63fdb69Smrg 1075d63fdb69Smrg if test "$build_old_libs" = yes; then 1076d63fdb69Smrg write_oldobj=\'${3}\' 1077d63fdb69Smrg else 1078d63fdb69Smrg write_oldobj=none 1079d63fdb69Smrg fi 1080d63fdb69Smrg 1081d63fdb69Smrg $opt_dry_run || { 1082d63fdb69Smrg cat >${write_libobj}T <<EOF 1083d63fdb69Smrg# $write_libobj - a libtool object file 1084d63fdb69Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1085d63fdb69Smrg# 1086d63fdb69Smrg# Please DO NOT delete this file! 1087d63fdb69Smrg# It is necessary for linking the library. 1088d63fdb69Smrg 1089d63fdb69Smrg# Name of the PIC object. 1090d63fdb69Smrgpic_object=$write_lobj 1091d63fdb69Smrg 1092d63fdb69Smrg# Name of the non-PIC object 1093d63fdb69Smrgnon_pic_object=$write_oldobj 1094d63fdb69Smrg 1095d63fdb69SmrgEOF 1096d63fdb69Smrg $MV "${write_libobj}T" "${write_libobj}" 1097d63fdb69Smrg } 1098d63fdb69Smrg} 1099d63fdb69Smrg 1100d63fdb69Smrg# func_mode_compile arg... 1101d63fdb69Smrgfunc_mode_compile () 1102d63fdb69Smrg{ 1103d63fdb69Smrg $opt_debug 1104d63fdb69Smrg # Get the compilation command and the source file. 1105d63fdb69Smrg base_compile= 1106d63fdb69Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1107d63fdb69Smrg suppress_opt=yes 1108d63fdb69Smrg suppress_output= 1109d63fdb69Smrg arg_mode=normal 1110d63fdb69Smrg libobj= 1111d63fdb69Smrg later= 1112d63fdb69Smrg pie_flag= 1113d63fdb69Smrg 1114d63fdb69Smrg for arg 1115d63fdb69Smrg do 1116d63fdb69Smrg case $arg_mode in 1117d63fdb69Smrg arg ) 1118d63fdb69Smrg # do not "continue". Instead, add this to base_compile 1119d63fdb69Smrg lastarg="$arg" 1120d63fdb69Smrg arg_mode=normal 1121d63fdb69Smrg ;; 1122d63fdb69Smrg 1123d63fdb69Smrg target ) 1124d63fdb69Smrg libobj="$arg" 1125d63fdb69Smrg arg_mode=normal 1126d63fdb69Smrg continue 1127d63fdb69Smrg ;; 1128d63fdb69Smrg 1129d63fdb69Smrg normal ) 1130d63fdb69Smrg # Accept any command-line options. 1131d63fdb69Smrg case $arg in 1132d63fdb69Smrg -o) 1133d63fdb69Smrg test -n "$libobj" && \ 1134d63fdb69Smrg func_fatal_error "you cannot specify \`-o' more than once" 1135d63fdb69Smrg arg_mode=target 1136d63fdb69Smrg continue 1137d63fdb69Smrg ;; 1138d63fdb69Smrg 1139d63fdb69Smrg -pie | -fpie | -fPIE) 1140d63fdb69Smrg pie_flag="$pie_flag $arg" 1141d63fdb69Smrg continue 1142d63fdb69Smrg ;; 1143d63fdb69Smrg 1144d63fdb69Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1145d63fdb69Smrg later="$later $arg" 1146d63fdb69Smrg continue 1147d63fdb69Smrg ;; 1148d63fdb69Smrg 1149d63fdb69Smrg -no-suppress) 1150d63fdb69Smrg suppress_opt=no 1151d63fdb69Smrg continue 1152d63fdb69Smrg ;; 1153d63fdb69Smrg 1154d63fdb69Smrg -Xcompiler) 1155d63fdb69Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 1156d63fdb69Smrg continue # The current "srcfile" will either be retained or 1157d63fdb69Smrg ;; # replaced later. I would guess that would be a bug. 1158d63fdb69Smrg 1159d63fdb69Smrg -Wc,*) 1160d63fdb69Smrg func_stripname '-Wc,' '' "$arg" 1161d63fdb69Smrg args=$func_stripname_result 1162d63fdb69Smrg lastarg= 1163d63fdb69Smrg save_ifs="$IFS"; IFS=',' 1164d63fdb69Smrg for arg in $args; do 1165d63fdb69Smrg IFS="$save_ifs" 1166d63fdb69Smrg func_quote_for_eval "$arg" 1167d63fdb69Smrg lastarg="$lastarg $func_quote_for_eval_result" 11683da084b3Smrg done 11693da084b3Smrg IFS="$save_ifs" 1170d63fdb69Smrg func_stripname ' ' '' "$lastarg" 1171d63fdb69Smrg lastarg=$func_stripname_result 11723da084b3Smrg 11733da084b3Smrg # Add the arguments to base_compile. 11743da084b3Smrg base_compile="$base_compile $lastarg" 11753da084b3Smrg continue 11763da084b3Smrg ;; 11773da084b3Smrg 1178d63fdb69Smrg *) 11793da084b3Smrg # Accept the current argument as the source file. 11803da084b3Smrg # The previous "srcfile" becomes the current argument. 11813da084b3Smrg # 11823da084b3Smrg lastarg="$srcfile" 11833da084b3Smrg srcfile="$arg" 11843da084b3Smrg ;; 11853da084b3Smrg esac # case $arg 11863da084b3Smrg ;; 11873da084b3Smrg esac # case $arg_mode 11883da084b3Smrg 11893da084b3Smrg # Aesthetically quote the previous argument. 1190d63fdb69Smrg func_quote_for_eval "$lastarg" 1191d63fdb69Smrg base_compile="$base_compile $func_quote_for_eval_result" 11923da084b3Smrg done # for arg 11933da084b3Smrg 11943da084b3Smrg case $arg_mode in 11953da084b3Smrg arg) 1196d63fdb69Smrg func_fatal_error "you must specify an argument for -Xcompile" 11973da084b3Smrg ;; 11983da084b3Smrg target) 1199d63fdb69Smrg func_fatal_error "you must specify a target with \`-o'" 12003da084b3Smrg ;; 12013da084b3Smrg *) 12023da084b3Smrg # Get the name of the library object. 1203d63fdb69Smrg test -z "$libobj" && { 1204d63fdb69Smrg func_basename "$srcfile" 1205d63fdb69Smrg libobj="$func_basename_result" 1206d63fdb69Smrg } 12073da084b3Smrg ;; 12083da084b3Smrg esac 12093da084b3Smrg 12103da084b3Smrg # Recognize several different file suffixes. 12113da084b3Smrg # If the user specifies -o file.o, it is replaced with file.lo 12123da084b3Smrg case $libobj in 1213d63fdb69Smrg *.[cCFSifmso] | \ 1214d63fdb69Smrg *.ada | *.adb | *.ads | *.asm | \ 1215d63fdb69Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 1216d63fdb69Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx) 1217d63fdb69Smrg func_xform "$libobj" 1218d63fdb69Smrg libobj=$func_xform_result 1219d63fdb69Smrg ;; 12203da084b3Smrg esac 12213da084b3Smrg 12223da084b3Smrg case $libobj in 1223d63fdb69Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 12243da084b3Smrg *) 1225d63fdb69Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 12263da084b3Smrg ;; 12273da084b3Smrg esac 12283da084b3Smrg 12293da084b3Smrg func_infer_tag $base_compile 12303da084b3Smrg 12313da084b3Smrg for arg in $later; do 12323da084b3Smrg case $arg in 1233d63fdb69Smrg -shared) 1234d63fdb69Smrg test "$build_libtool_libs" != yes && \ 1235d63fdb69Smrg func_fatal_configuration "can not build a shared library" 1236d63fdb69Smrg build_old_libs=no 1237d63fdb69Smrg continue 1238d63fdb69Smrg ;; 1239d63fdb69Smrg 12403da084b3Smrg -static) 1241d63fdb69Smrg build_libtool_libs=no 12423da084b3Smrg build_old_libs=yes 12433da084b3Smrg continue 12443da084b3Smrg ;; 12453da084b3Smrg 12463da084b3Smrg -prefer-pic) 12473da084b3Smrg pic_mode=yes 12483da084b3Smrg continue 12493da084b3Smrg ;; 12503da084b3Smrg 12513da084b3Smrg -prefer-non-pic) 12523da084b3Smrg pic_mode=no 12533da084b3Smrg continue 12543da084b3Smrg ;; 12553da084b3Smrg esac 12563da084b3Smrg done 12573da084b3Smrg 1258d63fdb69Smrg func_quote_for_eval "$libobj" 1259d63fdb69Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 1260d63fdb69Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 1261d63fdb69Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 1262d63fdb69Smrg func_dirname_and_basename "$obj" "/" "" 1263d63fdb69Smrg objname="$func_basename_result" 1264d63fdb69Smrg xdir="$func_dirname_result" 12653da084b3Smrg lobj=${xdir}$objdir/$objname 12663da084b3Smrg 1267d63fdb69Smrg test -z "$base_compile" && \ 1268d63fdb69Smrg func_fatal_help "you must specify a compilation command" 12693da084b3Smrg 12703da084b3Smrg # Delete any leftover library objects. 12713da084b3Smrg if test "$build_old_libs" = yes; then 12723da084b3Smrg removelist="$obj $lobj $libobj ${libobj}T" 12733da084b3Smrg else 12743da084b3Smrg removelist="$lobj $libobj ${libobj}T" 12753da084b3Smrg fi 12763da084b3Smrg 12773da084b3Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 12783da084b3Smrg case $host_os in 1279d63fdb69Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 12803da084b3Smrg pic_mode=default 12813da084b3Smrg ;; 12823da084b3Smrg esac 12833da084b3Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 12843da084b3Smrg # non-PIC code in shared libraries is not supported 12853da084b3Smrg pic_mode=default 12863da084b3Smrg fi 12873da084b3Smrg 12883da084b3Smrg # Calculate the filename of the output object if compiler does 12893da084b3Smrg # not support -o with -c 12903da084b3Smrg if test "$compiler_c_o" = no; then 1291d63fdb69Smrg output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 12923da084b3Smrg lockfile="$output_obj.lock" 12933da084b3Smrg else 12943da084b3Smrg output_obj= 12953da084b3Smrg need_locks=no 12963da084b3Smrg lockfile= 12973da084b3Smrg fi 12983da084b3Smrg 12993da084b3Smrg # Lock this critical section if it is needed 13003da084b3Smrg # We use this script file to make the link, it avoids creating a new file 13013da084b3Smrg if test "$need_locks" = yes; then 1302d63fdb69Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 1303d63fdb69Smrg func_echo "Waiting for $lockfile to be removed" 13043da084b3Smrg sleep 2 13053da084b3Smrg done 13063da084b3Smrg elif test "$need_locks" = warn; then 13073da084b3Smrg if test -f "$lockfile"; then 1308d63fdb69Smrg $ECHO "\ 13093da084b3Smrg*** ERROR, $lockfile exists and contains: 13103da084b3Smrg`cat $lockfile 2>/dev/null` 13113da084b3Smrg 13123da084b3SmrgThis indicates that another process is trying to use the same 13133da084b3Smrgtemporary object file, and libtool could not work around it because 13143da084b3Smrgyour compiler does not support \`-c' and \`-o' together. If you 13153da084b3Smrgrepeat this compilation, it may succeed, by chance, but you had better 13163da084b3Smrgavoid parallel builds (make -j) in this platform, or get a better 13173da084b3Smrgcompiler." 13183da084b3Smrg 1319d63fdb69Smrg $opt_dry_run || $RM $removelist 13203da084b3Smrg exit $EXIT_FAILURE 13213da084b3Smrg fi 1322d63fdb69Smrg removelist="$removelist $output_obj" 1323d63fdb69Smrg $ECHO "$srcfile" > "$lockfile" 13243da084b3Smrg fi 13253da084b3Smrg 1326d63fdb69Smrg $opt_dry_run || $RM $removelist 1327d63fdb69Smrg removelist="$removelist $lockfile" 1328d63fdb69Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 1329d63fdb69Smrg 13303da084b3Smrg if test -n "$fix_srcfile_path"; then 13313da084b3Smrg eval srcfile=\"$fix_srcfile_path\" 13323da084b3Smrg fi 1333d63fdb69Smrg func_quote_for_eval "$srcfile" 1334d63fdb69Smrg qsrcfile=$func_quote_for_eval_result 13353da084b3Smrg 13363da084b3Smrg # Only build a PIC object if we are building libtool libraries. 13373da084b3Smrg if test "$build_libtool_libs" = yes; then 13383da084b3Smrg # Without this assignment, base_compile gets emptied. 13393da084b3Smrg fbsd_hideous_sh_bug=$base_compile 13403da084b3Smrg 13413da084b3Smrg if test "$pic_mode" != no; then 13423da084b3Smrg command="$base_compile $qsrcfile $pic_flag" 13433da084b3Smrg else 13443da084b3Smrg # Don't build PIC code 13453da084b3Smrg command="$base_compile $qsrcfile" 13463da084b3Smrg fi 13473da084b3Smrg 1348d63fdb69Smrg func_mkdir_p "$xdir$objdir" 13493da084b3Smrg 13503da084b3Smrg if test -z "$output_obj"; then 13513da084b3Smrg # Place PIC objects in $objdir 13523da084b3Smrg command="$command -o $lobj" 13533da084b3Smrg fi 13543da084b3Smrg 1355d63fdb69Smrg func_show_eval_locale "$command" \ 1356d63fdb69Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 13573da084b3Smrg 13583da084b3Smrg if test "$need_locks" = warn && 13593da084b3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1360d63fdb69Smrg $ECHO "\ 13613da084b3Smrg*** ERROR, $lockfile contains: 13623da084b3Smrg`cat $lockfile 2>/dev/null` 13633da084b3Smrg 13643da084b3Smrgbut it should contain: 13653da084b3Smrg$srcfile 13663da084b3Smrg 13673da084b3SmrgThis indicates that another process is trying to use the same 13683da084b3Smrgtemporary object file, and libtool could not work around it because 13693da084b3Smrgyour compiler does not support \`-c' and \`-o' together. If you 13703da084b3Smrgrepeat this compilation, it may succeed, by chance, but you had better 13713da084b3Smrgavoid parallel builds (make -j) in this platform, or get a better 13723da084b3Smrgcompiler." 13733da084b3Smrg 1374d63fdb69Smrg $opt_dry_run || $RM $removelist 13753da084b3Smrg exit $EXIT_FAILURE 13763da084b3Smrg fi 13773da084b3Smrg 13783da084b3Smrg # Just move the object if needed, then go on to compile the next one 13793da084b3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 1380d63fdb69Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 1381d63fdb69Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 13823da084b3Smrg fi 13833da084b3Smrg 13843da084b3Smrg # Allow error messages only from the first compilation. 13853da084b3Smrg if test "$suppress_opt" = yes; then 1386d63fdb69Smrg suppress_output=' >/dev/null 2>&1' 13873da084b3Smrg fi 13883da084b3Smrg fi 13893da084b3Smrg 13903da084b3Smrg # Only build a position-dependent object if we build old libraries. 13913da084b3Smrg if test "$build_old_libs" = yes; then 13923da084b3Smrg if test "$pic_mode" != yes; then 13933da084b3Smrg # Don't build PIC code 1394d63fdb69Smrg command="$base_compile $qsrcfile$pie_flag" 13953da084b3Smrg else 13963da084b3Smrg command="$base_compile $qsrcfile $pic_flag" 13973da084b3Smrg fi 13983da084b3Smrg if test "$compiler_c_o" = yes; then 13993da084b3Smrg command="$command -o $obj" 14003da084b3Smrg fi 14013da084b3Smrg 14023da084b3Smrg # Suppress compiler output if we already did a PIC compilation. 14033da084b3Smrg command="$command$suppress_output" 1404d63fdb69Smrg func_show_eval_locale "$command" \ 1405d63fdb69Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 14063da084b3Smrg 14073da084b3Smrg if test "$need_locks" = warn && 14083da084b3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1409d63fdb69Smrg $ECHO "\ 14103da084b3Smrg*** ERROR, $lockfile contains: 14113da084b3Smrg`cat $lockfile 2>/dev/null` 14123da084b3Smrg 14133da084b3Smrgbut it should contain: 14143da084b3Smrg$srcfile 14153da084b3Smrg 14163da084b3SmrgThis indicates that another process is trying to use the same 14173da084b3Smrgtemporary object file, and libtool could not work around it because 14183da084b3Smrgyour compiler does not support \`-c' and \`-o' together. If you 14193da084b3Smrgrepeat this compilation, it may succeed, by chance, but you had better 14203da084b3Smrgavoid parallel builds (make -j) in this platform, or get a better 14213da084b3Smrgcompiler." 14223da084b3Smrg 1423d63fdb69Smrg $opt_dry_run || $RM $removelist 14243da084b3Smrg exit $EXIT_FAILURE 14253da084b3Smrg fi 14263da084b3Smrg 14273da084b3Smrg # Just move the object if needed 14283da084b3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 1429d63fdb69Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 1430d63fdb69Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 14313da084b3Smrg fi 14323da084b3Smrg fi 14333da084b3Smrg 1434d63fdb69Smrg $opt_dry_run || { 1435d63fdb69Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 14363da084b3Smrg 1437d63fdb69Smrg # Unlock the critical section if it was locked 1438d63fdb69Smrg if test "$need_locks" != no; then 1439d63fdb69Smrg removelist=$lockfile 1440d63fdb69Smrg $RM "$lockfile" 1441d63fdb69Smrg fi 1442d63fdb69Smrg } 14433da084b3Smrg 14443da084b3Smrg exit $EXIT_SUCCESS 1445d63fdb69Smrg} 14463da084b3Smrg 1447d63fdb69Smrg$opt_help || { 1448d63fdb69Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"} 1449d63fdb69Smrg} 14503da084b3Smrg 1451d63fdb69Smrgfunc_mode_help () 1452d63fdb69Smrg{ 1453d63fdb69Smrg # We need to display help for each of the modes. 1454d63fdb69Smrg case $mode in 1455d63fdb69Smrg "") 1456d63fdb69Smrg # Generic help is extracted from the usage comments 1457d63fdb69Smrg # at the start of this file. 1458d63fdb69Smrg func_help 1459d63fdb69Smrg ;; 14603da084b3Smrg 1461d63fdb69Smrg clean) 1462d63fdb69Smrg $ECHO \ 1463d63fdb69Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 14643da084b3Smrg 1465d63fdb69SmrgRemove files from the build directory. 14663da084b3Smrg 1467d63fdb69SmrgRM is the name of the program to use to delete files associated with each FILE 1468d63fdb69Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1469d63fdb69Smrgto RM. 14703da084b3Smrg 1471d63fdb69SmrgIf FILE is a libtool library, object or program, all the files associated 1472d63fdb69Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 1473d63fdb69Smrg ;; 14743da084b3Smrg 1475d63fdb69Smrg compile) 1476d63fdb69Smrg $ECHO \ 1477d63fdb69Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 14783da084b3Smrg 1479d63fdb69SmrgCompile a source file into a libtool library object. 14803da084b3Smrg 1481d63fdb69SmrgThis mode accepts the following additional options: 14823da084b3Smrg 1483d63fdb69Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 1484d63fdb69Smrg -no-suppress do not suppress compiler output for multiple passes 1485d63fdb69Smrg -prefer-pic try to building PIC objects only 1486d63fdb69Smrg -prefer-non-pic try to building non-PIC objects only 1487d63fdb69Smrg -shared do not build a \`.o' file suitable for static linking 1488d63fdb69Smrg -static only build a \`.o' file suitable for static linking 14893da084b3Smrg 1490d63fdb69SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 1491d63fdb69Smrgfrom the given SOURCEFILE. 14923da084b3Smrg 1493d63fdb69SmrgThe output file name is determined by removing the directory component from 1494d63fdb69SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 1495d63fdb69Smrglibrary object suffix, \`.lo'." 1496d63fdb69Smrg ;; 14973da084b3Smrg 1498d63fdb69Smrg execute) 1499d63fdb69Smrg $ECHO \ 1500d63fdb69Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 15013da084b3Smrg 1502d63fdb69SmrgAutomatically set library path, then run a program. 15033da084b3Smrg 1504d63fdb69SmrgThis mode accepts the following additional options: 15053da084b3Smrg 1506d63fdb69Smrg -dlopen FILE add the directory containing FILE to the library path 15073da084b3Smrg 1508d63fdb69SmrgThis mode sets the library path environment variable according to \`-dlopen' 1509d63fdb69Smrgflags. 15103da084b3Smrg 1511d63fdb69SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 1512d63fdb69Smrginto their corresponding uninstalled binary, and any of their required library 1513d63fdb69Smrgdirectories are added to the library path. 15143da084b3Smrg 1515d63fdb69SmrgThen, COMMAND is executed, with ARGS as arguments." 1516d63fdb69Smrg ;; 15173da084b3Smrg 1518d63fdb69Smrg finish) 1519d63fdb69Smrg $ECHO \ 1520d63fdb69Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 15213da084b3Smrg 1522d63fdb69SmrgComplete the installation of libtool libraries. 15233da084b3Smrg 1524d63fdb69SmrgEach LIBDIR is a directory that contains libtool libraries. 15253da084b3Smrg 1526d63fdb69SmrgThe commands that this mode executes may require superuser privileges. Use 1527d63fdb69Smrgthe \`--dry-run' option if you just want to see what would be executed." 1528d63fdb69Smrg ;; 15293da084b3Smrg 1530d63fdb69Smrg install) 1531d63fdb69Smrg $ECHO \ 1532d63fdb69Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 15333da084b3Smrg 1534d63fdb69SmrgInstall executables or libraries. 15353da084b3Smrg 1536d63fdb69SmrgINSTALL-COMMAND is the installation command. The first component should be 1537d63fdb69Smrgeither the \`install' or \`cp' program. 15383da084b3Smrg 1539d63fdb69SmrgThe following components of INSTALL-COMMAND are treated specially: 15403da084b3Smrg 1541d63fdb69Smrg -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation 15423da084b3Smrg 1543d63fdb69SmrgThe rest of the components are interpreted as arguments to that command (only 1544d63fdb69SmrgBSD-compatible install options are recognized)." 1545d63fdb69Smrg ;; 15463da084b3Smrg 1547d63fdb69Smrg link) 1548d63fdb69Smrg $ECHO \ 1549d63fdb69Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 15503da084b3Smrg 1551d63fdb69SmrgLink object files or libraries together to form another library, or to 1552d63fdb69Smrgcreate an executable program. 15533da084b3Smrg 1554d63fdb69SmrgLINK-COMMAND is a command using the C compiler that you would use to create 1555d63fdb69Smrga program from several object files. 15563da084b3Smrg 1557d63fdb69SmrgThe following components of LINK-COMMAND are treated specially: 15583da084b3Smrg 1559d63fdb69Smrg -all-static do not do any dynamic linking at all 1560d63fdb69Smrg -avoid-version do not add a version suffix if possible 1561d63fdb69Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 1562d63fdb69Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 1563d63fdb69Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 1564d63fdb69Smrg -export-symbols SYMFILE 1565d63fdb69Smrg try to export only the symbols listed in SYMFILE 1566d63fdb69Smrg -export-symbols-regex REGEX 1567d63fdb69Smrg try to export only the symbols matching REGEX 1568d63fdb69Smrg -LLIBDIR search LIBDIR for required installed libraries 1569d63fdb69Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 1570d63fdb69Smrg -module build a library that can dlopened 1571d63fdb69Smrg -no-fast-install disable the fast-install mode 1572d63fdb69Smrg -no-install link a not-installable executable 1573d63fdb69Smrg -no-undefined declare that a library does not refer to external symbols 1574d63fdb69Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 1575d63fdb69Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 1576d63fdb69Smrg -precious-files-regex REGEX 1577d63fdb69Smrg don't remove output files matching REGEX 1578d63fdb69Smrg -release RELEASE specify package release information 1579d63fdb69Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 1580d63fdb69Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 1581d63fdb69Smrg -shared only do dynamic linking of libtool libraries 1582d63fdb69Smrg -shrext SUFFIX override the standard shared library file extension 1583d63fdb69Smrg -static do not do any dynamic linking of uninstalled libtool libraries 1584d63fdb69Smrg -static-libtool-libs 1585d63fdb69Smrg do not do any dynamic linking of libtool libraries 1586d63fdb69Smrg -version-info CURRENT[:REVISION[:AGE]] 1587d63fdb69Smrg specify library version info [each variable defaults to 0] 1588d63fdb69Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 15893da084b3Smrg 1590d63fdb69SmrgAll other options (arguments beginning with \`-') are ignored. 15913da084b3Smrg 1592d63fdb69SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 1593d63fdb69Smrgtreated as uninstalled libtool libraries, other files are standard or library 1594d63fdb69Smrgobject files. 15953da084b3Smrg 1596d63fdb69SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 1597d63fdb69Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 1598d63fdb69Smrgrequired, except when creating a convenience library. 15993da084b3Smrg 1600d63fdb69SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 1601d63fdb69Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 16023da084b3Smrg 1603d63fdb69SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 1604d63fdb69Smrgis created, otherwise an executable program is created." 16053da084b3Smrg ;; 16063da084b3Smrg 1607d63fdb69Smrg uninstall) 1608d63fdb69Smrg $ECHO \ 1609d63fdb69Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 16103da084b3Smrg 1611d63fdb69SmrgRemove libraries from an installation directory. 16123da084b3Smrg 1613d63fdb69SmrgRM is the name of the program to use to delete files associated with each FILE 1614d63fdb69Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1615d63fdb69Smrgto RM. 16163da084b3Smrg 1617d63fdb69SmrgIf FILE is a libtool library, all the files associated with it are deleted. 1618d63fdb69SmrgOtherwise, only FILE itself is deleted using RM." 1619d63fdb69Smrg ;; 16203da084b3Smrg 1621d63fdb69Smrg *) 1622d63fdb69Smrg func_fatal_help "invalid operation mode \`$mode'" 1623d63fdb69Smrg ;; 1624d63fdb69Smrg esac 16253da084b3Smrg 1626d63fdb69Smrg $ECHO 1627d63fdb69Smrg $ECHO "Try \`$progname --help' for more information about other modes." 16283da084b3Smrg 1629d63fdb69Smrg exit $? 1630d63fdb69Smrg} 16313da084b3Smrg 1632d63fdb69Smrg # Now that we've collected a possible --mode arg, show help if necessary 1633d63fdb69Smrg $opt_help && func_mode_help 16343da084b3Smrg 16353da084b3Smrg 1636d63fdb69Smrg# func_mode_execute arg... 1637d63fdb69Smrgfunc_mode_execute () 1638d63fdb69Smrg{ 1639d63fdb69Smrg $opt_debug 1640d63fdb69Smrg # The first argument is the command name. 1641d63fdb69Smrg cmd="$nonopt" 1642d63fdb69Smrg test -z "$cmd" && \ 1643d63fdb69Smrg func_fatal_help "you must specify a COMMAND" 16443da084b3Smrg 1645d63fdb69Smrg # Handle -dlopen flags immediately. 1646d63fdb69Smrg for file in $execute_dlfiles; do 1647d63fdb69Smrg test -f "$file" \ 1648d63fdb69Smrg || func_fatal_help "\`$file' is not a file" 16493da084b3Smrg 1650d63fdb69Smrg dir= 1651d63fdb69Smrg case $file in 1652d63fdb69Smrg *.la) 1653d63fdb69Smrg # Check to see that this really is a libtool archive. 1654d63fdb69Smrg func_lalib_unsafe_p "$file" \ 1655d63fdb69Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 16563da084b3Smrg 1657d63fdb69Smrg # Read the libtool library. 1658d63fdb69Smrg dlname= 1659d63fdb69Smrg library_names= 1660d63fdb69Smrg func_source "$file" 16613da084b3Smrg 1662d63fdb69Smrg # Skip this library if it cannot be dlopened. 1663d63fdb69Smrg if test -z "$dlname"; then 1664d63fdb69Smrg # Warn if it was a shared library. 1665d63fdb69Smrg test -n "$library_names" && \ 1666d63fdb69Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 1667d63fdb69Smrg continue 1668d63fdb69Smrg fi 16693da084b3Smrg 1670d63fdb69Smrg func_dirname "$file" "" "." 1671d63fdb69Smrg dir="$func_dirname_result" 16723da084b3Smrg 1673d63fdb69Smrg if test -f "$dir/$objdir/$dlname"; then 1674d63fdb69Smrg dir="$dir/$objdir" 1675d63fdb69Smrg else 1676d63fdb69Smrg if test ! -f "$dir/$dlname"; then 1677d63fdb69Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1678d63fdb69Smrg fi 1679d63fdb69Smrg fi 16803da084b3Smrg ;; 16813da084b3Smrg 1682d63fdb69Smrg *.lo) 1683d63fdb69Smrg # Just add the directory containing the .lo file. 1684d63fdb69Smrg func_dirname "$file" "" "." 1685d63fdb69Smrg dir="$func_dirname_result" 16863da084b3Smrg ;; 16873da084b3Smrg 1688d63fdb69Smrg *) 1689d63fdb69Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 16903da084b3Smrg continue 16913da084b3Smrg ;; 1692d63fdb69Smrg esac 16933da084b3Smrg 1694d63fdb69Smrg # Get the absolute pathname. 1695d63fdb69Smrg absdir=`cd "$dir" && pwd` 1696d63fdb69Smrg test -n "$absdir" && dir="$absdir" 16973da084b3Smrg 1698d63fdb69Smrg # Now add the directory to shlibpath_var. 1699d63fdb69Smrg if eval "test -z \"\$$shlibpath_var\""; then 1700d63fdb69Smrg eval "$shlibpath_var=\"\$dir\"" 1701d63fdb69Smrg else 1702d63fdb69Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 1703d63fdb69Smrg fi 1704d63fdb69Smrg done 17053da084b3Smrg 1706d63fdb69Smrg # This variable tells wrapper scripts just to set shlibpath_var 1707d63fdb69Smrg # rather than running their programs. 1708d63fdb69Smrg libtool_execute_magic="$magic" 17093da084b3Smrg 1710d63fdb69Smrg # Check if any of the arguments is a wrapper script. 1711d63fdb69Smrg args= 1712d63fdb69Smrg for file 1713d63fdb69Smrg do 1714d63fdb69Smrg case $file in 1715d63fdb69Smrg -*) ;; 1716d63fdb69Smrg *) 1717d63fdb69Smrg # Do a test to see if this is really a libtool program. 1718d63fdb69Smrg if func_ltwrapper_script_p "$file"; then 1719d63fdb69Smrg func_source "$file" 1720d63fdb69Smrg # Transform arg to wrapped name. 1721d63fdb69Smrg file="$progdir/$program" 1722d63fdb69Smrg elif func_ltwrapper_executable_p "$file"; then 1723d63fdb69Smrg func_ltwrapper_scriptname "$file" 1724d63fdb69Smrg func_source "$func_ltwrapper_scriptname_result" 1725d63fdb69Smrg # Transform arg to wrapped name. 1726d63fdb69Smrg file="$progdir/$program" 1727d63fdb69Smrg fi 1728d63fdb69Smrg ;; 1729d63fdb69Smrg esac 1730d63fdb69Smrg # Quote arguments (to preserve shell metacharacters). 1731d63fdb69Smrg func_quote_for_eval "$file" 1732d63fdb69Smrg args="$args $func_quote_for_eval_result" 1733d63fdb69Smrg done 17343da084b3Smrg 1735d63fdb69Smrg if test "X$opt_dry_run" = Xfalse; then 1736d63fdb69Smrg if test -n "$shlibpath_var"; then 1737d63fdb69Smrg # Export the shlibpath_var. 1738d63fdb69Smrg eval "export $shlibpath_var" 1739d63fdb69Smrg fi 17403da084b3Smrg 1741d63fdb69Smrg # Restore saved environment variables 1742d63fdb69Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1743d63fdb69Smrg do 1744d63fdb69Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 1745d63fdb69Smrg $lt_var=\$save_$lt_var; export $lt_var 1746d63fdb69Smrg else 1747d63fdb69Smrg $lt_unset $lt_var 1748d63fdb69Smrg fi" 1749d63fdb69Smrg done 17503da084b3Smrg 1751d63fdb69Smrg # Now prepare to actually exec the command. 1752d63fdb69Smrg exec_cmd="\$cmd$args" 1753d63fdb69Smrg else 1754d63fdb69Smrg # Display what would be done. 1755d63fdb69Smrg if test -n "$shlibpath_var"; then 1756d63fdb69Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 1757d63fdb69Smrg $ECHO "export $shlibpath_var" 1758d63fdb69Smrg fi 1759d63fdb69Smrg $ECHO "$cmd$args" 1760d63fdb69Smrg exit $EXIT_SUCCESS 1761d63fdb69Smrg fi 1762d63fdb69Smrg} 17633da084b3Smrg 1764d63fdb69Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 17653da084b3Smrg 17663da084b3Smrg 1767d63fdb69Smrg# func_mode_finish arg... 1768d63fdb69Smrgfunc_mode_finish () 1769d63fdb69Smrg{ 1770d63fdb69Smrg $opt_debug 1771d63fdb69Smrg libdirs="$nonopt" 1772d63fdb69Smrg admincmds= 17733da084b3Smrg 1774d63fdb69Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 1775d63fdb69Smrg for dir 1776d63fdb69Smrg do 1777d63fdb69Smrg libdirs="$libdirs $dir" 1778d63fdb69Smrg done 17793da084b3Smrg 1780d63fdb69Smrg for libdir in $libdirs; do 1781d63fdb69Smrg if test -n "$finish_cmds"; then 1782d63fdb69Smrg # Do each command in the finish commands. 1783d63fdb69Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 1784d63fdb69Smrg'"$cmd"'"' 1785d63fdb69Smrg fi 1786d63fdb69Smrg if test -n "$finish_eval"; then 1787d63fdb69Smrg # Do the single finish_eval. 1788d63fdb69Smrg eval cmds=\"$finish_eval\" 1789d63fdb69Smrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 1790d63fdb69Smrg $cmds" 1791d63fdb69Smrg fi 1792d63fdb69Smrg done 1793d63fdb69Smrg fi 17943da084b3Smrg 1795d63fdb69Smrg # Exit here if they wanted silent mode. 1796d63fdb69Smrg $opt_silent && exit $EXIT_SUCCESS 17973da084b3Smrg 1798d63fdb69Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 1799d63fdb69Smrg $ECHO "Libraries have been installed in:" 1800d63fdb69Smrg for libdir in $libdirs; do 1801d63fdb69Smrg $ECHO " $libdir" 1802d63fdb69Smrg done 1803d63fdb69Smrg $ECHO 1804d63fdb69Smrg $ECHO "If you ever happen to want to link against installed libraries" 1805d63fdb69Smrg $ECHO "in a given directory, LIBDIR, you must either use libtool, and" 1806d63fdb69Smrg $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" 1807d63fdb69Smrg $ECHO "flag during linking and do at least one of the following:" 1808d63fdb69Smrg if test -n "$shlibpath_var"; then 1809d63fdb69Smrg $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" 1810d63fdb69Smrg $ECHO " during execution" 1811d63fdb69Smrg fi 1812d63fdb69Smrg if test -n "$runpath_var"; then 1813d63fdb69Smrg $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" 1814d63fdb69Smrg $ECHO " during linking" 1815d63fdb69Smrg fi 1816d63fdb69Smrg if test -n "$hardcode_libdir_flag_spec"; then 1817d63fdb69Smrg libdir=LIBDIR 1818d63fdb69Smrg eval flag=\"$hardcode_libdir_flag_spec\" 18193da084b3Smrg 1820d63fdb69Smrg $ECHO " - use the \`$flag' linker flag" 1821d63fdb69Smrg fi 1822d63fdb69Smrg if test -n "$admincmds"; then 1823d63fdb69Smrg $ECHO " - have your system administrator run these commands:$admincmds" 1824d63fdb69Smrg fi 1825d63fdb69Smrg if test -f /etc/ld.so.conf; then 1826d63fdb69Smrg $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 1827d63fdb69Smrg fi 1828d63fdb69Smrg $ECHO 18293da084b3Smrg 1830d63fdb69Smrg $ECHO "See any operating system documentation about shared libraries for" 1831d63fdb69Smrg case $host in 1832d63fdb69Smrg solaris2.[6789]|solaris2.1[0-9]) 1833d63fdb69Smrg $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" 1834d63fdb69Smrg $ECHO "pages." 18353da084b3Smrg ;; 1836d63fdb69Smrg *) 1837d63fdb69Smrg $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." 1838d63fdb69Smrg ;; 1839d63fdb69Smrg esac 1840d63fdb69Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 1841d63fdb69Smrg exit $EXIT_SUCCESS 1842d63fdb69Smrg} 18433da084b3Smrg 1844d63fdb69Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 18453da084b3Smrg 18463da084b3Smrg 1847d63fdb69Smrg# func_mode_install arg... 1848d63fdb69Smrgfunc_mode_install () 1849d63fdb69Smrg{ 1850d63fdb69Smrg $opt_debug 1851d63fdb69Smrg # There may be an optional sh(1) argument at the beginning of 1852d63fdb69Smrg # install_prog (especially on Windows NT). 1853d63fdb69Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 1854d63fdb69Smrg # Allow the use of GNU shtool's install command. 1855d63fdb69Smrg $ECHO "X$nonopt" | $GREP shtool >/dev/null; then 1856d63fdb69Smrg # Aesthetically quote it. 1857d63fdb69Smrg func_quote_for_eval "$nonopt" 1858d63fdb69Smrg install_prog="$func_quote_for_eval_result " 1859d63fdb69Smrg arg=$1 1860d63fdb69Smrg shift 1861d63fdb69Smrg else 1862d63fdb69Smrg install_prog= 1863d63fdb69Smrg arg=$nonopt 1864d63fdb69Smrg fi 18653da084b3Smrg 1866d63fdb69Smrg # The real first argument should be the name of the installation program. 1867d63fdb69Smrg # Aesthetically quote it. 1868d63fdb69Smrg func_quote_for_eval "$arg" 1869d63fdb69Smrg install_prog="$install_prog$func_quote_for_eval_result" 1870d63fdb69Smrg 1871d63fdb69Smrg # We need to accept at least all the BSD install flags. 1872d63fdb69Smrg dest= 1873d63fdb69Smrg files= 1874d63fdb69Smrg opts= 1875d63fdb69Smrg prev= 1876d63fdb69Smrg install_type= 1877d63fdb69Smrg isdir=no 1878d63fdb69Smrg stripme= 1879d63fdb69Smrg for arg 1880d63fdb69Smrg do 1881d63fdb69Smrg if test -n "$dest"; then 1882d63fdb69Smrg files="$files $dest" 1883d63fdb69Smrg dest=$arg 1884d63fdb69Smrg continue 18853da084b3Smrg fi 18863da084b3Smrg 1887d63fdb69Smrg case $arg in 1888d63fdb69Smrg -d) isdir=yes ;; 1889d63fdb69Smrg -f) 1890d63fdb69Smrg case " $install_prog " in 1891d63fdb69Smrg *[\\\ /]cp\ *) ;; 1892d63fdb69Smrg *) prev=$arg ;; 1893d63fdb69Smrg esac 1894d63fdb69Smrg ;; 1895d63fdb69Smrg -g | -m | -o) 1896d63fdb69Smrg prev=$arg 1897d63fdb69Smrg ;; 1898d63fdb69Smrg -s) 1899d63fdb69Smrg stripme=" -s" 1900d63fdb69Smrg continue 1901d63fdb69Smrg ;; 1902d63fdb69Smrg -*) 1903d63fdb69Smrg ;; 1904d63fdb69Smrg *) 1905d63fdb69Smrg # If the previous option needed an argument, then skip it. 1906d63fdb69Smrg if test -n "$prev"; then 1907d63fdb69Smrg prev= 1908d63fdb69Smrg else 1909d63fdb69Smrg dest=$arg 1910d63fdb69Smrg continue 1911d63fdb69Smrg fi 1912d63fdb69Smrg ;; 1913d63fdb69Smrg esac 19143da084b3Smrg 1915d63fdb69Smrg # Aesthetically quote the argument. 1916d63fdb69Smrg func_quote_for_eval "$arg" 1917d63fdb69Smrg install_prog="$install_prog $func_quote_for_eval_result" 1918d63fdb69Smrg done 19193da084b3Smrg 1920d63fdb69Smrg test -z "$install_prog" && \ 1921d63fdb69Smrg func_fatal_help "you must specify an install program" 19223da084b3Smrg 1923d63fdb69Smrg test -n "$prev" && \ 1924d63fdb69Smrg func_fatal_help "the \`$prev' option requires an argument" 19253da084b3Smrg 1926d63fdb69Smrg if test -z "$files"; then 1927d63fdb69Smrg if test -z "$dest"; then 1928d63fdb69Smrg func_fatal_help "no file or destination specified" 1929d63fdb69Smrg else 1930d63fdb69Smrg func_fatal_help "you must specify a destination" 19313da084b3Smrg fi 19323da084b3Smrg fi 19333da084b3Smrg 1934d63fdb69Smrg # Strip any trailing slash from the destination. 1935d63fdb69Smrg func_stripname '' '/' "$dest" 1936d63fdb69Smrg dest=$func_stripname_result 19373da084b3Smrg 1938d63fdb69Smrg # Check to see that the destination is a directory. 1939d63fdb69Smrg test -d "$dest" && isdir=yes 1940d63fdb69Smrg if test "$isdir" = yes; then 1941d63fdb69Smrg destdir="$dest" 1942d63fdb69Smrg destname= 1943d63fdb69Smrg else 1944d63fdb69Smrg func_dirname_and_basename "$dest" "" "." 1945d63fdb69Smrg destdir="$func_dirname_result" 1946d63fdb69Smrg destname="$func_basename_result" 1947d63fdb69Smrg 1948d63fdb69Smrg # Not a directory, so check to see that there is only one file specified. 1949d63fdb69Smrg set dummy $files; shift 1950d63fdb69Smrg test "$#" -gt 1 && \ 1951d63fdb69Smrg func_fatal_help "\`$dest' is not a directory" 1952d63fdb69Smrg fi 1953d63fdb69Smrg case $destdir in 1954d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 19553da084b3Smrg *) 1956d63fdb69Smrg for file in $files; do 1957d63fdb69Smrg case $file in 1958d63fdb69Smrg *.lo) ;; 1959d63fdb69Smrg *) 1960d63fdb69Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 1961d63fdb69Smrg ;; 1962d63fdb69Smrg esac 1963d63fdb69Smrg done 19643da084b3Smrg ;; 19653da084b3Smrg esac 19663da084b3Smrg 1967d63fdb69Smrg # This variable tells wrapper scripts just to set variables rather 1968d63fdb69Smrg # than running their programs. 1969d63fdb69Smrg libtool_install_magic="$magic" 19703da084b3Smrg 1971d63fdb69Smrg staticlibs= 1972d63fdb69Smrg future_libdirs= 1973d63fdb69Smrg current_libdirs= 1974d63fdb69Smrg for file in $files; do 19753da084b3Smrg 1976d63fdb69Smrg # Do each installation. 1977d63fdb69Smrg case $file in 1978d63fdb69Smrg *.$libext) 1979d63fdb69Smrg # Do the static libraries later. 1980d63fdb69Smrg staticlibs="$staticlibs $file" 1981d63fdb69Smrg ;; 1982d63fdb69Smrg 1983d63fdb69Smrg *.la) 1984d63fdb69Smrg # Check to see that this really is a libtool archive. 1985d63fdb69Smrg func_lalib_unsafe_p "$file" \ 1986d63fdb69Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 1987d63fdb69Smrg 1988d63fdb69Smrg library_names= 1989d63fdb69Smrg old_library= 1990d63fdb69Smrg relink_command= 1991d63fdb69Smrg func_source "$file" 1992d63fdb69Smrg 1993d63fdb69Smrg # Add the libdir to current_libdirs if it is the destination. 1994d63fdb69Smrg if test "X$destdir" = "X$libdir"; then 1995d63fdb69Smrg case "$current_libdirs " in 1996d63fdb69Smrg *" $libdir "*) ;; 1997d63fdb69Smrg *) current_libdirs="$current_libdirs $libdir" ;; 19983da084b3Smrg esac 1999d63fdb69Smrg else 2000d63fdb69Smrg # Note the libdir as a future libdir. 2001d63fdb69Smrg case "$future_libdirs " in 2002d63fdb69Smrg *" $libdir "*) ;; 2003d63fdb69Smrg *) future_libdirs="$future_libdirs $libdir" ;; 2004d63fdb69Smrg esac 2005d63fdb69Smrg fi 20063da084b3Smrg 2007d63fdb69Smrg func_dirname "$file" "/" "" 2008d63fdb69Smrg dir="$func_dirname_result" 2009d63fdb69Smrg dir="$dir$objdir" 2010d63fdb69Smrg 2011d63fdb69Smrg if test -n "$relink_command"; then 2012d63fdb69Smrg # Determine the prefix the user has applied to our future dir. 2013d63fdb69Smrg inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` 2014d63fdb69Smrg 2015d63fdb69Smrg # Don't allow the user to place us outside of our expected 2016d63fdb69Smrg # location b/c this prevents finding dependent libraries that 2017d63fdb69Smrg # are installed to the same prefix. 2018d63fdb69Smrg # At present, this check doesn't affect windows .dll's that 2019d63fdb69Smrg # are installed into $libdir/../bin (currently, that works fine) 2020d63fdb69Smrg # but it's something to keep an eye on. 2021d63fdb69Smrg test "$inst_prefix_dir" = "$destdir" && \ 2022d63fdb69Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2023d63fdb69Smrg 2024d63fdb69Smrg if test -n "$inst_prefix_dir"; then 2025d63fdb69Smrg # Stick the inst_prefix_dir data into the link command. 2026d63fdb69Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2027d63fdb69Smrg else 2028d63fdb69Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` 2029d63fdb69Smrg fi 2030d63fdb69Smrg 2031d63fdb69Smrg func_warning "relinking \`$file'" 2032d63fdb69Smrg func_show_eval "$relink_command" \ 2033d63fdb69Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2034d63fdb69Smrg fi 2035d63fdb69Smrg 2036d63fdb69Smrg # See the names of the shared library. 2037d63fdb69Smrg set dummy $library_names; shift 2038d63fdb69Smrg if test -n "$1"; then 2039d63fdb69Smrg realname="$1" 2040d63fdb69Smrg shift 2041d63fdb69Smrg 2042d63fdb69Smrg srcname="$realname" 2043d63fdb69Smrg test -n "$relink_command" && srcname="$realname"T 2044d63fdb69Smrg 2045d63fdb69Smrg # Install the shared library and build the symlinks. 2046d63fdb69Smrg func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 2047d63fdb69Smrg 'exit $?' 2048d63fdb69Smrg tstripme="$stripme" 2049d63fdb69Smrg case $host_os in 2050d63fdb69Smrg cygwin* | mingw* | pw32* | cegcc*) 2051d63fdb69Smrg case $realname in 2052d63fdb69Smrg *.dll.a) 2053d63fdb69Smrg tstripme="" 2054d63fdb69Smrg ;; 2055d63fdb69Smrg esac 20563da084b3Smrg ;; 20573da084b3Smrg esac 2058d63fdb69Smrg if test -n "$tstripme" && test -n "$striplib"; then 2059d63fdb69Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 20603da084b3Smrg fi 2061d63fdb69Smrg 2062d63fdb69Smrg if test "$#" -gt 0; then 2063d63fdb69Smrg # Delete the old symlinks, and create new ones. 2064d63fdb69Smrg # Try `ln -sf' first, because the `ln' binary might depend on 2065d63fdb69Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 2066d63fdb69Smrg # so we also need to try rm && ln -s. 2067d63fdb69Smrg for linkname 2068d63fdb69Smrg do 2069d63fdb69Smrg test "$linkname" != "$realname" \ 2070d63fdb69Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 20713da084b3Smrg done 20723da084b3Smrg fi 20733da084b3Smrg 2074d63fdb69Smrg # Do each command in the postinstall commands. 2075d63fdb69Smrg lib="$destdir/$realname" 2076d63fdb69Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 20773da084b3Smrg fi 20783da084b3Smrg 2079d63fdb69Smrg # Install the pseudo-library for information purposes. 2080d63fdb69Smrg func_basename "$file" 2081d63fdb69Smrg name="$func_basename_result" 2082d63fdb69Smrg instname="$dir/$name"i 2083d63fdb69Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 20843da084b3Smrg 2085d63fdb69Smrg # Maybe install the static library, too. 2086d63fdb69Smrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 2087d63fdb69Smrg ;; 20883da084b3Smrg 2089d63fdb69Smrg *.lo) 2090d63fdb69Smrg # Install (i.e. copy) a libtool object. 20913da084b3Smrg 2092d63fdb69Smrg # Figure out destination file name, if it wasn't already specified. 2093d63fdb69Smrg if test -n "$destname"; then 2094d63fdb69Smrg destfile="$destdir/$destname" 2095d63fdb69Smrg else 2096d63fdb69Smrg func_basename "$file" 2097d63fdb69Smrg destfile="$func_basename_result" 2098d63fdb69Smrg destfile="$destdir/$destfile" 2099d63fdb69Smrg fi 2100d63fdb69Smrg 2101d63fdb69Smrg # Deduce the name of the destination old-style object file. 2102d63fdb69Smrg case $destfile in 2103d63fdb69Smrg *.lo) 2104d63fdb69Smrg func_lo2o "$destfile" 2105d63fdb69Smrg staticdest=$func_lo2o_result 2106d63fdb69Smrg ;; 2107d63fdb69Smrg *.$objext) 2108d63fdb69Smrg staticdest="$destfile" 2109d63fdb69Smrg destfile= 2110d63fdb69Smrg ;; 2111d63fdb69Smrg *) 2112d63fdb69Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 2113d63fdb69Smrg ;; 21143da084b3Smrg esac 21153da084b3Smrg 2116d63fdb69Smrg # Install the libtool object if requested. 2117d63fdb69Smrg test -n "$destfile" && \ 2118d63fdb69Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 2119d63fdb69Smrg 2120d63fdb69Smrg # Install the old object if enabled. 2121d63fdb69Smrg if test "$build_old_libs" = yes; then 2122d63fdb69Smrg # Deduce the name of the old-style object file. 2123d63fdb69Smrg func_lo2o "$file" 2124d63fdb69Smrg staticobj=$func_lo2o_result 2125d63fdb69Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 21263da084b3Smrg fi 2127d63fdb69Smrg exit $EXIT_SUCCESS 2128d63fdb69Smrg ;; 21293da084b3Smrg 2130d63fdb69Smrg *) 2131d63fdb69Smrg # Figure out destination file name, if it wasn't already specified. 2132d63fdb69Smrg if test -n "$destname"; then 2133d63fdb69Smrg destfile="$destdir/$destname" 2134d63fdb69Smrg else 2135d63fdb69Smrg func_basename "$file" 2136d63fdb69Smrg destfile="$func_basename_result" 2137d63fdb69Smrg destfile="$destdir/$destfile" 2138d63fdb69Smrg fi 2139d63fdb69Smrg 2140d63fdb69Smrg # If the file is missing, and there is a .exe on the end, strip it 2141d63fdb69Smrg # because it is most likely a libtool script we actually want to 2142d63fdb69Smrg # install 2143d63fdb69Smrg stripped_ext="" 2144d63fdb69Smrg case $file in 2145d63fdb69Smrg *.exe) 2146d63fdb69Smrg if test ! -f "$file"; then 2147d63fdb69Smrg func_stripname '' '.exe' "$file" 2148d63fdb69Smrg file=$func_stripname_result 2149d63fdb69Smrg stripped_ext=".exe" 21503da084b3Smrg fi 2151d63fdb69Smrg ;; 2152d63fdb69Smrg esac 21533da084b3Smrg 2154d63fdb69Smrg # Do a test to see if this is really a libtool program. 2155d63fdb69Smrg case $host in 2156d63fdb69Smrg *cygwin* | *mingw*) 2157d63fdb69Smrg if func_ltwrapper_executable_p "$file"; then 2158d63fdb69Smrg func_ltwrapper_scriptname "$file" 2159d63fdb69Smrg wrapper=$func_ltwrapper_scriptname_result 2160d63fdb69Smrg else 2161d63fdb69Smrg func_stripname '' '.exe' "$file" 2162d63fdb69Smrg wrapper=$func_stripname_result 2163d63fdb69Smrg fi 2164d63fdb69Smrg ;; 2165d63fdb69Smrg *) 2166d63fdb69Smrg wrapper=$file 2167d63fdb69Smrg ;; 2168d63fdb69Smrg esac 2169d63fdb69Smrg if func_ltwrapper_script_p "$wrapper"; then 2170d63fdb69Smrg notinst_deplibs= 2171d63fdb69Smrg relink_command= 21723da084b3Smrg 2173d63fdb69Smrg func_source "$wrapper" 21743da084b3Smrg 2175d63fdb69Smrg # Check the variables that should have been set. 2176d63fdb69Smrg test -z "$generated_by_libtool_version" && \ 2177d63fdb69Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 2178d63fdb69Smrg 2179d63fdb69Smrg finalize=yes 2180d63fdb69Smrg for lib in $notinst_deplibs; do 2181d63fdb69Smrg # Check to see that each library is installed. 2182d63fdb69Smrg libdir= 2183d63fdb69Smrg if test -f "$lib"; then 2184d63fdb69Smrg func_source "$lib" 2185d63fdb69Smrg fi 2186d63fdb69Smrg libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 2187d63fdb69Smrg if test -n "$libdir" && test ! -f "$libfile"; then 2188d63fdb69Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 2189d63fdb69Smrg finalize=no 2190d63fdb69Smrg fi 2191d63fdb69Smrg done 2192d63fdb69Smrg 2193d63fdb69Smrg relink_command= 2194d63fdb69Smrg func_source "$wrapper" 2195d63fdb69Smrg 2196d63fdb69Smrg outputname= 2197d63fdb69Smrg if test "$fast_install" = no && test -n "$relink_command"; then 2198d63fdb69Smrg $opt_dry_run || { 2199d63fdb69Smrg if test "$finalize" = yes; then 2200d63fdb69Smrg tmpdir=`func_mktempdir` 2201d63fdb69Smrg func_basename "$file$stripped_ext" 2202d63fdb69Smrg file="$func_basename_result" 2203d63fdb69Smrg outputname="$tmpdir/$file" 2204d63fdb69Smrg # Replace the output file specification. 2205d63fdb69Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` 2206d63fdb69Smrg 2207d63fdb69Smrg $opt_silent || { 2208d63fdb69Smrg func_quote_for_expand "$relink_command" 2209d63fdb69Smrg eval "func_echo $func_quote_for_expand_result" 2210d63fdb69Smrg } 2211d63fdb69Smrg if eval "$relink_command"; then : 2212d63fdb69Smrg else 2213d63fdb69Smrg func_error "error: relink \`$file' with the above command before installing it" 2214d63fdb69Smrg $opt_dry_run || ${RM}r "$tmpdir" 2215d63fdb69Smrg continue 2216d63fdb69Smrg fi 2217d63fdb69Smrg file="$outputname" 2218d63fdb69Smrg else 2219d63fdb69Smrg func_warning "cannot relink \`$file'" 2220d63fdb69Smrg fi 2221d63fdb69Smrg } 22223da084b3Smrg else 2223d63fdb69Smrg # Install the binary that we compiled earlier. 2224d63fdb69Smrg file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 22253da084b3Smrg fi 2226d63fdb69Smrg fi 22273da084b3Smrg 2228d63fdb69Smrg # remove .exe since cygwin /usr/bin/install will append another 2229d63fdb69Smrg # one anyway 2230d63fdb69Smrg case $install_prog,$host in 2231d63fdb69Smrg */usr/bin/install*,*cygwin*) 2232d63fdb69Smrg case $file:$destfile in 2233d63fdb69Smrg *.exe:*.exe) 2234d63fdb69Smrg # this is ok 2235d63fdb69Smrg ;; 2236d63fdb69Smrg *.exe:*) 2237d63fdb69Smrg destfile=$destfile.exe 2238d63fdb69Smrg ;; 2239d63fdb69Smrg *:*.exe) 2240d63fdb69Smrg func_stripname '' '.exe' "$destfile" 2241d63fdb69Smrg destfile=$func_stripname_result 2242d63fdb69Smrg ;; 2243d63fdb69Smrg esac 22443da084b3Smrg ;; 22453da084b3Smrg esac 2246d63fdb69Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 2247d63fdb69Smrg $opt_dry_run || if test -n "$outputname"; then 2248d63fdb69Smrg ${RM}r "$tmpdir" 2249d63fdb69Smrg fi 2250d63fdb69Smrg ;; 2251d63fdb69Smrg esac 2252d63fdb69Smrg done 22533da084b3Smrg 2254d63fdb69Smrg for file in $staticlibs; do 2255d63fdb69Smrg func_basename "$file" 2256d63fdb69Smrg name="$func_basename_result" 22573da084b3Smrg 2258d63fdb69Smrg # Set up the ranlib parameters. 2259d63fdb69Smrg oldlib="$destdir/$name" 22603da084b3Smrg 2261d63fdb69Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 22623da084b3Smrg 2263d63fdb69Smrg if test -n "$stripme" && test -n "$old_striplib"; then 2264d63fdb69Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 2265d63fdb69Smrg fi 22663da084b3Smrg 2267d63fdb69Smrg # Do each command in the postinstall commands. 2268d63fdb69Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 2269d63fdb69Smrg done 22703da084b3Smrg 2271d63fdb69Smrg test -n "$future_libdirs" && \ 2272d63fdb69Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 22733da084b3Smrg 2274d63fdb69Smrg if test -n "$current_libdirs"; then 2275d63fdb69Smrg # Maybe just do a dry run. 2276d63fdb69Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 2277d63fdb69Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 2278d63fdb69Smrg else 2279d63fdb69Smrg exit $EXIT_SUCCESS 2280d63fdb69Smrg fi 2281d63fdb69Smrg} 22823da084b3Smrg 2283d63fdb69Smrgtest "$mode" = install && func_mode_install ${1+"$@"} 22843da084b3Smrg 22853da084b3Smrg 2286d63fdb69Smrg# func_generate_dlsyms outputname originator pic_p 2287d63fdb69Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 2288d63fdb69Smrg# a dlpreopen symbol table. 2289d63fdb69Smrgfunc_generate_dlsyms () 2290d63fdb69Smrg{ 2291d63fdb69Smrg $opt_debug 2292d63fdb69Smrg my_outputname="$1" 2293d63fdb69Smrg my_originator="$2" 2294d63fdb69Smrg my_pic_p="${3-no}" 2295d63fdb69Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 2296d63fdb69Smrg my_dlsyms= 2297d63fdb69Smrg 2298d63fdb69Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 2299d63fdb69Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 2300d63fdb69Smrg my_dlsyms="${my_outputname}S.c" 2301d63fdb69Smrg else 2302d63fdb69Smrg func_error "not configured to extract global symbols from dlpreopened files" 2303d63fdb69Smrg fi 2304d63fdb69Smrg fi 23053da084b3Smrg 2306d63fdb69Smrg if test -n "$my_dlsyms"; then 2307d63fdb69Smrg case $my_dlsyms in 2308d63fdb69Smrg "") ;; 2309d63fdb69Smrg *.c) 2310d63fdb69Smrg # Discover the nlist of each of the dlfiles. 2311d63fdb69Smrg nlist="$output_objdir/${my_outputname}.nm" 2312d63fdb69Smrg 2313d63fdb69Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 2314d63fdb69Smrg 2315d63fdb69Smrg # Parse the name list into a source file. 2316d63fdb69Smrg func_verbose "creating $output_objdir/$my_dlsyms" 2317d63fdb69Smrg 2318d63fdb69Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 2319d63fdb69Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 2320d63fdb69Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 2321d63fdb69Smrg 2322d63fdb69Smrg#ifdef __cplusplus 2323d63fdb69Smrgextern \"C\" { 2324d63fdb69Smrg#endif 2325d63fdb69Smrg 2326d63fdb69Smrg/* External symbol declarations for the compiler. */\ 2327d63fdb69Smrg" 2328d63fdb69Smrg 2329d63fdb69Smrg if test "$dlself" = yes; then 2330d63fdb69Smrg func_verbose "generating symbol list for \`$output'" 2331d63fdb69Smrg 2332d63fdb69Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 2333d63fdb69Smrg 2334d63fdb69Smrg # Add our own program objects to the symbol list. 2335d63fdb69Smrg progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 2336d63fdb69Smrg for progfile in $progfiles; do 2337d63fdb69Smrg func_verbose "extracting global C symbols from \`$progfile'" 2338d63fdb69Smrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 2339d63fdb69Smrg done 2340d63fdb69Smrg 2341d63fdb69Smrg if test -n "$exclude_expsyms"; then 2342d63fdb69Smrg $opt_dry_run || { 2343d63fdb69Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 2344d63fdb69Smrg eval '$MV "$nlist"T "$nlist"' 2345d63fdb69Smrg } 23463da084b3Smrg fi 23473da084b3Smrg 2348d63fdb69Smrg if test -n "$export_symbols_regex"; then 2349d63fdb69Smrg $opt_dry_run || { 2350d63fdb69Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 2351d63fdb69Smrg eval '$MV "$nlist"T "$nlist"' 2352d63fdb69Smrg } 23533da084b3Smrg fi 2354d63fdb69Smrg 2355d63fdb69Smrg # Prepare the list of exported symbols 2356d63fdb69Smrg if test -z "$export_symbols"; then 2357d63fdb69Smrg export_symbols="$output_objdir/$outputname.exp" 2358d63fdb69Smrg $opt_dry_run || { 2359d63fdb69Smrg $RM $export_symbols 2360d63fdb69Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 2361d63fdb69Smrg case $host in 2362d63fdb69Smrg *cygwin* | *mingw* | *cegcc* ) 2363d63fdb69Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2364d63fdb69Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 2365d63fdb69Smrg ;; 23663da084b3Smrg esac 2367d63fdb69Smrg } 2368d63fdb69Smrg else 2369d63fdb69Smrg $opt_dry_run || { 2370d63fdb69Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 2371d63fdb69Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 2372d63fdb69Smrg eval '$MV "$nlist"T "$nlist"' 2373d63fdb69Smrg case $host in 2374d63fdb69Smrg *cygwin | *mingw* | *cegcc* ) 2375d63fdb69Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2376d63fdb69Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 2377d63fdb69Smrg ;; 23783da084b3Smrg esac 2379d63fdb69Smrg } 23803da084b3Smrg fi 2381d63fdb69Smrg fi 23823da084b3Smrg 2383d63fdb69Smrg for dlprefile in $dlprefiles; do 2384d63fdb69Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 2385d63fdb69Smrg func_basename "$dlprefile" 2386d63fdb69Smrg name="$func_basename_result" 2387d63fdb69Smrg $opt_dry_run || { 2388d63fdb69Smrg eval '$ECHO ": $name " >> "$nlist"' 2389d63fdb69Smrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 2390d63fdb69Smrg } 2391d63fdb69Smrg done 23923da084b3Smrg 2393d63fdb69Smrg $opt_dry_run || { 2394d63fdb69Smrg # Make sure we have at least an empty file. 2395d63fdb69Smrg test -f "$nlist" || : > "$nlist" 23963da084b3Smrg 2397d63fdb69Smrg if test -n "$exclude_expsyms"; then 2398d63fdb69Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 2399d63fdb69Smrg $MV "$nlist"T "$nlist" 24003da084b3Smrg fi 24013da084b3Smrg 2402d63fdb69Smrg # Try sorting and uniquifying the output. 2403d63fdb69Smrg if $GREP -v "^: " < "$nlist" | 2404d63fdb69Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 2405d63fdb69Smrg sort -k 3 24063da084b3Smrg else 2407d63fdb69Smrg sort +2 2408d63fdb69Smrg fi | 2409d63fdb69Smrg uniq > "$nlist"S; then 2410d63fdb69Smrg : 24113da084b3Smrg else 2412d63fdb69Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 24133da084b3Smrg fi 24143da084b3Smrg 2415d63fdb69Smrg if test -f "$nlist"S; then 2416d63fdb69Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 24173da084b3Smrg else 2418d63fdb69Smrg $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" 24193da084b3Smrg fi 24203da084b3Smrg 2421d63fdb69Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 24223da084b3Smrg 2423d63fdb69Smrg/* The mapping between symbol names and symbols. */ 2424d63fdb69Smrgtypedef struct { 2425d63fdb69Smrg const char *name; 2426d63fdb69Smrg void *address; 2427d63fdb69Smrg} lt_dlsymlist; 2428d63fdb69Smrg" 2429d63fdb69Smrg case $host in 2430d63fdb69Smrg *cygwin* | *mingw* | *cegcc* ) 2431d63fdb69Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2432d63fdb69Smrg/* DATA imports from DLLs on WIN32 con't be const, because 2433d63fdb69Smrg runtime relocations are performed -- see ld's documentation 2434d63fdb69Smrg on pseudo-relocs. */" 2435d63fdb69Smrg lt_dlsym_const= ;; 2436d63fdb69Smrg *osf5*) 2437d63fdb69Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2438d63fdb69Smrg/* This system does not cope well with relocations in const data */" 2439d63fdb69Smrg lt_dlsym_const= ;; 2440d63fdb69Smrg *) 2441d63fdb69Smrg lt_dlsym_const=const ;; 2442d63fdb69Smrg esac 2443d63fdb69Smrg 2444d63fdb69Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2445d63fdb69Smrgextern $lt_dlsym_const lt_dlsymlist 2446d63fdb69Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 2447d63fdb69Smrg$lt_dlsym_const lt_dlsymlist 2448d63fdb69Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 2449d63fdb69Smrg{\ 2450d63fdb69Smrg { \"$my_originator\", (void *) 0 }," 2451d63fdb69Smrg 2452d63fdb69Smrg case $need_lib_prefix in 2453d63fdb69Smrg no) 2454d63fdb69Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 2455d63fdb69Smrg ;; 2456d63fdb69Smrg *) 2457d63fdb69Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 2458d63fdb69Smrg ;; 2459d63fdb69Smrg esac 2460d63fdb69Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2461d63fdb69Smrg {0, (void *) 0} 2462d63fdb69Smrg}; 2463d63fdb69Smrg 2464d63fdb69Smrg/* This works around a problem in FreeBSD linker */ 2465d63fdb69Smrg#ifdef FREEBSD_WORKAROUND 2466d63fdb69Smrgstatic const void *lt_preloaded_setup() { 2467d63fdb69Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 2468d63fdb69Smrg} 2469d63fdb69Smrg#endif 2470d63fdb69Smrg 2471d63fdb69Smrg#ifdef __cplusplus 2472d63fdb69Smrg} 2473d63fdb69Smrg#endif\ 2474d63fdb69Smrg" 2475d63fdb69Smrg } # !$opt_dry_run 2476d63fdb69Smrg 2477d63fdb69Smrg pic_flag_for_symtable= 2478d63fdb69Smrg case "$compile_command " in 2479d63fdb69Smrg *" -static "*) ;; 2480d63fdb69Smrg *) 2481d63fdb69Smrg case $host in 2482d63fdb69Smrg # compiling the symbol table file with pic_flag works around 2483d63fdb69Smrg # a FreeBSD bug that causes programs to crash when -lm is 2484d63fdb69Smrg # linked before any other PIC object. But we must not use 2485d63fdb69Smrg # pic_flag when linking with -static. The problem exists in 2486d63fdb69Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 2487d63fdb69Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 2488d63fdb69Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 2489d63fdb69Smrg *-*-hpux*) 2490d63fdb69Smrg pic_flag_for_symtable=" $pic_flag" ;; 2491d63fdb69Smrg *) 2492d63fdb69Smrg if test "X$my_pic_p" != Xno; then 2493d63fdb69Smrg pic_flag_for_symtable=" $pic_flag" 24943da084b3Smrg fi 2495d63fdb69Smrg ;; 2496d63fdb69Smrg esac 2497d63fdb69Smrg ;; 2498d63fdb69Smrg esac 2499d63fdb69Smrg symtab_cflags= 2500d63fdb69Smrg for arg in $LTCFLAGS; do 2501d63fdb69Smrg case $arg in 2502d63fdb69Smrg -pie | -fpie | -fPIE) ;; 2503d63fdb69Smrg *) symtab_cflags="$symtab_cflags $arg" ;; 2504d63fdb69Smrg esac 2505d63fdb69Smrg done 25063da084b3Smrg 2507d63fdb69Smrg # Now compile the dynamic symbol file. 2508d63fdb69Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 25093da084b3Smrg 2510d63fdb69Smrg # Clean up the generated files. 2511d63fdb69Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2512d63fdb69Smrg 2513d63fdb69Smrg # Transform the symbol file into the correct name. 2514d63fdb69Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 2515d63fdb69Smrg case $host in 2516d63fdb69Smrg *cygwin* | *mingw* | *cegcc* ) 2517d63fdb69Smrg if test -f "$output_objdir/$my_outputname.def"; then 2518d63fdb69Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2519d63fdb69Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2520d63fdb69Smrg else 2521d63fdb69Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2522d63fdb69Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2523d63fdb69Smrg fi 2524d63fdb69Smrg ;; 2525d63fdb69Smrg *) 2526d63fdb69Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2527d63fdb69Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25283da084b3Smrg ;; 25293da084b3Smrg esac 2530d63fdb69Smrg ;; 2531d63fdb69Smrg *) 2532d63fdb69Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 2533d63fdb69Smrg ;; 2534d63fdb69Smrg esac 2535d63fdb69Smrg else 2536d63fdb69Smrg # We keep going just in case the user didn't refer to 2537d63fdb69Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 2538d63fdb69Smrg # really was required. 2539d63fdb69Smrg 2540d63fdb69Smrg # Nullify the symbol file. 2541d63fdb69Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` 2542d63fdb69Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` 25433da084b3Smrg fi 2544d63fdb69Smrg} 25453da084b3Smrg 2546d63fdb69Smrg# func_win32_libid arg 2547d63fdb69Smrg# return the library type of file 'arg' 2548d63fdb69Smrg# 2549d63fdb69Smrg# Need a lot of goo to handle *both* DLLs and import libs 2550d63fdb69Smrg# Has to be a shell function in order to 'eat' the argument 2551d63fdb69Smrg# that is supplied when $file_magic_command is called. 2552d63fdb69Smrgfunc_win32_libid () 2553d63fdb69Smrg{ 2554d63fdb69Smrg $opt_debug 2555d63fdb69Smrg win32_libid_type="unknown" 2556d63fdb69Smrg win32_fileres=`file -L $1 2>/dev/null` 2557d63fdb69Smrg case $win32_fileres in 2558d63fdb69Smrg *ar\ archive\ import\ library*) # definitely import 2559d63fdb69Smrg win32_libid_type="x86 archive import" 2560d63fdb69Smrg ;; 2561d63fdb69Smrg *ar\ archive*) # could be an import, or static 2562d63fdb69Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 2563d63fdb69Smrg $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 2564d63fdb69Smrg win32_nmres=`eval $NM -f posix -A $1 | 2565d63fdb69Smrg $SED -n -e ' 2566d63fdb69Smrg 1,100{ 2567d63fdb69Smrg / I /{ 2568d63fdb69Smrg s,.*,import, 2569d63fdb69Smrg p 2570d63fdb69Smrg q 2571d63fdb69Smrg } 2572d63fdb69Smrg }'` 2573d63fdb69Smrg case $win32_nmres in 2574d63fdb69Smrg import*) win32_libid_type="x86 archive import";; 2575d63fdb69Smrg *) win32_libid_type="x86 archive static";; 2576d63fdb69Smrg esac 2577d63fdb69Smrg fi 2578d63fdb69Smrg ;; 2579d63fdb69Smrg *DLL*) 2580d63fdb69Smrg win32_libid_type="x86 DLL" 2581d63fdb69Smrg ;; 2582d63fdb69Smrg *executable*) # but shell scripts are "executable" too... 2583d63fdb69Smrg case $win32_fileres in 2584d63fdb69Smrg *MS\ Windows\ PE\ Intel*) 2585d63fdb69Smrg win32_libid_type="x86 DLL" 2586d63fdb69Smrg ;; 2587d63fdb69Smrg esac 2588d63fdb69Smrg ;; 2589d63fdb69Smrg esac 2590d63fdb69Smrg $ECHO "$win32_libid_type" 2591d63fdb69Smrg} 25923da084b3Smrg 25933da084b3Smrg 25943da084b3Smrg 2595d63fdb69Smrg# func_extract_an_archive dir oldlib 2596d63fdb69Smrgfunc_extract_an_archive () 2597d63fdb69Smrg{ 2598d63fdb69Smrg $opt_debug 2599d63fdb69Smrg f_ex_an_ar_dir="$1"; shift 2600d63fdb69Smrg f_ex_an_ar_oldlib="$1" 2601d63fdb69Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 2602d63fdb69Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 2603d63fdb69Smrg : 2604d63fdb69Smrg else 2605d63fdb69Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 2606d63fdb69Smrg fi 2607d63fdb69Smrg} 26083da084b3Smrg 26093da084b3Smrg 2610d63fdb69Smrg# func_extract_archives gentop oldlib ... 2611d63fdb69Smrgfunc_extract_archives () 2612d63fdb69Smrg{ 2613d63fdb69Smrg $opt_debug 2614d63fdb69Smrg my_gentop="$1"; shift 2615d63fdb69Smrg my_oldlibs=${1+"$@"} 2616d63fdb69Smrg my_oldobjs="" 2617d63fdb69Smrg my_xlib="" 2618d63fdb69Smrg my_xabs="" 2619d63fdb69Smrg my_xdir="" 26203da084b3Smrg 2621d63fdb69Smrg for my_xlib in $my_oldlibs; do 2622d63fdb69Smrg # Extract the objects. 2623d63fdb69Smrg case $my_xlib in 2624d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 2625d63fdb69Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 2626d63fdb69Smrg esac 2627d63fdb69Smrg func_basename "$my_xlib" 2628d63fdb69Smrg my_xlib="$func_basename_result" 2629d63fdb69Smrg my_xlib_u=$my_xlib 2630d63fdb69Smrg while :; do 2631d63fdb69Smrg case " $extracted_archives " in 2632d63fdb69Smrg *" $my_xlib_u "*) 2633d63fdb69Smrg func_arith $extracted_serial + 1 2634d63fdb69Smrg extracted_serial=$func_arith_result 2635d63fdb69Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 2636d63fdb69Smrg *) break ;; 2637d63fdb69Smrg esac 2638d63fdb69Smrg done 2639d63fdb69Smrg extracted_archives="$extracted_archives $my_xlib_u" 2640d63fdb69Smrg my_xdir="$my_gentop/$my_xlib_u" 26413da084b3Smrg 2642d63fdb69Smrg func_mkdir_p "$my_xdir" 26433da084b3Smrg 2644d63fdb69Smrg case $host in 2645d63fdb69Smrg *-darwin*) 2646d63fdb69Smrg func_verbose "Extracting $my_xabs" 2647d63fdb69Smrg # Do not bother doing anything if just a dry run 2648d63fdb69Smrg $opt_dry_run || { 2649d63fdb69Smrg darwin_orig_dir=`pwd` 2650d63fdb69Smrg cd $my_xdir || exit $? 2651d63fdb69Smrg darwin_archive=$my_xabs 2652d63fdb69Smrg darwin_curdir=`pwd` 2653d63fdb69Smrg darwin_base_archive=`basename "$darwin_archive"` 2654d63fdb69Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 2655d63fdb69Smrg if test -n "$darwin_arches"; then 2656d63fdb69Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 2657d63fdb69Smrg darwin_arch= 2658d63fdb69Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 2659d63fdb69Smrg for darwin_arch in $darwin_arches ; do 2660d63fdb69Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2661d63fdb69Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 2662d63fdb69Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2663d63fdb69Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 2664d63fdb69Smrg cd "$darwin_curdir" 2665d63fdb69Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 2666d63fdb69Smrg done # $darwin_arches 2667d63fdb69Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 2668d63fdb69Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 2669d63fdb69Smrg darwin_file= 2670d63fdb69Smrg darwin_files= 2671d63fdb69Smrg for darwin_file in $darwin_filelist; do 2672d63fdb69Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 2673d63fdb69Smrg $LIPO -create -output "$darwin_file" $darwin_files 2674d63fdb69Smrg done # $darwin_filelist 2675d63fdb69Smrg $RM -rf unfat-$$ 2676d63fdb69Smrg cd "$darwin_orig_dir" 2677d63fdb69Smrg else 2678d63fdb69Smrg cd $darwin_orig_dir 2679d63fdb69Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 2680d63fdb69Smrg fi # $darwin_arches 2681d63fdb69Smrg } # !$opt_dry_run 2682d63fdb69Smrg ;; 2683d63fdb69Smrg *) 2684d63fdb69Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 2685d63fdb69Smrg ;; 26863da084b3Smrg esac 2687d63fdb69Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 2688d63fdb69Smrg done 26893da084b3Smrg 2690d63fdb69Smrg func_extract_archives_result="$my_oldobjs" 2691d63fdb69Smrg} 26923da084b3Smrg 26933da084b3Smrg 26943da084b3Smrg 2695d63fdb69Smrg# func_emit_wrapper_part1 [arg=no] 2696d63fdb69Smrg# 2697d63fdb69Smrg# Emit the first part of a libtool wrapper script on stdout. 2698d63fdb69Smrg# For more information, see the description associated with 2699d63fdb69Smrg# func_emit_wrapper(), below. 2700d63fdb69Smrgfunc_emit_wrapper_part1 () 2701d63fdb69Smrg{ 2702d63fdb69Smrg func_emit_wrapper_part1_arg1=no 2703d63fdb69Smrg if test -n "$1" ; then 2704d63fdb69Smrg func_emit_wrapper_part1_arg1=$1 27053da084b3Smrg fi 27063da084b3Smrg 2707d63fdb69Smrg $ECHO "\ 2708d63fdb69Smrg#! $SHELL 27093da084b3Smrg 2710d63fdb69Smrg# $output - temporary wrapper script for $objdir/$outputname 2711d63fdb69Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 2712d63fdb69Smrg# 2713d63fdb69Smrg# The $output program cannot be directly executed until all the libtool 2714d63fdb69Smrg# libraries that it depends on are installed. 2715d63fdb69Smrg# 2716d63fdb69Smrg# This wrapper script should never be moved out of the build directory. 2717d63fdb69Smrg# If it is, it will not operate correctly. 27183da084b3Smrg 2719d63fdb69Smrg# Sed substitution that helps us do robust quoting. It backslashifies 2720d63fdb69Smrg# metacharacters that are still active within double-quoted strings. 2721d63fdb69SmrgXsed='${SED} -e 1s/^X//' 2722d63fdb69Smrgsed_quote_subst='$sed_quote_subst' 27233da084b3Smrg 2724d63fdb69Smrg# Be Bourne compatible 2725d63fdb69Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 2726d63fdb69Smrg emulate sh 2727d63fdb69Smrg NULLCMD=: 2728d63fdb69Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 2729d63fdb69Smrg # is contrary to our usage. Disable this feature. 2730d63fdb69Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 2731d63fdb69Smrg setopt NO_GLOB_SUBST 2732d63fdb69Smrgelse 2733d63fdb69Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 2734d63fdb69Smrgfi 2735d63fdb69SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 2736d63fdb69SmrgDUALCASE=1; export DUALCASE # for MKS sh 27373da084b3Smrg 2738d63fdb69Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 2739d63fdb69Smrg# if CDPATH is set. 2740d63fdb69Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 27413da084b3Smrg 2742d63fdb69Smrgrelink_command=\"$relink_command\" 27433da084b3Smrg 2744d63fdb69Smrg# This environment variable determines our operation mode. 2745d63fdb69Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 2746d63fdb69Smrg # install mode needs the following variables: 2747d63fdb69Smrg generated_by_libtool_version='$macro_version' 2748d63fdb69Smrg notinst_deplibs='$notinst_deplibs' 2749d63fdb69Smrgelse 2750d63fdb69Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 2751d63fdb69Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 2752d63fdb69Smrg ECHO=\"$qecho\" 2753d63fdb69Smrg file=\"\$0\" 2754d63fdb69Smrg # Make sure echo works. 2755d63fdb69Smrg if test \"X\$1\" = X--no-reexec; then 2756d63fdb69Smrg # Discard the --no-reexec flag, and continue. 2757d63fdb69Smrg shift 2758d63fdb69Smrg elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then 2759d63fdb69Smrg # Yippee, \$ECHO works! 2760d63fdb69Smrg : 2761d63fdb69Smrg else 2762d63fdb69Smrg # Restart under the correct shell, and then maybe \$ECHO will work. 2763d63fdb69Smrg exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 2764d63fdb69Smrg fi 2765d63fdb69Smrg fi\ 2766d63fdb69Smrg" 2767d63fdb69Smrg $ECHO "\ 27683da084b3Smrg 2769d63fdb69Smrg # Find the directory that this script lives in. 2770d63fdb69Smrg thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 2771d63fdb69Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 27723da084b3Smrg 2773d63fdb69Smrg # Follow symbolic links until we get to the real thisdir. 2774d63fdb69Smrg file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 2775d63fdb69Smrg while test -n \"\$file\"; do 2776d63fdb69Smrg destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 27773da084b3Smrg 2778d63fdb69Smrg # If there was a directory component, then change thisdir. 2779d63fdb69Smrg if test \"x\$destdir\" != \"x\$file\"; then 2780d63fdb69Smrg case \"\$destdir\" in 2781d63fdb69Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 2782d63fdb69Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 2783d63fdb69Smrg esac 2784d63fdb69Smrg fi 27853da084b3Smrg 2786d63fdb69Smrg file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 2787d63fdb69Smrg file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 2788d63fdb69Smrg done 2789d63fdb69Smrg" 2790d63fdb69Smrg} 2791d63fdb69Smrg# end: func_emit_wrapper_part1 27923da084b3Smrg 2793d63fdb69Smrg# func_emit_wrapper_part2 [arg=no] 2794d63fdb69Smrg# 2795d63fdb69Smrg# Emit the second part of a libtool wrapper script on stdout. 2796d63fdb69Smrg# For more information, see the description associated with 2797d63fdb69Smrg# func_emit_wrapper(), below. 2798d63fdb69Smrgfunc_emit_wrapper_part2 () 2799d63fdb69Smrg{ 2800d63fdb69Smrg func_emit_wrapper_part2_arg1=no 2801d63fdb69Smrg if test -n "$1" ; then 2802d63fdb69Smrg func_emit_wrapper_part2_arg1=$1 2803d63fdb69Smrg fi 28043da084b3Smrg 2805d63fdb69Smrg $ECHO "\ 28063da084b3Smrg 2807d63fdb69Smrg # Usually 'no', except on cygwin/mingw when embedded into 2808d63fdb69Smrg # the cwrapper. 2809d63fdb69Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 2810d63fdb69Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 2811d63fdb69Smrg # special case for '.' 2812d63fdb69Smrg if test \"\$thisdir\" = \".\"; then 2813d63fdb69Smrg thisdir=\`pwd\` 2814d63fdb69Smrg fi 2815d63fdb69Smrg # remove .libs from thisdir 2816d63fdb69Smrg case \"\$thisdir\" in 2817d63fdb69Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; 2818d63fdb69Smrg $objdir ) thisdir=. ;; 2819d63fdb69Smrg esac 2820d63fdb69Smrg fi 28213da084b3Smrg 2822d63fdb69Smrg # Try to get the absolute directory name. 2823d63fdb69Smrg absdir=\`cd \"\$thisdir\" && pwd\` 2824d63fdb69Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 2825d63fdb69Smrg" 28263da084b3Smrg 2827d63fdb69Smrg if test "$fast_install" = yes; then 2828d63fdb69Smrg $ECHO "\ 2829d63fdb69Smrg program=lt-'$outputname'$exeext 2830d63fdb69Smrg progdir=\"\$thisdir/$objdir\" 28313da084b3Smrg 2832d63fdb69Smrg if test ! -f \"\$progdir/\$program\" || 2833d63fdb69Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 2834d63fdb69Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 28353da084b3Smrg 2836d63fdb69Smrg file=\"\$\$-\$program\" 28373da084b3Smrg 2838d63fdb69Smrg if test ! -d \"\$progdir\"; then 2839d63fdb69Smrg $MKDIR \"\$progdir\" 2840d63fdb69Smrg else 2841d63fdb69Smrg $RM \"\$progdir/\$file\" 2842d63fdb69Smrg fi" 28433da084b3Smrg 2844d63fdb69Smrg $ECHO "\ 28453da084b3Smrg 2846d63fdb69Smrg # relink executable if necessary 2847d63fdb69Smrg if test -n \"\$relink_command\"; then 2848d63fdb69Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 2849d63fdb69Smrg else 2850d63fdb69Smrg $ECHO \"\$relink_command_output\" >&2 2851d63fdb69Smrg $RM \"\$progdir/\$file\" 2852d63fdb69Smrg exit 1 2853d63fdb69Smrg fi 2854d63fdb69Smrg fi 28553da084b3Smrg 2856d63fdb69Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 2857d63fdb69Smrg { $RM \"\$progdir/\$program\"; 2858d63fdb69Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 2859d63fdb69Smrg $RM \"\$progdir/\$file\" 2860d63fdb69Smrg fi" 2861d63fdb69Smrg else 2862d63fdb69Smrg $ECHO "\ 2863d63fdb69Smrg program='$outputname' 2864d63fdb69Smrg progdir=\"\$thisdir/$objdir\" 2865d63fdb69Smrg" 2866d63fdb69Smrg fi 28673da084b3Smrg 2868d63fdb69Smrg $ECHO "\ 28693da084b3Smrg 2870d63fdb69Smrg if test -f \"\$progdir/\$program\"; then" 28713da084b3Smrg 2872d63fdb69Smrg # Export our shlibpath_var if we have one. 2873d63fdb69Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 2874d63fdb69Smrg $ECHO "\ 2875d63fdb69Smrg # Add our own library path to $shlibpath_var 2876d63fdb69Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 28773da084b3Smrg 2878d63fdb69Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 2879d63fdb69Smrg # The second colon is a workaround for a bug in BeOS R4 sed 2880d63fdb69Smrg $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 28813da084b3Smrg 2882d63fdb69Smrg export $shlibpath_var 2883d63fdb69Smrg" 28843da084b3Smrg fi 28853da084b3Smrg 2886d63fdb69Smrg # fixup the dll searchpath if we need to. 2887d63fdb69Smrg if test -n "$dllsearchpath"; then 2888d63fdb69Smrg $ECHO "\ 2889d63fdb69Smrg # Add the dll search path components to the executable PATH 2890d63fdb69Smrg PATH=$dllsearchpath:\$PATH 2891d63fdb69Smrg" 28923da084b3Smrg fi 28933da084b3Smrg 2894d63fdb69Smrg $ECHO "\ 2895d63fdb69Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 2896d63fdb69Smrg # Run the actual program with our arguments. 2897d63fdb69Smrg" 2898d63fdb69Smrg case $host in 2899d63fdb69Smrg # Backslashes separate directories on plain windows 2900d63fdb69Smrg *-*-mingw | *-*-os2* | *-cegcc*) 2901d63fdb69Smrg $ECHO "\ 2902d63fdb69Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 2903d63fdb69Smrg" 2904d63fdb69Smrg ;; 2905d63fdb69Smrg 2906d63fdb69Smrg *) 2907d63fdb69Smrg $ECHO "\ 2908d63fdb69Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 2909d63fdb69Smrg" 2910d63fdb69Smrg ;; 2911d63fdb69Smrg esac 2912d63fdb69Smrg $ECHO "\ 2913d63fdb69Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 2914d63fdb69Smrg exit 1 2915d63fdb69Smrg fi 2916d63fdb69Smrg else 2917d63fdb69Smrg # The program doesn't exist. 2918d63fdb69Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 2919d63fdb69Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 2920d63fdb69Smrg $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 2921d63fdb69Smrg exit 1 2922d63fdb69Smrg fi 2923d63fdb69Smrgfi\ 2924d63fdb69Smrg" 2925d63fdb69Smrg} 2926d63fdb69Smrg# end: func_emit_wrapper_part2 2927d63fdb69Smrg 2928d63fdb69Smrg 2929d63fdb69Smrg# func_emit_wrapper [arg=no] 2930d63fdb69Smrg# 2931d63fdb69Smrg# Emit a libtool wrapper script on stdout. 2932d63fdb69Smrg# Don't directly open a file because we may want to 2933d63fdb69Smrg# incorporate the script contents within a cygwin/mingw 2934d63fdb69Smrg# wrapper executable. Must ONLY be called from within 2935d63fdb69Smrg# func_mode_link because it depends on a number of variables 2936d63fdb69Smrg# set therein. 2937d63fdb69Smrg# 2938d63fdb69Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 2939d63fdb69Smrg# variable will take. If 'yes', then the emitted script 2940d63fdb69Smrg# will assume that the directory in which it is stored is 2941d63fdb69Smrg# the $objdir directory. This is a cygwin/mingw-specific 2942d63fdb69Smrg# behavior. 2943d63fdb69Smrgfunc_emit_wrapper () 2944d63fdb69Smrg{ 2945d63fdb69Smrg func_emit_wrapper_arg1=no 2946d63fdb69Smrg if test -n "$1" ; then 2947d63fdb69Smrg func_emit_wrapper_arg1=$1 29483da084b3Smrg fi 29493da084b3Smrg 2950d63fdb69Smrg # split this up so that func_emit_cwrapperexe_src 2951d63fdb69Smrg # can call each part independently. 2952d63fdb69Smrg func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" 2953d63fdb69Smrg func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" 2954d63fdb69Smrg} 29553da084b3Smrg 29563da084b3Smrg 2957d63fdb69Smrg# func_to_host_path arg 2958d63fdb69Smrg# 2959d63fdb69Smrg# Convert paths to host format when used with build tools. 2960d63fdb69Smrg# Intended for use with "native" mingw (where libtool itself 2961d63fdb69Smrg# is running under the msys shell), or in the following cross- 2962d63fdb69Smrg# build environments: 2963d63fdb69Smrg# $build $host 2964d63fdb69Smrg# mingw (msys) mingw [e.g. native] 2965d63fdb69Smrg# cygwin mingw 2966d63fdb69Smrg# *nix + wine mingw 2967d63fdb69Smrg# where wine is equipped with the `winepath' executable. 2968d63fdb69Smrg# In the native mingw case, the (msys) shell automatically 2969d63fdb69Smrg# converts paths for any non-msys applications it launches, 2970d63fdb69Smrg# but that facility isn't available from inside the cwrapper. 2971d63fdb69Smrg# Similar accommodations are necessary for $host mingw and 2972d63fdb69Smrg# $build cygwin. Calling this function does no harm for other 2973d63fdb69Smrg# $host/$build combinations not listed above. 2974d63fdb69Smrg# 2975d63fdb69Smrg# ARG is the path (on $build) that should be converted to 2976d63fdb69Smrg# the proper representation for $host. The result is stored 2977d63fdb69Smrg# in $func_to_host_path_result. 2978d63fdb69Smrgfunc_to_host_path () 2979d63fdb69Smrg{ 2980d63fdb69Smrg func_to_host_path_result="$1" 2981d63fdb69Smrg if test -n "$1" ; then 2982d63fdb69Smrg case $host in 2983d63fdb69Smrg *mingw* ) 2984d63fdb69Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 2985d63fdb69Smrg case $build in 2986d63fdb69Smrg *mingw* ) # actually, msys 2987d63fdb69Smrg # awkward: cmd appends spaces to result 2988d63fdb69Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 2989d63fdb69Smrg func_to_host_path_tmp1=`( cmd //c echo "$1" |\ 2990d63fdb69Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 2991d63fdb69Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 2992d63fdb69Smrg $SED -e "$lt_sed_naive_backslashify"` 2993d63fdb69Smrg ;; 2994d63fdb69Smrg *cygwin* ) 2995d63fdb69Smrg func_to_host_path_tmp1=`cygpath -w "$1"` 2996d63fdb69Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 2997d63fdb69Smrg $SED -e "$lt_sed_naive_backslashify"` 2998d63fdb69Smrg ;; 2999d63fdb69Smrg * ) 3000d63fdb69Smrg # Unfortunately, winepath does not exit with a non-zero 3001d63fdb69Smrg # error code, so we are forced to check the contents of 3002d63fdb69Smrg # stdout. On the other hand, if the command is not 3003d63fdb69Smrg # found, the shell will set an exit code of 127 and print 3004d63fdb69Smrg # *an error message* to stdout. So we must check for both 3005d63fdb69Smrg # error code of zero AND non-empty stdout, which explains 3006d63fdb69Smrg # the odd construction: 3007d63fdb69Smrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 3008d63fdb69Smrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 3009d63fdb69Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 3010d63fdb69Smrg $SED -e "$lt_sed_naive_backslashify"` 3011d63fdb69Smrg else 3012d63fdb69Smrg # Allow warning below. 3013d63fdb69Smrg func_to_host_path_result="" 3014d63fdb69Smrg fi 3015d63fdb69Smrg ;; 3016d63fdb69Smrg esac 3017d63fdb69Smrg if test -z "$func_to_host_path_result" ; then 3018d63fdb69Smrg func_error "Could not determine host path corresponding to" 3019d63fdb69Smrg func_error " '$1'" 3020d63fdb69Smrg func_error "Continuing, but uninstalled executables may not work." 3021d63fdb69Smrg # Fallback: 3022d63fdb69Smrg func_to_host_path_result="$1" 3023d63fdb69Smrg fi 3024d63fdb69Smrg ;; 3025d63fdb69Smrg esac 3026d63fdb69Smrg fi 3027d63fdb69Smrg} 3028d63fdb69Smrg# end: func_to_host_path 30293da084b3Smrg 3030d63fdb69Smrg# func_to_host_pathlist arg 3031d63fdb69Smrg# 3032d63fdb69Smrg# Convert pathlists to host format when used with build tools. 3033d63fdb69Smrg# See func_to_host_path(), above. This function supports the 3034d63fdb69Smrg# following $build/$host combinations (but does no harm for 3035d63fdb69Smrg# combinations not listed here): 3036d63fdb69Smrg# $build $host 3037d63fdb69Smrg# mingw (msys) mingw [e.g. native] 3038d63fdb69Smrg# cygwin mingw 3039d63fdb69Smrg# *nix + wine mingw 3040d63fdb69Smrg# 3041d63fdb69Smrg# Path separators are also converted from $build format to 3042d63fdb69Smrg# $host format. If ARG begins or ends with a path separator 3043d63fdb69Smrg# character, it is preserved (but converted to $host format) 3044d63fdb69Smrg# on output. 3045d63fdb69Smrg# 3046d63fdb69Smrg# ARG is a pathlist (on $build) that should be converted to 3047d63fdb69Smrg# the proper representation on $host. The result is stored 3048d63fdb69Smrg# in $func_to_host_pathlist_result. 3049d63fdb69Smrgfunc_to_host_pathlist () 3050d63fdb69Smrg{ 3051d63fdb69Smrg func_to_host_pathlist_result="$1" 3052d63fdb69Smrg if test -n "$1" ; then 3053d63fdb69Smrg case $host in 3054d63fdb69Smrg *mingw* ) 3055d63fdb69Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3056d63fdb69Smrg # Remove leading and trailing path separator characters from 3057d63fdb69Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3058d63fdb69Smrg # into '.;' and ';.', and winepath ignores them completely. 3059d63fdb69Smrg func_to_host_pathlist_tmp2="$1" 3060d63fdb69Smrg # Once set for this call, this variable should not be 3061d63fdb69Smrg # reassigned. It is used in tha fallback case. 3062d63fdb69Smrg func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ 3063d63fdb69Smrg $SED -e 's|^:*||' -e 's|:*$||'` 3064d63fdb69Smrg case $build in 3065d63fdb69Smrg *mingw* ) # Actually, msys. 3066d63fdb69Smrg # Awkward: cmd appends spaces to result. 3067d63fdb69Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 3068d63fdb69Smrg func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ 3069d63fdb69Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 3070d63fdb69Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 3071d63fdb69Smrg $SED -e "$lt_sed_naive_backslashify"` 3072d63fdb69Smrg ;; 3073d63fdb69Smrg *cygwin* ) 3074d63fdb69Smrg func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` 3075d63fdb69Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 3076d63fdb69Smrg $SED -e "$lt_sed_naive_backslashify"` 3077d63fdb69Smrg ;; 3078d63fdb69Smrg * ) 3079d63fdb69Smrg # unfortunately, winepath doesn't convert pathlists 3080d63fdb69Smrg func_to_host_pathlist_result="" 3081d63fdb69Smrg func_to_host_pathlist_oldIFS=$IFS 3082d63fdb69Smrg IFS=: 3083d63fdb69Smrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 3084d63fdb69Smrg IFS=$func_to_host_pathlist_oldIFS 3085d63fdb69Smrg if test -n "$func_to_host_pathlist_f" ; then 3086d63fdb69Smrg func_to_host_path "$func_to_host_pathlist_f" 3087d63fdb69Smrg if test -n "$func_to_host_path_result" ; then 3088d63fdb69Smrg if test -z "$func_to_host_pathlist_result" ; then 3089d63fdb69Smrg func_to_host_pathlist_result="$func_to_host_path_result" 3090d63fdb69Smrg else 3091d63fdb69Smrg func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" 3092d63fdb69Smrg fi 3093d63fdb69Smrg fi 3094d63fdb69Smrg fi 3095d63fdb69Smrg IFS=: 3096d63fdb69Smrg done 3097d63fdb69Smrg IFS=$func_to_host_pathlist_oldIFS 3098d63fdb69Smrg ;; 3099d63fdb69Smrg esac 3100d63fdb69Smrg if test -z "$func_to_host_pathlist_result" ; then 3101d63fdb69Smrg func_error "Could not determine the host path(s) corresponding to" 3102d63fdb69Smrg func_error " '$1'" 3103d63fdb69Smrg func_error "Continuing, but uninstalled executables may not work." 3104d63fdb69Smrg # Fallback. This may break if $1 contains DOS-style drive 3105d63fdb69Smrg # specifications. The fix is not to complicate the expression 3106d63fdb69Smrg # below, but for the user to provide a working wine installation 3107d63fdb69Smrg # with winepath so that path translation in the cross-to-mingw 3108d63fdb69Smrg # case works properly. 3109d63fdb69Smrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 3110d63fdb69Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 3111d63fdb69Smrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 3112d63fdb69Smrg fi 3113d63fdb69Smrg # Now, add the leading and trailing path separators back 3114d63fdb69Smrg case "$1" in 3115d63fdb69Smrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 3116d63fdb69Smrg ;; 3117d63fdb69Smrg esac 3118d63fdb69Smrg case "$1" in 3119d63fdb69Smrg *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" 3120d63fdb69Smrg ;; 3121d63fdb69Smrg esac 3122d63fdb69Smrg ;; 3123d63fdb69Smrg esac 3124d63fdb69Smrg fi 3125d63fdb69Smrg} 3126d63fdb69Smrg# end: func_to_host_pathlist 31273da084b3Smrg 3128d63fdb69Smrg# func_emit_cwrapperexe_src 3129d63fdb69Smrg# emit the source code for a wrapper executable on stdout 3130d63fdb69Smrg# Must ONLY be called from within func_mode_link because 3131d63fdb69Smrg# it depends on a number of variable set therein. 3132d63fdb69Smrgfunc_emit_cwrapperexe_src () 3133d63fdb69Smrg{ 3134d63fdb69Smrg cat <<EOF 31353da084b3Smrg 3136d63fdb69Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 3137d63fdb69Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 31383da084b3Smrg 3139d63fdb69Smrg The $output program cannot be directly executed until all the libtool 3140d63fdb69Smrg libraries that it depends on are installed. 31413da084b3Smrg 3142d63fdb69Smrg This wrapper executable should never be moved out of the build directory. 3143d63fdb69Smrg If it is, it will not operate correctly. 3144d63fdb69Smrg 3145d63fdb69Smrg Currently, it simply execs the wrapper *script* "$SHELL $output", 3146d63fdb69Smrg but could eventually absorb all of the scripts functionality and 3147d63fdb69Smrg exec $objdir/$outputname directly. 3148d63fdb69Smrg*/ 3149d63fdb69SmrgEOF 3150d63fdb69Smrg cat <<"EOF" 3151d63fdb69Smrg#include <stdio.h> 3152d63fdb69Smrg#include <stdlib.h> 3153d63fdb69Smrg#ifdef _MSC_VER 3154d63fdb69Smrg# include <direct.h> 3155d63fdb69Smrg# include <process.h> 3156d63fdb69Smrg# include <io.h> 3157d63fdb69Smrg# define setmode _setmode 3158d63fdb69Smrg#else 3159d63fdb69Smrg# include <unistd.h> 3160d63fdb69Smrg# include <stdint.h> 3161d63fdb69Smrg# ifdef __CYGWIN__ 3162d63fdb69Smrg# include <io.h> 3163d63fdb69Smrg# define HAVE_SETENV 3164d63fdb69Smrg# ifdef __STRICT_ANSI__ 3165d63fdb69Smrgchar *realpath (const char *, char *); 3166d63fdb69Smrgint putenv (char *); 3167d63fdb69Smrgint setenv (const char *, const char *, int); 3168d63fdb69Smrg# endif 3169d63fdb69Smrg# endif 3170d63fdb69Smrg#endif 3171d63fdb69Smrg#include <malloc.h> 3172d63fdb69Smrg#include <stdarg.h> 3173d63fdb69Smrg#include <assert.h> 3174d63fdb69Smrg#include <string.h> 3175d63fdb69Smrg#include <ctype.h> 3176d63fdb69Smrg#include <errno.h> 3177d63fdb69Smrg#include <fcntl.h> 3178d63fdb69Smrg#include <sys/stat.h> 3179d63fdb69Smrg 3180d63fdb69Smrg#if defined(PATH_MAX) 3181d63fdb69Smrg# define LT_PATHMAX PATH_MAX 3182d63fdb69Smrg#elif defined(MAXPATHLEN) 3183d63fdb69Smrg# define LT_PATHMAX MAXPATHLEN 3184d63fdb69Smrg#else 3185d63fdb69Smrg# define LT_PATHMAX 1024 3186d63fdb69Smrg#endif 3187d63fdb69Smrg 3188d63fdb69Smrg#ifndef S_IXOTH 3189d63fdb69Smrg# define S_IXOTH 0 3190d63fdb69Smrg#endif 3191d63fdb69Smrg#ifndef S_IXGRP 3192d63fdb69Smrg# define S_IXGRP 0 3193d63fdb69Smrg#endif 3194d63fdb69Smrg 3195d63fdb69Smrg#ifdef _MSC_VER 3196d63fdb69Smrg# define S_IXUSR _S_IEXEC 3197d63fdb69Smrg# define stat _stat 3198d63fdb69Smrg# ifndef _INTPTR_T_DEFINED 3199d63fdb69Smrg# define intptr_t int 3200d63fdb69Smrg# endif 3201d63fdb69Smrg#endif 3202d63fdb69Smrg 3203d63fdb69Smrg#ifndef DIR_SEPARATOR 3204d63fdb69Smrg# define DIR_SEPARATOR '/' 3205d63fdb69Smrg# define PATH_SEPARATOR ':' 3206d63fdb69Smrg#endif 3207d63fdb69Smrg 3208d63fdb69Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 3209d63fdb69Smrg defined (__OS2__) 3210d63fdb69Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 3211d63fdb69Smrg# define FOPEN_WB "wb" 3212d63fdb69Smrg# ifndef DIR_SEPARATOR_2 3213d63fdb69Smrg# define DIR_SEPARATOR_2 '\\' 3214d63fdb69Smrg# endif 3215d63fdb69Smrg# ifndef PATH_SEPARATOR_2 3216d63fdb69Smrg# define PATH_SEPARATOR_2 ';' 3217d63fdb69Smrg# endif 3218d63fdb69Smrg#endif 3219d63fdb69Smrg 3220d63fdb69Smrg#ifndef DIR_SEPARATOR_2 3221d63fdb69Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 3222d63fdb69Smrg#else /* DIR_SEPARATOR_2 */ 3223d63fdb69Smrg# define IS_DIR_SEPARATOR(ch) \ 3224d63fdb69Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 3225d63fdb69Smrg#endif /* DIR_SEPARATOR_2 */ 3226d63fdb69Smrg 3227d63fdb69Smrg#ifndef PATH_SEPARATOR_2 3228d63fdb69Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 3229d63fdb69Smrg#else /* PATH_SEPARATOR_2 */ 3230d63fdb69Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 3231d63fdb69Smrg#endif /* PATH_SEPARATOR_2 */ 3232d63fdb69Smrg 3233d63fdb69Smrg#ifdef __CYGWIN__ 3234d63fdb69Smrg# define FOPEN_WB "wb" 3235d63fdb69Smrg#endif 3236d63fdb69Smrg 3237d63fdb69Smrg#ifndef FOPEN_WB 3238d63fdb69Smrg# define FOPEN_WB "w" 3239d63fdb69Smrg#endif 3240d63fdb69Smrg#ifndef _O_BINARY 3241d63fdb69Smrg# define _O_BINARY 0 3242d63fdb69Smrg#endif 3243d63fdb69Smrg 3244d63fdb69Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 3245d63fdb69Smrg#define XFREE(stale) do { \ 3246d63fdb69Smrg if (stale) { free ((void *) stale); stale = 0; } \ 3247d63fdb69Smrg} while (0) 3248d63fdb69Smrg 3249d63fdb69Smrg#undef LTWRAPPER_DEBUGPRINTF 3250d63fdb69Smrg#if defined DEBUGWRAPPER 3251d63fdb69Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args 3252d63fdb69Smrgstatic void 3253d63fdb69Smrgltwrapper_debugprintf (const char *fmt, ...) 3254d63fdb69Smrg{ 3255d63fdb69Smrg va_list args; 3256d63fdb69Smrg va_start (args, fmt); 3257d63fdb69Smrg (void) vfprintf (stderr, fmt, args); 3258d63fdb69Smrg va_end (args); 3259d63fdb69Smrg} 3260d63fdb69Smrg#else 3261d63fdb69Smrg# define LTWRAPPER_DEBUGPRINTF(args) 3262d63fdb69Smrg#endif 3263d63fdb69Smrg 3264d63fdb69Smrgconst char *program_name = NULL; 3265d63fdb69Smrg 3266d63fdb69Smrgvoid *xmalloc (size_t num); 3267d63fdb69Smrgchar *xstrdup (const char *string); 3268d63fdb69Smrgconst char *base_name (const char *name); 3269d63fdb69Smrgchar *find_executable (const char *wrapper); 3270d63fdb69Smrgchar *chase_symlinks (const char *pathspec); 3271d63fdb69Smrgint make_executable (const char *path); 3272d63fdb69Smrgint check_executable (const char *path); 3273d63fdb69Smrgchar *strendzap (char *str, const char *pat); 3274d63fdb69Smrgvoid lt_fatal (const char *message, ...); 3275d63fdb69Smrgvoid lt_setenv (const char *name, const char *value); 3276d63fdb69Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 3277d63fdb69Smrgvoid lt_opt_process_env_set (const char *arg); 3278d63fdb69Smrgvoid lt_opt_process_env_prepend (const char *arg); 3279d63fdb69Smrgvoid lt_opt_process_env_append (const char *arg); 3280d63fdb69Smrgint lt_split_name_value (const char *arg, char** name, char** value); 3281d63fdb69Smrgvoid lt_update_exe_path (const char *name, const char *value); 3282d63fdb69Smrgvoid lt_update_lib_path (const char *name, const char *value); 3283d63fdb69Smrg 3284d63fdb69Smrgstatic const char *script_text_part1 = 3285d63fdb69SmrgEOF 3286d63fdb69Smrg 3287d63fdb69Smrg func_emit_wrapper_part1 yes | 3288d63fdb69Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 3289d63fdb69Smrg -e 's/^/ "/' -e 's/$/\\n"/' 3290d63fdb69Smrg echo ";" 3291d63fdb69Smrg cat <<EOF 3292d63fdb69Smrg 3293d63fdb69Smrgstatic const char *script_text_part2 = 3294d63fdb69SmrgEOF 3295d63fdb69Smrg func_emit_wrapper_part2 yes | 3296d63fdb69Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 3297d63fdb69Smrg -e 's/^/ "/' -e 's/$/\\n"/' 3298d63fdb69Smrg echo ";" 3299d63fdb69Smrg 3300d63fdb69Smrg cat <<EOF 3301d63fdb69Smrgconst char * MAGIC_EXE = "$magic_exe"; 3302d63fdb69Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 3303d63fdb69SmrgEOF 3304d63fdb69Smrg 3305d63fdb69Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3306d63fdb69Smrg func_to_host_pathlist "$temp_rpath" 3307d63fdb69Smrg cat <<EOF 3308d63fdb69Smrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 33093da084b3SmrgEOF 33103da084b3Smrg else 3311d63fdb69Smrg cat <<"EOF" 3312d63fdb69Smrgconst char * LIB_PATH_VALUE = ""; 3313d63fdb69SmrgEOF 33143da084b3Smrg fi 3315d63fdb69Smrg 3316d63fdb69Smrg if test -n "$dllsearchpath"; then 3317d63fdb69Smrg func_to_host_pathlist "$dllsearchpath:" 3318d63fdb69Smrg cat <<EOF 3319d63fdb69Smrgconst char * EXE_PATH_VARNAME = "PATH"; 3320d63fdb69Smrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 3321d63fdb69SmrgEOF 33223da084b3Smrg else 3323d63fdb69Smrg cat <<"EOF" 3324d63fdb69Smrgconst char * EXE_PATH_VARNAME = ""; 3325d63fdb69Smrgconst char * EXE_PATH_VALUE = ""; 3326d63fdb69SmrgEOF 33273da084b3Smrg fi 3328d63fdb69Smrg 3329d63fdb69Smrg if test "$fast_install" = yes; then 3330d63fdb69Smrg cat <<EOF 3331d63fdb69Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 3332d63fdb69SmrgEOF 33333da084b3Smrg else 3334d63fdb69Smrg cat <<EOF 3335d63fdb69Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 3336d63fdb69SmrgEOF 33373da084b3Smrg fi 33383da084b3Smrg 33393da084b3Smrg 3340d63fdb69Smrg cat <<"EOF" 33413da084b3Smrg 3342d63fdb69Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 3343d63fdb69Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH 5 33443da084b3Smrg 3345d63fdb69Smrgstatic const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH; 3346d63fdb69Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 33473da084b3Smrg 3348d63fdb69Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 33493da084b3Smrg 3350d63fdb69Smrgstatic const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7; 3351d63fdb69Smrgstatic const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set"; 3352d63fdb69Smrg /* argument is putenv-style "foo=bar", value of foo is set to bar */ 33533da084b3Smrg 3354d63fdb69Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11; 3355d63fdb69Smrgstatic const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend"; 3356d63fdb69Smrg /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */ 33573da084b3Smrg 3358d63fdb69Smrgstatic const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10; 3359d63fdb69Smrgstatic const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append"; 3360d63fdb69Smrg /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */ 33613da084b3Smrg 3362d63fdb69Smrgint 3363d63fdb69Smrgmain (int argc, char *argv[]) 3364d63fdb69Smrg{ 3365d63fdb69Smrg char **newargz; 3366d63fdb69Smrg int newargc; 3367d63fdb69Smrg char *tmp_pathspec; 3368d63fdb69Smrg char *actual_cwrapper_path; 3369d63fdb69Smrg char *actual_cwrapper_name; 3370d63fdb69Smrg char *target_name; 3371d63fdb69Smrg char *lt_argv_zero; 3372d63fdb69Smrg intptr_t rval = 127; 33733da084b3Smrg 3374d63fdb69Smrg int i; 33753da084b3Smrg 3376d63fdb69Smrg program_name = (char *) xstrdup (base_name (argv[0])); 3377d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0])); 3378d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name)); 33793da084b3Smrg 3380d63fdb69Smrg /* very simple arg parsing; don't want to rely on getopt */ 3381d63fdb69Smrg for (i = 1; i < argc; i++) 3382d63fdb69Smrg { 3383d63fdb69Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 3384d63fdb69Smrg { 3385d63fdb69SmrgEOF 3386d63fdb69Smrg case "$host" in 3387d63fdb69Smrg *mingw* | *cygwin* ) 3388d63fdb69Smrg # make stdout use "unix" line endings 3389d63fdb69Smrg echo " setmode(1,_O_BINARY);" 3390d63fdb69Smrg ;; 3391d63fdb69Smrg esac 33923da084b3Smrg 3393d63fdb69Smrg cat <<"EOF" 3394d63fdb69Smrg printf ("%s", script_text_part1); 3395d63fdb69Smrg printf ("%s", script_text_part2); 3396d63fdb69Smrg return 0; 3397d63fdb69Smrg } 3398d63fdb69Smrg } 33993da084b3Smrg 3400d63fdb69Smrg newargz = XMALLOC (char *, argc + 1); 3401d63fdb69Smrg tmp_pathspec = find_executable (argv[0]); 3402d63fdb69Smrg if (tmp_pathspec == NULL) 3403d63fdb69Smrg lt_fatal ("Couldn't find %s", argv[0]); 3404d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", 3405d63fdb69Smrg tmp_pathspec)); 3406d63fdb69Smrg 3407d63fdb69Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 3408d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", 3409d63fdb69Smrg actual_cwrapper_path)); 3410d63fdb69Smrg XFREE (tmp_pathspec); 3411d63fdb69Smrg 3412d63fdb69Smrg actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); 3413d63fdb69Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 3414d63fdb69Smrg 3415d63fdb69Smrg /* wrapper name transforms */ 3416d63fdb69Smrg strendzap (actual_cwrapper_name, ".exe"); 3417d63fdb69Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 3418d63fdb69Smrg XFREE (actual_cwrapper_name); 3419d63fdb69Smrg actual_cwrapper_name = tmp_pathspec; 3420d63fdb69Smrg tmp_pathspec = 0; 3421d63fdb69Smrg 3422d63fdb69Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 3423d63fdb69Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 3424d63fdb69Smrg strendzap (target_name, ".exe"); 3425d63fdb69Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 3426d63fdb69Smrg XFREE (target_name); 3427d63fdb69Smrg target_name = tmp_pathspec; 3428d63fdb69Smrg tmp_pathspec = 0; 3429d63fdb69Smrg 3430d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", 3431d63fdb69Smrg target_name)); 3432d63fdb69SmrgEOF 34333da084b3Smrg 3434d63fdb69Smrg cat <<EOF 3435d63fdb69Smrg newargz[0] = 3436d63fdb69Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 3437d63fdb69Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 3438d63fdb69Smrg strcpy (newargz[0], actual_cwrapper_path); 3439d63fdb69Smrg strcat (newargz[0], "$objdir"); 3440d63fdb69Smrg strcat (newargz[0], "/"); 3441d63fdb69SmrgEOF 34423da084b3Smrg 3443d63fdb69Smrg cat <<"EOF" 3444d63fdb69Smrg /* stop here, and copy so we don't have to do this twice */ 3445d63fdb69Smrg tmp_pathspec = xstrdup (newargz[0]); 34463da084b3Smrg 3447d63fdb69Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 3448d63fdb69Smrg strcat (newargz[0], actual_cwrapper_name); 34493da084b3Smrg 3450d63fdb69Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 3451d63fdb69Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 3452d63fdb69Smrg XFREE (tmp_pathspec); 3453d63fdb69Smrg tmp_pathspec = NULL; 3454d63fdb69SmrgEOF 34553da084b3Smrg 3456d63fdb69Smrg case $host_os in 3457d63fdb69Smrg mingw*) 3458d63fdb69Smrg cat <<"EOF" 3459d63fdb69Smrg { 3460d63fdb69Smrg char* p; 3461d63fdb69Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 3462d63fdb69Smrg { 3463d63fdb69Smrg *p = '/'; 3464d63fdb69Smrg } 3465d63fdb69Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 3466d63fdb69Smrg { 3467d63fdb69Smrg *p = '/'; 3468d63fdb69Smrg } 3469d63fdb69Smrg } 3470d63fdb69SmrgEOF 3471d63fdb69Smrg ;; 3472d63fdb69Smrg esac 34733da084b3Smrg 3474d63fdb69Smrg cat <<"EOF" 3475d63fdb69Smrg XFREE (target_name); 3476d63fdb69Smrg XFREE (actual_cwrapper_path); 3477d63fdb69Smrg XFREE (actual_cwrapper_name); 34783da084b3Smrg 3479d63fdb69Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 3480d63fdb69Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 3481d63fdb69Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 3482d63fdb69Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 34833da084b3Smrg 3484d63fdb69Smrg newargc=0; 3485d63fdb69Smrg for (i = 1; i < argc; i++) 3486d63fdb69Smrg { 3487d63fdb69Smrg if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) 3488d63fdb69Smrg { 3489d63fdb69Smrg if (argv[i][env_set_opt_len] == '=') 3490d63fdb69Smrg { 3491d63fdb69Smrg const char *p = argv[i] + env_set_opt_len + 1; 3492d63fdb69Smrg lt_opt_process_env_set (p); 3493d63fdb69Smrg } 3494d63fdb69Smrg else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) 3495d63fdb69Smrg { 3496d63fdb69Smrg lt_opt_process_env_set (argv[++i]); /* don't copy */ 3497d63fdb69Smrg } 3498d63fdb69Smrg else 3499d63fdb69Smrg lt_fatal ("%s missing required argument", env_set_opt); 3500d63fdb69Smrg continue; 3501d63fdb69Smrg } 3502d63fdb69Smrg if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) 3503d63fdb69Smrg { 3504d63fdb69Smrg if (argv[i][env_prepend_opt_len] == '=') 3505d63fdb69Smrg { 3506d63fdb69Smrg const char *p = argv[i] + env_prepend_opt_len + 1; 3507d63fdb69Smrg lt_opt_process_env_prepend (p); 3508d63fdb69Smrg } 3509d63fdb69Smrg else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) 3510d63fdb69Smrg { 3511d63fdb69Smrg lt_opt_process_env_prepend (argv[++i]); /* don't copy */ 3512d63fdb69Smrg } 3513d63fdb69Smrg else 3514d63fdb69Smrg lt_fatal ("%s missing required argument", env_prepend_opt); 3515d63fdb69Smrg continue; 3516d63fdb69Smrg } 3517d63fdb69Smrg if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) 3518d63fdb69Smrg { 3519d63fdb69Smrg if (argv[i][env_append_opt_len] == '=') 3520d63fdb69Smrg { 3521d63fdb69Smrg const char *p = argv[i] + env_append_opt_len + 1; 3522d63fdb69Smrg lt_opt_process_env_append (p); 3523d63fdb69Smrg } 3524d63fdb69Smrg else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) 3525d63fdb69Smrg { 3526d63fdb69Smrg lt_opt_process_env_append (argv[++i]); /* don't copy */ 3527d63fdb69Smrg } 3528d63fdb69Smrg else 3529d63fdb69Smrg lt_fatal ("%s missing required argument", env_append_opt); 3530d63fdb69Smrg continue; 3531d63fdb69Smrg } 3532d63fdb69Smrg if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) 3533d63fdb69Smrg { 3534d63fdb69Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 3535d63fdb69Smrg namespace, but it is not one of the ones we know about and 3536d63fdb69Smrg have already dealt with, above (inluding dump-script), then 3537d63fdb69Smrg report an error. Otherwise, targets might begin to believe 3538d63fdb69Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 3539d63fdb69Smrg namespace. The first time any user complains about this, we'll 3540d63fdb69Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 3541d63fdb69Smrg or a configure.ac-settable value. 3542d63fdb69Smrg */ 3543d63fdb69Smrg lt_fatal ("Unrecognized option in %s namespace: '%s'", 3544d63fdb69Smrg ltwrapper_option_prefix, argv[i]); 3545d63fdb69Smrg } 3546d63fdb69Smrg /* otherwise ... */ 3547d63fdb69Smrg newargz[++newargc] = xstrdup (argv[i]); 3548d63fdb69Smrg } 3549d63fdb69Smrg newargz[++newargc] = NULL; 35503da084b3Smrg 3551d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>"))); 3552d63fdb69Smrg for (i = 0; i < newargc; i++) 3553d63fdb69Smrg { 3554d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>"))); 3555d63fdb69Smrg } 35563da084b3Smrg 3557d63fdb69SmrgEOF 35583da084b3Smrg 3559d63fdb69Smrg case $host_os in 3560d63fdb69Smrg mingw*) 3561d63fdb69Smrg cat <<"EOF" 3562d63fdb69Smrg /* execv doesn't actually work on mingw as expected on unix */ 3563d63fdb69Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 3564d63fdb69Smrg if (rval == -1) 3565d63fdb69Smrg { 3566d63fdb69Smrg /* failed to start process */ 3567d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); 3568d63fdb69Smrg return 127; 3569d63fdb69Smrg } 3570d63fdb69Smrg return rval; 3571d63fdb69SmrgEOF 3572d63fdb69Smrg ;; 3573d63fdb69Smrg *) 3574d63fdb69Smrg cat <<"EOF" 3575d63fdb69Smrg execv (lt_argv_zero, newargz); 3576d63fdb69Smrg return rval; /* =127, but avoids unused variable warning */ 3577d63fdb69SmrgEOF 3578d63fdb69Smrg ;; 3579d63fdb69Smrg esac 35803da084b3Smrg 3581d63fdb69Smrg cat <<"EOF" 3582d63fdb69Smrg} 35833da084b3Smrg 3584d63fdb69Smrgvoid * 3585d63fdb69Smrgxmalloc (size_t num) 3586d63fdb69Smrg{ 3587d63fdb69Smrg void *p = (void *) malloc (num); 3588d63fdb69Smrg if (!p) 3589d63fdb69Smrg lt_fatal ("Memory exhausted"); 35903da084b3Smrg 3591d63fdb69Smrg return p; 3592d63fdb69Smrg} 35933da084b3Smrg 3594d63fdb69Smrgchar * 3595d63fdb69Smrgxstrdup (const char *string) 3596d63fdb69Smrg{ 3597d63fdb69Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 3598d63fdb69Smrg string) : NULL; 3599d63fdb69Smrg} 36003da084b3Smrg 3601d63fdb69Smrgconst char * 3602d63fdb69Smrgbase_name (const char *name) 3603d63fdb69Smrg{ 3604d63fdb69Smrg const char *base; 36053da084b3Smrg 3606d63fdb69Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3607d63fdb69Smrg /* Skip over the disk name in MSDOS pathnames. */ 3608d63fdb69Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 3609d63fdb69Smrg name += 2; 3610d63fdb69Smrg#endif 36113da084b3Smrg 3612d63fdb69Smrg for (base = name; *name; name++) 3613d63fdb69Smrg if (IS_DIR_SEPARATOR (*name)) 3614d63fdb69Smrg base = name + 1; 3615d63fdb69Smrg return base; 3616d63fdb69Smrg} 36173da084b3Smrg 3618d63fdb69Smrgint 3619d63fdb69Smrgcheck_executable (const char *path) 3620d63fdb69Smrg{ 3621d63fdb69Smrg struct stat st; 36223da084b3Smrg 3623d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", 3624d63fdb69Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 3625d63fdb69Smrg if ((!path) || (!*path)) 3626d63fdb69Smrg return 0; 36273da084b3Smrg 3628d63fdb69Smrg if ((stat (path, &st) >= 0) 3629d63fdb69Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 3630d63fdb69Smrg return 1; 3631d63fdb69Smrg else 3632d63fdb69Smrg return 0; 3633d63fdb69Smrg} 36343da084b3Smrg 3635d63fdb69Smrgint 3636d63fdb69Smrgmake_executable (const char *path) 3637d63fdb69Smrg{ 3638d63fdb69Smrg int rval = 0; 3639d63fdb69Smrg struct stat st; 36403da084b3Smrg 3641d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", 3642d63fdb69Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 3643d63fdb69Smrg if ((!path) || (!*path)) 3644d63fdb69Smrg return 0; 36453da084b3Smrg 3646d63fdb69Smrg if (stat (path, &st) >= 0) 3647d63fdb69Smrg { 3648d63fdb69Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 3649d63fdb69Smrg } 3650d63fdb69Smrg return rval; 3651d63fdb69Smrg} 36523da084b3Smrg 3653d63fdb69Smrg/* Searches for the full path of the wrapper. Returns 3654d63fdb69Smrg newly allocated full path name if found, NULL otherwise 3655d63fdb69Smrg Does not chase symlinks, even on platforms that support them. 3656d63fdb69Smrg*/ 3657d63fdb69Smrgchar * 3658d63fdb69Smrgfind_executable (const char *wrapper) 3659d63fdb69Smrg{ 3660d63fdb69Smrg int has_slash = 0; 3661d63fdb69Smrg const char *p; 3662d63fdb69Smrg const char *p_next; 3663d63fdb69Smrg /* static buffer for getcwd */ 3664d63fdb69Smrg char tmp[LT_PATHMAX + 1]; 3665d63fdb69Smrg int tmp_len; 3666d63fdb69Smrg char *concat_name; 36673da084b3Smrg 3668d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", 3669d63fdb69Smrg wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 36703da084b3Smrg 3671d63fdb69Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 3672d63fdb69Smrg return NULL; 36733da084b3Smrg 3674d63fdb69Smrg /* Absolute path? */ 3675d63fdb69Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3676d63fdb69Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 3677d63fdb69Smrg { 3678d63fdb69Smrg concat_name = xstrdup (wrapper); 3679d63fdb69Smrg if (check_executable (concat_name)) 3680d63fdb69Smrg return concat_name; 3681d63fdb69Smrg XFREE (concat_name); 3682d63fdb69Smrg } 3683d63fdb69Smrg else 3684d63fdb69Smrg { 3685d63fdb69Smrg#endif 3686d63fdb69Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 3687d63fdb69Smrg { 3688d63fdb69Smrg concat_name = xstrdup (wrapper); 3689d63fdb69Smrg if (check_executable (concat_name)) 3690d63fdb69Smrg return concat_name; 3691d63fdb69Smrg XFREE (concat_name); 3692d63fdb69Smrg } 3693d63fdb69Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3694d63fdb69Smrg } 3695d63fdb69Smrg#endif 36963da084b3Smrg 3697d63fdb69Smrg for (p = wrapper; *p; p++) 3698d63fdb69Smrg if (*p == '/') 3699d63fdb69Smrg { 3700d63fdb69Smrg has_slash = 1; 3701d63fdb69Smrg break; 3702d63fdb69Smrg } 3703d63fdb69Smrg if (!has_slash) 3704d63fdb69Smrg { 3705d63fdb69Smrg /* no slashes; search PATH */ 3706d63fdb69Smrg const char *path = getenv ("PATH"); 3707d63fdb69Smrg if (path != NULL) 3708d63fdb69Smrg { 3709d63fdb69Smrg for (p = path; *p; p = p_next) 3710d63fdb69Smrg { 3711d63fdb69Smrg const char *q; 3712d63fdb69Smrg size_t p_len; 3713d63fdb69Smrg for (q = p; *q; q++) 3714d63fdb69Smrg if (IS_PATH_SEPARATOR (*q)) 3715d63fdb69Smrg break; 3716d63fdb69Smrg p_len = q - p; 3717d63fdb69Smrg p_next = (*q == '\0' ? q : q + 1); 3718d63fdb69Smrg if (p_len == 0) 3719d63fdb69Smrg { 3720d63fdb69Smrg /* empty path: current directory */ 3721d63fdb69Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3722d63fdb69Smrg lt_fatal ("getcwd failed"); 3723d63fdb69Smrg tmp_len = strlen (tmp); 3724d63fdb69Smrg concat_name = 3725d63fdb69Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3726d63fdb69Smrg memcpy (concat_name, tmp, tmp_len); 3727d63fdb69Smrg concat_name[tmp_len] = '/'; 3728d63fdb69Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3729d63fdb69Smrg } 3730d63fdb69Smrg else 3731d63fdb69Smrg { 3732d63fdb69Smrg concat_name = 3733d63fdb69Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 3734d63fdb69Smrg memcpy (concat_name, p, p_len); 3735d63fdb69Smrg concat_name[p_len] = '/'; 3736d63fdb69Smrg strcpy (concat_name + p_len + 1, wrapper); 3737d63fdb69Smrg } 3738d63fdb69Smrg if (check_executable (concat_name)) 3739d63fdb69Smrg return concat_name; 3740d63fdb69Smrg XFREE (concat_name); 3741d63fdb69Smrg } 3742d63fdb69Smrg } 3743d63fdb69Smrg /* not found in PATH; assume curdir */ 3744d63fdb69Smrg } 3745d63fdb69Smrg /* Relative path | not found in path: prepend cwd */ 3746d63fdb69Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3747d63fdb69Smrg lt_fatal ("getcwd failed"); 3748d63fdb69Smrg tmp_len = strlen (tmp); 3749d63fdb69Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3750d63fdb69Smrg memcpy (concat_name, tmp, tmp_len); 3751d63fdb69Smrg concat_name[tmp_len] = '/'; 3752d63fdb69Smrg strcpy (concat_name + tmp_len + 1, wrapper); 37533da084b3Smrg 3754d63fdb69Smrg if (check_executable (concat_name)) 3755d63fdb69Smrg return concat_name; 3756d63fdb69Smrg XFREE (concat_name); 3757d63fdb69Smrg return NULL; 3758d63fdb69Smrg} 37593da084b3Smrg 3760d63fdb69Smrgchar * 3761d63fdb69Smrgchase_symlinks (const char *pathspec) 3762d63fdb69Smrg{ 3763d63fdb69Smrg#ifndef S_ISLNK 3764d63fdb69Smrg return xstrdup (pathspec); 3765d63fdb69Smrg#else 3766d63fdb69Smrg char buf[LT_PATHMAX]; 3767d63fdb69Smrg struct stat s; 3768d63fdb69Smrg char *tmp_pathspec = xstrdup (pathspec); 3769d63fdb69Smrg char *p; 3770d63fdb69Smrg int has_symlinks = 0; 3771d63fdb69Smrg while (strlen (tmp_pathspec) && !has_symlinks) 3772d63fdb69Smrg { 3773d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", 3774d63fdb69Smrg tmp_pathspec)); 3775d63fdb69Smrg if (lstat (tmp_pathspec, &s) == 0) 3776d63fdb69Smrg { 3777d63fdb69Smrg if (S_ISLNK (s.st_mode) != 0) 3778d63fdb69Smrg { 3779d63fdb69Smrg has_symlinks = 1; 3780d63fdb69Smrg break; 3781d63fdb69Smrg } 37823da084b3Smrg 3783d63fdb69Smrg /* search backwards for last DIR_SEPARATOR */ 3784d63fdb69Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 3785d63fdb69Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 3786d63fdb69Smrg p--; 3787d63fdb69Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 3788d63fdb69Smrg { 3789d63fdb69Smrg /* no more DIR_SEPARATORS left */ 3790d63fdb69Smrg break; 3791d63fdb69Smrg } 3792d63fdb69Smrg *p = '\0'; 3793d63fdb69Smrg } 3794d63fdb69Smrg else 3795d63fdb69Smrg { 3796d63fdb69Smrg char *errstr = strerror (errno); 3797d63fdb69Smrg lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); 3798d63fdb69Smrg } 3799d63fdb69Smrg } 3800d63fdb69Smrg XFREE (tmp_pathspec); 38013da084b3Smrg 3802d63fdb69Smrg if (!has_symlinks) 3803d63fdb69Smrg { 3804d63fdb69Smrg return xstrdup (pathspec); 3805d63fdb69Smrg } 38063da084b3Smrg 3807d63fdb69Smrg tmp_pathspec = realpath (pathspec, buf); 3808d63fdb69Smrg if (tmp_pathspec == 0) 3809d63fdb69Smrg { 3810d63fdb69Smrg lt_fatal ("Could not follow symlinks for %s", pathspec); 3811d63fdb69Smrg } 3812d63fdb69Smrg return xstrdup (tmp_pathspec); 3813d63fdb69Smrg#endif 3814d63fdb69Smrg} 38153da084b3Smrg 3816d63fdb69Smrgchar * 3817d63fdb69Smrgstrendzap (char *str, const char *pat) 3818d63fdb69Smrg{ 3819d63fdb69Smrg size_t len, patlen; 38203da084b3Smrg 3821d63fdb69Smrg assert (str != NULL); 3822d63fdb69Smrg assert (pat != NULL); 38233da084b3Smrg 3824d63fdb69Smrg len = strlen (str); 3825d63fdb69Smrg patlen = strlen (pat); 38263da084b3Smrg 3827d63fdb69Smrg if (patlen <= len) 3828d63fdb69Smrg { 3829d63fdb69Smrg str += len - patlen; 3830d63fdb69Smrg if (strcmp (str, pat) == 0) 3831d63fdb69Smrg *str = '\0'; 3832d63fdb69Smrg } 3833d63fdb69Smrg return str; 3834d63fdb69Smrg} 38353da084b3Smrg 3836d63fdb69Smrgstatic void 3837d63fdb69Smrglt_error_core (int exit_status, const char *mode, 3838d63fdb69Smrg const char *message, va_list ap) 3839d63fdb69Smrg{ 3840d63fdb69Smrg fprintf (stderr, "%s: %s: ", program_name, mode); 3841d63fdb69Smrg vfprintf (stderr, message, ap); 3842d63fdb69Smrg fprintf (stderr, ".\n"); 38433da084b3Smrg 3844d63fdb69Smrg if (exit_status >= 0) 3845d63fdb69Smrg exit (exit_status); 3846d63fdb69Smrg} 38473da084b3Smrg 3848d63fdb69Smrgvoid 3849d63fdb69Smrglt_fatal (const char *message, ...) 3850d63fdb69Smrg{ 3851d63fdb69Smrg va_list ap; 3852d63fdb69Smrg va_start (ap, message); 3853d63fdb69Smrg lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 3854d63fdb69Smrg va_end (ap); 3855d63fdb69Smrg} 38563da084b3Smrg 3857d63fdb69Smrgvoid 3858d63fdb69Smrglt_setenv (const char *name, const char *value) 3859d63fdb69Smrg{ 3860d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", 3861d63fdb69Smrg (name ? name : "<NULL>"), 3862d63fdb69Smrg (value ? value : "<NULL>"))); 3863d63fdb69Smrg { 3864d63fdb69Smrg#ifdef HAVE_SETENV 3865d63fdb69Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 3866d63fdb69Smrg char *str = xstrdup (value); 3867d63fdb69Smrg setenv (name, str, 1); 3868d63fdb69Smrg#else 3869d63fdb69Smrg int len = strlen (name) + 1 + strlen (value) + 1; 3870d63fdb69Smrg char *str = XMALLOC (char, len); 3871d63fdb69Smrg sprintf (str, "%s=%s", name, value); 3872d63fdb69Smrg if (putenv (str) != EXIT_SUCCESS) 3873d63fdb69Smrg { 3874d63fdb69Smrg XFREE (str); 3875d63fdb69Smrg } 3876d63fdb69Smrg#endif 3877d63fdb69Smrg } 3878d63fdb69Smrg} 38793da084b3Smrg 3880d63fdb69Smrgchar * 3881d63fdb69Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 3882d63fdb69Smrg{ 3883d63fdb69Smrg char *new_value; 3884d63fdb69Smrg if (orig_value && *orig_value) 3885d63fdb69Smrg { 3886d63fdb69Smrg int orig_value_len = strlen (orig_value); 3887d63fdb69Smrg int add_len = strlen (add); 3888d63fdb69Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 3889d63fdb69Smrg if (to_end) 3890d63fdb69Smrg { 3891d63fdb69Smrg strcpy (new_value, orig_value); 3892d63fdb69Smrg strcpy (new_value + orig_value_len, add); 3893d63fdb69Smrg } 3894d63fdb69Smrg else 3895d63fdb69Smrg { 3896d63fdb69Smrg strcpy (new_value, add); 3897d63fdb69Smrg strcpy (new_value + add_len, orig_value); 3898d63fdb69Smrg } 3899d63fdb69Smrg } 3900d63fdb69Smrg else 3901d63fdb69Smrg { 3902d63fdb69Smrg new_value = xstrdup (add); 3903d63fdb69Smrg } 3904d63fdb69Smrg return new_value; 3905d63fdb69Smrg} 39063da084b3Smrg 3907d63fdb69Smrgint 3908d63fdb69Smrglt_split_name_value (const char *arg, char** name, char** value) 3909d63fdb69Smrg{ 3910d63fdb69Smrg const char *p; 3911d63fdb69Smrg int len; 3912d63fdb69Smrg if (!arg || !*arg) 3913d63fdb69Smrg return 1; 39143da084b3Smrg 3915d63fdb69Smrg p = strchr (arg, (int)'='); 39163da084b3Smrg 3917d63fdb69Smrg if (!p) 3918d63fdb69Smrg return 1; 39193da084b3Smrg 3920d63fdb69Smrg *value = xstrdup (++p); 39213da084b3Smrg 3922d63fdb69Smrg len = strlen (arg) - strlen (*value); 3923d63fdb69Smrg *name = XMALLOC (char, len); 3924d63fdb69Smrg strncpy (*name, arg, len-1); 3925d63fdb69Smrg (*name)[len - 1] = '\0'; 39263da084b3Smrg 3927d63fdb69Smrg return 0; 3928d63fdb69Smrg} 39293da084b3Smrg 3930d63fdb69Smrgvoid 3931d63fdb69Smrglt_opt_process_env_set (const char *arg) 3932d63fdb69Smrg{ 3933d63fdb69Smrg char *name = NULL; 3934d63fdb69Smrg char *value = NULL; 39353da084b3Smrg 3936d63fdb69Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3937d63fdb69Smrg { 3938d63fdb69Smrg XFREE (name); 3939d63fdb69Smrg XFREE (value); 3940d63fdb69Smrg lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); 3941d63fdb69Smrg } 39423da084b3Smrg 3943d63fdb69Smrg lt_setenv (name, value); 3944d63fdb69Smrg XFREE (name); 3945d63fdb69Smrg XFREE (value); 3946d63fdb69Smrg} 39473da084b3Smrg 3948d63fdb69Smrgvoid 3949d63fdb69Smrglt_opt_process_env_prepend (const char *arg) 3950d63fdb69Smrg{ 3951d63fdb69Smrg char *name = NULL; 3952d63fdb69Smrg char *value = NULL; 3953d63fdb69Smrg char *new_value = NULL; 39543da084b3Smrg 3955d63fdb69Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3956d63fdb69Smrg { 3957d63fdb69Smrg XFREE (name); 3958d63fdb69Smrg XFREE (value); 3959d63fdb69Smrg lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); 3960d63fdb69Smrg } 39613da084b3Smrg 3962d63fdb69Smrg new_value = lt_extend_str (getenv (name), value, 0); 3963d63fdb69Smrg lt_setenv (name, new_value); 3964d63fdb69Smrg XFREE (new_value); 3965d63fdb69Smrg XFREE (name); 3966d63fdb69Smrg XFREE (value); 3967d63fdb69Smrg} 39683da084b3Smrg 3969d63fdb69Smrgvoid 3970d63fdb69Smrglt_opt_process_env_append (const char *arg) 3971d63fdb69Smrg{ 3972d63fdb69Smrg char *name = NULL; 3973d63fdb69Smrg char *value = NULL; 3974d63fdb69Smrg char *new_value = NULL; 39753da084b3Smrg 3976d63fdb69Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3977d63fdb69Smrg { 3978d63fdb69Smrg XFREE (name); 3979d63fdb69Smrg XFREE (value); 3980d63fdb69Smrg lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); 3981d63fdb69Smrg } 39823da084b3Smrg 3983d63fdb69Smrg new_value = lt_extend_str (getenv (name), value, 1); 3984d63fdb69Smrg lt_setenv (name, new_value); 3985d63fdb69Smrg XFREE (new_value); 3986d63fdb69Smrg XFREE (name); 3987d63fdb69Smrg XFREE (value); 3988d63fdb69Smrg} 39893da084b3Smrg 3990d63fdb69Smrgvoid 3991d63fdb69Smrglt_update_exe_path (const char *name, const char *value) 3992d63fdb69Smrg{ 3993d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 3994d63fdb69Smrg (name ? name : "<NULL>"), 3995d63fdb69Smrg (value ? value : "<NULL>"))); 39963da084b3Smrg 3997d63fdb69Smrg if (name && *name && value && *value) 3998d63fdb69Smrg { 3999d63fdb69Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4000d63fdb69Smrg /* some systems can't cope with a ':'-terminated path #' */ 4001d63fdb69Smrg int len = strlen (new_value); 4002d63fdb69Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4003d63fdb69Smrg { 4004d63fdb69Smrg new_value[len-1] = '\0'; 4005d63fdb69Smrg } 4006d63fdb69Smrg lt_setenv (name, new_value); 4007d63fdb69Smrg XFREE (new_value); 4008d63fdb69Smrg } 4009d63fdb69Smrg} 40103da084b3Smrg 4011d63fdb69Smrgvoid 4012d63fdb69Smrglt_update_lib_path (const char *name, const char *value) 4013d63fdb69Smrg{ 4014d63fdb69Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4015d63fdb69Smrg (name ? name : "<NULL>"), 4016d63fdb69Smrg (value ? value : "<NULL>"))); 40173da084b3Smrg 4018d63fdb69Smrg if (name && *name && value && *value) 4019d63fdb69Smrg { 4020d63fdb69Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4021d63fdb69Smrg lt_setenv (name, new_value); 4022d63fdb69Smrg XFREE (new_value); 4023d63fdb69Smrg } 4024d63fdb69Smrg} 40253da084b3Smrg 40263da084b3Smrg 4027d63fdb69SmrgEOF 4028d63fdb69Smrg} 4029d63fdb69Smrg# end: func_emit_cwrapperexe_src 40303da084b3Smrg 4031d63fdb69Smrg# func_mode_link arg... 4032d63fdb69Smrgfunc_mode_link () 4033d63fdb69Smrg{ 4034d63fdb69Smrg $opt_debug 4035d63fdb69Smrg case $host in 4036d63fdb69Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4037d63fdb69Smrg # It is impossible to link a dll without this setting, and 4038d63fdb69Smrg # we shouldn't force the makefile maintainer to figure out 4039d63fdb69Smrg # which system we are compiling for in order to pass an extra 4040d63fdb69Smrg # flag for every libtool invocation. 4041d63fdb69Smrg # allow_undefined=no 40423da084b3Smrg 4043d63fdb69Smrg # FIXME: Unfortunately, there are problems with the above when trying 4044d63fdb69Smrg # to make a dll which has undefined symbols, in which case not 4045d63fdb69Smrg # even a static library is built. For now, we need to specify 4046d63fdb69Smrg # -no-undefined on the libtool link line when we can be certain 4047d63fdb69Smrg # that all symbols are satisfied, otherwise we get a static library. 4048d63fdb69Smrg allow_undefined=yes 4049d63fdb69Smrg ;; 4050d63fdb69Smrg *) 4051d63fdb69Smrg allow_undefined=yes 4052d63fdb69Smrg ;; 4053d63fdb69Smrg esac 4054d63fdb69Smrg libtool_args=$nonopt 4055d63fdb69Smrg base_compile="$nonopt $@" 4056d63fdb69Smrg compile_command=$nonopt 4057d63fdb69Smrg finalize_command=$nonopt 40583da084b3Smrg 4059d63fdb69Smrg compile_rpath= 4060d63fdb69Smrg finalize_rpath= 4061d63fdb69Smrg compile_shlibpath= 4062d63fdb69Smrg finalize_shlibpath= 4063d63fdb69Smrg convenience= 4064d63fdb69Smrg old_convenience= 4065d63fdb69Smrg deplibs= 4066d63fdb69Smrg old_deplibs= 4067d63fdb69Smrg compiler_flags= 4068d63fdb69Smrg linker_flags= 4069d63fdb69Smrg dllsearchpath= 4070d63fdb69Smrg lib_search_path=`pwd` 4071d63fdb69Smrg inst_prefix_dir= 4072d63fdb69Smrg new_inherited_linker_flags= 40733da084b3Smrg 4074d63fdb69Smrg avoid_version=no 4075d63fdb69Smrg dlfiles= 4076d63fdb69Smrg dlprefiles= 4077d63fdb69Smrg dlself=no 4078d63fdb69Smrg export_dynamic=no 4079d63fdb69Smrg export_symbols= 4080d63fdb69Smrg export_symbols_regex= 4081d63fdb69Smrg generated= 4082d63fdb69Smrg libobjs= 4083d63fdb69Smrg ltlibs= 4084d63fdb69Smrg module=no 4085d63fdb69Smrg no_install=no 4086d63fdb69Smrg objs= 4087d63fdb69Smrg non_pic_objects= 4088d63fdb69Smrg precious_files_regex= 4089d63fdb69Smrg prefer_static_libs=no 4090d63fdb69Smrg preload=no 4091d63fdb69Smrg prev= 4092d63fdb69Smrg prevarg= 4093d63fdb69Smrg release= 4094d63fdb69Smrg rpath= 4095d63fdb69Smrg xrpath= 4096d63fdb69Smrg perm_rpath= 4097d63fdb69Smrg temp_rpath= 4098d63fdb69Smrg thread_safe=no 4099d63fdb69Smrg vinfo= 4100d63fdb69Smrg vinfo_number=no 4101d63fdb69Smrg weak_libs= 4102d63fdb69Smrg single_module="${wl}-single_module" 4103d63fdb69Smrg func_infer_tag $base_compile 41043da084b3Smrg 4105d63fdb69Smrg # We need to know -static, to get the right output filenames. 4106d63fdb69Smrg for arg 4107d63fdb69Smrg do 4108d63fdb69Smrg case $arg in 4109d63fdb69Smrg -shared) 4110d63fdb69Smrg test "$build_libtool_libs" != yes && \ 4111d63fdb69Smrg func_fatal_configuration "can not build a shared library" 4112d63fdb69Smrg build_old_libs=no 4113d63fdb69Smrg break 4114d63fdb69Smrg ;; 4115d63fdb69Smrg -all-static | -static | -static-libtool-libs) 4116d63fdb69Smrg case $arg in 4117d63fdb69Smrg -all-static) 4118d63fdb69Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 4119d63fdb69Smrg func_warning "complete static linking is impossible in this configuration" 41203da084b3Smrg fi 4121d63fdb69Smrg if test -n "$link_static_flag"; then 4122d63fdb69Smrg dlopen_self=$dlopen_self_static 41233da084b3Smrg fi 4124d63fdb69Smrg prefer_static_libs=yes 41253da084b3Smrg ;; 4126d63fdb69Smrg -static) 4127d63fdb69Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4128d63fdb69Smrg dlopen_self=$dlopen_self_static 4129d63fdb69Smrg fi 4130d63fdb69Smrg prefer_static_libs=built 4131d63fdb69Smrg ;; 4132d63fdb69Smrg -static-libtool-libs) 4133d63fdb69Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4134d63fdb69Smrg dlopen_self=$dlopen_self_static 4135d63fdb69Smrg fi 4136d63fdb69Smrg prefer_static_libs=yes 41373da084b3Smrg ;; 41383da084b3Smrg esac 4139d63fdb69Smrg build_libtool_libs=no 4140d63fdb69Smrg build_old_libs=yes 4141d63fdb69Smrg break 4142d63fdb69Smrg ;; 4143d63fdb69Smrg esac 4144d63fdb69Smrg done 41453da084b3Smrg 4146d63fdb69Smrg # See if our shared archives depend on static archives. 4147d63fdb69Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 41483da084b3Smrg 4149d63fdb69Smrg # Go through the arguments, transforming them on the way. 4150d63fdb69Smrg while test "$#" -gt 0; do 4151d63fdb69Smrg arg="$1" 4152d63fdb69Smrg shift 4153d63fdb69Smrg func_quote_for_eval "$arg" 4154d63fdb69Smrg qarg=$func_quote_for_eval_unquoted_result 4155d63fdb69Smrg func_append libtool_args " $func_quote_for_eval_result" 41563da084b3Smrg 4157d63fdb69Smrg # If the previous option needs an argument, assign it. 4158d63fdb69Smrg if test -n "$prev"; then 4159d63fdb69Smrg case $prev in 4160d63fdb69Smrg output) 4161d63fdb69Smrg func_append compile_command " @OUTPUT@" 4162d63fdb69Smrg func_append finalize_command " @OUTPUT@" 4163d63fdb69Smrg ;; 4164d63fdb69Smrg esac 41653da084b3Smrg 4166d63fdb69Smrg case $prev in 4167d63fdb69Smrg dlfiles|dlprefiles) 4168d63fdb69Smrg if test "$preload" = no; then 4169d63fdb69Smrg # Add the symbol object into the linking commands. 4170d63fdb69Smrg func_append compile_command " @SYMFILE@" 4171d63fdb69Smrg func_append finalize_command " @SYMFILE@" 4172d63fdb69Smrg preload=yes 4173d63fdb69Smrg fi 4174d63fdb69Smrg case $arg in 4175d63fdb69Smrg *.la | *.lo) ;; # We handle these cases below. 4176d63fdb69Smrg force) 4177d63fdb69Smrg if test "$dlself" = no; then 4178d63fdb69Smrg dlself=needless 4179d63fdb69Smrg export_dynamic=yes 4180d63fdb69Smrg fi 4181d63fdb69Smrg prev= 4182d63fdb69Smrg continue 4183d63fdb69Smrg ;; 4184d63fdb69Smrg self) 4185d63fdb69Smrg if test "$prev" = dlprefiles; then 4186d63fdb69Smrg dlself=yes 4187d63fdb69Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 4188d63fdb69Smrg dlself=yes 4189d63fdb69Smrg else 4190d63fdb69Smrg dlself=needless 4191d63fdb69Smrg export_dynamic=yes 4192d63fdb69Smrg fi 4193d63fdb69Smrg prev= 4194d63fdb69Smrg continue 41953da084b3Smrg ;; 41963da084b3Smrg *) 4197d63fdb69Smrg if test "$prev" = dlfiles; then 4198d63fdb69Smrg dlfiles="$dlfiles $arg" 4199d63fdb69Smrg else 4200d63fdb69Smrg dlprefiles="$dlprefiles $arg" 4201d63fdb69Smrg fi 4202d63fdb69Smrg prev= 4203d63fdb69Smrg continue 42043da084b3Smrg ;; 42053da084b3Smrg esac 4206d63fdb69Smrg ;; 4207d63fdb69Smrg expsyms) 4208d63fdb69Smrg export_symbols="$arg" 4209d63fdb69Smrg test -f "$arg" \ 4210d63fdb69Smrg || func_fatal_error "symbol file \`$arg' does not exist" 4211d63fdb69Smrg prev= 4212d63fdb69Smrg continue 4213d63fdb69Smrg ;; 4214d63fdb69Smrg expsyms_regex) 4215d63fdb69Smrg export_symbols_regex="$arg" 4216d63fdb69Smrg prev= 4217d63fdb69Smrg continue 4218d63fdb69Smrg ;; 4219d63fdb69Smrg framework) 4220d63fdb69Smrg case $host in 4221d63fdb69Smrg *-*-darwin*) 4222d63fdb69Smrg case "$deplibs " in 4223d63fdb69Smrg *" $qarg.ltframework "*) ;; 4224d63fdb69Smrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 4225d63fdb69Smrg ;; 4226d63fdb69Smrg esac 4227d63fdb69Smrg ;; 4228d63fdb69Smrg esac 4229d63fdb69Smrg prev= 4230d63fdb69Smrg continue 4231d63fdb69Smrg ;; 4232d63fdb69Smrg inst_prefix) 4233d63fdb69Smrg inst_prefix_dir="$arg" 4234d63fdb69Smrg prev= 4235d63fdb69Smrg continue 4236d63fdb69Smrg ;; 4237d63fdb69Smrg objectlist) 4238d63fdb69Smrg if test -f "$arg"; then 4239d63fdb69Smrg save_arg=$arg 4240d63fdb69Smrg moreargs= 4241d63fdb69Smrg for fil in `cat "$save_arg"` 4242d63fdb69Smrg do 4243d63fdb69Smrg# moreargs="$moreargs $fil" 4244d63fdb69Smrg arg=$fil 4245d63fdb69Smrg # A libtool-controlled object. 42463da084b3Smrg 4247d63fdb69Smrg # Check to see that this really is a libtool object. 4248d63fdb69Smrg if func_lalib_unsafe_p "$arg"; then 4249d63fdb69Smrg pic_object= 4250d63fdb69Smrg non_pic_object= 42513da084b3Smrg 4252d63fdb69Smrg # Read the .lo file 4253d63fdb69Smrg func_source "$arg" 42543da084b3Smrg 4255d63fdb69Smrg if test -z "$pic_object" || 4256d63fdb69Smrg test -z "$non_pic_object" || 4257d63fdb69Smrg test "$pic_object" = none && 4258d63fdb69Smrg test "$non_pic_object" = none; then 4259d63fdb69Smrg func_fatal_error "cannot find name of object for \`$arg'" 4260d63fdb69Smrg fi 42613da084b3Smrg 4262d63fdb69Smrg # Extract subdirectory from the argument. 4263d63fdb69Smrg func_dirname "$arg" "/" "" 4264d63fdb69Smrg xdir="$func_dirname_result" 42653da084b3Smrg 4266d63fdb69Smrg if test "$pic_object" != none; then 4267d63fdb69Smrg # Prepend the subdirectory the object is found in. 4268d63fdb69Smrg pic_object="$xdir$pic_object" 42693da084b3Smrg 4270d63fdb69Smrg if test "$prev" = dlfiles; then 4271d63fdb69Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4272d63fdb69Smrg dlfiles="$dlfiles $pic_object" 4273d63fdb69Smrg prev= 4274d63fdb69Smrg continue 4275d63fdb69Smrg else 4276d63fdb69Smrg # If libtool objects are unsupported, then we need to preload. 4277d63fdb69Smrg prev=dlprefiles 4278d63fdb69Smrg fi 4279d63fdb69Smrg fi 42803da084b3Smrg 4281d63fdb69Smrg # CHECK ME: I think I busted this. -Ossama 4282d63fdb69Smrg if test "$prev" = dlprefiles; then 4283d63fdb69Smrg # Preload the old-style object. 4284d63fdb69Smrg dlprefiles="$dlprefiles $pic_object" 4285d63fdb69Smrg prev= 4286d63fdb69Smrg fi 42873da084b3Smrg 4288d63fdb69Smrg # A PIC object. 4289d63fdb69Smrg func_append libobjs " $pic_object" 4290d63fdb69Smrg arg="$pic_object" 4291d63fdb69Smrg fi 42923da084b3Smrg 4293d63fdb69Smrg # Non-PIC object. 4294d63fdb69Smrg if test "$non_pic_object" != none; then 4295d63fdb69Smrg # Prepend the subdirectory the object is found in. 4296d63fdb69Smrg non_pic_object="$xdir$non_pic_object" 42973da084b3Smrg 4298d63fdb69Smrg # A standard non-PIC object 4299d63fdb69Smrg func_append non_pic_objects " $non_pic_object" 4300d63fdb69Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 4301d63fdb69Smrg arg="$non_pic_object" 4302d63fdb69Smrg fi 4303d63fdb69Smrg else 4304d63fdb69Smrg # If the PIC object exists, use it instead. 4305d63fdb69Smrg # $xdir was prepended to $pic_object above. 4306d63fdb69Smrg non_pic_object="$pic_object" 4307d63fdb69Smrg func_append non_pic_objects " $non_pic_object" 4308d63fdb69Smrg fi 4309d63fdb69Smrg else 4310d63fdb69Smrg # Only an error if not doing a dry-run. 4311d63fdb69Smrg if $opt_dry_run; then 4312d63fdb69Smrg # Extract subdirectory from the argument. 4313d63fdb69Smrg func_dirname "$arg" "/" "" 4314d63fdb69Smrg xdir="$func_dirname_result" 4315d63fdb69Smrg 4316d63fdb69Smrg func_lo2o "$arg" 4317d63fdb69Smrg pic_object=$xdir$objdir/$func_lo2o_result 4318d63fdb69Smrg non_pic_object=$xdir$func_lo2o_result 4319d63fdb69Smrg func_append libobjs " $pic_object" 4320d63fdb69Smrg func_append non_pic_objects " $non_pic_object" 4321d63fdb69Smrg else 4322d63fdb69Smrg func_fatal_error "\`$arg' is not a valid libtool object" 4323d63fdb69Smrg fi 4324d63fdb69Smrg fi 4325d63fdb69Smrg done 4326d63fdb69Smrg else 4327d63fdb69Smrg func_fatal_error "link input file \`$arg' does not exist" 4328d63fdb69Smrg fi 4329d63fdb69Smrg arg=$save_arg 4330d63fdb69Smrg prev= 4331d63fdb69Smrg continue 4332d63fdb69Smrg ;; 4333d63fdb69Smrg precious_regex) 4334d63fdb69Smrg precious_files_regex="$arg" 4335d63fdb69Smrg prev= 4336d63fdb69Smrg continue 4337d63fdb69Smrg ;; 4338d63fdb69Smrg release) 4339d63fdb69Smrg release="-$arg" 4340d63fdb69Smrg prev= 4341d63fdb69Smrg continue 4342d63fdb69Smrg ;; 4343d63fdb69Smrg rpath | xrpath) 4344d63fdb69Smrg # We need an absolute path. 4345d63fdb69Smrg case $arg in 4346d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4347d63fdb69Smrg *) 4348d63fdb69Smrg func_fatal_error "only absolute run-paths are allowed" 4349d63fdb69Smrg ;; 4350d63fdb69Smrg esac 4351d63fdb69Smrg if test "$prev" = rpath; then 4352d63fdb69Smrg case "$rpath " in 4353d63fdb69Smrg *" $arg "*) ;; 4354d63fdb69Smrg *) rpath="$rpath $arg" ;; 4355d63fdb69Smrg esac 4356d63fdb69Smrg else 4357d63fdb69Smrg case "$xrpath " in 4358d63fdb69Smrg *" $arg "*) ;; 4359d63fdb69Smrg *) xrpath="$xrpath $arg" ;; 4360d63fdb69Smrg esac 4361d63fdb69Smrg fi 4362d63fdb69Smrg prev= 4363d63fdb69Smrg continue 4364d63fdb69Smrg ;; 4365d63fdb69Smrg shrext) 4366d63fdb69Smrg shrext_cmds="$arg" 4367d63fdb69Smrg prev= 4368d63fdb69Smrg continue 4369d63fdb69Smrg ;; 4370d63fdb69Smrg weak) 4371d63fdb69Smrg weak_libs="$weak_libs $arg" 4372d63fdb69Smrg prev= 4373d63fdb69Smrg continue 4374d63fdb69Smrg ;; 4375d63fdb69Smrg xcclinker) 4376d63fdb69Smrg linker_flags="$linker_flags $qarg" 4377d63fdb69Smrg compiler_flags="$compiler_flags $qarg" 4378d63fdb69Smrg prev= 4379d63fdb69Smrg func_append compile_command " $qarg" 4380d63fdb69Smrg func_append finalize_command " $qarg" 4381d63fdb69Smrg continue 4382d63fdb69Smrg ;; 4383d63fdb69Smrg xcompiler) 4384d63fdb69Smrg compiler_flags="$compiler_flags $qarg" 4385d63fdb69Smrg prev= 4386d63fdb69Smrg func_append compile_command " $qarg" 4387d63fdb69Smrg func_append finalize_command " $qarg" 4388d63fdb69Smrg continue 4389d63fdb69Smrg ;; 4390d63fdb69Smrg xlinker) 4391d63fdb69Smrg linker_flags="$linker_flags $qarg" 4392d63fdb69Smrg compiler_flags="$compiler_flags $wl$qarg" 4393d63fdb69Smrg prev= 4394d63fdb69Smrg func_append compile_command " $wl$qarg" 4395d63fdb69Smrg func_append finalize_command " $wl$qarg" 4396d63fdb69Smrg continue 4397d63fdb69Smrg ;; 4398d63fdb69Smrg *) 4399d63fdb69Smrg eval "$prev=\"\$arg\"" 4400d63fdb69Smrg prev= 4401d63fdb69Smrg continue 4402d63fdb69Smrg ;; 44033da084b3Smrg esac 4404d63fdb69Smrg fi # test -n "$prev" 44053da084b3Smrg 4406d63fdb69Smrg prevarg="$arg" 44073da084b3Smrg 4408d63fdb69Smrg case $arg in 4409d63fdb69Smrg -all-static) 4410d63fdb69Smrg if test -n "$link_static_flag"; then 4411d63fdb69Smrg # See comment for -static flag below, for more details. 4412d63fdb69Smrg func_append compile_command " $link_static_flag" 4413d63fdb69Smrg func_append finalize_command " $link_static_flag" 4414d63fdb69Smrg fi 4415d63fdb69Smrg continue 4416d63fdb69Smrg ;; 44173da084b3Smrg 4418d63fdb69Smrg -allow-undefined) 4419d63fdb69Smrg # FIXME: remove this flag sometime in the future. 4420d63fdb69Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 4421d63fdb69Smrg ;; 44223da084b3Smrg 4423d63fdb69Smrg -avoid-version) 4424d63fdb69Smrg avoid_version=yes 4425d63fdb69Smrg continue 4426d63fdb69Smrg ;; 44273da084b3Smrg 4428d63fdb69Smrg -dlopen) 4429d63fdb69Smrg prev=dlfiles 4430d63fdb69Smrg continue 4431d63fdb69Smrg ;; 44323da084b3Smrg 4433d63fdb69Smrg -dlpreopen) 4434d63fdb69Smrg prev=dlprefiles 4435d63fdb69Smrg continue 4436d63fdb69Smrg ;; 44373da084b3Smrg 4438d63fdb69Smrg -export-dynamic) 4439d63fdb69Smrg export_dynamic=yes 4440d63fdb69Smrg continue 4441d63fdb69Smrg ;; 44423da084b3Smrg 4443d63fdb69Smrg -export-symbols | -export-symbols-regex) 4444d63fdb69Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 4445d63fdb69Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 4446d63fdb69Smrg fi 4447d63fdb69Smrg if test "X$arg" = "X-export-symbols"; then 4448d63fdb69Smrg prev=expsyms 4449d63fdb69Smrg else 4450d63fdb69Smrg prev=expsyms_regex 4451d63fdb69Smrg fi 4452d63fdb69Smrg continue 4453d63fdb69Smrg ;; 44543da084b3Smrg 4455d63fdb69Smrg -framework) 4456d63fdb69Smrg prev=framework 4457d63fdb69Smrg continue 4458d63fdb69Smrg ;; 44593da084b3Smrg 4460d63fdb69Smrg -inst-prefix-dir) 4461d63fdb69Smrg prev=inst_prefix 4462d63fdb69Smrg continue 4463d63fdb69Smrg ;; 44643da084b3Smrg 4465d63fdb69Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 4466d63fdb69Smrg # so, if we see these flags be careful not to treat them like -L 4467d63fdb69Smrg -L[A-Z][A-Z]*:*) 4468d63fdb69Smrg case $with_gcc/$host in 4469d63fdb69Smrg no/*-*-irix* | /*-*-irix*) 4470d63fdb69Smrg func_append compile_command " $arg" 4471d63fdb69Smrg func_append finalize_command " $arg" 4472d63fdb69Smrg ;; 4473d63fdb69Smrg esac 4474d63fdb69Smrg continue 4475d63fdb69Smrg ;; 44763da084b3Smrg 4477d63fdb69Smrg -L*) 4478d63fdb69Smrg func_stripname '-L' '' "$arg" 4479d63fdb69Smrg dir=$func_stripname_result 4480d63fdb69Smrg if test -z "$dir"; then 4481d63fdb69Smrg if test "$#" -gt 0; then 4482d63fdb69Smrg func_fatal_error "require no space between \`-L' and \`$1'" 4483d63fdb69Smrg else 4484d63fdb69Smrg func_fatal_error "need path for \`-L' option" 4485d63fdb69Smrg fi 4486d63fdb69Smrg fi 4487d63fdb69Smrg # We need an absolute path. 4488d63fdb69Smrg case $dir in 4489d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4490d63fdb69Smrg *) 4491d63fdb69Smrg absdir=`cd "$dir" && pwd` 4492d63fdb69Smrg test -z "$absdir" && \ 4493d63fdb69Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 4494d63fdb69Smrg dir="$absdir" 4495d63fdb69Smrg ;; 4496d63fdb69Smrg esac 4497d63fdb69Smrg case "$deplibs " in 4498d63fdb69Smrg *" -L$dir "*) ;; 4499d63fdb69Smrg *) 4500d63fdb69Smrg deplibs="$deplibs -L$dir" 4501d63fdb69Smrg lib_search_path="$lib_search_path $dir" 4502d63fdb69Smrg ;; 4503d63fdb69Smrg esac 4504d63fdb69Smrg case $host in 4505d63fdb69Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4506d63fdb69Smrg testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` 4507d63fdb69Smrg case :$dllsearchpath: in 4508d63fdb69Smrg *":$dir:"*) ;; 4509d63fdb69Smrg ::) dllsearchpath=$dir;; 4510d63fdb69Smrg *) dllsearchpath="$dllsearchpath:$dir";; 4511d63fdb69Smrg esac 4512d63fdb69Smrg case :$dllsearchpath: in 4513d63fdb69Smrg *":$testbindir:"*) ;; 4514d63fdb69Smrg ::) dllsearchpath=$testbindir;; 4515d63fdb69Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 4516d63fdb69Smrg esac 4517d63fdb69Smrg ;; 4518d63fdb69Smrg esac 4519d63fdb69Smrg continue 4520d63fdb69Smrg ;; 45213da084b3Smrg 4522d63fdb69Smrg -l*) 4523d63fdb69Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 4524d63fdb69Smrg case $host in 4525d63fdb69Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) 4526d63fdb69Smrg # These systems don't actually have a C or math library (as such) 4527d63fdb69Smrg continue 4528d63fdb69Smrg ;; 4529d63fdb69Smrg *-*-os2*) 4530d63fdb69Smrg # These systems don't actually have a C library (as such) 4531d63fdb69Smrg test "X$arg" = "X-lc" && continue 4532d63fdb69Smrg ;; 4533d63fdb69Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4534d63fdb69Smrg # Do not include libc due to us having libc/libc_r. 4535d63fdb69Smrg test "X$arg" = "X-lc" && continue 4536d63fdb69Smrg ;; 4537d63fdb69Smrg *-*-rhapsody* | *-*-darwin1.[012]) 4538d63fdb69Smrg # Rhapsody C and math libraries are in the System framework 4539d63fdb69Smrg deplibs="$deplibs System.ltframework" 4540d63fdb69Smrg continue 4541d63fdb69Smrg ;; 4542d63fdb69Smrg *-*-sco3.2v5* | *-*-sco5v6*) 4543d63fdb69Smrg # Causes problems with __ctype 4544d63fdb69Smrg test "X$arg" = "X-lc" && continue 4545d63fdb69Smrg ;; 4546d63fdb69Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 4547d63fdb69Smrg # Compiler inserts libc in the correct place for threads to work 4548d63fdb69Smrg test "X$arg" = "X-lc" && continue 4549d63fdb69Smrg ;; 4550d63fdb69Smrg esac 4551d63fdb69Smrg elif test "X$arg" = "X-lc_r"; then 4552d63fdb69Smrg case $host in 4553d63fdb69Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4554d63fdb69Smrg # Do not include libc_r directly, use -pthread flag. 4555d63fdb69Smrg continue 4556d63fdb69Smrg ;; 4557d63fdb69Smrg esac 4558d63fdb69Smrg fi 4559d63fdb69Smrg deplibs="$deplibs $arg" 4560d63fdb69Smrg continue 4561d63fdb69Smrg ;; 45623da084b3Smrg 4563d63fdb69Smrg -module) 4564d63fdb69Smrg module=yes 4565d63fdb69Smrg continue 4566d63fdb69Smrg ;; 45673da084b3Smrg 4568d63fdb69Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 4569d63fdb69Smrg # classes, name mangling, and exception handling. 4570d63fdb69Smrg # Darwin uses the -arch flag to determine output architecture. 4571d63fdb69Smrg -model|-arch|-isysroot) 4572d63fdb69Smrg compiler_flags="$compiler_flags $arg" 4573d63fdb69Smrg func_append compile_command " $arg" 4574d63fdb69Smrg func_append finalize_command " $arg" 4575d63fdb69Smrg prev=xcompiler 4576d63fdb69Smrg continue 4577d63fdb69Smrg ;; 45783da084b3Smrg 4579d63fdb69Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 4580d63fdb69Smrg compiler_flags="$compiler_flags $arg" 4581d63fdb69Smrg func_append compile_command " $arg" 4582d63fdb69Smrg func_append finalize_command " $arg" 4583d63fdb69Smrg case "$new_inherited_linker_flags " in 4584d63fdb69Smrg *" $arg "*) ;; 4585d63fdb69Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 4586d63fdb69Smrg esac 4587d63fdb69Smrg continue 4588d63fdb69Smrg ;; 45893da084b3Smrg 4590d63fdb69Smrg -multi_module) 4591d63fdb69Smrg single_module="${wl}-multi_module" 4592d63fdb69Smrg continue 4593d63fdb69Smrg ;; 45943da084b3Smrg 4595d63fdb69Smrg -no-fast-install) 4596d63fdb69Smrg fast_install=no 4597d63fdb69Smrg continue 4598d63fdb69Smrg ;; 45993da084b3Smrg 4600d63fdb69Smrg -no-install) 4601d63fdb69Smrg case $host in 4602d63fdb69Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 4603d63fdb69Smrg # The PATH hackery in wrapper scripts is required on Windows 4604d63fdb69Smrg # and Darwin in order for the loader to find any dlls it needs. 4605d63fdb69Smrg func_warning "\`-no-install' is ignored for $host" 4606d63fdb69Smrg func_warning "assuming \`-no-fast-install' instead" 4607d63fdb69Smrg fast_install=no 4608d63fdb69Smrg ;; 4609d63fdb69Smrg *) no_install=yes ;; 4610d63fdb69Smrg esac 4611d63fdb69Smrg continue 4612d63fdb69Smrg ;; 46133da084b3Smrg 4614d63fdb69Smrg -no-undefined) 4615d63fdb69Smrg allow_undefined=no 4616d63fdb69Smrg continue 4617d63fdb69Smrg ;; 46183da084b3Smrg 4619d63fdb69Smrg -objectlist) 4620d63fdb69Smrg prev=objectlist 4621d63fdb69Smrg continue 4622d63fdb69Smrg ;; 46233da084b3Smrg 4624d63fdb69Smrg -o) prev=output ;; 46253da084b3Smrg 4626d63fdb69Smrg -precious-files-regex) 4627d63fdb69Smrg prev=precious_regex 4628d63fdb69Smrg continue 4629d63fdb69Smrg ;; 46303da084b3Smrg 4631d63fdb69Smrg -release) 4632d63fdb69Smrg prev=release 4633d63fdb69Smrg continue 4634d63fdb69Smrg ;; 46353da084b3Smrg 4636d63fdb69Smrg -rpath) 4637d63fdb69Smrg prev=rpath 4638d63fdb69Smrg continue 4639d63fdb69Smrg ;; 46403da084b3Smrg 4641d63fdb69Smrg -R) 4642d63fdb69Smrg prev=xrpath 4643d63fdb69Smrg continue 4644d63fdb69Smrg ;; 46453da084b3Smrg 4646d63fdb69Smrg -R*) 4647d63fdb69Smrg func_stripname '-R' '' "$arg" 4648d63fdb69Smrg dir=$func_stripname_result 4649d63fdb69Smrg # We need an absolute path. 4650d63fdb69Smrg case $dir in 4651d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4652d63fdb69Smrg *) 4653d63fdb69Smrg func_fatal_error "only absolute run-paths are allowed" 4654d63fdb69Smrg ;; 4655d63fdb69Smrg esac 4656d63fdb69Smrg case "$xrpath " in 4657d63fdb69Smrg *" $dir "*) ;; 4658d63fdb69Smrg *) xrpath="$xrpath $dir" ;; 4659d63fdb69Smrg esac 4660d63fdb69Smrg continue 4661d63fdb69Smrg ;; 46623da084b3Smrg 4663d63fdb69Smrg -shared) 4664d63fdb69Smrg # The effects of -shared are defined in a previous loop. 4665d63fdb69Smrg continue 4666d63fdb69Smrg ;; 46673da084b3Smrg 4668d63fdb69Smrg -shrext) 4669d63fdb69Smrg prev=shrext 4670d63fdb69Smrg continue 4671d63fdb69Smrg ;; 46723da084b3Smrg 4673d63fdb69Smrg -static | -static-libtool-libs) 4674d63fdb69Smrg # The effects of -static are defined in a previous loop. 4675d63fdb69Smrg # We used to do the same as -all-static on platforms that 4676d63fdb69Smrg # didn't have a PIC flag, but the assumption that the effects 4677d63fdb69Smrg # would be equivalent was wrong. It would break on at least 4678d63fdb69Smrg # Digital Unix and AIX. 4679d63fdb69Smrg continue 4680d63fdb69Smrg ;; 46813da084b3Smrg 4682d63fdb69Smrg -thread-safe) 4683d63fdb69Smrg thread_safe=yes 4684d63fdb69Smrg continue 4685d63fdb69Smrg ;; 46863da084b3Smrg 4687d63fdb69Smrg -version-info) 4688d63fdb69Smrg prev=vinfo 4689d63fdb69Smrg continue 4690d63fdb69Smrg ;; 46913da084b3Smrg 4692d63fdb69Smrg -version-number) 4693d63fdb69Smrg prev=vinfo 4694d63fdb69Smrg vinfo_number=yes 4695d63fdb69Smrg continue 4696d63fdb69Smrg ;; 46973da084b3Smrg 4698d63fdb69Smrg -weak) 4699d63fdb69Smrg prev=weak 4700d63fdb69Smrg continue 4701d63fdb69Smrg ;; 47023da084b3Smrg 4703d63fdb69Smrg -Wc,*) 4704d63fdb69Smrg func_stripname '-Wc,' '' "$arg" 4705d63fdb69Smrg args=$func_stripname_result 4706d63fdb69Smrg arg= 4707d63fdb69Smrg save_ifs="$IFS"; IFS=',' 4708d63fdb69Smrg for flag in $args; do 4709d63fdb69Smrg IFS="$save_ifs" 4710d63fdb69Smrg func_quote_for_eval "$flag" 4711d63fdb69Smrg arg="$arg $wl$func_quote_for_eval_result" 4712d63fdb69Smrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 4713d63fdb69Smrg done 4714d63fdb69Smrg IFS="$save_ifs" 4715d63fdb69Smrg func_stripname ' ' '' "$arg" 4716d63fdb69Smrg arg=$func_stripname_result 4717d63fdb69Smrg ;; 47183da084b3Smrg 4719d63fdb69Smrg -Wl,*) 4720d63fdb69Smrg func_stripname '-Wl,' '' "$arg" 4721d63fdb69Smrg args=$func_stripname_result 4722d63fdb69Smrg arg= 4723d63fdb69Smrg save_ifs="$IFS"; IFS=',' 4724d63fdb69Smrg for flag in $args; do 4725d63fdb69Smrg IFS="$save_ifs" 4726d63fdb69Smrg func_quote_for_eval "$flag" 4727d63fdb69Smrg arg="$arg $wl$func_quote_for_eval_result" 4728d63fdb69Smrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 4729d63fdb69Smrg linker_flags="$linker_flags $func_quote_for_eval_result" 4730d63fdb69Smrg done 4731d63fdb69Smrg IFS="$save_ifs" 4732d63fdb69Smrg func_stripname ' ' '' "$arg" 4733d63fdb69Smrg arg=$func_stripname_result 4734d63fdb69Smrg ;; 47353da084b3Smrg 4736d63fdb69Smrg -Xcompiler) 4737d63fdb69Smrg prev=xcompiler 4738d63fdb69Smrg continue 4739d63fdb69Smrg ;; 47403da084b3Smrg 4741d63fdb69Smrg -Xlinker) 4742d63fdb69Smrg prev=xlinker 4743d63fdb69Smrg continue 4744d63fdb69Smrg ;; 47453da084b3Smrg 4746d63fdb69Smrg -XCClinker) 4747d63fdb69Smrg prev=xcclinker 4748d63fdb69Smrg continue 4749d63fdb69Smrg ;; 47503da084b3Smrg 4751d63fdb69Smrg # -msg_* for osf cc 4752d63fdb69Smrg -msg_*) 4753d63fdb69Smrg func_quote_for_eval "$arg" 4754d63fdb69Smrg arg="$func_quote_for_eval_result" 4755d63fdb69Smrg ;; 47563da084b3Smrg 4757d63fdb69Smrg # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 4758d63fdb69Smrg # -r[0-9][0-9]* specifies the processor on the SGI compiler 4759d63fdb69Smrg # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 4760d63fdb69Smrg # +DA*, +DD* enable 64-bit mode on the HP compiler 4761d63fdb69Smrg # -q* pass through compiler args for the IBM compiler 4762d63fdb69Smrg # -m*, -t[45]*, -txscale* pass through architecture-specific 4763d63fdb69Smrg # compiler args for GCC 4764d63fdb69Smrg # -F/path gives path to uninstalled frameworks, gcc on darwin 4765d63fdb69Smrg # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 4766d63fdb69Smrg # @file GCC response files 4767d63fdb69Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 4768d63fdb69Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 4769d63fdb69Smrg func_quote_for_eval "$arg" 4770d63fdb69Smrg arg="$func_quote_for_eval_result" 4771d63fdb69Smrg func_append compile_command " $arg" 4772d63fdb69Smrg func_append finalize_command " $arg" 4773d63fdb69Smrg compiler_flags="$compiler_flags $arg" 4774d63fdb69Smrg continue 4775d63fdb69Smrg ;; 47763da084b3Smrg 4777d63fdb69Smrg # Some other compiler flag. 4778d63fdb69Smrg -* | +*) 4779d63fdb69Smrg func_quote_for_eval "$arg" 4780d63fdb69Smrg arg="$func_quote_for_eval_result" 4781d63fdb69Smrg ;; 47823da084b3Smrg 4783d63fdb69Smrg *.$objext) 4784d63fdb69Smrg # A standard object. 4785d63fdb69Smrg objs="$objs $arg" 4786d63fdb69Smrg ;; 47873da084b3Smrg 4788d63fdb69Smrg *.lo) 4789d63fdb69Smrg # A libtool-controlled object. 47903da084b3Smrg 4791d63fdb69Smrg # Check to see that this really is a libtool object. 4792d63fdb69Smrg if func_lalib_unsafe_p "$arg"; then 4793d63fdb69Smrg pic_object= 4794d63fdb69Smrg non_pic_object= 4795d63fdb69Smrg 4796d63fdb69Smrg # Read the .lo file 4797d63fdb69Smrg func_source "$arg" 4798d63fdb69Smrg 4799d63fdb69Smrg if test -z "$pic_object" || 4800d63fdb69Smrg test -z "$non_pic_object" || 4801d63fdb69Smrg test "$pic_object" = none && 4802d63fdb69Smrg test "$non_pic_object" = none; then 4803d63fdb69Smrg func_fatal_error "cannot find name of object for \`$arg'" 4804d63fdb69Smrg fi 4805d63fdb69Smrg 4806d63fdb69Smrg # Extract subdirectory from the argument. 4807d63fdb69Smrg func_dirname "$arg" "/" "" 4808d63fdb69Smrg xdir="$func_dirname_result" 4809d63fdb69Smrg 4810d63fdb69Smrg if test "$pic_object" != none; then 4811d63fdb69Smrg # Prepend the subdirectory the object is found in. 4812d63fdb69Smrg pic_object="$xdir$pic_object" 4813d63fdb69Smrg 4814d63fdb69Smrg if test "$prev" = dlfiles; then 4815d63fdb69Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4816d63fdb69Smrg dlfiles="$dlfiles $pic_object" 4817d63fdb69Smrg prev= 4818d63fdb69Smrg continue 4819d63fdb69Smrg else 4820d63fdb69Smrg # If libtool objects are unsupported, then we need to preload. 4821d63fdb69Smrg prev=dlprefiles 4822d63fdb69Smrg fi 4823d63fdb69Smrg fi 4824d63fdb69Smrg 4825d63fdb69Smrg # CHECK ME: I think I busted this. -Ossama 4826d63fdb69Smrg if test "$prev" = dlprefiles; then 4827d63fdb69Smrg # Preload the old-style object. 4828d63fdb69Smrg dlprefiles="$dlprefiles $pic_object" 4829d63fdb69Smrg prev= 4830d63fdb69Smrg fi 4831d63fdb69Smrg 4832d63fdb69Smrg # A PIC object. 4833d63fdb69Smrg func_append libobjs " $pic_object" 4834d63fdb69Smrg arg="$pic_object" 4835d63fdb69Smrg fi 4836d63fdb69Smrg 4837d63fdb69Smrg # Non-PIC object. 4838d63fdb69Smrg if test "$non_pic_object" != none; then 4839d63fdb69Smrg # Prepend the subdirectory the object is found in. 4840d63fdb69Smrg non_pic_object="$xdir$non_pic_object" 4841d63fdb69Smrg 4842d63fdb69Smrg # A standard non-PIC object 4843d63fdb69Smrg func_append non_pic_objects " $non_pic_object" 4844d63fdb69Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 4845d63fdb69Smrg arg="$non_pic_object" 4846d63fdb69Smrg fi 4847d63fdb69Smrg else 4848d63fdb69Smrg # If the PIC object exists, use it instead. 4849d63fdb69Smrg # $xdir was prepended to $pic_object above. 4850d63fdb69Smrg non_pic_object="$pic_object" 4851d63fdb69Smrg func_append non_pic_objects " $non_pic_object" 4852d63fdb69Smrg fi 4853d63fdb69Smrg else 4854d63fdb69Smrg # Only an error if not doing a dry-run. 4855d63fdb69Smrg if $opt_dry_run; then 4856d63fdb69Smrg # Extract subdirectory from the argument. 4857d63fdb69Smrg func_dirname "$arg" "/" "" 4858d63fdb69Smrg xdir="$func_dirname_result" 4859d63fdb69Smrg 4860d63fdb69Smrg func_lo2o "$arg" 4861d63fdb69Smrg pic_object=$xdir$objdir/$func_lo2o_result 4862d63fdb69Smrg non_pic_object=$xdir$func_lo2o_result 4863d63fdb69Smrg func_append libobjs " $pic_object" 4864d63fdb69Smrg func_append non_pic_objects " $non_pic_object" 4865d63fdb69Smrg else 4866d63fdb69Smrg func_fatal_error "\`$arg' is not a valid libtool object" 4867d63fdb69Smrg fi 4868d63fdb69Smrg fi 4869d63fdb69Smrg ;; 4870d63fdb69Smrg 4871d63fdb69Smrg *.$libext) 4872d63fdb69Smrg # An archive. 4873d63fdb69Smrg deplibs="$deplibs $arg" 4874d63fdb69Smrg old_deplibs="$old_deplibs $arg" 4875d63fdb69Smrg continue 4876d63fdb69Smrg ;; 4877d63fdb69Smrg 4878d63fdb69Smrg *.la) 4879d63fdb69Smrg # A libtool-controlled library. 4880d63fdb69Smrg 4881d63fdb69Smrg if test "$prev" = dlfiles; then 4882d63fdb69Smrg # This library was specified with -dlopen. 4883d63fdb69Smrg dlfiles="$dlfiles $arg" 4884d63fdb69Smrg prev= 4885d63fdb69Smrg elif test "$prev" = dlprefiles; then 4886d63fdb69Smrg # The library was specified with -dlpreopen. 4887d63fdb69Smrg dlprefiles="$dlprefiles $arg" 4888d63fdb69Smrg prev= 4889d63fdb69Smrg else 4890d63fdb69Smrg deplibs="$deplibs $arg" 4891d63fdb69Smrg fi 4892d63fdb69Smrg continue 4893d63fdb69Smrg ;; 4894d63fdb69Smrg 4895d63fdb69Smrg # Some other compiler argument. 4896d63fdb69Smrg *) 4897d63fdb69Smrg # Unknown arguments in both finalize_command and compile_command need 4898d63fdb69Smrg # to be aesthetically quoted because they are evaled later. 4899d63fdb69Smrg func_quote_for_eval "$arg" 4900d63fdb69Smrg arg="$func_quote_for_eval_result" 4901d63fdb69Smrg ;; 4902d63fdb69Smrg esac # arg 4903d63fdb69Smrg 4904d63fdb69Smrg # Now actually substitute the argument into the commands. 4905d63fdb69Smrg if test -n "$arg"; then 4906d63fdb69Smrg func_append compile_command " $arg" 4907d63fdb69Smrg func_append finalize_command " $arg" 4908d63fdb69Smrg fi 4909d63fdb69Smrg done # argument parsing loop 4910d63fdb69Smrg 4911d63fdb69Smrg test -n "$prev" && \ 4912d63fdb69Smrg func_fatal_help "the \`$prevarg' option requires an argument" 4913d63fdb69Smrg 4914d63fdb69Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 4915d63fdb69Smrg eval arg=\"$export_dynamic_flag_spec\" 4916d63fdb69Smrg func_append compile_command " $arg" 4917d63fdb69Smrg func_append finalize_command " $arg" 4918d63fdb69Smrg fi 4919d63fdb69Smrg 4920d63fdb69Smrg oldlibs= 4921d63fdb69Smrg # calculate the name of the file, without its directory 4922d63fdb69Smrg func_basename "$output" 4923d63fdb69Smrg outputname="$func_basename_result" 4924d63fdb69Smrg libobjs_save="$libobjs" 4925d63fdb69Smrg 4926d63fdb69Smrg if test -n "$shlibpath_var"; then 4927d63fdb69Smrg # get the directories listed in $shlibpath_var 4928d63fdb69Smrg eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 49293da084b3Smrg else 4930d63fdb69Smrg shlib_search_path= 49313da084b3Smrg fi 4932d63fdb69Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 4933d63fdb69Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 49343da084b3Smrg 4935d63fdb69Smrg func_dirname "$output" "/" "" 4936d63fdb69Smrg output_objdir="$func_dirname_result$objdir" 4937d63fdb69Smrg # Create the object directory. 4938d63fdb69Smrg func_mkdir_p "$output_objdir" 49393da084b3Smrg 4940d63fdb69Smrg # Determine the type of output 4941d63fdb69Smrg case $output in 4942d63fdb69Smrg "") 4943d63fdb69Smrg func_fatal_help "you must specify an output file" 4944d63fdb69Smrg ;; 4945d63fdb69Smrg *.$libext) linkmode=oldlib ;; 4946d63fdb69Smrg *.lo | *.$objext) linkmode=obj ;; 4947d63fdb69Smrg *.la) linkmode=lib ;; 4948d63fdb69Smrg *) linkmode=prog ;; # Anything else should be a program. 4949d63fdb69Smrg esac 4950d63fdb69Smrg 4951d63fdb69Smrg specialdeplibs= 4952d63fdb69Smrg 4953d63fdb69Smrg libs= 4954d63fdb69Smrg # Find all interdependent deplibs by searching for libraries 4955d63fdb69Smrg # that are linked more than once (e.g. -la -lb -la) 4956d63fdb69Smrg for deplib in $deplibs; do 4957d63fdb69Smrg if $opt_duplicate_deps ; then 4958d63fdb69Smrg case "$libs " in 4959d63fdb69Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 4960d63fdb69Smrg esac 4961d63fdb69Smrg fi 4962d63fdb69Smrg libs="$libs $deplib" 4963d63fdb69Smrg done 4964d63fdb69Smrg 4965d63fdb69Smrg if test "$linkmode" = lib; then 4966d63fdb69Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 4967d63fdb69Smrg 4968d63fdb69Smrg # Compute libraries that are listed more than once in $predeps 4969d63fdb69Smrg # $postdeps and mark them as special (i.e., whose duplicates are 4970d63fdb69Smrg # not to be eliminated). 4971d63fdb69Smrg pre_post_deps= 4972d63fdb69Smrg if $opt_duplicate_compiler_generated_deps; then 4973d63fdb69Smrg for pre_post_dep in $predeps $postdeps; do 4974d63fdb69Smrg case "$pre_post_deps " in 4975d63fdb69Smrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 4976d63fdb69Smrg esac 4977d63fdb69Smrg pre_post_deps="$pre_post_deps $pre_post_dep" 4978d63fdb69Smrg done 4979d63fdb69Smrg fi 4980d63fdb69Smrg pre_post_deps= 4981d63fdb69Smrg fi 4982d63fdb69Smrg 4983d63fdb69Smrg deplibs= 4984d63fdb69Smrg newdependency_libs= 4985d63fdb69Smrg newlib_search_path= 4986d63fdb69Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 4987d63fdb69Smrg notinst_deplibs= # not-installed libtool libraries 4988d63fdb69Smrg notinst_path= # paths that contain not-installed libtool libraries 4989d63fdb69Smrg 4990d63fdb69Smrg case $linkmode in 4991d63fdb69Smrg lib) 4992d63fdb69Smrg passes="conv dlpreopen link" 4993d63fdb69Smrg for file in $dlfiles $dlprefiles; do 4994d63fdb69Smrg case $file in 4995d63fdb69Smrg *.la) ;; 4996d63fdb69Smrg *) 4997d63fdb69Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 4998d63fdb69Smrg ;; 4999d63fdb69Smrg esac 5000d63fdb69Smrg done 5001d63fdb69Smrg ;; 5002d63fdb69Smrg prog) 5003d63fdb69Smrg compile_deplibs= 5004d63fdb69Smrg finalize_deplibs= 5005d63fdb69Smrg alldeplibs=no 5006d63fdb69Smrg newdlfiles= 5007d63fdb69Smrg newdlprefiles= 5008d63fdb69Smrg passes="conv scan dlopen dlpreopen link" 5009d63fdb69Smrg ;; 5010d63fdb69Smrg *) passes="conv" 5011d63fdb69Smrg ;; 5012d63fdb69Smrg esac 5013d63fdb69Smrg 5014d63fdb69Smrg for pass in $passes; do 5015d63fdb69Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 5016d63fdb69Smrg # so that -L comes before libs that need it for instance... 5017d63fdb69Smrg if test "$linkmode,$pass" = "lib,link"; then 5018d63fdb69Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 5019d63fdb69Smrg ## order, and fix it there properly 5020d63fdb69Smrg tmp_deplibs= 5021d63fdb69Smrg for deplib in $deplibs; do 5022d63fdb69Smrg tmp_deplibs="$deplib $tmp_deplibs" 5023d63fdb69Smrg done 5024d63fdb69Smrg deplibs="$tmp_deplibs" 5025d63fdb69Smrg fi 5026d63fdb69Smrg 5027d63fdb69Smrg if test "$linkmode,$pass" = "lib,link" || 5028d63fdb69Smrg test "$linkmode,$pass" = "prog,scan"; then 5029d63fdb69Smrg libs="$deplibs" 5030d63fdb69Smrg deplibs= 5031d63fdb69Smrg fi 5032d63fdb69Smrg if test "$linkmode" = prog; then 5033d63fdb69Smrg case $pass in 5034d63fdb69Smrg dlopen) libs="$dlfiles" ;; 5035d63fdb69Smrg dlpreopen) libs="$dlprefiles" ;; 5036d63fdb69Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 5037d63fdb69Smrg esac 5038d63fdb69Smrg fi 5039d63fdb69Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 5040d63fdb69Smrg # Collect and forward deplibs of preopened libtool libs 5041d63fdb69Smrg for lib in $dlprefiles; do 5042d63fdb69Smrg # Ignore non-libtool-libs 5043d63fdb69Smrg dependency_libs= 5044d63fdb69Smrg case $lib in 5045d63fdb69Smrg *.la) func_source "$lib" ;; 5046d63fdb69Smrg esac 5047d63fdb69Smrg 5048d63fdb69Smrg # Collect preopened libtool deplibs, except any this library 5049d63fdb69Smrg # has declared as weak libs 5050d63fdb69Smrg for deplib in $dependency_libs; do 5051d63fdb69Smrg deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` 5052d63fdb69Smrg case " $weak_libs " in 5053d63fdb69Smrg *" $deplib_base "*) ;; 5054d63fdb69Smrg *) deplibs="$deplibs $deplib" ;; 5055d63fdb69Smrg esac 5056d63fdb69Smrg done 5057d63fdb69Smrg done 5058d63fdb69Smrg libs="$dlprefiles" 5059d63fdb69Smrg fi 5060d63fdb69Smrg if test "$pass" = dlopen; then 5061d63fdb69Smrg # Collect dlpreopened libraries 5062d63fdb69Smrg save_deplibs="$deplibs" 5063d63fdb69Smrg deplibs= 5064d63fdb69Smrg fi 5065d63fdb69Smrg 5066d63fdb69Smrg for deplib in $libs; do 5067d63fdb69Smrg lib= 5068d63fdb69Smrg found=no 5069d63fdb69Smrg case $deplib in 5070d63fdb69Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5071d63fdb69Smrg if test "$linkmode,$pass" = "prog,link"; then 5072d63fdb69Smrg compile_deplibs="$deplib $compile_deplibs" 5073d63fdb69Smrg finalize_deplibs="$deplib $finalize_deplibs" 5074d63fdb69Smrg else 5075d63fdb69Smrg compiler_flags="$compiler_flags $deplib" 5076d63fdb69Smrg if test "$linkmode" = lib ; then 5077d63fdb69Smrg case "$new_inherited_linker_flags " in 5078d63fdb69Smrg *" $deplib "*) ;; 5079d63fdb69Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5080d63fdb69Smrg esac 5081d63fdb69Smrg fi 5082d63fdb69Smrg fi 5083d63fdb69Smrg continue 5084d63fdb69Smrg ;; 5085d63fdb69Smrg -l*) 5086d63fdb69Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 5087d63fdb69Smrg func_warning "\`-l' is ignored for archives/objects" 5088d63fdb69Smrg continue 5089d63fdb69Smrg fi 5090d63fdb69Smrg func_stripname '-l' '' "$deplib" 5091d63fdb69Smrg name=$func_stripname_result 5092d63fdb69Smrg if test "$linkmode" = lib; then 5093d63fdb69Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 5094d63fdb69Smrg else 5095d63fdb69Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 5096d63fdb69Smrg fi 5097d63fdb69Smrg for searchdir in $searchdirs; do 5098d63fdb69Smrg for search_ext in .la $std_shrext .so .a; do 5099d63fdb69Smrg # Search the libtool library 5100d63fdb69Smrg lib="$searchdir/lib${name}${search_ext}" 5101d63fdb69Smrg if test -f "$lib"; then 5102d63fdb69Smrg if test "$search_ext" = ".la"; then 5103d63fdb69Smrg found=yes 5104d63fdb69Smrg else 5105d63fdb69Smrg found=no 5106d63fdb69Smrg fi 5107d63fdb69Smrg break 2 5108d63fdb69Smrg fi 5109d63fdb69Smrg done 5110d63fdb69Smrg done 5111d63fdb69Smrg if test "$found" != yes; then 5112d63fdb69Smrg # deplib doesn't seem to be a libtool library 5113d63fdb69Smrg if test "$linkmode,$pass" = "prog,link"; then 5114d63fdb69Smrg compile_deplibs="$deplib $compile_deplibs" 5115d63fdb69Smrg finalize_deplibs="$deplib $finalize_deplibs" 5116d63fdb69Smrg else 5117d63fdb69Smrg deplibs="$deplib $deplibs" 5118d63fdb69Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5119d63fdb69Smrg fi 5120d63fdb69Smrg continue 5121d63fdb69Smrg else # deplib is a libtool library 5122d63fdb69Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 5123d63fdb69Smrg # We need to do some special things here, and not later. 5124d63fdb69Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 5125d63fdb69Smrg case " $predeps $postdeps " in 5126d63fdb69Smrg *" $deplib "*) 5127d63fdb69Smrg if func_lalib_p "$lib"; then 5128d63fdb69Smrg library_names= 5129d63fdb69Smrg old_library= 5130d63fdb69Smrg func_source "$lib" 5131d63fdb69Smrg for l in $old_library $library_names; do 5132d63fdb69Smrg ll="$l" 5133d63fdb69Smrg done 5134d63fdb69Smrg if test "X$ll" = "X$old_library" ; then # only static version available 5135d63fdb69Smrg found=no 5136d63fdb69Smrg func_dirname "$lib" "" "." 5137d63fdb69Smrg ladir="$func_dirname_result" 5138d63fdb69Smrg lib=$ladir/$old_library 5139d63fdb69Smrg if test "$linkmode,$pass" = "prog,link"; then 5140d63fdb69Smrg compile_deplibs="$deplib $compile_deplibs" 5141d63fdb69Smrg finalize_deplibs="$deplib $finalize_deplibs" 5142d63fdb69Smrg else 5143d63fdb69Smrg deplibs="$deplib $deplibs" 5144d63fdb69Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5145d63fdb69Smrg fi 5146d63fdb69Smrg continue 5147d63fdb69Smrg fi 5148d63fdb69Smrg fi 5149d63fdb69Smrg ;; 5150d63fdb69Smrg *) ;; 5151d63fdb69Smrg esac 5152d63fdb69Smrg fi 5153d63fdb69Smrg fi 5154d63fdb69Smrg ;; # -l 5155d63fdb69Smrg *.ltframework) 5156d63fdb69Smrg if test "$linkmode,$pass" = "prog,link"; then 5157d63fdb69Smrg compile_deplibs="$deplib $compile_deplibs" 5158d63fdb69Smrg finalize_deplibs="$deplib $finalize_deplibs" 5159d63fdb69Smrg else 5160d63fdb69Smrg deplibs="$deplib $deplibs" 5161d63fdb69Smrg if test "$linkmode" = lib ; then 5162d63fdb69Smrg case "$new_inherited_linker_flags " in 5163d63fdb69Smrg *" $deplib "*) ;; 5164d63fdb69Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5165d63fdb69Smrg esac 5166d63fdb69Smrg fi 5167d63fdb69Smrg fi 5168d63fdb69Smrg continue 5169d63fdb69Smrg ;; 5170d63fdb69Smrg -L*) 5171d63fdb69Smrg case $linkmode in 5172d63fdb69Smrg lib) 5173d63fdb69Smrg deplibs="$deplib $deplibs" 5174d63fdb69Smrg test "$pass" = conv && continue 5175d63fdb69Smrg newdependency_libs="$deplib $newdependency_libs" 5176d63fdb69Smrg func_stripname '-L' '' "$deplib" 5177d63fdb69Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5178d63fdb69Smrg ;; 5179d63fdb69Smrg prog) 5180d63fdb69Smrg if test "$pass" = conv; then 5181d63fdb69Smrg deplibs="$deplib $deplibs" 5182d63fdb69Smrg continue 5183d63fdb69Smrg fi 5184d63fdb69Smrg if test "$pass" = scan; then 5185d63fdb69Smrg deplibs="$deplib $deplibs" 5186d63fdb69Smrg else 5187d63fdb69Smrg compile_deplibs="$deplib $compile_deplibs" 5188d63fdb69Smrg finalize_deplibs="$deplib $finalize_deplibs" 5189d63fdb69Smrg fi 5190d63fdb69Smrg func_stripname '-L' '' "$deplib" 5191d63fdb69Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5192d63fdb69Smrg ;; 5193d63fdb69Smrg *) 5194d63fdb69Smrg func_warning "\`-L' is ignored for archives/objects" 5195d63fdb69Smrg ;; 5196d63fdb69Smrg esac # linkmode 5197d63fdb69Smrg continue 5198d63fdb69Smrg ;; # -L 5199d63fdb69Smrg -R*) 5200d63fdb69Smrg if test "$pass" = link; then 5201d63fdb69Smrg func_stripname '-R' '' "$deplib" 5202d63fdb69Smrg dir=$func_stripname_result 5203d63fdb69Smrg # Make sure the xrpath contains only unique directories. 5204d63fdb69Smrg case "$xrpath " in 5205d63fdb69Smrg *" $dir "*) ;; 5206d63fdb69Smrg *) xrpath="$xrpath $dir" ;; 5207d63fdb69Smrg esac 5208d63fdb69Smrg fi 5209d63fdb69Smrg deplibs="$deplib $deplibs" 5210d63fdb69Smrg continue 5211d63fdb69Smrg ;; 5212d63fdb69Smrg *.la) lib="$deplib" ;; 5213d63fdb69Smrg *.$libext) 5214d63fdb69Smrg if test "$pass" = conv; then 5215d63fdb69Smrg deplibs="$deplib $deplibs" 5216d63fdb69Smrg continue 5217d63fdb69Smrg fi 5218d63fdb69Smrg case $linkmode in 5219d63fdb69Smrg lib) 5220d63fdb69Smrg # Linking convenience modules into shared libraries is allowed, 5221d63fdb69Smrg # but linking other static libraries is non-portable. 5222d63fdb69Smrg case " $dlpreconveniencelibs " in 5223d63fdb69Smrg *" $deplib "*) ;; 5224d63fdb69Smrg *) 5225d63fdb69Smrg valid_a_lib=no 5226d63fdb69Smrg case $deplibs_check_method in 5227d63fdb69Smrg match_pattern*) 5228d63fdb69Smrg set dummy $deplibs_check_method; shift 5229d63fdb69Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 5230d63fdb69Smrg if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ 5231d63fdb69Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 5232d63fdb69Smrg valid_a_lib=yes 5233d63fdb69Smrg fi 5234d63fdb69Smrg ;; 5235d63fdb69Smrg pass_all) 5236d63fdb69Smrg valid_a_lib=yes 5237d63fdb69Smrg ;; 5238d63fdb69Smrg esac 5239d63fdb69Smrg if test "$valid_a_lib" != yes; then 5240d63fdb69Smrg $ECHO 5241d63fdb69Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 5242d63fdb69Smrg $ECHO "*** I have the capability to make that library automatically link in when" 5243d63fdb69Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 5244d63fdb69Smrg $ECHO "*** shared version of the library, which you do not appear to have" 5245d63fdb69Smrg $ECHO "*** because the file extensions .$libext of this argument makes me believe" 5246d63fdb69Smrg $ECHO "*** that it is just a static archive that I should not use here." 5247d63fdb69Smrg else 5248d63fdb69Smrg $ECHO 5249d63fdb69Smrg $ECHO "*** Warning: Linking the shared library $output against the" 5250d63fdb69Smrg $ECHO "*** static library $deplib is not portable!" 5251d63fdb69Smrg deplibs="$deplib $deplibs" 5252d63fdb69Smrg fi 5253d63fdb69Smrg ;; 5254d63fdb69Smrg esac 5255d63fdb69Smrg continue 5256d63fdb69Smrg ;; 5257d63fdb69Smrg prog) 5258d63fdb69Smrg if test "$pass" != link; then 5259d63fdb69Smrg deplibs="$deplib $deplibs" 5260d63fdb69Smrg else 5261d63fdb69Smrg compile_deplibs="$deplib $compile_deplibs" 5262d63fdb69Smrg finalize_deplibs="$deplib $finalize_deplibs" 5263d63fdb69Smrg fi 5264d63fdb69Smrg continue 5265d63fdb69Smrg ;; 5266d63fdb69Smrg esac # linkmode 5267d63fdb69Smrg ;; # *.$libext 5268d63fdb69Smrg *.lo | *.$objext) 5269d63fdb69Smrg if test "$pass" = conv; then 5270d63fdb69Smrg deplibs="$deplib $deplibs" 5271d63fdb69Smrg elif test "$linkmode" = prog; then 5272d63fdb69Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 5273d63fdb69Smrg # If there is no dlopen support or we're linking statically, 5274d63fdb69Smrg # we need to preload. 5275d63fdb69Smrg newdlprefiles="$newdlprefiles $deplib" 5276d63fdb69Smrg compile_deplibs="$deplib $compile_deplibs" 5277d63fdb69Smrg finalize_deplibs="$deplib $finalize_deplibs" 5278d63fdb69Smrg else 5279d63fdb69Smrg newdlfiles="$newdlfiles $deplib" 5280d63fdb69Smrg fi 5281d63fdb69Smrg fi 5282d63fdb69Smrg continue 5283d63fdb69Smrg ;; 5284d63fdb69Smrg %DEPLIBS%) 5285d63fdb69Smrg alldeplibs=yes 5286d63fdb69Smrg continue 5287d63fdb69Smrg ;; 5288d63fdb69Smrg esac # case $deplib 5289d63fdb69Smrg 5290d63fdb69Smrg if test "$found" = yes || test -f "$lib"; then : 5291d63fdb69Smrg else 5292d63fdb69Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 5293d63fdb69Smrg fi 5294d63fdb69Smrg 5295d63fdb69Smrg # Check to see that this really is a libtool archive. 5296d63fdb69Smrg func_lalib_unsafe_p "$lib" \ 5297d63fdb69Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 5298d63fdb69Smrg 5299d63fdb69Smrg func_dirname "$lib" "" "." 5300d63fdb69Smrg ladir="$func_dirname_result" 5301d63fdb69Smrg 5302d63fdb69Smrg dlname= 5303d63fdb69Smrg dlopen= 5304d63fdb69Smrg dlpreopen= 5305d63fdb69Smrg libdir= 5306d63fdb69Smrg library_names= 5307d63fdb69Smrg old_library= 5308d63fdb69Smrg inherited_linker_flags= 5309d63fdb69Smrg # If the library was installed with an old release of libtool, 5310d63fdb69Smrg # it will not redefine variables installed, or shouldnotlink 5311d63fdb69Smrg installed=yes 5312d63fdb69Smrg shouldnotlink=no 5313d63fdb69Smrg avoidtemprpath= 5314d63fdb69Smrg 5315d63fdb69Smrg 5316d63fdb69Smrg # Read the .la file 5317d63fdb69Smrg func_source "$lib" 5318d63fdb69Smrg 5319d63fdb69Smrg # Convert "-framework foo" to "foo.ltframework" 5320d63fdb69Smrg if test -n "$inherited_linker_flags"; then 5321d63fdb69Smrg tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` 5322d63fdb69Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 5323d63fdb69Smrg case " $new_inherited_linker_flags " in 5324d63fdb69Smrg *" $tmp_inherited_linker_flag "*) ;; 5325d63fdb69Smrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 5326d63fdb69Smrg esac 5327d63fdb69Smrg done 5328d63fdb69Smrg fi 5329d63fdb69Smrg dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 5330d63fdb69Smrg if test "$linkmode,$pass" = "lib,link" || 5331d63fdb69Smrg test "$linkmode,$pass" = "prog,scan" || 5332d63fdb69Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 5333d63fdb69Smrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 5334d63fdb69Smrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 5335d63fdb69Smrg fi 5336d63fdb69Smrg 5337d63fdb69Smrg if test "$pass" = conv; then 5338d63fdb69Smrg # Only check for convenience libraries 5339d63fdb69Smrg deplibs="$lib $deplibs" 5340d63fdb69Smrg if test -z "$libdir"; then 5341d63fdb69Smrg if test -z "$old_library"; then 5342d63fdb69Smrg func_fatal_error "cannot find name of link library for \`$lib'" 5343d63fdb69Smrg fi 5344d63fdb69Smrg # It is a libtool convenience library, so add in its objects. 5345d63fdb69Smrg convenience="$convenience $ladir/$objdir/$old_library" 5346d63fdb69Smrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 5347d63fdb69Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 5348d63fdb69Smrg func_fatal_error "\`$lib' is not a convenience library" 5349d63fdb69Smrg fi 5350d63fdb69Smrg tmp_libs= 5351d63fdb69Smrg for deplib in $dependency_libs; do 5352d63fdb69Smrg deplibs="$deplib $deplibs" 5353d63fdb69Smrg if $opt_duplicate_deps ; then 5354d63fdb69Smrg case "$tmp_libs " in 5355d63fdb69Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5356d63fdb69Smrg esac 5357d63fdb69Smrg fi 5358d63fdb69Smrg tmp_libs="$tmp_libs $deplib" 5359d63fdb69Smrg done 5360d63fdb69Smrg continue 5361d63fdb69Smrg fi # $pass = conv 5362d63fdb69Smrg 5363d63fdb69Smrg 5364d63fdb69Smrg # Get the name of the library we link against. 5365d63fdb69Smrg linklib= 5366d63fdb69Smrg for l in $old_library $library_names; do 5367d63fdb69Smrg linklib="$l" 5368d63fdb69Smrg done 5369d63fdb69Smrg if test -z "$linklib"; then 5370d63fdb69Smrg func_fatal_error "cannot find name of link library for \`$lib'" 5371d63fdb69Smrg fi 5372d63fdb69Smrg 5373d63fdb69Smrg # This library was specified with -dlopen. 5374d63fdb69Smrg if test "$pass" = dlopen; then 5375d63fdb69Smrg if test -z "$libdir"; then 5376d63fdb69Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 5377d63fdb69Smrg fi 5378d63fdb69Smrg if test -z "$dlname" || 5379d63fdb69Smrg test "$dlopen_support" != yes || 5380d63fdb69Smrg test "$build_libtool_libs" = no; then 5381d63fdb69Smrg # If there is no dlname, no dlopen support or we're linking 5382d63fdb69Smrg # statically, we need to preload. We also need to preload any 5383d63fdb69Smrg # dependent libraries so libltdl's deplib preloader doesn't 5384d63fdb69Smrg # bomb out in the load deplibs phase. 5385d63fdb69Smrg dlprefiles="$dlprefiles $lib $dependency_libs" 5386d63fdb69Smrg else 5387d63fdb69Smrg newdlfiles="$newdlfiles $lib" 5388d63fdb69Smrg fi 5389d63fdb69Smrg continue 5390d63fdb69Smrg fi # $pass = dlopen 5391d63fdb69Smrg 5392d63fdb69Smrg # We need an absolute path. 5393d63fdb69Smrg case $ladir in 5394d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 5395d63fdb69Smrg *) 5396d63fdb69Smrg abs_ladir=`cd "$ladir" && pwd` 5397d63fdb69Smrg if test -z "$abs_ladir"; then 5398d63fdb69Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 5399d63fdb69Smrg func_warning "passing it literally to the linker, although it might fail" 5400d63fdb69Smrg abs_ladir="$ladir" 5401d63fdb69Smrg fi 5402d63fdb69Smrg ;; 5403d63fdb69Smrg esac 5404d63fdb69Smrg func_basename "$lib" 5405d63fdb69Smrg laname="$func_basename_result" 5406d63fdb69Smrg 5407d63fdb69Smrg # Find the relevant object directory and library name. 5408d63fdb69Smrg if test "X$installed" = Xyes; then 5409d63fdb69Smrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5410d63fdb69Smrg func_warning "library \`$lib' was moved." 5411d63fdb69Smrg dir="$ladir" 5412d63fdb69Smrg absdir="$abs_ladir" 5413d63fdb69Smrg libdir="$abs_ladir" 5414d63fdb69Smrg else 5415d63fdb69Smrg dir="$libdir" 5416d63fdb69Smrg absdir="$libdir" 5417d63fdb69Smrg fi 5418d63fdb69Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 5419d63fdb69Smrg else 5420d63fdb69Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5421d63fdb69Smrg dir="$ladir" 5422d63fdb69Smrg absdir="$abs_ladir" 5423d63fdb69Smrg # Remove this search path later 5424d63fdb69Smrg notinst_path="$notinst_path $abs_ladir" 5425d63fdb69Smrg else 5426d63fdb69Smrg dir="$ladir/$objdir" 5427d63fdb69Smrg absdir="$abs_ladir/$objdir" 5428d63fdb69Smrg # Remove this search path later 5429d63fdb69Smrg notinst_path="$notinst_path $abs_ladir" 5430d63fdb69Smrg fi 5431d63fdb69Smrg fi # $installed = yes 5432d63fdb69Smrg func_stripname 'lib' '.la' "$laname" 5433d63fdb69Smrg name=$func_stripname_result 5434d63fdb69Smrg 5435d63fdb69Smrg # This library was specified with -dlpreopen. 5436d63fdb69Smrg if test "$pass" = dlpreopen; then 5437d63fdb69Smrg if test -z "$libdir" && test "$linkmode" = prog; then 5438d63fdb69Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 5439d63fdb69Smrg fi 5440d63fdb69Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 5441d63fdb69Smrg # are required to link). 5442d63fdb69Smrg if test -n "$old_library"; then 5443d63fdb69Smrg newdlprefiles="$newdlprefiles $dir/$old_library" 5444d63fdb69Smrg # Keep a list of preopened convenience libraries to check 5445d63fdb69Smrg # that they are being used correctly in the link pass. 5446d63fdb69Smrg test -z "$libdir" && \ 5447d63fdb69Smrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 5448d63fdb69Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 5449d63fdb69Smrg elif test -n "$dlname"; then 5450d63fdb69Smrg newdlprefiles="$newdlprefiles $dir/$dlname" 5451d63fdb69Smrg else 5452d63fdb69Smrg newdlprefiles="$newdlprefiles $dir/$linklib" 5453d63fdb69Smrg fi 5454d63fdb69Smrg fi # $pass = dlpreopen 5455d63fdb69Smrg 5456d63fdb69Smrg if test -z "$libdir"; then 5457d63fdb69Smrg # Link the convenience library 5458d63fdb69Smrg if test "$linkmode" = lib; then 5459d63fdb69Smrg deplibs="$dir/$old_library $deplibs" 5460d63fdb69Smrg elif test "$linkmode,$pass" = "prog,link"; then 5461d63fdb69Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 5462d63fdb69Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 5463d63fdb69Smrg else 5464d63fdb69Smrg deplibs="$lib $deplibs" # used for prog,scan pass 5465d63fdb69Smrg fi 5466d63fdb69Smrg continue 5467d63fdb69Smrg fi 5468d63fdb69Smrg 5469d63fdb69Smrg 5470d63fdb69Smrg if test "$linkmode" = prog && test "$pass" != link; then 5471d63fdb69Smrg newlib_search_path="$newlib_search_path $ladir" 5472d63fdb69Smrg deplibs="$lib $deplibs" 5473d63fdb69Smrg 5474d63fdb69Smrg linkalldeplibs=no 5475d63fdb69Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 5476d63fdb69Smrg test "$build_libtool_libs" = no; then 5477d63fdb69Smrg linkalldeplibs=yes 5478d63fdb69Smrg fi 5479d63fdb69Smrg 5480d63fdb69Smrg tmp_libs= 5481d63fdb69Smrg for deplib in $dependency_libs; do 5482d63fdb69Smrg case $deplib in 5483d63fdb69Smrg -L*) func_stripname '-L' '' "$deplib" 5484d63fdb69Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5485d63fdb69Smrg ;; 5486d63fdb69Smrg esac 5487d63fdb69Smrg # Need to link against all dependency_libs? 5488d63fdb69Smrg if test "$linkalldeplibs" = yes; then 5489d63fdb69Smrg deplibs="$deplib $deplibs" 5490d63fdb69Smrg else 5491d63fdb69Smrg # Need to hardcode shared library paths 5492d63fdb69Smrg # or/and link against static libraries 5493d63fdb69Smrg newdependency_libs="$deplib $newdependency_libs" 5494d63fdb69Smrg fi 5495d63fdb69Smrg if $opt_duplicate_deps ; then 5496d63fdb69Smrg case "$tmp_libs " in 5497d63fdb69Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5498d63fdb69Smrg esac 5499d63fdb69Smrg fi 5500d63fdb69Smrg tmp_libs="$tmp_libs $deplib" 5501d63fdb69Smrg done # for deplib 5502d63fdb69Smrg continue 5503d63fdb69Smrg fi # $linkmode = prog... 5504d63fdb69Smrg 5505d63fdb69Smrg if test "$linkmode,$pass" = "prog,link"; then 5506d63fdb69Smrg if test -n "$library_names" && 5507d63fdb69Smrg { { test "$prefer_static_libs" = no || 5508d63fdb69Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 5509d63fdb69Smrg test -z "$old_library"; }; then 5510d63fdb69Smrg # We need to hardcode the library path 5511d63fdb69Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 5512d63fdb69Smrg # Make sure the rpath contains only unique directories. 5513d63fdb69Smrg case "$temp_rpath:" in 5514d63fdb69Smrg *"$absdir:"*) ;; 5515d63fdb69Smrg *) temp_rpath="$temp_rpath$absdir:" ;; 5516d63fdb69Smrg esac 5517d63fdb69Smrg fi 5518d63fdb69Smrg 5519d63fdb69Smrg # Hardcode the library path. 5520d63fdb69Smrg # Skip directories that are in the system default run-time 5521d63fdb69Smrg # search path. 5522d63fdb69Smrg case " $sys_lib_dlsearch_path " in 5523d63fdb69Smrg *" $absdir "*) ;; 5524d63fdb69Smrg *) 5525d63fdb69Smrg case "$compile_rpath " in 5526d63fdb69Smrg *" $absdir "*) ;; 5527d63fdb69Smrg *) compile_rpath="$compile_rpath $absdir" 5528d63fdb69Smrg esac 5529d63fdb69Smrg ;; 5530d63fdb69Smrg esac 5531d63fdb69Smrg case " $sys_lib_dlsearch_path " in 5532d63fdb69Smrg *" $libdir "*) ;; 5533d63fdb69Smrg *) 5534d63fdb69Smrg case "$finalize_rpath " in 5535d63fdb69Smrg *" $libdir "*) ;; 5536d63fdb69Smrg *) finalize_rpath="$finalize_rpath $libdir" 5537d63fdb69Smrg esac 5538d63fdb69Smrg ;; 5539d63fdb69Smrg esac 5540d63fdb69Smrg fi # $linkmode,$pass = prog,link... 5541d63fdb69Smrg 5542d63fdb69Smrg if test "$alldeplibs" = yes && 5543d63fdb69Smrg { test "$deplibs_check_method" = pass_all || 5544d63fdb69Smrg { test "$build_libtool_libs" = yes && 5545d63fdb69Smrg test -n "$library_names"; }; }; then 5546d63fdb69Smrg # We only need to search for static libraries 5547d63fdb69Smrg continue 5548d63fdb69Smrg fi 5549d63fdb69Smrg fi 5550d63fdb69Smrg 5551d63fdb69Smrg link_static=no # Whether the deplib will be linked statically 5552d63fdb69Smrg use_static_libs=$prefer_static_libs 5553d63fdb69Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 5554d63fdb69Smrg use_static_libs=no 5555d63fdb69Smrg fi 5556d63fdb69Smrg if test -n "$library_names" && 5557d63fdb69Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 5558d63fdb69Smrg case $host in 5559d63fdb69Smrg *cygwin* | *mingw* | *cegcc*) 5560d63fdb69Smrg # No point in relinking DLLs because paths are not encoded 5561d63fdb69Smrg notinst_deplibs="$notinst_deplibs $lib" 5562d63fdb69Smrg need_relink=no 5563d63fdb69Smrg ;; 5564d63fdb69Smrg *) 5565d63fdb69Smrg if test "$installed" = no; then 5566d63fdb69Smrg notinst_deplibs="$notinst_deplibs $lib" 5567d63fdb69Smrg need_relink=yes 5568d63fdb69Smrg fi 5569d63fdb69Smrg ;; 5570d63fdb69Smrg esac 5571d63fdb69Smrg # This is a shared library 5572d63fdb69Smrg 5573d63fdb69Smrg # Warn about portability, can't link against -module's on some 5574d63fdb69Smrg # systems (darwin). Don't bleat about dlopened modules though! 5575d63fdb69Smrg dlopenmodule="" 5576d63fdb69Smrg for dlpremoduletest in $dlprefiles; do 5577d63fdb69Smrg if test "X$dlpremoduletest" = "X$lib"; then 5578d63fdb69Smrg dlopenmodule="$dlpremoduletest" 5579d63fdb69Smrg break 5580d63fdb69Smrg fi 5581d63fdb69Smrg done 5582d63fdb69Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 5583d63fdb69Smrg $ECHO 5584d63fdb69Smrg if test "$linkmode" = prog; then 5585d63fdb69Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 5586d63fdb69Smrg else 5587d63fdb69Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 5588d63fdb69Smrg fi 5589d63fdb69Smrg $ECHO "*** $linklib is not portable!" 5590d63fdb69Smrg fi 5591d63fdb69Smrg if test "$linkmode" = lib && 5592d63fdb69Smrg test "$hardcode_into_libs" = yes; then 5593d63fdb69Smrg # Hardcode the library path. 5594d63fdb69Smrg # Skip directories that are in the system default run-time 5595d63fdb69Smrg # search path. 5596d63fdb69Smrg case " $sys_lib_dlsearch_path " in 5597d63fdb69Smrg *" $absdir "*) ;; 5598d63fdb69Smrg *) 5599d63fdb69Smrg case "$compile_rpath " in 5600d63fdb69Smrg *" $absdir "*) ;; 5601d63fdb69Smrg *) compile_rpath="$compile_rpath $absdir" 5602d63fdb69Smrg esac 5603d63fdb69Smrg ;; 5604d63fdb69Smrg esac 5605d63fdb69Smrg case " $sys_lib_dlsearch_path " in 5606d63fdb69Smrg *" $libdir "*) ;; 5607d63fdb69Smrg *) 5608d63fdb69Smrg case "$finalize_rpath " in 5609d63fdb69Smrg *" $libdir "*) ;; 5610d63fdb69Smrg *) finalize_rpath="$finalize_rpath $libdir" 5611d63fdb69Smrg esac 5612d63fdb69Smrg ;; 5613d63fdb69Smrg esac 5614d63fdb69Smrg fi 5615d63fdb69Smrg 5616d63fdb69Smrg if test -n "$old_archive_from_expsyms_cmds"; then 5617d63fdb69Smrg # figure out the soname 5618d63fdb69Smrg set dummy $library_names 5619d63fdb69Smrg shift 5620d63fdb69Smrg realname="$1" 5621d63fdb69Smrg shift 5622d63fdb69Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 5623d63fdb69Smrg # use dlname if we got it. it's perfectly good, no? 5624d63fdb69Smrg if test -n "$dlname"; then 5625d63fdb69Smrg soname="$dlname" 5626d63fdb69Smrg elif test -n "$soname_spec"; then 5627d63fdb69Smrg # bleh windows 5628d63fdb69Smrg case $host in 5629d63fdb69Smrg *cygwin* | mingw* | *cegcc*) 5630d63fdb69Smrg func_arith $current - $age 5631d63fdb69Smrg major=$func_arith_result 5632d63fdb69Smrg versuffix="-$major" 5633d63fdb69Smrg ;; 5634d63fdb69Smrg esac 5635d63fdb69Smrg eval soname=\"$soname_spec\" 5636d63fdb69Smrg else 5637d63fdb69Smrg soname="$realname" 5638d63fdb69Smrg fi 5639d63fdb69Smrg 5640d63fdb69Smrg # Make a new name for the extract_expsyms_cmds to use 5641d63fdb69Smrg soroot="$soname" 5642d63fdb69Smrg func_basename "$soroot" 5643d63fdb69Smrg soname="$func_basename_result" 5644d63fdb69Smrg func_stripname 'lib' '.dll' "$soname" 5645d63fdb69Smrg newlib=libimp-$func_stripname_result.a 5646d63fdb69Smrg 5647d63fdb69Smrg # If the library has no export list, then create one now 5648d63fdb69Smrg if test -f "$output_objdir/$soname-def"; then : 5649d63fdb69Smrg else 5650d63fdb69Smrg func_verbose "extracting exported symbol list from \`$soname'" 5651d63fdb69Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 5652d63fdb69Smrg fi 5653d63fdb69Smrg 5654d63fdb69Smrg # Create $newlib 5655d63fdb69Smrg if test -f "$output_objdir/$newlib"; then :; else 5656d63fdb69Smrg func_verbose "generating import library for \`$soname'" 5657d63fdb69Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 5658d63fdb69Smrg fi 5659d63fdb69Smrg # make sure the library variables are pointing to the new library 5660d63fdb69Smrg dir=$output_objdir 5661d63fdb69Smrg linklib=$newlib 5662d63fdb69Smrg fi # test -n "$old_archive_from_expsyms_cmds" 5663d63fdb69Smrg 5664d63fdb69Smrg if test "$linkmode" = prog || test "$mode" != relink; then 5665d63fdb69Smrg add_shlibpath= 5666d63fdb69Smrg add_dir= 5667d63fdb69Smrg add= 5668d63fdb69Smrg lib_linked=yes 5669d63fdb69Smrg case $hardcode_action in 5670d63fdb69Smrg immediate | unsupported) 5671d63fdb69Smrg if test "$hardcode_direct" = no; then 5672d63fdb69Smrg add="$dir/$linklib" 5673d63fdb69Smrg case $host in 5674d63fdb69Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 5675d63fdb69Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 5676d63fdb69Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 5677d63fdb69Smrg *-*-unixware7*) add_dir="-L$dir" ;; 5678d63fdb69Smrg *-*-darwin* ) 5679d63fdb69Smrg # if the lib is a (non-dlopened) module then we can not 5680d63fdb69Smrg # link against it, someone is ignoring the earlier warnings 5681d63fdb69Smrg if /usr/bin/file -L $add 2> /dev/null | 5682d63fdb69Smrg $GREP ": [^:]* bundle" >/dev/null ; then 5683d63fdb69Smrg if test "X$dlopenmodule" != "X$lib"; then 5684d63fdb69Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 5685d63fdb69Smrg if test -z "$old_library" ; then 5686d63fdb69Smrg $ECHO 5687d63fdb69Smrg $ECHO "*** And there doesn't seem to be a static archive available" 5688d63fdb69Smrg $ECHO "*** The link will probably fail, sorry" 5689d63fdb69Smrg else 5690d63fdb69Smrg add="$dir/$old_library" 5691d63fdb69Smrg fi 5692d63fdb69Smrg elif test -n "$old_library"; then 5693d63fdb69Smrg add="$dir/$old_library" 5694d63fdb69Smrg fi 5695d63fdb69Smrg fi 5696d63fdb69Smrg esac 5697d63fdb69Smrg elif test "$hardcode_minus_L" = no; then 5698d63fdb69Smrg case $host in 5699d63fdb69Smrg *-*-sunos*) add_shlibpath="$dir" ;; 5700d63fdb69Smrg esac 5701d63fdb69Smrg add_dir="-L$dir" 5702d63fdb69Smrg add="-l$name" 5703d63fdb69Smrg elif test "$hardcode_shlibpath_var" = no; then 5704d63fdb69Smrg add_shlibpath="$dir" 5705d63fdb69Smrg add="-l$name" 5706d63fdb69Smrg else 5707d63fdb69Smrg lib_linked=no 5708d63fdb69Smrg fi 5709d63fdb69Smrg ;; 5710d63fdb69Smrg relink) 5711d63fdb69Smrg if test "$hardcode_direct" = yes && 5712d63fdb69Smrg test "$hardcode_direct_absolute" = no; then 5713d63fdb69Smrg add="$dir/$linklib" 5714d63fdb69Smrg elif test "$hardcode_minus_L" = yes; then 5715d63fdb69Smrg add_dir="-L$dir" 5716d63fdb69Smrg # Try looking first in the location we're being installed to. 5717d63fdb69Smrg if test -n "$inst_prefix_dir"; then 5718d63fdb69Smrg case $libdir in 5719d63fdb69Smrg [\\/]*) 5720d63fdb69Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 5721d63fdb69Smrg ;; 5722d63fdb69Smrg esac 5723d63fdb69Smrg fi 5724d63fdb69Smrg add="-l$name" 5725d63fdb69Smrg elif test "$hardcode_shlibpath_var" = yes; then 5726d63fdb69Smrg add_shlibpath="$dir" 5727d63fdb69Smrg add="-l$name" 5728d63fdb69Smrg else 5729d63fdb69Smrg lib_linked=no 5730d63fdb69Smrg fi 5731d63fdb69Smrg ;; 5732d63fdb69Smrg *) lib_linked=no ;; 5733d63fdb69Smrg esac 5734d63fdb69Smrg 5735d63fdb69Smrg if test "$lib_linked" != yes; then 5736d63fdb69Smrg func_fatal_configuration "unsupported hardcode properties" 5737d63fdb69Smrg fi 5738d63fdb69Smrg 5739d63fdb69Smrg if test -n "$add_shlibpath"; then 5740d63fdb69Smrg case :$compile_shlibpath: in 5741d63fdb69Smrg *":$add_shlibpath:"*) ;; 5742d63fdb69Smrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 5743d63fdb69Smrg esac 5744d63fdb69Smrg fi 5745d63fdb69Smrg if test "$linkmode" = prog; then 5746d63fdb69Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 5747d63fdb69Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 5748d63fdb69Smrg else 5749d63fdb69Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 5750d63fdb69Smrg test -n "$add" && deplibs="$add $deplibs" 5751d63fdb69Smrg if test "$hardcode_direct" != yes && 5752d63fdb69Smrg test "$hardcode_minus_L" != yes && 5753d63fdb69Smrg test "$hardcode_shlibpath_var" = yes; then 5754d63fdb69Smrg case :$finalize_shlibpath: in 5755d63fdb69Smrg *":$libdir:"*) ;; 5756d63fdb69Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 5757d63fdb69Smrg esac 5758d63fdb69Smrg fi 5759d63fdb69Smrg fi 5760d63fdb69Smrg fi 5761d63fdb69Smrg 5762d63fdb69Smrg if test "$linkmode" = prog || test "$mode" = relink; then 5763d63fdb69Smrg add_shlibpath= 5764d63fdb69Smrg add_dir= 5765d63fdb69Smrg add= 5766d63fdb69Smrg # Finalize command for both is simple: just hardcode it. 5767d63fdb69Smrg if test "$hardcode_direct" = yes && 5768d63fdb69Smrg test "$hardcode_direct_absolute" = no; then 5769d63fdb69Smrg add="$libdir/$linklib" 5770d63fdb69Smrg elif test "$hardcode_minus_L" = yes; then 5771d63fdb69Smrg add_dir="-L$libdir" 5772d63fdb69Smrg add="-l$name" 5773d63fdb69Smrg elif test "$hardcode_shlibpath_var" = yes; then 5774d63fdb69Smrg case :$finalize_shlibpath: in 5775d63fdb69Smrg *":$libdir:"*) ;; 5776d63fdb69Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 5777d63fdb69Smrg esac 5778d63fdb69Smrg add="-l$name" 5779d63fdb69Smrg elif test "$hardcode_automatic" = yes; then 5780d63fdb69Smrg if test -n "$inst_prefix_dir" && 5781d63fdb69Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 5782d63fdb69Smrg add="$inst_prefix_dir$libdir/$linklib" 5783d63fdb69Smrg else 5784d63fdb69Smrg add="$libdir/$linklib" 5785d63fdb69Smrg fi 5786d63fdb69Smrg else 5787d63fdb69Smrg # We cannot seem to hardcode it, guess we'll fake it. 5788d63fdb69Smrg add_dir="-L$libdir" 5789d63fdb69Smrg # Try looking first in the location we're being installed to. 5790d63fdb69Smrg if test -n "$inst_prefix_dir"; then 5791d63fdb69Smrg case $libdir in 5792d63fdb69Smrg [\\/]*) 5793d63fdb69Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 5794d63fdb69Smrg ;; 5795d63fdb69Smrg esac 5796d63fdb69Smrg fi 5797d63fdb69Smrg add="-l$name" 5798d63fdb69Smrg fi 5799d63fdb69Smrg 5800d63fdb69Smrg if test "$linkmode" = prog; then 5801d63fdb69Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 5802d63fdb69Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 5803d63fdb69Smrg else 5804d63fdb69Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 5805d63fdb69Smrg test -n "$add" && deplibs="$add $deplibs" 5806d63fdb69Smrg fi 5807d63fdb69Smrg fi 5808d63fdb69Smrg elif test "$linkmode" = prog; then 5809d63fdb69Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 5810d63fdb69Smrg # is not unsupported. This is valid on all known static and 5811d63fdb69Smrg # shared platforms. 5812d63fdb69Smrg if test "$hardcode_direct" != unsupported; then 5813d63fdb69Smrg test -n "$old_library" && linklib="$old_library" 5814d63fdb69Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 5815d63fdb69Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 5816d63fdb69Smrg else 5817d63fdb69Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 5818d63fdb69Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 5819d63fdb69Smrg fi 5820d63fdb69Smrg elif test "$build_libtool_libs" = yes; then 5821d63fdb69Smrg # Not a shared library 5822d63fdb69Smrg if test "$deplibs_check_method" != pass_all; then 5823d63fdb69Smrg # We're trying link a shared library against a static one 5824d63fdb69Smrg # but the system doesn't support it. 5825d63fdb69Smrg 5826d63fdb69Smrg # Just print a warning and add the library to dependency_libs so 5827d63fdb69Smrg # that the program can be linked against the static library. 5828d63fdb69Smrg $ECHO 5829d63fdb69Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 5830d63fdb69Smrg $ECHO "*** I have the capability to make that library automatically link in when" 5831d63fdb69Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 5832d63fdb69Smrg $ECHO "*** shared version of the library, which you do not appear to have." 5833d63fdb69Smrg if test "$module" = yes; then 5834d63fdb69Smrg $ECHO "*** But as you try to build a module library, libtool will still create " 5835d63fdb69Smrg $ECHO "*** a static module, that should work as long as the dlopening application" 5836d63fdb69Smrg $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." 5837d63fdb69Smrg if test -z "$global_symbol_pipe"; then 5838d63fdb69Smrg $ECHO 5839d63fdb69Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 5840d63fdb69Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 5841d63fdb69Smrg $ECHO "*** not find such a program. So, this module is probably useless." 5842d63fdb69Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 5843d63fdb69Smrg fi 5844d63fdb69Smrg if test "$build_old_libs" = no; then 5845d63fdb69Smrg build_libtool_libs=module 5846d63fdb69Smrg build_old_libs=yes 5847d63fdb69Smrg else 5848d63fdb69Smrg build_libtool_libs=no 5849d63fdb69Smrg fi 5850d63fdb69Smrg fi 5851d63fdb69Smrg else 5852d63fdb69Smrg deplibs="$dir/$old_library $deplibs" 5853d63fdb69Smrg link_static=yes 5854d63fdb69Smrg fi 5855d63fdb69Smrg fi # link shared/static library? 5856d63fdb69Smrg 5857d63fdb69Smrg if test "$linkmode" = lib; then 5858d63fdb69Smrg if test -n "$dependency_libs" && 5859d63fdb69Smrg { test "$hardcode_into_libs" != yes || 5860d63fdb69Smrg test "$build_old_libs" = yes || 5861d63fdb69Smrg test "$link_static" = yes; }; then 5862d63fdb69Smrg # Extract -R from dependency_libs 5863d63fdb69Smrg temp_deplibs= 5864d63fdb69Smrg for libdir in $dependency_libs; do 5865d63fdb69Smrg case $libdir in 5866d63fdb69Smrg -R*) func_stripname '-R' '' "$libdir" 5867d63fdb69Smrg temp_xrpath=$func_stripname_result 5868d63fdb69Smrg case " $xrpath " in 5869d63fdb69Smrg *" $temp_xrpath "*) ;; 5870d63fdb69Smrg *) xrpath="$xrpath $temp_xrpath";; 5871d63fdb69Smrg esac;; 5872d63fdb69Smrg *) temp_deplibs="$temp_deplibs $libdir";; 5873d63fdb69Smrg esac 5874d63fdb69Smrg done 5875d63fdb69Smrg dependency_libs="$temp_deplibs" 5876d63fdb69Smrg fi 5877d63fdb69Smrg 5878d63fdb69Smrg newlib_search_path="$newlib_search_path $absdir" 5879d63fdb69Smrg # Link against this library 5880d63fdb69Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 5881d63fdb69Smrg # ... and its dependency_libs 5882d63fdb69Smrg tmp_libs= 5883d63fdb69Smrg for deplib in $dependency_libs; do 5884d63fdb69Smrg newdependency_libs="$deplib $newdependency_libs" 5885d63fdb69Smrg if $opt_duplicate_deps ; then 5886d63fdb69Smrg case "$tmp_libs " in 5887d63fdb69Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5888d63fdb69Smrg esac 5889d63fdb69Smrg fi 5890d63fdb69Smrg tmp_libs="$tmp_libs $deplib" 5891d63fdb69Smrg done 5892d63fdb69Smrg 5893d63fdb69Smrg if test "$link_all_deplibs" != no; then 5894d63fdb69Smrg # Add the search paths of all dependency libraries 5895d63fdb69Smrg for deplib in $dependency_libs; do 5896d63fdb69Smrg case $deplib in 5897d63fdb69Smrg -L*) path="$deplib" ;; 5898d63fdb69Smrg *.la) 5899d63fdb69Smrg func_dirname "$deplib" "" "." 5900d63fdb69Smrg dir="$func_dirname_result" 5901d63fdb69Smrg # We need an absolute path. 5902d63fdb69Smrg case $dir in 5903d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 5904d63fdb69Smrg *) 5905d63fdb69Smrg absdir=`cd "$dir" && pwd` 5906d63fdb69Smrg if test -z "$absdir"; then 5907d63fdb69Smrg func_warning "cannot determine absolute directory name of \`$dir'" 5908d63fdb69Smrg absdir="$dir" 5909d63fdb69Smrg fi 5910d63fdb69Smrg ;; 5911d63fdb69Smrg esac 5912d63fdb69Smrg if $GREP "^installed=no" $deplib > /dev/null; then 5913d63fdb69Smrg case $host in 5914d63fdb69Smrg *-*-darwin*) 5915d63fdb69Smrg depdepl= 5916d63fdb69Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 5917d63fdb69Smrg if test -n "$deplibrary_names" ; then 5918d63fdb69Smrg for tmp in $deplibrary_names ; do 5919d63fdb69Smrg depdepl=$tmp 5920d63fdb69Smrg done 5921d63fdb69Smrg if test -f "$absdir/$objdir/$depdepl" ; then 5922d63fdb69Smrg depdepl="$absdir/$objdir/$depdepl" 5923d63fdb69Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 5924d63fdb69Smrg if test -z "$darwin_install_name"; then 5925d63fdb69Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 5926d63fdb69Smrg fi 5927d63fdb69Smrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 5928d63fdb69Smrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 5929d63fdb69Smrg path= 5930d63fdb69Smrg fi 5931d63fdb69Smrg fi 5932d63fdb69Smrg ;; 5933d63fdb69Smrg *) 5934d63fdb69Smrg path="-L$absdir/$objdir" 5935d63fdb69Smrg ;; 5936d63fdb69Smrg esac 5937d63fdb69Smrg else 5938d63fdb69Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 5939d63fdb69Smrg test -z "$libdir" && \ 5940d63fdb69Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 5941d63fdb69Smrg test "$absdir" != "$libdir" && \ 5942d63fdb69Smrg func_warning "\`$deplib' seems to be moved" 5943d63fdb69Smrg 5944d63fdb69Smrg path="-L$absdir" 5945d63fdb69Smrg fi 5946d63fdb69Smrg ;; 5947d63fdb69Smrg esac 5948d63fdb69Smrg case " $deplibs " in 5949d63fdb69Smrg *" $path "*) ;; 5950d63fdb69Smrg *) deplibs="$path $deplibs" ;; 5951d63fdb69Smrg esac 5952d63fdb69Smrg done 5953d63fdb69Smrg fi # link_all_deplibs != no 5954d63fdb69Smrg fi # linkmode = lib 5955d63fdb69Smrg done # for deplib in $libs 5956d63fdb69Smrg if test "$pass" = link; then 5957d63fdb69Smrg if test "$linkmode" = "prog"; then 5958d63fdb69Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 5959d63fdb69Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 5960d63fdb69Smrg else 5961d63fdb69Smrg compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 5962d63fdb69Smrg fi 5963d63fdb69Smrg fi 5964d63fdb69Smrg dependency_libs="$newdependency_libs" 5965d63fdb69Smrg if test "$pass" = dlpreopen; then 5966d63fdb69Smrg # Link the dlpreopened libraries before other libraries 5967d63fdb69Smrg for deplib in $save_deplibs; do 5968d63fdb69Smrg deplibs="$deplib $deplibs" 5969d63fdb69Smrg done 5970d63fdb69Smrg fi 5971d63fdb69Smrg if test "$pass" != dlopen; then 5972d63fdb69Smrg if test "$pass" != conv; then 5973d63fdb69Smrg # Make sure lib_search_path contains only unique directories. 5974d63fdb69Smrg lib_search_path= 5975d63fdb69Smrg for dir in $newlib_search_path; do 5976d63fdb69Smrg case "$lib_search_path " in 5977d63fdb69Smrg *" $dir "*) ;; 5978d63fdb69Smrg *) lib_search_path="$lib_search_path $dir" ;; 5979d63fdb69Smrg esac 5980d63fdb69Smrg done 5981d63fdb69Smrg newlib_search_path= 5982d63fdb69Smrg fi 5983d63fdb69Smrg 5984d63fdb69Smrg if test "$linkmode,$pass" != "prog,link"; then 5985d63fdb69Smrg vars="deplibs" 5986d63fdb69Smrg else 5987d63fdb69Smrg vars="compile_deplibs finalize_deplibs" 5988d63fdb69Smrg fi 5989d63fdb69Smrg for var in $vars dependency_libs; do 5990d63fdb69Smrg # Add libraries to $var in reverse order 5991d63fdb69Smrg eval tmp_libs=\"\$$var\" 5992d63fdb69Smrg new_libs= 5993d63fdb69Smrg for deplib in $tmp_libs; do 5994d63fdb69Smrg # FIXME: Pedantically, this is the right thing to do, so 5995d63fdb69Smrg # that some nasty dependency loop isn't accidentally 5996d63fdb69Smrg # broken: 5997d63fdb69Smrg #new_libs="$deplib $new_libs" 5998d63fdb69Smrg # Pragmatically, this seems to cause very few problems in 5999d63fdb69Smrg # practice: 6000d63fdb69Smrg case $deplib in 6001d63fdb69Smrg -L*) new_libs="$deplib $new_libs" ;; 6002d63fdb69Smrg -R*) ;; 6003d63fdb69Smrg *) 6004d63fdb69Smrg # And here is the reason: when a library appears more 6005d63fdb69Smrg # than once as an explicit dependence of a library, or 6006d63fdb69Smrg # is implicitly linked in more than once by the 6007d63fdb69Smrg # compiler, it is considered special, and multiple 6008d63fdb69Smrg # occurrences thereof are not removed. Compare this 6009d63fdb69Smrg # with having the same library being listed as a 6010d63fdb69Smrg # dependency of multiple other libraries: in this case, 6011d63fdb69Smrg # we know (pedantically, we assume) the library does not 6012d63fdb69Smrg # need to be listed more than once, so we keep only the 6013d63fdb69Smrg # last copy. This is not always right, but it is rare 6014d63fdb69Smrg # enough that we require users that really mean to play 6015d63fdb69Smrg # such unportable linking tricks to link the library 6016d63fdb69Smrg # using -Wl,-lname, so that libtool does not consider it 6017d63fdb69Smrg # for duplicate removal. 6018d63fdb69Smrg case " $specialdeplibs " in 6019d63fdb69Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 6020d63fdb69Smrg *) 6021d63fdb69Smrg case " $new_libs " in 6022d63fdb69Smrg *" $deplib "*) ;; 6023d63fdb69Smrg *) new_libs="$deplib $new_libs" ;; 6024d63fdb69Smrg esac 6025d63fdb69Smrg ;; 6026d63fdb69Smrg esac 6027d63fdb69Smrg ;; 6028d63fdb69Smrg esac 6029d63fdb69Smrg done 6030d63fdb69Smrg tmp_libs= 6031d63fdb69Smrg for deplib in $new_libs; do 6032d63fdb69Smrg case $deplib in 6033d63fdb69Smrg -L*) 6034d63fdb69Smrg case " $tmp_libs " in 6035d63fdb69Smrg *" $deplib "*) ;; 6036d63fdb69Smrg *) tmp_libs="$tmp_libs $deplib" ;; 6037d63fdb69Smrg esac 6038d63fdb69Smrg ;; 6039d63fdb69Smrg *) tmp_libs="$tmp_libs $deplib" ;; 6040d63fdb69Smrg esac 6041d63fdb69Smrg done 6042d63fdb69Smrg eval $var=\"$tmp_libs\" 6043d63fdb69Smrg done # for var 6044d63fdb69Smrg fi 6045d63fdb69Smrg # Last step: remove runtime libs from dependency_libs 6046d63fdb69Smrg # (they stay in deplibs) 6047d63fdb69Smrg tmp_libs= 6048d63fdb69Smrg for i in $dependency_libs ; do 6049d63fdb69Smrg case " $predeps $postdeps $compiler_lib_search_path " in 6050d63fdb69Smrg *" $i "*) 6051d63fdb69Smrg i="" 6052d63fdb69Smrg ;; 6053d63fdb69Smrg esac 6054d63fdb69Smrg if test -n "$i" ; then 6055d63fdb69Smrg tmp_libs="$tmp_libs $i" 6056d63fdb69Smrg fi 6057d63fdb69Smrg done 6058d63fdb69Smrg dependency_libs=$tmp_libs 6059d63fdb69Smrg done # for pass 6060d63fdb69Smrg if test "$linkmode" = prog; then 6061d63fdb69Smrg dlfiles="$newdlfiles" 6062d63fdb69Smrg fi 6063d63fdb69Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 6064d63fdb69Smrg dlprefiles="$newdlprefiles" 6065d63fdb69Smrg fi 6066d63fdb69Smrg 6067d63fdb69Smrg case $linkmode in 6068d63fdb69Smrg oldlib) 6069d63fdb69Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 6070d63fdb69Smrg func_warning "\`-dlopen' is ignored for archives" 6071d63fdb69Smrg fi 6072d63fdb69Smrg 6073d63fdb69Smrg case " $deplibs" in 6074d63fdb69Smrg *\ -l* | *\ -L*) 6075d63fdb69Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 6076d63fdb69Smrg esac 6077d63fdb69Smrg 6078d63fdb69Smrg test -n "$rpath" && \ 6079d63fdb69Smrg func_warning "\`-rpath' is ignored for archives" 6080d63fdb69Smrg 6081d63fdb69Smrg test -n "$xrpath" && \ 6082d63fdb69Smrg func_warning "\`-R' is ignored for archives" 6083d63fdb69Smrg 6084d63fdb69Smrg test -n "$vinfo" && \ 6085d63fdb69Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 6086d63fdb69Smrg 6087d63fdb69Smrg test -n "$release" && \ 6088d63fdb69Smrg func_warning "\`-release' is ignored for archives" 6089d63fdb69Smrg 6090d63fdb69Smrg test -n "$export_symbols$export_symbols_regex" && \ 6091d63fdb69Smrg func_warning "\`-export-symbols' is ignored for archives" 6092d63fdb69Smrg 6093d63fdb69Smrg # Now set the variables for building old libraries. 6094d63fdb69Smrg build_libtool_libs=no 6095d63fdb69Smrg oldlibs="$output" 6096d63fdb69Smrg objs="$objs$old_deplibs" 6097d63fdb69Smrg ;; 6098d63fdb69Smrg 6099d63fdb69Smrg lib) 6100d63fdb69Smrg # Make sure we only generate libraries of the form `libNAME.la'. 6101d63fdb69Smrg case $outputname in 6102d63fdb69Smrg lib*) 6103d63fdb69Smrg func_stripname 'lib' '.la' "$outputname" 6104d63fdb69Smrg name=$func_stripname_result 6105d63fdb69Smrg eval shared_ext=\"$shrext_cmds\" 6106d63fdb69Smrg eval libname=\"$libname_spec\" 6107d63fdb69Smrg ;; 6108d63fdb69Smrg *) 6109d63fdb69Smrg test "$module" = no && \ 6110d63fdb69Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 6111d63fdb69Smrg 6112d63fdb69Smrg if test "$need_lib_prefix" != no; then 6113d63fdb69Smrg # Add the "lib" prefix for modules if required 6114d63fdb69Smrg func_stripname '' '.la' "$outputname" 6115d63fdb69Smrg name=$func_stripname_result 6116d63fdb69Smrg eval shared_ext=\"$shrext_cmds\" 6117d63fdb69Smrg eval libname=\"$libname_spec\" 6118d63fdb69Smrg else 6119d63fdb69Smrg func_stripname '' '.la' "$outputname" 6120d63fdb69Smrg libname=$func_stripname_result 6121d63fdb69Smrg fi 6122d63fdb69Smrg ;; 6123d63fdb69Smrg esac 6124d63fdb69Smrg 6125d63fdb69Smrg if test -n "$objs"; then 6126d63fdb69Smrg if test "$deplibs_check_method" != pass_all; then 6127d63fdb69Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 6128d63fdb69Smrg else 6129d63fdb69Smrg $ECHO 6130d63fdb69Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 6131d63fdb69Smrg $ECHO "*** objects $objs is not portable!" 6132d63fdb69Smrg libobjs="$libobjs $objs" 6133d63fdb69Smrg fi 6134d63fdb69Smrg fi 6135d63fdb69Smrg 6136d63fdb69Smrg test "$dlself" != no && \ 6137d63fdb69Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 6138d63fdb69Smrg 6139d63fdb69Smrg set dummy $rpath 6140d63fdb69Smrg shift 6141d63fdb69Smrg test "$#" -gt 1 && \ 6142d63fdb69Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 6143d63fdb69Smrg 6144d63fdb69Smrg install_libdir="$1" 6145d63fdb69Smrg 6146d63fdb69Smrg oldlibs= 6147d63fdb69Smrg if test -z "$rpath"; then 6148d63fdb69Smrg if test "$build_libtool_libs" = yes; then 6149d63fdb69Smrg # Building a libtool convenience library. 6150d63fdb69Smrg # Some compilers have problems with a `.al' extension so 6151d63fdb69Smrg # convenience libraries should have the same extension an 6152d63fdb69Smrg # archive normally would. 6153d63fdb69Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 6154d63fdb69Smrg build_libtool_libs=convenience 6155d63fdb69Smrg build_old_libs=yes 6156d63fdb69Smrg fi 6157d63fdb69Smrg 6158d63fdb69Smrg test -n "$vinfo" && \ 6159d63fdb69Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 6160d63fdb69Smrg 6161d63fdb69Smrg test -n "$release" && \ 6162d63fdb69Smrg func_warning "\`-release' is ignored for convenience libraries" 6163d63fdb69Smrg else 6164d63fdb69Smrg 6165d63fdb69Smrg # Parse the version information argument. 6166d63fdb69Smrg save_ifs="$IFS"; IFS=':' 6167d63fdb69Smrg set dummy $vinfo 0 0 0 6168d63fdb69Smrg shift 6169d63fdb69Smrg IFS="$save_ifs" 6170d63fdb69Smrg 6171d63fdb69Smrg test -n "$7" && \ 6172d63fdb69Smrg func_fatal_help "too many parameters to \`-version-info'" 6173d63fdb69Smrg 6174d63fdb69Smrg # convert absolute version numbers to libtool ages 6175d63fdb69Smrg # this retains compatibility with .la files and attempts 6176d63fdb69Smrg # to make the code below a bit more comprehensible 6177d63fdb69Smrg 6178d63fdb69Smrg case $vinfo_number in 6179d63fdb69Smrg yes) 6180d63fdb69Smrg number_major="$1" 6181d63fdb69Smrg number_minor="$2" 6182d63fdb69Smrg number_revision="$3" 6183d63fdb69Smrg # 6184d63fdb69Smrg # There are really only two kinds -- those that 6185d63fdb69Smrg # use the current revision as the major version 6186d63fdb69Smrg # and those that subtract age and use age as 6187d63fdb69Smrg # a minor version. But, then there is irix 6188d63fdb69Smrg # which has an extra 1 added just for fun 6189d63fdb69Smrg # 6190d63fdb69Smrg case $version_type in 6191d63fdb69Smrg darwin|linux|osf|windows|none) 6192d63fdb69Smrg func_arith $number_major + $number_minor 6193d63fdb69Smrg current=$func_arith_result 6194d63fdb69Smrg age="$number_minor" 6195d63fdb69Smrg revision="$number_revision" 6196d63fdb69Smrg ;; 6197d63fdb69Smrg freebsd-aout|freebsd-elf|sunos) 6198d63fdb69Smrg current="$number_major" 6199d63fdb69Smrg revision="$number_minor" 6200d63fdb69Smrg age="0" 6201d63fdb69Smrg ;; 6202d63fdb69Smrg irix|nonstopux) 6203d63fdb69Smrg func_arith $number_major + $number_minor 6204d63fdb69Smrg current=$func_arith_result 6205d63fdb69Smrg age="$number_minor" 6206d63fdb69Smrg revision="$number_minor" 6207d63fdb69Smrg lt_irix_increment=no 6208d63fdb69Smrg ;; 6209d63fdb69Smrg esac 6210d63fdb69Smrg ;; 6211d63fdb69Smrg no) 6212d63fdb69Smrg current="$1" 6213d63fdb69Smrg revision="$2" 6214d63fdb69Smrg age="$3" 6215d63fdb69Smrg ;; 6216d63fdb69Smrg esac 6217d63fdb69Smrg 6218d63fdb69Smrg # Check that each of the things are valid numbers. 6219d63fdb69Smrg case $current in 6220d63fdb69Smrg 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]) ;; 6221d63fdb69Smrg *) 6222d63fdb69Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 6223d63fdb69Smrg func_fatal_error "\`$vinfo' is not valid version information" 6224d63fdb69Smrg ;; 6225d63fdb69Smrg esac 6226d63fdb69Smrg 6227d63fdb69Smrg case $revision in 6228d63fdb69Smrg 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]) ;; 6229d63fdb69Smrg *) 6230d63fdb69Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 6231d63fdb69Smrg func_fatal_error "\`$vinfo' is not valid version information" 6232d63fdb69Smrg ;; 6233d63fdb69Smrg esac 6234d63fdb69Smrg 6235d63fdb69Smrg case $age in 6236d63fdb69Smrg 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]) ;; 6237d63fdb69Smrg *) 6238d63fdb69Smrg func_error "AGE \`$age' must be a nonnegative integer" 6239d63fdb69Smrg func_fatal_error "\`$vinfo' is not valid version information" 6240d63fdb69Smrg ;; 6241d63fdb69Smrg esac 6242d63fdb69Smrg 6243d63fdb69Smrg if test "$age" -gt "$current"; then 6244d63fdb69Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 6245d63fdb69Smrg func_fatal_error "\`$vinfo' is not valid version information" 6246d63fdb69Smrg fi 6247d63fdb69Smrg 6248d63fdb69Smrg # Calculate the version variables. 6249d63fdb69Smrg major= 6250d63fdb69Smrg versuffix= 6251d63fdb69Smrg verstring= 6252d63fdb69Smrg case $version_type in 6253d63fdb69Smrg none) ;; 6254d63fdb69Smrg 6255d63fdb69Smrg darwin) 6256d63fdb69Smrg # Like Linux, but with the current version available in 6257d63fdb69Smrg # verstring for coding it into the library header 6258d63fdb69Smrg func_arith $current - $age 6259d63fdb69Smrg major=.$func_arith_result 6260d63fdb69Smrg versuffix="$major.$age.$revision" 6261d63fdb69Smrg # Darwin ld doesn't like 0 for these options... 6262d63fdb69Smrg func_arith $current + 1 6263d63fdb69Smrg minor_current=$func_arith_result 6264d63fdb69Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 6265d63fdb69Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 6266d63fdb69Smrg ;; 6267d63fdb69Smrg 6268d63fdb69Smrg freebsd-aout) 6269d63fdb69Smrg major=".$current" 6270d63fdb69Smrg versuffix=".$current.$revision"; 6271d63fdb69Smrg ;; 6272d63fdb69Smrg 6273d63fdb69Smrg freebsd-elf) 6274d63fdb69Smrg major=".$current" 6275d63fdb69Smrg versuffix=".$current" 6276d63fdb69Smrg ;; 6277d63fdb69Smrg 6278d63fdb69Smrg irix | nonstopux) 6279d63fdb69Smrg if test "X$lt_irix_increment" = "Xno"; then 6280d63fdb69Smrg func_arith $current - $age 6281d63fdb69Smrg else 6282d63fdb69Smrg func_arith $current - $age + 1 6283d63fdb69Smrg fi 6284d63fdb69Smrg major=$func_arith_result 6285d63fdb69Smrg 6286d63fdb69Smrg case $version_type in 6287d63fdb69Smrg nonstopux) verstring_prefix=nonstopux ;; 6288d63fdb69Smrg *) verstring_prefix=sgi ;; 6289d63fdb69Smrg esac 6290d63fdb69Smrg verstring="$verstring_prefix$major.$revision" 6291d63fdb69Smrg 6292d63fdb69Smrg # Add in all the interfaces that we are compatible with. 6293d63fdb69Smrg loop=$revision 6294d63fdb69Smrg while test "$loop" -ne 0; do 6295d63fdb69Smrg func_arith $revision - $loop 6296d63fdb69Smrg iface=$func_arith_result 6297d63fdb69Smrg func_arith $loop - 1 6298d63fdb69Smrg loop=$func_arith_result 6299d63fdb69Smrg verstring="$verstring_prefix$major.$iface:$verstring" 6300d63fdb69Smrg done 6301d63fdb69Smrg 6302d63fdb69Smrg # Before this point, $major must not contain `.'. 6303d63fdb69Smrg major=.$major 6304d63fdb69Smrg versuffix="$major.$revision" 6305d63fdb69Smrg ;; 6306d63fdb69Smrg 6307d63fdb69Smrg linux) 6308d63fdb69Smrg func_arith $current - $age 6309d63fdb69Smrg major=.$func_arith_result 6310d63fdb69Smrg versuffix="$major.$age.$revision" 6311d63fdb69Smrg ;; 6312d63fdb69Smrg 6313d63fdb69Smrg osf) 6314d63fdb69Smrg func_arith $current - $age 6315d63fdb69Smrg major=.$func_arith_result 6316d63fdb69Smrg versuffix=".$current.$age.$revision" 6317d63fdb69Smrg verstring="$current.$age.$revision" 6318d63fdb69Smrg 6319d63fdb69Smrg # Add in all the interfaces that we are compatible with. 6320d63fdb69Smrg loop=$age 6321d63fdb69Smrg while test "$loop" -ne 0; do 6322d63fdb69Smrg func_arith $current - $loop 6323d63fdb69Smrg iface=$func_arith_result 6324d63fdb69Smrg func_arith $loop - 1 6325d63fdb69Smrg loop=$func_arith_result 6326d63fdb69Smrg verstring="$verstring:${iface}.0" 6327d63fdb69Smrg done 6328d63fdb69Smrg 6329d63fdb69Smrg # Make executables depend on our current version. 6330d63fdb69Smrg verstring="$verstring:${current}.0" 6331d63fdb69Smrg ;; 6332d63fdb69Smrg 6333d63fdb69Smrg qnx) 6334d63fdb69Smrg major=".$current" 6335d63fdb69Smrg versuffix=".$current" 6336d63fdb69Smrg ;; 6337d63fdb69Smrg 6338d63fdb69Smrg sunos) 6339d63fdb69Smrg major=".$current" 6340d63fdb69Smrg versuffix=".$current.$revision" 6341d63fdb69Smrg ;; 6342d63fdb69Smrg 6343d63fdb69Smrg windows) 6344d63fdb69Smrg # Use '-' rather than '.', since we only want one 6345d63fdb69Smrg # extension on DOS 8.3 filesystems. 6346d63fdb69Smrg func_arith $current - $age 6347d63fdb69Smrg major=$func_arith_result 6348d63fdb69Smrg versuffix="-$major" 6349d63fdb69Smrg ;; 6350d63fdb69Smrg 6351d63fdb69Smrg *) 6352d63fdb69Smrg func_fatal_configuration "unknown library version type \`$version_type'" 6353d63fdb69Smrg ;; 6354d63fdb69Smrg esac 6355d63fdb69Smrg 6356d63fdb69Smrg # Clear the version info if we defaulted, and they specified a release. 6357d63fdb69Smrg if test -z "$vinfo" && test -n "$release"; then 6358d63fdb69Smrg major= 6359d63fdb69Smrg case $version_type in 6360d63fdb69Smrg darwin) 6361d63fdb69Smrg # we can't check for "0.0" in archive_cmds due to quoting 6362d63fdb69Smrg # problems, so we reset it completely 6363d63fdb69Smrg verstring= 6364d63fdb69Smrg ;; 6365d63fdb69Smrg *) 6366d63fdb69Smrg verstring="0.0" 6367d63fdb69Smrg ;; 6368d63fdb69Smrg esac 6369d63fdb69Smrg if test "$need_version" = no; then 6370d63fdb69Smrg versuffix= 6371d63fdb69Smrg else 6372d63fdb69Smrg versuffix=".0.0" 6373d63fdb69Smrg fi 6374d63fdb69Smrg fi 6375d63fdb69Smrg 6376d63fdb69Smrg # Remove version info from name if versioning should be avoided 6377d63fdb69Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 6378d63fdb69Smrg major= 6379d63fdb69Smrg versuffix= 6380d63fdb69Smrg verstring="" 6381d63fdb69Smrg fi 6382d63fdb69Smrg 6383d63fdb69Smrg # Check to see if the archive will have undefined symbols. 6384d63fdb69Smrg if test "$allow_undefined" = yes; then 6385d63fdb69Smrg if test "$allow_undefined_flag" = unsupported; then 6386d63fdb69Smrg func_warning "undefined symbols not allowed in $host shared libraries" 6387d63fdb69Smrg build_libtool_libs=no 6388d63fdb69Smrg build_old_libs=yes 6389d63fdb69Smrg fi 6390d63fdb69Smrg else 6391d63fdb69Smrg # Don't allow undefined symbols. 6392d63fdb69Smrg allow_undefined_flag="$no_undefined_flag" 6393d63fdb69Smrg fi 6394d63fdb69Smrg 6395d63fdb69Smrg fi 6396d63fdb69Smrg 6397d63fdb69Smrg func_generate_dlsyms "$libname" "$libname" "yes" 6398d63fdb69Smrg libobjs="$libobjs $symfileobj" 6399d63fdb69Smrg test "X$libobjs" = "X " && libobjs= 6400d63fdb69Smrg 6401d63fdb69Smrg if test "$mode" != relink; then 6402d63fdb69Smrg # Remove our outputs, but don't remove object files since they 6403d63fdb69Smrg # may have been created when compiling PIC objects. 6404d63fdb69Smrg removelist= 6405d63fdb69Smrg tempremovelist=`$ECHO "$output_objdir/*"` 6406d63fdb69Smrg for p in $tempremovelist; do 6407d63fdb69Smrg case $p in 6408d63fdb69Smrg *.$objext | *.gcno) 6409d63fdb69Smrg ;; 6410d63fdb69Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 6411d63fdb69Smrg if test "X$precious_files_regex" != "X"; then 6412d63fdb69Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 6413d63fdb69Smrg then 6414d63fdb69Smrg continue 6415d63fdb69Smrg fi 6416d63fdb69Smrg fi 6417d63fdb69Smrg removelist="$removelist $p" 6418d63fdb69Smrg ;; 6419d63fdb69Smrg *) ;; 6420d63fdb69Smrg esac 6421d63fdb69Smrg done 6422d63fdb69Smrg test -n "$removelist" && \ 6423d63fdb69Smrg func_show_eval "${RM}r \$removelist" 6424d63fdb69Smrg fi 6425d63fdb69Smrg 6426d63fdb69Smrg # Now set the variables for building old libraries. 6427d63fdb69Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 6428d63fdb69Smrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 6429d63fdb69Smrg 6430d63fdb69Smrg # Transform .lo files to .o files. 6431d63fdb69Smrg oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 6432d63fdb69Smrg fi 6433d63fdb69Smrg 6434d63fdb69Smrg # Eliminate all temporary directories. 6435d63fdb69Smrg #for path in $notinst_path; do 6436d63fdb69Smrg # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` 6437d63fdb69Smrg # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` 6438d63fdb69Smrg # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` 6439d63fdb69Smrg #done 6440d63fdb69Smrg 6441d63fdb69Smrg if test -n "$xrpath"; then 6442d63fdb69Smrg # If the user specified any rpath flags, then add them. 6443d63fdb69Smrg temp_xrpath= 6444d63fdb69Smrg for libdir in $xrpath; do 6445d63fdb69Smrg temp_xrpath="$temp_xrpath -R$libdir" 6446d63fdb69Smrg case "$finalize_rpath " in 6447d63fdb69Smrg *" $libdir "*) ;; 6448d63fdb69Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 6449d63fdb69Smrg esac 6450d63fdb69Smrg done 6451d63fdb69Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 6452d63fdb69Smrg dependency_libs="$temp_xrpath $dependency_libs" 6453d63fdb69Smrg fi 6454d63fdb69Smrg fi 6455d63fdb69Smrg 6456d63fdb69Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 6457d63fdb69Smrg old_dlfiles="$dlfiles" 6458d63fdb69Smrg dlfiles= 6459d63fdb69Smrg for lib in $old_dlfiles; do 6460d63fdb69Smrg case " $dlprefiles $dlfiles " in 6461d63fdb69Smrg *" $lib "*) ;; 6462d63fdb69Smrg *) dlfiles="$dlfiles $lib" ;; 6463d63fdb69Smrg esac 6464d63fdb69Smrg done 6465d63fdb69Smrg 6466d63fdb69Smrg # Make sure dlprefiles contains only unique files 6467d63fdb69Smrg old_dlprefiles="$dlprefiles" 6468d63fdb69Smrg dlprefiles= 6469d63fdb69Smrg for lib in $old_dlprefiles; do 6470d63fdb69Smrg case "$dlprefiles " in 6471d63fdb69Smrg *" $lib "*) ;; 6472d63fdb69Smrg *) dlprefiles="$dlprefiles $lib" ;; 6473d63fdb69Smrg esac 6474d63fdb69Smrg done 6475d63fdb69Smrg 6476d63fdb69Smrg if test "$build_libtool_libs" = yes; then 6477d63fdb69Smrg if test -n "$rpath"; then 6478d63fdb69Smrg case $host in 6479d63fdb69Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) 6480d63fdb69Smrg # these systems don't actually have a c library (as such)! 6481d63fdb69Smrg ;; 6482d63fdb69Smrg *-*-rhapsody* | *-*-darwin1.[012]) 6483d63fdb69Smrg # Rhapsody C library is in the System framework 6484d63fdb69Smrg deplibs="$deplibs System.ltframework" 6485d63fdb69Smrg ;; 6486d63fdb69Smrg *-*-netbsd*) 6487d63fdb69Smrg # Don't link with libc until the a.out ld.so is fixed. 6488d63fdb69Smrg ;; 6489d63fdb69Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 6490d63fdb69Smrg # Do not include libc due to us having libc/libc_r. 6491d63fdb69Smrg ;; 6492d63fdb69Smrg *-*-sco3.2v5* | *-*-sco5v6*) 6493d63fdb69Smrg # Causes problems with __ctype 6494d63fdb69Smrg ;; 6495d63fdb69Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 6496d63fdb69Smrg # Compiler inserts libc in the correct place for threads to work 6497d63fdb69Smrg ;; 6498d63fdb69Smrg *) 6499d63fdb69Smrg # Add libc to deplibs on all other systems if necessary. 6500d63fdb69Smrg if test "$build_libtool_need_lc" = "yes"; then 6501d63fdb69Smrg deplibs="$deplibs -lc" 6502d63fdb69Smrg fi 6503d63fdb69Smrg ;; 6504d63fdb69Smrg esac 6505d63fdb69Smrg fi 6506d63fdb69Smrg 6507d63fdb69Smrg # Transform deplibs into only deplibs that can be linked in shared. 6508d63fdb69Smrg name_save=$name 6509d63fdb69Smrg libname_save=$libname 6510d63fdb69Smrg release_save=$release 6511d63fdb69Smrg versuffix_save=$versuffix 6512d63fdb69Smrg major_save=$major 6513d63fdb69Smrg # I'm not sure if I'm treating the release correctly. I think 6514d63fdb69Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 6515d63fdb69Smrg # add it in twice. Is that correct? 6516d63fdb69Smrg release="" 6517d63fdb69Smrg versuffix="" 6518d63fdb69Smrg major="" 6519d63fdb69Smrg newdeplibs= 6520d63fdb69Smrg droppeddeps=no 6521d63fdb69Smrg case $deplibs_check_method in 6522d63fdb69Smrg pass_all) 6523d63fdb69Smrg # Don't check for shared/static. Everything works. 6524d63fdb69Smrg # This might be a little naive. We might want to check 6525d63fdb69Smrg # whether the library exists or not. But this is on 6526d63fdb69Smrg # osf3 & osf4 and I'm not really sure... Just 6527d63fdb69Smrg # implementing what was already the behavior. 6528d63fdb69Smrg newdeplibs=$deplibs 6529d63fdb69Smrg ;; 6530d63fdb69Smrg test_compile) 6531d63fdb69Smrg # This code stresses the "libraries are programs" paradigm to its 6532d63fdb69Smrg # limits. Maybe even breaks it. We compile a program, linking it 6533d63fdb69Smrg # against the deplibs as a proxy for the library. Then we can check 6534d63fdb69Smrg # whether they linked in statically or dynamically with ldd. 6535d63fdb69Smrg $opt_dry_run || $RM conftest.c 6536d63fdb69Smrg cat > conftest.c <<EOF 6537d63fdb69Smrg int main() { return 0; } 6538d63fdb69SmrgEOF 6539d63fdb69Smrg $opt_dry_run || $RM conftest 6540d63fdb69Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 6541d63fdb69Smrg ldd_output=`ldd conftest` 6542d63fdb69Smrg for i in $deplibs; do 6543d63fdb69Smrg case $i in 6544d63fdb69Smrg -l*) 6545d63fdb69Smrg func_stripname -l '' "$i" 6546d63fdb69Smrg name=$func_stripname_result 6547d63fdb69Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6548d63fdb69Smrg case " $predeps $postdeps " in 6549d63fdb69Smrg *" $i "*) 6550d63fdb69Smrg newdeplibs="$newdeplibs $i" 6551d63fdb69Smrg i="" 6552d63fdb69Smrg ;; 6553d63fdb69Smrg esac 6554d63fdb69Smrg fi 6555d63fdb69Smrg if test -n "$i" ; then 6556d63fdb69Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6557d63fdb69Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6558d63fdb69Smrg set dummy $deplib_matches; shift 6559d63fdb69Smrg deplib_match=$1 6560d63fdb69Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6561d63fdb69Smrg newdeplibs="$newdeplibs $i" 6562d63fdb69Smrg else 6563d63fdb69Smrg droppeddeps=yes 6564d63fdb69Smrg $ECHO 6565d63fdb69Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6566d63fdb69Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6567d63fdb69Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6568d63fdb69Smrg $ECHO "*** shared version of the library, which I believe you do not have" 6569d63fdb69Smrg $ECHO "*** because a test_compile did reveal that the linker did not use it for" 6570d63fdb69Smrg $ECHO "*** its dynamic dependency list that programs get resolved with at runtime." 6571d63fdb69Smrg fi 6572d63fdb69Smrg fi 6573d63fdb69Smrg ;; 6574d63fdb69Smrg *) 6575d63fdb69Smrg newdeplibs="$newdeplibs $i" 6576d63fdb69Smrg ;; 6577d63fdb69Smrg esac 6578d63fdb69Smrg done 6579d63fdb69Smrg else 6580d63fdb69Smrg # Error occurred in the first compile. Let's try to salvage 6581d63fdb69Smrg # the situation: Compile a separate program for each library. 6582d63fdb69Smrg for i in $deplibs; do 6583d63fdb69Smrg case $i in 6584d63fdb69Smrg -l*) 6585d63fdb69Smrg func_stripname -l '' "$i" 6586d63fdb69Smrg name=$func_stripname_result 6587d63fdb69Smrg $opt_dry_run || $RM conftest 6588d63fdb69Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 6589d63fdb69Smrg ldd_output=`ldd conftest` 6590d63fdb69Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6591d63fdb69Smrg case " $predeps $postdeps " in 6592d63fdb69Smrg *" $i "*) 6593d63fdb69Smrg newdeplibs="$newdeplibs $i" 6594d63fdb69Smrg i="" 6595d63fdb69Smrg ;; 6596d63fdb69Smrg esac 6597d63fdb69Smrg fi 6598d63fdb69Smrg if test -n "$i" ; then 6599d63fdb69Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6600d63fdb69Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6601d63fdb69Smrg set dummy $deplib_matches; shift 6602d63fdb69Smrg deplib_match=$1 6603d63fdb69Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6604d63fdb69Smrg newdeplibs="$newdeplibs $i" 6605d63fdb69Smrg else 6606d63fdb69Smrg droppeddeps=yes 6607d63fdb69Smrg $ECHO 6608d63fdb69Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6609d63fdb69Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6610d63fdb69Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6611d63fdb69Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6612d63fdb69Smrg $ECHO "*** because a test_compile did reveal that the linker did not use this one" 6613d63fdb69Smrg $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime." 6614d63fdb69Smrg fi 6615d63fdb69Smrg fi 6616d63fdb69Smrg else 6617d63fdb69Smrg droppeddeps=yes 6618d63fdb69Smrg $ECHO 6619d63fdb69Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 6620d63fdb69Smrg $ECHO "*** make it link in! You will probably need to install it or some" 6621d63fdb69Smrg $ECHO "*** library that it depends on before this library will be fully" 6622d63fdb69Smrg $ECHO "*** functional. Installing it before continuing would be even better." 6623d63fdb69Smrg fi 6624d63fdb69Smrg ;; 6625d63fdb69Smrg *) 6626d63fdb69Smrg newdeplibs="$newdeplibs $i" 6627d63fdb69Smrg ;; 6628d63fdb69Smrg esac 6629d63fdb69Smrg done 6630d63fdb69Smrg fi 6631d63fdb69Smrg ;; 6632d63fdb69Smrg file_magic*) 6633d63fdb69Smrg set dummy $deplibs_check_method; shift 6634d63fdb69Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6635d63fdb69Smrg for a_deplib in $deplibs; do 6636d63fdb69Smrg case $a_deplib in 6637d63fdb69Smrg -l*) 6638d63fdb69Smrg func_stripname -l '' "$a_deplib" 6639d63fdb69Smrg name=$func_stripname_result 6640d63fdb69Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6641d63fdb69Smrg case " $predeps $postdeps " in 6642d63fdb69Smrg *" $a_deplib "*) 6643d63fdb69Smrg newdeplibs="$newdeplibs $a_deplib" 6644d63fdb69Smrg a_deplib="" 6645d63fdb69Smrg ;; 6646d63fdb69Smrg esac 6647d63fdb69Smrg fi 6648d63fdb69Smrg if test -n "$a_deplib" ; then 6649d63fdb69Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6650d63fdb69Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6651d63fdb69Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6652d63fdb69Smrg for potent_lib in $potential_libs; do 6653d63fdb69Smrg # Follow soft links. 6654d63fdb69Smrg if ls -lLd "$potent_lib" 2>/dev/null | 6655d63fdb69Smrg $GREP " -> " >/dev/null; then 6656d63fdb69Smrg continue 6657d63fdb69Smrg fi 6658d63fdb69Smrg # The statement above tries to avoid entering an 6659d63fdb69Smrg # endless loop below, in case of cyclic links. 6660d63fdb69Smrg # We might still enter an endless loop, since a link 6661d63fdb69Smrg # loop can be closed while we follow links, 6662d63fdb69Smrg # but so what? 6663d63fdb69Smrg potlib="$potent_lib" 6664d63fdb69Smrg while test -h "$potlib" 2>/dev/null; do 6665d63fdb69Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 6666d63fdb69Smrg case $potliblink in 6667d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 6668d63fdb69Smrg *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 6669d63fdb69Smrg esac 6670d63fdb69Smrg done 6671d63fdb69Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 6672d63fdb69Smrg $SED -e 10q | 6673d63fdb69Smrg $EGREP "$file_magic_regex" > /dev/null; then 6674d63fdb69Smrg newdeplibs="$newdeplibs $a_deplib" 6675d63fdb69Smrg a_deplib="" 6676d63fdb69Smrg break 2 6677d63fdb69Smrg fi 6678d63fdb69Smrg done 6679d63fdb69Smrg done 6680d63fdb69Smrg fi 6681d63fdb69Smrg if test -n "$a_deplib" ; then 6682d63fdb69Smrg droppeddeps=yes 6683d63fdb69Smrg $ECHO 6684d63fdb69Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 6685d63fdb69Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6686d63fdb69Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6687d63fdb69Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6688d63fdb69Smrg $ECHO "*** because I did check the linker path looking for a file starting" 6689d63fdb69Smrg if test -z "$potlib" ; then 6690d63fdb69Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 6691d63fdb69Smrg else 6692d63fdb69Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 6693d63fdb69Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 6694d63fdb69Smrg fi 6695d63fdb69Smrg fi 6696d63fdb69Smrg ;; 6697d63fdb69Smrg *) 6698d63fdb69Smrg # Add a -L argument. 6699d63fdb69Smrg newdeplibs="$newdeplibs $a_deplib" 6700d63fdb69Smrg ;; 6701d63fdb69Smrg esac 6702d63fdb69Smrg done # Gone through all deplibs. 6703d63fdb69Smrg ;; 6704d63fdb69Smrg match_pattern*) 6705d63fdb69Smrg set dummy $deplibs_check_method; shift 6706d63fdb69Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6707d63fdb69Smrg for a_deplib in $deplibs; do 6708d63fdb69Smrg case $a_deplib in 6709d63fdb69Smrg -l*) 6710d63fdb69Smrg func_stripname -l '' "$a_deplib" 6711d63fdb69Smrg name=$func_stripname_result 6712d63fdb69Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6713d63fdb69Smrg case " $predeps $postdeps " in 6714d63fdb69Smrg *" $a_deplib "*) 6715d63fdb69Smrg newdeplibs="$newdeplibs $a_deplib" 6716d63fdb69Smrg a_deplib="" 6717d63fdb69Smrg ;; 6718d63fdb69Smrg esac 6719d63fdb69Smrg fi 6720d63fdb69Smrg if test -n "$a_deplib" ; then 6721d63fdb69Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6722d63fdb69Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6723d63fdb69Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6724d63fdb69Smrg for potent_lib in $potential_libs; do 6725d63fdb69Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 6726d63fdb69Smrg if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ 6727d63fdb69Smrg $EGREP "$match_pattern_regex" > /dev/null; then 6728d63fdb69Smrg newdeplibs="$newdeplibs $a_deplib" 6729d63fdb69Smrg a_deplib="" 6730d63fdb69Smrg break 2 6731d63fdb69Smrg fi 6732d63fdb69Smrg done 6733d63fdb69Smrg done 6734d63fdb69Smrg fi 6735d63fdb69Smrg if test -n "$a_deplib" ; then 6736d63fdb69Smrg droppeddeps=yes 6737d63fdb69Smrg $ECHO 6738d63fdb69Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 6739d63fdb69Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6740d63fdb69Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6741d63fdb69Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6742d63fdb69Smrg $ECHO "*** because I did check the linker path looking for a file starting" 6743d63fdb69Smrg if test -z "$potlib" ; then 6744d63fdb69Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 6745d63fdb69Smrg else 6746d63fdb69Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 6747d63fdb69Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 6748d63fdb69Smrg fi 6749d63fdb69Smrg fi 6750d63fdb69Smrg ;; 6751d63fdb69Smrg *) 6752d63fdb69Smrg # Add a -L argument. 6753d63fdb69Smrg newdeplibs="$newdeplibs $a_deplib" 6754d63fdb69Smrg ;; 6755d63fdb69Smrg esac 6756d63fdb69Smrg done # Gone through all deplibs. 6757d63fdb69Smrg ;; 6758d63fdb69Smrg none | unknown | *) 6759d63fdb69Smrg newdeplibs="" 6760d63fdb69Smrg tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ 6761d63fdb69Smrg -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` 6762d63fdb69Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6763d63fdb69Smrg for i in $predeps $postdeps ; do 6764d63fdb69Smrg # can't use Xsed below, because $i might contain '/' 6765d63fdb69Smrg tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` 6766d63fdb69Smrg done 6767d63fdb69Smrg fi 6768d63fdb69Smrg if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | 6769d63fdb69Smrg $GREP . >/dev/null; then 6770d63fdb69Smrg $ECHO 6771d63fdb69Smrg if test "X$deplibs_check_method" = "Xnone"; then 6772d63fdb69Smrg $ECHO "*** Warning: inter-library dependencies are not supported in this platform." 6773d63fdb69Smrg else 6774d63fdb69Smrg $ECHO "*** Warning: inter-library dependencies are not known to be supported." 6775d63fdb69Smrg fi 6776d63fdb69Smrg $ECHO "*** All declared inter-library dependencies are being dropped." 6777d63fdb69Smrg droppeddeps=yes 6778d63fdb69Smrg fi 6779d63fdb69Smrg ;; 6780d63fdb69Smrg esac 6781d63fdb69Smrg versuffix=$versuffix_save 6782d63fdb69Smrg major=$major_save 6783d63fdb69Smrg release=$release_save 6784d63fdb69Smrg libname=$libname_save 6785d63fdb69Smrg name=$name_save 6786d63fdb69Smrg 6787d63fdb69Smrg case $host in 6788d63fdb69Smrg *-*-rhapsody* | *-*-darwin1.[012]) 6789d63fdb69Smrg # On Rhapsody replace the C library with the System framework 6790d63fdb69Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 6791d63fdb69Smrg ;; 6792d63fdb69Smrg esac 6793d63fdb69Smrg 6794d63fdb69Smrg if test "$droppeddeps" = yes; then 6795d63fdb69Smrg if test "$module" = yes; then 6796d63fdb69Smrg $ECHO 6797d63fdb69Smrg $ECHO "*** Warning: libtool could not satisfy all declared inter-library" 6798d63fdb69Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 6799d63fdb69Smrg $ECHO "*** a static module, that should work as long as the dlopening" 6800d63fdb69Smrg $ECHO "*** application is linked with the -dlopen flag." 6801d63fdb69Smrg if test -z "$global_symbol_pipe"; then 6802d63fdb69Smrg $ECHO 6803d63fdb69Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 6804d63fdb69Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 6805d63fdb69Smrg $ECHO "*** not find such a program. So, this module is probably useless." 6806d63fdb69Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 6807d63fdb69Smrg fi 6808d63fdb69Smrg if test "$build_old_libs" = no; then 6809d63fdb69Smrg oldlibs="$output_objdir/$libname.$libext" 6810d63fdb69Smrg build_libtool_libs=module 6811d63fdb69Smrg build_old_libs=yes 6812d63fdb69Smrg else 6813d63fdb69Smrg build_libtool_libs=no 6814d63fdb69Smrg fi 6815d63fdb69Smrg else 6816d63fdb69Smrg $ECHO "*** The inter-library dependencies that have been dropped here will be" 6817d63fdb69Smrg $ECHO "*** automatically added whenever a program is linked with this library" 6818d63fdb69Smrg $ECHO "*** or is declared to -dlopen it." 6819d63fdb69Smrg 6820d63fdb69Smrg if test "$allow_undefined" = no; then 6821d63fdb69Smrg $ECHO 6822d63fdb69Smrg $ECHO "*** Since this library must not contain undefined symbols," 6823d63fdb69Smrg $ECHO "*** because either the platform does not support them or" 6824d63fdb69Smrg $ECHO "*** it was explicitly requested with -no-undefined," 6825d63fdb69Smrg $ECHO "*** libtool will only create a static version of it." 6826d63fdb69Smrg if test "$build_old_libs" = no; then 6827d63fdb69Smrg oldlibs="$output_objdir/$libname.$libext" 6828d63fdb69Smrg build_libtool_libs=module 6829d63fdb69Smrg build_old_libs=yes 6830d63fdb69Smrg else 6831d63fdb69Smrg build_libtool_libs=no 6832d63fdb69Smrg fi 6833d63fdb69Smrg fi 6834d63fdb69Smrg fi 6835d63fdb69Smrg fi 6836d63fdb69Smrg # Done checking deplibs! 6837d63fdb69Smrg deplibs=$newdeplibs 6838d63fdb69Smrg fi 6839d63fdb69Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 6840d63fdb69Smrg case $host in 6841d63fdb69Smrg *-*-darwin*) 6842d63fdb69Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6843d63fdb69Smrg new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6844d63fdb69Smrg deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6845d63fdb69Smrg ;; 6846d63fdb69Smrg esac 6847d63fdb69Smrg 6848d63fdb69Smrg # move library search paths that coincide with paths to not yet 6849d63fdb69Smrg # installed libraries to the beginning of the library search list 6850d63fdb69Smrg new_libs= 6851d63fdb69Smrg for path in $notinst_path; do 6852d63fdb69Smrg case " $new_libs " in 6853d63fdb69Smrg *" -L$path/$objdir "*) ;; 6854d63fdb69Smrg *) 6855d63fdb69Smrg case " $deplibs " in 6856d63fdb69Smrg *" -L$path/$objdir "*) 6857d63fdb69Smrg new_libs="$new_libs -L$path/$objdir" ;; 6858d63fdb69Smrg esac 6859d63fdb69Smrg ;; 6860d63fdb69Smrg esac 6861d63fdb69Smrg done 6862d63fdb69Smrg for deplib in $deplibs; do 6863d63fdb69Smrg case $deplib in 6864d63fdb69Smrg -L*) 6865d63fdb69Smrg case " $new_libs " in 6866d63fdb69Smrg *" $deplib "*) ;; 6867d63fdb69Smrg *) new_libs="$new_libs $deplib" ;; 6868d63fdb69Smrg esac 6869d63fdb69Smrg ;; 6870d63fdb69Smrg *) new_libs="$new_libs $deplib" ;; 6871d63fdb69Smrg esac 6872d63fdb69Smrg done 6873d63fdb69Smrg deplibs="$new_libs" 6874d63fdb69Smrg 6875d63fdb69Smrg # All the library-specific variables (install_libdir is set above). 6876d63fdb69Smrg library_names= 6877d63fdb69Smrg old_library= 6878d63fdb69Smrg dlname= 6879d63fdb69Smrg 6880d63fdb69Smrg # Test again, we may have decided not to build it any more 6881d63fdb69Smrg if test "$build_libtool_libs" = yes; then 6882d63fdb69Smrg if test "$hardcode_into_libs" = yes; then 6883d63fdb69Smrg # Hardcode the library paths 6884d63fdb69Smrg hardcode_libdirs= 6885d63fdb69Smrg dep_rpath= 6886d63fdb69Smrg rpath="$finalize_rpath" 6887d63fdb69Smrg test "$mode" != relink && rpath="$compile_rpath$rpath" 6888d63fdb69Smrg for libdir in $rpath; do 6889d63fdb69Smrg if test -n "$hardcode_libdir_flag_spec"; then 6890d63fdb69Smrg if test -n "$hardcode_libdir_separator"; then 6891d63fdb69Smrg if test -z "$hardcode_libdirs"; then 6892d63fdb69Smrg hardcode_libdirs="$libdir" 6893d63fdb69Smrg else 6894d63fdb69Smrg # Just accumulate the unique libdirs. 6895d63fdb69Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 6896d63fdb69Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 6897d63fdb69Smrg ;; 6898d63fdb69Smrg *) 6899d63fdb69Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 6900d63fdb69Smrg ;; 6901d63fdb69Smrg esac 6902d63fdb69Smrg fi 6903d63fdb69Smrg else 6904d63fdb69Smrg eval flag=\"$hardcode_libdir_flag_spec\" 6905d63fdb69Smrg dep_rpath="$dep_rpath $flag" 6906d63fdb69Smrg fi 6907d63fdb69Smrg elif test -n "$runpath_var"; then 6908d63fdb69Smrg case "$perm_rpath " in 6909d63fdb69Smrg *" $libdir "*) ;; 6910d63fdb69Smrg *) perm_rpath="$perm_rpath $libdir" ;; 6911d63fdb69Smrg esac 6912d63fdb69Smrg fi 6913d63fdb69Smrg done 6914d63fdb69Smrg # Substitute the hardcoded libdirs into the rpath. 6915d63fdb69Smrg if test -n "$hardcode_libdir_separator" && 6916d63fdb69Smrg test -n "$hardcode_libdirs"; then 6917d63fdb69Smrg libdir="$hardcode_libdirs" 6918d63fdb69Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 6919d63fdb69Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 6920d63fdb69Smrg else 6921d63fdb69Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 6922d63fdb69Smrg fi 6923d63fdb69Smrg fi 6924d63fdb69Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 6925d63fdb69Smrg # We should set the runpath_var. 6926d63fdb69Smrg rpath= 6927d63fdb69Smrg for dir in $perm_rpath; do 6928d63fdb69Smrg rpath="$rpath$dir:" 6929d63fdb69Smrg done 6930d63fdb69Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 6931d63fdb69Smrg fi 6932d63fdb69Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 6933d63fdb69Smrg fi 69343da084b3Smrg 6935d63fdb69Smrg shlibpath="$finalize_shlibpath" 6936d63fdb69Smrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 6937d63fdb69Smrg if test -n "$shlibpath"; then 6938d63fdb69Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 6939d63fdb69Smrg fi 69403da084b3Smrg 6941d63fdb69Smrg # Get the real and link names of the library. 6942d63fdb69Smrg eval shared_ext=\"$shrext_cmds\" 6943d63fdb69Smrg eval library_names=\"$library_names_spec\" 6944d63fdb69Smrg set dummy $library_names 6945d63fdb69Smrg shift 6946d63fdb69Smrg realname="$1" 6947d63fdb69Smrg shift 69483da084b3Smrg 6949d63fdb69Smrg if test -n "$soname_spec"; then 6950d63fdb69Smrg eval soname=\"$soname_spec\" 6951d63fdb69Smrg else 6952d63fdb69Smrg soname="$realname" 6953d63fdb69Smrg fi 6954d63fdb69Smrg if test -z "$dlname"; then 6955d63fdb69Smrg dlname=$soname 6956d63fdb69Smrg fi 69573da084b3Smrg 6958d63fdb69Smrg lib="$output_objdir/$realname" 6959d63fdb69Smrg linknames= 6960d63fdb69Smrg for link 6961d63fdb69Smrg do 6962d63fdb69Smrg linknames="$linknames $link" 6963d63fdb69Smrg done 69643da084b3Smrg 6965d63fdb69Smrg # Use standard objects if they are pic 6966d63fdb69Smrg test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 6967d63fdb69Smrg test "X$libobjs" = "X " && libobjs= 69683da084b3Smrg 6969d63fdb69Smrg delfiles= 6970d63fdb69Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 6971d63fdb69Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 6972d63fdb69Smrg export_symbols="$output_objdir/$libname.uexp" 6973d63fdb69Smrg delfiles="$delfiles $export_symbols" 6974d63fdb69Smrg fi 69753da084b3Smrg 6976d63fdb69Smrg orig_export_symbols= 6977d63fdb69Smrg case $host_os in 6978d63fdb69Smrg cygwin* | mingw* | cegcc*) 6979d63fdb69Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 6980d63fdb69Smrg # exporting using user supplied symfile 6981d63fdb69Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 6982d63fdb69Smrg # and it's NOT already a .def file. Must figure out 6983d63fdb69Smrg # which of the given symbols are data symbols and tag 6984d63fdb69Smrg # them as such. So, trigger use of export_symbols_cmds. 6985d63fdb69Smrg # export_symbols gets reassigned inside the "prepare 6986d63fdb69Smrg # the list of exported symbols" if statement, so the 6987d63fdb69Smrg # include_expsyms logic still works. 6988d63fdb69Smrg orig_export_symbols="$export_symbols" 6989d63fdb69Smrg export_symbols= 6990d63fdb69Smrg always_export_symbols=yes 6991d63fdb69Smrg fi 6992d63fdb69Smrg fi 6993d63fdb69Smrg ;; 6994d63fdb69Smrg esac 69953da084b3Smrg 6996d63fdb69Smrg # Prepare the list of exported symbols 6997d63fdb69Smrg if test -z "$export_symbols"; then 6998d63fdb69Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 6999d63fdb69Smrg func_verbose "generating symbol list for \`$libname.la'" 7000d63fdb69Smrg export_symbols="$output_objdir/$libname.exp" 7001d63fdb69Smrg $opt_dry_run || $RM $export_symbols 7002d63fdb69Smrg cmds=$export_symbols_cmds 7003d63fdb69Smrg save_ifs="$IFS"; IFS='~' 7004d63fdb69Smrg for cmd in $cmds; do 7005d63fdb69Smrg IFS="$save_ifs" 7006d63fdb69Smrg eval cmd=\"$cmd\" 7007d63fdb69Smrg func_len " $cmd" 7008d63fdb69Smrg len=$func_len_result 7009d63fdb69Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7010d63fdb69Smrg func_show_eval "$cmd" 'exit $?' 7011d63fdb69Smrg skipped_export=false 7012d63fdb69Smrg else 7013d63fdb69Smrg # The command line is too long to execute in one step. 7014d63fdb69Smrg func_verbose "using reloadable object file for export list..." 7015d63fdb69Smrg skipped_export=: 7016d63fdb69Smrg # Break out early, otherwise skipped_export may be 7017d63fdb69Smrg # set to false by a later but shorter cmd. 7018d63fdb69Smrg break 7019d63fdb69Smrg fi 7020d63fdb69Smrg done 7021d63fdb69Smrg IFS="$save_ifs" 7022d63fdb69Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 7023d63fdb69Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7024d63fdb69Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7025d63fdb69Smrg fi 7026d63fdb69Smrg fi 7027d63fdb69Smrg fi 70283da084b3Smrg 7029d63fdb69Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7030d63fdb69Smrg tmp_export_symbols="$export_symbols" 7031d63fdb69Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7032d63fdb69Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 7033d63fdb69Smrg fi 70343da084b3Smrg 7035d63fdb69Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 7036d63fdb69Smrg # The given exports_symbols file has to be filtered, so filter it. 7037d63fdb69Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7038d63fdb69Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7039d63fdb69Smrg # 's' commands which not all seds can handle. GNU sed should be fine 7040d63fdb69Smrg # though. Also, the filter scales superlinearly with the number of 7041d63fdb69Smrg # global variables. join(1) would be nice here, but unfortunately 7042d63fdb69Smrg # isn't a blessed tool. 7043d63fdb69Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7044d63fdb69Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7045d63fdb69Smrg export_symbols=$output_objdir/$libname.def 7046d63fdb69Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 70473da084b3Smrg fi 70483da084b3Smrg 7049d63fdb69Smrg tmp_deplibs= 7050d63fdb69Smrg for test_deplib in $deplibs; do 7051d63fdb69Smrg case " $convenience " in 7052d63fdb69Smrg *" $test_deplib "*) ;; 7053d63fdb69Smrg *) 7054d63fdb69Smrg tmp_deplibs="$tmp_deplibs $test_deplib" 7055d63fdb69Smrg ;; 7056d63fdb69Smrg esac 7057d63fdb69Smrg done 7058d63fdb69Smrg deplibs="$tmp_deplibs" 70593da084b3Smrg 7060d63fdb69Smrg if test -n "$convenience"; then 7061d63fdb69Smrg if test -n "$whole_archive_flag_spec" && 7062d63fdb69Smrg test "$compiler_needs_object" = yes && 7063d63fdb69Smrg test -z "$libobjs"; then 7064d63fdb69Smrg # extract the archives, so we have objects to list. 7065d63fdb69Smrg # TODO: could optimize this to just extract one archive. 7066d63fdb69Smrg whole_archive_flag_spec= 7067d63fdb69Smrg fi 7068d63fdb69Smrg if test -n "$whole_archive_flag_spec"; then 7069d63fdb69Smrg save_libobjs=$libobjs 7070d63fdb69Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7071d63fdb69Smrg test "X$libobjs" = "X " && libobjs= 7072d63fdb69Smrg else 7073d63fdb69Smrg gentop="$output_objdir/${outputname}x" 7074d63fdb69Smrg generated="$generated $gentop" 70753da084b3Smrg 7076d63fdb69Smrg func_extract_archives $gentop $convenience 7077d63fdb69Smrg libobjs="$libobjs $func_extract_archives_result" 7078d63fdb69Smrg test "X$libobjs" = "X " && libobjs= 7079d63fdb69Smrg fi 7080d63fdb69Smrg fi 70813da084b3Smrg 7082d63fdb69Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 7083d63fdb69Smrg eval flag=\"$thread_safe_flag_spec\" 7084d63fdb69Smrg linker_flags="$linker_flags $flag" 7085d63fdb69Smrg fi 70863da084b3Smrg 7087d63fdb69Smrg # Make a backup of the uninstalled library when relinking 7088d63fdb69Smrg if test "$mode" = relink; then 7089d63fdb69Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 70903da084b3Smrg fi 70913da084b3Smrg 7092d63fdb69Smrg # Do each of the archive commands. 7093d63fdb69Smrg if test "$module" = yes && test -n "$module_cmds" ; then 7094d63fdb69Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7095d63fdb69Smrg eval test_cmds=\"$module_expsym_cmds\" 7096d63fdb69Smrg cmds=$module_expsym_cmds 7097d63fdb69Smrg else 7098d63fdb69Smrg eval test_cmds=\"$module_cmds\" 7099d63fdb69Smrg cmds=$module_cmds 7100d63fdb69Smrg fi 7101d63fdb69Smrg else 7102d63fdb69Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7103d63fdb69Smrg eval test_cmds=\"$archive_expsym_cmds\" 7104d63fdb69Smrg cmds=$archive_expsym_cmds 7105d63fdb69Smrg else 7106d63fdb69Smrg eval test_cmds=\"$archive_cmds\" 7107d63fdb69Smrg cmds=$archive_cmds 7108d63fdb69Smrg fi 71093da084b3Smrg fi 71103da084b3Smrg 7111d63fdb69Smrg if test "X$skipped_export" != "X:" && 7112d63fdb69Smrg func_len " $test_cmds" && 7113d63fdb69Smrg len=$func_len_result && 7114d63fdb69Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7115d63fdb69Smrg : 7116d63fdb69Smrg else 7117d63fdb69Smrg # The command line is too long to link in one step, link piecewise 7118d63fdb69Smrg # or, if using GNU ld and skipped_export is not :, use a linker 7119d63fdb69Smrg # script. 71203da084b3Smrg 7121d63fdb69Smrg # Save the value of $output and $libobjs because we want to 7122d63fdb69Smrg # use them later. If we have whole_archive_flag_spec, we 7123d63fdb69Smrg # want to use save_libobjs as it was before 7124d63fdb69Smrg # whole_archive_flag_spec was expanded, because we can't 7125d63fdb69Smrg # assume the linker understands whole_archive_flag_spec. 7126d63fdb69Smrg # This may have to be revisited, in case too many 7127d63fdb69Smrg # convenience libraries get linked in and end up exceeding 7128d63fdb69Smrg # the spec. 7129d63fdb69Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 7130d63fdb69Smrg save_libobjs=$libobjs 7131d63fdb69Smrg fi 7132d63fdb69Smrg save_output=$output 7133d63fdb69Smrg output_la=`$ECHO "X$output" | $Xsed -e "$basename"` 71343da084b3Smrg 7135d63fdb69Smrg # Clear the reloadable object creation command queue and 7136d63fdb69Smrg # initialize k to one. 7137d63fdb69Smrg test_cmds= 7138d63fdb69Smrg concat_cmds= 7139d63fdb69Smrg objlist= 7140d63fdb69Smrg last_robj= 7141d63fdb69Smrg k=1 71423da084b3Smrg 7143d63fdb69Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 7144d63fdb69Smrg output=${output_objdir}/${output_la}.lnkscript 7145d63fdb69Smrg func_verbose "creating GNU ld script: $output" 7146d63fdb69Smrg $ECHO 'INPUT (' > $output 7147d63fdb69Smrg for obj in $save_libobjs 7148d63fdb69Smrg do 7149d63fdb69Smrg $ECHO "$obj" >> $output 7150d63fdb69Smrg done 7151d63fdb69Smrg $ECHO ')' >> $output 7152d63fdb69Smrg delfiles="$delfiles $output" 7153d63fdb69Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 7154d63fdb69Smrg output=${output_objdir}/${output_la}.lnk 7155d63fdb69Smrg func_verbose "creating linker input file list: $output" 7156d63fdb69Smrg : > $output 7157d63fdb69Smrg set x $save_libobjs 7158d63fdb69Smrg shift 7159d63fdb69Smrg firstobj= 7160d63fdb69Smrg if test "$compiler_needs_object" = yes; then 7161d63fdb69Smrg firstobj="$1 " 7162d63fdb69Smrg shift 7163d63fdb69Smrg fi 7164d63fdb69Smrg for obj 7165d63fdb69Smrg do 7166d63fdb69Smrg $ECHO "$obj" >> $output 7167d63fdb69Smrg done 7168d63fdb69Smrg delfiles="$delfiles $output" 7169d63fdb69Smrg output=$firstobj\"$file_list_spec$output\" 7170d63fdb69Smrg else 7171d63fdb69Smrg if test -n "$save_libobjs"; then 7172d63fdb69Smrg func_verbose "creating reloadable object files..." 7173d63fdb69Smrg output=$output_objdir/$output_la-${k}.$objext 7174d63fdb69Smrg eval test_cmds=\"$reload_cmds\" 7175d63fdb69Smrg func_len " $test_cmds" 7176d63fdb69Smrg len0=$func_len_result 7177d63fdb69Smrg len=$len0 7178d63fdb69Smrg 7179d63fdb69Smrg # Loop over the list of objects to be linked. 7180d63fdb69Smrg for obj in $save_libobjs 7181d63fdb69Smrg do 7182d63fdb69Smrg func_len " $obj" 7183d63fdb69Smrg func_arith $len + $func_len_result 7184d63fdb69Smrg len=$func_arith_result 7185d63fdb69Smrg if test "X$objlist" = X || 7186d63fdb69Smrg test "$len" -lt "$max_cmd_len"; then 7187d63fdb69Smrg func_append objlist " $obj" 7188d63fdb69Smrg else 7189d63fdb69Smrg # The command $test_cmds is almost too long, add a 7190d63fdb69Smrg # command to the queue. 7191d63fdb69Smrg if test "$k" -eq 1 ; then 7192d63fdb69Smrg # The first file doesn't have a previous command to add. 7193d63fdb69Smrg eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 7194d63fdb69Smrg else 7195d63fdb69Smrg # All subsequent reloadable object files will link in 7196d63fdb69Smrg # the last one created. 7197d63fdb69Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" 7198d63fdb69Smrg fi 7199d63fdb69Smrg last_robj=$output_objdir/$output_la-${k}.$objext 7200d63fdb69Smrg func_arith $k + 1 7201d63fdb69Smrg k=$func_arith_result 7202d63fdb69Smrg output=$output_objdir/$output_la-${k}.$objext 7203d63fdb69Smrg objlist=$obj 7204d63fdb69Smrg func_len " $last_robj" 7205d63fdb69Smrg func_arith $len0 + $func_len_result 7206d63fdb69Smrg len=$func_arith_result 7207d63fdb69Smrg fi 7208d63fdb69Smrg done 7209d63fdb69Smrg # Handle the remaining objects by creating one last 7210d63fdb69Smrg # reloadable object file. All subsequent reloadable object 7211d63fdb69Smrg # files will link in the last one created. 7212d63fdb69Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7213d63fdb69Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 7214d63fdb69Smrg if test -n "$last_robj"; then 7215d63fdb69Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 7216d63fdb69Smrg fi 7217d63fdb69Smrg delfiles="$delfiles $output" 72183da084b3Smrg 7219d63fdb69Smrg else 7220d63fdb69Smrg output= 7221d63fdb69Smrg fi 72223da084b3Smrg 7223d63fdb69Smrg if ${skipped_export-false}; then 7224d63fdb69Smrg func_verbose "generating symbol list for \`$libname.la'" 7225d63fdb69Smrg export_symbols="$output_objdir/$libname.exp" 7226d63fdb69Smrg $opt_dry_run || $RM $export_symbols 7227d63fdb69Smrg libobjs=$output 7228d63fdb69Smrg # Append the command to create the export file. 7229d63fdb69Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7230d63fdb69Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 7231d63fdb69Smrg if test -n "$last_robj"; then 7232d63fdb69Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 7233d63fdb69Smrg fi 7234d63fdb69Smrg fi 72353da084b3Smrg 7236d63fdb69Smrg test -n "$save_libobjs" && 7237d63fdb69Smrg func_verbose "creating a temporary reloadable object file: $output" 72383da084b3Smrg 7239d63fdb69Smrg # Loop through the commands generated above and execute them. 7240d63fdb69Smrg save_ifs="$IFS"; IFS='~' 7241d63fdb69Smrg for cmd in $concat_cmds; do 7242d63fdb69Smrg IFS="$save_ifs" 7243d63fdb69Smrg $opt_silent || { 7244d63fdb69Smrg func_quote_for_expand "$cmd" 7245d63fdb69Smrg eval "func_echo $func_quote_for_expand_result" 7246d63fdb69Smrg } 7247d63fdb69Smrg $opt_dry_run || eval "$cmd" || { 7248d63fdb69Smrg lt_exit=$? 7249d63fdb69Smrg 7250d63fdb69Smrg # Restore the uninstalled library and exit 7251d63fdb69Smrg if test "$mode" = relink; then 7252d63fdb69Smrg ( cd "$output_objdir" && \ 7253d63fdb69Smrg $RM "${realname}T" && \ 7254d63fdb69Smrg $MV "${realname}U" "$realname" ) 7255d63fdb69Smrg fi 72563da084b3Smrg 7257d63fdb69Smrg exit $lt_exit 7258d63fdb69Smrg } 7259d63fdb69Smrg done 7260d63fdb69Smrg IFS="$save_ifs" 7261d63fdb69Smrg 7262d63fdb69Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 7263d63fdb69Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7264d63fdb69Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 72653da084b3Smrg fi 72663da084b3Smrg fi 72673da084b3Smrg 7268d63fdb69Smrg if ${skipped_export-false}; then 7269d63fdb69Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7270d63fdb69Smrg tmp_export_symbols="$export_symbols" 7271d63fdb69Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7272d63fdb69Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 7273d63fdb69Smrg fi 72743da084b3Smrg 7275d63fdb69Smrg if test -n "$orig_export_symbols"; then 7276d63fdb69Smrg # The given exports_symbols file has to be filtered, so filter it. 7277d63fdb69Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7278d63fdb69Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7279d63fdb69Smrg # 's' commands which not all seds can handle. GNU sed should be fine 7280d63fdb69Smrg # though. Also, the filter scales superlinearly with the number of 7281d63fdb69Smrg # global variables. join(1) would be nice here, but unfortunately 7282d63fdb69Smrg # isn't a blessed tool. 7283d63fdb69Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7284d63fdb69Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7285d63fdb69Smrg export_symbols=$output_objdir/$libname.def 7286d63fdb69Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7287d63fdb69Smrg fi 7288d63fdb69Smrg fi 72893da084b3Smrg 7290d63fdb69Smrg libobjs=$output 7291d63fdb69Smrg # Restore the value of output. 7292d63fdb69Smrg output=$save_output 72933da084b3Smrg 7294d63fdb69Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 7295d63fdb69Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7296d63fdb69Smrg test "X$libobjs" = "X " && libobjs= 7297d63fdb69Smrg fi 7298d63fdb69Smrg # Expand the library linking commands again to reset the 7299d63fdb69Smrg # value of $libobjs for piecewise linking. 7300d63fdb69Smrg 7301d63fdb69Smrg # Do each of the archive commands. 7302d63fdb69Smrg if test "$module" = yes && test -n "$module_cmds" ; then 7303d63fdb69Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7304d63fdb69Smrg cmds=$module_expsym_cmds 73053da084b3Smrg else 7306d63fdb69Smrg cmds=$module_cmds 73073da084b3Smrg fi 73083da084b3Smrg else 7309d63fdb69Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7310d63fdb69Smrg cmds=$archive_expsym_cmds 7311d63fdb69Smrg else 7312d63fdb69Smrg cmds=$archive_cmds 7313d63fdb69Smrg fi 73143da084b3Smrg fi 73153da084b3Smrg fi 73163da084b3Smrg 7317d63fdb69Smrg if test -n "$delfiles"; then 7318d63fdb69Smrg # Append the command to remove temporary files to $cmds. 7319d63fdb69Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 7320d63fdb69Smrg fi 73213da084b3Smrg 7322d63fdb69Smrg # Add any objects from preloaded convenience libraries 7323d63fdb69Smrg if test -n "$dlprefiles"; then 7324d63fdb69Smrg gentop="$output_objdir/${outputname}x" 7325d63fdb69Smrg generated="$generated $gentop" 73263da084b3Smrg 7327d63fdb69Smrg func_extract_archives $gentop $dlprefiles 7328d63fdb69Smrg libobjs="$libobjs $func_extract_archives_result" 7329d63fdb69Smrg test "X$libobjs" = "X " && libobjs= 73303da084b3Smrg fi 73313da084b3Smrg 7332d63fdb69Smrg save_ifs="$IFS"; IFS='~' 7333d63fdb69Smrg for cmd in $cmds; do 7334d63fdb69Smrg IFS="$save_ifs" 7335d63fdb69Smrg eval cmd=\"$cmd\" 7336d63fdb69Smrg $opt_silent || { 7337d63fdb69Smrg func_quote_for_expand "$cmd" 7338d63fdb69Smrg eval "func_echo $func_quote_for_expand_result" 7339d63fdb69Smrg } 7340d63fdb69Smrg $opt_dry_run || eval "$cmd" || { 7341d63fdb69Smrg lt_exit=$? 73423da084b3Smrg 7343d63fdb69Smrg # Restore the uninstalled library and exit 7344d63fdb69Smrg if test "$mode" = relink; then 7345d63fdb69Smrg ( cd "$output_objdir" && \ 7346d63fdb69Smrg $RM "${realname}T" && \ 7347d63fdb69Smrg $MV "${realname}U" "$realname" ) 7348d63fdb69Smrg fi 7349d63fdb69Smrg 7350d63fdb69Smrg exit $lt_exit 7351d63fdb69Smrg } 7352d63fdb69Smrg done 7353d63fdb69Smrg IFS="$save_ifs" 7354d63fdb69Smrg 7355d63fdb69Smrg # Restore the uninstalled library and exit 7356d63fdb69Smrg if test "$mode" = relink; then 7357d63fdb69Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 7358d63fdb69Smrg 7359d63fdb69Smrg if test -n "$convenience"; then 7360d63fdb69Smrg if test -z "$whole_archive_flag_spec"; then 7361d63fdb69Smrg func_show_eval '${RM}r "$gentop"' 73623da084b3Smrg fi 73633da084b3Smrg fi 73643da084b3Smrg 7365d63fdb69Smrg exit $EXIT_SUCCESS 7366d63fdb69Smrg fi 73673da084b3Smrg 7368d63fdb69Smrg # Create links to the real library. 7369d63fdb69Smrg for linkname in $linknames; do 7370d63fdb69Smrg if test "$realname" != "$linkname"; then 7371d63fdb69Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 7372d63fdb69Smrg fi 7373d63fdb69Smrg done 7374d63fdb69Smrg 7375d63fdb69Smrg # If -module or -export-dynamic was specified, set the dlname. 7376d63fdb69Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 7377d63fdb69Smrg # On all known operating systems, these are identical. 7378d63fdb69Smrg dlname="$soname" 7379d63fdb69Smrg fi 7380d63fdb69Smrg fi 7381d63fdb69Smrg ;; 7382d63fdb69Smrg 7383d63fdb69Smrg obj) 7384d63fdb69Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7385d63fdb69Smrg func_warning "\`-dlopen' is ignored for objects" 7386d63fdb69Smrg fi 7387d63fdb69Smrg 7388d63fdb69Smrg case " $deplibs" in 7389d63fdb69Smrg *\ -l* | *\ -L*) 7390d63fdb69Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 7391d63fdb69Smrg esac 7392d63fdb69Smrg 7393d63fdb69Smrg test -n "$rpath" && \ 7394d63fdb69Smrg func_warning "\`-rpath' is ignored for objects" 7395d63fdb69Smrg 7396d63fdb69Smrg test -n "$xrpath" && \ 7397d63fdb69Smrg func_warning "\`-R' is ignored for objects" 7398d63fdb69Smrg 7399d63fdb69Smrg test -n "$vinfo" && \ 7400d63fdb69Smrg func_warning "\`-version-info' is ignored for objects" 7401d63fdb69Smrg 7402d63fdb69Smrg test -n "$release" && \ 7403d63fdb69Smrg func_warning "\`-release' is ignored for objects" 7404d63fdb69Smrg 7405d63fdb69Smrg case $output in 7406d63fdb69Smrg *.lo) 7407d63fdb69Smrg test -n "$objs$old_deplibs" && \ 7408d63fdb69Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 7409d63fdb69Smrg 7410d63fdb69Smrg libobj=$output 7411d63fdb69Smrg func_lo2o "$libobj" 7412d63fdb69Smrg obj=$func_lo2o_result 7413d63fdb69Smrg ;; 7414d63fdb69Smrg *) 7415d63fdb69Smrg libobj= 7416d63fdb69Smrg obj="$output" 7417d63fdb69Smrg ;; 7418d63fdb69Smrg esac 7419d63fdb69Smrg 7420d63fdb69Smrg # Delete the old objects. 7421d63fdb69Smrg $opt_dry_run || $RM $obj $libobj 7422d63fdb69Smrg 7423d63fdb69Smrg # Objects from convenience libraries. This assumes 7424d63fdb69Smrg # single-version convenience libraries. Whenever we create 7425d63fdb69Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 7426d63fdb69Smrg # the extraction. 7427d63fdb69Smrg reload_conv_objs= 7428d63fdb69Smrg gentop= 7429d63fdb69Smrg # reload_cmds runs $LD directly, so let us get rid of 7430d63fdb69Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 7431d63fdb69Smrg # turning comma into space.. 7432d63fdb69Smrg wl= 7433d63fdb69Smrg 7434d63fdb69Smrg if test -n "$convenience"; then 7435d63fdb69Smrg if test -n "$whole_archive_flag_spec"; then 7436d63fdb69Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 7437d63fdb69Smrg reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 7438d63fdb69Smrg else 7439d63fdb69Smrg gentop="$output_objdir/${obj}x" 7440d63fdb69Smrg generated="$generated $gentop" 7441d63fdb69Smrg 7442d63fdb69Smrg func_extract_archives $gentop $convenience 7443d63fdb69Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 7444d63fdb69Smrg fi 7445d63fdb69Smrg fi 74463da084b3Smrg 7447d63fdb69Smrg # Create the old-style object. 7448d63fdb69Smrg 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 74493da084b3Smrg 7450d63fdb69Smrg output="$obj" 7451d63fdb69Smrg func_execute_cmds "$reload_cmds" 'exit $?' 74523da084b3Smrg 7453d63fdb69Smrg # Exit if we aren't doing a library object file. 7454d63fdb69Smrg if test -z "$libobj"; then 7455d63fdb69Smrg if test -n "$gentop"; then 7456d63fdb69Smrg func_show_eval '${RM}r "$gentop"' 7457d63fdb69Smrg fi 74583da084b3Smrg 7459d63fdb69Smrg exit $EXIT_SUCCESS 7460d63fdb69Smrg fi 74613da084b3Smrg 7462d63fdb69Smrg if test "$build_libtool_libs" != yes; then 7463d63fdb69Smrg if test -n "$gentop"; then 7464d63fdb69Smrg func_show_eval '${RM}r "$gentop"' 7465d63fdb69Smrg fi 74663da084b3Smrg 7467d63fdb69Smrg # Create an invalid libtool object if no PIC, so that we don't 7468d63fdb69Smrg # accidentally link it into a program. 7469d63fdb69Smrg # $show "echo timestamp > $libobj" 7470d63fdb69Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 7471d63fdb69Smrg exit $EXIT_SUCCESS 7472d63fdb69Smrg fi 74733da084b3Smrg 7474d63fdb69Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 7475d63fdb69Smrg # Only do commands if we really have different PIC objects. 7476d63fdb69Smrg reload_objs="$libobjs $reload_conv_objs" 7477d63fdb69Smrg output="$libobj" 7478d63fdb69Smrg func_execute_cmds "$reload_cmds" 'exit $?' 74793da084b3Smrg fi 74803da084b3Smrg 7481d63fdb69Smrg if test -n "$gentop"; then 7482d63fdb69Smrg func_show_eval '${RM}r "$gentop"' 7483d63fdb69Smrg fi 74843da084b3Smrg 7485d63fdb69Smrg exit $EXIT_SUCCESS 7486d63fdb69Smrg ;; 74873da084b3Smrg 7488d63fdb69Smrg prog) 7489d63fdb69Smrg case $host in 7490d63fdb69Smrg *cygwin*) func_stripname '' '.exe' "$output" 7491d63fdb69Smrg output=$func_stripname_result.exe;; 74923da084b3Smrg esac 7493d63fdb69Smrg test -n "$vinfo" && \ 7494d63fdb69Smrg func_warning "\`-version-info' is ignored for programs" 74953da084b3Smrg 7496d63fdb69Smrg test -n "$release" && \ 7497d63fdb69Smrg func_warning "\`-release' is ignored for programs" 74983da084b3Smrg 7499d63fdb69Smrg test "$preload" = yes \ 7500d63fdb69Smrg && test "$dlopen_support" = unknown \ 7501d63fdb69Smrg && test "$dlopen_self" = unknown \ 7502d63fdb69Smrg && test "$dlopen_self_static" = unknown && \ 7503d63fdb69Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 75043da084b3Smrg 7505d63fdb69Smrg case $host in 7506d63fdb69Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7507d63fdb69Smrg # On Rhapsody replace the C library is the System framework 7508d63fdb69Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 7509d63fdb69Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 75103da084b3Smrg ;; 75113da084b3Smrg esac 75123da084b3Smrg 7513d63fdb69Smrg case $host in 7514d63fdb69Smrg *-*-darwin*) 7515d63fdb69Smrg # Don't allow lazy linking, it breaks C++ global constructors 7516d63fdb69Smrg # But is supposedly fixed on 10.4 or later (yay!). 7517d63fdb69Smrg if test "$tagname" = CXX ; then 7518d63fdb69Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 7519d63fdb69Smrg 10.[0123]) 7520d63fdb69Smrg compile_command="$compile_command ${wl}-bind_at_load" 7521d63fdb69Smrg finalize_command="$finalize_command ${wl}-bind_at_load" 7522d63fdb69Smrg ;; 7523d63fdb69Smrg esac 7524d63fdb69Smrg fi 7525d63fdb69Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7526d63fdb69Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 7527d63fdb69Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 75283da084b3Smrg ;; 75293da084b3Smrg esac 75303da084b3Smrg 75313da084b3Smrg 7532d63fdb69Smrg # move library search paths that coincide with paths to not yet 7533d63fdb69Smrg # installed libraries to the beginning of the library search list 7534d63fdb69Smrg new_libs= 7535d63fdb69Smrg for path in $notinst_path; do 7536d63fdb69Smrg case " $new_libs " in 7537d63fdb69Smrg *" -L$path/$objdir "*) ;; 75383da084b3Smrg *) 7539d63fdb69Smrg case " $compile_deplibs " in 7540d63fdb69Smrg *" -L$path/$objdir "*) 7541d63fdb69Smrg new_libs="$new_libs -L$path/$objdir" ;; 7542d63fdb69Smrg esac 75433da084b3Smrg ;; 75443da084b3Smrg esac 75453da084b3Smrg done 7546d63fdb69Smrg for deplib in $compile_deplibs; do 7547d63fdb69Smrg case $deplib in 7548d63fdb69Smrg -L*) 7549d63fdb69Smrg case " $new_libs " in 7550d63fdb69Smrg *" $deplib "*) ;; 7551d63fdb69Smrg *) new_libs="$new_libs $deplib" ;; 7552d63fdb69Smrg esac 7553d63fdb69Smrg ;; 7554d63fdb69Smrg *) new_libs="$new_libs $deplib" ;; 7555d63fdb69Smrg esac 7556d63fdb69Smrg done 7557d63fdb69Smrg compile_deplibs="$new_libs" 75583da084b3Smrg 75593da084b3Smrg 7560d63fdb69Smrg compile_command="$compile_command $compile_deplibs" 7561d63fdb69Smrg finalize_command="$finalize_command $finalize_deplibs" 75623da084b3Smrg 7563d63fdb69Smrg if test -n "$rpath$xrpath"; then 7564d63fdb69Smrg # If the user specified any rpath flags, then add them. 7565d63fdb69Smrg for libdir in $rpath $xrpath; do 7566d63fdb69Smrg # This is the magic to use -rpath. 7567d63fdb69Smrg case "$finalize_rpath " in 7568d63fdb69Smrg *" $libdir "*) ;; 7569d63fdb69Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 7570d63fdb69Smrg esac 7571d63fdb69Smrg done 7572d63fdb69Smrg fi 75733da084b3Smrg 7574d63fdb69Smrg # Now hardcode the library paths 7575d63fdb69Smrg rpath= 7576d63fdb69Smrg hardcode_libdirs= 7577d63fdb69Smrg for libdir in $compile_rpath $finalize_rpath; do 7578d63fdb69Smrg if test -n "$hardcode_libdir_flag_spec"; then 7579d63fdb69Smrg if test -n "$hardcode_libdir_separator"; then 7580d63fdb69Smrg if test -z "$hardcode_libdirs"; then 7581d63fdb69Smrg hardcode_libdirs="$libdir" 7582d63fdb69Smrg else 7583d63fdb69Smrg # Just accumulate the unique libdirs. 7584d63fdb69Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7585d63fdb69Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7586d63fdb69Smrg ;; 7587d63fdb69Smrg *) 7588d63fdb69Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7589d63fdb69Smrg ;; 7590d63fdb69Smrg esac 7591d63fdb69Smrg fi 7592d63fdb69Smrg else 7593d63fdb69Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7594d63fdb69Smrg rpath="$rpath $flag" 7595d63fdb69Smrg fi 7596d63fdb69Smrg elif test -n "$runpath_var"; then 7597d63fdb69Smrg case "$perm_rpath " in 75983da084b3Smrg *" $libdir "*) ;; 7599d63fdb69Smrg *) perm_rpath="$perm_rpath $libdir" ;; 76003da084b3Smrg esac 7601d63fdb69Smrg fi 7602d63fdb69Smrg case $host in 7603d63fdb69Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7604d63fdb69Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 7605d63fdb69Smrg case :$dllsearchpath: in 7606d63fdb69Smrg *":$libdir:"*) ;; 7607d63fdb69Smrg ::) dllsearchpath=$libdir;; 7608d63fdb69Smrg *) dllsearchpath="$dllsearchpath:$libdir";; 7609d63fdb69Smrg esac 7610d63fdb69Smrg case :$dllsearchpath: in 7611d63fdb69Smrg *":$testbindir:"*) ;; 7612d63fdb69Smrg ::) dllsearchpath=$testbindir;; 7613d63fdb69Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 7614d63fdb69Smrg esac 7615d63fdb69Smrg ;; 7616d63fdb69Smrg esac 7617d63fdb69Smrg done 7618d63fdb69Smrg # Substitute the hardcoded libdirs into the rpath. 7619d63fdb69Smrg if test -n "$hardcode_libdir_separator" && 7620d63fdb69Smrg test -n "$hardcode_libdirs"; then 7621d63fdb69Smrg libdir="$hardcode_libdirs" 7622d63fdb69Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 7623d63fdb69Smrg fi 7624d63fdb69Smrg compile_rpath="$rpath" 7625d63fdb69Smrg 7626d63fdb69Smrg rpath= 7627d63fdb69Smrg hardcode_libdirs= 7628d63fdb69Smrg for libdir in $finalize_rpath; do 7629d63fdb69Smrg if test -n "$hardcode_libdir_flag_spec"; then 7630d63fdb69Smrg if test -n "$hardcode_libdir_separator"; then 7631d63fdb69Smrg if test -z "$hardcode_libdirs"; then 7632d63fdb69Smrg hardcode_libdirs="$libdir" 7633d63fdb69Smrg else 7634d63fdb69Smrg # Just accumulate the unique libdirs. 7635d63fdb69Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7636d63fdb69Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7637d63fdb69Smrg ;; 7638d63fdb69Smrg *) 7639d63fdb69Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7640d63fdb69Smrg ;; 7641d63fdb69Smrg esac 7642d63fdb69Smrg fi 7643d63fdb69Smrg else 7644d63fdb69Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7645d63fdb69Smrg rpath="$rpath $flag" 7646d63fdb69Smrg fi 7647d63fdb69Smrg elif test -n "$runpath_var"; then 7648d63fdb69Smrg case "$finalize_perm_rpath " in 76493da084b3Smrg *" $libdir "*) ;; 7650d63fdb69Smrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 76513da084b3Smrg esac 76523da084b3Smrg fi 7653d63fdb69Smrg done 7654d63fdb69Smrg # Substitute the hardcoded libdirs into the rpath. 7655d63fdb69Smrg if test -n "$hardcode_libdir_separator" && 7656d63fdb69Smrg test -n "$hardcode_libdirs"; then 7657d63fdb69Smrg libdir="$hardcode_libdirs" 7658d63fdb69Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 7659d63fdb69Smrg fi 7660d63fdb69Smrg finalize_rpath="$rpath" 76613da084b3Smrg 7662d63fdb69Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 7663d63fdb69Smrg # Transform all the library objects into standard objects. 7664d63fdb69Smrg compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 7665d63fdb69Smrg finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 7666d63fdb69Smrg fi 76673da084b3Smrg 7668d63fdb69Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 76693da084b3Smrg 7670d63fdb69Smrg # template prelinking step 7671d63fdb69Smrg if test -n "$prelink_cmds"; then 7672d63fdb69Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 7673d63fdb69Smrg fi 76743da084b3Smrg 7675d63fdb69Smrg wrappers_required=yes 7676d63fdb69Smrg case $host in 7677d63fdb69Smrg *cygwin* | *mingw* ) 7678d63fdb69Smrg if test "$build_libtool_libs" != yes; then 7679d63fdb69Smrg wrappers_required=no 7680d63fdb69Smrg fi 7681d63fdb69Smrg ;; 7682d63fdb69Smrg *cegcc) 7683d63fdb69Smrg # Disable wrappers for cegcc, we are cross compiling anyway. 7684d63fdb69Smrg wrappers_required=no 7685d63fdb69Smrg ;; 7686d63fdb69Smrg *) 7687d63fdb69Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 7688d63fdb69Smrg wrappers_required=no 7689d63fdb69Smrg fi 7690d63fdb69Smrg ;; 7691d63fdb69Smrg esac 7692d63fdb69Smrg if test "$wrappers_required" = no; then 7693d63fdb69Smrg # Replace the output file specification. 7694d63fdb69Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 7695d63fdb69Smrg link_command="$compile_command$compile_rpath" 76963da084b3Smrg 7697d63fdb69Smrg # We have no uninstalled library dependencies, so finalize right now. 7698d63fdb69Smrg exit_status=0 7699d63fdb69Smrg func_show_eval "$link_command" 'exit_status=$?' 77003da084b3Smrg 7701d63fdb69Smrg # Delete the generated files. 7702d63fdb69Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 7703d63fdb69Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 7704d63fdb69Smrg fi 77053da084b3Smrg 7706d63fdb69Smrg exit $exit_status 7707d63fdb69Smrg fi 77083da084b3Smrg 7709d63fdb69Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 7710d63fdb69Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 7711d63fdb69Smrg fi 7712d63fdb69Smrg if test -n "$finalize_shlibpath"; then 7713d63fdb69Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 7714d63fdb69Smrg fi 77153da084b3Smrg 7716d63fdb69Smrg compile_var= 7717d63fdb69Smrg finalize_var= 7718d63fdb69Smrg if test -n "$runpath_var"; then 7719d63fdb69Smrg if test -n "$perm_rpath"; then 7720d63fdb69Smrg # We should set the runpath_var. 7721d63fdb69Smrg rpath= 7722d63fdb69Smrg for dir in $perm_rpath; do 7723d63fdb69Smrg rpath="$rpath$dir:" 77243da084b3Smrg done 7725d63fdb69Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 77263da084b3Smrg fi 7727d63fdb69Smrg if test -n "$finalize_perm_rpath"; then 7728d63fdb69Smrg # We should set the runpath_var. 7729d63fdb69Smrg rpath= 7730d63fdb69Smrg for dir in $finalize_perm_rpath; do 7731d63fdb69Smrg rpath="$rpath$dir:" 7732d63fdb69Smrg done 7733d63fdb69Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 7734d63fdb69Smrg fi 7735d63fdb69Smrg fi 77363da084b3Smrg 7737d63fdb69Smrg if test "$no_install" = yes; then 7738d63fdb69Smrg # We don't need to create a wrapper script. 7739d63fdb69Smrg link_command="$compile_var$compile_command$compile_rpath" 7740d63fdb69Smrg # Replace the output file specification. 7741d63fdb69Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 7742d63fdb69Smrg # Delete the old output file. 7743d63fdb69Smrg $opt_dry_run || $RM $output 7744d63fdb69Smrg # Link the executable and exit 7745d63fdb69Smrg func_show_eval "$link_command" 'exit $?' 7746d63fdb69Smrg exit $EXIT_SUCCESS 7747d63fdb69Smrg fi 77483da084b3Smrg 7749d63fdb69Smrg if test "$hardcode_action" = relink; then 7750d63fdb69Smrg # Fast installation is not supported 7751d63fdb69Smrg link_command="$compile_var$compile_command$compile_rpath" 7752d63fdb69Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 77533da084b3Smrg 7754d63fdb69Smrg func_warning "this platform does not like uninstalled shared libraries" 7755d63fdb69Smrg func_warning "\`$output' will be relinked during installation" 7756d63fdb69Smrg else 7757d63fdb69Smrg if test "$fast_install" != no; then 7758d63fdb69Smrg link_command="$finalize_var$compile_command$finalize_rpath" 7759d63fdb69Smrg if test "$fast_install" = yes; then 7760d63fdb69Smrg relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` 7761d63fdb69Smrg else 7762d63fdb69Smrg # fast_install is set to needless 7763d63fdb69Smrg relink_command= 7764d63fdb69Smrg fi 77653da084b3Smrg else 7766d63fdb69Smrg link_command="$compile_var$compile_command$compile_rpath" 7767d63fdb69Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 77683da084b3Smrg fi 7769d63fdb69Smrg fi 77703da084b3Smrg 7771d63fdb69Smrg # Replace the output file specification. 7772d63fdb69Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 77733da084b3Smrg 7774d63fdb69Smrg # Delete the old output files. 7775d63fdb69Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 77763da084b3Smrg 7777d63fdb69Smrg func_show_eval "$link_command" 'exit $?' 77783da084b3Smrg 7779d63fdb69Smrg # Now create the wrapper script. 7780d63fdb69Smrg func_verbose "creating $output" 77813da084b3Smrg 7782d63fdb69Smrg # Quote the relink command for shipping. 7783d63fdb69Smrg if test -n "$relink_command"; then 7784d63fdb69Smrg # Preserve any variables that may affect compiler behavior 7785d63fdb69Smrg for var in $variables_saved_for_relink; do 7786d63fdb69Smrg if eval test -z \"\${$var+set}\"; then 7787d63fdb69Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 7788d63fdb69Smrg elif eval var_value=\$$var; test -z "$var_value"; then 7789d63fdb69Smrg relink_command="$var=; export $var; $relink_command" 7790d63fdb69Smrg else 7791d63fdb69Smrg func_quote_for_eval "$var_value" 7792d63fdb69Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 7793d63fdb69Smrg fi 7794d63fdb69Smrg done 7795d63fdb69Smrg relink_command="(cd `pwd`; $relink_command)" 7796d63fdb69Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 7797d63fdb69Smrg fi 77983da084b3Smrg 7799d63fdb69Smrg # Quote $ECHO for shipping. 7800d63fdb69Smrg if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then 7801d63fdb69Smrg case $progpath in 7802d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 7803d63fdb69Smrg *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 78043da084b3Smrg esac 7805d63fdb69Smrg qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` 7806d63fdb69Smrg else 7807d63fdb69Smrg qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` 7808d63fdb69Smrg fi 78093da084b3Smrg 7810d63fdb69Smrg # Only actually do things if not in dry run mode. 7811d63fdb69Smrg $opt_dry_run || { 7812d63fdb69Smrg # win32 will think the script is a binary if it has 7813d63fdb69Smrg # a .exe suffix, so we strip it off here. 7814d63fdb69Smrg case $output in 7815d63fdb69Smrg *.exe) func_stripname '' '.exe' "$output" 7816d63fdb69Smrg output=$func_stripname_result ;; 7817d63fdb69Smrg esac 7818d63fdb69Smrg # test for cygwin because mv fails w/o .exe extensions 78193da084b3Smrg case $host in 7820d63fdb69Smrg *cygwin*) 7821d63fdb69Smrg exeext=.exe 7822d63fdb69Smrg func_stripname '' '.exe' "$outputname" 7823d63fdb69Smrg outputname=$func_stripname_result ;; 7824d63fdb69Smrg *) exeext= ;; 78253da084b3Smrg esac 7826d63fdb69Smrg case $host in 7827d63fdb69Smrg *cygwin* | *mingw* ) 7828d63fdb69Smrg func_dirname_and_basename "$output" "" "." 7829d63fdb69Smrg output_name=$func_basename_result 7830d63fdb69Smrg output_path=$func_dirname_result 7831d63fdb69Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 7832d63fdb69Smrg cwrapper="$output_path/$output_name.exe" 7833d63fdb69Smrg $RM $cwrappersource $cwrapper 7834d63fdb69Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 7835d63fdb69Smrg 7836d63fdb69Smrg func_emit_cwrapperexe_src > $cwrappersource 7837d63fdb69Smrg 7838d63fdb69Smrg # The wrapper executable is built using the $host compiler, 7839d63fdb69Smrg # because it contains $host paths and files. If cross- 7840d63fdb69Smrg # compiling, it, like the target executable, must be 7841d63fdb69Smrg # executed on the $host or under an emulation environment. 7842d63fdb69Smrg $opt_dry_run || { 7843d63fdb69Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 7844d63fdb69Smrg $STRIP $cwrapper 7845d63fdb69Smrg } 78463da084b3Smrg 7847d63fdb69Smrg # Now, create the wrapper script for func_source use: 7848d63fdb69Smrg func_ltwrapper_scriptname $cwrapper 7849d63fdb69Smrg $RM $func_ltwrapper_scriptname_result 7850d63fdb69Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 7851d63fdb69Smrg $opt_dry_run || { 7852d63fdb69Smrg # note: this script will not be executed, so do not chmod. 7853d63fdb69Smrg if test "x$build" = "x$host" ; then 7854d63fdb69Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 78553da084b3Smrg else 7856d63fdb69Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 78573da084b3Smrg fi 7858d63fdb69Smrg } 7859d63fdb69Smrg ;; 7860d63fdb69Smrg * ) 7861d63fdb69Smrg $RM $output 7862d63fdb69Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 78633da084b3Smrg 7864d63fdb69Smrg func_emit_wrapper no > $output 7865d63fdb69Smrg chmod +x $output 78663da084b3Smrg ;; 78673da084b3Smrg esac 7868d63fdb69Smrg } 7869d63fdb69Smrg exit $EXIT_SUCCESS 7870d63fdb69Smrg ;; 7871d63fdb69Smrg esac 78723da084b3Smrg 7873d63fdb69Smrg # See if we need to build an old-fashioned archive. 7874d63fdb69Smrg for oldlib in $oldlibs; do 78753da084b3Smrg 7876d63fdb69Smrg if test "$build_libtool_libs" = convenience; then 7877d63fdb69Smrg oldobjs="$libobjs_save $symfileobj" 7878d63fdb69Smrg addlibs="$convenience" 7879d63fdb69Smrg build_libtool_libs=no 7880d63fdb69Smrg else 7881d63fdb69Smrg if test "$build_libtool_libs" = module; then 7882d63fdb69Smrg oldobjs="$libobjs_save" 7883d63fdb69Smrg build_libtool_libs=no 7884d63fdb69Smrg else 7885d63fdb69Smrg oldobjs="$old_deplibs $non_pic_objects" 7886d63fdb69Smrg if test "$preload" = yes && test -f "$symfileobj"; then 7887d63fdb69Smrg oldobjs="$oldobjs $symfileobj" 7888d63fdb69Smrg fi 7889d63fdb69Smrg fi 7890d63fdb69Smrg addlibs="$old_convenience" 78913da084b3Smrg fi 78923da084b3Smrg 7893d63fdb69Smrg if test -n "$addlibs"; then 7894d63fdb69Smrg gentop="$output_objdir/${outputname}x" 7895d63fdb69Smrg generated="$generated $gentop" 78963da084b3Smrg 7897d63fdb69Smrg func_extract_archives $gentop $addlibs 7898d63fdb69Smrg oldobjs="$oldobjs $func_extract_archives_result" 7899d63fdb69Smrg fi 79003da084b3Smrg 7901d63fdb69Smrg # Do each command in the archive commands. 7902d63fdb69Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 7903d63fdb69Smrg cmds=$old_archive_from_new_cmds 7904d63fdb69Smrg else 79053da084b3Smrg 7906d63fdb69Smrg # Add any objects from preloaded convenience libraries 7907d63fdb69Smrg if test -n "$dlprefiles"; then 7908d63fdb69Smrg gentop="$output_objdir/${outputname}x" 7909d63fdb69Smrg generated="$generated $gentop" 79103da084b3Smrg 7911d63fdb69Smrg func_extract_archives $gentop $dlprefiles 7912d63fdb69Smrg oldobjs="$oldobjs $func_extract_archives_result" 7913d63fdb69Smrg fi 79143da084b3Smrg 7915d63fdb69Smrg # POSIX demands no paths to be encoded in archives. We have 7916d63fdb69Smrg # to avoid creating archives with duplicate basenames if we 7917d63fdb69Smrg # might have to extract them afterwards, e.g., when creating a 7918d63fdb69Smrg # static archive out of a convenience library, or when linking 7919d63fdb69Smrg # the entirety of a libtool archive into another (currently 7920d63fdb69Smrg # not supported by libtool). 7921d63fdb69Smrg if (for obj in $oldobjs 7922d63fdb69Smrg do 7923d63fdb69Smrg func_basename "$obj" 7924d63fdb69Smrg $ECHO "$func_basename_result" 7925d63fdb69Smrg done | sort | sort -uc >/dev/null 2>&1); then 7926d63fdb69Smrg : 7927d63fdb69Smrg else 7928d63fdb69Smrg $ECHO "copying selected object files to avoid basename conflicts..." 7929d63fdb69Smrg gentop="$output_objdir/${outputname}x" 7930d63fdb69Smrg generated="$generated $gentop" 7931d63fdb69Smrg func_mkdir_p "$gentop" 7932d63fdb69Smrg save_oldobjs=$oldobjs 7933d63fdb69Smrg oldobjs= 7934d63fdb69Smrg counter=1 7935d63fdb69Smrg for obj in $save_oldobjs 7936d63fdb69Smrg do 7937d63fdb69Smrg func_basename "$obj" 7938d63fdb69Smrg objbase="$func_basename_result" 7939d63fdb69Smrg case " $oldobjs " in 7940d63fdb69Smrg " ") oldobjs=$obj ;; 7941d63fdb69Smrg *[\ /]"$objbase "*) 7942d63fdb69Smrg while :; do 7943d63fdb69Smrg # Make sure we don't pick an alternate name that also 7944d63fdb69Smrg # overlaps. 7945d63fdb69Smrg newobj=lt$counter-$objbase 7946d63fdb69Smrg func_arith $counter + 1 7947d63fdb69Smrg counter=$func_arith_result 7948d63fdb69Smrg case " $oldobjs " in 7949d63fdb69Smrg *[\ /]"$newobj "*) ;; 7950d63fdb69Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 7951d63fdb69Smrg esac 7952d63fdb69Smrg done 7953d63fdb69Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 7954d63fdb69Smrg oldobjs="$oldobjs $gentop/$newobj" 7955d63fdb69Smrg ;; 7956d63fdb69Smrg *) oldobjs="$oldobjs $obj" ;; 7957d63fdb69Smrg esac 79583da084b3Smrg done 79593da084b3Smrg fi 7960d63fdb69Smrg eval cmds=\"$old_archive_cmds\" 79613da084b3Smrg 7962d63fdb69Smrg func_len " $cmds" 7963d63fdb69Smrg len=$func_len_result 7964d63fdb69Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7965d63fdb69Smrg cmds=$old_archive_cmds 7966d63fdb69Smrg else 7967d63fdb69Smrg # the command line is too long to link in one step, link in parts 7968d63fdb69Smrg func_verbose "using piecewise archive linking..." 7969d63fdb69Smrg save_RANLIB=$RANLIB 7970d63fdb69Smrg RANLIB=: 7971d63fdb69Smrg objlist= 7972d63fdb69Smrg concat_cmds= 7973d63fdb69Smrg save_oldobjs=$oldobjs 7974d63fdb69Smrg oldobjs= 7975d63fdb69Smrg # Is there a better way of finding the last object in the list? 7976d63fdb69Smrg for obj in $save_oldobjs 7977d63fdb69Smrg do 7978d63fdb69Smrg last_oldobj=$obj 7979d63fdb69Smrg done 7980d63fdb69Smrg eval test_cmds=\"$old_archive_cmds\" 7981d63fdb69Smrg func_len " $test_cmds" 7982d63fdb69Smrg len0=$func_len_result 7983d63fdb69Smrg len=$len0 7984d63fdb69Smrg for obj in $save_oldobjs 7985d63fdb69Smrg do 7986d63fdb69Smrg func_len " $obj" 7987d63fdb69Smrg func_arith $len + $func_len_result 7988d63fdb69Smrg len=$func_arith_result 7989d63fdb69Smrg func_append objlist " $obj" 7990d63fdb69Smrg if test "$len" -lt "$max_cmd_len"; then 7991d63fdb69Smrg : 7992d63fdb69Smrg else 7993d63fdb69Smrg # the above command should be used before it gets too long 7994d63fdb69Smrg oldobjs=$objlist 7995d63fdb69Smrg if test "$obj" = "$last_oldobj" ; then 7996d63fdb69Smrg RANLIB=$save_RANLIB 7997d63fdb69Smrg fi 7998d63fdb69Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7999d63fdb69Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 8000d63fdb69Smrg objlist= 8001d63fdb69Smrg len=$len0 8002d63fdb69Smrg fi 8003d63fdb69Smrg done 8004d63fdb69Smrg RANLIB=$save_RANLIB 8005d63fdb69Smrg oldobjs=$objlist 8006d63fdb69Smrg if test "X$oldobjs" = "X" ; then 8007d63fdb69Smrg eval cmds=\"\$concat_cmds\" 8008d63fdb69Smrg else 8009d63fdb69Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 8010d63fdb69Smrg fi 8011d63fdb69Smrg fi 8012d63fdb69Smrg fi 8013d63fdb69Smrg func_execute_cmds "$cmds" 'exit $?' 80143da084b3Smrg done 80153da084b3Smrg 8016d63fdb69Smrg test -n "$generated" && \ 8017d63fdb69Smrg func_show_eval "${RM}r$generated" 80183da084b3Smrg 8019d63fdb69Smrg # Now create the libtool archive. 8020d63fdb69Smrg case $output in 8021d63fdb69Smrg *.la) 8022d63fdb69Smrg old_library= 8023d63fdb69Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 8024d63fdb69Smrg func_verbose "creating $output" 80253da084b3Smrg 8026d63fdb69Smrg # Preserve any variables that may affect compiler behavior 8027d63fdb69Smrg for var in $variables_saved_for_relink; do 8028d63fdb69Smrg if eval test -z \"\${$var+set}\"; then 8029d63fdb69Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8030d63fdb69Smrg elif eval var_value=\$$var; test -z "$var_value"; then 8031d63fdb69Smrg relink_command="$var=; export $var; $relink_command" 80323da084b3Smrg else 8033d63fdb69Smrg func_quote_for_eval "$var_value" 8034d63fdb69Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 80353da084b3Smrg fi 8036d63fdb69Smrg done 8037d63fdb69Smrg # Quote the link command for shipping. 8038d63fdb69Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 8039d63fdb69Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 8040d63fdb69Smrg if test "$hardcode_automatic" = yes ; then 8041d63fdb69Smrg relink_command= 8042d63fdb69Smrg fi 80433da084b3Smrg 8044d63fdb69Smrg # Only create the output if not a dry run. 8045d63fdb69Smrg $opt_dry_run || { 8046d63fdb69Smrg for installed in no yes; do 8047d63fdb69Smrg if test "$installed" = yes; then 8048d63fdb69Smrg if test -z "$install_libdir"; then 8049d63fdb69Smrg break 8050d63fdb69Smrg fi 8051d63fdb69Smrg output="$output_objdir/$outputname"i 8052d63fdb69Smrg # Replace all uninstalled libtool libraries with the installed ones 8053d63fdb69Smrg newdependency_libs= 8054d63fdb69Smrg for deplib in $dependency_libs; do 8055d63fdb69Smrg case $deplib in 8056d63fdb69Smrg *.la) 8057d63fdb69Smrg func_basename "$deplib" 8058d63fdb69Smrg name="$func_basename_result" 8059d63fdb69Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8060d63fdb69Smrg test -z "$libdir" && \ 8061d63fdb69Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 8062d63fdb69Smrg newdependency_libs="$newdependency_libs $libdir/$name" 8063d63fdb69Smrg ;; 8064d63fdb69Smrg *) newdependency_libs="$newdependency_libs $deplib" ;; 8065d63fdb69Smrg esac 8066d63fdb69Smrg done 8067d63fdb69Smrg dependency_libs="$newdependency_libs" 8068d63fdb69Smrg newdlfiles= 8069d63fdb69Smrg 8070d63fdb69Smrg for lib in $dlfiles; do 8071d63fdb69Smrg case $lib in 8072d63fdb69Smrg *.la) 8073d63fdb69Smrg func_basename "$lib" 8074d63fdb69Smrg name="$func_basename_result" 8075d63fdb69Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8076d63fdb69Smrg test -z "$libdir" && \ 8077d63fdb69Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 8078d63fdb69Smrg newdlfiles="$newdlfiles $libdir/$name" 8079d63fdb69Smrg ;; 8080d63fdb69Smrg *) newdlfiles="$newdlfiles $lib" ;; 8081d63fdb69Smrg esac 8082d63fdb69Smrg done 8083d63fdb69Smrg dlfiles="$newdlfiles" 8084d63fdb69Smrg newdlprefiles= 8085d63fdb69Smrg for lib in $dlprefiles; do 8086d63fdb69Smrg case $lib in 8087d63fdb69Smrg *.la) 8088d63fdb69Smrg # Only pass preopened files to the pseudo-archive (for 8089d63fdb69Smrg # eventual linking with the app. that links it) if we 8090d63fdb69Smrg # didn't already link the preopened objects directly into 8091d63fdb69Smrg # the library: 8092d63fdb69Smrg func_basename "$lib" 8093d63fdb69Smrg name="$func_basename_result" 8094d63fdb69Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8095d63fdb69Smrg test -z "$libdir" && \ 8096d63fdb69Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 8097d63fdb69Smrg newdlprefiles="$newdlprefiles $libdir/$name" 8098d63fdb69Smrg ;; 8099d63fdb69Smrg esac 8100d63fdb69Smrg done 8101d63fdb69Smrg dlprefiles="$newdlprefiles" 8102d63fdb69Smrg else 8103d63fdb69Smrg newdlfiles= 8104d63fdb69Smrg for lib in $dlfiles; do 8105d63fdb69Smrg case $lib in 8106d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8107d63fdb69Smrg *) abs=`pwd`"/$lib" ;; 8108d63fdb69Smrg esac 8109d63fdb69Smrg newdlfiles="$newdlfiles $abs" 8110d63fdb69Smrg done 8111d63fdb69Smrg dlfiles="$newdlfiles" 8112d63fdb69Smrg newdlprefiles= 8113d63fdb69Smrg for lib in $dlprefiles; do 8114d63fdb69Smrg case $lib in 8115d63fdb69Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8116d63fdb69Smrg *) abs=`pwd`"/$lib" ;; 8117d63fdb69Smrg esac 8118d63fdb69Smrg newdlprefiles="$newdlprefiles $abs" 8119d63fdb69Smrg done 8120d63fdb69Smrg dlprefiles="$newdlprefiles" 8121d63fdb69Smrg fi 8122d63fdb69Smrg $RM $output 8123d63fdb69Smrg # place dlname in correct position for cygwin 8124d63fdb69Smrg tdlname=$dlname 8125d63fdb69Smrg case $host,$output,$installed,$module,$dlname in 8126d63fdb69Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 8127d63fdb69Smrg esac 8128d63fdb69Smrg $ECHO > $output "\ 8129d63fdb69Smrg# $outputname - a libtool library file 8130d63fdb69Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 8131d63fdb69Smrg# 8132d63fdb69Smrg# Please DO NOT delete this file! 8133d63fdb69Smrg# It is necessary for linking the library. 81343da084b3Smrg 8135d63fdb69Smrg# The name that we can dlopen(3). 8136d63fdb69Smrgdlname='$tdlname' 81373da084b3Smrg 8138d63fdb69Smrg# Names of this library. 8139d63fdb69Smrglibrary_names='$library_names' 81403da084b3Smrg 8141d63fdb69Smrg# The name of the static archive. 8142d63fdb69Smrgold_library='$old_library' 81433da084b3Smrg 8144d63fdb69Smrg# Linker flags that can not go in dependency_libs. 8145d63fdb69Smrginherited_linker_flags='$new_inherited_linker_flags' 81463da084b3Smrg 8147d63fdb69Smrg# Libraries that this one depends upon. 8148d63fdb69Smrgdependency_libs='$dependency_libs' 81493da084b3Smrg 8150d63fdb69Smrg# Names of additional weak libraries provided by this library 8151d63fdb69Smrgweak_library_names='$weak_libs' 81523da084b3Smrg 8153d63fdb69Smrg# Version information for $libname. 8154d63fdb69Smrgcurrent=$current 8155d63fdb69Smrgage=$age 8156d63fdb69Smrgrevision=$revision 81573da084b3Smrg 8158d63fdb69Smrg# Is this an already installed library? 8159d63fdb69Smrginstalled=$installed 81603da084b3Smrg 8161d63fdb69Smrg# Should we warn about portability when linking against -modules? 8162d63fdb69Smrgshouldnotlink=$module 81633da084b3Smrg 8164d63fdb69Smrg# Files to dlopen/dlpreopen 8165d63fdb69Smrgdlopen='$dlfiles' 8166d63fdb69Smrgdlpreopen='$dlprefiles' 81673da084b3Smrg 8168d63fdb69Smrg# Directory that this library needs to be installed in: 8169d63fdb69Smrglibdir='$install_libdir'" 8170d63fdb69Smrg if test "$installed" = no && test "$need_relink" = yes; then 8171d63fdb69Smrg $ECHO >> $output "\ 8172d63fdb69Smrgrelink_command=\"$relink_command\"" 8173d63fdb69Smrg fi 8174d63fdb69Smrg done 8175d63fdb69Smrg } 81763da084b3Smrg 8177d63fdb69Smrg # Do a symbolic link so that the libtool archive can be found in 8178d63fdb69Smrg # LD_LIBRARY_PATH before the program is installed. 8179d63fdb69Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 8180d63fdb69Smrg ;; 8181d63fdb69Smrg esac 8182d63fdb69Smrg exit $EXIT_SUCCESS 8183d63fdb69Smrg} 81843da084b3Smrg 8185d63fdb69Smrg{ test "$mode" = link || test "$mode" = relink; } && 8186d63fdb69Smrg func_mode_link ${1+"$@"} 81873da084b3Smrg 81883da084b3Smrg 8189d63fdb69Smrg# func_mode_uninstall arg... 8190d63fdb69Smrgfunc_mode_uninstall () 8191d63fdb69Smrg{ 8192d63fdb69Smrg $opt_debug 8193d63fdb69Smrg RM="$nonopt" 81943da084b3Smrg files= 81953da084b3Smrg rmforce= 81963da084b3Smrg exit_status=0 81973da084b3Smrg 81983da084b3Smrg # This variable tells wrapper scripts just to set variables rather 81993da084b3Smrg # than running their programs. 82003da084b3Smrg libtool_install_magic="$magic" 82013da084b3Smrg 82023da084b3Smrg for arg 82033da084b3Smrg do 82043da084b3Smrg case $arg in 8205d63fdb69Smrg -f) RM="$RM $arg"; rmforce=yes ;; 8206d63fdb69Smrg -*) RM="$RM $arg" ;; 82073da084b3Smrg *) files="$files $arg" ;; 82083da084b3Smrg esac 82093da084b3Smrg done 82103da084b3Smrg 8211d63fdb69Smrg test -z "$RM" && \ 8212d63fdb69Smrg func_fatal_help "you must specify an RM program" 82133da084b3Smrg 82143da084b3Smrg rmdirs= 82153da084b3Smrg 82163da084b3Smrg origobjdir="$objdir" 82173da084b3Smrg for file in $files; do 8218d63fdb69Smrg func_dirname "$file" "" "." 8219d63fdb69Smrg dir="$func_dirname_result" 8220d63fdb69Smrg if test "X$dir" = X.; then 82213da084b3Smrg objdir="$origobjdir" 82223da084b3Smrg else 82233da084b3Smrg objdir="$dir/$origobjdir" 82243da084b3Smrg fi 8225d63fdb69Smrg func_basename "$file" 8226d63fdb69Smrg name="$func_basename_result" 82273da084b3Smrg test "$mode" = uninstall && objdir="$dir" 82283da084b3Smrg 82293da084b3Smrg # Remember objdir for removal later, being careful to avoid duplicates 82303da084b3Smrg if test "$mode" = clean; then 82313da084b3Smrg case " $rmdirs " in 82323da084b3Smrg *" $objdir "*) ;; 82333da084b3Smrg *) rmdirs="$rmdirs $objdir" ;; 82343da084b3Smrg esac 82353da084b3Smrg fi 82363da084b3Smrg 82373da084b3Smrg # Don't error if the file doesn't exist and rm -f was used. 8238d63fdb69Smrg if { test -L "$file"; } >/dev/null 2>&1 || 8239d63fdb69Smrg { test -h "$file"; } >/dev/null 2>&1 || 8240d63fdb69Smrg test -f "$file"; then 82413da084b3Smrg : 82423da084b3Smrg elif test -d "$file"; then 82433da084b3Smrg exit_status=1 82443da084b3Smrg continue 82453da084b3Smrg elif test "$rmforce" = yes; then 82463da084b3Smrg continue 82473da084b3Smrg fi 82483da084b3Smrg 82493da084b3Smrg rmfiles="$file" 82503da084b3Smrg 82513da084b3Smrg case $name in 82523da084b3Smrg *.la) 82533da084b3Smrg # Possibly a libtool archive, so verify it. 8254d63fdb69Smrg if func_lalib_p "$file"; then 8255d63fdb69Smrg func_source $dir/$name 82563da084b3Smrg 82573da084b3Smrg # Delete the libtool libraries and symlinks. 82583da084b3Smrg for n in $library_names; do 82593da084b3Smrg rmfiles="$rmfiles $objdir/$n" 82603da084b3Smrg done 82613da084b3Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 82623da084b3Smrg 82633da084b3Smrg case "$mode" in 82643da084b3Smrg clean) 82653da084b3Smrg case " $library_names " in 82663da084b3Smrg # " " in the beginning catches empty $dlname 82673da084b3Smrg *" $dlname "*) ;; 82683da084b3Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 82693da084b3Smrg esac 8270d63fdb69Smrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 82713da084b3Smrg ;; 82723da084b3Smrg uninstall) 82733da084b3Smrg if test -n "$library_names"; then 82743da084b3Smrg # Do each command in the postuninstall commands. 8275d63fdb69Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 82763da084b3Smrg fi 82773da084b3Smrg 82783da084b3Smrg if test -n "$old_library"; then 82793da084b3Smrg # Do each command in the old_postuninstall commands. 8280d63fdb69Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 82813da084b3Smrg fi 82823da084b3Smrg # FIXME: should reinstall the best remaining shared library. 82833da084b3Smrg ;; 82843da084b3Smrg esac 82853da084b3Smrg fi 82863da084b3Smrg ;; 82873da084b3Smrg 82883da084b3Smrg *.lo) 82893da084b3Smrg # Possibly a libtool object, so verify it. 8290d63fdb69Smrg if func_lalib_p "$file"; then 82913da084b3Smrg 82923da084b3Smrg # Read the .lo file 8293d63fdb69Smrg func_source $dir/$name 82943da084b3Smrg 82953da084b3Smrg # Add PIC object to the list of files to remove. 8296d63fdb69Smrg if test -n "$pic_object" && 8297d63fdb69Smrg test "$pic_object" != none; then 82983da084b3Smrg rmfiles="$rmfiles $dir/$pic_object" 82993da084b3Smrg fi 83003da084b3Smrg 83013da084b3Smrg # Add non-PIC object to the list of files to remove. 8302d63fdb69Smrg if test -n "$non_pic_object" && 8303d63fdb69Smrg test "$non_pic_object" != none; then 83043da084b3Smrg rmfiles="$rmfiles $dir/$non_pic_object" 83053da084b3Smrg fi 83063da084b3Smrg fi 83073da084b3Smrg ;; 83083da084b3Smrg 83093da084b3Smrg *) 83103da084b3Smrg if test "$mode" = clean ; then 83113da084b3Smrg noexename=$name 83123da084b3Smrg case $file in 83133da084b3Smrg *.exe) 8314d63fdb69Smrg func_stripname '' '.exe' "$file" 8315d63fdb69Smrg file=$func_stripname_result 8316d63fdb69Smrg func_stripname '' '.exe' "$name" 8317d63fdb69Smrg noexename=$func_stripname_result 83183da084b3Smrg # $file with .exe has already been added to rmfiles, 83193da084b3Smrg # add $file without .exe 83203da084b3Smrg rmfiles="$rmfiles $file" 83213da084b3Smrg ;; 83223da084b3Smrg esac 83233da084b3Smrg # Do a test to see if this is a libtool program. 8324d63fdb69Smrg if func_ltwrapper_p "$file"; then 8325d63fdb69Smrg if func_ltwrapper_executable_p "$file"; then 8326d63fdb69Smrg func_ltwrapper_scriptname "$file" 8327d63fdb69Smrg relink_command= 8328d63fdb69Smrg func_source $func_ltwrapper_scriptname_result 8329d63fdb69Smrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 8330d63fdb69Smrg else 8331d63fdb69Smrg relink_command= 8332d63fdb69Smrg func_source $dir/$noexename 8333d63fdb69Smrg fi 83343da084b3Smrg 83353da084b3Smrg # note $name still contains .exe if it was in $file originally 83363da084b3Smrg # as does the version of $file that was added into $rmfiles 83373da084b3Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 83383da084b3Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 83393da084b3Smrg rmfiles="$rmfiles $objdir/lt-$name" 83403da084b3Smrg fi 83413da084b3Smrg if test "X$noexename" != "X$name" ; then 83423da084b3Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 83433da084b3Smrg fi 83443da084b3Smrg fi 83453da084b3Smrg fi 83463da084b3Smrg ;; 83473da084b3Smrg esac 8348d63fdb69Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 83493da084b3Smrg done 83503da084b3Smrg objdir="$origobjdir" 83513da084b3Smrg 83523da084b3Smrg # Try to remove the ${objdir}s in the directories where we deleted files 83533da084b3Smrg for dir in $rmdirs; do 83543da084b3Smrg if test -d "$dir"; then 8355d63fdb69Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 83563da084b3Smrg fi 83573da084b3Smrg done 83583da084b3Smrg 83593da084b3Smrg exit $exit_status 8360d63fdb69Smrg} 83613da084b3Smrg 8362d63fdb69Smrg{ test "$mode" = uninstall || test "$mode" = clean; } && 8363d63fdb69Smrg func_mode_uninstall ${1+"$@"} 83643da084b3Smrg 8365d63fdb69Smrgtest -z "$mode" && { 8366d63fdb69Smrg help="$generic_help" 8367d63fdb69Smrg func_fatal_help "you must specify a MODE" 8368d63fdb69Smrg} 8369d63fdb69Smrg 8370d63fdb69Smrgtest -z "$exec_cmd" && \ 8371d63fdb69Smrg func_fatal_help "invalid operation mode \`$mode'" 83723da084b3Smrg 83733da084b3Smrgif test -n "$exec_cmd"; then 8374d63fdb69Smrg eval exec "$exec_cmd" 83753da084b3Smrg exit $EXIT_FAILURE 83763da084b3Smrgfi 83773da084b3Smrg 8378d63fdb69Smrgexit $exit_status 83793da084b3Smrg 83803da084b3Smrg 83813da084b3Smrg# The TAGs below are defined such that we never get into a situation 83823da084b3Smrg# in which we disable both kinds of libraries. Given conflicting 83833da084b3Smrg# choices, we go for a static library, that is the most portable, 83843da084b3Smrg# since we can't tell whether shared libraries were disabled because 83853da084b3Smrg# the user asked for that or because the platform doesn't support 83863da084b3Smrg# them. This is particularly important on AIX, because we don't 83873da084b3Smrg# support having both static and shared libraries enabled at the same 83883da084b3Smrg# time on that platform, so we default to a shared-only configuration. 83893da084b3Smrg# If a disable-shared tag is given, we'll fallback to a static-only 83903da084b3Smrg# configuration. But we'll never go from static-only to shared-only. 83913da084b3Smrg 83923da084b3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 8393d63fdb69Smrgbuild_libtool_libs=no 8394d63fdb69Smrgbuild_old_libs=yes 83953da084b3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 83963da084b3Smrg 83973da084b3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 8398d63fdb69Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 83993da084b3Smrg# ### END LIBTOOL TAG CONFIG: disable-static 84003da084b3Smrg 84013da084b3Smrg# Local Variables: 84023da084b3Smrg# mode:shell-script 84033da084b3Smrg# sh-indentation:2 84043da084b3Smrg# End: 8405d63fdb69Smrg# vi:sw=2 8406d63fdb69Smrg 8407