ltmain.sh revision a7b590b3
1a7b590b3Smrg# Generated from ltmain.m4sh. 2a7b590b3Smrg 3a7b590b3Smrg# ltmain.sh (GNU libtool) 2.2.6b 4a7b590b3Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 5a7b590b3Smrg 6a7b590b3Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. 7a7b590b3Smrg# This is free software; see the source for copying conditions. There is NO 8a7b590b3Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9a7b590b3Smrg 10a7b590b3Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11943345d3Smrg# it under the terms of the GNU General Public License as published by 12943345d3Smrg# the Free Software Foundation; either version 2 of the License, or 13943345d3Smrg# (at your option) any later version. 14943345d3Smrg# 15a7b590b3Smrg# As a special exception to the GNU General Public License, 16a7b590b3Smrg# if you distribute this file as part of a program or library that 17a7b590b3Smrg# is built using GNU Libtool, you may include this file under the 18a7b590b3Smrg# same distribution terms that you use for the rest of that program. 19a7b590b3Smrg# 20a7b590b3Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21943345d3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22943345d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23943345d3Smrg# General Public License for more details. 24943345d3Smrg# 25943345d3Smrg# You should have received a copy of the GNU General Public License 26a7b590b3Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 27a7b590b3Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28a7b590b3Smrg# or obtained by writing to the Free Software Foundation, Inc., 29a7b590b3Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30943345d3Smrg 31a7b590b3Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 32a7b590b3Smrg# 33a7b590b3Smrg# Provide generalized library-building support services. 34a7b590b3Smrg# 35a7b590b3Smrg# --config show all configuration variables 36a7b590b3Smrg# --debug enable verbose shell tracing 37a7b590b3Smrg# -n, --dry-run display commands without modifying any files 38a7b590b3Smrg# --features display basic configuration information and exit 39a7b590b3Smrg# --mode=MODE use operation mode MODE 40a7b590b3Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 41a7b590b3Smrg# --quiet, --silent don't print informational messages 42a7b590b3Smrg# --tag=TAG use configuration variables from tag TAG 43a7b590b3Smrg# -v, --verbose print informational messages (default) 44a7b590b3Smrg# --version print version information 45a7b590b3Smrg# -h, --help print short or long help message 46a7b590b3Smrg# 47a7b590b3Smrg# MODE must be one of the following: 48a7b590b3Smrg# 49a7b590b3Smrg# clean remove files from the build directory 50a7b590b3Smrg# compile compile a source file into a libtool object 51a7b590b3Smrg# execute automatically set library path, then run a program 52a7b590b3Smrg# finish complete the installation of libtool libraries 53a7b590b3Smrg# install install libraries or executables 54a7b590b3Smrg# link create a library or an executable 55a7b590b3Smrg# uninstall remove libraries from an installed directory 56a7b590b3Smrg# 57a7b590b3Smrg# MODE-ARGS vary depending on the MODE. 58a7b590b3Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 59a7b590b3Smrg# 60a7b590b3Smrg# When reporting a bug, please describe a test case to reproduce it and 61a7b590b3Smrg# include the following information: 62a7b590b3Smrg# 63a7b590b3Smrg# host-triplet: $host 64a7b590b3Smrg# shell: $SHELL 65a7b590b3Smrg# compiler: $LTCC 66a7b590b3Smrg# compiler flags: $LTCFLAGS 67a7b590b3Smrg# linker: $LD (gnu? $with_gnu_ld) 68a7b590b3Smrg# $progname: (GNU libtool) 2.2.6b 69a7b590b3Smrg# automake: $automake_version 70a7b590b3Smrg# autoconf: $autoconf_version 71a7b590b3Smrg# 72a7b590b3Smrg# Report bugs to <bug-libtool@gnu.org>. 73943345d3Smrg 74943345d3SmrgPROGRAM=ltmain.sh 75943345d3SmrgPACKAGE=libtool 76a7b590b3SmrgVERSION=2.2.6b 77a7b590b3SmrgTIMESTAMP="" 78a7b590b3Smrgpackage_revision=1.3017 79943345d3Smrg 80a7b590b3Smrg# Be Bourne compatible 81f67b85aaSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 82f67b85aaSmrg emulate sh 83f67b85aaSmrg NULLCMD=: 84f67b85aaSmrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 85f67b85aaSmrg # is contrary to our usage. Disable this feature. 86f67b85aaSmrg alias -g '${1+"$@"}'='"$@"' 87943345d3Smrg setopt NO_GLOB_SUBST 88f67b85aaSmrgelse 89f67b85aaSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 90943345d3Smrgfi 915e695a52SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 925e695a52SmrgDUALCASE=1; export DUALCASE # for MKS sh 93943345d3Smrg 94a7b590b3Smrg# NLS nuisances: We save the old values to restore during execute mode. 95943345d3Smrg# Only set LANG and LC_ALL to C if already set. 96943345d3Smrg# These must not be set unconditionally because not all systems understand 97943345d3Smrg# e.g. LANG=C (notably SCO). 98a7b590b3Smrglt_user_locale= 99a7b590b3Smrglt_safe_locale= 1005e695a52Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 101f67b85aaSmrgdo 102f67b85aaSmrg eval "if test \"\${$lt_var+set}\" = set; then 103a7b590b3Smrg save_$lt_var=\$$lt_var 104a7b590b3Smrg $lt_var=C 1055e695a52Smrg export $lt_var 106a7b590b3Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 107a7b590b3Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1085e695a52Smrg fi" 109f67b85aaSmrgdone 110943345d3Smrg 111a7b590b3Smrg$lt_unset CDPATH 112a7b590b3Smrg 113a7b590b3Smrg 114a7b590b3Smrg 115a7b590b3Smrg 116a7b590b3Smrg 117a7b590b3Smrg: ${CP="cp -f"} 118a7b590b3Smrg: ${ECHO="echo"} 119a7b590b3Smrg: ${EGREP="/bin/grep -E"} 120a7b590b3Smrg: ${FGREP="/bin/grep -F"} 121a7b590b3Smrg: ${GREP="/bin/grep"} 122a7b590b3Smrg: ${LN_S="ln -s"} 123a7b590b3Smrg: ${MAKE="make"} 124a7b590b3Smrg: ${MKDIR="mkdir"} 125a7b590b3Smrg: ${MV="mv -f"} 126a7b590b3Smrg: ${RM="rm -f"} 127a7b590b3Smrg: ${SED="/bin/sed"} 128a7b590b3Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 129a7b590b3Smrg: ${Xsed="$SED -e 1s/^X//"} 130a7b590b3Smrg 131a7b590b3Smrg# Global variables: 132a7b590b3SmrgEXIT_SUCCESS=0 133a7b590b3SmrgEXIT_FAILURE=1 134a7b590b3SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 135a7b590b3SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 136a7b590b3Smrg 137a7b590b3Smrgexit_status=$EXIT_SUCCESS 1385e695a52Smrg 139943345d3Smrg# Make sure IFS has a sensible default 140943345d3Smrglt_nl=' 141943345d3Smrg' 142943345d3SmrgIFS=" $lt_nl" 143943345d3Smrg 144a7b590b3Smrgdirname="s,/[^/]*$,," 145a7b590b3Smrgbasename="s,^.*/,," 146a7b590b3Smrg 147a7b590b3Smrg# func_dirname_and_basename file append nondir_replacement 148a7b590b3Smrg# perform func_basename and func_dirname in a single function 149a7b590b3Smrg# call: 150a7b590b3Smrg# dirname: Compute the dirname of FILE. If nonempty, 151a7b590b3Smrg# add APPEND to the result, otherwise set result 152a7b590b3Smrg# to NONDIR_REPLACEMENT. 153a7b590b3Smrg# value returned in "$func_dirname_result" 154a7b590b3Smrg# basename: Compute filename of FILE. 155a7b590b3Smrg# value retuned in "$func_basename_result" 156a7b590b3Smrg# Implementation must be kept synchronized with func_dirname 157a7b590b3Smrg# and func_basename. For efficiency, we do not delegate to 158a7b590b3Smrg# those functions but instead duplicate the functionality here. 159a7b590b3Smrgfunc_dirname_and_basename () 160a7b590b3Smrg{ 161a7b590b3Smrg # Extract subdirectory from the argument. 162a7b590b3Smrg func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` 163a7b590b3Smrg if test "X$func_dirname_result" = "X${1}"; then 164a7b590b3Smrg func_dirname_result="${3}" 165a7b590b3Smrg else 166a7b590b3Smrg func_dirname_result="$func_dirname_result${2}" 167a7b590b3Smrg fi 168a7b590b3Smrg func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` 169a7b590b3Smrg} 170943345d3Smrg 171a7b590b3Smrg# Generated shell functions inserted here. 172a7b590b3Smrg 173a7b590b3Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 174a7b590b3Smrg# is ksh but when the shell is invoked as "sh" and the current value of 175a7b590b3Smrg# the _XPG environment variable is not equal to 1 (one), the special 176a7b590b3Smrg# positional parameter $0, within a function call, is the name of the 177a7b590b3Smrg# function. 178a7b590b3Smrgprogpath="$0" 179a7b590b3Smrg 180a7b590b3Smrg# The name of this program: 181a7b590b3Smrg# In the unlikely event $progname began with a '-', it would play havoc with 182a7b590b3Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case: 183a7b590b3Smrgfunc_dirname_and_basename "$progpath" 184a7b590b3Smrgprogname=$func_basename_result 185a7b590b3Smrgcase $progname in 186a7b590b3Smrg -*) progname=./$progname ;; 187a7b590b3Smrgesac 188a7b590b3Smrg 189a7b590b3Smrg# Make sure we have an absolute path for reexecution: 190a7b590b3Smrgcase $progpath in 191a7b590b3Smrg [\\/]*|[A-Za-z]:\\*) ;; 192a7b590b3Smrg *[\\/]*) 193a7b590b3Smrg progdir=$func_dirname_result 194a7b590b3Smrg progdir=`cd "$progdir" && pwd` 195a7b590b3Smrg progpath="$progdir/$progname" 196a7b590b3Smrg ;; 197a7b590b3Smrg *) 198a7b590b3Smrg save_IFS="$IFS" 199a7b590b3Smrg IFS=: 200a7b590b3Smrg for progdir in $PATH; do 201a7b590b3Smrg IFS="$save_IFS" 202a7b590b3Smrg test -x "$progdir/$progname" && break 203a7b590b3Smrg done 204a7b590b3Smrg IFS="$save_IFS" 205a7b590b3Smrg test -n "$progdir" || progdir=`pwd` 206a7b590b3Smrg progpath="$progdir/$progname" 207a7b590b3Smrg ;; 208a7b590b3Smrgesac 209a7b590b3Smrg 210a7b590b3Smrg# Sed substitution that helps us do robust quoting. It backslashifies 211a7b590b3Smrg# metacharacters that are still active within double-quoted strings. 212a7b590b3SmrgXsed="${SED}"' -e 1s/^X//' 213a7b590b3Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 214a7b590b3Smrg 215a7b590b3Smrg# Same as above, but do not quote variable references. 216a7b590b3Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 217a7b590b3Smrg 218a7b590b3Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 219a7b590b3Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 220a7b590b3Smrg# in input to double_quote_subst, that '$' was protected from expansion. 221a7b590b3Smrg# Since each input `\' is now two `\'s, look for any number of runs of 222a7b590b3Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 223a7b590b3Smrgbs='\\' 224a7b590b3Smrgbs2='\\\\' 225a7b590b3Smrgbs4='\\\\\\\\' 226a7b590b3Smrgdollar='\$' 227a7b590b3Smrgsed_double_backslash="\ 228a7b590b3Smrg s/$bs4/&\\ 229a7b590b3Smrg/g 230a7b590b3Smrg s/^$bs2$dollar/$bs&/ 231a7b590b3Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 232a7b590b3Smrg s/\n//g" 233a7b590b3Smrg 234a7b590b3Smrg# Standard options: 235a7b590b3Smrgopt_dry_run=false 236a7b590b3Smrgopt_help=false 237a7b590b3Smrgopt_quiet=false 238a7b590b3Smrgopt_verbose=false 239a7b590b3Smrgopt_warning=: 240a7b590b3Smrg 241a7b590b3Smrg# func_echo arg... 242a7b590b3Smrg# Echo program name prefixed message, along with the current mode 243a7b590b3Smrg# name if it has been set yet. 244a7b590b3Smrgfunc_echo () 245a7b590b3Smrg{ 246a7b590b3Smrg $ECHO "$progname${mode+: }$mode: $*" 247a7b590b3Smrg} 248a7b590b3Smrg 249a7b590b3Smrg# func_verbose arg... 250a7b590b3Smrg# Echo program name prefixed message in verbose mode only. 251a7b590b3Smrgfunc_verbose () 252a7b590b3Smrg{ 253a7b590b3Smrg $opt_verbose && func_echo ${1+"$@"} 254a7b590b3Smrg 255a7b590b3Smrg # A bug in bash halts the script if the last line of a function 256a7b590b3Smrg # fails when set -e is in force, so we need another command to 257a7b590b3Smrg # work around that: 258a7b590b3Smrg : 259a7b590b3Smrg} 260a7b590b3Smrg 261a7b590b3Smrg# func_error arg... 262a7b590b3Smrg# Echo program name prefixed message to standard error. 263a7b590b3Smrgfunc_error () 264a7b590b3Smrg{ 265a7b590b3Smrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 266a7b590b3Smrg} 267a7b590b3Smrg 268a7b590b3Smrg# func_warning arg... 269a7b590b3Smrg# Echo program name prefixed warning message to standard error. 270a7b590b3Smrgfunc_warning () 271a7b590b3Smrg{ 272a7b590b3Smrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 273a7b590b3Smrg 274a7b590b3Smrg # bash bug again: 275a7b590b3Smrg : 276a7b590b3Smrg} 277a7b590b3Smrg 278a7b590b3Smrg# func_fatal_error arg... 279a7b590b3Smrg# Echo program name prefixed message to standard error, and exit. 280a7b590b3Smrgfunc_fatal_error () 281a7b590b3Smrg{ 282a7b590b3Smrg func_error ${1+"$@"} 283a7b590b3Smrg exit $EXIT_FAILURE 284a7b590b3Smrg} 285a7b590b3Smrg 286a7b590b3Smrg# func_fatal_help arg... 287a7b590b3Smrg# Echo program name prefixed message to standard error, followed by 288a7b590b3Smrg# a help hint, and exit. 289a7b590b3Smrgfunc_fatal_help () 290a7b590b3Smrg{ 291a7b590b3Smrg func_error ${1+"$@"} 292a7b590b3Smrg func_fatal_error "$help" 293a7b590b3Smrg} 294a7b590b3Smrghelp="Try \`$progname --help' for more information." ## default 295a7b590b3Smrg 296a7b590b3Smrg 297a7b590b3Smrg# func_grep expression filename 298a7b590b3Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 299a7b590b3Smrgfunc_grep () 300a7b590b3Smrg{ 301a7b590b3Smrg $GREP "$1" "$2" >/dev/null 2>&1 302a7b590b3Smrg} 303a7b590b3Smrg 304a7b590b3Smrg 305a7b590b3Smrg# func_mkdir_p directory-path 306a7b590b3Smrg# Make sure the entire path to DIRECTORY-PATH is available. 307a7b590b3Smrgfunc_mkdir_p () 308a7b590b3Smrg{ 309a7b590b3Smrg my_directory_path="$1" 310a7b590b3Smrg my_dir_list= 311a7b590b3Smrg 312a7b590b3Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 313a7b590b3Smrg 314a7b590b3Smrg # Protect directory names starting with `-' 315a7b590b3Smrg case $my_directory_path in 316a7b590b3Smrg -*) my_directory_path="./$my_directory_path" ;; 317a7b590b3Smrg esac 318a7b590b3Smrg 319a7b590b3Smrg # While some portion of DIR does not yet exist... 320a7b590b3Smrg while test ! -d "$my_directory_path"; do 321a7b590b3Smrg # ...make a list in topmost first order. Use a colon delimited 322a7b590b3Smrg # list incase some portion of path contains whitespace. 323a7b590b3Smrg my_dir_list="$my_directory_path:$my_dir_list" 324a7b590b3Smrg 325a7b590b3Smrg # If the last portion added has no slash in it, the list is done 326a7b590b3Smrg case $my_directory_path in */*) ;; *) break ;; esac 327a7b590b3Smrg 328a7b590b3Smrg # ...otherwise throw away the child directory and loop 329a7b590b3Smrg my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` 330a7b590b3Smrg done 331a7b590b3Smrg my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` 332a7b590b3Smrg 333a7b590b3Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 334a7b590b3Smrg for my_dir in $my_dir_list; do 335a7b590b3Smrg IFS="$save_mkdir_p_IFS" 336a7b590b3Smrg # mkdir can fail with a `File exist' error if two processes 337a7b590b3Smrg # try to create one of the directories concurrently. Don't 338a7b590b3Smrg # stop in that case! 339a7b590b3Smrg $MKDIR "$my_dir" 2>/dev/null || : 340a7b590b3Smrg done 341a7b590b3Smrg IFS="$save_mkdir_p_IFS" 342a7b590b3Smrg 343a7b590b3Smrg # Bail out if we (or some other process) failed to create a directory. 344a7b590b3Smrg test -d "$my_directory_path" || \ 345a7b590b3Smrg func_fatal_error "Failed to create \`$1'" 346a7b590b3Smrg fi 347a7b590b3Smrg} 348943345d3Smrg 349943345d3Smrg 350943345d3Smrg# func_mktempdir [string] 351943345d3Smrg# Make a temporary directory that won't clash with other running 352943345d3Smrg# libtool processes, and avoids race conditions if possible. If 353943345d3Smrg# given, STRING is the basename for that directory. 354943345d3Smrgfunc_mktempdir () 355943345d3Smrg{ 356943345d3Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 357943345d3Smrg 358a7b590b3Smrg if test "$opt_dry_run" = ":"; then 359943345d3Smrg # Return a directory name, but don't create it in dry-run mode 360943345d3Smrg my_tmpdir="${my_template}-$$" 361943345d3Smrg else 362943345d3Smrg 363943345d3Smrg # If mktemp works, use that first and foremost 364943345d3Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 365943345d3Smrg 366943345d3Smrg if test ! -d "$my_tmpdir"; then 367a7b590b3Smrg # Failing that, at least try and use $RANDOM to avoid a race 368a7b590b3Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 369943345d3Smrg 370a7b590b3Smrg save_mktempdir_umask=`umask` 371a7b590b3Smrg umask 0077 372a7b590b3Smrg $MKDIR "$my_tmpdir" 373a7b590b3Smrg umask $save_mktempdir_umask 374943345d3Smrg fi 375943345d3Smrg 376943345d3Smrg # If we're not in dry-run mode, bomb out on failure 377a7b590b3Smrg test -d "$my_tmpdir" || \ 378a7b590b3Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 379943345d3Smrg fi 380943345d3Smrg 381a7b590b3Smrg $ECHO "X$my_tmpdir" | $Xsed 382943345d3Smrg} 383943345d3Smrg 384943345d3Smrg 385a7b590b3Smrg# func_quote_for_eval arg 386a7b590b3Smrg# Aesthetically quote ARG to be evaled later. 387a7b590b3Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 388a7b590b3Smrg# is double-quoted, suitable for a subsequent eval, whereas 389a7b590b3Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 390a7b590b3Smrg# which are still active within double quotes backslashified. 391a7b590b3Smrgfunc_quote_for_eval () 392943345d3Smrg{ 393a7b590b3Smrg case $1 in 394a7b590b3Smrg *[\\\`\"\$]*) 395a7b590b3Smrg func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; 396a7b590b3Smrg *) 397a7b590b3Smrg func_quote_for_eval_unquoted_result="$1" ;; 398a7b590b3Smrg esac 399a7b590b3Smrg 400a7b590b3Smrg case $func_quote_for_eval_unquoted_result in 401a7b590b3Smrg # Double-quote args containing shell metacharacters to delay 402a7b590b3Smrg # word splitting, command substitution and and variable 403a7b590b3Smrg # expansion for a subsequent eval. 404a7b590b3Smrg # Many Bourne shells cannot handle close brackets correctly 405a7b590b3Smrg # in scan sets, so we specify it separately. 406a7b590b3Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 407a7b590b3Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 408a7b590b3Smrg ;; 409a7b590b3Smrg *) 410a7b590b3Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 411943345d3Smrg esac 412943345d3Smrg} 413943345d3Smrg 414943345d3Smrg 415a7b590b3Smrg# func_quote_for_expand arg 416a7b590b3Smrg# Aesthetically quote ARG to be evaled later; same as above, 417a7b590b3Smrg# but do not quote variable references. 418a7b590b3Smrgfunc_quote_for_expand () 419943345d3Smrg{ 420a7b590b3Smrg case $1 in 421a7b590b3Smrg *[\\\`\"]*) 422a7b590b3Smrg my_arg=`$ECHO "X$1" | $Xsed \ 423a7b590b3Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 424943345d3Smrg *) 425a7b590b3Smrg my_arg="$1" ;; 426a7b590b3Smrg esac 427a7b590b3Smrg 428a7b590b3Smrg case $my_arg in 429a7b590b3Smrg # Double-quote args containing shell metacharacters to delay 430a7b590b3Smrg # word splitting and command substitution for a subsequent eval. 431a7b590b3Smrg # Many Bourne shells cannot handle close brackets correctly 432a7b590b3Smrg # in scan sets, so we specify it separately. 433a7b590b3Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 434a7b590b3Smrg my_arg="\"$my_arg\"" 435a7b590b3Smrg ;; 436a7b590b3Smrg esac 437a7b590b3Smrg 438a7b590b3Smrg func_quote_for_expand_result="$my_arg" 439943345d3Smrg} 440943345d3Smrg 441943345d3Smrg 442a7b590b3Smrg# func_show_eval cmd [fail_exp] 443a7b590b3Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 444a7b590b3Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 445a7b590b3Smrg# is given, then evaluate it. 446a7b590b3Smrgfunc_show_eval () 447943345d3Smrg{ 448a7b590b3Smrg my_cmd="$1" 449a7b590b3Smrg my_fail_exp="${2-:}" 450943345d3Smrg 451a7b590b3Smrg ${opt_silent-false} || { 452a7b590b3Smrg func_quote_for_expand "$my_cmd" 453a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 454a7b590b3Smrg } 455a7b590b3Smrg 456a7b590b3Smrg if ${opt_dry_run-false}; then :; else 457a7b590b3Smrg eval "$my_cmd" 458a7b590b3Smrg my_status=$? 459a7b590b3Smrg if test "$my_status" -eq 0; then :; else 460a7b590b3Smrg eval "(exit $my_status); $my_fail_exp" 461a7b590b3Smrg fi 462943345d3Smrg fi 463943345d3Smrg} 464943345d3Smrg 465a7b590b3Smrg 466a7b590b3Smrg# func_show_eval_locale cmd [fail_exp] 467a7b590b3Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 468a7b590b3Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 469a7b590b3Smrg# is given, then evaluate it. Use the saved locale for evaluation. 470a7b590b3Smrgfunc_show_eval_locale () 471943345d3Smrg{ 472a7b590b3Smrg my_cmd="$1" 473a7b590b3Smrg my_fail_exp="${2-:}" 474a7b590b3Smrg 475a7b590b3Smrg ${opt_silent-false} || { 476a7b590b3Smrg func_quote_for_expand "$my_cmd" 477a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 478a7b590b3Smrg } 479a7b590b3Smrg 480a7b590b3Smrg if ${opt_dry_run-false}; then :; else 481a7b590b3Smrg eval "$lt_user_locale 482a7b590b3Smrg $my_cmd" 483a7b590b3Smrg my_status=$? 484a7b590b3Smrg eval "$lt_safe_locale" 485a7b590b3Smrg if test "$my_status" -eq 0; then :; else 486a7b590b3Smrg eval "(exit $my_status); $my_fail_exp" 487a7b590b3Smrg fi 488943345d3Smrg fi 489a7b590b3Smrg} 490943345d3Smrg 491943345d3Smrg 492a7b590b3Smrg 493a7b590b3Smrg 494a7b590b3Smrg 495a7b590b3Smrg# func_version 496a7b590b3Smrg# Echo version message to standard output and exit. 497a7b590b3Smrgfunc_version () 498a7b590b3Smrg{ 499a7b590b3Smrg $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { 500a7b590b3Smrg s/^# // 501a7b590b3Smrg s/^# *$// 502a7b590b3Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 503a7b590b3Smrg p 504a7b590b3Smrg }' < "$progpath" 505a7b590b3Smrg exit $? 506a7b590b3Smrg} 507a7b590b3Smrg 508a7b590b3Smrg# func_usage 509a7b590b3Smrg# Echo short help message to standard output and exit. 510a7b590b3Smrgfunc_usage () 511a7b590b3Smrg{ 512a7b590b3Smrg $SED -n '/^# Usage:/,/# -h/ { 513a7b590b3Smrg s/^# // 514a7b590b3Smrg s/^# *$// 515a7b590b3Smrg s/\$progname/'$progname'/ 516a7b590b3Smrg p 517a7b590b3Smrg }' < "$progpath" 518a7b590b3Smrg $ECHO 519a7b590b3Smrg $ECHO "run \`$progname --help | more' for full usage" 520a7b590b3Smrg exit $? 521a7b590b3Smrg} 522a7b590b3Smrg 523a7b590b3Smrg# func_help 524a7b590b3Smrg# Echo long help message to standard output and exit. 525a7b590b3Smrgfunc_help () 526a7b590b3Smrg{ 527a7b590b3Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 528a7b590b3Smrg s/^# // 529a7b590b3Smrg s/^# *$// 530a7b590b3Smrg s*\$progname*'$progname'* 531a7b590b3Smrg s*\$host*'"$host"'* 532a7b590b3Smrg s*\$SHELL*'"$SHELL"'* 533a7b590b3Smrg s*\$LTCC*'"$LTCC"'* 534a7b590b3Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 535a7b590b3Smrg s*\$LD*'"$LD"'* 536a7b590b3Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 537a7b590b3Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 538a7b590b3Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 539a7b590b3Smrg p 540a7b590b3Smrg }' < "$progpath" 541a7b590b3Smrg exit $? 542a7b590b3Smrg} 543a7b590b3Smrg 544a7b590b3Smrg# func_missing_arg argname 545a7b590b3Smrg# Echo program name prefixed message to standard error and set global 546a7b590b3Smrg# exit_cmd. 547a7b590b3Smrgfunc_missing_arg () 548a7b590b3Smrg{ 549a7b590b3Smrg func_error "missing argument for $1" 550a7b590b3Smrg exit_cmd=exit 551943345d3Smrg} 552943345d3Smrg 553a7b590b3Smrgexit_cmd=: 554943345d3Smrg 555943345d3Smrg 556a7b590b3Smrg 557a7b590b3Smrg 558a7b590b3Smrg 559a7b590b3Smrg# Check that we have a working $ECHO. 560a7b590b3Smrgif test "X$1" = X--no-reexec; then 561a7b590b3Smrg # Discard the --no-reexec flag, and continue. 562943345d3Smrg shift 563a7b590b3Smrgelif test "X$1" = X--fallback-echo; then 564a7b590b3Smrg # Avoid inline document here, it may be left over 565a7b590b3Smrg : 566a7b590b3Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then 567a7b590b3Smrg # Yippee, $ECHO works! 568a7b590b3Smrg : 569a7b590b3Smrgelse 570a7b590b3Smrg # Restart under the correct shell, and then maybe $ECHO will work. 571a7b590b3Smrg exec $SHELL "$progpath" --no-reexec ${1+"$@"} 572a7b590b3Smrgfi 573943345d3Smrg 574a7b590b3Smrgif test "X$1" = X--fallback-echo; then 575a7b590b3Smrg # used as fallback echo 576a7b590b3Smrg shift 577a7b590b3Smrg cat <<EOF 578a7b590b3Smrg$* 579a7b590b3SmrgEOF 580a7b590b3Smrg exit $EXIT_SUCCESS 581a7b590b3Smrgfi 582943345d3Smrg 583a7b590b3Smrgmagic="%%%MAGIC variable%%%" 584a7b590b3Smrgmagic_exe="%%%MAGIC EXE variable%%%" 585943345d3Smrg 586a7b590b3Smrg# Global variables. 587a7b590b3Smrg# $mode is unset 588a7b590b3Smrgnonopt= 589a7b590b3Smrgexecute_dlfiles= 590a7b590b3Smrgpreserve_args= 591a7b590b3Smrglo2o="s/\\.lo\$/.${objext}/" 592a7b590b3Smrgo2lo="s/\\.${objext}\$/.lo/" 593a7b590b3Smrgextracted_archives= 594a7b590b3Smrgextracted_serial=0 595943345d3Smrg 596a7b590b3Smrgopt_dry_run=false 597a7b590b3Smrgopt_duplicate_deps=false 598a7b590b3Smrgopt_silent=false 599a7b590b3Smrgopt_debug=: 600943345d3Smrg 601a7b590b3Smrg# If this variable is set in any of the actions, the command in it 602a7b590b3Smrg# will be execed at the end. This prevents here-documents from being 603a7b590b3Smrg# left over by shells. 604a7b590b3Smrgexec_cmd= 605a7b590b3Smrg 606a7b590b3Smrg# func_fatal_configuration arg... 607a7b590b3Smrg# Echo program name prefixed message to standard error, followed by 608a7b590b3Smrg# a configuration failure hint, and exit. 609a7b590b3Smrgfunc_fatal_configuration () 610a7b590b3Smrg{ 611a7b590b3Smrg func_error ${1+"$@"} 612a7b590b3Smrg func_error "See the $PACKAGE documentation for more information." 613a7b590b3Smrg func_fatal_error "Fatal configuration error." 614a7b590b3Smrg} 615943345d3Smrg 6165e695a52Smrg 617a7b590b3Smrg# func_config 618a7b590b3Smrg# Display the configuration for all the tags in this script. 619a7b590b3Smrgfunc_config () 620a7b590b3Smrg{ 621a7b590b3Smrg re_begincf='^# ### BEGIN LIBTOOL' 622a7b590b3Smrg re_endcf='^# ### END LIBTOOL' 623a7b590b3Smrg 624a7b590b3Smrg # Default configuration. 625a7b590b3Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 626943345d3Smrg 627943345d3Smrg # Now print the configurations for the tags. 628943345d3Smrg for tagname in $taglist; do 629a7b590b3Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 630943345d3Smrg done 631943345d3Smrg 632a7b590b3Smrg exit $? 633a7b590b3Smrg} 634943345d3Smrg 635a7b590b3Smrg# func_features 636a7b590b3Smrg# Display the features supported by this script. 637a7b590b3Smrgfunc_features () 638a7b590b3Smrg{ 639a7b590b3Smrg $ECHO "host: $host" 640943345d3Smrg if test "$build_libtool_libs" = yes; then 641a7b590b3Smrg $ECHO "enable shared libraries" 642943345d3Smrg else 643a7b590b3Smrg $ECHO "disable shared libraries" 644943345d3Smrg fi 645943345d3Smrg if test "$build_old_libs" = yes; then 646a7b590b3Smrg $ECHO "enable static libraries" 647943345d3Smrg else 648a7b590b3Smrg $ECHO "disable static libraries" 649943345d3Smrg fi 650a7b590b3Smrg 651943345d3Smrg exit $? 652a7b590b3Smrg} 653943345d3Smrg 654a7b590b3Smrg# func_enable_tag tagname 655a7b590b3Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 656a7b590b3Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 657a7b590b3Smrg# variable here. 658a7b590b3Smrgfunc_enable_tag () 659a7b590b3Smrg{ 660a7b590b3Smrg # Global variable: 661a7b590b3Smrg tagname="$1" 662943345d3Smrg 663a7b590b3Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 664a7b590b3Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 665a7b590b3Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 666943345d3Smrg 667a7b590b3Smrg # Validate tagname. 668a7b590b3Smrg case $tagname in 669a7b590b3Smrg *[!-_A-Za-z0-9,/]*) 670a7b590b3Smrg func_fatal_error "invalid tag name: $tagname" 671a7b590b3Smrg ;; 672a7b590b3Smrg esac 673943345d3Smrg 674a7b590b3Smrg # Don't test for the "default" C tag, as we know it's 675a7b590b3Smrg # there but not specially marked. 676a7b590b3Smrg case $tagname in 677a7b590b3Smrg CC) ;; 678a7b590b3Smrg *) 679a7b590b3Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 680a7b590b3Smrg taglist="$taglist $tagname" 681a7b590b3Smrg 682a7b590b3Smrg # Evaluate the configuration. Be careful to quote the path 683a7b590b3Smrg # and the sed script, to avoid splitting on whitespace, but 684a7b590b3Smrg # also don't use non-portable quotes within backquotes within 685a7b590b3Smrg # quotes we have to do it in 2 steps: 686a7b590b3Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 687a7b590b3Smrg eval "$extractedcf" 688a7b590b3Smrg else 689a7b590b3Smrg func_error "ignoring unknown tag $tagname" 690a7b590b3Smrg fi 691a7b590b3Smrg ;; 692a7b590b3Smrg esac 693a7b590b3Smrg} 694a7b590b3Smrg 695a7b590b3Smrg# Parse options once, thoroughly. This comes as soon as possible in 696a7b590b3Smrg# the script to make things like `libtool --version' happen quickly. 697a7b590b3Smrg{ 698943345d3Smrg 699a7b590b3Smrg # Shorthand for --mode=foo, only valid as the first argument 700a7b590b3Smrg case $1 in 701a7b590b3Smrg clean|clea|cle|cl) 702a7b590b3Smrg shift; set dummy --mode clean ${1+"$@"}; shift 703943345d3Smrg ;; 704a7b590b3Smrg compile|compil|compi|comp|com|co|c) 705a7b590b3Smrg shift; set dummy --mode compile ${1+"$@"}; shift 706943345d3Smrg ;; 707a7b590b3Smrg execute|execut|execu|exec|exe|ex|e) 708a7b590b3Smrg shift; set dummy --mode execute ${1+"$@"}; shift 709943345d3Smrg ;; 710a7b590b3Smrg finish|finis|fini|fin|fi|f) 711a7b590b3Smrg shift; set dummy --mode finish ${1+"$@"}; shift 712943345d3Smrg ;; 713a7b590b3Smrg install|instal|insta|inst|ins|in|i) 714a7b590b3Smrg shift; set dummy --mode install ${1+"$@"}; shift 715a7b590b3Smrg ;; 716a7b590b3Smrg link|lin|li|l) 717a7b590b3Smrg shift; set dummy --mode link ${1+"$@"}; shift 718a7b590b3Smrg ;; 719a7b590b3Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 720a7b590b3Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 721943345d3Smrg ;; 722943345d3Smrg esac 723943345d3Smrg 724a7b590b3Smrg # Parse non-mode specific arguments: 725a7b590b3Smrg while test "$#" -gt 0; do 726a7b590b3Smrg opt="$1" 727a7b590b3Smrg shift 728943345d3Smrg 729a7b590b3Smrg case $opt in 730a7b590b3Smrg --config) func_config ;; 731943345d3Smrg 732a7b590b3Smrg --debug) preserve_args="$preserve_args $opt" 733a7b590b3Smrg func_echo "enabling shell trace mode" 734a7b590b3Smrg opt_debug='set -x' 735a7b590b3Smrg $opt_debug 736a7b590b3Smrg ;; 737943345d3Smrg 738a7b590b3Smrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 739a7b590b3Smrg execute_dlfiles="$execute_dlfiles $1" 740a7b590b3Smrg shift 741a7b590b3Smrg ;; 742943345d3Smrg 743a7b590b3Smrg --dry-run | -n) opt_dry_run=: ;; 744a7b590b3Smrg --features) func_features ;; 745a7b590b3Smrg --finish) mode="finish" ;; 746a7b590b3Smrg 747a7b590b3Smrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 748a7b590b3Smrg case $1 in 749a7b590b3Smrg # Valid mode arguments: 750a7b590b3Smrg clean) ;; 751a7b590b3Smrg compile) ;; 752a7b590b3Smrg execute) ;; 753a7b590b3Smrg finish) ;; 754a7b590b3Smrg install) ;; 755a7b590b3Smrg link) ;; 756a7b590b3Smrg relink) ;; 757a7b590b3Smrg uninstall) ;; 758a7b590b3Smrg 759a7b590b3Smrg # Catch anything else as an error 760a7b590b3Smrg *) func_error "invalid argument for $opt" 761a7b590b3Smrg exit_cmd=exit 762a7b590b3Smrg break 763a7b590b3Smrg ;; 764a7b590b3Smrg esac 765a7b590b3Smrg 766a7b590b3Smrg mode="$1" 767a7b590b3Smrg shift 768a7b590b3Smrg ;; 769a7b590b3Smrg 770a7b590b3Smrg --preserve-dup-deps) 771a7b590b3Smrg opt_duplicate_deps=: ;; 772a7b590b3Smrg 773a7b590b3Smrg --quiet|--silent) preserve_args="$preserve_args $opt" 774a7b590b3Smrg opt_silent=: 775a7b590b3Smrg ;; 776a7b590b3Smrg 777a7b590b3Smrg --verbose| -v) preserve_args="$preserve_args $opt" 778a7b590b3Smrg opt_silent=false 779a7b590b3Smrg ;; 780a7b590b3Smrg 781a7b590b3Smrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 782a7b590b3Smrg preserve_args="$preserve_args $opt $1" 783a7b590b3Smrg func_enable_tag "$1" # tagname is set here 784a7b590b3Smrg shift 785a7b590b3Smrg ;; 786a7b590b3Smrg 787a7b590b3Smrg # Separate optargs to long options: 788a7b590b3Smrg -dlopen=*|--mode=*|--tag=*) 789a7b590b3Smrg func_opt_split "$opt" 790a7b590b3Smrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 791a7b590b3Smrg shift 792a7b590b3Smrg ;; 793a7b590b3Smrg 794a7b590b3Smrg -\?|-h) func_usage ;; 795a7b590b3Smrg --help) opt_help=: ;; 796a7b590b3Smrg --version) func_version ;; 797a7b590b3Smrg 798a7b590b3Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 799a7b590b3Smrg 800a7b590b3Smrg *) nonopt="$opt" 801a7b590b3Smrg break 802a7b590b3Smrg ;; 803a7b590b3Smrg esac 804a7b590b3Smrg done 805a7b590b3Smrg 806a7b590b3Smrg 807a7b590b3Smrg case $host in 808a7b590b3Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 809a7b590b3Smrg # don't eliminate duplications in $postdeps and $predeps 810a7b590b3Smrg opt_duplicate_compiler_generated_deps=: 811943345d3Smrg ;; 812943345d3Smrg *) 813a7b590b3Smrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 814a7b590b3Smrg ;; 815a7b590b3Smrg esac 816943345d3Smrg 817a7b590b3Smrg # Having warned about all mis-specified options, bail out if 818a7b590b3Smrg # anything was wrong. 819a7b590b3Smrg $exit_cmd $EXIT_FAILURE 820a7b590b3Smrg} 821a7b590b3Smrg 822a7b590b3Smrg# func_check_version_match 823a7b590b3Smrg# Ensure that we are using m4 macros, and libtool script from the same 824a7b590b3Smrg# release of libtool. 825a7b590b3Smrgfunc_check_version_match () 826a7b590b3Smrg{ 827a7b590b3Smrg if test "$package_revision" != "$macro_revision"; then 828a7b590b3Smrg if test "$VERSION" != "$macro_version"; then 829a7b590b3Smrg if test -z "$macro_version"; then 830a7b590b3Smrg cat >&2 <<_LT_EOF 831a7b590b3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 832a7b590b3Smrg$progname: definition of this LT_INIT comes from an older release. 833a7b590b3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 834a7b590b3Smrg$progname: and run autoconf again. 835a7b590b3Smrg_LT_EOF 836a7b590b3Smrg else 837a7b590b3Smrg cat >&2 <<_LT_EOF 838a7b590b3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 839a7b590b3Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 840a7b590b3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 841a7b590b3Smrg$progname: and run autoconf again. 842a7b590b3Smrg_LT_EOF 843943345d3Smrg fi 844a7b590b3Smrg else 845a7b590b3Smrg cat >&2 <<_LT_EOF 846a7b590b3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 847a7b590b3Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 848a7b590b3Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 849a7b590b3Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 850a7b590b3Smrg_LT_EOF 851a7b590b3Smrg fi 852a7b590b3Smrg 853a7b590b3Smrg exit $EXIT_MISMATCH 854a7b590b3Smrg fi 855a7b590b3Smrg} 856a7b590b3Smrg 857a7b590b3Smrg 858a7b590b3Smrg## ----------- ## 859a7b590b3Smrg## Main. ## 860a7b590b3Smrg## ----------- ## 861a7b590b3Smrg 862a7b590b3Smrg$opt_help || { 863a7b590b3Smrg # Sanity checks first: 864a7b590b3Smrg func_check_version_match 865a7b590b3Smrg 866a7b590b3Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 867a7b590b3Smrg func_fatal_configuration "not configured to build any kind of library" 868943345d3Smrg fi 869943345d3Smrg 870a7b590b3Smrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 871a7b590b3Smrg 872a7b590b3Smrg 873a7b590b3Smrg # Darwin sucks 874a7b590b3Smrg eval std_shrext=\"$shrext_cmds\" 875a7b590b3Smrg 876a7b590b3Smrg 877943345d3Smrg # Only execute mode is allowed to have -dlopen flags. 878943345d3Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 879a7b590b3Smrg func_error "unrecognized option \`-dlopen'" 880a7b590b3Smrg $ECHO "$help" 1>&2 881943345d3Smrg exit $EXIT_FAILURE 882943345d3Smrg fi 883943345d3Smrg 884943345d3Smrg # Change the help message to a mode-specific one. 885943345d3Smrg generic_help="$help" 886a7b590b3Smrg help="Try \`$progname --help --mode=$mode' for more information." 887a7b590b3Smrg} 888943345d3Smrg 889943345d3Smrg 890a7b590b3Smrg# func_lalib_p file 891a7b590b3Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 892a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out 893a7b590b3Smrg# determined imposters. 894a7b590b3Smrgfunc_lalib_p () 895a7b590b3Smrg{ 896a7b590b3Smrg test -f "$1" && 897a7b590b3Smrg $SED -e 4q "$1" 2>/dev/null \ 898a7b590b3Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 899a7b590b3Smrg} 900943345d3Smrg 901a7b590b3Smrg# func_lalib_unsafe_p file 902a7b590b3Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 903a7b590b3Smrg# This function implements the same check as func_lalib_p without 904a7b590b3Smrg# resorting to external programs. To this end, it redirects stdin and 905a7b590b3Smrg# closes it afterwards, without saving the original file descriptor. 906a7b590b3Smrg# As a safety measure, use it only where a negative result would be 907a7b590b3Smrg# fatal anyway. Works if `file' does not exist. 908a7b590b3Smrgfunc_lalib_unsafe_p () 909a7b590b3Smrg{ 910a7b590b3Smrg lalib_p=no 911a7b590b3Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 912a7b590b3Smrg for lalib_p_l in 1 2 3 4 913a7b590b3Smrg do 914a7b590b3Smrg read lalib_p_line 915a7b590b3Smrg case "$lalib_p_line" in 916a7b590b3Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 917a7b590b3Smrg esac 918a7b590b3Smrg done 919a7b590b3Smrg exec 0<&5 5<&- 920a7b590b3Smrg fi 921a7b590b3Smrg test "$lalib_p" = yes 922a7b590b3Smrg} 923943345d3Smrg 924a7b590b3Smrg# func_ltwrapper_script_p file 925a7b590b3Smrg# True iff FILE is a libtool wrapper script 926a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out 927a7b590b3Smrg# determined imposters. 928a7b590b3Smrgfunc_ltwrapper_script_p () 929a7b590b3Smrg{ 930a7b590b3Smrg func_lalib_p "$1" 931a7b590b3Smrg} 932943345d3Smrg 933a7b590b3Smrg# func_ltwrapper_executable_p file 934a7b590b3Smrg# True iff FILE is a libtool wrapper executable 935a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out 936a7b590b3Smrg# determined imposters. 937a7b590b3Smrgfunc_ltwrapper_executable_p () 938a7b590b3Smrg{ 939a7b590b3Smrg func_ltwrapper_exec_suffix= 940a7b590b3Smrg case $1 in 941a7b590b3Smrg *.exe) ;; 942a7b590b3Smrg *) func_ltwrapper_exec_suffix=.exe ;; 943a7b590b3Smrg esac 944a7b590b3Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 945a7b590b3Smrg} 946943345d3Smrg 947a7b590b3Smrg# func_ltwrapper_scriptname file 948a7b590b3Smrg# Assumes file is an ltwrapper_executable 949a7b590b3Smrg# uses $file to determine the appropriate filename for a 950a7b590b3Smrg# temporary ltwrapper_script. 951a7b590b3Smrgfunc_ltwrapper_scriptname () 952a7b590b3Smrg{ 953a7b590b3Smrg func_ltwrapper_scriptname_result="" 954a7b590b3Smrg if func_ltwrapper_executable_p "$1"; then 955a7b590b3Smrg func_dirname_and_basename "$1" "" "." 956a7b590b3Smrg func_stripname '' '.exe' "$func_basename_result" 957a7b590b3Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 958a7b590b3Smrg fi 959a7b590b3Smrg} 960a7b590b3Smrg 961a7b590b3Smrg# func_ltwrapper_p file 962a7b590b3Smrg# True iff FILE is a libtool wrapper script or wrapper executable 963a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out 964a7b590b3Smrg# determined imposters. 965a7b590b3Smrgfunc_ltwrapper_p () 966a7b590b3Smrg{ 967a7b590b3Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 968a7b590b3Smrg} 969a7b590b3Smrg 970a7b590b3Smrg 971a7b590b3Smrg# func_execute_cmds commands fail_cmd 972a7b590b3Smrg# Execute tilde-delimited COMMANDS. 973a7b590b3Smrg# If FAIL_CMD is given, eval that upon failure. 974a7b590b3Smrg# FAIL_CMD may read-access the current command in variable CMD! 975a7b590b3Smrgfunc_execute_cmds () 976a7b590b3Smrg{ 977a7b590b3Smrg $opt_debug 978a7b590b3Smrg save_ifs=$IFS; IFS='~' 979a7b590b3Smrg for cmd in $1; do 980a7b590b3Smrg IFS=$save_ifs 981a7b590b3Smrg eval cmd=\"$cmd\" 982a7b590b3Smrg func_show_eval "$cmd" "${2-:}" 983a7b590b3Smrg done 984a7b590b3Smrg IFS=$save_ifs 985a7b590b3Smrg} 986a7b590b3Smrg 987a7b590b3Smrg 988a7b590b3Smrg# func_source file 989a7b590b3Smrg# Source FILE, adding directory component if necessary. 990a7b590b3Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 991a7b590b3Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 992a7b590b3Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 993a7b590b3Smrg# `FILE.' does not work on cygwin managed mounts. 994a7b590b3Smrgfunc_source () 995a7b590b3Smrg{ 996a7b590b3Smrg $opt_debug 997a7b590b3Smrg case $1 in 998a7b590b3Smrg */* | *\\*) . "$1" ;; 999a7b590b3Smrg *) . "./$1" ;; 1000a7b590b3Smrg esac 1001a7b590b3Smrg} 1002a7b590b3Smrg 1003a7b590b3Smrg 1004a7b590b3Smrg# func_infer_tag arg 1005a7b590b3Smrg# Infer tagged configuration to use if any are available and 1006a7b590b3Smrg# if one wasn't chosen via the "--tag" command line option. 1007a7b590b3Smrg# Only attempt this if the compiler in the base compile 1008a7b590b3Smrg# command doesn't match the default compiler. 1009a7b590b3Smrg# arg is usually of the form 'gcc ...' 1010a7b590b3Smrgfunc_infer_tag () 1011a7b590b3Smrg{ 1012a7b590b3Smrg $opt_debug 1013a7b590b3Smrg if test -n "$available_tags" && test -z "$tagname"; then 1014a7b590b3Smrg CC_quoted= 1015a7b590b3Smrg for arg in $CC; do 1016a7b590b3Smrg func_quote_for_eval "$arg" 1017a7b590b3Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1018a7b590b3Smrg done 1019a7b590b3Smrg case $@ in 1020a7b590b3Smrg # Blanks in the command may have been stripped by the calling shell, 1021a7b590b3Smrg # but not from the CC environment variable when configure was run. 1022a7b590b3Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; 1023a7b590b3Smrg # Blanks at the start of $base_compile will cause this to fail 1024a7b590b3Smrg # if we don't check for them as well. 1025a7b590b3Smrg *) 1026a7b590b3Smrg for z in $available_tags; do 1027a7b590b3Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1028a7b590b3Smrg # Evaluate the configuration. 1029a7b590b3Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1030a7b590b3Smrg CC_quoted= 1031a7b590b3Smrg for arg in $CC; do 1032a7b590b3Smrg # Double-quote args containing other shell metacharacters. 1033a7b590b3Smrg func_quote_for_eval "$arg" 1034a7b590b3Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1035a7b590b3Smrg done 1036a7b590b3Smrg case "$@ " in 1037a7b590b3Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) 1038a7b590b3Smrg # The compiler in the base compile command matches 1039a7b590b3Smrg # the one in the tagged configuration. 1040a7b590b3Smrg # Assume this is the tagged configuration we want. 1041a7b590b3Smrg tagname=$z 1042a7b590b3Smrg break 1043a7b590b3Smrg ;; 1044a7b590b3Smrg esac 1045a7b590b3Smrg fi 1046a7b590b3Smrg done 1047a7b590b3Smrg # If $tagname still isn't set, then no tagged configuration 1048a7b590b3Smrg # was found and let the user know that the "--tag" command 1049a7b590b3Smrg # line option must be used. 1050a7b590b3Smrg if test -z "$tagname"; then 1051a7b590b3Smrg func_echo "unable to infer tagged configuration" 1052a7b590b3Smrg func_fatal_error "specify a tag with \`--tag'" 1053a7b590b3Smrg# else 1054a7b590b3Smrg# func_verbose "using $tagname tagged configuration" 1055a7b590b3Smrg fi 1056a7b590b3Smrg ;; 1057a7b590b3Smrg esac 1058a7b590b3Smrg fi 1059a7b590b3Smrg} 1060a7b590b3Smrg 1061a7b590b3Smrg 1062a7b590b3Smrg 1063a7b590b3Smrg# func_write_libtool_object output_name pic_name nonpic_name 1064a7b590b3Smrg# Create a libtool object file (analogous to a ".la" file), 1065a7b590b3Smrg# but don't create it if we're doing a dry run. 1066a7b590b3Smrgfunc_write_libtool_object () 1067a7b590b3Smrg{ 1068a7b590b3Smrg write_libobj=${1} 1069a7b590b3Smrg if test "$build_libtool_libs" = yes; then 1070a7b590b3Smrg write_lobj=\'${2}\' 1071a7b590b3Smrg else 1072a7b590b3Smrg write_lobj=none 1073a7b590b3Smrg fi 1074a7b590b3Smrg 1075a7b590b3Smrg if test "$build_old_libs" = yes; then 1076a7b590b3Smrg write_oldobj=\'${3}\' 1077a7b590b3Smrg else 1078a7b590b3Smrg write_oldobj=none 1079a7b590b3Smrg fi 1080a7b590b3Smrg 1081a7b590b3Smrg $opt_dry_run || { 1082a7b590b3Smrg cat >${write_libobj}T <<EOF 1083a7b590b3Smrg# $write_libobj - a libtool object file 1084a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1085a7b590b3Smrg# 1086a7b590b3Smrg# Please DO NOT delete this file! 1087a7b590b3Smrg# It is necessary for linking the library. 1088a7b590b3Smrg 1089a7b590b3Smrg# Name of the PIC object. 1090a7b590b3Smrgpic_object=$write_lobj 1091a7b590b3Smrg 1092a7b590b3Smrg# Name of the non-PIC object 1093a7b590b3Smrgnon_pic_object=$write_oldobj 1094a7b590b3Smrg 1095a7b590b3SmrgEOF 1096a7b590b3Smrg $MV "${write_libobj}T" "${write_libobj}" 1097a7b590b3Smrg } 1098a7b590b3Smrg} 1099a7b590b3Smrg 1100a7b590b3Smrg# func_mode_compile arg... 1101a7b590b3Smrgfunc_mode_compile () 1102a7b590b3Smrg{ 1103a7b590b3Smrg $opt_debug 1104a7b590b3Smrg # Get the compilation command and the source file. 1105a7b590b3Smrg base_compile= 1106a7b590b3Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1107a7b590b3Smrg suppress_opt=yes 1108a7b590b3Smrg suppress_output= 1109a7b590b3Smrg arg_mode=normal 1110a7b590b3Smrg libobj= 1111a7b590b3Smrg later= 1112a7b590b3Smrg pie_flag= 1113a7b590b3Smrg 1114a7b590b3Smrg for arg 1115a7b590b3Smrg do 1116a7b590b3Smrg case $arg_mode in 1117a7b590b3Smrg arg ) 1118a7b590b3Smrg # do not "continue". Instead, add this to base_compile 1119a7b590b3Smrg lastarg="$arg" 1120a7b590b3Smrg arg_mode=normal 1121a7b590b3Smrg ;; 1122a7b590b3Smrg 1123a7b590b3Smrg target ) 1124a7b590b3Smrg libobj="$arg" 1125a7b590b3Smrg arg_mode=normal 1126a7b590b3Smrg continue 1127a7b590b3Smrg ;; 1128a7b590b3Smrg 1129a7b590b3Smrg normal ) 1130a7b590b3Smrg # Accept any command-line options. 1131a7b590b3Smrg case $arg in 1132a7b590b3Smrg -o) 1133a7b590b3Smrg test -n "$libobj" && \ 1134a7b590b3Smrg func_fatal_error "you cannot specify \`-o' more than once" 1135a7b590b3Smrg arg_mode=target 1136a7b590b3Smrg continue 1137a7b590b3Smrg ;; 1138a7b590b3Smrg 1139a7b590b3Smrg -pie | -fpie | -fPIE) 1140a7b590b3Smrg pie_flag="$pie_flag $arg" 1141a7b590b3Smrg continue 1142a7b590b3Smrg ;; 1143a7b590b3Smrg 1144a7b590b3Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1145a7b590b3Smrg later="$later $arg" 1146a7b590b3Smrg continue 1147a7b590b3Smrg ;; 1148a7b590b3Smrg 1149a7b590b3Smrg -no-suppress) 1150943345d3Smrg suppress_opt=no 1151943345d3Smrg continue 1152943345d3Smrg ;; 1153943345d3Smrg 1154943345d3Smrg -Xcompiler) 1155943345d3Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 1156943345d3Smrg continue # The current "srcfile" will either be retained or 1157943345d3Smrg ;; # replaced later. I would guess that would be a bug. 1158943345d3Smrg 1159943345d3Smrg -Wc,*) 1160a7b590b3Smrg func_stripname '-Wc,' '' "$arg" 1161a7b590b3Smrg args=$func_stripname_result 1162943345d3Smrg lastarg= 1163943345d3Smrg save_ifs="$IFS"; IFS=',' 1164a7b590b3Smrg for arg in $args; do 1165943345d3Smrg IFS="$save_ifs" 1166a7b590b3Smrg func_quote_for_eval "$arg" 1167a7b590b3Smrg lastarg="$lastarg $func_quote_for_eval_result" 1168943345d3Smrg done 1169943345d3Smrg IFS="$save_ifs" 1170a7b590b3Smrg func_stripname ' ' '' "$lastarg" 1171a7b590b3Smrg lastarg=$func_stripname_result 1172943345d3Smrg 1173943345d3Smrg # Add the arguments to base_compile. 1174943345d3Smrg base_compile="$base_compile $lastarg" 1175943345d3Smrg continue 1176943345d3Smrg ;; 1177943345d3Smrg 1178a7b590b3Smrg *) 1179943345d3Smrg # Accept the current argument as the source file. 1180943345d3Smrg # The previous "srcfile" becomes the current argument. 1181943345d3Smrg # 1182943345d3Smrg lastarg="$srcfile" 1183943345d3Smrg srcfile="$arg" 1184943345d3Smrg ;; 1185943345d3Smrg esac # case $arg 1186943345d3Smrg ;; 1187943345d3Smrg esac # case $arg_mode 1188943345d3Smrg 1189943345d3Smrg # Aesthetically quote the previous argument. 1190a7b590b3Smrg func_quote_for_eval "$lastarg" 1191a7b590b3Smrg base_compile="$base_compile $func_quote_for_eval_result" 1192943345d3Smrg done # for arg 1193943345d3Smrg 1194943345d3Smrg case $arg_mode in 1195943345d3Smrg arg) 1196a7b590b3Smrg func_fatal_error "you must specify an argument for -Xcompile" 1197943345d3Smrg ;; 1198943345d3Smrg target) 1199a7b590b3Smrg func_fatal_error "you must specify a target with \`-o'" 1200943345d3Smrg ;; 1201943345d3Smrg *) 1202943345d3Smrg # Get the name of the library object. 1203a7b590b3Smrg test -z "$libobj" && { 1204a7b590b3Smrg func_basename "$srcfile" 1205a7b590b3Smrg libobj="$func_basename_result" 1206a7b590b3Smrg } 1207943345d3Smrg ;; 1208943345d3Smrg esac 1209943345d3Smrg 1210943345d3Smrg # Recognize several different file suffixes. 1211943345d3Smrg # If the user specifies -o file.o, it is replaced with file.lo 1212943345d3Smrg case $libobj in 1213a7b590b3Smrg *.[cCFSifmso] | \ 1214a7b590b3Smrg *.ada | *.adb | *.ads | *.asm | \ 1215a7b590b3Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 1216a7b590b3Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx) 1217a7b590b3Smrg func_xform "$libobj" 1218a7b590b3Smrg libobj=$func_xform_result 1219a7b590b3Smrg ;; 1220943345d3Smrg esac 1221943345d3Smrg 1222943345d3Smrg case $libobj in 1223a7b590b3Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 1224943345d3Smrg *) 1225a7b590b3Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 1226943345d3Smrg ;; 1227943345d3Smrg esac 1228943345d3Smrg 1229943345d3Smrg func_infer_tag $base_compile 1230943345d3Smrg 1231943345d3Smrg for arg in $later; do 1232943345d3Smrg case $arg in 1233a7b590b3Smrg -shared) 1234a7b590b3Smrg test "$build_libtool_libs" != yes && \ 1235a7b590b3Smrg func_fatal_configuration "can not build a shared library" 1236a7b590b3Smrg build_old_libs=no 1237a7b590b3Smrg continue 1238a7b590b3Smrg ;; 1239a7b590b3Smrg 1240943345d3Smrg -static) 1241a7b590b3Smrg build_libtool_libs=no 1242943345d3Smrg build_old_libs=yes 1243943345d3Smrg continue 1244943345d3Smrg ;; 1245943345d3Smrg 1246943345d3Smrg -prefer-pic) 1247943345d3Smrg pic_mode=yes 1248943345d3Smrg continue 1249943345d3Smrg ;; 1250943345d3Smrg 1251943345d3Smrg -prefer-non-pic) 1252943345d3Smrg pic_mode=no 1253943345d3Smrg continue 1254943345d3Smrg ;; 1255943345d3Smrg esac 1256943345d3Smrg done 1257943345d3Smrg 1258a7b590b3Smrg func_quote_for_eval "$libobj" 1259a7b590b3Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 1260a7b590b3Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 1261a7b590b3Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 1262a7b590b3Smrg func_dirname_and_basename "$obj" "/" "" 1263a7b590b3Smrg objname="$func_basename_result" 1264a7b590b3Smrg xdir="$func_dirname_result" 1265943345d3Smrg lobj=${xdir}$objdir/$objname 1266943345d3Smrg 1267a7b590b3Smrg test -z "$base_compile" && \ 1268a7b590b3Smrg func_fatal_help "you must specify a compilation command" 1269943345d3Smrg 1270943345d3Smrg # Delete any leftover library objects. 1271943345d3Smrg if test "$build_old_libs" = yes; then 1272943345d3Smrg removelist="$obj $lobj $libobj ${libobj}T" 1273943345d3Smrg else 1274943345d3Smrg removelist="$lobj $libobj ${libobj}T" 1275943345d3Smrg fi 1276943345d3Smrg 1277943345d3Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 1278943345d3Smrg case $host_os in 1279a7b590b3Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 1280943345d3Smrg pic_mode=default 1281943345d3Smrg ;; 1282943345d3Smrg esac 1283943345d3Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 1284943345d3Smrg # non-PIC code in shared libraries is not supported 1285943345d3Smrg pic_mode=default 1286943345d3Smrg fi 1287943345d3Smrg 1288943345d3Smrg # Calculate the filename of the output object if compiler does 1289943345d3Smrg # not support -o with -c 1290943345d3Smrg if test "$compiler_c_o" = no; then 1291a7b590b3Smrg output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 1292943345d3Smrg lockfile="$output_obj.lock" 1293943345d3Smrg else 1294943345d3Smrg output_obj= 1295943345d3Smrg need_locks=no 1296943345d3Smrg lockfile= 1297943345d3Smrg fi 1298943345d3Smrg 1299943345d3Smrg # Lock this critical section if it is needed 1300943345d3Smrg # We use this script file to make the link, it avoids creating a new file 1301943345d3Smrg if test "$need_locks" = yes; then 1302a7b590b3Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 1303a7b590b3Smrg func_echo "Waiting for $lockfile to be removed" 1304943345d3Smrg sleep 2 1305943345d3Smrg done 1306943345d3Smrg elif test "$need_locks" = warn; then 1307943345d3Smrg if test -f "$lockfile"; then 1308a7b590b3Smrg $ECHO "\ 1309943345d3Smrg*** ERROR, $lockfile exists and contains: 1310943345d3Smrg`cat $lockfile 2>/dev/null` 1311943345d3Smrg 1312943345d3SmrgThis indicates that another process is trying to use the same 1313943345d3Smrgtemporary object file, and libtool could not work around it because 1314943345d3Smrgyour compiler does not support \`-c' and \`-o' together. If you 1315943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 1316943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better 1317943345d3Smrgcompiler." 1318943345d3Smrg 1319a7b590b3Smrg $opt_dry_run || $RM $removelist 1320943345d3Smrg exit $EXIT_FAILURE 1321943345d3Smrg fi 1322a7b590b3Smrg removelist="$removelist $output_obj" 1323a7b590b3Smrg $ECHO "$srcfile" > "$lockfile" 1324943345d3Smrg fi 1325943345d3Smrg 1326a7b590b3Smrg $opt_dry_run || $RM $removelist 1327a7b590b3Smrg removelist="$removelist $lockfile" 1328a7b590b3Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 1329a7b590b3Smrg 1330943345d3Smrg if test -n "$fix_srcfile_path"; then 1331943345d3Smrg eval srcfile=\"$fix_srcfile_path\" 1332943345d3Smrg fi 1333a7b590b3Smrg func_quote_for_eval "$srcfile" 1334a7b590b3Smrg qsrcfile=$func_quote_for_eval_result 1335943345d3Smrg 1336943345d3Smrg # Only build a PIC object if we are building libtool libraries. 1337943345d3Smrg if test "$build_libtool_libs" = yes; then 1338943345d3Smrg # Without this assignment, base_compile gets emptied. 1339943345d3Smrg fbsd_hideous_sh_bug=$base_compile 1340943345d3Smrg 1341943345d3Smrg if test "$pic_mode" != no; then 1342943345d3Smrg command="$base_compile $qsrcfile $pic_flag" 1343943345d3Smrg else 1344943345d3Smrg # Don't build PIC code 1345943345d3Smrg command="$base_compile $qsrcfile" 1346943345d3Smrg fi 1347943345d3Smrg 1348a7b590b3Smrg func_mkdir_p "$xdir$objdir" 1349943345d3Smrg 1350943345d3Smrg if test -z "$output_obj"; then 1351943345d3Smrg # Place PIC objects in $objdir 1352943345d3Smrg command="$command -o $lobj" 1353943345d3Smrg fi 1354943345d3Smrg 1355a7b590b3Smrg func_show_eval_locale "$command" \ 1356a7b590b3Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 1357943345d3Smrg 1358943345d3Smrg if test "$need_locks" = warn && 1359943345d3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1360a7b590b3Smrg $ECHO "\ 1361943345d3Smrg*** ERROR, $lockfile contains: 1362943345d3Smrg`cat $lockfile 2>/dev/null` 1363943345d3Smrg 1364943345d3Smrgbut it should contain: 1365943345d3Smrg$srcfile 1366943345d3Smrg 1367943345d3SmrgThis indicates that another process is trying to use the same 1368943345d3Smrgtemporary object file, and libtool could not work around it because 1369943345d3Smrgyour compiler does not support \`-c' and \`-o' together. If you 1370943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 1371943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better 1372943345d3Smrgcompiler." 1373943345d3Smrg 1374a7b590b3Smrg $opt_dry_run || $RM $removelist 1375943345d3Smrg exit $EXIT_FAILURE 1376943345d3Smrg fi 1377943345d3Smrg 1378943345d3Smrg # Just move the object if needed, then go on to compile the next one 1379943345d3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 1380a7b590b3Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 1381a7b590b3Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1382943345d3Smrg fi 1383943345d3Smrg 1384943345d3Smrg # Allow error messages only from the first compilation. 1385943345d3Smrg if test "$suppress_opt" = yes; then 1386a7b590b3Smrg suppress_output=' >/dev/null 2>&1' 1387943345d3Smrg fi 1388943345d3Smrg fi 1389943345d3Smrg 1390943345d3Smrg # Only build a position-dependent object if we build old libraries. 1391943345d3Smrg if test "$build_old_libs" = yes; then 1392943345d3Smrg if test "$pic_mode" != yes; then 1393943345d3Smrg # Don't build PIC code 1394a7b590b3Smrg command="$base_compile $qsrcfile$pie_flag" 1395943345d3Smrg else 1396943345d3Smrg command="$base_compile $qsrcfile $pic_flag" 1397943345d3Smrg fi 1398943345d3Smrg if test "$compiler_c_o" = yes; then 1399943345d3Smrg command="$command -o $obj" 1400943345d3Smrg fi 1401943345d3Smrg 1402943345d3Smrg # Suppress compiler output if we already did a PIC compilation. 1403943345d3Smrg command="$command$suppress_output" 1404a7b590b3Smrg func_show_eval_locale "$command" \ 1405a7b590b3Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1406943345d3Smrg 1407943345d3Smrg if test "$need_locks" = warn && 1408943345d3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1409a7b590b3Smrg $ECHO "\ 1410943345d3Smrg*** ERROR, $lockfile contains: 1411943345d3Smrg`cat $lockfile 2>/dev/null` 1412943345d3Smrg 1413943345d3Smrgbut it should contain: 1414943345d3Smrg$srcfile 1415943345d3Smrg 1416943345d3SmrgThis indicates that another process is trying to use the same 1417943345d3Smrgtemporary object file, and libtool could not work around it because 1418943345d3Smrgyour compiler does not support \`-c' and \`-o' together. If you 1419943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 1420943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better 1421943345d3Smrgcompiler." 1422943345d3Smrg 1423a7b590b3Smrg $opt_dry_run || $RM $removelist 1424943345d3Smrg exit $EXIT_FAILURE 1425943345d3Smrg fi 1426943345d3Smrg 1427943345d3Smrg # Just move the object if needed 1428943345d3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 1429a7b590b3Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 1430a7b590b3Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1431943345d3Smrg fi 1432943345d3Smrg fi 1433943345d3Smrg 1434a7b590b3Smrg $opt_dry_run || { 1435a7b590b3Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 1436943345d3Smrg 1437a7b590b3Smrg # Unlock the critical section if it was locked 1438a7b590b3Smrg if test "$need_locks" != no; then 1439a7b590b3Smrg removelist=$lockfile 1440a7b590b3Smrg $RM "$lockfile" 1441a7b590b3Smrg fi 1442a7b590b3Smrg } 1443943345d3Smrg 1444943345d3Smrg exit $EXIT_SUCCESS 1445a7b590b3Smrg} 1446943345d3Smrg 1447a7b590b3Smrg$opt_help || { 1448a7b590b3Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"} 1449a7b590b3Smrg} 1450943345d3Smrg 1451a7b590b3Smrgfunc_mode_help () 1452a7b590b3Smrg{ 1453a7b590b3Smrg # We need to display help for each of the modes. 1454a7b590b3Smrg case $mode in 1455a7b590b3Smrg "") 1456a7b590b3Smrg # Generic help is extracted from the usage comments 1457a7b590b3Smrg # at the start of this file. 1458a7b590b3Smrg func_help 1459a7b590b3Smrg ;; 1460943345d3Smrg 1461a7b590b3Smrg clean) 1462a7b590b3Smrg $ECHO \ 1463a7b590b3Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 1464943345d3Smrg 1465a7b590b3SmrgRemove files from the build directory. 1466943345d3Smrg 1467a7b590b3SmrgRM is the name of the program to use to delete files associated with each FILE 1468a7b590b3Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1469a7b590b3Smrgto RM. 1470943345d3Smrg 1471a7b590b3SmrgIf FILE is a libtool library, object or program, all the files associated 1472a7b590b3Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 1473a7b590b3Smrg ;; 1474943345d3Smrg 1475a7b590b3Smrg compile) 1476a7b590b3Smrg $ECHO \ 1477a7b590b3Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 1478943345d3Smrg 1479a7b590b3SmrgCompile a source file into a libtool library object. 1480943345d3Smrg 1481a7b590b3SmrgThis mode accepts the following additional options: 1482943345d3Smrg 1483a7b590b3Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 1484a7b590b3Smrg -no-suppress do not suppress compiler output for multiple passes 1485a7b590b3Smrg -prefer-pic try to building PIC objects only 1486a7b590b3Smrg -prefer-non-pic try to building non-PIC objects only 1487a7b590b3Smrg -shared do not build a \`.o' file suitable for static linking 1488a7b590b3Smrg -static only build a \`.o' file suitable for static linking 1489943345d3Smrg 1490a7b590b3SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 1491a7b590b3Smrgfrom the given SOURCEFILE. 1492943345d3Smrg 1493a7b590b3SmrgThe output file name is determined by removing the directory component from 1494a7b590b3SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 1495a7b590b3Smrglibrary object suffix, \`.lo'." 1496a7b590b3Smrg ;; 1497943345d3Smrg 1498a7b590b3Smrg execute) 1499a7b590b3Smrg $ECHO \ 1500a7b590b3Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 1501943345d3Smrg 1502a7b590b3SmrgAutomatically set library path, then run a program. 1503943345d3Smrg 1504a7b590b3SmrgThis mode accepts the following additional options: 1505943345d3Smrg 1506a7b590b3Smrg -dlopen FILE add the directory containing FILE to the library path 1507943345d3Smrg 1508a7b590b3SmrgThis mode sets the library path environment variable according to \`-dlopen' 1509a7b590b3Smrgflags. 1510943345d3Smrg 1511a7b590b3SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 1512a7b590b3Smrginto their corresponding uninstalled binary, and any of their required library 1513a7b590b3Smrgdirectories are added to the library path. 1514943345d3Smrg 1515a7b590b3SmrgThen, COMMAND is executed, with ARGS as arguments." 1516a7b590b3Smrg ;; 1517943345d3Smrg 1518a7b590b3Smrg finish) 1519a7b590b3Smrg $ECHO \ 1520a7b590b3Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 1521943345d3Smrg 1522a7b590b3SmrgComplete the installation of libtool libraries. 1523943345d3Smrg 1524a7b590b3SmrgEach LIBDIR is a directory that contains libtool libraries. 1525943345d3Smrg 1526a7b590b3SmrgThe commands that this mode executes may require superuser privileges. Use 1527a7b590b3Smrgthe \`--dry-run' option if you just want to see what would be executed." 1528a7b590b3Smrg ;; 1529943345d3Smrg 1530a7b590b3Smrg install) 1531a7b590b3Smrg $ECHO \ 1532a7b590b3Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 1533943345d3Smrg 1534a7b590b3SmrgInstall executables or libraries. 1535943345d3Smrg 1536a7b590b3SmrgINSTALL-COMMAND is the installation command. The first component should be 1537a7b590b3Smrgeither the \`install' or \`cp' program. 1538943345d3Smrg 1539a7b590b3SmrgThe following components of INSTALL-COMMAND are treated specially: 1540943345d3Smrg 1541a7b590b3Smrg -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation 1542943345d3Smrg 1543a7b590b3SmrgThe rest of the components are interpreted as arguments to that command (only 1544a7b590b3SmrgBSD-compatible install options are recognized)." 1545a7b590b3Smrg ;; 1546943345d3Smrg 1547a7b590b3Smrg link) 1548a7b590b3Smrg $ECHO \ 1549a7b590b3Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 1550943345d3Smrg 1551a7b590b3SmrgLink object files or libraries together to form another library, or to 1552a7b590b3Smrgcreate an executable program. 1553943345d3Smrg 1554a7b590b3SmrgLINK-COMMAND is a command using the C compiler that you would use to create 1555a7b590b3Smrga program from several object files. 1556943345d3Smrg 1557a7b590b3SmrgThe following components of LINK-COMMAND are treated specially: 1558943345d3Smrg 1559a7b590b3Smrg -all-static do not do any dynamic linking at all 1560a7b590b3Smrg -avoid-version do not add a version suffix if possible 1561a7b590b3Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 1562a7b590b3Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 1563a7b590b3Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 1564a7b590b3Smrg -export-symbols SYMFILE 1565a7b590b3Smrg try to export only the symbols listed in SYMFILE 1566a7b590b3Smrg -export-symbols-regex REGEX 1567a7b590b3Smrg try to export only the symbols matching REGEX 1568a7b590b3Smrg -LLIBDIR search LIBDIR for required installed libraries 1569a7b590b3Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 1570a7b590b3Smrg -module build a library that can dlopened 1571a7b590b3Smrg -no-fast-install disable the fast-install mode 1572a7b590b3Smrg -no-install link a not-installable executable 1573a7b590b3Smrg -no-undefined declare that a library does not refer to external symbols 1574a7b590b3Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 1575a7b590b3Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 1576a7b590b3Smrg -precious-files-regex REGEX 1577a7b590b3Smrg don't remove output files matching REGEX 1578a7b590b3Smrg -release RELEASE specify package release information 1579a7b590b3Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 1580a7b590b3Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 1581a7b590b3Smrg -shared only do dynamic linking of libtool libraries 1582a7b590b3Smrg -shrext SUFFIX override the standard shared library file extension 1583a7b590b3Smrg -static do not do any dynamic linking of uninstalled libtool libraries 1584a7b590b3Smrg -static-libtool-libs 1585a7b590b3Smrg do not do any dynamic linking of libtool libraries 1586a7b590b3Smrg -version-info CURRENT[:REVISION[:AGE]] 1587a7b590b3Smrg specify library version info [each variable defaults to 0] 1588a7b590b3Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 1589943345d3Smrg 1590a7b590b3SmrgAll other options (arguments beginning with \`-') are ignored. 1591943345d3Smrg 1592a7b590b3SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 1593a7b590b3Smrgtreated as uninstalled libtool libraries, other files are standard or library 1594a7b590b3Smrgobject files. 15955e695a52Smrg 1596a7b590b3SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 1597a7b590b3Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 1598a7b590b3Smrgrequired, except when creating a convenience library. 1599943345d3Smrg 1600a7b590b3SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 1601a7b590b3Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 1602943345d3Smrg 1603a7b590b3SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 1604a7b590b3Smrgis created, otherwise an executable program is created." 1605943345d3Smrg ;; 1606943345d3Smrg 1607a7b590b3Smrg uninstall) 1608a7b590b3Smrg $ECHO \ 1609a7b590b3Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 1610943345d3Smrg 1611a7b590b3SmrgRemove libraries from an installation directory. 1612943345d3Smrg 1613a7b590b3SmrgRM is the name of the program to use to delete files associated with each FILE 1614a7b590b3Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1615a7b590b3Smrgto RM. 1616943345d3Smrg 1617a7b590b3SmrgIf FILE is a libtool library, all the files associated with it are deleted. 1618a7b590b3SmrgOtherwise, only FILE itself is deleted using RM." 1619a7b590b3Smrg ;; 1620943345d3Smrg 1621a7b590b3Smrg *) 1622a7b590b3Smrg func_fatal_help "invalid operation mode \`$mode'" 1623a7b590b3Smrg ;; 1624a7b590b3Smrg esac 1625943345d3Smrg 1626a7b590b3Smrg $ECHO 1627a7b590b3Smrg $ECHO "Try \`$progname --help' for more information about other modes." 1628943345d3Smrg 1629a7b590b3Smrg exit $? 1630a7b590b3Smrg} 1631943345d3Smrg 1632a7b590b3Smrg # Now that we've collected a possible --mode arg, show help if necessary 1633a7b590b3Smrg $opt_help && func_mode_help 1634943345d3Smrg 1635943345d3Smrg 1636a7b590b3Smrg# func_mode_execute arg... 1637a7b590b3Smrgfunc_mode_execute () 1638a7b590b3Smrg{ 1639a7b590b3Smrg $opt_debug 1640a7b590b3Smrg # The first argument is the command name. 1641a7b590b3Smrg cmd="$nonopt" 1642a7b590b3Smrg test -z "$cmd" && \ 1643a7b590b3Smrg func_fatal_help "you must specify a COMMAND" 1644943345d3Smrg 1645a7b590b3Smrg # Handle -dlopen flags immediately. 1646a7b590b3Smrg for file in $execute_dlfiles; do 1647a7b590b3Smrg test -f "$file" \ 1648a7b590b3Smrg || func_fatal_help "\`$file' is not a file" 1649943345d3Smrg 1650a7b590b3Smrg dir= 1651a7b590b3Smrg case $file in 1652a7b590b3Smrg *.la) 1653a7b590b3Smrg # Check to see that this really is a libtool archive. 1654a7b590b3Smrg func_lalib_unsafe_p "$file" \ 1655a7b590b3Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 1656943345d3Smrg 1657a7b590b3Smrg # Read the libtool library. 1658a7b590b3Smrg dlname= 1659a7b590b3Smrg library_names= 1660a7b590b3Smrg func_source "$file" 1661943345d3Smrg 1662a7b590b3Smrg # Skip this library if it cannot be dlopened. 1663a7b590b3Smrg if test -z "$dlname"; then 1664a7b590b3Smrg # Warn if it was a shared library. 1665a7b590b3Smrg test -n "$library_names" && \ 1666a7b590b3Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 1667a7b590b3Smrg continue 1668a7b590b3Smrg fi 1669943345d3Smrg 1670a7b590b3Smrg func_dirname "$file" "" "." 1671a7b590b3Smrg dir="$func_dirname_result" 1672943345d3Smrg 1673a7b590b3Smrg if test -f "$dir/$objdir/$dlname"; then 1674a7b590b3Smrg dir="$dir/$objdir" 1675a7b590b3Smrg else 1676a7b590b3Smrg if test ! -f "$dir/$dlname"; then 1677a7b590b3Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1678a7b590b3Smrg fi 1679a7b590b3Smrg fi 1680943345d3Smrg ;; 1681943345d3Smrg 1682a7b590b3Smrg *.lo) 1683a7b590b3Smrg # Just add the directory containing the .lo file. 1684a7b590b3Smrg func_dirname "$file" "" "." 1685a7b590b3Smrg dir="$func_dirname_result" 1686943345d3Smrg ;; 1687943345d3Smrg 1688a7b590b3Smrg *) 1689a7b590b3Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 1690943345d3Smrg continue 1691943345d3Smrg ;; 1692a7b590b3Smrg esac 1693943345d3Smrg 1694a7b590b3Smrg # Get the absolute pathname. 1695a7b590b3Smrg absdir=`cd "$dir" && pwd` 1696a7b590b3Smrg test -n "$absdir" && dir="$absdir" 1697943345d3Smrg 1698a7b590b3Smrg # Now add the directory to shlibpath_var. 1699a7b590b3Smrg if eval "test -z \"\$$shlibpath_var\""; then 1700a7b590b3Smrg eval "$shlibpath_var=\"\$dir\"" 1701a7b590b3Smrg else 1702a7b590b3Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 1703a7b590b3Smrg fi 1704a7b590b3Smrg done 1705943345d3Smrg 1706a7b590b3Smrg # This variable tells wrapper scripts just to set shlibpath_var 1707a7b590b3Smrg # rather than running their programs. 1708a7b590b3Smrg libtool_execute_magic="$magic" 1709943345d3Smrg 1710a7b590b3Smrg # Check if any of the arguments is a wrapper script. 1711a7b590b3Smrg args= 1712a7b590b3Smrg for file 1713a7b590b3Smrg do 1714a7b590b3Smrg case $file in 1715a7b590b3Smrg -*) ;; 1716a7b590b3Smrg *) 1717a7b590b3Smrg # Do a test to see if this is really a libtool program. 1718a7b590b3Smrg if func_ltwrapper_script_p "$file"; then 1719a7b590b3Smrg func_source "$file" 1720a7b590b3Smrg # Transform arg to wrapped name. 1721a7b590b3Smrg file="$progdir/$program" 1722a7b590b3Smrg elif func_ltwrapper_executable_p "$file"; then 1723a7b590b3Smrg func_ltwrapper_scriptname "$file" 1724a7b590b3Smrg func_source "$func_ltwrapper_scriptname_result" 1725a7b590b3Smrg # Transform arg to wrapped name. 1726a7b590b3Smrg file="$progdir/$program" 1727a7b590b3Smrg fi 1728a7b590b3Smrg ;; 1729a7b590b3Smrg esac 1730a7b590b3Smrg # Quote arguments (to preserve shell metacharacters). 1731a7b590b3Smrg func_quote_for_eval "$file" 1732a7b590b3Smrg args="$args $func_quote_for_eval_result" 1733a7b590b3Smrg done 1734943345d3Smrg 1735a7b590b3Smrg if test "X$opt_dry_run" = Xfalse; then 1736a7b590b3Smrg if test -n "$shlibpath_var"; then 1737a7b590b3Smrg # Export the shlibpath_var. 1738a7b590b3Smrg eval "export $shlibpath_var" 1739a7b590b3Smrg fi 1740943345d3Smrg 1741a7b590b3Smrg # Restore saved environment variables 1742a7b590b3Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1743a7b590b3Smrg do 1744a7b590b3Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 1745a7b590b3Smrg $lt_var=\$save_$lt_var; export $lt_var 1746943345d3Smrg else 1747a7b590b3Smrg $lt_unset $lt_var 1748a7b590b3Smrg fi" 1749a7b590b3Smrg done 1750943345d3Smrg 1751a7b590b3Smrg # Now prepare to actually exec the command. 1752a7b590b3Smrg exec_cmd="\$cmd$args" 1753a7b590b3Smrg else 1754a7b590b3Smrg # Display what would be done. 1755a7b590b3Smrg if test -n "$shlibpath_var"; then 1756a7b590b3Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 1757a7b590b3Smrg $ECHO "export $shlibpath_var" 1758a7b590b3Smrg fi 1759a7b590b3Smrg $ECHO "$cmd$args" 1760a7b590b3Smrg exit $EXIT_SUCCESS 1761a7b590b3Smrg fi 1762a7b590b3Smrg} 1763943345d3Smrg 1764a7b590b3Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 1765943345d3Smrg 1766943345d3Smrg 1767a7b590b3Smrg# func_mode_finish arg... 1768a7b590b3Smrgfunc_mode_finish () 1769a7b590b3Smrg{ 1770a7b590b3Smrg $opt_debug 1771a7b590b3Smrg libdirs="$nonopt" 1772a7b590b3Smrg admincmds= 1773943345d3Smrg 1774a7b590b3Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 1775a7b590b3Smrg for dir 1776a7b590b3Smrg do 1777a7b590b3Smrg libdirs="$libdirs $dir" 1778a7b590b3Smrg done 1779943345d3Smrg 1780a7b590b3Smrg for libdir in $libdirs; do 1781a7b590b3Smrg if test -n "$finish_cmds"; then 1782a7b590b3Smrg # Do each command in the finish commands. 1783a7b590b3Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 1784a7b590b3Smrg'"$cmd"'"' 1785943345d3Smrg fi 1786a7b590b3Smrg if test -n "$finish_eval"; then 1787a7b590b3Smrg # Do the single finish_eval. 1788a7b590b3Smrg eval cmds=\"$finish_eval\" 1789a7b590b3Smrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 1790a7b590b3Smrg $cmds" 1791a7b590b3Smrg fi 1792a7b590b3Smrg done 1793a7b590b3Smrg fi 1794943345d3Smrg 1795a7b590b3Smrg # Exit here if they wanted silent mode. 1796a7b590b3Smrg $opt_silent && exit $EXIT_SUCCESS 1797943345d3Smrg 1798a7b590b3Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 1799a7b590b3Smrg $ECHO "Libraries have been installed in:" 1800a7b590b3Smrg for libdir in $libdirs; do 1801a7b590b3Smrg $ECHO " $libdir" 1802a7b590b3Smrg done 1803a7b590b3Smrg $ECHO 1804a7b590b3Smrg $ECHO "If you ever happen to want to link against installed libraries" 1805a7b590b3Smrg $ECHO "in a given directory, LIBDIR, you must either use libtool, and" 1806a7b590b3Smrg $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" 1807a7b590b3Smrg $ECHO "flag during linking and do at least one of the following:" 1808a7b590b3Smrg if test -n "$shlibpath_var"; then 1809a7b590b3Smrg $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" 1810a7b590b3Smrg $ECHO " during execution" 1811a7b590b3Smrg fi 1812a7b590b3Smrg if test -n "$runpath_var"; then 1813a7b590b3Smrg $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" 1814a7b590b3Smrg $ECHO " during linking" 1815a7b590b3Smrg fi 1816a7b590b3Smrg if test -n "$hardcode_libdir_flag_spec"; then 1817a7b590b3Smrg libdir=LIBDIR 1818a7b590b3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 1819a7b590b3Smrg 1820a7b590b3Smrg $ECHO " - use the \`$flag' linker flag" 1821a7b590b3Smrg fi 1822a7b590b3Smrg if test -n "$admincmds"; then 1823a7b590b3Smrg $ECHO " - have your system administrator run these commands:$admincmds" 1824a7b590b3Smrg fi 1825a7b590b3Smrg if test -f /etc/ld.so.conf; then 1826a7b590b3Smrg $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 1827a7b590b3Smrg fi 1828a7b590b3Smrg $ECHO 1829a7b590b3Smrg 1830a7b590b3Smrg $ECHO "See any operating system documentation about shared libraries for" 1831a7b590b3Smrg case $host in 1832a7b590b3Smrg solaris2.[6789]|solaris2.1[0-9]) 1833a7b590b3Smrg $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" 1834a7b590b3Smrg $ECHO "pages." 1835a7b590b3Smrg ;; 1836a7b590b3Smrg *) 1837a7b590b3Smrg $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." 1838a7b590b3Smrg ;; 1839a7b590b3Smrg esac 1840a7b590b3Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 1841a7b590b3Smrg exit $EXIT_SUCCESS 1842a7b590b3Smrg} 1843a7b590b3Smrg 1844a7b590b3Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 1845a7b590b3Smrg 1846a7b590b3Smrg 1847a7b590b3Smrg# func_mode_install arg... 1848a7b590b3Smrgfunc_mode_install () 1849a7b590b3Smrg{ 1850a7b590b3Smrg $opt_debug 1851a7b590b3Smrg # There may be an optional sh(1) argument at the beginning of 1852a7b590b3Smrg # install_prog (especially on Windows NT). 1853a7b590b3Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 1854a7b590b3Smrg # Allow the use of GNU shtool's install command. 1855a7b590b3Smrg $ECHO "X$nonopt" | $GREP shtool >/dev/null; then 1856a7b590b3Smrg # Aesthetically quote it. 1857a7b590b3Smrg func_quote_for_eval "$nonopt" 1858a7b590b3Smrg install_prog="$func_quote_for_eval_result " 1859a7b590b3Smrg arg=$1 1860a7b590b3Smrg shift 1861a7b590b3Smrg else 1862a7b590b3Smrg install_prog= 1863a7b590b3Smrg arg=$nonopt 1864a7b590b3Smrg fi 1865a7b590b3Smrg 1866a7b590b3Smrg # The real first argument should be the name of the installation program. 1867a7b590b3Smrg # Aesthetically quote it. 1868a7b590b3Smrg func_quote_for_eval "$arg" 1869a7b590b3Smrg install_prog="$install_prog$func_quote_for_eval_result" 1870a7b590b3Smrg 1871a7b590b3Smrg # We need to accept at least all the BSD install flags. 1872a7b590b3Smrg dest= 1873a7b590b3Smrg files= 1874a7b590b3Smrg opts= 1875a7b590b3Smrg prev= 1876a7b590b3Smrg install_type= 1877a7b590b3Smrg isdir=no 1878a7b590b3Smrg stripme= 1879a7b590b3Smrg for arg 1880a7b590b3Smrg do 1881a7b590b3Smrg if test -n "$dest"; then 1882a7b590b3Smrg files="$files $dest" 1883a7b590b3Smrg dest=$arg 1884a7b590b3Smrg continue 1885a7b590b3Smrg fi 1886a7b590b3Smrg 1887a7b590b3Smrg case $arg in 1888a7b590b3Smrg -d) isdir=yes ;; 1889a7b590b3Smrg -f) 1890a7b590b3Smrg case " $install_prog " in 1891a7b590b3Smrg *[\\\ /]cp\ *) ;; 1892a7b590b3Smrg *) prev=$arg ;; 1893a7b590b3Smrg esac 1894a7b590b3Smrg ;; 1895a7b590b3Smrg -g | -m | -o) 1896a7b590b3Smrg prev=$arg 1897a7b590b3Smrg ;; 1898a7b590b3Smrg -s) 1899a7b590b3Smrg stripme=" -s" 1900a7b590b3Smrg continue 1901a7b590b3Smrg ;; 1902a7b590b3Smrg -*) 1903a7b590b3Smrg ;; 1904a7b590b3Smrg *) 1905a7b590b3Smrg # If the previous option needed an argument, then skip it. 1906a7b590b3Smrg if test -n "$prev"; then 1907943345d3Smrg prev= 1908943345d3Smrg else 1909a7b590b3Smrg dest=$arg 1910a7b590b3Smrg continue 1911943345d3Smrg fi 1912943345d3Smrg ;; 1913a7b590b3Smrg esac 1914943345d3Smrg 1915a7b590b3Smrg # Aesthetically quote the argument. 1916a7b590b3Smrg func_quote_for_eval "$arg" 1917a7b590b3Smrg install_prog="$install_prog $func_quote_for_eval_result" 1918a7b590b3Smrg done 1919943345d3Smrg 1920a7b590b3Smrg test -z "$install_prog" && \ 1921a7b590b3Smrg func_fatal_help "you must specify an install program" 1922943345d3Smrg 1923a7b590b3Smrg test -n "$prev" && \ 1924a7b590b3Smrg func_fatal_help "the \`$prev' option requires an argument" 1925943345d3Smrg 1926a7b590b3Smrg if test -z "$files"; then 1927a7b590b3Smrg if test -z "$dest"; then 1928a7b590b3Smrg func_fatal_help "no file or destination specified" 1929a7b590b3Smrg else 1930a7b590b3Smrg func_fatal_help "you must specify a destination" 1931a7b590b3Smrg fi 1932943345d3Smrg fi 1933943345d3Smrg 1934a7b590b3Smrg # Strip any trailing slash from the destination. 1935a7b590b3Smrg func_stripname '' '/' "$dest" 1936a7b590b3Smrg dest=$func_stripname_result 1937943345d3Smrg 1938a7b590b3Smrg # Check to see that the destination is a directory. 1939a7b590b3Smrg test -d "$dest" && isdir=yes 1940a7b590b3Smrg if test "$isdir" = yes; then 1941a7b590b3Smrg destdir="$dest" 1942a7b590b3Smrg destname= 1943943345d3Smrg else 1944a7b590b3Smrg func_dirname_and_basename "$dest" "" "." 1945a7b590b3Smrg destdir="$func_dirname_result" 1946a7b590b3Smrg destname="$func_basename_result" 1947943345d3Smrg 1948a7b590b3Smrg # Not a directory, so check to see that there is only one file specified. 1949a7b590b3Smrg set dummy $files; shift 1950a7b590b3Smrg test "$#" -gt 1 && \ 1951a7b590b3Smrg func_fatal_help "\`$dest' is not a directory" 1952943345d3Smrg fi 1953a7b590b3Smrg case $destdir in 1954a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 1955943345d3Smrg *) 1956a7b590b3Smrg for file in $files; do 1957a7b590b3Smrg case $file in 1958a7b590b3Smrg *.lo) ;; 1959a7b590b3Smrg *) 1960a7b590b3Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 1961a7b590b3Smrg ;; 1962a7b590b3Smrg esac 1963a7b590b3Smrg done 1964943345d3Smrg ;; 1965943345d3Smrg esac 1966943345d3Smrg 1967a7b590b3Smrg # This variable tells wrapper scripts just to set variables rather 1968a7b590b3Smrg # than running their programs. 1969a7b590b3Smrg libtool_install_magic="$magic" 1970943345d3Smrg 1971a7b590b3Smrg staticlibs= 1972a7b590b3Smrg future_libdirs= 1973a7b590b3Smrg current_libdirs= 1974a7b590b3Smrg for file in $files; do 1975943345d3Smrg 1976a7b590b3Smrg # Do each installation. 1977a7b590b3Smrg case $file in 1978a7b590b3Smrg *.$libext) 1979a7b590b3Smrg # Do the static libraries later. 1980a7b590b3Smrg staticlibs="$staticlibs $file" 1981a7b590b3Smrg ;; 1982a7b590b3Smrg 1983a7b590b3Smrg *.la) 1984a7b590b3Smrg # Check to see that this really is a libtool archive. 1985a7b590b3Smrg func_lalib_unsafe_p "$file" \ 1986a7b590b3Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 1987a7b590b3Smrg 1988a7b590b3Smrg library_names= 1989a7b590b3Smrg old_library= 1990a7b590b3Smrg relink_command= 1991a7b590b3Smrg func_source "$file" 1992a7b590b3Smrg 1993a7b590b3Smrg # Add the libdir to current_libdirs if it is the destination. 1994a7b590b3Smrg if test "X$destdir" = "X$libdir"; then 1995a7b590b3Smrg case "$current_libdirs " in 1996a7b590b3Smrg *" $libdir "*) ;; 1997a7b590b3Smrg *) current_libdirs="$current_libdirs $libdir" ;; 1998943345d3Smrg esac 1999a7b590b3Smrg else 2000a7b590b3Smrg # Note the libdir as a future libdir. 2001a7b590b3Smrg case "$future_libdirs " in 2002a7b590b3Smrg *" $libdir "*) ;; 2003a7b590b3Smrg *) future_libdirs="$future_libdirs $libdir" ;; 2004a7b590b3Smrg esac 2005a7b590b3Smrg fi 2006943345d3Smrg 2007a7b590b3Smrg func_dirname "$file" "/" "" 2008a7b590b3Smrg dir="$func_dirname_result" 2009a7b590b3Smrg dir="$dir$objdir" 2010a7b590b3Smrg 2011a7b590b3Smrg if test -n "$relink_command"; then 2012a7b590b3Smrg # Determine the prefix the user has applied to our future dir. 2013a7b590b3Smrg inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` 2014a7b590b3Smrg 2015a7b590b3Smrg # Don't allow the user to place us outside of our expected 2016a7b590b3Smrg # location b/c this prevents finding dependent libraries that 2017a7b590b3Smrg # are installed to the same prefix. 2018a7b590b3Smrg # At present, this check doesn't affect windows .dll's that 2019a7b590b3Smrg # are installed into $libdir/../bin (currently, that works fine) 2020a7b590b3Smrg # but it's something to keep an eye on. 2021a7b590b3Smrg test "$inst_prefix_dir" = "$destdir" && \ 2022a7b590b3Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2023a7b590b3Smrg 2024a7b590b3Smrg if test -n "$inst_prefix_dir"; then 2025a7b590b3Smrg # Stick the inst_prefix_dir data into the link command. 2026a7b590b3Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2027a7b590b3Smrg else 2028a7b590b3Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` 2029a7b590b3Smrg fi 2030a7b590b3Smrg 2031a7b590b3Smrg func_warning "relinking \`$file'" 2032a7b590b3Smrg func_show_eval "$relink_command" \ 2033a7b590b3Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2034a7b590b3Smrg fi 2035a7b590b3Smrg 2036a7b590b3Smrg # See the names of the shared library. 2037a7b590b3Smrg set dummy $library_names; shift 2038a7b590b3Smrg if test -n "$1"; then 2039a7b590b3Smrg realname="$1" 2040a7b590b3Smrg shift 2041a7b590b3Smrg 2042a7b590b3Smrg srcname="$realname" 2043a7b590b3Smrg test -n "$relink_command" && srcname="$realname"T 2044a7b590b3Smrg 2045a7b590b3Smrg # Install the shared library and build the symlinks. 2046a7b590b3Smrg func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 2047a7b590b3Smrg 'exit $?' 2048a7b590b3Smrg tstripme="$stripme" 2049a7b590b3Smrg case $host_os in 2050a7b590b3Smrg cygwin* | mingw* | pw32* | cegcc*) 2051a7b590b3Smrg case $realname in 2052a7b590b3Smrg *.dll.a) 2053a7b590b3Smrg tstripme="" 2054a7b590b3Smrg ;; 2055a7b590b3Smrg esac 2056943345d3Smrg ;; 2057943345d3Smrg esac 2058a7b590b3Smrg if test -n "$tstripme" && test -n "$striplib"; then 2059a7b590b3Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 2060943345d3Smrg fi 2061a7b590b3Smrg 2062a7b590b3Smrg if test "$#" -gt 0; then 2063a7b590b3Smrg # Delete the old symlinks, and create new ones. 2064a7b590b3Smrg # Try `ln -sf' first, because the `ln' binary might depend on 2065a7b590b3Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 2066a7b590b3Smrg # so we also need to try rm && ln -s. 2067a7b590b3Smrg for linkname 2068a7b590b3Smrg do 2069a7b590b3Smrg test "$linkname" != "$realname" \ 2070a7b590b3Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 2071943345d3Smrg done 2072943345d3Smrg fi 2073943345d3Smrg 2074a7b590b3Smrg # Do each command in the postinstall commands. 2075a7b590b3Smrg lib="$destdir/$realname" 2076a7b590b3Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 2077943345d3Smrg fi 2078943345d3Smrg 2079a7b590b3Smrg # Install the pseudo-library for information purposes. 2080a7b590b3Smrg func_basename "$file" 2081a7b590b3Smrg name="$func_basename_result" 2082a7b590b3Smrg instname="$dir/$name"i 2083a7b590b3Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 2084943345d3Smrg 2085a7b590b3Smrg # Maybe install the static library, too. 2086a7b590b3Smrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 2087a7b590b3Smrg ;; 2088943345d3Smrg 2089a7b590b3Smrg *.lo) 2090a7b590b3Smrg # Install (i.e. copy) a libtool object. 2091943345d3Smrg 2092a7b590b3Smrg # Figure out destination file name, if it wasn't already specified. 2093a7b590b3Smrg if test -n "$destname"; then 2094a7b590b3Smrg destfile="$destdir/$destname" 2095a7b590b3Smrg else 2096a7b590b3Smrg func_basename "$file" 2097a7b590b3Smrg destfile="$func_basename_result" 2098a7b590b3Smrg destfile="$destdir/$destfile" 2099943345d3Smrg fi 2100943345d3Smrg 2101a7b590b3Smrg # Deduce the name of the destination old-style object file. 2102a7b590b3Smrg case $destfile in 2103a7b590b3Smrg *.lo) 2104a7b590b3Smrg func_lo2o "$destfile" 2105a7b590b3Smrg staticdest=$func_lo2o_result 2106a7b590b3Smrg ;; 2107a7b590b3Smrg *.$objext) 2108a7b590b3Smrg staticdest="$destfile" 2109a7b590b3Smrg destfile= 2110a7b590b3Smrg ;; 2111a7b590b3Smrg *) 2112a7b590b3Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 2113a7b590b3Smrg ;; 2114a7b590b3Smrg esac 2115943345d3Smrg 2116a7b590b3Smrg # Install the libtool object if requested. 2117a7b590b3Smrg test -n "$destfile" && \ 2118a7b590b3Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 2119943345d3Smrg 2120a7b590b3Smrg # Install the old object if enabled. 2121a7b590b3Smrg if test "$build_old_libs" = yes; then 2122a7b590b3Smrg # Deduce the name of the old-style object file. 2123a7b590b3Smrg func_lo2o "$file" 2124a7b590b3Smrg staticobj=$func_lo2o_result 2125a7b590b3Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 2126943345d3Smrg fi 2127a7b590b3Smrg exit $EXIT_SUCCESS 2128a7b590b3Smrg ;; 2129943345d3Smrg 2130a7b590b3Smrg *) 2131a7b590b3Smrg # Figure out destination file name, if it wasn't already specified. 2132a7b590b3Smrg if test -n "$destname"; then 2133a7b590b3Smrg destfile="$destdir/$destname" 2134a7b590b3Smrg else 2135a7b590b3Smrg func_basename "$file" 2136a7b590b3Smrg destfile="$func_basename_result" 2137a7b590b3Smrg destfile="$destdir/$destfile" 2138a7b590b3Smrg fi 2139943345d3Smrg 2140a7b590b3Smrg # If the file is missing, and there is a .exe on the end, strip it 2141a7b590b3Smrg # because it is most likely a libtool script we actually want to 2142a7b590b3Smrg # install 2143a7b590b3Smrg stripped_ext="" 2144a7b590b3Smrg case $file in 2145a7b590b3Smrg *.exe) 2146a7b590b3Smrg if test ! -f "$file"; then 2147a7b590b3Smrg func_stripname '' '.exe' "$file" 2148a7b590b3Smrg file=$func_stripname_result 2149a7b590b3Smrg stripped_ext=".exe" 2150a7b590b3Smrg fi 2151a7b590b3Smrg ;; 2152a7b590b3Smrg esac 2153a7b590b3Smrg 2154a7b590b3Smrg # Do a test to see if this is really a libtool program. 2155a7b590b3Smrg case $host in 2156a7b590b3Smrg *cygwin* | *mingw*) 2157a7b590b3Smrg if func_ltwrapper_executable_p "$file"; then 2158a7b590b3Smrg func_ltwrapper_scriptname "$file" 2159a7b590b3Smrg wrapper=$func_ltwrapper_scriptname_result 2160a7b590b3Smrg else 2161a7b590b3Smrg func_stripname '' '.exe' "$file" 2162a7b590b3Smrg wrapper=$func_stripname_result 2163a7b590b3Smrg fi 2164a7b590b3Smrg ;; 2165943345d3Smrg *) 2166a7b590b3Smrg wrapper=$file 2167a7b590b3Smrg ;; 2168a7b590b3Smrg esac 2169a7b590b3Smrg if func_ltwrapper_script_p "$wrapper"; then 2170a7b590b3Smrg notinst_deplibs= 2171a7b590b3Smrg relink_command= 2172a7b590b3Smrg 2173a7b590b3Smrg func_source "$wrapper" 2174a7b590b3Smrg 2175a7b590b3Smrg # Check the variables that should have been set. 2176a7b590b3Smrg test -z "$generated_by_libtool_version" && \ 2177a7b590b3Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 2178a7b590b3Smrg 2179a7b590b3Smrg finalize=yes 2180a7b590b3Smrg for lib in $notinst_deplibs; do 2181a7b590b3Smrg # Check to see that each library is installed. 2182a7b590b3Smrg libdir= 2183a7b590b3Smrg if test -f "$lib"; then 2184a7b590b3Smrg func_source "$lib" 2185a7b590b3Smrg fi 2186a7b590b3Smrg libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 2187a7b590b3Smrg if test -n "$libdir" && test ! -f "$libfile"; then 2188a7b590b3Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 2189a7b590b3Smrg finalize=no 2190a7b590b3Smrg fi 2191a7b590b3Smrg done 2192a7b590b3Smrg 2193a7b590b3Smrg relink_command= 2194a7b590b3Smrg func_source "$wrapper" 2195a7b590b3Smrg 2196a7b590b3Smrg outputname= 2197a7b590b3Smrg if test "$fast_install" = no && test -n "$relink_command"; then 2198a7b590b3Smrg $opt_dry_run || { 2199a7b590b3Smrg if test "$finalize" = yes; then 2200a7b590b3Smrg tmpdir=`func_mktempdir` 2201a7b590b3Smrg func_basename "$file$stripped_ext" 2202a7b590b3Smrg file="$func_basename_result" 2203a7b590b3Smrg outputname="$tmpdir/$file" 2204a7b590b3Smrg # Replace the output file specification. 2205a7b590b3Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` 2206a7b590b3Smrg 2207a7b590b3Smrg $opt_silent || { 2208a7b590b3Smrg func_quote_for_expand "$relink_command" 2209a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 2210a7b590b3Smrg } 2211a7b590b3Smrg if eval "$relink_command"; then : 2212a7b590b3Smrg else 2213a7b590b3Smrg func_error "error: relink \`$file' with the above command before installing it" 2214a7b590b3Smrg $opt_dry_run || ${RM}r "$tmpdir" 2215a7b590b3Smrg continue 2216a7b590b3Smrg fi 2217a7b590b3Smrg file="$outputname" 2218a7b590b3Smrg else 2219a7b590b3Smrg func_warning "cannot relink \`$file'" 2220a7b590b3Smrg fi 2221a7b590b3Smrg } 2222a7b590b3Smrg else 2223a7b590b3Smrg # Install the binary that we compiled earlier. 2224a7b590b3Smrg file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 2225943345d3Smrg fi 2226a7b590b3Smrg fi 2227a7b590b3Smrg 2228a7b590b3Smrg # remove .exe since cygwin /usr/bin/install will append another 2229a7b590b3Smrg # one anyway 2230a7b590b3Smrg case $install_prog,$host in 2231a7b590b3Smrg */usr/bin/install*,*cygwin*) 2232a7b590b3Smrg case $file:$destfile in 2233a7b590b3Smrg *.exe:*.exe) 2234a7b590b3Smrg # this is ok 2235a7b590b3Smrg ;; 2236a7b590b3Smrg *.exe:*) 2237a7b590b3Smrg destfile=$destfile.exe 2238a7b590b3Smrg ;; 2239a7b590b3Smrg *:*.exe) 2240a7b590b3Smrg func_stripname '' '.exe' "$destfile" 2241a7b590b3Smrg destfile=$func_stripname_result 2242a7b590b3Smrg ;; 2243a7b590b3Smrg esac 2244943345d3Smrg ;; 2245943345d3Smrg esac 2246a7b590b3Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 2247a7b590b3Smrg $opt_dry_run || if test -n "$outputname"; then 2248a7b590b3Smrg ${RM}r "$tmpdir" 2249a7b590b3Smrg fi 2250a7b590b3Smrg ;; 2251a7b590b3Smrg esac 2252a7b590b3Smrg done 2253943345d3Smrg 2254a7b590b3Smrg for file in $staticlibs; do 2255a7b590b3Smrg func_basename "$file" 2256a7b590b3Smrg name="$func_basename_result" 2257a7b590b3Smrg 2258a7b590b3Smrg # Set up the ranlib parameters. 2259a7b590b3Smrg oldlib="$destdir/$name" 2260a7b590b3Smrg 2261a7b590b3Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 2262a7b590b3Smrg 2263a7b590b3Smrg if test -n "$stripme" && test -n "$old_striplib"; then 2264a7b590b3Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 2265a7b590b3Smrg fi 2266a7b590b3Smrg 2267a7b590b3Smrg # Do each command in the postinstall commands. 2268a7b590b3Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 2269a7b590b3Smrg done 2270a7b590b3Smrg 2271a7b590b3Smrg test -n "$future_libdirs" && \ 2272a7b590b3Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 2273a7b590b3Smrg 2274a7b590b3Smrg if test -n "$current_libdirs"; then 2275a7b590b3Smrg # Maybe just do a dry run. 2276a7b590b3Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 2277a7b590b3Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 2278a7b590b3Smrg else 2279a7b590b3Smrg exit $EXIT_SUCCESS 2280a7b590b3Smrg fi 2281a7b590b3Smrg} 2282a7b590b3Smrg 2283a7b590b3Smrgtest "$mode" = install && func_mode_install ${1+"$@"} 2284a7b590b3Smrg 2285a7b590b3Smrg 2286a7b590b3Smrg# func_generate_dlsyms outputname originator pic_p 2287a7b590b3Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 2288a7b590b3Smrg# a dlpreopen symbol table. 2289a7b590b3Smrgfunc_generate_dlsyms () 2290a7b590b3Smrg{ 2291a7b590b3Smrg $opt_debug 2292a7b590b3Smrg my_outputname="$1" 2293a7b590b3Smrg my_originator="$2" 2294a7b590b3Smrg my_pic_p="${3-no}" 2295a7b590b3Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 2296a7b590b3Smrg my_dlsyms= 2297a7b590b3Smrg 2298a7b590b3Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 2299a7b590b3Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 2300a7b590b3Smrg my_dlsyms="${my_outputname}S.c" 2301a7b590b3Smrg else 2302a7b590b3Smrg func_error "not configured to extract global symbols from dlpreopened files" 2303a7b590b3Smrg fi 2304a7b590b3Smrg fi 2305a7b590b3Smrg 2306a7b590b3Smrg if test -n "$my_dlsyms"; then 2307a7b590b3Smrg case $my_dlsyms in 2308a7b590b3Smrg "") ;; 2309a7b590b3Smrg *.c) 2310a7b590b3Smrg # Discover the nlist of each of the dlfiles. 2311a7b590b3Smrg nlist="$output_objdir/${my_outputname}.nm" 2312a7b590b3Smrg 2313a7b590b3Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 2314a7b590b3Smrg 2315a7b590b3Smrg # Parse the name list into a source file. 2316a7b590b3Smrg func_verbose "creating $output_objdir/$my_dlsyms" 2317a7b590b3Smrg 2318a7b590b3Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 2319a7b590b3Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 2320a7b590b3Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 2321a7b590b3Smrg 2322a7b590b3Smrg#ifdef __cplusplus 2323a7b590b3Smrgextern \"C\" { 2324a7b590b3Smrg#endif 2325a7b590b3Smrg 2326a7b590b3Smrg/* External symbol declarations for the compiler. */\ 2327a7b590b3Smrg" 2328a7b590b3Smrg 2329a7b590b3Smrg if test "$dlself" = yes; then 2330a7b590b3Smrg func_verbose "generating symbol list for \`$output'" 2331a7b590b3Smrg 2332a7b590b3Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 2333a7b590b3Smrg 2334a7b590b3Smrg # Add our own program objects to the symbol list. 2335a7b590b3Smrg progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 2336a7b590b3Smrg for progfile in $progfiles; do 2337a7b590b3Smrg func_verbose "extracting global C symbols from \`$progfile'" 2338a7b590b3Smrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 2339a7b590b3Smrg done 2340a7b590b3Smrg 2341a7b590b3Smrg if test -n "$exclude_expsyms"; then 2342a7b590b3Smrg $opt_dry_run || { 2343a7b590b3Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 2344a7b590b3Smrg eval '$MV "$nlist"T "$nlist"' 2345a7b590b3Smrg } 2346943345d3Smrg fi 2347a7b590b3Smrg 2348a7b590b3Smrg if test -n "$export_symbols_regex"; then 2349a7b590b3Smrg $opt_dry_run || { 2350a7b590b3Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 2351a7b590b3Smrg eval '$MV "$nlist"T "$nlist"' 2352a7b590b3Smrg } 2353a7b590b3Smrg fi 2354a7b590b3Smrg 2355a7b590b3Smrg # Prepare the list of exported symbols 2356a7b590b3Smrg if test -z "$export_symbols"; then 2357a7b590b3Smrg export_symbols="$output_objdir/$outputname.exp" 2358a7b590b3Smrg $opt_dry_run || { 2359a7b590b3Smrg $RM $export_symbols 2360a7b590b3Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 2361a7b590b3Smrg case $host in 2362a7b590b3Smrg *cygwin* | *mingw* | *cegcc* ) 2363a7b590b3Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2364a7b590b3Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 2365a7b590b3Smrg ;; 2366a7b590b3Smrg esac 2367a7b590b3Smrg } 2368943345d3Smrg else 2369a7b590b3Smrg $opt_dry_run || { 2370a7b590b3Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 2371a7b590b3Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 2372a7b590b3Smrg eval '$MV "$nlist"T "$nlist"' 2373a7b590b3Smrg case $host in 2374a7b590b3Smrg *cygwin | *mingw* | *cegcc* ) 2375a7b590b3Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2376a7b590b3Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 2377a7b590b3Smrg ;; 2378a7b590b3Smrg esac 2379a7b590b3Smrg } 2380943345d3Smrg fi 2381a7b590b3Smrg fi 2382943345d3Smrg 2383a7b590b3Smrg for dlprefile in $dlprefiles; do 2384a7b590b3Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 2385a7b590b3Smrg func_basename "$dlprefile" 2386a7b590b3Smrg name="$func_basename_result" 2387a7b590b3Smrg $opt_dry_run || { 2388a7b590b3Smrg eval '$ECHO ": $name " >> "$nlist"' 2389a7b590b3Smrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 2390a7b590b3Smrg } 2391a7b590b3Smrg done 2392a7b590b3Smrg 2393a7b590b3Smrg $opt_dry_run || { 2394a7b590b3Smrg # Make sure we have at least an empty file. 2395a7b590b3Smrg test -f "$nlist" || : > "$nlist" 2396a7b590b3Smrg 2397a7b590b3Smrg if test -n "$exclude_expsyms"; then 2398a7b590b3Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 2399a7b590b3Smrg $MV "$nlist"T "$nlist" 2400943345d3Smrg fi 2401a7b590b3Smrg 2402a7b590b3Smrg # Try sorting and uniquifying the output. 2403a7b590b3Smrg if $GREP -v "^: " < "$nlist" | 2404a7b590b3Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 2405a7b590b3Smrg sort -k 3 2406a7b590b3Smrg else 2407a7b590b3Smrg sort +2 2408a7b590b3Smrg fi | 2409a7b590b3Smrg uniq > "$nlist"S; then 2410a7b590b3Smrg : 2411943345d3Smrg else 2412a7b590b3Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 2413943345d3Smrg fi 2414943345d3Smrg 2415a7b590b3Smrg if test -f "$nlist"S; then 2416a7b590b3Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 2417943345d3Smrg else 2418a7b590b3Smrg $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" 2419943345d3Smrg fi 2420943345d3Smrg 2421a7b590b3Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2422943345d3Smrg 2423a7b590b3Smrg/* The mapping between symbol names and symbols. */ 2424a7b590b3Smrgtypedef struct { 2425a7b590b3Smrg const char *name; 2426a7b590b3Smrg void *address; 2427a7b590b3Smrg} lt_dlsymlist; 2428a7b590b3Smrg" 2429a7b590b3Smrg case $host in 2430a7b590b3Smrg *cygwin* | *mingw* | *cegcc* ) 2431a7b590b3Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2432a7b590b3Smrg/* DATA imports from DLLs on WIN32 con't be const, because 2433a7b590b3Smrg runtime relocations are performed -- see ld's documentation 2434a7b590b3Smrg on pseudo-relocs. */" 2435a7b590b3Smrg lt_dlsym_const= ;; 2436a7b590b3Smrg *osf5*) 2437a7b590b3Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2438a7b590b3Smrg/* This system does not cope well with relocations in const data */" 2439a7b590b3Smrg lt_dlsym_const= ;; 2440a7b590b3Smrg *) 2441a7b590b3Smrg lt_dlsym_const=const ;; 2442a7b590b3Smrg esac 2443943345d3Smrg 2444a7b590b3Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2445a7b590b3Smrgextern $lt_dlsym_const lt_dlsymlist 2446a7b590b3Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 2447a7b590b3Smrg$lt_dlsym_const lt_dlsymlist 2448a7b590b3Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 2449a7b590b3Smrg{\ 2450a7b590b3Smrg { \"$my_originator\", (void *) 0 }," 2451943345d3Smrg 2452a7b590b3Smrg case $need_lib_prefix in 2453a7b590b3Smrg no) 2454a7b590b3Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 2455a7b590b3Smrg ;; 2456a7b590b3Smrg *) 2457a7b590b3Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 2458a7b590b3Smrg ;; 2459a7b590b3Smrg esac 2460a7b590b3Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2461a7b590b3Smrg {0, (void *) 0} 2462a7b590b3Smrg}; 2463943345d3Smrg 2464a7b590b3Smrg/* This works around a problem in FreeBSD linker */ 2465a7b590b3Smrg#ifdef FREEBSD_WORKAROUND 2466a7b590b3Smrgstatic const void *lt_preloaded_setup() { 2467a7b590b3Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 2468a7b590b3Smrg} 2469a7b590b3Smrg#endif 2470a7b590b3Smrg 2471a7b590b3Smrg#ifdef __cplusplus 2472a7b590b3Smrg} 2473a7b590b3Smrg#endif\ 2474a7b590b3Smrg" 2475a7b590b3Smrg } # !$opt_dry_run 2476a7b590b3Smrg 2477a7b590b3Smrg pic_flag_for_symtable= 2478a7b590b3Smrg case "$compile_command " in 2479a7b590b3Smrg *" -static "*) ;; 2480a7b590b3Smrg *) 2481a7b590b3Smrg case $host in 2482a7b590b3Smrg # compiling the symbol table file with pic_flag works around 2483a7b590b3Smrg # a FreeBSD bug that causes programs to crash when -lm is 2484a7b590b3Smrg # linked before any other PIC object. But we must not use 2485a7b590b3Smrg # pic_flag when linking with -static. The problem exists in 2486a7b590b3Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 2487a7b590b3Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 2488a7b590b3Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 2489a7b590b3Smrg *-*-hpux*) 2490a7b590b3Smrg pic_flag_for_symtable=" $pic_flag" ;; 2491a7b590b3Smrg *) 2492a7b590b3Smrg if test "X$my_pic_p" != Xno; then 2493a7b590b3Smrg pic_flag_for_symtable=" $pic_flag" 2494943345d3Smrg fi 2495a7b590b3Smrg ;; 2496a7b590b3Smrg esac 2497a7b590b3Smrg ;; 2498a7b590b3Smrg esac 2499a7b590b3Smrg symtab_cflags= 2500a7b590b3Smrg for arg in $LTCFLAGS; do 2501a7b590b3Smrg case $arg in 2502a7b590b3Smrg -pie | -fpie | -fPIE) ;; 2503a7b590b3Smrg *) symtab_cflags="$symtab_cflags $arg" ;; 2504a7b590b3Smrg esac 2505a7b590b3Smrg done 2506943345d3Smrg 2507a7b590b3Smrg # Now compile the dynamic symbol file. 2508a7b590b3Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 2509943345d3Smrg 2510a7b590b3Smrg # Clean up the generated files. 2511a7b590b3Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2512943345d3Smrg 2513a7b590b3Smrg # Transform the symbol file into the correct name. 2514a7b590b3Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 2515a7b590b3Smrg case $host in 2516a7b590b3Smrg *cygwin* | *mingw* | *cegcc* ) 2517a7b590b3Smrg if test -f "$output_objdir/$my_outputname.def"; then 2518a7b590b3Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2519a7b590b3Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2520a7b590b3Smrg else 2521a7b590b3Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2522a7b590b3Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2523943345d3Smrg fi 2524a7b590b3Smrg ;; 2525a7b590b3Smrg *) 2526a7b590b3Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2527a7b590b3Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2528a7b590b3Smrg ;; 2529a7b590b3Smrg esac 2530a7b590b3Smrg ;; 2531a7b590b3Smrg *) 2532a7b590b3Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 2533a7b590b3Smrg ;; 2534a7b590b3Smrg esac 2535a7b590b3Smrg else 2536a7b590b3Smrg # We keep going just in case the user didn't refer to 2537a7b590b3Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 2538a7b590b3Smrg # really was required. 2539943345d3Smrg 2540a7b590b3Smrg # Nullify the symbol file. 2541a7b590b3Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` 2542a7b590b3Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` 2543a7b590b3Smrg fi 2544a7b590b3Smrg} 2545943345d3Smrg 2546a7b590b3Smrg# func_win32_libid arg 2547a7b590b3Smrg# return the library type of file 'arg' 2548a7b590b3Smrg# 2549a7b590b3Smrg# Need a lot of goo to handle *both* DLLs and import libs 2550a7b590b3Smrg# Has to be a shell function in order to 'eat' the argument 2551a7b590b3Smrg# that is supplied when $file_magic_command is called. 2552a7b590b3Smrgfunc_win32_libid () 2553a7b590b3Smrg{ 2554a7b590b3Smrg $opt_debug 2555a7b590b3Smrg win32_libid_type="unknown" 2556a7b590b3Smrg win32_fileres=`file -L $1 2>/dev/null` 2557a7b590b3Smrg case $win32_fileres in 2558a7b590b3Smrg *ar\ archive\ import\ library*) # definitely import 2559a7b590b3Smrg win32_libid_type="x86 archive import" 2560a7b590b3Smrg ;; 2561a7b590b3Smrg *ar\ archive*) # could be an import, or static 2562a7b590b3Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 2563a7b590b3Smrg $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 2564a7b590b3Smrg win32_nmres=`eval $NM -f posix -A $1 | 2565a7b590b3Smrg $SED -n -e ' 2566a7b590b3Smrg 1,100{ 2567a7b590b3Smrg / I /{ 2568a7b590b3Smrg s,.*,import, 2569a7b590b3Smrg p 2570a7b590b3Smrg q 2571a7b590b3Smrg } 2572a7b590b3Smrg }'` 2573a7b590b3Smrg case $win32_nmres in 2574a7b590b3Smrg import*) win32_libid_type="x86 archive import";; 2575a7b590b3Smrg *) win32_libid_type="x86 archive static";; 2576a7b590b3Smrg esac 2577a7b590b3Smrg fi 2578a7b590b3Smrg ;; 2579a7b590b3Smrg *DLL*) 2580a7b590b3Smrg win32_libid_type="x86 DLL" 2581a7b590b3Smrg ;; 2582a7b590b3Smrg *executable*) # but shell scripts are "executable" too... 2583a7b590b3Smrg case $win32_fileres in 2584a7b590b3Smrg *MS\ Windows\ PE\ Intel*) 2585a7b590b3Smrg win32_libid_type="x86 DLL" 2586a7b590b3Smrg ;; 2587a7b590b3Smrg esac 2588a7b590b3Smrg ;; 2589a7b590b3Smrg esac 2590a7b590b3Smrg $ECHO "$win32_libid_type" 2591a7b590b3Smrg} 2592943345d3Smrg 2593943345d3Smrg 2594943345d3Smrg 2595a7b590b3Smrg# func_extract_an_archive dir oldlib 2596a7b590b3Smrgfunc_extract_an_archive () 2597a7b590b3Smrg{ 2598a7b590b3Smrg $opt_debug 2599a7b590b3Smrg f_ex_an_ar_dir="$1"; shift 2600a7b590b3Smrg f_ex_an_ar_oldlib="$1" 2601a7b590b3Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 2602a7b590b3Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 2603a7b590b3Smrg : 2604a7b590b3Smrg else 2605a7b590b3Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 2606a7b590b3Smrg fi 2607a7b590b3Smrg} 2608943345d3Smrg 2609943345d3Smrg 2610a7b590b3Smrg# func_extract_archives gentop oldlib ... 2611a7b590b3Smrgfunc_extract_archives () 2612a7b590b3Smrg{ 2613a7b590b3Smrg $opt_debug 2614a7b590b3Smrg my_gentop="$1"; shift 2615a7b590b3Smrg my_oldlibs=${1+"$@"} 2616a7b590b3Smrg my_oldobjs="" 2617a7b590b3Smrg my_xlib="" 2618a7b590b3Smrg my_xabs="" 2619a7b590b3Smrg my_xdir="" 2620943345d3Smrg 2621a7b590b3Smrg for my_xlib in $my_oldlibs; do 2622a7b590b3Smrg # Extract the objects. 2623a7b590b3Smrg case $my_xlib in 2624a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 2625a7b590b3Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 2626a7b590b3Smrg esac 2627a7b590b3Smrg func_basename "$my_xlib" 2628a7b590b3Smrg my_xlib="$func_basename_result" 2629a7b590b3Smrg my_xlib_u=$my_xlib 2630a7b590b3Smrg while :; do 2631a7b590b3Smrg case " $extracted_archives " in 2632a7b590b3Smrg *" $my_xlib_u "*) 2633a7b590b3Smrg func_arith $extracted_serial + 1 2634a7b590b3Smrg extracted_serial=$func_arith_result 2635a7b590b3Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 2636a7b590b3Smrg *) break ;; 2637a7b590b3Smrg esac 2638a7b590b3Smrg done 2639a7b590b3Smrg extracted_archives="$extracted_archives $my_xlib_u" 2640a7b590b3Smrg my_xdir="$my_gentop/$my_xlib_u" 2641943345d3Smrg 2642a7b590b3Smrg func_mkdir_p "$my_xdir" 2643943345d3Smrg 2644a7b590b3Smrg case $host in 2645a7b590b3Smrg *-darwin*) 2646a7b590b3Smrg func_verbose "Extracting $my_xabs" 2647a7b590b3Smrg # Do not bother doing anything if just a dry run 2648a7b590b3Smrg $opt_dry_run || { 2649a7b590b3Smrg darwin_orig_dir=`pwd` 2650a7b590b3Smrg cd $my_xdir || exit $? 2651a7b590b3Smrg darwin_archive=$my_xabs 2652a7b590b3Smrg darwin_curdir=`pwd` 2653a7b590b3Smrg darwin_base_archive=`basename "$darwin_archive"` 2654a7b590b3Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 2655a7b590b3Smrg if test -n "$darwin_arches"; then 2656a7b590b3Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 2657a7b590b3Smrg darwin_arch= 2658a7b590b3Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 2659a7b590b3Smrg for darwin_arch in $darwin_arches ; do 2660a7b590b3Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2661a7b590b3Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 2662a7b590b3Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2663a7b590b3Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 2664a7b590b3Smrg cd "$darwin_curdir" 2665a7b590b3Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 2666a7b590b3Smrg done # $darwin_arches 2667a7b590b3Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 2668a7b590b3Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 2669a7b590b3Smrg darwin_file= 2670a7b590b3Smrg darwin_files= 2671a7b590b3Smrg for darwin_file in $darwin_filelist; do 2672a7b590b3Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 2673a7b590b3Smrg $LIPO -create -output "$darwin_file" $darwin_files 2674a7b590b3Smrg done # $darwin_filelist 2675a7b590b3Smrg $RM -rf unfat-$$ 2676a7b590b3Smrg cd "$darwin_orig_dir" 2677943345d3Smrg else 2678a7b590b3Smrg cd $darwin_orig_dir 2679a7b590b3Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 2680a7b590b3Smrg fi # $darwin_arches 2681a7b590b3Smrg } # !$opt_dry_run 2682a7b590b3Smrg ;; 2683a7b590b3Smrg *) 2684a7b590b3Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 2685a7b590b3Smrg ;; 2686a7b590b3Smrg esac 2687a7b590b3Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 2688a7b590b3Smrg done 2689943345d3Smrg 2690a7b590b3Smrg func_extract_archives_result="$my_oldobjs" 2691a7b590b3Smrg} 2692943345d3Smrg 2693943345d3Smrg 2694943345d3Smrg 2695a7b590b3Smrg# func_emit_wrapper_part1 [arg=no] 2696a7b590b3Smrg# 2697a7b590b3Smrg# Emit the first part of a libtool wrapper script on stdout. 2698a7b590b3Smrg# For more information, see the description associated with 2699a7b590b3Smrg# func_emit_wrapper(), below. 2700a7b590b3Smrgfunc_emit_wrapper_part1 () 2701a7b590b3Smrg{ 2702a7b590b3Smrg func_emit_wrapper_part1_arg1=no 2703a7b590b3Smrg if test -n "$1" ; then 2704a7b590b3Smrg func_emit_wrapper_part1_arg1=$1 2705943345d3Smrg fi 2706943345d3Smrg 2707a7b590b3Smrg $ECHO "\ 2708a7b590b3Smrg#! $SHELL 2709943345d3Smrg 2710a7b590b3Smrg# $output - temporary wrapper script for $objdir/$outputname 2711a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 2712a7b590b3Smrg# 2713a7b590b3Smrg# The $output program cannot be directly executed until all the libtool 2714a7b590b3Smrg# libraries that it depends on are installed. 2715a7b590b3Smrg# 2716a7b590b3Smrg# This wrapper script should never be moved out of the build directory. 2717a7b590b3Smrg# If it is, it will not operate correctly. 2718943345d3Smrg 2719a7b590b3Smrg# Sed substitution that helps us do robust quoting. It backslashifies 2720a7b590b3Smrg# metacharacters that are still active within double-quoted strings. 2721a7b590b3SmrgXsed='${SED} -e 1s/^X//' 2722a7b590b3Smrgsed_quote_subst='$sed_quote_subst' 2723943345d3Smrg 2724a7b590b3Smrg# Be Bourne compatible 2725a7b590b3Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 2726a7b590b3Smrg emulate sh 2727a7b590b3Smrg NULLCMD=: 2728a7b590b3Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 2729a7b590b3Smrg # is contrary to our usage. Disable this feature. 2730a7b590b3Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 2731a7b590b3Smrg setopt NO_GLOB_SUBST 2732a7b590b3Smrgelse 2733a7b590b3Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 2734a7b590b3Smrgfi 2735a7b590b3SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 2736a7b590b3SmrgDUALCASE=1; export DUALCASE # for MKS sh 2737943345d3Smrg 2738a7b590b3Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 2739a7b590b3Smrg# if CDPATH is set. 2740a7b590b3Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 2741943345d3Smrg 2742a7b590b3Smrgrelink_command=\"$relink_command\" 2743943345d3Smrg 2744a7b590b3Smrg# This environment variable determines our operation mode. 2745a7b590b3Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 2746a7b590b3Smrg # install mode needs the following variables: 2747a7b590b3Smrg generated_by_libtool_version='$macro_version' 2748a7b590b3Smrg notinst_deplibs='$notinst_deplibs' 2749a7b590b3Smrgelse 2750a7b590b3Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 2751a7b590b3Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 2752a7b590b3Smrg ECHO=\"$qecho\" 2753a7b590b3Smrg file=\"\$0\" 2754a7b590b3Smrg # Make sure echo works. 2755a7b590b3Smrg if test \"X\$1\" = X--no-reexec; then 2756a7b590b3Smrg # Discard the --no-reexec flag, and continue. 2757a7b590b3Smrg shift 2758a7b590b3Smrg elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then 2759a7b590b3Smrg # Yippee, \$ECHO works! 2760a7b590b3Smrg : 2761a7b590b3Smrg else 2762a7b590b3Smrg # Restart under the correct shell, and then maybe \$ECHO will work. 2763a7b590b3Smrg exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 2764a7b590b3Smrg fi 2765a7b590b3Smrg fi\ 2766a7b590b3Smrg" 2767a7b590b3Smrg $ECHO "\ 2768943345d3Smrg 2769a7b590b3Smrg # Find the directory that this script lives in. 2770a7b590b3Smrg thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 2771a7b590b3Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 2772943345d3Smrg 2773a7b590b3Smrg # Follow symbolic links until we get to the real thisdir. 2774a7b590b3Smrg file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 2775a7b590b3Smrg while test -n \"\$file\"; do 2776a7b590b3Smrg destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 2777943345d3Smrg 2778a7b590b3Smrg # If there was a directory component, then change thisdir. 2779a7b590b3Smrg if test \"x\$destdir\" != \"x\$file\"; then 2780a7b590b3Smrg case \"\$destdir\" in 2781a7b590b3Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 2782a7b590b3Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 2783943345d3Smrg esac 2784a7b590b3Smrg fi 2785943345d3Smrg 2786a7b590b3Smrg file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 2787a7b590b3Smrg file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 2788a7b590b3Smrg done 2789a7b590b3Smrg" 2790a7b590b3Smrg} 2791a7b590b3Smrg# end: func_emit_wrapper_part1 2792a7b590b3Smrg 2793a7b590b3Smrg# func_emit_wrapper_part2 [arg=no] 2794a7b590b3Smrg# 2795a7b590b3Smrg# Emit the second part of a libtool wrapper script on stdout. 2796a7b590b3Smrg# For more information, see the description associated with 2797a7b590b3Smrg# func_emit_wrapper(), below. 2798a7b590b3Smrgfunc_emit_wrapper_part2 () 2799a7b590b3Smrg{ 2800a7b590b3Smrg func_emit_wrapper_part2_arg1=no 2801a7b590b3Smrg if test -n "$1" ; then 2802a7b590b3Smrg func_emit_wrapper_part2_arg1=$1 2803943345d3Smrg fi 2804943345d3Smrg 2805a7b590b3Smrg $ECHO "\ 2806943345d3Smrg 2807a7b590b3Smrg # Usually 'no', except on cygwin/mingw when embedded into 2808a7b590b3Smrg # the cwrapper. 2809a7b590b3Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 2810a7b590b3Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 2811a7b590b3Smrg # special case for '.' 2812a7b590b3Smrg if test \"\$thisdir\" = \".\"; then 2813a7b590b3Smrg thisdir=\`pwd\` 2814a7b590b3Smrg fi 2815a7b590b3Smrg # remove .libs from thisdir 2816a7b590b3Smrg case \"\$thisdir\" in 2817a7b590b3Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; 2818a7b590b3Smrg $objdir ) thisdir=. ;; 2819a7b590b3Smrg esac 2820a7b590b3Smrg fi 2821a7b590b3Smrg 2822a7b590b3Smrg # Try to get the absolute directory name. 2823a7b590b3Smrg absdir=\`cd \"\$thisdir\" && pwd\` 2824a7b590b3Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 2825a7b590b3Smrg" 2826a7b590b3Smrg 2827a7b590b3Smrg if test "$fast_install" = yes; then 2828a7b590b3Smrg $ECHO "\ 2829a7b590b3Smrg program=lt-'$outputname'$exeext 2830a7b590b3Smrg progdir=\"\$thisdir/$objdir\" 2831a7b590b3Smrg 2832a7b590b3Smrg if test ! -f \"\$progdir/\$program\" || 2833a7b590b3Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 2834a7b590b3Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 2835a7b590b3Smrg 2836a7b590b3Smrg file=\"\$\$-\$program\" 2837a7b590b3Smrg 2838a7b590b3Smrg if test ! -d \"\$progdir\"; then 2839a7b590b3Smrg $MKDIR \"\$progdir\" 2840a7b590b3Smrg else 2841a7b590b3Smrg $RM \"\$progdir/\$file\" 2842a7b590b3Smrg fi" 2843a7b590b3Smrg 2844a7b590b3Smrg $ECHO "\ 2845a7b590b3Smrg 2846a7b590b3Smrg # relink executable if necessary 2847a7b590b3Smrg if test -n \"\$relink_command\"; then 2848a7b590b3Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 2849a7b590b3Smrg else 2850a7b590b3Smrg $ECHO \"\$relink_command_output\" >&2 2851a7b590b3Smrg $RM \"\$progdir/\$file\" 2852a7b590b3Smrg exit 1 2853943345d3Smrg fi 2854a7b590b3Smrg fi 2855943345d3Smrg 2856a7b590b3Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 2857a7b590b3Smrg { $RM \"\$progdir/\$program\"; 2858a7b590b3Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 2859a7b590b3Smrg $RM \"\$progdir/\$file\" 2860a7b590b3Smrg fi" 2861a7b590b3Smrg else 2862a7b590b3Smrg $ECHO "\ 2863a7b590b3Smrg program='$outputname' 2864a7b590b3Smrg progdir=\"\$thisdir/$objdir\" 2865a7b590b3Smrg" 2866943345d3Smrg fi 2867943345d3Smrg 2868a7b590b3Smrg $ECHO "\ 2869943345d3Smrg 2870a7b590b3Smrg if test -f \"\$progdir/\$program\"; then" 2871943345d3Smrg 2872a7b590b3Smrg # Export our shlibpath_var if we have one. 2873a7b590b3Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 2874a7b590b3Smrg $ECHO "\ 2875a7b590b3Smrg # Add our own library path to $shlibpath_var 2876a7b590b3Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 2877a7b590b3Smrg 2878a7b590b3Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 2879a7b590b3Smrg # The second colon is a workaround for a bug in BeOS R4 sed 2880a7b590b3Smrg $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 2881943345d3Smrg 2882a7b590b3Smrg export $shlibpath_var 2883a7b590b3Smrg" 2884943345d3Smrg fi 2885943345d3Smrg 2886a7b590b3Smrg # fixup the dll searchpath if we need to. 2887a7b590b3Smrg if test -n "$dllsearchpath"; then 2888a7b590b3Smrg $ECHO "\ 2889a7b590b3Smrg # Add the dll search path components to the executable PATH 2890a7b590b3Smrg PATH=$dllsearchpath:\$PATH 2891a7b590b3Smrg" 2892a7b590b3Smrg fi 2893943345d3Smrg 2894a7b590b3Smrg $ECHO "\ 2895a7b590b3Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 2896a7b590b3Smrg # Run the actual program with our arguments. 2897a7b590b3Smrg" 2898a7b590b3Smrg case $host in 2899a7b590b3Smrg # Backslashes separate directories on plain windows 2900a7b590b3Smrg *-*-mingw | *-*-os2* | *-cegcc*) 2901a7b590b3Smrg $ECHO "\ 2902a7b590b3Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 2903a7b590b3Smrg" 2904943345d3Smrg ;; 2905943345d3Smrg 2906943345d3Smrg *) 2907a7b590b3Smrg $ECHO "\ 2908a7b590b3Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 2909a7b590b3Smrg" 2910943345d3Smrg ;; 2911943345d3Smrg esac 2912a7b590b3Smrg $ECHO "\ 2913a7b590b3Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 2914a7b590b3Smrg exit 1 2915a7b590b3Smrg fi 2916a7b590b3Smrg else 2917a7b590b3Smrg # The program doesn't exist. 2918a7b590b3Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 2919a7b590b3Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 2920a7b590b3Smrg $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 2921a7b590b3Smrg exit 1 2922a7b590b3Smrg fi 2923a7b590b3Smrgfi\ 2924a7b590b3Smrg" 2925a7b590b3Smrg} 2926a7b590b3Smrg# end: func_emit_wrapper_part2 2927943345d3Smrg 2928943345d3Smrg 2929a7b590b3Smrg# func_emit_wrapper [arg=no] 2930a7b590b3Smrg# 2931a7b590b3Smrg# Emit a libtool wrapper script on stdout. 2932a7b590b3Smrg# Don't directly open a file because we may want to 2933a7b590b3Smrg# incorporate the script contents within a cygwin/mingw 2934a7b590b3Smrg# wrapper executable. Must ONLY be called from within 2935a7b590b3Smrg# func_mode_link because it depends on a number of variables 2936a7b590b3Smrg# set therein. 2937a7b590b3Smrg# 2938a7b590b3Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 2939a7b590b3Smrg# variable will take. If 'yes', then the emitted script 2940a7b590b3Smrg# will assume that the directory in which it is stored is 2941a7b590b3Smrg# the $objdir directory. This is a cygwin/mingw-specific 2942a7b590b3Smrg# behavior. 2943a7b590b3Smrgfunc_emit_wrapper () 2944a7b590b3Smrg{ 2945a7b590b3Smrg func_emit_wrapper_arg1=no 2946a7b590b3Smrg if test -n "$1" ; then 2947a7b590b3Smrg func_emit_wrapper_arg1=$1 2948943345d3Smrg fi 2949943345d3Smrg 2950a7b590b3Smrg # split this up so that func_emit_cwrapperexe_src 2951a7b590b3Smrg # can call each part independently. 2952a7b590b3Smrg func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" 2953a7b590b3Smrg func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" 2954a7b590b3Smrg} 2955943345d3Smrg 2956943345d3Smrg 2957a7b590b3Smrg# func_to_host_path arg 2958a7b590b3Smrg# 2959a7b590b3Smrg# Convert paths to host format when used with build tools. 2960a7b590b3Smrg# Intended for use with "native" mingw (where libtool itself 2961a7b590b3Smrg# is running under the msys shell), or in the following cross- 2962a7b590b3Smrg# build environments: 2963a7b590b3Smrg# $build $host 2964a7b590b3Smrg# mingw (msys) mingw [e.g. native] 2965a7b590b3Smrg# cygwin mingw 2966a7b590b3Smrg# *nix + wine mingw 2967a7b590b3Smrg# where wine is equipped with the `winepath' executable. 2968a7b590b3Smrg# In the native mingw case, the (msys) shell automatically 2969a7b590b3Smrg# converts paths for any non-msys applications it launches, 2970a7b590b3Smrg# but that facility isn't available from inside the cwrapper. 2971a7b590b3Smrg# Similar accommodations are necessary for $host mingw and 2972a7b590b3Smrg# $build cygwin. Calling this function does no harm for other 2973a7b590b3Smrg# $host/$build combinations not listed above. 2974a7b590b3Smrg# 2975a7b590b3Smrg# ARG is the path (on $build) that should be converted to 2976a7b590b3Smrg# the proper representation for $host. The result is stored 2977a7b590b3Smrg# in $func_to_host_path_result. 2978a7b590b3Smrgfunc_to_host_path () 2979a7b590b3Smrg{ 2980a7b590b3Smrg func_to_host_path_result="$1" 2981a7b590b3Smrg if test -n "$1" ; then 2982a7b590b3Smrg case $host in 2983a7b590b3Smrg *mingw* ) 2984a7b590b3Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 2985a7b590b3Smrg case $build in 2986a7b590b3Smrg *mingw* ) # actually, msys 2987a7b590b3Smrg # awkward: cmd appends spaces to result 2988a7b590b3Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 2989a7b590b3Smrg func_to_host_path_tmp1=`( cmd //c echo "$1" |\ 2990a7b590b3Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 2991a7b590b3Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 2992a7b590b3Smrg $SED -e "$lt_sed_naive_backslashify"` 2993a7b590b3Smrg ;; 2994a7b590b3Smrg *cygwin* ) 2995a7b590b3Smrg func_to_host_path_tmp1=`cygpath -w "$1"` 2996a7b590b3Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 2997a7b590b3Smrg $SED -e "$lt_sed_naive_backslashify"` 2998a7b590b3Smrg ;; 2999a7b590b3Smrg * ) 3000a7b590b3Smrg # Unfortunately, winepath does not exit with a non-zero 3001a7b590b3Smrg # error code, so we are forced to check the contents of 3002a7b590b3Smrg # stdout. On the other hand, if the command is not 3003a7b590b3Smrg # found, the shell will set an exit code of 127 and print 3004a7b590b3Smrg # *an error message* to stdout. So we must check for both 3005a7b590b3Smrg # error code of zero AND non-empty stdout, which explains 3006a7b590b3Smrg # the odd construction: 3007a7b590b3Smrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 3008a7b590b3Smrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 3009a7b590b3Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 3010a7b590b3Smrg $SED -e "$lt_sed_naive_backslashify"` 3011a7b590b3Smrg else 3012a7b590b3Smrg # Allow warning below. 3013a7b590b3Smrg func_to_host_path_result="" 3014a7b590b3Smrg fi 3015a7b590b3Smrg ;; 3016a7b590b3Smrg esac 3017a7b590b3Smrg if test -z "$func_to_host_path_result" ; then 3018a7b590b3Smrg func_error "Could not determine host path corresponding to" 3019a7b590b3Smrg func_error " '$1'" 3020a7b590b3Smrg func_error "Continuing, but uninstalled executables may not work." 3021a7b590b3Smrg # Fallback: 3022a7b590b3Smrg func_to_host_path_result="$1" 3023a7b590b3Smrg fi 3024a7b590b3Smrg ;; 3025a7b590b3Smrg esac 3026a7b590b3Smrg fi 3027a7b590b3Smrg} 3028a7b590b3Smrg# end: func_to_host_path 3029943345d3Smrg 3030a7b590b3Smrg# func_to_host_pathlist arg 3031a7b590b3Smrg# 3032a7b590b3Smrg# Convert pathlists to host format when used with build tools. 3033a7b590b3Smrg# See func_to_host_path(), above. This function supports the 3034a7b590b3Smrg# following $build/$host combinations (but does no harm for 3035a7b590b3Smrg# combinations not listed here): 3036a7b590b3Smrg# $build $host 3037a7b590b3Smrg# mingw (msys) mingw [e.g. native] 3038a7b590b3Smrg# cygwin mingw 3039a7b590b3Smrg# *nix + wine mingw 3040a7b590b3Smrg# 3041a7b590b3Smrg# Path separators are also converted from $build format to 3042a7b590b3Smrg# $host format. If ARG begins or ends with a path separator 3043a7b590b3Smrg# character, it is preserved (but converted to $host format) 3044a7b590b3Smrg# on output. 3045a7b590b3Smrg# 3046a7b590b3Smrg# ARG is a pathlist (on $build) that should be converted to 3047a7b590b3Smrg# the proper representation on $host. The result is stored 3048a7b590b3Smrg# in $func_to_host_pathlist_result. 3049a7b590b3Smrgfunc_to_host_pathlist () 3050a7b590b3Smrg{ 3051a7b590b3Smrg func_to_host_pathlist_result="$1" 3052a7b590b3Smrg if test -n "$1" ; then 3053a7b590b3Smrg case $host in 3054a7b590b3Smrg *mingw* ) 3055a7b590b3Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3056a7b590b3Smrg # Remove leading and trailing path separator characters from 3057a7b590b3Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3058a7b590b3Smrg # into '.;' and ';.', and winepath ignores them completely. 3059a7b590b3Smrg func_to_host_pathlist_tmp2="$1" 3060a7b590b3Smrg # Once set for this call, this variable should not be 3061a7b590b3Smrg # reassigned. It is used in tha fallback case. 3062a7b590b3Smrg func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ 3063a7b590b3Smrg $SED -e 's|^:*||' -e 's|:*$||'` 3064a7b590b3Smrg case $build in 3065a7b590b3Smrg *mingw* ) # Actually, msys. 3066a7b590b3Smrg # Awkward: cmd appends spaces to result. 3067a7b590b3Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 3068a7b590b3Smrg func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ 3069a7b590b3Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 3070a7b590b3Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 3071a7b590b3Smrg $SED -e "$lt_sed_naive_backslashify"` 3072a7b590b3Smrg ;; 3073a7b590b3Smrg *cygwin* ) 3074a7b590b3Smrg func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` 3075a7b590b3Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 3076a7b590b3Smrg $SED -e "$lt_sed_naive_backslashify"` 3077a7b590b3Smrg ;; 3078a7b590b3Smrg * ) 3079a7b590b3Smrg # unfortunately, winepath doesn't convert pathlists 3080a7b590b3Smrg func_to_host_pathlist_result="" 3081a7b590b3Smrg func_to_host_pathlist_oldIFS=$IFS 3082a7b590b3Smrg IFS=: 3083a7b590b3Smrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 3084a7b590b3Smrg IFS=$func_to_host_pathlist_oldIFS 3085a7b590b3Smrg if test -n "$func_to_host_pathlist_f" ; then 3086a7b590b3Smrg func_to_host_path "$func_to_host_pathlist_f" 3087a7b590b3Smrg if test -n "$func_to_host_path_result" ; then 3088a7b590b3Smrg if test -z "$func_to_host_pathlist_result" ; then 3089a7b590b3Smrg func_to_host_pathlist_result="$func_to_host_path_result" 3090a7b590b3Smrg else 3091a7b590b3Smrg func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" 3092a7b590b3Smrg fi 3093a7b590b3Smrg fi 3094a7b590b3Smrg fi 3095a7b590b3Smrg IFS=: 3096a7b590b3Smrg done 3097a7b590b3Smrg IFS=$func_to_host_pathlist_oldIFS 3098a7b590b3Smrg ;; 3099a7b590b3Smrg esac 3100a7b590b3Smrg if test -z "$func_to_host_pathlist_result" ; then 3101a7b590b3Smrg func_error "Could not determine the host path(s) corresponding to" 3102a7b590b3Smrg func_error " '$1'" 3103a7b590b3Smrg func_error "Continuing, but uninstalled executables may not work." 3104a7b590b3Smrg # Fallback. This may break if $1 contains DOS-style drive 3105a7b590b3Smrg # specifications. The fix is not to complicate the expression 3106a7b590b3Smrg # below, but for the user to provide a working wine installation 3107a7b590b3Smrg # with winepath so that path translation in the cross-to-mingw 3108a7b590b3Smrg # case works properly. 3109a7b590b3Smrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 3110a7b590b3Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 3111a7b590b3Smrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 3112a7b590b3Smrg fi 3113a7b590b3Smrg # Now, add the leading and trailing path separators back 3114a7b590b3Smrg case "$1" in 3115a7b590b3Smrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 3116a7b590b3Smrg ;; 3117a7b590b3Smrg esac 3118a7b590b3Smrg case "$1" in 3119a7b590b3Smrg *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" 3120a7b590b3Smrg ;; 3121a7b590b3Smrg esac 3122a7b590b3Smrg ;; 3123a7b590b3Smrg esac 3124a7b590b3Smrg fi 3125a7b590b3Smrg} 3126a7b590b3Smrg# end: func_to_host_pathlist 3127943345d3Smrg 3128a7b590b3Smrg# func_emit_cwrapperexe_src 3129a7b590b3Smrg# emit the source code for a wrapper executable on stdout 3130a7b590b3Smrg# Must ONLY be called from within func_mode_link because 3131a7b590b3Smrg# it depends on a number of variable set therein. 3132a7b590b3Smrgfunc_emit_cwrapperexe_src () 3133a7b590b3Smrg{ 3134a7b590b3Smrg cat <<EOF 3135943345d3Smrg 3136a7b590b3Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 3137a7b590b3Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3138943345d3Smrg 3139a7b590b3Smrg The $output program cannot be directly executed until all the libtool 3140a7b590b3Smrg libraries that it depends on are installed. 3141943345d3Smrg 3142a7b590b3Smrg This wrapper executable should never be moved out of the build directory. 3143a7b590b3Smrg If it is, it will not operate correctly. 3144943345d3Smrg 3145a7b590b3Smrg Currently, it simply execs the wrapper *script* "$SHELL $output", 3146a7b590b3Smrg but could eventually absorb all of the scripts functionality and 3147a7b590b3Smrg exec $objdir/$outputname directly. 3148a7b590b3Smrg*/ 3149a7b590b3SmrgEOF 3150a7b590b3Smrg cat <<"EOF" 3151a7b590b3Smrg#include <stdio.h> 3152a7b590b3Smrg#include <stdlib.h> 3153a7b590b3Smrg#ifdef _MSC_VER 3154a7b590b3Smrg# include <direct.h> 3155a7b590b3Smrg# include <process.h> 3156a7b590b3Smrg# include <io.h> 3157a7b590b3Smrg# define setmode _setmode 3158a7b590b3Smrg#else 3159a7b590b3Smrg# include <unistd.h> 3160a7b590b3Smrg# include <stdint.h> 3161a7b590b3Smrg# ifdef __CYGWIN__ 3162a7b590b3Smrg# include <io.h> 3163a7b590b3Smrg# define HAVE_SETENV 3164a7b590b3Smrg# ifdef __STRICT_ANSI__ 3165a7b590b3Smrgchar *realpath (const char *, char *); 3166a7b590b3Smrgint putenv (char *); 3167a7b590b3Smrgint setenv (const char *, const char *, int); 3168a7b590b3Smrg# endif 3169a7b590b3Smrg# endif 3170a7b590b3Smrg#endif 3171a7b590b3Smrg#include <malloc.h> 3172a7b590b3Smrg#include <stdarg.h> 3173a7b590b3Smrg#include <assert.h> 3174a7b590b3Smrg#include <string.h> 3175a7b590b3Smrg#include <ctype.h> 3176a7b590b3Smrg#include <errno.h> 3177a7b590b3Smrg#include <fcntl.h> 3178a7b590b3Smrg#include <sys/stat.h> 3179943345d3Smrg 3180a7b590b3Smrg#if defined(PATH_MAX) 3181a7b590b3Smrg# define LT_PATHMAX PATH_MAX 3182a7b590b3Smrg#elif defined(MAXPATHLEN) 3183a7b590b3Smrg# define LT_PATHMAX MAXPATHLEN 3184a7b590b3Smrg#else 3185a7b590b3Smrg# define LT_PATHMAX 1024 3186a7b590b3Smrg#endif 3187943345d3Smrg 3188a7b590b3Smrg#ifndef S_IXOTH 3189a7b590b3Smrg# define S_IXOTH 0 3190a7b590b3Smrg#endif 3191a7b590b3Smrg#ifndef S_IXGRP 3192a7b590b3Smrg# define S_IXGRP 0 3193a7b590b3Smrg#endif 3194943345d3Smrg 3195a7b590b3Smrg#ifdef _MSC_VER 3196a7b590b3Smrg# define S_IXUSR _S_IEXEC 3197a7b590b3Smrg# define stat _stat 3198a7b590b3Smrg# ifndef _INTPTR_T_DEFINED 3199a7b590b3Smrg# define intptr_t int 3200a7b590b3Smrg# endif 3201a7b590b3Smrg#endif 3202943345d3Smrg 3203a7b590b3Smrg#ifndef DIR_SEPARATOR 3204a7b590b3Smrg# define DIR_SEPARATOR '/' 3205a7b590b3Smrg# define PATH_SEPARATOR ':' 3206a7b590b3Smrg#endif 3207943345d3Smrg 3208a7b590b3Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 3209a7b590b3Smrg defined (__OS2__) 3210a7b590b3Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 3211a7b590b3Smrg# define FOPEN_WB "wb" 3212a7b590b3Smrg# ifndef DIR_SEPARATOR_2 3213a7b590b3Smrg# define DIR_SEPARATOR_2 '\\' 3214a7b590b3Smrg# endif 3215a7b590b3Smrg# ifndef PATH_SEPARATOR_2 3216a7b590b3Smrg# define PATH_SEPARATOR_2 ';' 3217a7b590b3Smrg# endif 3218a7b590b3Smrg#endif 3219943345d3Smrg 3220a7b590b3Smrg#ifndef DIR_SEPARATOR_2 3221a7b590b3Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 3222a7b590b3Smrg#else /* DIR_SEPARATOR_2 */ 3223a7b590b3Smrg# define IS_DIR_SEPARATOR(ch) \ 3224a7b590b3Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 3225a7b590b3Smrg#endif /* DIR_SEPARATOR_2 */ 3226943345d3Smrg 3227a7b590b3Smrg#ifndef PATH_SEPARATOR_2 3228a7b590b3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 3229a7b590b3Smrg#else /* PATH_SEPARATOR_2 */ 3230a7b590b3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 3231a7b590b3Smrg#endif /* PATH_SEPARATOR_2 */ 3232943345d3Smrg 3233a7b590b3Smrg#ifdef __CYGWIN__ 3234a7b590b3Smrg# define FOPEN_WB "wb" 3235a7b590b3Smrg#endif 3236943345d3Smrg 3237a7b590b3Smrg#ifndef FOPEN_WB 3238a7b590b3Smrg# define FOPEN_WB "w" 3239a7b590b3Smrg#endif 3240a7b590b3Smrg#ifndef _O_BINARY 3241a7b590b3Smrg# define _O_BINARY 0 3242a7b590b3Smrg#endif 3243943345d3Smrg 3244a7b590b3Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 3245a7b590b3Smrg#define XFREE(stale) do { \ 3246a7b590b3Smrg if (stale) { free ((void *) stale); stale = 0; } \ 3247a7b590b3Smrg} while (0) 3248943345d3Smrg 3249a7b590b3Smrg#undef LTWRAPPER_DEBUGPRINTF 3250a7b590b3Smrg#if defined DEBUGWRAPPER 3251a7b590b3Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args 3252a7b590b3Smrgstatic void 3253a7b590b3Smrgltwrapper_debugprintf (const char *fmt, ...) 3254a7b590b3Smrg{ 3255a7b590b3Smrg va_list args; 3256a7b590b3Smrg va_start (args, fmt); 3257a7b590b3Smrg (void) vfprintf (stderr, fmt, args); 3258a7b590b3Smrg va_end (args); 3259a7b590b3Smrg} 3260a7b590b3Smrg#else 3261a7b590b3Smrg# define LTWRAPPER_DEBUGPRINTF(args) 3262a7b590b3Smrg#endif 3263943345d3Smrg 3264a7b590b3Smrgconst char *program_name = NULL; 3265943345d3Smrg 3266a7b590b3Smrgvoid *xmalloc (size_t num); 3267a7b590b3Smrgchar *xstrdup (const char *string); 3268a7b590b3Smrgconst char *base_name (const char *name); 3269a7b590b3Smrgchar *find_executable (const char *wrapper); 3270a7b590b3Smrgchar *chase_symlinks (const char *pathspec); 3271a7b590b3Smrgint make_executable (const char *path); 3272a7b590b3Smrgint check_executable (const char *path); 3273a7b590b3Smrgchar *strendzap (char *str, const char *pat); 3274a7b590b3Smrgvoid lt_fatal (const char *message, ...); 3275a7b590b3Smrgvoid lt_setenv (const char *name, const char *value); 3276a7b590b3Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 3277a7b590b3Smrgvoid lt_opt_process_env_set (const char *arg); 3278a7b590b3Smrgvoid lt_opt_process_env_prepend (const char *arg); 3279a7b590b3Smrgvoid lt_opt_process_env_append (const char *arg); 3280a7b590b3Smrgint lt_split_name_value (const char *arg, char** name, char** value); 3281a7b590b3Smrgvoid lt_update_exe_path (const char *name, const char *value); 3282a7b590b3Smrgvoid lt_update_lib_path (const char *name, const char *value); 3283a7b590b3Smrg 3284a7b590b3Smrgstatic const char *script_text_part1 = 3285a7b590b3SmrgEOF 3286943345d3Smrg 3287a7b590b3Smrg func_emit_wrapper_part1 yes | 3288a7b590b3Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 3289a7b590b3Smrg -e 's/^/ "/' -e 's/$/\\n"/' 3290a7b590b3Smrg echo ";" 3291a7b590b3Smrg cat <<EOF 3292943345d3Smrg 3293a7b590b3Smrgstatic const char *script_text_part2 = 3294a7b590b3SmrgEOF 3295a7b590b3Smrg func_emit_wrapper_part2 yes | 3296a7b590b3Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 3297a7b590b3Smrg -e 's/^/ "/' -e 's/$/\\n"/' 3298a7b590b3Smrg echo ";" 3299a7b590b3Smrg 3300a7b590b3Smrg cat <<EOF 3301a7b590b3Smrgconst char * MAGIC_EXE = "$magic_exe"; 3302a7b590b3Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 3303a7b590b3SmrgEOF 3304943345d3Smrg 3305a7b590b3Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3306a7b590b3Smrg func_to_host_pathlist "$temp_rpath" 3307a7b590b3Smrg cat <<EOF 3308a7b590b3Smrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 3309a7b590b3SmrgEOF 3310a7b590b3Smrg else 3311a7b590b3Smrg cat <<"EOF" 3312a7b590b3Smrgconst char * LIB_PATH_VALUE = ""; 3313a7b590b3SmrgEOF 3314943345d3Smrg fi 3315943345d3Smrg 3316a7b590b3Smrg if test -n "$dllsearchpath"; then 3317a7b590b3Smrg func_to_host_pathlist "$dllsearchpath:" 3318a7b590b3Smrg cat <<EOF 3319a7b590b3Smrgconst char * EXE_PATH_VARNAME = "PATH"; 3320a7b590b3Smrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 3321943345d3SmrgEOF 3322943345d3Smrg else 3323a7b590b3Smrg cat <<"EOF" 3324a7b590b3Smrgconst char * EXE_PATH_VARNAME = ""; 3325a7b590b3Smrgconst char * EXE_PATH_VALUE = ""; 3326a7b590b3SmrgEOF 3327943345d3Smrg fi 3328a7b590b3Smrg 3329a7b590b3Smrg if test "$fast_install" = yes; then 3330a7b590b3Smrg cat <<EOF 3331a7b590b3Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 3332a7b590b3SmrgEOF 3333943345d3Smrg else 3334a7b590b3Smrg cat <<EOF 3335a7b590b3Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 3336a7b590b3SmrgEOF 3337943345d3Smrg fi 3338943345d3Smrg 3339943345d3Smrg 3340a7b590b3Smrg cat <<"EOF" 3341943345d3Smrg 3342a7b590b3Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 3343a7b590b3Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH 5 3344943345d3Smrg 3345a7b590b3Smrgstatic const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH; 3346a7b590b3Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 3347943345d3Smrg 3348a7b590b3Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 3349943345d3Smrg 3350a7b590b3Smrgstatic const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7; 3351a7b590b3Smrgstatic const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set"; 3352a7b590b3Smrg /* argument is putenv-style "foo=bar", value of foo is set to bar */ 3353943345d3Smrg 3354a7b590b3Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11; 3355a7b590b3Smrgstatic const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend"; 3356a7b590b3Smrg /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */ 3357943345d3Smrg 3358a7b590b3Smrgstatic const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10; 3359a7b590b3Smrgstatic const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append"; 3360a7b590b3Smrg /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */ 3361943345d3Smrg 3362a7b590b3Smrgint 3363a7b590b3Smrgmain (int argc, char *argv[]) 3364a7b590b3Smrg{ 3365a7b590b3Smrg char **newargz; 3366a7b590b3Smrg int newargc; 3367a7b590b3Smrg char *tmp_pathspec; 3368a7b590b3Smrg char *actual_cwrapper_path; 3369a7b590b3Smrg char *actual_cwrapper_name; 3370a7b590b3Smrg char *target_name; 3371a7b590b3Smrg char *lt_argv_zero; 3372a7b590b3Smrg intptr_t rval = 127; 3373943345d3Smrg 3374a7b590b3Smrg int i; 3375943345d3Smrg 3376a7b590b3Smrg program_name = (char *) xstrdup (base_name (argv[0])); 3377a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0])); 3378a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name)); 3379943345d3Smrg 3380a7b590b3Smrg /* very simple arg parsing; don't want to rely on getopt */ 3381a7b590b3Smrg for (i = 1; i < argc; i++) 3382a7b590b3Smrg { 3383a7b590b3Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 3384a7b590b3Smrg { 3385a7b590b3SmrgEOF 3386a7b590b3Smrg case "$host" in 3387a7b590b3Smrg *mingw* | *cygwin* ) 3388a7b590b3Smrg # make stdout use "unix" line endings 3389a7b590b3Smrg echo " setmode(1,_O_BINARY);" 3390a7b590b3Smrg ;; 3391a7b590b3Smrg esac 3392943345d3Smrg 3393a7b590b3Smrg cat <<"EOF" 3394a7b590b3Smrg printf ("%s", script_text_part1); 3395a7b590b3Smrg printf ("%s", script_text_part2); 3396a7b590b3Smrg return 0; 3397a7b590b3Smrg } 3398a7b590b3Smrg } 3399943345d3Smrg 3400a7b590b3Smrg newargz = XMALLOC (char *, argc + 1); 3401a7b590b3Smrg tmp_pathspec = find_executable (argv[0]); 3402a7b590b3Smrg if (tmp_pathspec == NULL) 3403a7b590b3Smrg lt_fatal ("Couldn't find %s", argv[0]); 3404a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", 3405a7b590b3Smrg tmp_pathspec)); 3406a7b590b3Smrg 3407a7b590b3Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 3408a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", 3409a7b590b3Smrg actual_cwrapper_path)); 3410a7b590b3Smrg XFREE (tmp_pathspec); 3411a7b590b3Smrg 3412a7b590b3Smrg actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); 3413a7b590b3Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 3414a7b590b3Smrg 3415a7b590b3Smrg /* wrapper name transforms */ 3416a7b590b3Smrg strendzap (actual_cwrapper_name, ".exe"); 3417a7b590b3Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 3418a7b590b3Smrg XFREE (actual_cwrapper_name); 3419a7b590b3Smrg actual_cwrapper_name = tmp_pathspec; 3420a7b590b3Smrg tmp_pathspec = 0; 3421a7b590b3Smrg 3422a7b590b3Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 3423a7b590b3Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 3424a7b590b3Smrg strendzap (target_name, ".exe"); 3425a7b590b3Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 3426a7b590b3Smrg XFREE (target_name); 3427a7b590b3Smrg target_name = tmp_pathspec; 3428a7b590b3Smrg tmp_pathspec = 0; 3429a7b590b3Smrg 3430a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", 3431a7b590b3Smrg target_name)); 3432a7b590b3SmrgEOF 3433943345d3Smrg 3434a7b590b3Smrg cat <<EOF 3435a7b590b3Smrg newargz[0] = 3436a7b590b3Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 3437a7b590b3Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 3438a7b590b3Smrg strcpy (newargz[0], actual_cwrapper_path); 3439a7b590b3Smrg strcat (newargz[0], "$objdir"); 3440a7b590b3Smrg strcat (newargz[0], "/"); 3441a7b590b3SmrgEOF 3442943345d3Smrg 3443a7b590b3Smrg cat <<"EOF" 3444a7b590b3Smrg /* stop here, and copy so we don't have to do this twice */ 3445a7b590b3Smrg tmp_pathspec = xstrdup (newargz[0]); 3446943345d3Smrg 3447a7b590b3Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 3448a7b590b3Smrg strcat (newargz[0], actual_cwrapper_name); 3449943345d3Smrg 3450a7b590b3Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 3451a7b590b3Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 3452a7b590b3Smrg XFREE (tmp_pathspec); 3453a7b590b3Smrg tmp_pathspec = NULL; 3454a7b590b3SmrgEOF 3455943345d3Smrg 3456a7b590b3Smrg case $host_os in 3457a7b590b3Smrg mingw*) 3458a7b590b3Smrg cat <<"EOF" 3459a7b590b3Smrg { 3460a7b590b3Smrg char* p; 3461a7b590b3Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 3462a7b590b3Smrg { 3463a7b590b3Smrg *p = '/'; 3464a7b590b3Smrg } 3465a7b590b3Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 3466a7b590b3Smrg { 3467a7b590b3Smrg *p = '/'; 3468a7b590b3Smrg } 3469a7b590b3Smrg } 3470a7b590b3SmrgEOF 3471a7b590b3Smrg ;; 3472a7b590b3Smrg esac 3473943345d3Smrg 3474a7b590b3Smrg cat <<"EOF" 3475a7b590b3Smrg XFREE (target_name); 3476a7b590b3Smrg XFREE (actual_cwrapper_path); 3477a7b590b3Smrg XFREE (actual_cwrapper_name); 3478943345d3Smrg 3479a7b590b3Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 3480a7b590b3Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 3481a7b590b3Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 3482a7b590b3Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 3483943345d3Smrg 3484a7b590b3Smrg newargc=0; 3485a7b590b3Smrg for (i = 1; i < argc; i++) 3486a7b590b3Smrg { 3487a7b590b3Smrg if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) 3488a7b590b3Smrg { 3489a7b590b3Smrg if (argv[i][env_set_opt_len] == '=') 3490a7b590b3Smrg { 3491a7b590b3Smrg const char *p = argv[i] + env_set_opt_len + 1; 3492a7b590b3Smrg lt_opt_process_env_set (p); 3493a7b590b3Smrg } 3494a7b590b3Smrg else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) 3495a7b590b3Smrg { 3496a7b590b3Smrg lt_opt_process_env_set (argv[++i]); /* don't copy */ 3497a7b590b3Smrg } 3498a7b590b3Smrg else 3499a7b590b3Smrg lt_fatal ("%s missing required argument", env_set_opt); 3500a7b590b3Smrg continue; 3501a7b590b3Smrg } 3502a7b590b3Smrg if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) 3503a7b590b3Smrg { 3504a7b590b3Smrg if (argv[i][env_prepend_opt_len] == '=') 3505a7b590b3Smrg { 3506a7b590b3Smrg const char *p = argv[i] + env_prepend_opt_len + 1; 3507a7b590b3Smrg lt_opt_process_env_prepend (p); 3508a7b590b3Smrg } 3509a7b590b3Smrg else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) 3510a7b590b3Smrg { 3511a7b590b3Smrg lt_opt_process_env_prepend (argv[++i]); /* don't copy */ 3512a7b590b3Smrg } 3513a7b590b3Smrg else 3514a7b590b3Smrg lt_fatal ("%s missing required argument", env_prepend_opt); 3515a7b590b3Smrg continue; 3516a7b590b3Smrg } 3517a7b590b3Smrg if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) 3518a7b590b3Smrg { 3519a7b590b3Smrg if (argv[i][env_append_opt_len] == '=') 3520a7b590b3Smrg { 3521a7b590b3Smrg const char *p = argv[i] + env_append_opt_len + 1; 3522a7b590b3Smrg lt_opt_process_env_append (p); 3523a7b590b3Smrg } 3524a7b590b3Smrg else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) 3525a7b590b3Smrg { 3526a7b590b3Smrg lt_opt_process_env_append (argv[++i]); /* don't copy */ 3527a7b590b3Smrg } 3528a7b590b3Smrg else 3529a7b590b3Smrg lt_fatal ("%s missing required argument", env_append_opt); 3530a7b590b3Smrg continue; 3531a7b590b3Smrg } 3532a7b590b3Smrg if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) 3533a7b590b3Smrg { 3534a7b590b3Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 3535a7b590b3Smrg namespace, but it is not one of the ones we know about and 3536a7b590b3Smrg have already dealt with, above (inluding dump-script), then 3537a7b590b3Smrg report an error. Otherwise, targets might begin to believe 3538a7b590b3Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 3539a7b590b3Smrg namespace. The first time any user complains about this, we'll 3540a7b590b3Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 3541a7b590b3Smrg or a configure.ac-settable value. 3542a7b590b3Smrg */ 3543a7b590b3Smrg lt_fatal ("Unrecognized option in %s namespace: '%s'", 3544a7b590b3Smrg ltwrapper_option_prefix, argv[i]); 3545a7b590b3Smrg } 3546a7b590b3Smrg /* otherwise ... */ 3547a7b590b3Smrg newargz[++newargc] = xstrdup (argv[i]); 3548a7b590b3Smrg } 3549a7b590b3Smrg newargz[++newargc] = NULL; 3550943345d3Smrg 3551a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>"))); 3552a7b590b3Smrg for (i = 0; i < newargc; i++) 3553a7b590b3Smrg { 3554a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>"))); 3555a7b590b3Smrg } 3556943345d3Smrg 3557a7b590b3SmrgEOF 3558943345d3Smrg 3559a7b590b3Smrg case $host_os in 3560a7b590b3Smrg mingw*) 3561a7b590b3Smrg cat <<"EOF" 3562a7b590b3Smrg /* execv doesn't actually work on mingw as expected on unix */ 3563a7b590b3Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 3564a7b590b3Smrg if (rval == -1) 3565a7b590b3Smrg { 3566a7b590b3Smrg /* failed to start process */ 3567a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); 3568a7b590b3Smrg return 127; 3569a7b590b3Smrg } 3570a7b590b3Smrg return rval; 3571a7b590b3SmrgEOF 3572a7b590b3Smrg ;; 3573a7b590b3Smrg *) 3574a7b590b3Smrg cat <<"EOF" 3575a7b590b3Smrg execv (lt_argv_zero, newargz); 3576a7b590b3Smrg return rval; /* =127, but avoids unused variable warning */ 3577a7b590b3SmrgEOF 3578a7b590b3Smrg ;; 3579a7b590b3Smrg esac 3580943345d3Smrg 3581a7b590b3Smrg cat <<"EOF" 3582a7b590b3Smrg} 3583943345d3Smrg 3584a7b590b3Smrgvoid * 3585a7b590b3Smrgxmalloc (size_t num) 3586a7b590b3Smrg{ 3587a7b590b3Smrg void *p = (void *) malloc (num); 3588a7b590b3Smrg if (!p) 3589a7b590b3Smrg lt_fatal ("Memory exhausted"); 3590943345d3Smrg 3591a7b590b3Smrg return p; 3592a7b590b3Smrg} 3593943345d3Smrg 3594a7b590b3Smrgchar * 3595a7b590b3Smrgxstrdup (const char *string) 3596a7b590b3Smrg{ 3597a7b590b3Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 3598a7b590b3Smrg string) : NULL; 3599a7b590b3Smrg} 3600943345d3Smrg 3601a7b590b3Smrgconst char * 3602a7b590b3Smrgbase_name (const char *name) 3603a7b590b3Smrg{ 3604a7b590b3Smrg const char *base; 3605943345d3Smrg 3606a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3607a7b590b3Smrg /* Skip over the disk name in MSDOS pathnames. */ 3608a7b590b3Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 3609a7b590b3Smrg name += 2; 3610a7b590b3Smrg#endif 3611943345d3Smrg 3612a7b590b3Smrg for (base = name; *name; name++) 3613a7b590b3Smrg if (IS_DIR_SEPARATOR (*name)) 3614a7b590b3Smrg base = name + 1; 3615a7b590b3Smrg return base; 3616a7b590b3Smrg} 3617943345d3Smrg 3618a7b590b3Smrgint 3619a7b590b3Smrgcheck_executable (const char *path) 3620a7b590b3Smrg{ 3621a7b590b3Smrg struct stat st; 3622943345d3Smrg 3623a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", 3624a7b590b3Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 3625a7b590b3Smrg if ((!path) || (!*path)) 3626a7b590b3Smrg return 0; 3627943345d3Smrg 3628a7b590b3Smrg if ((stat (path, &st) >= 0) 3629a7b590b3Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 3630a7b590b3Smrg return 1; 3631a7b590b3Smrg else 3632a7b590b3Smrg return 0; 3633a7b590b3Smrg} 3634943345d3Smrg 3635a7b590b3Smrgint 3636a7b590b3Smrgmake_executable (const char *path) 3637a7b590b3Smrg{ 3638a7b590b3Smrg int rval = 0; 3639a7b590b3Smrg struct stat st; 3640943345d3Smrg 3641a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", 3642a7b590b3Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 3643a7b590b3Smrg if ((!path) || (!*path)) 3644a7b590b3Smrg return 0; 3645943345d3Smrg 3646a7b590b3Smrg if (stat (path, &st) >= 0) 3647a7b590b3Smrg { 3648a7b590b3Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 3649a7b590b3Smrg } 3650a7b590b3Smrg return rval; 3651a7b590b3Smrg} 3652943345d3Smrg 3653a7b590b3Smrg/* Searches for the full path of the wrapper. Returns 3654a7b590b3Smrg newly allocated full path name if found, NULL otherwise 3655a7b590b3Smrg Does not chase symlinks, even on platforms that support them. 3656a7b590b3Smrg*/ 3657a7b590b3Smrgchar * 3658a7b590b3Smrgfind_executable (const char *wrapper) 3659a7b590b3Smrg{ 3660a7b590b3Smrg int has_slash = 0; 3661a7b590b3Smrg const char *p; 3662a7b590b3Smrg const char *p_next; 3663a7b590b3Smrg /* static buffer for getcwd */ 3664a7b590b3Smrg char tmp[LT_PATHMAX + 1]; 3665a7b590b3Smrg int tmp_len; 3666a7b590b3Smrg char *concat_name; 3667943345d3Smrg 3668a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", 3669a7b590b3Smrg wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 3670943345d3Smrg 3671a7b590b3Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 3672a7b590b3Smrg return NULL; 3673943345d3Smrg 3674a7b590b3Smrg /* Absolute path? */ 3675a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3676a7b590b3Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 3677a7b590b3Smrg { 3678a7b590b3Smrg concat_name = xstrdup (wrapper); 3679a7b590b3Smrg if (check_executable (concat_name)) 3680a7b590b3Smrg return concat_name; 3681a7b590b3Smrg XFREE (concat_name); 3682a7b590b3Smrg } 3683a7b590b3Smrg else 3684a7b590b3Smrg { 3685a7b590b3Smrg#endif 3686a7b590b3Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 3687a7b590b3Smrg { 3688a7b590b3Smrg concat_name = xstrdup (wrapper); 3689a7b590b3Smrg if (check_executable (concat_name)) 3690a7b590b3Smrg return concat_name; 3691a7b590b3Smrg XFREE (concat_name); 3692a7b590b3Smrg } 3693a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3694a7b590b3Smrg } 3695a7b590b3Smrg#endif 3696943345d3Smrg 3697a7b590b3Smrg for (p = wrapper; *p; p++) 3698a7b590b3Smrg if (*p == '/') 3699a7b590b3Smrg { 3700a7b590b3Smrg has_slash = 1; 3701a7b590b3Smrg break; 3702a7b590b3Smrg } 3703a7b590b3Smrg if (!has_slash) 3704a7b590b3Smrg { 3705a7b590b3Smrg /* no slashes; search PATH */ 3706a7b590b3Smrg const char *path = getenv ("PATH"); 3707a7b590b3Smrg if (path != NULL) 3708a7b590b3Smrg { 3709a7b590b3Smrg for (p = path; *p; p = p_next) 3710a7b590b3Smrg { 3711a7b590b3Smrg const char *q; 3712a7b590b3Smrg size_t p_len; 3713a7b590b3Smrg for (q = p; *q; q++) 3714a7b590b3Smrg if (IS_PATH_SEPARATOR (*q)) 3715a7b590b3Smrg break; 3716a7b590b3Smrg p_len = q - p; 3717a7b590b3Smrg p_next = (*q == '\0' ? q : q + 1); 3718a7b590b3Smrg if (p_len == 0) 3719a7b590b3Smrg { 3720a7b590b3Smrg /* empty path: current directory */ 3721a7b590b3Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3722a7b590b3Smrg lt_fatal ("getcwd failed"); 3723a7b590b3Smrg tmp_len = strlen (tmp); 3724a7b590b3Smrg concat_name = 3725a7b590b3Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3726a7b590b3Smrg memcpy (concat_name, tmp, tmp_len); 3727a7b590b3Smrg concat_name[tmp_len] = '/'; 3728a7b590b3Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3729a7b590b3Smrg } 3730a7b590b3Smrg else 3731a7b590b3Smrg { 3732a7b590b3Smrg concat_name = 3733a7b590b3Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 3734a7b590b3Smrg memcpy (concat_name, p, p_len); 3735a7b590b3Smrg concat_name[p_len] = '/'; 3736a7b590b3Smrg strcpy (concat_name + p_len + 1, wrapper); 3737a7b590b3Smrg } 3738a7b590b3Smrg if (check_executable (concat_name)) 3739a7b590b3Smrg return concat_name; 3740a7b590b3Smrg XFREE (concat_name); 3741a7b590b3Smrg } 3742a7b590b3Smrg } 3743a7b590b3Smrg /* not found in PATH; assume curdir */ 3744a7b590b3Smrg } 3745a7b590b3Smrg /* Relative path | not found in path: prepend cwd */ 3746a7b590b3Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3747a7b590b3Smrg lt_fatal ("getcwd failed"); 3748a7b590b3Smrg tmp_len = strlen (tmp); 3749a7b590b3Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3750a7b590b3Smrg memcpy (concat_name, tmp, tmp_len); 3751a7b590b3Smrg concat_name[tmp_len] = '/'; 3752a7b590b3Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3753943345d3Smrg 3754a7b590b3Smrg if (check_executable (concat_name)) 3755a7b590b3Smrg return concat_name; 3756a7b590b3Smrg XFREE (concat_name); 3757a7b590b3Smrg return NULL; 3758a7b590b3Smrg} 3759943345d3Smrg 3760a7b590b3Smrgchar * 3761a7b590b3Smrgchase_symlinks (const char *pathspec) 3762a7b590b3Smrg{ 3763a7b590b3Smrg#ifndef S_ISLNK 3764a7b590b3Smrg return xstrdup (pathspec); 3765a7b590b3Smrg#else 3766a7b590b3Smrg char buf[LT_PATHMAX]; 3767a7b590b3Smrg struct stat s; 3768a7b590b3Smrg char *tmp_pathspec = xstrdup (pathspec); 3769a7b590b3Smrg char *p; 3770a7b590b3Smrg int has_symlinks = 0; 3771a7b590b3Smrg while (strlen (tmp_pathspec) && !has_symlinks) 3772a7b590b3Smrg { 3773a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", 3774a7b590b3Smrg tmp_pathspec)); 3775a7b590b3Smrg if (lstat (tmp_pathspec, &s) == 0) 3776a7b590b3Smrg { 3777a7b590b3Smrg if (S_ISLNK (s.st_mode) != 0) 3778a7b590b3Smrg { 3779a7b590b3Smrg has_symlinks = 1; 3780a7b590b3Smrg break; 3781a7b590b3Smrg } 3782943345d3Smrg 3783a7b590b3Smrg /* search backwards for last DIR_SEPARATOR */ 3784a7b590b3Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 3785a7b590b3Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 3786a7b590b3Smrg p--; 3787a7b590b3Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 3788a7b590b3Smrg { 3789a7b590b3Smrg /* no more DIR_SEPARATORS left */ 3790a7b590b3Smrg break; 3791a7b590b3Smrg } 3792a7b590b3Smrg *p = '\0'; 3793a7b590b3Smrg } 3794a7b590b3Smrg else 3795a7b590b3Smrg { 3796a7b590b3Smrg char *errstr = strerror (errno); 3797a7b590b3Smrg lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); 3798a7b590b3Smrg } 3799a7b590b3Smrg } 3800a7b590b3Smrg XFREE (tmp_pathspec); 3801943345d3Smrg 3802a7b590b3Smrg if (!has_symlinks) 3803a7b590b3Smrg { 3804a7b590b3Smrg return xstrdup (pathspec); 3805a7b590b3Smrg } 3806943345d3Smrg 3807a7b590b3Smrg tmp_pathspec = realpath (pathspec, buf); 3808a7b590b3Smrg if (tmp_pathspec == 0) 3809a7b590b3Smrg { 3810a7b590b3Smrg lt_fatal ("Could not follow symlinks for %s", pathspec); 3811a7b590b3Smrg } 3812a7b590b3Smrg return xstrdup (tmp_pathspec); 3813a7b590b3Smrg#endif 3814a7b590b3Smrg} 3815943345d3Smrg 3816a7b590b3Smrgchar * 3817a7b590b3Smrgstrendzap (char *str, const char *pat) 3818a7b590b3Smrg{ 3819a7b590b3Smrg size_t len, patlen; 3820943345d3Smrg 3821a7b590b3Smrg assert (str != NULL); 3822a7b590b3Smrg assert (pat != NULL); 3823943345d3Smrg 3824a7b590b3Smrg len = strlen (str); 3825a7b590b3Smrg patlen = strlen (pat); 3826943345d3Smrg 3827a7b590b3Smrg if (patlen <= len) 3828a7b590b3Smrg { 3829a7b590b3Smrg str += len - patlen; 3830a7b590b3Smrg if (strcmp (str, pat) == 0) 3831a7b590b3Smrg *str = '\0'; 3832a7b590b3Smrg } 3833a7b590b3Smrg return str; 3834a7b590b3Smrg} 3835943345d3Smrg 3836a7b590b3Smrgstatic void 3837a7b590b3Smrglt_error_core (int exit_status, const char *mode, 3838a7b590b3Smrg const char *message, va_list ap) 3839a7b590b3Smrg{ 3840a7b590b3Smrg fprintf (stderr, "%s: %s: ", program_name, mode); 3841a7b590b3Smrg vfprintf (stderr, message, ap); 3842a7b590b3Smrg fprintf (stderr, ".\n"); 3843943345d3Smrg 3844a7b590b3Smrg if (exit_status >= 0) 3845a7b590b3Smrg exit (exit_status); 3846a7b590b3Smrg} 3847943345d3Smrg 3848a7b590b3Smrgvoid 3849a7b590b3Smrglt_fatal (const char *message, ...) 3850a7b590b3Smrg{ 3851a7b590b3Smrg va_list ap; 3852a7b590b3Smrg va_start (ap, message); 3853a7b590b3Smrg lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 3854a7b590b3Smrg va_end (ap); 3855a7b590b3Smrg} 3856943345d3Smrg 3857a7b590b3Smrgvoid 3858a7b590b3Smrglt_setenv (const char *name, const char *value) 3859a7b590b3Smrg{ 3860a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", 3861a7b590b3Smrg (name ? name : "<NULL>"), 3862a7b590b3Smrg (value ? value : "<NULL>"))); 3863a7b590b3Smrg { 3864a7b590b3Smrg#ifdef HAVE_SETENV 3865a7b590b3Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 3866a7b590b3Smrg char *str = xstrdup (value); 3867a7b590b3Smrg setenv (name, str, 1); 3868a7b590b3Smrg#else 3869a7b590b3Smrg int len = strlen (name) + 1 + strlen (value) + 1; 3870a7b590b3Smrg char *str = XMALLOC (char, len); 3871a7b590b3Smrg sprintf (str, "%s=%s", name, value); 3872a7b590b3Smrg if (putenv (str) != EXIT_SUCCESS) 3873a7b590b3Smrg { 3874a7b590b3Smrg XFREE (str); 3875a7b590b3Smrg } 3876a7b590b3Smrg#endif 3877a7b590b3Smrg } 3878a7b590b3Smrg} 3879943345d3Smrg 3880a7b590b3Smrgchar * 3881a7b590b3Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 3882a7b590b3Smrg{ 3883a7b590b3Smrg char *new_value; 3884a7b590b3Smrg if (orig_value && *orig_value) 3885a7b590b3Smrg { 3886a7b590b3Smrg int orig_value_len = strlen (orig_value); 3887a7b590b3Smrg int add_len = strlen (add); 3888a7b590b3Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 3889a7b590b3Smrg if (to_end) 3890a7b590b3Smrg { 3891a7b590b3Smrg strcpy (new_value, orig_value); 3892a7b590b3Smrg strcpy (new_value + orig_value_len, add); 3893a7b590b3Smrg } 3894a7b590b3Smrg else 3895a7b590b3Smrg { 3896a7b590b3Smrg strcpy (new_value, add); 3897a7b590b3Smrg strcpy (new_value + add_len, orig_value); 3898a7b590b3Smrg } 3899a7b590b3Smrg } 3900a7b590b3Smrg else 3901a7b590b3Smrg { 3902a7b590b3Smrg new_value = xstrdup (add); 3903a7b590b3Smrg } 3904a7b590b3Smrg return new_value; 3905a7b590b3Smrg} 3906943345d3Smrg 3907a7b590b3Smrgint 3908a7b590b3Smrglt_split_name_value (const char *arg, char** name, char** value) 3909a7b590b3Smrg{ 3910a7b590b3Smrg const char *p; 3911a7b590b3Smrg int len; 3912a7b590b3Smrg if (!arg || !*arg) 3913a7b590b3Smrg return 1; 3914943345d3Smrg 3915a7b590b3Smrg p = strchr (arg, (int)'='); 3916943345d3Smrg 3917a7b590b3Smrg if (!p) 3918a7b590b3Smrg return 1; 3919943345d3Smrg 3920a7b590b3Smrg *value = xstrdup (++p); 3921943345d3Smrg 3922a7b590b3Smrg len = strlen (arg) - strlen (*value); 3923a7b590b3Smrg *name = XMALLOC (char, len); 3924a7b590b3Smrg strncpy (*name, arg, len-1); 3925a7b590b3Smrg (*name)[len - 1] = '\0'; 3926943345d3Smrg 3927a7b590b3Smrg return 0; 3928a7b590b3Smrg} 3929943345d3Smrg 3930a7b590b3Smrgvoid 3931a7b590b3Smrglt_opt_process_env_set (const char *arg) 3932a7b590b3Smrg{ 3933a7b590b3Smrg char *name = NULL; 3934a7b590b3Smrg char *value = NULL; 3935943345d3Smrg 3936a7b590b3Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3937a7b590b3Smrg { 3938a7b590b3Smrg XFREE (name); 3939a7b590b3Smrg XFREE (value); 3940a7b590b3Smrg lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); 3941a7b590b3Smrg } 3942943345d3Smrg 3943a7b590b3Smrg lt_setenv (name, value); 3944a7b590b3Smrg XFREE (name); 3945a7b590b3Smrg XFREE (value); 3946a7b590b3Smrg} 3947943345d3Smrg 3948a7b590b3Smrgvoid 3949a7b590b3Smrglt_opt_process_env_prepend (const char *arg) 3950a7b590b3Smrg{ 3951a7b590b3Smrg char *name = NULL; 3952a7b590b3Smrg char *value = NULL; 3953a7b590b3Smrg char *new_value = NULL; 3954943345d3Smrg 3955a7b590b3Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3956a7b590b3Smrg { 3957a7b590b3Smrg XFREE (name); 3958a7b590b3Smrg XFREE (value); 3959a7b590b3Smrg lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); 3960a7b590b3Smrg } 3961943345d3Smrg 3962a7b590b3Smrg new_value = lt_extend_str (getenv (name), value, 0); 3963a7b590b3Smrg lt_setenv (name, new_value); 3964a7b590b3Smrg XFREE (new_value); 3965a7b590b3Smrg XFREE (name); 3966a7b590b3Smrg XFREE (value); 3967a7b590b3Smrg} 3968943345d3Smrg 3969a7b590b3Smrgvoid 3970a7b590b3Smrglt_opt_process_env_append (const char *arg) 3971a7b590b3Smrg{ 3972a7b590b3Smrg char *name = NULL; 3973a7b590b3Smrg char *value = NULL; 3974a7b590b3Smrg char *new_value = NULL; 3975943345d3Smrg 3976a7b590b3Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3977a7b590b3Smrg { 3978a7b590b3Smrg XFREE (name); 3979a7b590b3Smrg XFREE (value); 3980a7b590b3Smrg lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); 3981a7b590b3Smrg } 3982943345d3Smrg 3983a7b590b3Smrg new_value = lt_extend_str (getenv (name), value, 1); 3984a7b590b3Smrg lt_setenv (name, new_value); 3985a7b590b3Smrg XFREE (new_value); 3986a7b590b3Smrg XFREE (name); 3987a7b590b3Smrg XFREE (value); 3988a7b590b3Smrg} 3989943345d3Smrg 3990a7b590b3Smrgvoid 3991a7b590b3Smrglt_update_exe_path (const char *name, const char *value) 3992a7b590b3Smrg{ 3993a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 3994a7b590b3Smrg (name ? name : "<NULL>"), 3995a7b590b3Smrg (value ? value : "<NULL>"))); 3996943345d3Smrg 3997a7b590b3Smrg if (name && *name && value && *value) 3998a7b590b3Smrg { 3999a7b590b3Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4000a7b590b3Smrg /* some systems can't cope with a ':'-terminated path #' */ 4001a7b590b3Smrg int len = strlen (new_value); 4002a7b590b3Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4003a7b590b3Smrg { 4004a7b590b3Smrg new_value[len-1] = '\0'; 4005a7b590b3Smrg } 4006a7b590b3Smrg lt_setenv (name, new_value); 4007a7b590b3Smrg XFREE (new_value); 4008a7b590b3Smrg } 4009a7b590b3Smrg} 4010943345d3Smrg 4011a7b590b3Smrgvoid 4012a7b590b3Smrglt_update_lib_path (const char *name, const char *value) 4013a7b590b3Smrg{ 4014a7b590b3Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4015a7b590b3Smrg (name ? name : "<NULL>"), 4016a7b590b3Smrg (value ? value : "<NULL>"))); 4017943345d3Smrg 4018a7b590b3Smrg if (name && *name && value && *value) 4019a7b590b3Smrg { 4020a7b590b3Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4021a7b590b3Smrg lt_setenv (name, new_value); 4022a7b590b3Smrg XFREE (new_value); 4023a7b590b3Smrg } 4024a7b590b3Smrg} 4025943345d3Smrg 4026943345d3Smrg 4027a7b590b3SmrgEOF 4028a7b590b3Smrg} 4029a7b590b3Smrg# end: func_emit_cwrapperexe_src 4030943345d3Smrg 4031a7b590b3Smrg# func_mode_link arg... 4032a7b590b3Smrgfunc_mode_link () 4033a7b590b3Smrg{ 4034a7b590b3Smrg $opt_debug 4035a7b590b3Smrg case $host in 4036a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4037a7b590b3Smrg # It is impossible to link a dll without this setting, and 4038a7b590b3Smrg # we shouldn't force the makefile maintainer to figure out 4039a7b590b3Smrg # which system we are compiling for in order to pass an extra 4040a7b590b3Smrg # flag for every libtool invocation. 4041a7b590b3Smrg # allow_undefined=no 4042943345d3Smrg 4043a7b590b3Smrg # FIXME: Unfortunately, there are problems with the above when trying 4044a7b590b3Smrg # to make a dll which has undefined symbols, in which case not 4045a7b590b3Smrg # even a static library is built. For now, we need to specify 4046a7b590b3Smrg # -no-undefined on the libtool link line when we can be certain 4047a7b590b3Smrg # that all symbols are satisfied, otherwise we get a static library. 4048a7b590b3Smrg allow_undefined=yes 4049a7b590b3Smrg ;; 4050a7b590b3Smrg *) 4051a7b590b3Smrg allow_undefined=yes 4052a7b590b3Smrg ;; 4053a7b590b3Smrg esac 4054a7b590b3Smrg libtool_args=$nonopt 4055a7b590b3Smrg base_compile="$nonopt $@" 4056a7b590b3Smrg compile_command=$nonopt 4057a7b590b3Smrg finalize_command=$nonopt 4058943345d3Smrg 4059a7b590b3Smrg compile_rpath= 4060a7b590b3Smrg finalize_rpath= 4061a7b590b3Smrg compile_shlibpath= 4062a7b590b3Smrg finalize_shlibpath= 4063a7b590b3Smrg convenience= 4064a7b590b3Smrg old_convenience= 4065a7b590b3Smrg deplibs= 4066a7b590b3Smrg old_deplibs= 4067a7b590b3Smrg compiler_flags= 4068a7b590b3Smrg linker_flags= 4069a7b590b3Smrg dllsearchpath= 4070a7b590b3Smrg lib_search_path=`pwd` 4071a7b590b3Smrg inst_prefix_dir= 4072a7b590b3Smrg new_inherited_linker_flags= 4073943345d3Smrg 4074a7b590b3Smrg avoid_version=no 4075a7b590b3Smrg dlfiles= 4076a7b590b3Smrg dlprefiles= 4077a7b590b3Smrg dlself=no 4078a7b590b3Smrg export_dynamic=no 4079a7b590b3Smrg export_symbols= 4080a7b590b3Smrg export_symbols_regex= 4081a7b590b3Smrg generated= 4082a7b590b3Smrg libobjs= 4083a7b590b3Smrg ltlibs= 4084a7b590b3Smrg module=no 4085a7b590b3Smrg no_install=no 4086a7b590b3Smrg objs= 4087a7b590b3Smrg non_pic_objects= 4088a7b590b3Smrg precious_files_regex= 4089a7b590b3Smrg prefer_static_libs=no 4090a7b590b3Smrg preload=no 4091a7b590b3Smrg prev= 4092a7b590b3Smrg prevarg= 4093a7b590b3Smrg release= 4094a7b590b3Smrg rpath= 4095a7b590b3Smrg xrpath= 4096a7b590b3Smrg perm_rpath= 4097a7b590b3Smrg temp_rpath= 4098a7b590b3Smrg thread_safe=no 4099a7b590b3Smrg vinfo= 4100a7b590b3Smrg vinfo_number=no 4101a7b590b3Smrg weak_libs= 4102a7b590b3Smrg single_module="${wl}-single_module" 4103a7b590b3Smrg func_infer_tag $base_compile 4104a7b590b3Smrg 4105a7b590b3Smrg # We need to know -static, to get the right output filenames. 4106a7b590b3Smrg for arg 4107a7b590b3Smrg do 4108a7b590b3Smrg case $arg in 4109a7b590b3Smrg -shared) 4110a7b590b3Smrg test "$build_libtool_libs" != yes && \ 4111a7b590b3Smrg func_fatal_configuration "can not build a shared library" 4112a7b590b3Smrg build_old_libs=no 4113a7b590b3Smrg break 4114a7b590b3Smrg ;; 4115a7b590b3Smrg -all-static | -static | -static-libtool-libs) 4116a7b590b3Smrg case $arg in 4117a7b590b3Smrg -all-static) 4118a7b590b3Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 4119a7b590b3Smrg func_warning "complete static linking is impossible in this configuration" 4120a7b590b3Smrg fi 4121a7b590b3Smrg if test -n "$link_static_flag"; then 4122a7b590b3Smrg dlopen_self=$dlopen_self_static 4123a7b590b3Smrg fi 4124a7b590b3Smrg prefer_static_libs=yes 4125a7b590b3Smrg ;; 4126a7b590b3Smrg -static) 4127a7b590b3Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4128a7b590b3Smrg dlopen_self=$dlopen_self_static 4129a7b590b3Smrg fi 4130a7b590b3Smrg prefer_static_libs=built 4131a7b590b3Smrg ;; 4132a7b590b3Smrg -static-libtool-libs) 4133a7b590b3Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4134a7b590b3Smrg dlopen_self=$dlopen_self_static 4135943345d3Smrg fi 4136a7b590b3Smrg prefer_static_libs=yes 4137a7b590b3Smrg ;; 4138a7b590b3Smrg esac 4139a7b590b3Smrg build_libtool_libs=no 4140a7b590b3Smrg build_old_libs=yes 4141a7b590b3Smrg break 4142a7b590b3Smrg ;; 4143a7b590b3Smrg esac 4144a7b590b3Smrg done 4145943345d3Smrg 4146a7b590b3Smrg # See if our shared archives depend on static archives. 4147a7b590b3Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 4148943345d3Smrg 4149a7b590b3Smrg # Go through the arguments, transforming them on the way. 4150a7b590b3Smrg while test "$#" -gt 0; do 4151a7b590b3Smrg arg="$1" 4152a7b590b3Smrg shift 4153a7b590b3Smrg func_quote_for_eval "$arg" 4154a7b590b3Smrg qarg=$func_quote_for_eval_unquoted_result 4155a7b590b3Smrg func_append libtool_args " $func_quote_for_eval_result" 4156943345d3Smrg 4157a7b590b3Smrg # If the previous option needs an argument, assign it. 4158a7b590b3Smrg if test -n "$prev"; then 4159a7b590b3Smrg case $prev in 4160a7b590b3Smrg output) 4161a7b590b3Smrg func_append compile_command " @OUTPUT@" 4162a7b590b3Smrg func_append finalize_command " @OUTPUT@" 4163a7b590b3Smrg ;; 4164a7b590b3Smrg esac 4165943345d3Smrg 4166a7b590b3Smrg case $prev in 4167a7b590b3Smrg dlfiles|dlprefiles) 4168a7b590b3Smrg if test "$preload" = no; then 4169a7b590b3Smrg # Add the symbol object into the linking commands. 4170a7b590b3Smrg func_append compile_command " @SYMFILE@" 4171a7b590b3Smrg func_append finalize_command " @SYMFILE@" 4172a7b590b3Smrg preload=yes 4173a7b590b3Smrg fi 4174a7b590b3Smrg case $arg in 4175a7b590b3Smrg *.la | *.lo) ;; # We handle these cases below. 4176a7b590b3Smrg force) 4177a7b590b3Smrg if test "$dlself" = no; then 4178a7b590b3Smrg dlself=needless 4179a7b590b3Smrg export_dynamic=yes 4180a7b590b3Smrg fi 4181a7b590b3Smrg prev= 4182a7b590b3Smrg continue 4183a7b590b3Smrg ;; 4184a7b590b3Smrg self) 4185a7b590b3Smrg if test "$prev" = dlprefiles; then 4186a7b590b3Smrg dlself=yes 4187a7b590b3Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 4188a7b590b3Smrg dlself=yes 4189943345d3Smrg else 4190a7b590b3Smrg dlself=needless 4191a7b590b3Smrg export_dynamic=yes 4192943345d3Smrg fi 4193a7b590b3Smrg prev= 4194a7b590b3Smrg continue 4195a7b590b3Smrg ;; 4196a7b590b3Smrg *) 4197a7b590b3Smrg if test "$prev" = dlfiles; then 4198a7b590b3Smrg dlfiles="$dlfiles $arg" 4199943345d3Smrg else 4200a7b590b3Smrg dlprefiles="$dlprefiles $arg" 4201943345d3Smrg fi 4202a7b590b3Smrg prev= 4203a7b590b3Smrg continue 4204a7b590b3Smrg ;; 4205a7b590b3Smrg esac 4206a7b590b3Smrg ;; 4207a7b590b3Smrg expsyms) 4208a7b590b3Smrg export_symbols="$arg" 4209a7b590b3Smrg test -f "$arg" \ 4210a7b590b3Smrg || func_fatal_error "symbol file \`$arg' does not exist" 4211a7b590b3Smrg prev= 4212a7b590b3Smrg continue 4213a7b590b3Smrg ;; 4214a7b590b3Smrg expsyms_regex) 4215a7b590b3Smrg export_symbols_regex="$arg" 4216a7b590b3Smrg prev= 4217a7b590b3Smrg continue 4218a7b590b3Smrg ;; 4219a7b590b3Smrg framework) 4220943345d3Smrg case $host in 4221a7b590b3Smrg *-*-darwin*) 4222a7b590b3Smrg case "$deplibs " in 4223a7b590b3Smrg *" $qarg.ltframework "*) ;; 4224a7b590b3Smrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 4225a7b590b3Smrg ;; 4226a7b590b3Smrg esac 4227a7b590b3Smrg ;; 4228943345d3Smrg esac 4229a7b590b3Smrg prev= 4230a7b590b3Smrg continue 4231943345d3Smrg ;; 4232a7b590b3Smrg inst_prefix) 4233a7b590b3Smrg inst_prefix_dir="$arg" 4234a7b590b3Smrg prev= 4235a7b590b3Smrg continue 4236943345d3Smrg ;; 4237a7b590b3Smrg objectlist) 4238a7b590b3Smrg if test -f "$arg"; then 4239a7b590b3Smrg save_arg=$arg 4240a7b590b3Smrg moreargs= 4241a7b590b3Smrg for fil in `cat "$save_arg"` 4242a7b590b3Smrg do 4243a7b590b3Smrg# moreargs="$moreargs $fil" 4244a7b590b3Smrg arg=$fil 4245a7b590b3Smrg # A libtool-controlled object. 4246943345d3Smrg 4247a7b590b3Smrg # Check to see that this really is a libtool object. 4248a7b590b3Smrg if func_lalib_unsafe_p "$arg"; then 4249a7b590b3Smrg pic_object= 4250a7b590b3Smrg non_pic_object= 4251943345d3Smrg 4252a7b590b3Smrg # Read the .lo file 4253a7b590b3Smrg func_source "$arg" 4254943345d3Smrg 4255a7b590b3Smrg if test -z "$pic_object" || 4256a7b590b3Smrg test -z "$non_pic_object" || 4257a7b590b3Smrg test "$pic_object" = none && 4258a7b590b3Smrg test "$non_pic_object" = none; then 4259a7b590b3Smrg func_fatal_error "cannot find name of object for \`$arg'" 4260a7b590b3Smrg fi 4261943345d3Smrg 4262a7b590b3Smrg # Extract subdirectory from the argument. 4263a7b590b3Smrg func_dirname "$arg" "/" "" 4264a7b590b3Smrg xdir="$func_dirname_result" 4265943345d3Smrg 4266a7b590b3Smrg if test "$pic_object" != none; then 4267a7b590b3Smrg # Prepend the subdirectory the object is found in. 4268a7b590b3Smrg pic_object="$xdir$pic_object" 4269943345d3Smrg 4270a7b590b3Smrg if test "$prev" = dlfiles; then 4271a7b590b3Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4272a7b590b3Smrg dlfiles="$dlfiles $pic_object" 4273a7b590b3Smrg prev= 4274a7b590b3Smrg continue 4275a7b590b3Smrg else 4276a7b590b3Smrg # If libtool objects are unsupported, then we need to preload. 4277a7b590b3Smrg prev=dlprefiles 4278a7b590b3Smrg fi 4279a7b590b3Smrg fi 4280943345d3Smrg 4281a7b590b3Smrg # CHECK ME: I think I busted this. -Ossama 4282a7b590b3Smrg if test "$prev" = dlprefiles; then 4283a7b590b3Smrg # Preload the old-style object. 4284a7b590b3Smrg dlprefiles="$dlprefiles $pic_object" 4285a7b590b3Smrg prev= 4286a7b590b3Smrg fi 4287943345d3Smrg 4288a7b590b3Smrg # A PIC object. 4289a7b590b3Smrg func_append libobjs " $pic_object" 4290a7b590b3Smrg arg="$pic_object" 4291a7b590b3Smrg fi 4292943345d3Smrg 4293a7b590b3Smrg # Non-PIC object. 4294a7b590b3Smrg if test "$non_pic_object" != none; then 4295a7b590b3Smrg # Prepend the subdirectory the object is found in. 4296a7b590b3Smrg non_pic_object="$xdir$non_pic_object" 4297943345d3Smrg 4298a7b590b3Smrg # A standard non-PIC object 4299a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 4300a7b590b3Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 4301a7b590b3Smrg arg="$non_pic_object" 4302a7b590b3Smrg fi 4303a7b590b3Smrg else 4304a7b590b3Smrg # If the PIC object exists, use it instead. 4305a7b590b3Smrg # $xdir was prepended to $pic_object above. 4306a7b590b3Smrg non_pic_object="$pic_object" 4307a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 4308a7b590b3Smrg fi 4309a7b590b3Smrg else 4310a7b590b3Smrg # Only an error if not doing a dry-run. 4311a7b590b3Smrg if $opt_dry_run; then 4312a7b590b3Smrg # Extract subdirectory from the argument. 4313a7b590b3Smrg func_dirname "$arg" "/" "" 4314a7b590b3Smrg xdir="$func_dirname_result" 4315a7b590b3Smrg 4316a7b590b3Smrg func_lo2o "$arg" 4317a7b590b3Smrg pic_object=$xdir$objdir/$func_lo2o_result 4318a7b590b3Smrg non_pic_object=$xdir$func_lo2o_result 4319a7b590b3Smrg func_append libobjs " $pic_object" 4320a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 4321a7b590b3Smrg else 4322a7b590b3Smrg func_fatal_error "\`$arg' is not a valid libtool object" 4323a7b590b3Smrg fi 4324a7b590b3Smrg fi 4325a7b590b3Smrg done 4326943345d3Smrg else 4327a7b590b3Smrg func_fatal_error "link input file \`$arg' does not exist" 4328943345d3Smrg fi 4329a7b590b3Smrg arg=$save_arg 4330a7b590b3Smrg prev= 4331a7b590b3Smrg continue 4332a7b590b3Smrg ;; 4333a7b590b3Smrg precious_regex) 4334a7b590b3Smrg precious_files_regex="$arg" 4335a7b590b3Smrg prev= 4336a7b590b3Smrg continue 4337a7b590b3Smrg ;; 4338a7b590b3Smrg release) 4339a7b590b3Smrg release="-$arg" 4340a7b590b3Smrg prev= 4341a7b590b3Smrg continue 4342a7b590b3Smrg ;; 4343a7b590b3Smrg rpath | xrpath) 4344a7b590b3Smrg # We need an absolute path. 4345a7b590b3Smrg case $arg in 4346a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4347a7b590b3Smrg *) 4348a7b590b3Smrg func_fatal_error "only absolute run-paths are allowed" 4349a7b590b3Smrg ;; 4350a7b590b3Smrg esac 4351a7b590b3Smrg if test "$prev" = rpath; then 4352a7b590b3Smrg case "$rpath " in 4353a7b590b3Smrg *" $arg "*) ;; 4354a7b590b3Smrg *) rpath="$rpath $arg" ;; 4355a7b590b3Smrg esac 4356943345d3Smrg else 4357a7b590b3Smrg case "$xrpath " in 4358a7b590b3Smrg *" $arg "*) ;; 4359a7b590b3Smrg *) xrpath="$xrpath $arg" ;; 4360a7b590b3Smrg esac 4361943345d3Smrg fi 4362a7b590b3Smrg prev= 4363a7b590b3Smrg continue 4364a7b590b3Smrg ;; 4365a7b590b3Smrg shrext) 4366a7b590b3Smrg shrext_cmds="$arg" 4367a7b590b3Smrg prev= 4368a7b590b3Smrg continue 4369a7b590b3Smrg ;; 4370a7b590b3Smrg weak) 4371a7b590b3Smrg weak_libs="$weak_libs $arg" 4372a7b590b3Smrg prev= 4373a7b590b3Smrg continue 4374a7b590b3Smrg ;; 4375a7b590b3Smrg xcclinker) 4376a7b590b3Smrg linker_flags="$linker_flags $qarg" 4377a7b590b3Smrg compiler_flags="$compiler_flags $qarg" 4378a7b590b3Smrg prev= 4379a7b590b3Smrg func_append compile_command " $qarg" 4380a7b590b3Smrg func_append finalize_command " $qarg" 4381a7b590b3Smrg continue 4382a7b590b3Smrg ;; 4383a7b590b3Smrg xcompiler) 4384a7b590b3Smrg compiler_flags="$compiler_flags $qarg" 4385a7b590b3Smrg prev= 4386a7b590b3Smrg func_append compile_command " $qarg" 4387a7b590b3Smrg func_append finalize_command " $qarg" 4388a7b590b3Smrg continue 4389a7b590b3Smrg ;; 4390a7b590b3Smrg xlinker) 4391a7b590b3Smrg linker_flags="$linker_flags $qarg" 4392a7b590b3Smrg compiler_flags="$compiler_flags $wl$qarg" 4393a7b590b3Smrg prev= 4394a7b590b3Smrg func_append compile_command " $wl$qarg" 4395a7b590b3Smrg func_append finalize_command " $wl$qarg" 4396a7b590b3Smrg continue 4397a7b590b3Smrg ;; 4398a7b590b3Smrg *) 4399a7b590b3Smrg eval "$prev=\"\$arg\"" 4400a7b590b3Smrg prev= 4401a7b590b3Smrg continue 4402a7b590b3Smrg ;; 4403943345d3Smrg esac 4404a7b590b3Smrg fi # test -n "$prev" 4405943345d3Smrg 4406a7b590b3Smrg prevarg="$arg" 4407943345d3Smrg 4408a7b590b3Smrg case $arg in 4409a7b590b3Smrg -all-static) 4410a7b590b3Smrg if test -n "$link_static_flag"; then 4411a7b590b3Smrg # See comment for -static flag below, for more details. 4412a7b590b3Smrg func_append compile_command " $link_static_flag" 4413a7b590b3Smrg func_append finalize_command " $link_static_flag" 4414a7b590b3Smrg fi 4415a7b590b3Smrg continue 4416a7b590b3Smrg ;; 4417943345d3Smrg 4418a7b590b3Smrg -allow-undefined) 4419a7b590b3Smrg # FIXME: remove this flag sometime in the future. 4420a7b590b3Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 4421a7b590b3Smrg ;; 4422943345d3Smrg 4423a7b590b3Smrg -avoid-version) 4424a7b590b3Smrg avoid_version=yes 4425a7b590b3Smrg continue 4426a7b590b3Smrg ;; 4427943345d3Smrg 4428a7b590b3Smrg -dlopen) 4429a7b590b3Smrg prev=dlfiles 4430a7b590b3Smrg continue 4431a7b590b3Smrg ;; 4432943345d3Smrg 4433a7b590b3Smrg -dlpreopen) 4434a7b590b3Smrg prev=dlprefiles 4435a7b590b3Smrg continue 4436a7b590b3Smrg ;; 4437943345d3Smrg 4438a7b590b3Smrg -export-dynamic) 4439a7b590b3Smrg export_dynamic=yes 4440a7b590b3Smrg continue 4441a7b590b3Smrg ;; 4442943345d3Smrg 4443a7b590b3Smrg -export-symbols | -export-symbols-regex) 4444a7b590b3Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 4445a7b590b3Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 4446a7b590b3Smrg fi 4447a7b590b3Smrg if test "X$arg" = "X-export-symbols"; then 4448a7b590b3Smrg prev=expsyms 4449a7b590b3Smrg else 4450a7b590b3Smrg prev=expsyms_regex 4451a7b590b3Smrg fi 4452a7b590b3Smrg continue 4453a7b590b3Smrg ;; 4454943345d3Smrg 4455a7b590b3Smrg -framework) 4456a7b590b3Smrg prev=framework 4457a7b590b3Smrg continue 4458a7b590b3Smrg ;; 4459943345d3Smrg 4460a7b590b3Smrg -inst-prefix-dir) 4461a7b590b3Smrg prev=inst_prefix 4462a7b590b3Smrg continue 4463a7b590b3Smrg ;; 4464943345d3Smrg 4465a7b590b3Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 4466a7b590b3Smrg # so, if we see these flags be careful not to treat them like -L 4467a7b590b3Smrg -L[A-Z][A-Z]*:*) 4468a7b590b3Smrg case $with_gcc/$host in 4469a7b590b3Smrg no/*-*-irix* | /*-*-irix*) 4470a7b590b3Smrg func_append compile_command " $arg" 4471a7b590b3Smrg func_append finalize_command " $arg" 4472a7b590b3Smrg ;; 4473a7b590b3Smrg esac 4474a7b590b3Smrg continue 4475a7b590b3Smrg ;; 4476943345d3Smrg 4477a7b590b3Smrg -L*) 4478a7b590b3Smrg func_stripname '-L' '' "$arg" 4479a7b590b3Smrg dir=$func_stripname_result 4480a7b590b3Smrg if test -z "$dir"; then 4481a7b590b3Smrg if test "$#" -gt 0; then 4482a7b590b3Smrg func_fatal_error "require no space between \`-L' and \`$1'" 4483a7b590b3Smrg else 4484a7b590b3Smrg func_fatal_error "need path for \`-L' option" 4485a7b590b3Smrg fi 4486a7b590b3Smrg fi 4487a7b590b3Smrg # We need an absolute path. 4488a7b590b3Smrg case $dir in 4489a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4490a7b590b3Smrg *) 4491a7b590b3Smrg absdir=`cd "$dir" && pwd` 4492a7b590b3Smrg test -z "$absdir" && \ 4493a7b590b3Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 4494a7b590b3Smrg dir="$absdir" 4495a7b590b3Smrg ;; 4496a7b590b3Smrg esac 4497a7b590b3Smrg case "$deplibs " in 4498a7b590b3Smrg *" -L$dir "*) ;; 4499a7b590b3Smrg *) 4500a7b590b3Smrg deplibs="$deplibs -L$dir" 4501a7b590b3Smrg lib_search_path="$lib_search_path $dir" 4502a7b590b3Smrg ;; 4503a7b590b3Smrg esac 4504a7b590b3Smrg case $host in 4505a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4506a7b590b3Smrg testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` 4507a7b590b3Smrg case :$dllsearchpath: in 4508a7b590b3Smrg *":$dir:"*) ;; 4509a7b590b3Smrg ::) dllsearchpath=$dir;; 4510a7b590b3Smrg *) dllsearchpath="$dllsearchpath:$dir";; 4511a7b590b3Smrg esac 4512a7b590b3Smrg case :$dllsearchpath: in 4513a7b590b3Smrg *":$testbindir:"*) ;; 4514a7b590b3Smrg ::) dllsearchpath=$testbindir;; 4515a7b590b3Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 4516a7b590b3Smrg esac 4517a7b590b3Smrg ;; 4518a7b590b3Smrg esac 4519a7b590b3Smrg continue 4520a7b590b3Smrg ;; 4521943345d3Smrg 4522a7b590b3Smrg -l*) 4523a7b590b3Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 4524a7b590b3Smrg case $host in 4525a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) 4526a7b590b3Smrg # These systems don't actually have a C or math library (as such) 4527a7b590b3Smrg continue 4528a7b590b3Smrg ;; 4529a7b590b3Smrg *-*-os2*) 4530a7b590b3Smrg # These systems don't actually have a C library (as such) 4531a7b590b3Smrg test "X$arg" = "X-lc" && continue 4532a7b590b3Smrg ;; 4533a7b590b3Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4534a7b590b3Smrg # Do not include libc due to us having libc/libc_r. 4535a7b590b3Smrg test "X$arg" = "X-lc" && continue 4536a7b590b3Smrg ;; 4537a7b590b3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 4538a7b590b3Smrg # Rhapsody C and math libraries are in the System framework 4539a7b590b3Smrg deplibs="$deplibs System.ltframework" 4540a7b590b3Smrg continue 4541a7b590b3Smrg ;; 4542a7b590b3Smrg *-*-sco3.2v5* | *-*-sco5v6*) 4543a7b590b3Smrg # Causes problems with __ctype 4544a7b590b3Smrg test "X$arg" = "X-lc" && continue 4545a7b590b3Smrg ;; 4546a7b590b3Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 4547a7b590b3Smrg # Compiler inserts libc in the correct place for threads to work 4548a7b590b3Smrg test "X$arg" = "X-lc" && continue 4549a7b590b3Smrg ;; 4550a7b590b3Smrg esac 4551a7b590b3Smrg elif test "X$arg" = "X-lc_r"; then 4552a7b590b3Smrg case $host in 4553a7b590b3Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4554a7b590b3Smrg # Do not include libc_r directly, use -pthread flag. 4555a7b590b3Smrg continue 4556a7b590b3Smrg ;; 4557a7b590b3Smrg esac 4558a7b590b3Smrg fi 4559a7b590b3Smrg deplibs="$deplibs $arg" 4560a7b590b3Smrg continue 4561a7b590b3Smrg ;; 4562943345d3Smrg 4563a7b590b3Smrg -module) 4564a7b590b3Smrg module=yes 4565a7b590b3Smrg continue 4566a7b590b3Smrg ;; 4567943345d3Smrg 4568a7b590b3Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 4569a7b590b3Smrg # classes, name mangling, and exception handling. 4570a7b590b3Smrg # Darwin uses the -arch flag to determine output architecture. 4571a7b590b3Smrg -model|-arch|-isysroot) 4572a7b590b3Smrg compiler_flags="$compiler_flags $arg" 4573a7b590b3Smrg func_append compile_command " $arg" 4574a7b590b3Smrg func_append finalize_command " $arg" 4575a7b590b3Smrg prev=xcompiler 4576a7b590b3Smrg continue 4577a7b590b3Smrg ;; 4578943345d3Smrg 4579a7b590b3Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 4580a7b590b3Smrg compiler_flags="$compiler_flags $arg" 4581a7b590b3Smrg func_append compile_command " $arg" 4582a7b590b3Smrg func_append finalize_command " $arg" 4583a7b590b3Smrg case "$new_inherited_linker_flags " in 4584a7b590b3Smrg *" $arg "*) ;; 4585a7b590b3Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 4586a7b590b3Smrg esac 4587a7b590b3Smrg continue 4588a7b590b3Smrg ;; 4589943345d3Smrg 4590a7b590b3Smrg -multi_module) 4591a7b590b3Smrg single_module="${wl}-multi_module" 4592a7b590b3Smrg continue 4593a7b590b3Smrg ;; 4594943345d3Smrg 4595a7b590b3Smrg -no-fast-install) 4596a7b590b3Smrg fast_install=no 4597a7b590b3Smrg continue 4598a7b590b3Smrg ;; 4599943345d3Smrg 4600a7b590b3Smrg -no-install) 4601a7b590b3Smrg case $host in 4602a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 4603a7b590b3Smrg # The PATH hackery in wrapper scripts is required on Windows 4604a7b590b3Smrg # and Darwin in order for the loader to find any dlls it needs. 4605a7b590b3Smrg func_warning "\`-no-install' is ignored for $host" 4606a7b590b3Smrg func_warning "assuming \`-no-fast-install' instead" 4607a7b590b3Smrg fast_install=no 4608a7b590b3Smrg ;; 4609a7b590b3Smrg *) no_install=yes ;; 4610a7b590b3Smrg esac 4611a7b590b3Smrg continue 4612a7b590b3Smrg ;; 4613943345d3Smrg 4614a7b590b3Smrg -no-undefined) 4615a7b590b3Smrg allow_undefined=no 4616a7b590b3Smrg continue 4617a7b590b3Smrg ;; 4618943345d3Smrg 4619a7b590b3Smrg -objectlist) 4620a7b590b3Smrg prev=objectlist 4621a7b590b3Smrg continue 4622a7b590b3Smrg ;; 4623943345d3Smrg 4624a7b590b3Smrg -o) prev=output ;; 4625943345d3Smrg 4626a7b590b3Smrg -precious-files-regex) 4627a7b590b3Smrg prev=precious_regex 4628a7b590b3Smrg continue 4629a7b590b3Smrg ;; 4630943345d3Smrg 4631a7b590b3Smrg -release) 4632a7b590b3Smrg prev=release 4633a7b590b3Smrg continue 4634a7b590b3Smrg ;; 4635943345d3Smrg 4636a7b590b3Smrg -rpath) 4637a7b590b3Smrg prev=rpath 4638a7b590b3Smrg continue 4639a7b590b3Smrg ;; 4640943345d3Smrg 4641a7b590b3Smrg -R) 4642a7b590b3Smrg prev=xrpath 4643a7b590b3Smrg continue 4644a7b590b3Smrg ;; 4645943345d3Smrg 4646a7b590b3Smrg -R*) 4647a7b590b3Smrg func_stripname '-R' '' "$arg" 4648a7b590b3Smrg dir=$func_stripname_result 4649a7b590b3Smrg # We need an absolute path. 4650a7b590b3Smrg case $dir in 4651a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4652a7b590b3Smrg *) 4653a7b590b3Smrg func_fatal_error "only absolute run-paths are allowed" 4654a7b590b3Smrg ;; 4655a7b590b3Smrg esac 4656a7b590b3Smrg case "$xrpath " in 4657a7b590b3Smrg *" $dir "*) ;; 4658a7b590b3Smrg *) xrpath="$xrpath $dir" ;; 4659a7b590b3Smrg esac 4660a7b590b3Smrg continue 4661a7b590b3Smrg ;; 4662943345d3Smrg 4663a7b590b3Smrg -shared) 4664a7b590b3Smrg # The effects of -shared are defined in a previous loop. 4665a7b590b3Smrg continue 4666a7b590b3Smrg ;; 4667943345d3Smrg 4668a7b590b3Smrg -shrext) 4669a7b590b3Smrg prev=shrext 4670a7b590b3Smrg continue 4671a7b590b3Smrg ;; 4672943345d3Smrg 4673a7b590b3Smrg -static | -static-libtool-libs) 4674a7b590b3Smrg # The effects of -static are defined in a previous loop. 4675a7b590b3Smrg # We used to do the same as -all-static on platforms that 4676a7b590b3Smrg # didn't have a PIC flag, but the assumption that the effects 4677a7b590b3Smrg # would be equivalent was wrong. It would break on at least 4678a7b590b3Smrg # Digital Unix and AIX. 4679a7b590b3Smrg continue 4680a7b590b3Smrg ;; 4681943345d3Smrg 4682a7b590b3Smrg -thread-safe) 4683a7b590b3Smrg thread_safe=yes 4684a7b590b3Smrg continue 4685a7b590b3Smrg ;; 4686943345d3Smrg 4687a7b590b3Smrg -version-info) 4688a7b590b3Smrg prev=vinfo 4689a7b590b3Smrg continue 4690a7b590b3Smrg ;; 4691943345d3Smrg 4692a7b590b3Smrg -version-number) 4693a7b590b3Smrg prev=vinfo 4694a7b590b3Smrg vinfo_number=yes 4695a7b590b3Smrg continue 4696a7b590b3Smrg ;; 4697943345d3Smrg 4698a7b590b3Smrg -weak) 4699a7b590b3Smrg prev=weak 4700a7b590b3Smrg continue 4701a7b590b3Smrg ;; 4702943345d3Smrg 4703a7b590b3Smrg -Wc,*) 4704a7b590b3Smrg func_stripname '-Wc,' '' "$arg" 4705a7b590b3Smrg args=$func_stripname_result 4706a7b590b3Smrg arg= 4707a7b590b3Smrg save_ifs="$IFS"; IFS=',' 4708a7b590b3Smrg for flag in $args; do 4709a7b590b3Smrg IFS="$save_ifs" 4710a7b590b3Smrg func_quote_for_eval "$flag" 4711a7b590b3Smrg arg="$arg $wl$func_quote_for_eval_result" 4712a7b590b3Smrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 4713a7b590b3Smrg done 4714a7b590b3Smrg IFS="$save_ifs" 4715a7b590b3Smrg func_stripname ' ' '' "$arg" 4716a7b590b3Smrg arg=$func_stripname_result 4717a7b590b3Smrg ;; 4718943345d3Smrg 4719a7b590b3Smrg -Wl,*) 4720a7b590b3Smrg func_stripname '-Wl,' '' "$arg" 4721a7b590b3Smrg args=$func_stripname_result 4722a7b590b3Smrg arg= 4723a7b590b3Smrg save_ifs="$IFS"; IFS=',' 4724a7b590b3Smrg for flag in $args; do 4725a7b590b3Smrg IFS="$save_ifs" 4726a7b590b3Smrg func_quote_for_eval "$flag" 4727a7b590b3Smrg arg="$arg $wl$func_quote_for_eval_result" 4728a7b590b3Smrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 4729a7b590b3Smrg linker_flags="$linker_flags $func_quote_for_eval_result" 4730a7b590b3Smrg done 4731a7b590b3Smrg IFS="$save_ifs" 4732a7b590b3Smrg func_stripname ' ' '' "$arg" 4733a7b590b3Smrg arg=$func_stripname_result 4734a7b590b3Smrg ;; 4735943345d3Smrg 4736a7b590b3Smrg -Xcompiler) 4737a7b590b3Smrg prev=xcompiler 4738a7b590b3Smrg continue 4739a7b590b3Smrg ;; 4740943345d3Smrg 4741a7b590b3Smrg -Xlinker) 4742a7b590b3Smrg prev=xlinker 4743a7b590b3Smrg continue 4744a7b590b3Smrg ;; 4745943345d3Smrg 4746a7b590b3Smrg -XCClinker) 4747a7b590b3Smrg prev=xcclinker 4748a7b590b3Smrg continue 4749a7b590b3Smrg ;; 4750943345d3Smrg 4751a7b590b3Smrg # -msg_* for osf cc 4752a7b590b3Smrg -msg_*) 4753a7b590b3Smrg func_quote_for_eval "$arg" 4754a7b590b3Smrg arg="$func_quote_for_eval_result" 4755a7b590b3Smrg ;; 4756943345d3Smrg 4757a7b590b3Smrg # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 4758a7b590b3Smrg # -r[0-9][0-9]* specifies the processor on the SGI compiler 4759a7b590b3Smrg # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 4760a7b590b3Smrg # +DA*, +DD* enable 64-bit mode on the HP compiler 4761a7b590b3Smrg # -q* pass through compiler args for the IBM compiler 4762a7b590b3Smrg # -m*, -t[45]*, -txscale* pass through architecture-specific 4763a7b590b3Smrg # compiler args for GCC 4764a7b590b3Smrg # -F/path gives path to uninstalled frameworks, gcc on darwin 4765a7b590b3Smrg # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 4766a7b590b3Smrg # @file GCC response files 4767a7b590b3Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 4768a7b590b3Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 4769a7b590b3Smrg func_quote_for_eval "$arg" 4770a7b590b3Smrg arg="$func_quote_for_eval_result" 4771a7b590b3Smrg func_append compile_command " $arg" 4772a7b590b3Smrg func_append finalize_command " $arg" 4773a7b590b3Smrg compiler_flags="$compiler_flags $arg" 4774a7b590b3Smrg continue 4775a7b590b3Smrg ;; 4776943345d3Smrg 4777a7b590b3Smrg # Some other compiler flag. 4778a7b590b3Smrg -* | +*) 4779a7b590b3Smrg func_quote_for_eval "$arg" 4780a7b590b3Smrg arg="$func_quote_for_eval_result" 4781a7b590b3Smrg ;; 4782943345d3Smrg 4783a7b590b3Smrg *.$objext) 4784a7b590b3Smrg # A standard object. 4785a7b590b3Smrg objs="$objs $arg" 4786a7b590b3Smrg ;; 4787943345d3Smrg 4788a7b590b3Smrg *.lo) 4789a7b590b3Smrg # A libtool-controlled object. 4790943345d3Smrg 4791a7b590b3Smrg # Check to see that this really is a libtool object. 4792a7b590b3Smrg if func_lalib_unsafe_p "$arg"; then 4793a7b590b3Smrg pic_object= 4794a7b590b3Smrg non_pic_object= 4795943345d3Smrg 4796a7b590b3Smrg # Read the .lo file 4797a7b590b3Smrg func_source "$arg" 4798943345d3Smrg 4799a7b590b3Smrg if test -z "$pic_object" || 4800a7b590b3Smrg test -z "$non_pic_object" || 4801a7b590b3Smrg test "$pic_object" = none && 4802a7b590b3Smrg test "$non_pic_object" = none; then 4803a7b590b3Smrg func_fatal_error "cannot find name of object for \`$arg'" 4804a7b590b3Smrg fi 4805943345d3Smrg 4806a7b590b3Smrg # Extract subdirectory from the argument. 4807a7b590b3Smrg func_dirname "$arg" "/" "" 4808a7b590b3Smrg xdir="$func_dirname_result" 4809f67b85aaSmrg 4810a7b590b3Smrg if test "$pic_object" != none; then 4811a7b590b3Smrg # Prepend the subdirectory the object is found in. 4812a7b590b3Smrg pic_object="$xdir$pic_object" 4813943345d3Smrg 4814a7b590b3Smrg if test "$prev" = dlfiles; then 4815a7b590b3Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4816a7b590b3Smrg dlfiles="$dlfiles $pic_object" 4817a7b590b3Smrg prev= 4818a7b590b3Smrg continue 4819a7b590b3Smrg else 4820a7b590b3Smrg # If libtool objects are unsupported, then we need to preload. 4821a7b590b3Smrg prev=dlprefiles 4822a7b590b3Smrg fi 4823a7b590b3Smrg fi 4824943345d3Smrg 4825a7b590b3Smrg # CHECK ME: I think I busted this. -Ossama 4826a7b590b3Smrg if test "$prev" = dlprefiles; then 4827a7b590b3Smrg # Preload the old-style object. 4828a7b590b3Smrg dlprefiles="$dlprefiles $pic_object" 4829a7b590b3Smrg prev= 4830a7b590b3Smrg fi 4831943345d3Smrg 4832a7b590b3Smrg # A PIC object. 4833a7b590b3Smrg func_append libobjs " $pic_object" 4834a7b590b3Smrg arg="$pic_object" 4835a7b590b3Smrg fi 4836943345d3Smrg 4837a7b590b3Smrg # Non-PIC object. 4838a7b590b3Smrg if test "$non_pic_object" != none; then 4839a7b590b3Smrg # Prepend the subdirectory the object is found in. 4840a7b590b3Smrg non_pic_object="$xdir$non_pic_object" 4841943345d3Smrg 4842a7b590b3Smrg # A standard non-PIC object 4843a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 4844a7b590b3Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 4845a7b590b3Smrg arg="$non_pic_object" 4846a7b590b3Smrg fi 4847a7b590b3Smrg else 4848a7b590b3Smrg # If the PIC object exists, use it instead. 4849a7b590b3Smrg # $xdir was prepended to $pic_object above. 4850a7b590b3Smrg non_pic_object="$pic_object" 4851a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 4852a7b590b3Smrg fi 4853a7b590b3Smrg else 4854a7b590b3Smrg # Only an error if not doing a dry-run. 4855a7b590b3Smrg if $opt_dry_run; then 4856a7b590b3Smrg # Extract subdirectory from the argument. 4857a7b590b3Smrg func_dirname "$arg" "/" "" 4858a7b590b3Smrg xdir="$func_dirname_result" 4859a7b590b3Smrg 4860a7b590b3Smrg func_lo2o "$arg" 4861a7b590b3Smrg pic_object=$xdir$objdir/$func_lo2o_result 4862a7b590b3Smrg non_pic_object=$xdir$func_lo2o_result 4863a7b590b3Smrg func_append libobjs " $pic_object" 4864a7b590b3Smrg func_append non_pic_objects " $non_pic_object" 4865a7b590b3Smrg else 4866a7b590b3Smrg func_fatal_error "\`$arg' is not a valid libtool object" 4867a7b590b3Smrg fi 4868a7b590b3Smrg fi 4869a7b590b3Smrg ;; 4870943345d3Smrg 4871a7b590b3Smrg *.$libext) 4872a7b590b3Smrg # An archive. 4873a7b590b3Smrg deplibs="$deplibs $arg" 4874a7b590b3Smrg old_deplibs="$old_deplibs $arg" 4875a7b590b3Smrg continue 4876a7b590b3Smrg ;; 4877a7b590b3Smrg 4878a7b590b3Smrg *.la) 4879a7b590b3Smrg # A libtool-controlled library. 4880a7b590b3Smrg 4881a7b590b3Smrg if test "$prev" = dlfiles; then 4882a7b590b3Smrg # This library was specified with -dlopen. 4883a7b590b3Smrg dlfiles="$dlfiles $arg" 4884a7b590b3Smrg prev= 4885a7b590b3Smrg elif test "$prev" = dlprefiles; then 4886a7b590b3Smrg # The library was specified with -dlpreopen. 4887a7b590b3Smrg dlprefiles="$dlprefiles $arg" 4888a7b590b3Smrg prev= 4889a7b590b3Smrg else 4890a7b590b3Smrg deplibs="$deplibs $arg" 4891a7b590b3Smrg fi 4892a7b590b3Smrg continue 4893a7b590b3Smrg ;; 4894a7b590b3Smrg 4895a7b590b3Smrg # Some other compiler argument. 4896a7b590b3Smrg *) 4897a7b590b3Smrg # Unknown arguments in both finalize_command and compile_command need 4898a7b590b3Smrg # to be aesthetically quoted because they are evaled later. 4899a7b590b3Smrg func_quote_for_eval "$arg" 4900a7b590b3Smrg arg="$func_quote_for_eval_result" 4901a7b590b3Smrg ;; 4902a7b590b3Smrg esac # arg 4903a7b590b3Smrg 4904a7b590b3Smrg # Now actually substitute the argument into the commands. 4905a7b590b3Smrg if test -n "$arg"; then 4906a7b590b3Smrg func_append compile_command " $arg" 4907a7b590b3Smrg func_append finalize_command " $arg" 4908a7b590b3Smrg fi 4909a7b590b3Smrg done # argument parsing loop 4910a7b590b3Smrg 4911a7b590b3Smrg test -n "$prev" && \ 4912a7b590b3Smrg func_fatal_help "the \`$prevarg' option requires an argument" 4913a7b590b3Smrg 4914a7b590b3Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 4915a7b590b3Smrg eval arg=\"$export_dynamic_flag_spec\" 4916a7b590b3Smrg func_append compile_command " $arg" 4917a7b590b3Smrg func_append finalize_command " $arg" 4918a7b590b3Smrg fi 4919a7b590b3Smrg 4920a7b590b3Smrg oldlibs= 4921a7b590b3Smrg # calculate the name of the file, without its directory 4922a7b590b3Smrg func_basename "$output" 4923a7b590b3Smrg outputname="$func_basename_result" 4924a7b590b3Smrg libobjs_save="$libobjs" 4925a7b590b3Smrg 4926a7b590b3Smrg if test -n "$shlibpath_var"; then 4927a7b590b3Smrg # get the directories listed in $shlibpath_var 4928a7b590b3Smrg eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 4929a7b590b3Smrg else 4930a7b590b3Smrg shlib_search_path= 4931a7b590b3Smrg fi 4932a7b590b3Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 4933a7b590b3Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 4934a7b590b3Smrg 4935a7b590b3Smrg func_dirname "$output" "/" "" 4936a7b590b3Smrg output_objdir="$func_dirname_result$objdir" 4937a7b590b3Smrg # Create the object directory. 4938a7b590b3Smrg func_mkdir_p "$output_objdir" 4939a7b590b3Smrg 4940a7b590b3Smrg # Determine the type of output 4941a7b590b3Smrg case $output in 4942a7b590b3Smrg "") 4943a7b590b3Smrg func_fatal_help "you must specify an output file" 4944a7b590b3Smrg ;; 4945a7b590b3Smrg *.$libext) linkmode=oldlib ;; 4946a7b590b3Smrg *.lo | *.$objext) linkmode=obj ;; 4947a7b590b3Smrg *.la) linkmode=lib ;; 4948a7b590b3Smrg *) linkmode=prog ;; # Anything else should be a program. 4949a7b590b3Smrg esac 4950a7b590b3Smrg 4951a7b590b3Smrg specialdeplibs= 4952a7b590b3Smrg 4953a7b590b3Smrg libs= 4954a7b590b3Smrg # Find all interdependent deplibs by searching for libraries 4955a7b590b3Smrg # that are linked more than once (e.g. -la -lb -la) 4956a7b590b3Smrg for deplib in $deplibs; do 4957a7b590b3Smrg if $opt_duplicate_deps ; then 4958a7b590b3Smrg case "$libs " in 4959a7b590b3Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 4960a7b590b3Smrg esac 4961a7b590b3Smrg fi 4962a7b590b3Smrg libs="$libs $deplib" 4963a7b590b3Smrg done 4964a7b590b3Smrg 4965a7b590b3Smrg if test "$linkmode" = lib; then 4966a7b590b3Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 4967a7b590b3Smrg 4968a7b590b3Smrg # Compute libraries that are listed more than once in $predeps 4969a7b590b3Smrg # $postdeps and mark them as special (i.e., whose duplicates are 4970a7b590b3Smrg # not to be eliminated). 4971a7b590b3Smrg pre_post_deps= 4972a7b590b3Smrg if $opt_duplicate_compiler_generated_deps; then 4973a7b590b3Smrg for pre_post_dep in $predeps $postdeps; do 4974a7b590b3Smrg case "$pre_post_deps " in 4975a7b590b3Smrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 4976a7b590b3Smrg esac 4977a7b590b3Smrg pre_post_deps="$pre_post_deps $pre_post_dep" 4978a7b590b3Smrg done 4979a7b590b3Smrg fi 4980a7b590b3Smrg pre_post_deps= 4981a7b590b3Smrg fi 4982a7b590b3Smrg 4983a7b590b3Smrg deplibs= 4984a7b590b3Smrg newdependency_libs= 4985a7b590b3Smrg newlib_search_path= 4986a7b590b3Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 4987a7b590b3Smrg notinst_deplibs= # not-installed libtool libraries 4988a7b590b3Smrg notinst_path= # paths that contain not-installed libtool libraries 4989a7b590b3Smrg 4990a7b590b3Smrg case $linkmode in 4991a7b590b3Smrg lib) 4992a7b590b3Smrg passes="conv dlpreopen link" 4993a7b590b3Smrg for file in $dlfiles $dlprefiles; do 4994a7b590b3Smrg case $file in 4995a7b590b3Smrg *.la) ;; 4996a7b590b3Smrg *) 4997a7b590b3Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 4998a7b590b3Smrg ;; 4999a7b590b3Smrg esac 5000a7b590b3Smrg done 5001a7b590b3Smrg ;; 5002a7b590b3Smrg prog) 5003a7b590b3Smrg compile_deplibs= 5004a7b590b3Smrg finalize_deplibs= 5005a7b590b3Smrg alldeplibs=no 5006a7b590b3Smrg newdlfiles= 5007a7b590b3Smrg newdlprefiles= 5008a7b590b3Smrg passes="conv scan dlopen dlpreopen link" 5009a7b590b3Smrg ;; 5010a7b590b3Smrg *) passes="conv" 5011a7b590b3Smrg ;; 5012a7b590b3Smrg esac 5013a7b590b3Smrg 5014a7b590b3Smrg for pass in $passes; do 5015a7b590b3Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 5016a7b590b3Smrg # so that -L comes before libs that need it for instance... 5017a7b590b3Smrg if test "$linkmode,$pass" = "lib,link"; then 5018a7b590b3Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 5019a7b590b3Smrg ## order, and fix it there properly 5020a7b590b3Smrg tmp_deplibs= 5021a7b590b3Smrg for deplib in $deplibs; do 5022a7b590b3Smrg tmp_deplibs="$deplib $tmp_deplibs" 5023a7b590b3Smrg done 5024a7b590b3Smrg deplibs="$tmp_deplibs" 5025a7b590b3Smrg fi 5026a7b590b3Smrg 5027a7b590b3Smrg if test "$linkmode,$pass" = "lib,link" || 5028a7b590b3Smrg test "$linkmode,$pass" = "prog,scan"; then 5029a7b590b3Smrg libs="$deplibs" 5030a7b590b3Smrg deplibs= 5031a7b590b3Smrg fi 5032a7b590b3Smrg if test "$linkmode" = prog; then 5033a7b590b3Smrg case $pass in 5034a7b590b3Smrg dlopen) libs="$dlfiles" ;; 5035a7b590b3Smrg dlpreopen) libs="$dlprefiles" ;; 5036a7b590b3Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 5037a7b590b3Smrg esac 5038a7b590b3Smrg fi 5039a7b590b3Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 5040a7b590b3Smrg # Collect and forward deplibs of preopened libtool libs 5041a7b590b3Smrg for lib in $dlprefiles; do 5042a7b590b3Smrg # Ignore non-libtool-libs 5043a7b590b3Smrg dependency_libs= 5044a7b590b3Smrg case $lib in 5045a7b590b3Smrg *.la) func_source "$lib" ;; 5046a7b590b3Smrg esac 5047a7b590b3Smrg 5048a7b590b3Smrg # Collect preopened libtool deplibs, except any this library 5049a7b590b3Smrg # has declared as weak libs 5050a7b590b3Smrg for deplib in $dependency_libs; do 5051a7b590b3Smrg deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` 5052a7b590b3Smrg case " $weak_libs " in 5053a7b590b3Smrg *" $deplib_base "*) ;; 5054a7b590b3Smrg *) deplibs="$deplibs $deplib" ;; 5055a7b590b3Smrg esac 5056a7b590b3Smrg done 5057a7b590b3Smrg done 5058a7b590b3Smrg libs="$dlprefiles" 5059a7b590b3Smrg fi 5060a7b590b3Smrg if test "$pass" = dlopen; then 5061a7b590b3Smrg # Collect dlpreopened libraries 5062a7b590b3Smrg save_deplibs="$deplibs" 5063a7b590b3Smrg deplibs= 5064a7b590b3Smrg fi 5065a7b590b3Smrg 5066a7b590b3Smrg for deplib in $libs; do 5067a7b590b3Smrg lib= 5068a7b590b3Smrg found=no 5069a7b590b3Smrg case $deplib in 5070a7b590b3Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5071a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 5072a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 5073a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 5074a7b590b3Smrg else 5075a7b590b3Smrg compiler_flags="$compiler_flags $deplib" 5076a7b590b3Smrg if test "$linkmode" = lib ; then 5077a7b590b3Smrg case "$new_inherited_linker_flags " in 5078a7b590b3Smrg *" $deplib "*) ;; 5079a7b590b3Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5080a7b590b3Smrg esac 5081a7b590b3Smrg fi 5082a7b590b3Smrg fi 5083a7b590b3Smrg continue 5084a7b590b3Smrg ;; 5085a7b590b3Smrg -l*) 5086a7b590b3Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 5087a7b590b3Smrg func_warning "\`-l' is ignored for archives/objects" 5088a7b590b3Smrg continue 5089a7b590b3Smrg fi 5090a7b590b3Smrg func_stripname '-l' '' "$deplib" 5091a7b590b3Smrg name=$func_stripname_result 5092a7b590b3Smrg if test "$linkmode" = lib; then 5093a7b590b3Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 5094a7b590b3Smrg else 5095a7b590b3Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 5096a7b590b3Smrg fi 5097a7b590b3Smrg for searchdir in $searchdirs; do 5098a7b590b3Smrg for search_ext in .la $std_shrext .so .a; do 5099a7b590b3Smrg # Search the libtool library 5100a7b590b3Smrg lib="$searchdir/lib${name}${search_ext}" 5101a7b590b3Smrg if test -f "$lib"; then 5102a7b590b3Smrg if test "$search_ext" = ".la"; then 5103a7b590b3Smrg found=yes 5104a7b590b3Smrg else 5105a7b590b3Smrg found=no 5106a7b590b3Smrg fi 5107a7b590b3Smrg break 2 5108a7b590b3Smrg fi 5109a7b590b3Smrg done 5110a7b590b3Smrg done 5111a7b590b3Smrg if test "$found" != yes; then 5112a7b590b3Smrg # deplib doesn't seem to be a libtool library 5113a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 5114a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 5115a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 5116a7b590b3Smrg else 5117a7b590b3Smrg deplibs="$deplib $deplibs" 5118a7b590b3Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5119a7b590b3Smrg fi 5120a7b590b3Smrg continue 5121a7b590b3Smrg else # deplib is a libtool library 5122a7b590b3Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 5123a7b590b3Smrg # We need to do some special things here, and not later. 5124a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 5125a7b590b3Smrg case " $predeps $postdeps " in 5126a7b590b3Smrg *" $deplib "*) 5127a7b590b3Smrg if func_lalib_p "$lib"; then 5128a7b590b3Smrg library_names= 5129a7b590b3Smrg old_library= 5130a7b590b3Smrg func_source "$lib" 5131a7b590b3Smrg for l in $old_library $library_names; do 5132a7b590b3Smrg ll="$l" 5133a7b590b3Smrg done 5134a7b590b3Smrg if test "X$ll" = "X$old_library" ; then # only static version available 5135a7b590b3Smrg found=no 5136a7b590b3Smrg func_dirname "$lib" "" "." 5137a7b590b3Smrg ladir="$func_dirname_result" 5138a7b590b3Smrg lib=$ladir/$old_library 5139a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 5140a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 5141a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 5142a7b590b3Smrg else 5143a7b590b3Smrg deplibs="$deplib $deplibs" 5144a7b590b3Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5145a7b590b3Smrg fi 5146a7b590b3Smrg continue 5147a7b590b3Smrg fi 5148a7b590b3Smrg fi 5149a7b590b3Smrg ;; 5150a7b590b3Smrg *) ;; 5151a7b590b3Smrg esac 5152a7b590b3Smrg fi 5153a7b590b3Smrg fi 5154a7b590b3Smrg ;; # -l 5155a7b590b3Smrg *.ltframework) 5156a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 5157a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 5158a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 5159a7b590b3Smrg else 5160a7b590b3Smrg deplibs="$deplib $deplibs" 5161a7b590b3Smrg if test "$linkmode" = lib ; then 5162a7b590b3Smrg case "$new_inherited_linker_flags " in 5163a7b590b3Smrg *" $deplib "*) ;; 5164a7b590b3Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5165a7b590b3Smrg esac 5166a7b590b3Smrg fi 5167a7b590b3Smrg fi 5168a7b590b3Smrg continue 5169a7b590b3Smrg ;; 5170a7b590b3Smrg -L*) 5171a7b590b3Smrg case $linkmode in 5172a7b590b3Smrg lib) 5173a7b590b3Smrg deplibs="$deplib $deplibs" 5174a7b590b3Smrg test "$pass" = conv && continue 5175a7b590b3Smrg newdependency_libs="$deplib $newdependency_libs" 5176a7b590b3Smrg func_stripname '-L' '' "$deplib" 5177a7b590b3Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5178a7b590b3Smrg ;; 5179a7b590b3Smrg prog) 5180a7b590b3Smrg if test "$pass" = conv; then 5181a7b590b3Smrg deplibs="$deplib $deplibs" 5182a7b590b3Smrg continue 5183a7b590b3Smrg fi 5184a7b590b3Smrg if test "$pass" = scan; then 5185a7b590b3Smrg deplibs="$deplib $deplibs" 5186a7b590b3Smrg else 5187a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 5188a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 5189a7b590b3Smrg fi 5190a7b590b3Smrg func_stripname '-L' '' "$deplib" 5191a7b590b3Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5192a7b590b3Smrg ;; 5193a7b590b3Smrg *) 5194a7b590b3Smrg func_warning "\`-L' is ignored for archives/objects" 5195a7b590b3Smrg ;; 5196a7b590b3Smrg esac # linkmode 5197a7b590b3Smrg continue 5198a7b590b3Smrg ;; # -L 5199a7b590b3Smrg -R*) 5200a7b590b3Smrg if test "$pass" = link; then 5201a7b590b3Smrg func_stripname '-R' '' "$deplib" 5202a7b590b3Smrg dir=$func_stripname_result 5203a7b590b3Smrg # Make sure the xrpath contains only unique directories. 5204a7b590b3Smrg case "$xrpath " in 5205a7b590b3Smrg *" $dir "*) ;; 5206a7b590b3Smrg *) xrpath="$xrpath $dir" ;; 5207a7b590b3Smrg esac 5208a7b590b3Smrg fi 5209a7b590b3Smrg deplibs="$deplib $deplibs" 5210a7b590b3Smrg continue 5211a7b590b3Smrg ;; 5212a7b590b3Smrg *.la) lib="$deplib" ;; 5213a7b590b3Smrg *.$libext) 5214a7b590b3Smrg if test "$pass" = conv; then 5215a7b590b3Smrg deplibs="$deplib $deplibs" 5216a7b590b3Smrg continue 5217a7b590b3Smrg fi 5218a7b590b3Smrg case $linkmode in 5219a7b590b3Smrg lib) 5220a7b590b3Smrg # Linking convenience modules into shared libraries is allowed, 5221a7b590b3Smrg # but linking other static libraries is non-portable. 5222a7b590b3Smrg case " $dlpreconveniencelibs " in 5223a7b590b3Smrg *" $deplib "*) ;; 5224a7b590b3Smrg *) 5225a7b590b3Smrg valid_a_lib=no 5226a7b590b3Smrg case $deplibs_check_method in 5227a7b590b3Smrg match_pattern*) 5228a7b590b3Smrg set dummy $deplibs_check_method; shift 5229a7b590b3Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 5230a7b590b3Smrg if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ 5231a7b590b3Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 5232a7b590b3Smrg valid_a_lib=yes 5233a7b590b3Smrg fi 5234a7b590b3Smrg ;; 5235a7b590b3Smrg pass_all) 5236a7b590b3Smrg valid_a_lib=yes 5237a7b590b3Smrg ;; 5238a7b590b3Smrg esac 5239a7b590b3Smrg if test "$valid_a_lib" != yes; then 5240a7b590b3Smrg $ECHO 5241a7b590b3Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 5242a7b590b3Smrg $ECHO "*** I have the capability to make that library automatically link in when" 5243a7b590b3Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 5244a7b590b3Smrg $ECHO "*** shared version of the library, which you do not appear to have" 5245a7b590b3Smrg $ECHO "*** because the file extensions .$libext of this argument makes me believe" 5246a7b590b3Smrg $ECHO "*** that it is just a static archive that I should not use here." 5247a7b590b3Smrg else 5248a7b590b3Smrg $ECHO 5249a7b590b3Smrg $ECHO "*** Warning: Linking the shared library $output against the" 5250a7b590b3Smrg $ECHO "*** static library $deplib is not portable!" 5251a7b590b3Smrg deplibs="$deplib $deplibs" 5252a7b590b3Smrg fi 5253a7b590b3Smrg ;; 5254a7b590b3Smrg esac 5255a7b590b3Smrg continue 5256a7b590b3Smrg ;; 5257a7b590b3Smrg prog) 5258a7b590b3Smrg if test "$pass" != link; then 5259a7b590b3Smrg deplibs="$deplib $deplibs" 5260a7b590b3Smrg else 5261a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 5262a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 5263a7b590b3Smrg fi 5264a7b590b3Smrg continue 5265a7b590b3Smrg ;; 5266a7b590b3Smrg esac # linkmode 5267a7b590b3Smrg ;; # *.$libext 5268a7b590b3Smrg *.lo | *.$objext) 5269a7b590b3Smrg if test "$pass" = conv; then 5270a7b590b3Smrg deplibs="$deplib $deplibs" 5271a7b590b3Smrg elif test "$linkmode" = prog; then 5272a7b590b3Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 5273a7b590b3Smrg # If there is no dlopen support or we're linking statically, 5274a7b590b3Smrg # we need to preload. 5275a7b590b3Smrg newdlprefiles="$newdlprefiles $deplib" 5276a7b590b3Smrg compile_deplibs="$deplib $compile_deplibs" 5277a7b590b3Smrg finalize_deplibs="$deplib $finalize_deplibs" 5278a7b590b3Smrg else 5279a7b590b3Smrg newdlfiles="$newdlfiles $deplib" 5280a7b590b3Smrg fi 5281a7b590b3Smrg fi 5282a7b590b3Smrg continue 5283a7b590b3Smrg ;; 5284a7b590b3Smrg %DEPLIBS%) 5285a7b590b3Smrg alldeplibs=yes 5286a7b590b3Smrg continue 5287a7b590b3Smrg ;; 5288a7b590b3Smrg esac # case $deplib 5289a7b590b3Smrg 5290a7b590b3Smrg if test "$found" = yes || test -f "$lib"; then : 5291a7b590b3Smrg else 5292a7b590b3Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 5293a7b590b3Smrg fi 5294a7b590b3Smrg 5295a7b590b3Smrg # Check to see that this really is a libtool archive. 5296a7b590b3Smrg func_lalib_unsafe_p "$lib" \ 5297a7b590b3Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 5298a7b590b3Smrg 5299a7b590b3Smrg func_dirname "$lib" "" "." 5300a7b590b3Smrg ladir="$func_dirname_result" 5301a7b590b3Smrg 5302a7b590b3Smrg dlname= 5303a7b590b3Smrg dlopen= 5304a7b590b3Smrg dlpreopen= 5305a7b590b3Smrg libdir= 5306a7b590b3Smrg library_names= 5307a7b590b3Smrg old_library= 5308a7b590b3Smrg inherited_linker_flags= 5309a7b590b3Smrg # If the library was installed with an old release of libtool, 5310a7b590b3Smrg # it will not redefine variables installed, or shouldnotlink 5311a7b590b3Smrg installed=yes 5312a7b590b3Smrg shouldnotlink=no 5313a7b590b3Smrg avoidtemprpath= 5314a7b590b3Smrg 5315a7b590b3Smrg 5316a7b590b3Smrg # Read the .la file 5317a7b590b3Smrg func_source "$lib" 5318a7b590b3Smrg 5319a7b590b3Smrg # Convert "-framework foo" to "foo.ltframework" 5320a7b590b3Smrg if test -n "$inherited_linker_flags"; then 5321a7b590b3Smrg tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` 5322a7b590b3Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 5323a7b590b3Smrg case " $new_inherited_linker_flags " in 5324a7b590b3Smrg *" $tmp_inherited_linker_flag "*) ;; 5325a7b590b3Smrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 5326a7b590b3Smrg esac 5327a7b590b3Smrg done 5328a7b590b3Smrg fi 5329a7b590b3Smrg dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 5330a7b590b3Smrg if test "$linkmode,$pass" = "lib,link" || 5331a7b590b3Smrg test "$linkmode,$pass" = "prog,scan" || 5332a7b590b3Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 5333a7b590b3Smrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 5334a7b590b3Smrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 5335a7b590b3Smrg fi 5336a7b590b3Smrg 5337a7b590b3Smrg if test "$pass" = conv; then 5338a7b590b3Smrg # Only check for convenience libraries 5339a7b590b3Smrg deplibs="$lib $deplibs" 5340a7b590b3Smrg if test -z "$libdir"; then 5341a7b590b3Smrg if test -z "$old_library"; then 5342a7b590b3Smrg func_fatal_error "cannot find name of link library for \`$lib'" 5343a7b590b3Smrg fi 5344a7b590b3Smrg # It is a libtool convenience library, so add in its objects. 5345a7b590b3Smrg convenience="$convenience $ladir/$objdir/$old_library" 5346a7b590b3Smrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 5347a7b590b3Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 5348a7b590b3Smrg func_fatal_error "\`$lib' is not a convenience library" 5349a7b590b3Smrg fi 5350a7b590b3Smrg tmp_libs= 5351a7b590b3Smrg for deplib in $dependency_libs; do 5352a7b590b3Smrg deplibs="$deplib $deplibs" 5353a7b590b3Smrg if $opt_duplicate_deps ; then 5354a7b590b3Smrg case "$tmp_libs " in 5355a7b590b3Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5356a7b590b3Smrg esac 5357a7b590b3Smrg fi 5358a7b590b3Smrg tmp_libs="$tmp_libs $deplib" 5359a7b590b3Smrg done 5360a7b590b3Smrg continue 5361a7b590b3Smrg fi # $pass = conv 5362a7b590b3Smrg 5363a7b590b3Smrg 5364a7b590b3Smrg # Get the name of the library we link against. 5365a7b590b3Smrg linklib= 5366a7b590b3Smrg for l in $old_library $library_names; do 5367a7b590b3Smrg linklib="$l" 5368a7b590b3Smrg done 5369a7b590b3Smrg if test -z "$linklib"; then 5370a7b590b3Smrg func_fatal_error "cannot find name of link library for \`$lib'" 5371a7b590b3Smrg fi 5372a7b590b3Smrg 5373a7b590b3Smrg # This library was specified with -dlopen. 5374a7b590b3Smrg if test "$pass" = dlopen; then 5375a7b590b3Smrg if test -z "$libdir"; then 5376a7b590b3Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 5377a7b590b3Smrg fi 5378a7b590b3Smrg if test -z "$dlname" || 5379a7b590b3Smrg test "$dlopen_support" != yes || 5380a7b590b3Smrg test "$build_libtool_libs" = no; then 5381a7b590b3Smrg # If there is no dlname, no dlopen support or we're linking 5382a7b590b3Smrg # statically, we need to preload. We also need to preload any 5383a7b590b3Smrg # dependent libraries so libltdl's deplib preloader doesn't 5384a7b590b3Smrg # bomb out in the load deplibs phase. 5385a7b590b3Smrg dlprefiles="$dlprefiles $lib $dependency_libs" 5386a7b590b3Smrg else 5387a7b590b3Smrg newdlfiles="$newdlfiles $lib" 5388a7b590b3Smrg fi 5389a7b590b3Smrg continue 5390a7b590b3Smrg fi # $pass = dlopen 5391a7b590b3Smrg 5392a7b590b3Smrg # We need an absolute path. 5393a7b590b3Smrg case $ladir in 5394a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 5395a7b590b3Smrg *) 5396a7b590b3Smrg abs_ladir=`cd "$ladir" && pwd` 5397a7b590b3Smrg if test -z "$abs_ladir"; then 5398a7b590b3Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 5399a7b590b3Smrg func_warning "passing it literally to the linker, although it might fail" 5400a7b590b3Smrg abs_ladir="$ladir" 5401a7b590b3Smrg fi 5402a7b590b3Smrg ;; 5403a7b590b3Smrg esac 5404a7b590b3Smrg func_basename "$lib" 5405a7b590b3Smrg laname="$func_basename_result" 5406a7b590b3Smrg 5407a7b590b3Smrg # Find the relevant object directory and library name. 5408a7b590b3Smrg if test "X$installed" = Xyes; then 5409a7b590b3Smrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5410a7b590b3Smrg func_warning "library \`$lib' was moved." 5411a7b590b3Smrg dir="$ladir" 5412a7b590b3Smrg absdir="$abs_ladir" 5413a7b590b3Smrg libdir="$abs_ladir" 5414a7b590b3Smrg else 5415a7b590b3Smrg dir="$libdir" 5416a7b590b3Smrg absdir="$libdir" 5417a7b590b3Smrg fi 5418a7b590b3Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 5419a7b590b3Smrg else 5420a7b590b3Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5421a7b590b3Smrg dir="$ladir" 5422a7b590b3Smrg absdir="$abs_ladir" 5423a7b590b3Smrg # Remove this search path later 5424a7b590b3Smrg notinst_path="$notinst_path $abs_ladir" 5425a7b590b3Smrg else 5426a7b590b3Smrg dir="$ladir/$objdir" 5427a7b590b3Smrg absdir="$abs_ladir/$objdir" 5428a7b590b3Smrg # Remove this search path later 5429a7b590b3Smrg notinst_path="$notinst_path $abs_ladir" 5430a7b590b3Smrg fi 5431a7b590b3Smrg fi # $installed = yes 5432a7b590b3Smrg func_stripname 'lib' '.la' "$laname" 5433a7b590b3Smrg name=$func_stripname_result 5434a7b590b3Smrg 5435a7b590b3Smrg # This library was specified with -dlpreopen. 5436a7b590b3Smrg if test "$pass" = dlpreopen; then 5437a7b590b3Smrg if test -z "$libdir" && test "$linkmode" = prog; then 5438a7b590b3Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 5439a7b590b3Smrg fi 5440a7b590b3Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 5441a7b590b3Smrg # are required to link). 5442a7b590b3Smrg if test -n "$old_library"; then 5443a7b590b3Smrg newdlprefiles="$newdlprefiles $dir/$old_library" 5444a7b590b3Smrg # Keep a list of preopened convenience libraries to check 5445a7b590b3Smrg # that they are being used correctly in the link pass. 5446a7b590b3Smrg test -z "$libdir" && \ 5447a7b590b3Smrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 5448a7b590b3Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 5449a7b590b3Smrg elif test -n "$dlname"; then 5450a7b590b3Smrg newdlprefiles="$newdlprefiles $dir/$dlname" 5451a7b590b3Smrg else 5452a7b590b3Smrg newdlprefiles="$newdlprefiles $dir/$linklib" 5453a7b590b3Smrg fi 5454a7b590b3Smrg fi # $pass = dlpreopen 5455a7b590b3Smrg 5456a7b590b3Smrg if test -z "$libdir"; then 5457a7b590b3Smrg # Link the convenience library 5458a7b590b3Smrg if test "$linkmode" = lib; then 5459a7b590b3Smrg deplibs="$dir/$old_library $deplibs" 5460a7b590b3Smrg elif test "$linkmode,$pass" = "prog,link"; then 5461a7b590b3Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 5462a7b590b3Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 5463a7b590b3Smrg else 5464a7b590b3Smrg deplibs="$lib $deplibs" # used for prog,scan pass 5465a7b590b3Smrg fi 5466a7b590b3Smrg continue 5467a7b590b3Smrg fi 5468a7b590b3Smrg 5469a7b590b3Smrg 5470a7b590b3Smrg if test "$linkmode" = prog && test "$pass" != link; then 5471a7b590b3Smrg newlib_search_path="$newlib_search_path $ladir" 5472a7b590b3Smrg deplibs="$lib $deplibs" 5473a7b590b3Smrg 5474a7b590b3Smrg linkalldeplibs=no 5475a7b590b3Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 5476a7b590b3Smrg test "$build_libtool_libs" = no; then 5477a7b590b3Smrg linkalldeplibs=yes 5478a7b590b3Smrg fi 5479a7b590b3Smrg 5480a7b590b3Smrg tmp_libs= 5481a7b590b3Smrg for deplib in $dependency_libs; do 5482a7b590b3Smrg case $deplib in 5483a7b590b3Smrg -L*) func_stripname '-L' '' "$deplib" 5484a7b590b3Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5485a7b590b3Smrg ;; 5486a7b590b3Smrg esac 5487a7b590b3Smrg # Need to link against all dependency_libs? 5488a7b590b3Smrg if test "$linkalldeplibs" = yes; then 5489a7b590b3Smrg deplibs="$deplib $deplibs" 5490a7b590b3Smrg else 5491a7b590b3Smrg # Need to hardcode shared library paths 5492a7b590b3Smrg # or/and link against static libraries 5493a7b590b3Smrg newdependency_libs="$deplib $newdependency_libs" 5494a7b590b3Smrg fi 5495a7b590b3Smrg if $opt_duplicate_deps ; then 5496a7b590b3Smrg case "$tmp_libs " in 5497a7b590b3Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5498a7b590b3Smrg esac 5499a7b590b3Smrg fi 5500a7b590b3Smrg tmp_libs="$tmp_libs $deplib" 5501a7b590b3Smrg done # for deplib 5502a7b590b3Smrg continue 5503a7b590b3Smrg fi # $linkmode = prog... 5504a7b590b3Smrg 5505a7b590b3Smrg if test "$linkmode,$pass" = "prog,link"; then 5506a7b590b3Smrg if test -n "$library_names" && 5507a7b590b3Smrg { { test "$prefer_static_libs" = no || 5508a7b590b3Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 5509a7b590b3Smrg test -z "$old_library"; }; then 5510a7b590b3Smrg # We need to hardcode the library path 5511a7b590b3Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 5512a7b590b3Smrg # Make sure the rpath contains only unique directories. 5513a7b590b3Smrg case "$temp_rpath:" in 5514a7b590b3Smrg *"$absdir:"*) ;; 5515a7b590b3Smrg *) temp_rpath="$temp_rpath$absdir:" ;; 5516a7b590b3Smrg esac 5517a7b590b3Smrg fi 5518a7b590b3Smrg 5519a7b590b3Smrg # Hardcode the library path. 5520a7b590b3Smrg # Skip directories that are in the system default run-time 5521a7b590b3Smrg # search path. 5522a7b590b3Smrg case " $sys_lib_dlsearch_path " in 5523a7b590b3Smrg *" $absdir "*) ;; 5524a7b590b3Smrg *) 5525a7b590b3Smrg case "$compile_rpath " in 5526a7b590b3Smrg *" $absdir "*) ;; 5527a7b590b3Smrg *) compile_rpath="$compile_rpath $absdir" 5528a7b590b3Smrg esac 5529a7b590b3Smrg ;; 5530a7b590b3Smrg esac 5531a7b590b3Smrg case " $sys_lib_dlsearch_path " in 5532a7b590b3Smrg *" $libdir "*) ;; 5533a7b590b3Smrg *) 5534a7b590b3Smrg case "$finalize_rpath " in 5535a7b590b3Smrg *" $libdir "*) ;; 5536a7b590b3Smrg *) finalize_rpath="$finalize_rpath $libdir" 5537a7b590b3Smrg esac 5538a7b590b3Smrg ;; 5539a7b590b3Smrg esac 5540a7b590b3Smrg fi # $linkmode,$pass = prog,link... 5541a7b590b3Smrg 5542a7b590b3Smrg if test "$alldeplibs" = yes && 5543a7b590b3Smrg { test "$deplibs_check_method" = pass_all || 5544a7b590b3Smrg { test "$build_libtool_libs" = yes && 5545a7b590b3Smrg test -n "$library_names"; }; }; then 5546a7b590b3Smrg # We only need to search for static libraries 5547a7b590b3Smrg continue 5548a7b590b3Smrg fi 5549a7b590b3Smrg fi 5550a7b590b3Smrg 5551a7b590b3Smrg link_static=no # Whether the deplib will be linked statically 5552a7b590b3Smrg use_static_libs=$prefer_static_libs 5553a7b590b3Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 5554a7b590b3Smrg use_static_libs=no 5555a7b590b3Smrg fi 5556a7b590b3Smrg if test -n "$library_names" && 5557a7b590b3Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 5558a7b590b3Smrg case $host in 5559a7b590b3Smrg *cygwin* | *mingw* | *cegcc*) 5560a7b590b3Smrg # No point in relinking DLLs because paths are not encoded 5561a7b590b3Smrg notinst_deplibs="$notinst_deplibs $lib" 5562a7b590b3Smrg need_relink=no 5563a7b590b3Smrg ;; 5564a7b590b3Smrg *) 5565a7b590b3Smrg if test "$installed" = no; then 5566a7b590b3Smrg notinst_deplibs="$notinst_deplibs $lib" 5567a7b590b3Smrg need_relink=yes 5568a7b590b3Smrg fi 5569a7b590b3Smrg ;; 5570a7b590b3Smrg esac 5571a7b590b3Smrg # This is a shared library 5572a7b590b3Smrg 5573a7b590b3Smrg # Warn about portability, can't link against -module's on some 5574a7b590b3Smrg # systems (darwin). Don't bleat about dlopened modules though! 5575a7b590b3Smrg dlopenmodule="" 5576a7b590b3Smrg for dlpremoduletest in $dlprefiles; do 5577a7b590b3Smrg if test "X$dlpremoduletest" = "X$lib"; then 5578a7b590b3Smrg dlopenmodule="$dlpremoduletest" 5579a7b590b3Smrg break 5580a7b590b3Smrg fi 5581a7b590b3Smrg done 5582a7b590b3Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 5583a7b590b3Smrg $ECHO 5584a7b590b3Smrg if test "$linkmode" = prog; then 5585a7b590b3Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 5586a7b590b3Smrg else 5587a7b590b3Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 5588a7b590b3Smrg fi 5589a7b590b3Smrg $ECHO "*** $linklib is not portable!" 5590a7b590b3Smrg fi 5591a7b590b3Smrg if test "$linkmode" = lib && 5592a7b590b3Smrg test "$hardcode_into_libs" = yes; then 5593a7b590b3Smrg # Hardcode the library path. 5594a7b590b3Smrg # Skip directories that are in the system default run-time 5595a7b590b3Smrg # search path. 5596a7b590b3Smrg case " $sys_lib_dlsearch_path " in 5597a7b590b3Smrg *" $absdir "*) ;; 5598a7b590b3Smrg *) 5599a7b590b3Smrg case "$compile_rpath " in 5600a7b590b3Smrg *" $absdir "*) ;; 5601a7b590b3Smrg *) compile_rpath="$compile_rpath $absdir" 5602a7b590b3Smrg esac 5603a7b590b3Smrg ;; 5604a7b590b3Smrg esac 5605a7b590b3Smrg case " $sys_lib_dlsearch_path " in 5606a7b590b3Smrg *" $libdir "*) ;; 5607a7b590b3Smrg *) 5608a7b590b3Smrg case "$finalize_rpath " in 5609a7b590b3Smrg *" $libdir "*) ;; 5610a7b590b3Smrg *) finalize_rpath="$finalize_rpath $libdir" 5611a7b590b3Smrg esac 5612a7b590b3Smrg ;; 5613a7b590b3Smrg esac 5614a7b590b3Smrg fi 5615a7b590b3Smrg 5616a7b590b3Smrg if test -n "$old_archive_from_expsyms_cmds"; then 5617a7b590b3Smrg # figure out the soname 5618a7b590b3Smrg set dummy $library_names 5619a7b590b3Smrg shift 5620a7b590b3Smrg realname="$1" 5621a7b590b3Smrg shift 5622a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 5623a7b590b3Smrg # use dlname if we got it. it's perfectly good, no? 5624a7b590b3Smrg if test -n "$dlname"; then 5625a7b590b3Smrg soname="$dlname" 5626a7b590b3Smrg elif test -n "$soname_spec"; then 5627a7b590b3Smrg # bleh windows 5628a7b590b3Smrg case $host in 5629a7b590b3Smrg *cygwin* | mingw* | *cegcc*) 5630a7b590b3Smrg func_arith $current - $age 5631a7b590b3Smrg major=$func_arith_result 5632a7b590b3Smrg versuffix="-$major" 5633a7b590b3Smrg ;; 5634a7b590b3Smrg esac 5635a7b590b3Smrg eval soname=\"$soname_spec\" 5636a7b590b3Smrg else 5637a7b590b3Smrg soname="$realname" 5638a7b590b3Smrg fi 5639a7b590b3Smrg 5640a7b590b3Smrg # Make a new name for the extract_expsyms_cmds to use 5641a7b590b3Smrg soroot="$soname" 5642a7b590b3Smrg func_basename "$soroot" 5643a7b590b3Smrg soname="$func_basename_result" 5644a7b590b3Smrg func_stripname 'lib' '.dll' "$soname" 5645a7b590b3Smrg newlib=libimp-$func_stripname_result.a 5646a7b590b3Smrg 5647a7b590b3Smrg # If the library has no export list, then create one now 5648a7b590b3Smrg if test -f "$output_objdir/$soname-def"; then : 5649a7b590b3Smrg else 5650a7b590b3Smrg func_verbose "extracting exported symbol list from \`$soname'" 5651a7b590b3Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 5652a7b590b3Smrg fi 5653a7b590b3Smrg 5654a7b590b3Smrg # Create $newlib 5655a7b590b3Smrg if test -f "$output_objdir/$newlib"; then :; else 5656a7b590b3Smrg func_verbose "generating import library for \`$soname'" 5657a7b590b3Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 5658a7b590b3Smrg fi 5659a7b590b3Smrg # make sure the library variables are pointing to the new library 5660a7b590b3Smrg dir=$output_objdir 5661a7b590b3Smrg linklib=$newlib 5662a7b590b3Smrg fi # test -n "$old_archive_from_expsyms_cmds" 5663a7b590b3Smrg 5664a7b590b3Smrg if test "$linkmode" = prog || test "$mode" != relink; then 5665a7b590b3Smrg add_shlibpath= 5666a7b590b3Smrg add_dir= 5667a7b590b3Smrg add= 5668a7b590b3Smrg lib_linked=yes 5669a7b590b3Smrg case $hardcode_action in 5670a7b590b3Smrg immediate | unsupported) 5671a7b590b3Smrg if test "$hardcode_direct" = no; then 5672a7b590b3Smrg add="$dir/$linklib" 5673a7b590b3Smrg case $host in 5674a7b590b3Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 5675a7b590b3Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 5676a7b590b3Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 5677a7b590b3Smrg *-*-unixware7*) add_dir="-L$dir" ;; 5678a7b590b3Smrg *-*-darwin* ) 5679a7b590b3Smrg # if the lib is a (non-dlopened) module then we can not 5680a7b590b3Smrg # link against it, someone is ignoring the earlier warnings 5681a7b590b3Smrg if /usr/bin/file -L $add 2> /dev/null | 5682a7b590b3Smrg $GREP ": [^:]* bundle" >/dev/null ; then 5683a7b590b3Smrg if test "X$dlopenmodule" != "X$lib"; then 5684a7b590b3Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 5685a7b590b3Smrg if test -z "$old_library" ; then 5686a7b590b3Smrg $ECHO 5687a7b590b3Smrg $ECHO "*** And there doesn't seem to be a static archive available" 5688a7b590b3Smrg $ECHO "*** The link will probably fail, sorry" 5689a7b590b3Smrg else 5690a7b590b3Smrg add="$dir/$old_library" 5691a7b590b3Smrg fi 5692a7b590b3Smrg elif test -n "$old_library"; then 5693a7b590b3Smrg add="$dir/$old_library" 5694a7b590b3Smrg fi 5695a7b590b3Smrg fi 5696a7b590b3Smrg esac 5697a7b590b3Smrg elif test "$hardcode_minus_L" = no; then 5698a7b590b3Smrg case $host in 5699a7b590b3Smrg *-*-sunos*) add_shlibpath="$dir" ;; 5700a7b590b3Smrg esac 5701a7b590b3Smrg add_dir="-L$dir" 5702a7b590b3Smrg add="-l$name" 5703a7b590b3Smrg elif test "$hardcode_shlibpath_var" = no; then 5704a7b590b3Smrg add_shlibpath="$dir" 5705a7b590b3Smrg add="-l$name" 5706a7b590b3Smrg else 5707a7b590b3Smrg lib_linked=no 5708a7b590b3Smrg fi 5709a7b590b3Smrg ;; 5710a7b590b3Smrg relink) 5711a7b590b3Smrg if test "$hardcode_direct" = yes && 5712a7b590b3Smrg test "$hardcode_direct_absolute" = no; then 5713a7b590b3Smrg add="$dir/$linklib" 5714a7b590b3Smrg elif test "$hardcode_minus_L" = yes; then 5715a7b590b3Smrg add_dir="-L$dir" 5716a7b590b3Smrg # Try looking first in the location we're being installed to. 5717a7b590b3Smrg if test -n "$inst_prefix_dir"; then 5718a7b590b3Smrg case $libdir in 5719a7b590b3Smrg [\\/]*) 5720a7b590b3Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 5721a7b590b3Smrg ;; 5722a7b590b3Smrg esac 5723a7b590b3Smrg fi 5724a7b590b3Smrg add="-l$name" 5725a7b590b3Smrg elif test "$hardcode_shlibpath_var" = yes; then 5726a7b590b3Smrg add_shlibpath="$dir" 5727a7b590b3Smrg add="-l$name" 5728a7b590b3Smrg else 5729a7b590b3Smrg lib_linked=no 5730a7b590b3Smrg fi 5731a7b590b3Smrg ;; 5732a7b590b3Smrg *) lib_linked=no ;; 5733a7b590b3Smrg esac 5734a7b590b3Smrg 5735a7b590b3Smrg if test "$lib_linked" != yes; then 5736a7b590b3Smrg func_fatal_configuration "unsupported hardcode properties" 5737a7b590b3Smrg fi 5738a7b590b3Smrg 5739a7b590b3Smrg if test -n "$add_shlibpath"; then 5740a7b590b3Smrg case :$compile_shlibpath: in 5741a7b590b3Smrg *":$add_shlibpath:"*) ;; 5742a7b590b3Smrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 5743a7b590b3Smrg esac 5744a7b590b3Smrg fi 5745a7b590b3Smrg if test "$linkmode" = prog; then 5746a7b590b3Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 5747a7b590b3Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 5748a7b590b3Smrg else 5749a7b590b3Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 5750a7b590b3Smrg test -n "$add" && deplibs="$add $deplibs" 5751a7b590b3Smrg if test "$hardcode_direct" != yes && 5752a7b590b3Smrg test "$hardcode_minus_L" != yes && 5753a7b590b3Smrg test "$hardcode_shlibpath_var" = yes; then 5754a7b590b3Smrg case :$finalize_shlibpath: in 5755a7b590b3Smrg *":$libdir:"*) ;; 5756a7b590b3Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 5757a7b590b3Smrg esac 5758a7b590b3Smrg fi 5759a7b590b3Smrg fi 5760a7b590b3Smrg fi 5761a7b590b3Smrg 5762a7b590b3Smrg if test "$linkmode" = prog || test "$mode" = relink; then 5763a7b590b3Smrg add_shlibpath= 5764a7b590b3Smrg add_dir= 5765a7b590b3Smrg add= 5766a7b590b3Smrg # Finalize command for both is simple: just hardcode it. 5767a7b590b3Smrg if test "$hardcode_direct" = yes && 5768a7b590b3Smrg test "$hardcode_direct_absolute" = no; then 5769a7b590b3Smrg add="$libdir/$linklib" 5770a7b590b3Smrg elif test "$hardcode_minus_L" = yes; then 5771a7b590b3Smrg add_dir="-L$libdir" 5772a7b590b3Smrg add="-l$name" 5773a7b590b3Smrg elif test "$hardcode_shlibpath_var" = yes; then 5774a7b590b3Smrg case :$finalize_shlibpath: in 5775a7b590b3Smrg *":$libdir:"*) ;; 5776a7b590b3Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 5777a7b590b3Smrg esac 5778a7b590b3Smrg add="-l$name" 5779a7b590b3Smrg elif test "$hardcode_automatic" = yes; then 5780a7b590b3Smrg if test -n "$inst_prefix_dir" && 5781a7b590b3Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 5782a7b590b3Smrg add="$inst_prefix_dir$libdir/$linklib" 5783a7b590b3Smrg else 5784a7b590b3Smrg add="$libdir/$linklib" 5785a7b590b3Smrg fi 5786a7b590b3Smrg else 5787a7b590b3Smrg # We cannot seem to hardcode it, guess we'll fake it. 5788a7b590b3Smrg add_dir="-L$libdir" 5789a7b590b3Smrg # Try looking first in the location we're being installed to. 5790a7b590b3Smrg if test -n "$inst_prefix_dir"; then 5791a7b590b3Smrg case $libdir in 5792a7b590b3Smrg [\\/]*) 5793a7b590b3Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 5794a7b590b3Smrg ;; 5795a7b590b3Smrg esac 5796a7b590b3Smrg fi 5797a7b590b3Smrg add="-l$name" 5798a7b590b3Smrg fi 5799a7b590b3Smrg 5800a7b590b3Smrg if test "$linkmode" = prog; then 5801a7b590b3Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 5802a7b590b3Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 5803a7b590b3Smrg else 5804a7b590b3Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 5805a7b590b3Smrg test -n "$add" && deplibs="$add $deplibs" 5806a7b590b3Smrg fi 5807a7b590b3Smrg fi 5808a7b590b3Smrg elif test "$linkmode" = prog; then 5809a7b590b3Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 5810a7b590b3Smrg # is not unsupported. This is valid on all known static and 5811a7b590b3Smrg # shared platforms. 5812a7b590b3Smrg if test "$hardcode_direct" != unsupported; then 5813a7b590b3Smrg test -n "$old_library" && linklib="$old_library" 5814a7b590b3Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 5815a7b590b3Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 5816a7b590b3Smrg else 5817a7b590b3Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 5818a7b590b3Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 5819a7b590b3Smrg fi 5820a7b590b3Smrg elif test "$build_libtool_libs" = yes; then 5821a7b590b3Smrg # Not a shared library 5822a7b590b3Smrg if test "$deplibs_check_method" != pass_all; then 5823a7b590b3Smrg # We're trying link a shared library against a static one 5824a7b590b3Smrg # but the system doesn't support it. 5825a7b590b3Smrg 5826a7b590b3Smrg # Just print a warning and add the library to dependency_libs so 5827a7b590b3Smrg # that the program can be linked against the static library. 5828a7b590b3Smrg $ECHO 5829a7b590b3Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 5830a7b590b3Smrg $ECHO "*** I have the capability to make that library automatically link in when" 5831a7b590b3Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 5832a7b590b3Smrg $ECHO "*** shared version of the library, which you do not appear to have." 5833a7b590b3Smrg if test "$module" = yes; then 5834a7b590b3Smrg $ECHO "*** But as you try to build a module library, libtool will still create " 5835a7b590b3Smrg $ECHO "*** a static module, that should work as long as the dlopening application" 5836a7b590b3Smrg $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." 5837a7b590b3Smrg if test -z "$global_symbol_pipe"; then 5838a7b590b3Smrg $ECHO 5839a7b590b3Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 5840a7b590b3Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 5841a7b590b3Smrg $ECHO "*** not find such a program. So, this module is probably useless." 5842a7b590b3Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 5843a7b590b3Smrg fi 5844a7b590b3Smrg if test "$build_old_libs" = no; then 5845a7b590b3Smrg build_libtool_libs=module 5846a7b590b3Smrg build_old_libs=yes 5847a7b590b3Smrg else 5848a7b590b3Smrg build_libtool_libs=no 5849a7b590b3Smrg fi 5850a7b590b3Smrg fi 5851a7b590b3Smrg else 5852a7b590b3Smrg deplibs="$dir/$old_library $deplibs" 5853a7b590b3Smrg link_static=yes 5854a7b590b3Smrg fi 5855a7b590b3Smrg fi # link shared/static library? 5856a7b590b3Smrg 5857a7b590b3Smrg if test "$linkmode" = lib; then 5858a7b590b3Smrg if test -n "$dependency_libs" && 5859a7b590b3Smrg { test "$hardcode_into_libs" != yes || 5860a7b590b3Smrg test "$build_old_libs" = yes || 5861a7b590b3Smrg test "$link_static" = yes; }; then 5862a7b590b3Smrg # Extract -R from dependency_libs 5863a7b590b3Smrg temp_deplibs= 5864a7b590b3Smrg for libdir in $dependency_libs; do 5865a7b590b3Smrg case $libdir in 5866a7b590b3Smrg -R*) func_stripname '-R' '' "$libdir" 5867a7b590b3Smrg temp_xrpath=$func_stripname_result 5868a7b590b3Smrg case " $xrpath " in 5869a7b590b3Smrg *" $temp_xrpath "*) ;; 5870a7b590b3Smrg *) xrpath="$xrpath $temp_xrpath";; 5871a7b590b3Smrg esac;; 5872a7b590b3Smrg *) temp_deplibs="$temp_deplibs $libdir";; 5873a7b590b3Smrg esac 5874a7b590b3Smrg done 5875a7b590b3Smrg dependency_libs="$temp_deplibs" 5876a7b590b3Smrg fi 5877a7b590b3Smrg 5878a7b590b3Smrg newlib_search_path="$newlib_search_path $absdir" 5879a7b590b3Smrg # Link against this library 5880a7b590b3Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 5881a7b590b3Smrg # ... and its dependency_libs 5882a7b590b3Smrg tmp_libs= 5883a7b590b3Smrg for deplib in $dependency_libs; do 5884a7b590b3Smrg newdependency_libs="$deplib $newdependency_libs" 5885a7b590b3Smrg if $opt_duplicate_deps ; then 5886a7b590b3Smrg case "$tmp_libs " in 5887a7b590b3Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5888a7b590b3Smrg esac 5889a7b590b3Smrg fi 5890a7b590b3Smrg tmp_libs="$tmp_libs $deplib" 5891a7b590b3Smrg done 5892a7b590b3Smrg 5893a7b590b3Smrg if test "$link_all_deplibs" != no; then 5894a7b590b3Smrg # Add the search paths of all dependency libraries 5895a7b590b3Smrg for deplib in $dependency_libs; do 5896a7b590b3Smrg case $deplib in 5897a7b590b3Smrg -L*) path="$deplib" ;; 5898a7b590b3Smrg *.la) 5899a7b590b3Smrg func_dirname "$deplib" "" "." 5900a7b590b3Smrg dir="$func_dirname_result" 5901a7b590b3Smrg # We need an absolute path. 5902a7b590b3Smrg case $dir in 5903a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 5904a7b590b3Smrg *) 5905a7b590b3Smrg absdir=`cd "$dir" && pwd` 5906a7b590b3Smrg if test -z "$absdir"; then 5907a7b590b3Smrg func_warning "cannot determine absolute directory name of \`$dir'" 5908a7b590b3Smrg absdir="$dir" 5909a7b590b3Smrg fi 5910a7b590b3Smrg ;; 5911a7b590b3Smrg esac 5912a7b590b3Smrg if $GREP "^installed=no" $deplib > /dev/null; then 5913a7b590b3Smrg case $host in 5914a7b590b3Smrg *-*-darwin*) 5915a7b590b3Smrg depdepl= 5916a7b590b3Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 5917a7b590b3Smrg if test -n "$deplibrary_names" ; then 5918a7b590b3Smrg for tmp in $deplibrary_names ; do 5919a7b590b3Smrg depdepl=$tmp 5920a7b590b3Smrg done 5921a7b590b3Smrg if test -f "$absdir/$objdir/$depdepl" ; then 5922a7b590b3Smrg depdepl="$absdir/$objdir/$depdepl" 5923a7b590b3Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 5924a7b590b3Smrg if test -z "$darwin_install_name"; then 5925a7b590b3Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 5926a7b590b3Smrg fi 5927a7b590b3Smrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 5928a7b590b3Smrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 5929a7b590b3Smrg path= 5930a7b590b3Smrg fi 5931a7b590b3Smrg fi 5932a7b590b3Smrg ;; 5933a7b590b3Smrg *) 5934a7b590b3Smrg path="-L$absdir/$objdir" 5935a7b590b3Smrg ;; 5936a7b590b3Smrg esac 5937a7b590b3Smrg else 5938a7b590b3Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 5939a7b590b3Smrg test -z "$libdir" && \ 5940a7b590b3Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 5941a7b590b3Smrg test "$absdir" != "$libdir" && \ 5942a7b590b3Smrg func_warning "\`$deplib' seems to be moved" 5943a7b590b3Smrg 5944a7b590b3Smrg path="-L$absdir" 5945a7b590b3Smrg fi 5946a7b590b3Smrg ;; 5947a7b590b3Smrg esac 5948a7b590b3Smrg case " $deplibs " in 5949a7b590b3Smrg *" $path "*) ;; 5950a7b590b3Smrg *) deplibs="$path $deplibs" ;; 5951a7b590b3Smrg esac 5952a7b590b3Smrg done 5953a7b590b3Smrg fi # link_all_deplibs != no 5954a7b590b3Smrg fi # linkmode = lib 5955a7b590b3Smrg done # for deplib in $libs 5956a7b590b3Smrg if test "$pass" = link; then 5957a7b590b3Smrg if test "$linkmode" = "prog"; then 5958a7b590b3Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 5959a7b590b3Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 5960a7b590b3Smrg else 5961a7b590b3Smrg compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 5962a7b590b3Smrg fi 5963a7b590b3Smrg fi 5964a7b590b3Smrg dependency_libs="$newdependency_libs" 5965a7b590b3Smrg if test "$pass" = dlpreopen; then 5966a7b590b3Smrg # Link the dlpreopened libraries before other libraries 5967a7b590b3Smrg for deplib in $save_deplibs; do 5968a7b590b3Smrg deplibs="$deplib $deplibs" 5969a7b590b3Smrg done 5970a7b590b3Smrg fi 5971a7b590b3Smrg if test "$pass" != dlopen; then 5972a7b590b3Smrg if test "$pass" != conv; then 5973a7b590b3Smrg # Make sure lib_search_path contains only unique directories. 5974a7b590b3Smrg lib_search_path= 5975a7b590b3Smrg for dir in $newlib_search_path; do 5976a7b590b3Smrg case "$lib_search_path " in 5977a7b590b3Smrg *" $dir "*) ;; 5978a7b590b3Smrg *) lib_search_path="$lib_search_path $dir" ;; 5979a7b590b3Smrg esac 5980a7b590b3Smrg done 5981a7b590b3Smrg newlib_search_path= 5982a7b590b3Smrg fi 5983a7b590b3Smrg 5984a7b590b3Smrg if test "$linkmode,$pass" != "prog,link"; then 5985a7b590b3Smrg vars="deplibs" 5986a7b590b3Smrg else 5987a7b590b3Smrg vars="compile_deplibs finalize_deplibs" 5988a7b590b3Smrg fi 5989a7b590b3Smrg for var in $vars dependency_libs; do 5990a7b590b3Smrg # Add libraries to $var in reverse order 5991a7b590b3Smrg eval tmp_libs=\"\$$var\" 5992a7b590b3Smrg new_libs= 5993a7b590b3Smrg for deplib in $tmp_libs; do 5994a7b590b3Smrg # FIXME: Pedantically, this is the right thing to do, so 5995a7b590b3Smrg # that some nasty dependency loop isn't accidentally 5996a7b590b3Smrg # broken: 5997a7b590b3Smrg #new_libs="$deplib $new_libs" 5998a7b590b3Smrg # Pragmatically, this seems to cause very few problems in 5999a7b590b3Smrg # practice: 6000a7b590b3Smrg case $deplib in 6001a7b590b3Smrg -L*) new_libs="$deplib $new_libs" ;; 6002a7b590b3Smrg -R*) ;; 6003a7b590b3Smrg *) 6004a7b590b3Smrg # And here is the reason: when a library appears more 6005a7b590b3Smrg # than once as an explicit dependence of a library, or 6006a7b590b3Smrg # is implicitly linked in more than once by the 6007a7b590b3Smrg # compiler, it is considered special, and multiple 6008a7b590b3Smrg # occurrences thereof are not removed. Compare this 6009a7b590b3Smrg # with having the same library being listed as a 6010a7b590b3Smrg # dependency of multiple other libraries: in this case, 6011a7b590b3Smrg # we know (pedantically, we assume) the library does not 6012a7b590b3Smrg # need to be listed more than once, so we keep only the 6013a7b590b3Smrg # last copy. This is not always right, but it is rare 6014a7b590b3Smrg # enough that we require users that really mean to play 6015a7b590b3Smrg # such unportable linking tricks to link the library 6016a7b590b3Smrg # using -Wl,-lname, so that libtool does not consider it 6017a7b590b3Smrg # for duplicate removal. 6018a7b590b3Smrg case " $specialdeplibs " in 6019a7b590b3Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 6020a7b590b3Smrg *) 6021a7b590b3Smrg case " $new_libs " in 6022a7b590b3Smrg *" $deplib "*) ;; 6023a7b590b3Smrg *) new_libs="$deplib $new_libs" ;; 6024a7b590b3Smrg esac 6025a7b590b3Smrg ;; 6026a7b590b3Smrg esac 6027a7b590b3Smrg ;; 6028a7b590b3Smrg esac 6029a7b590b3Smrg done 6030a7b590b3Smrg tmp_libs= 6031a7b590b3Smrg for deplib in $new_libs; do 6032a7b590b3Smrg case $deplib in 6033a7b590b3Smrg -L*) 6034a7b590b3Smrg case " $tmp_libs " in 6035a7b590b3Smrg *" $deplib "*) ;; 6036a7b590b3Smrg *) tmp_libs="$tmp_libs $deplib" ;; 6037a7b590b3Smrg esac 6038a7b590b3Smrg ;; 6039a7b590b3Smrg *) tmp_libs="$tmp_libs $deplib" ;; 6040a7b590b3Smrg esac 6041a7b590b3Smrg done 6042a7b590b3Smrg eval $var=\"$tmp_libs\" 6043a7b590b3Smrg done # for var 6044a7b590b3Smrg fi 6045a7b590b3Smrg # Last step: remove runtime libs from dependency_libs 6046a7b590b3Smrg # (they stay in deplibs) 6047a7b590b3Smrg tmp_libs= 6048a7b590b3Smrg for i in $dependency_libs ; do 6049a7b590b3Smrg case " $predeps $postdeps $compiler_lib_search_path " in 6050a7b590b3Smrg *" $i "*) 6051a7b590b3Smrg i="" 6052a7b590b3Smrg ;; 6053a7b590b3Smrg esac 6054a7b590b3Smrg if test -n "$i" ; then 6055a7b590b3Smrg tmp_libs="$tmp_libs $i" 6056a7b590b3Smrg fi 6057a7b590b3Smrg done 6058a7b590b3Smrg dependency_libs=$tmp_libs 6059a7b590b3Smrg done # for pass 6060a7b590b3Smrg if test "$linkmode" = prog; then 6061a7b590b3Smrg dlfiles="$newdlfiles" 6062a7b590b3Smrg fi 6063a7b590b3Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 6064a7b590b3Smrg dlprefiles="$newdlprefiles" 6065a7b590b3Smrg fi 6066a7b590b3Smrg 6067a7b590b3Smrg case $linkmode in 6068a7b590b3Smrg oldlib) 6069a7b590b3Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 6070a7b590b3Smrg func_warning "\`-dlopen' is ignored for archives" 6071a7b590b3Smrg fi 6072a7b590b3Smrg 6073a7b590b3Smrg case " $deplibs" in 6074a7b590b3Smrg *\ -l* | *\ -L*) 6075a7b590b3Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 6076a7b590b3Smrg esac 6077a7b590b3Smrg 6078a7b590b3Smrg test -n "$rpath" && \ 6079a7b590b3Smrg func_warning "\`-rpath' is ignored for archives" 6080a7b590b3Smrg 6081a7b590b3Smrg test -n "$xrpath" && \ 6082a7b590b3Smrg func_warning "\`-R' is ignored for archives" 6083a7b590b3Smrg 6084a7b590b3Smrg test -n "$vinfo" && \ 6085a7b590b3Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 6086a7b590b3Smrg 6087a7b590b3Smrg test -n "$release" && \ 6088a7b590b3Smrg func_warning "\`-release' is ignored for archives" 6089a7b590b3Smrg 6090a7b590b3Smrg test -n "$export_symbols$export_symbols_regex" && \ 6091a7b590b3Smrg func_warning "\`-export-symbols' is ignored for archives" 6092a7b590b3Smrg 6093a7b590b3Smrg # Now set the variables for building old libraries. 6094a7b590b3Smrg build_libtool_libs=no 6095a7b590b3Smrg oldlibs="$output" 6096a7b590b3Smrg objs="$objs$old_deplibs" 6097a7b590b3Smrg ;; 6098a7b590b3Smrg 6099a7b590b3Smrg lib) 6100a7b590b3Smrg # Make sure we only generate libraries of the form `libNAME.la'. 6101a7b590b3Smrg case $outputname in 6102a7b590b3Smrg lib*) 6103a7b590b3Smrg func_stripname 'lib' '.la' "$outputname" 6104a7b590b3Smrg name=$func_stripname_result 6105a7b590b3Smrg eval shared_ext=\"$shrext_cmds\" 6106a7b590b3Smrg eval libname=\"$libname_spec\" 6107a7b590b3Smrg ;; 6108a7b590b3Smrg *) 6109a7b590b3Smrg test "$module" = no && \ 6110a7b590b3Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 6111a7b590b3Smrg 6112a7b590b3Smrg if test "$need_lib_prefix" != no; then 6113a7b590b3Smrg # Add the "lib" prefix for modules if required 6114a7b590b3Smrg func_stripname '' '.la' "$outputname" 6115a7b590b3Smrg name=$func_stripname_result 6116a7b590b3Smrg eval shared_ext=\"$shrext_cmds\" 6117a7b590b3Smrg eval libname=\"$libname_spec\" 6118a7b590b3Smrg else 6119a7b590b3Smrg func_stripname '' '.la' "$outputname" 6120a7b590b3Smrg libname=$func_stripname_result 6121a7b590b3Smrg fi 6122a7b590b3Smrg ;; 6123a7b590b3Smrg esac 6124a7b590b3Smrg 6125a7b590b3Smrg if test -n "$objs"; then 6126a7b590b3Smrg if test "$deplibs_check_method" != pass_all; then 6127a7b590b3Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 6128a7b590b3Smrg else 6129a7b590b3Smrg $ECHO 6130a7b590b3Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 6131a7b590b3Smrg $ECHO "*** objects $objs is not portable!" 6132a7b590b3Smrg libobjs="$libobjs $objs" 6133a7b590b3Smrg fi 6134a7b590b3Smrg fi 6135a7b590b3Smrg 6136a7b590b3Smrg test "$dlself" != no && \ 6137a7b590b3Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 6138a7b590b3Smrg 6139a7b590b3Smrg set dummy $rpath 6140a7b590b3Smrg shift 6141a7b590b3Smrg test "$#" -gt 1 && \ 6142a7b590b3Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 6143a7b590b3Smrg 6144a7b590b3Smrg install_libdir="$1" 6145a7b590b3Smrg 6146a7b590b3Smrg oldlibs= 6147a7b590b3Smrg if test -z "$rpath"; then 6148a7b590b3Smrg if test "$build_libtool_libs" = yes; then 6149a7b590b3Smrg # Building a libtool convenience library. 6150a7b590b3Smrg # Some compilers have problems with a `.al' extension so 6151a7b590b3Smrg # convenience libraries should have the same extension an 6152a7b590b3Smrg # archive normally would. 6153a7b590b3Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 6154a7b590b3Smrg build_libtool_libs=convenience 6155a7b590b3Smrg build_old_libs=yes 6156a7b590b3Smrg fi 6157a7b590b3Smrg 6158a7b590b3Smrg test -n "$vinfo" && \ 6159a7b590b3Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 6160a7b590b3Smrg 6161a7b590b3Smrg test -n "$release" && \ 6162a7b590b3Smrg func_warning "\`-release' is ignored for convenience libraries" 6163a7b590b3Smrg else 6164a7b590b3Smrg 6165a7b590b3Smrg # Parse the version information argument. 6166a7b590b3Smrg save_ifs="$IFS"; IFS=':' 6167a7b590b3Smrg set dummy $vinfo 0 0 0 6168a7b590b3Smrg shift 6169a7b590b3Smrg IFS="$save_ifs" 6170a7b590b3Smrg 6171a7b590b3Smrg test -n "$7" && \ 6172a7b590b3Smrg func_fatal_help "too many parameters to \`-version-info'" 6173a7b590b3Smrg 6174a7b590b3Smrg # convert absolute version numbers to libtool ages 6175a7b590b3Smrg # this retains compatibility with .la files and attempts 6176a7b590b3Smrg # to make the code below a bit more comprehensible 6177a7b590b3Smrg 6178a7b590b3Smrg case $vinfo_number in 6179a7b590b3Smrg yes) 6180a7b590b3Smrg number_major="$1" 6181a7b590b3Smrg number_minor="$2" 6182a7b590b3Smrg number_revision="$3" 6183a7b590b3Smrg # 6184a7b590b3Smrg # There are really only two kinds -- those that 6185a7b590b3Smrg # use the current revision as the major version 6186a7b590b3Smrg # and those that subtract age and use age as 6187a7b590b3Smrg # a minor version. But, then there is irix 6188a7b590b3Smrg # which has an extra 1 added just for fun 6189a7b590b3Smrg # 6190a7b590b3Smrg case $version_type in 6191a7b590b3Smrg darwin|linux|osf|windows|none) 6192a7b590b3Smrg func_arith $number_major + $number_minor 6193a7b590b3Smrg current=$func_arith_result 6194a7b590b3Smrg age="$number_minor" 6195a7b590b3Smrg revision="$number_revision" 6196a7b590b3Smrg ;; 6197a7b590b3Smrg freebsd-aout|freebsd-elf|sunos) 6198a7b590b3Smrg current="$number_major" 6199a7b590b3Smrg revision="$number_minor" 6200a7b590b3Smrg age="0" 6201a7b590b3Smrg ;; 6202a7b590b3Smrg irix|nonstopux) 6203a7b590b3Smrg func_arith $number_major + $number_minor 6204a7b590b3Smrg current=$func_arith_result 6205a7b590b3Smrg age="$number_minor" 6206a7b590b3Smrg revision="$number_minor" 6207a7b590b3Smrg lt_irix_increment=no 6208a7b590b3Smrg ;; 6209a7b590b3Smrg esac 6210a7b590b3Smrg ;; 6211a7b590b3Smrg no) 6212a7b590b3Smrg current="$1" 6213a7b590b3Smrg revision="$2" 6214a7b590b3Smrg age="$3" 6215a7b590b3Smrg ;; 6216a7b590b3Smrg esac 6217a7b590b3Smrg 6218a7b590b3Smrg # Check that each of the things are valid numbers. 6219a7b590b3Smrg case $current in 6220a7b590b3Smrg 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]) ;; 6221a7b590b3Smrg *) 6222a7b590b3Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 6223a7b590b3Smrg func_fatal_error "\`$vinfo' is not valid version information" 6224a7b590b3Smrg ;; 6225a7b590b3Smrg esac 6226a7b590b3Smrg 6227a7b590b3Smrg case $revision in 6228a7b590b3Smrg 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]) ;; 6229a7b590b3Smrg *) 6230a7b590b3Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 6231a7b590b3Smrg func_fatal_error "\`$vinfo' is not valid version information" 6232a7b590b3Smrg ;; 6233a7b590b3Smrg esac 6234a7b590b3Smrg 6235a7b590b3Smrg case $age in 6236a7b590b3Smrg 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]) ;; 6237a7b590b3Smrg *) 6238a7b590b3Smrg func_error "AGE \`$age' must be a nonnegative integer" 6239a7b590b3Smrg func_fatal_error "\`$vinfo' is not valid version information" 6240a7b590b3Smrg ;; 6241a7b590b3Smrg esac 6242a7b590b3Smrg 6243a7b590b3Smrg if test "$age" -gt "$current"; then 6244a7b590b3Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 6245a7b590b3Smrg func_fatal_error "\`$vinfo' is not valid version information" 6246a7b590b3Smrg fi 6247a7b590b3Smrg 6248a7b590b3Smrg # Calculate the version variables. 6249a7b590b3Smrg major= 6250a7b590b3Smrg versuffix= 6251a7b590b3Smrg verstring= 6252a7b590b3Smrg case $version_type in 6253a7b590b3Smrg none) ;; 6254a7b590b3Smrg 6255a7b590b3Smrg darwin) 6256a7b590b3Smrg # Like Linux, but with the current version available in 6257a7b590b3Smrg # verstring for coding it into the library header 6258a7b590b3Smrg func_arith $current - $age 6259a7b590b3Smrg major=.$func_arith_result 6260a7b590b3Smrg versuffix="$major.$age.$revision" 6261a7b590b3Smrg # Darwin ld doesn't like 0 for these options... 6262a7b590b3Smrg func_arith $current + 1 6263a7b590b3Smrg minor_current=$func_arith_result 6264a7b590b3Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 6265a7b590b3Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 6266a7b590b3Smrg ;; 6267a7b590b3Smrg 6268a7b590b3Smrg freebsd-aout) 6269a7b590b3Smrg major=".$current" 6270a7b590b3Smrg versuffix=".$current.$revision"; 6271a7b590b3Smrg ;; 6272a7b590b3Smrg 6273a7b590b3Smrg freebsd-elf) 6274a7b590b3Smrg major=".$current" 6275a7b590b3Smrg versuffix=".$current" 6276a7b590b3Smrg ;; 6277a7b590b3Smrg 6278a7b590b3Smrg irix | nonstopux) 6279a7b590b3Smrg if test "X$lt_irix_increment" = "Xno"; then 6280a7b590b3Smrg func_arith $current - $age 6281a7b590b3Smrg else 6282a7b590b3Smrg func_arith $current - $age + 1 6283a7b590b3Smrg fi 6284a7b590b3Smrg major=$func_arith_result 6285a7b590b3Smrg 6286a7b590b3Smrg case $version_type in 6287a7b590b3Smrg nonstopux) verstring_prefix=nonstopux ;; 6288a7b590b3Smrg *) verstring_prefix=sgi ;; 6289a7b590b3Smrg esac 6290a7b590b3Smrg verstring="$verstring_prefix$major.$revision" 6291a7b590b3Smrg 6292a7b590b3Smrg # Add in all the interfaces that we are compatible with. 6293a7b590b3Smrg loop=$revision 6294a7b590b3Smrg while test "$loop" -ne 0; do 6295a7b590b3Smrg func_arith $revision - $loop 6296a7b590b3Smrg iface=$func_arith_result 6297a7b590b3Smrg func_arith $loop - 1 6298a7b590b3Smrg loop=$func_arith_result 6299a7b590b3Smrg verstring="$verstring_prefix$major.$iface:$verstring" 6300a7b590b3Smrg done 6301a7b590b3Smrg 6302a7b590b3Smrg # Before this point, $major must not contain `.'. 6303a7b590b3Smrg major=.$major 6304a7b590b3Smrg versuffix="$major.$revision" 6305a7b590b3Smrg ;; 6306a7b590b3Smrg 6307a7b590b3Smrg linux) 6308a7b590b3Smrg func_arith $current - $age 6309a7b590b3Smrg major=.$func_arith_result 6310a7b590b3Smrg versuffix="$major.$age.$revision" 6311a7b590b3Smrg ;; 6312a7b590b3Smrg 6313a7b590b3Smrg osf) 6314a7b590b3Smrg func_arith $current - $age 6315a7b590b3Smrg major=.$func_arith_result 6316a7b590b3Smrg versuffix=".$current.$age.$revision" 6317a7b590b3Smrg verstring="$current.$age.$revision" 6318a7b590b3Smrg 6319a7b590b3Smrg # Add in all the interfaces that we are compatible with. 6320a7b590b3Smrg loop=$age 6321a7b590b3Smrg while test "$loop" -ne 0; do 6322a7b590b3Smrg func_arith $current - $loop 6323a7b590b3Smrg iface=$func_arith_result 6324a7b590b3Smrg func_arith $loop - 1 6325a7b590b3Smrg loop=$func_arith_result 6326a7b590b3Smrg verstring="$verstring:${iface}.0" 6327a7b590b3Smrg done 6328a7b590b3Smrg 6329a7b590b3Smrg # Make executables depend on our current version. 6330a7b590b3Smrg verstring="$verstring:${current}.0" 6331a7b590b3Smrg ;; 6332a7b590b3Smrg 6333a7b590b3Smrg qnx) 6334a7b590b3Smrg major=".$current" 6335a7b590b3Smrg versuffix=".$current" 6336a7b590b3Smrg ;; 6337a7b590b3Smrg 6338a7b590b3Smrg sunos) 6339a7b590b3Smrg major=".$current" 6340a7b590b3Smrg versuffix=".$current.$revision" 6341a7b590b3Smrg ;; 6342a7b590b3Smrg 6343a7b590b3Smrg windows) 6344a7b590b3Smrg # Use '-' rather than '.', since we only want one 6345a7b590b3Smrg # extension on DOS 8.3 filesystems. 6346a7b590b3Smrg func_arith $current - $age 6347a7b590b3Smrg major=$func_arith_result 6348a7b590b3Smrg versuffix="-$major" 6349a7b590b3Smrg ;; 6350a7b590b3Smrg 6351a7b590b3Smrg *) 6352a7b590b3Smrg func_fatal_configuration "unknown library version type \`$version_type'" 6353a7b590b3Smrg ;; 6354a7b590b3Smrg esac 6355a7b590b3Smrg 6356a7b590b3Smrg # Clear the version info if we defaulted, and they specified a release. 6357a7b590b3Smrg if test -z "$vinfo" && test -n "$release"; then 6358a7b590b3Smrg major= 6359a7b590b3Smrg case $version_type in 6360a7b590b3Smrg darwin) 6361a7b590b3Smrg # we can't check for "0.0" in archive_cmds due to quoting 6362a7b590b3Smrg # problems, so we reset it completely 6363a7b590b3Smrg verstring= 6364a7b590b3Smrg ;; 6365a7b590b3Smrg *) 6366a7b590b3Smrg verstring="0.0" 6367a7b590b3Smrg ;; 6368a7b590b3Smrg esac 6369a7b590b3Smrg if test "$need_version" = no; then 6370a7b590b3Smrg versuffix= 6371a7b590b3Smrg else 6372a7b590b3Smrg versuffix=".0.0" 6373a7b590b3Smrg fi 6374a7b590b3Smrg fi 6375a7b590b3Smrg 6376a7b590b3Smrg # Remove version info from name if versioning should be avoided 6377a7b590b3Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 6378a7b590b3Smrg major= 6379a7b590b3Smrg versuffix= 6380a7b590b3Smrg verstring="" 6381a7b590b3Smrg fi 6382a7b590b3Smrg 6383a7b590b3Smrg # Check to see if the archive will have undefined symbols. 6384a7b590b3Smrg if test "$allow_undefined" = yes; then 6385a7b590b3Smrg if test "$allow_undefined_flag" = unsupported; then 6386a7b590b3Smrg func_warning "undefined symbols not allowed in $host shared libraries" 6387a7b590b3Smrg build_libtool_libs=no 6388a7b590b3Smrg build_old_libs=yes 6389a7b590b3Smrg fi 6390a7b590b3Smrg else 6391a7b590b3Smrg # Don't allow undefined symbols. 6392a7b590b3Smrg allow_undefined_flag="$no_undefined_flag" 6393a7b590b3Smrg fi 6394a7b590b3Smrg 6395a7b590b3Smrg fi 6396a7b590b3Smrg 6397a7b590b3Smrg func_generate_dlsyms "$libname" "$libname" "yes" 6398a7b590b3Smrg libobjs="$libobjs $symfileobj" 6399a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 6400a7b590b3Smrg 6401a7b590b3Smrg if test "$mode" != relink; then 6402a7b590b3Smrg # Remove our outputs, but don't remove object files since they 6403a7b590b3Smrg # may have been created when compiling PIC objects. 6404a7b590b3Smrg removelist= 6405a7b590b3Smrg tempremovelist=`$ECHO "$output_objdir/*"` 6406a7b590b3Smrg for p in $tempremovelist; do 6407a7b590b3Smrg case $p in 6408a7b590b3Smrg *.$objext | *.gcno) 6409a7b590b3Smrg ;; 6410a7b590b3Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 6411a7b590b3Smrg if test "X$precious_files_regex" != "X"; then 6412a7b590b3Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 6413a7b590b3Smrg then 6414a7b590b3Smrg continue 6415a7b590b3Smrg fi 6416a7b590b3Smrg fi 6417a7b590b3Smrg removelist="$removelist $p" 6418a7b590b3Smrg ;; 6419a7b590b3Smrg *) ;; 6420a7b590b3Smrg esac 6421a7b590b3Smrg done 6422a7b590b3Smrg test -n "$removelist" && \ 6423a7b590b3Smrg func_show_eval "${RM}r \$removelist" 6424a7b590b3Smrg fi 6425a7b590b3Smrg 6426a7b590b3Smrg # Now set the variables for building old libraries. 6427a7b590b3Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 6428a7b590b3Smrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 6429a7b590b3Smrg 6430a7b590b3Smrg # Transform .lo files to .o files. 6431a7b590b3Smrg oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 6432a7b590b3Smrg fi 6433a7b590b3Smrg 6434a7b590b3Smrg # Eliminate all temporary directories. 6435a7b590b3Smrg #for path in $notinst_path; do 6436a7b590b3Smrg # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` 6437a7b590b3Smrg # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` 6438a7b590b3Smrg # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` 6439a7b590b3Smrg #done 6440a7b590b3Smrg 6441a7b590b3Smrg if test -n "$xrpath"; then 6442a7b590b3Smrg # If the user specified any rpath flags, then add them. 6443a7b590b3Smrg temp_xrpath= 6444a7b590b3Smrg for libdir in $xrpath; do 6445a7b590b3Smrg temp_xrpath="$temp_xrpath -R$libdir" 6446a7b590b3Smrg case "$finalize_rpath " in 6447a7b590b3Smrg *" $libdir "*) ;; 6448a7b590b3Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 6449a7b590b3Smrg esac 6450a7b590b3Smrg done 6451a7b590b3Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 6452a7b590b3Smrg dependency_libs="$temp_xrpath $dependency_libs" 6453a7b590b3Smrg fi 6454a7b590b3Smrg fi 6455a7b590b3Smrg 6456a7b590b3Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 6457a7b590b3Smrg old_dlfiles="$dlfiles" 6458a7b590b3Smrg dlfiles= 6459a7b590b3Smrg for lib in $old_dlfiles; do 6460a7b590b3Smrg case " $dlprefiles $dlfiles " in 6461a7b590b3Smrg *" $lib "*) ;; 6462a7b590b3Smrg *) dlfiles="$dlfiles $lib" ;; 6463a7b590b3Smrg esac 6464a7b590b3Smrg done 6465a7b590b3Smrg 6466a7b590b3Smrg # Make sure dlprefiles contains only unique files 6467a7b590b3Smrg old_dlprefiles="$dlprefiles" 6468a7b590b3Smrg dlprefiles= 6469a7b590b3Smrg for lib in $old_dlprefiles; do 6470a7b590b3Smrg case "$dlprefiles " in 6471a7b590b3Smrg *" $lib "*) ;; 6472a7b590b3Smrg *) dlprefiles="$dlprefiles $lib" ;; 6473a7b590b3Smrg esac 6474a7b590b3Smrg done 6475a7b590b3Smrg 6476a7b590b3Smrg if test "$build_libtool_libs" = yes; then 6477a7b590b3Smrg if test -n "$rpath"; then 6478a7b590b3Smrg case $host in 6479a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) 6480a7b590b3Smrg # these systems don't actually have a c library (as such)! 6481a7b590b3Smrg ;; 6482a7b590b3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 6483a7b590b3Smrg # Rhapsody C library is in the System framework 6484a7b590b3Smrg deplibs="$deplibs System.ltframework" 6485a7b590b3Smrg ;; 6486a7b590b3Smrg *-*-netbsd*) 6487a7b590b3Smrg # Don't link with libc until the a.out ld.so is fixed. 6488a7b590b3Smrg ;; 6489a7b590b3Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 6490a7b590b3Smrg # Do not include libc due to us having libc/libc_r. 6491a7b590b3Smrg ;; 6492a7b590b3Smrg *-*-sco3.2v5* | *-*-sco5v6*) 6493a7b590b3Smrg # Causes problems with __ctype 6494a7b590b3Smrg ;; 6495a7b590b3Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 6496a7b590b3Smrg # Compiler inserts libc in the correct place for threads to work 6497a7b590b3Smrg ;; 6498a7b590b3Smrg *) 6499a7b590b3Smrg # Add libc to deplibs on all other systems if necessary. 6500a7b590b3Smrg if test "$build_libtool_need_lc" = "yes"; then 6501a7b590b3Smrg deplibs="$deplibs -lc" 6502a7b590b3Smrg fi 6503a7b590b3Smrg ;; 6504a7b590b3Smrg esac 6505a7b590b3Smrg fi 6506a7b590b3Smrg 6507a7b590b3Smrg # Transform deplibs into only deplibs that can be linked in shared. 6508a7b590b3Smrg name_save=$name 6509a7b590b3Smrg libname_save=$libname 6510a7b590b3Smrg release_save=$release 6511a7b590b3Smrg versuffix_save=$versuffix 6512a7b590b3Smrg major_save=$major 6513a7b590b3Smrg # I'm not sure if I'm treating the release correctly. I think 6514a7b590b3Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 6515a7b590b3Smrg # add it in twice. Is that correct? 6516a7b590b3Smrg release="" 6517a7b590b3Smrg versuffix="" 6518a7b590b3Smrg major="" 6519a7b590b3Smrg newdeplibs= 6520a7b590b3Smrg droppeddeps=no 6521a7b590b3Smrg case $deplibs_check_method in 6522a7b590b3Smrg pass_all) 6523a7b590b3Smrg # Don't check for shared/static. Everything works. 6524a7b590b3Smrg # This might be a little naive. We might want to check 6525a7b590b3Smrg # whether the library exists or not. But this is on 6526a7b590b3Smrg # osf3 & osf4 and I'm not really sure... Just 6527a7b590b3Smrg # implementing what was already the behavior. 6528a7b590b3Smrg newdeplibs=$deplibs 6529a7b590b3Smrg ;; 6530a7b590b3Smrg test_compile) 6531a7b590b3Smrg # This code stresses the "libraries are programs" paradigm to its 6532a7b590b3Smrg # limits. Maybe even breaks it. We compile a program, linking it 6533a7b590b3Smrg # against the deplibs as a proxy for the library. Then we can check 6534a7b590b3Smrg # whether they linked in statically or dynamically with ldd. 6535a7b590b3Smrg $opt_dry_run || $RM conftest.c 6536a7b590b3Smrg cat > conftest.c <<EOF 6537a7b590b3Smrg int main() { return 0; } 6538a7b590b3SmrgEOF 6539a7b590b3Smrg $opt_dry_run || $RM conftest 6540a7b590b3Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 6541a7b590b3Smrg ldd_output=`ldd conftest` 6542a7b590b3Smrg for i in $deplibs; do 6543a7b590b3Smrg case $i in 6544a7b590b3Smrg -l*) 6545a7b590b3Smrg func_stripname -l '' "$i" 6546a7b590b3Smrg name=$func_stripname_result 6547a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6548a7b590b3Smrg case " $predeps $postdeps " in 6549a7b590b3Smrg *" $i "*) 6550a7b590b3Smrg newdeplibs="$newdeplibs $i" 6551a7b590b3Smrg i="" 6552a7b590b3Smrg ;; 6553a7b590b3Smrg esac 6554a7b590b3Smrg fi 6555a7b590b3Smrg if test -n "$i" ; then 6556a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6557a7b590b3Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6558a7b590b3Smrg set dummy $deplib_matches; shift 6559a7b590b3Smrg deplib_match=$1 6560a7b590b3Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6561a7b590b3Smrg newdeplibs="$newdeplibs $i" 6562a7b590b3Smrg else 6563a7b590b3Smrg droppeddeps=yes 6564a7b590b3Smrg $ECHO 6565a7b590b3Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6566a7b590b3Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6567a7b590b3Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6568a7b590b3Smrg $ECHO "*** shared version of the library, which I believe you do not have" 6569a7b590b3Smrg $ECHO "*** because a test_compile did reveal that the linker did not use it for" 6570a7b590b3Smrg $ECHO "*** its dynamic dependency list that programs get resolved with at runtime." 6571a7b590b3Smrg fi 6572a7b590b3Smrg fi 6573a7b590b3Smrg ;; 6574a7b590b3Smrg *) 6575a7b590b3Smrg newdeplibs="$newdeplibs $i" 6576a7b590b3Smrg ;; 6577a7b590b3Smrg esac 6578a7b590b3Smrg done 6579a7b590b3Smrg else 6580a7b590b3Smrg # Error occurred in the first compile. Let's try to salvage 6581a7b590b3Smrg # the situation: Compile a separate program for each library. 6582a7b590b3Smrg for i in $deplibs; do 6583a7b590b3Smrg case $i in 6584a7b590b3Smrg -l*) 6585a7b590b3Smrg func_stripname -l '' "$i" 6586a7b590b3Smrg name=$func_stripname_result 6587a7b590b3Smrg $opt_dry_run || $RM conftest 6588a7b590b3Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 6589a7b590b3Smrg ldd_output=`ldd conftest` 6590a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6591a7b590b3Smrg case " $predeps $postdeps " in 6592a7b590b3Smrg *" $i "*) 6593a7b590b3Smrg newdeplibs="$newdeplibs $i" 6594a7b590b3Smrg i="" 6595a7b590b3Smrg ;; 6596a7b590b3Smrg esac 6597a7b590b3Smrg fi 6598a7b590b3Smrg if test -n "$i" ; then 6599a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6600a7b590b3Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6601a7b590b3Smrg set dummy $deplib_matches; shift 6602a7b590b3Smrg deplib_match=$1 6603a7b590b3Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6604a7b590b3Smrg newdeplibs="$newdeplibs $i" 6605a7b590b3Smrg else 6606a7b590b3Smrg droppeddeps=yes 6607a7b590b3Smrg $ECHO 6608a7b590b3Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6609a7b590b3Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6610a7b590b3Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6611a7b590b3Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6612a7b590b3Smrg $ECHO "*** because a test_compile did reveal that the linker did not use this one" 6613a7b590b3Smrg $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime." 6614a7b590b3Smrg fi 6615a7b590b3Smrg fi 6616a7b590b3Smrg else 6617a7b590b3Smrg droppeddeps=yes 6618a7b590b3Smrg $ECHO 6619a7b590b3Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 6620a7b590b3Smrg $ECHO "*** make it link in! You will probably need to install it or some" 6621a7b590b3Smrg $ECHO "*** library that it depends on before this library will be fully" 6622a7b590b3Smrg $ECHO "*** functional. Installing it before continuing would be even better." 6623a7b590b3Smrg fi 6624a7b590b3Smrg ;; 6625a7b590b3Smrg *) 6626a7b590b3Smrg newdeplibs="$newdeplibs $i" 6627a7b590b3Smrg ;; 6628a7b590b3Smrg esac 6629a7b590b3Smrg done 6630a7b590b3Smrg fi 6631a7b590b3Smrg ;; 6632a7b590b3Smrg file_magic*) 6633a7b590b3Smrg set dummy $deplibs_check_method; shift 6634a7b590b3Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6635a7b590b3Smrg for a_deplib in $deplibs; do 6636a7b590b3Smrg case $a_deplib in 6637a7b590b3Smrg -l*) 6638a7b590b3Smrg func_stripname -l '' "$a_deplib" 6639a7b590b3Smrg name=$func_stripname_result 6640a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6641a7b590b3Smrg case " $predeps $postdeps " in 6642a7b590b3Smrg *" $a_deplib "*) 6643a7b590b3Smrg newdeplibs="$newdeplibs $a_deplib" 6644a7b590b3Smrg a_deplib="" 6645a7b590b3Smrg ;; 6646a7b590b3Smrg esac 6647a7b590b3Smrg fi 6648a7b590b3Smrg if test -n "$a_deplib" ; then 6649a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6650a7b590b3Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6651a7b590b3Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6652a7b590b3Smrg for potent_lib in $potential_libs; do 6653a7b590b3Smrg # Follow soft links. 6654a7b590b3Smrg if ls -lLd "$potent_lib" 2>/dev/null | 6655a7b590b3Smrg $GREP " -> " >/dev/null; then 6656a7b590b3Smrg continue 6657a7b590b3Smrg fi 6658a7b590b3Smrg # The statement above tries to avoid entering an 6659a7b590b3Smrg # endless loop below, in case of cyclic links. 6660a7b590b3Smrg # We might still enter an endless loop, since a link 6661a7b590b3Smrg # loop can be closed while we follow links, 6662a7b590b3Smrg # but so what? 6663a7b590b3Smrg potlib="$potent_lib" 6664a7b590b3Smrg while test -h "$potlib" 2>/dev/null; do 6665a7b590b3Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 6666a7b590b3Smrg case $potliblink in 6667a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 6668a7b590b3Smrg *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 6669a7b590b3Smrg esac 6670a7b590b3Smrg done 6671a7b590b3Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 6672a7b590b3Smrg $SED -e 10q | 6673a7b590b3Smrg $EGREP "$file_magic_regex" > /dev/null; then 6674a7b590b3Smrg newdeplibs="$newdeplibs $a_deplib" 6675a7b590b3Smrg a_deplib="" 6676a7b590b3Smrg break 2 6677a7b590b3Smrg fi 6678a7b590b3Smrg done 6679a7b590b3Smrg done 6680a7b590b3Smrg fi 6681a7b590b3Smrg if test -n "$a_deplib" ; then 6682a7b590b3Smrg droppeddeps=yes 6683a7b590b3Smrg $ECHO 6684a7b590b3Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 6685a7b590b3Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6686a7b590b3Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6687a7b590b3Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6688a7b590b3Smrg $ECHO "*** because I did check the linker path looking for a file starting" 6689a7b590b3Smrg if test -z "$potlib" ; then 6690a7b590b3Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 6691a7b590b3Smrg else 6692a7b590b3Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 6693a7b590b3Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 6694a7b590b3Smrg fi 6695a7b590b3Smrg fi 6696a7b590b3Smrg ;; 6697a7b590b3Smrg *) 6698a7b590b3Smrg # Add a -L argument. 6699a7b590b3Smrg newdeplibs="$newdeplibs $a_deplib" 6700a7b590b3Smrg ;; 6701a7b590b3Smrg esac 6702a7b590b3Smrg done # Gone through all deplibs. 6703a7b590b3Smrg ;; 6704a7b590b3Smrg match_pattern*) 6705a7b590b3Smrg set dummy $deplibs_check_method; shift 6706a7b590b3Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6707a7b590b3Smrg for a_deplib in $deplibs; do 6708a7b590b3Smrg case $a_deplib in 6709a7b590b3Smrg -l*) 6710a7b590b3Smrg func_stripname -l '' "$a_deplib" 6711a7b590b3Smrg name=$func_stripname_result 6712a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6713a7b590b3Smrg case " $predeps $postdeps " in 6714a7b590b3Smrg *" $a_deplib "*) 6715a7b590b3Smrg newdeplibs="$newdeplibs $a_deplib" 6716a7b590b3Smrg a_deplib="" 6717a7b590b3Smrg ;; 6718a7b590b3Smrg esac 6719a7b590b3Smrg fi 6720a7b590b3Smrg if test -n "$a_deplib" ; then 6721a7b590b3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6722a7b590b3Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6723a7b590b3Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6724a7b590b3Smrg for potent_lib in $potential_libs; do 6725a7b590b3Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 6726a7b590b3Smrg if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ 6727a7b590b3Smrg $EGREP "$match_pattern_regex" > /dev/null; then 6728a7b590b3Smrg newdeplibs="$newdeplibs $a_deplib" 6729a7b590b3Smrg a_deplib="" 6730a7b590b3Smrg break 2 6731a7b590b3Smrg fi 6732a7b590b3Smrg done 6733a7b590b3Smrg done 6734a7b590b3Smrg fi 6735a7b590b3Smrg if test -n "$a_deplib" ; then 6736a7b590b3Smrg droppeddeps=yes 6737a7b590b3Smrg $ECHO 6738a7b590b3Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 6739a7b590b3Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6740a7b590b3Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6741a7b590b3Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6742a7b590b3Smrg $ECHO "*** because I did check the linker path looking for a file starting" 6743a7b590b3Smrg if test -z "$potlib" ; then 6744a7b590b3Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 6745a7b590b3Smrg else 6746a7b590b3Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 6747a7b590b3Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 6748a7b590b3Smrg fi 6749a7b590b3Smrg fi 6750a7b590b3Smrg ;; 6751a7b590b3Smrg *) 6752a7b590b3Smrg # Add a -L argument. 6753a7b590b3Smrg newdeplibs="$newdeplibs $a_deplib" 6754a7b590b3Smrg ;; 6755a7b590b3Smrg esac 6756a7b590b3Smrg done # Gone through all deplibs. 6757a7b590b3Smrg ;; 6758a7b590b3Smrg none | unknown | *) 6759a7b590b3Smrg newdeplibs="" 6760a7b590b3Smrg tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ 6761a7b590b3Smrg -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` 6762a7b590b3Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6763a7b590b3Smrg for i in $predeps $postdeps ; do 6764a7b590b3Smrg # can't use Xsed below, because $i might contain '/' 6765a7b590b3Smrg tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` 6766a7b590b3Smrg done 6767a7b590b3Smrg fi 6768a7b590b3Smrg if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | 6769a7b590b3Smrg $GREP . >/dev/null; then 6770a7b590b3Smrg $ECHO 6771a7b590b3Smrg if test "X$deplibs_check_method" = "Xnone"; then 6772a7b590b3Smrg $ECHO "*** Warning: inter-library dependencies are not supported in this platform." 6773a7b590b3Smrg else 6774a7b590b3Smrg $ECHO "*** Warning: inter-library dependencies are not known to be supported." 6775a7b590b3Smrg fi 6776a7b590b3Smrg $ECHO "*** All declared inter-library dependencies are being dropped." 6777a7b590b3Smrg droppeddeps=yes 6778a7b590b3Smrg fi 6779a7b590b3Smrg ;; 6780a7b590b3Smrg esac 6781a7b590b3Smrg versuffix=$versuffix_save 6782a7b590b3Smrg major=$major_save 6783a7b590b3Smrg release=$release_save 6784a7b590b3Smrg libname=$libname_save 6785a7b590b3Smrg name=$name_save 6786a7b590b3Smrg 6787a7b590b3Smrg case $host in 6788a7b590b3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 6789a7b590b3Smrg # On Rhapsody replace the C library with the System framework 6790a7b590b3Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 6791a7b590b3Smrg ;; 6792a7b590b3Smrg esac 6793a7b590b3Smrg 6794a7b590b3Smrg if test "$droppeddeps" = yes; then 6795a7b590b3Smrg if test "$module" = yes; then 6796a7b590b3Smrg $ECHO 6797a7b590b3Smrg $ECHO "*** Warning: libtool could not satisfy all declared inter-library" 6798a7b590b3Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 6799a7b590b3Smrg $ECHO "*** a static module, that should work as long as the dlopening" 6800a7b590b3Smrg $ECHO "*** application is linked with the -dlopen flag." 6801a7b590b3Smrg if test -z "$global_symbol_pipe"; then 6802a7b590b3Smrg $ECHO 6803a7b590b3Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 6804a7b590b3Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 6805a7b590b3Smrg $ECHO "*** not find such a program. So, this module is probably useless." 6806a7b590b3Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 6807a7b590b3Smrg fi 6808a7b590b3Smrg if test "$build_old_libs" = no; then 6809a7b590b3Smrg oldlibs="$output_objdir/$libname.$libext" 6810a7b590b3Smrg build_libtool_libs=module 6811a7b590b3Smrg build_old_libs=yes 6812a7b590b3Smrg else 6813a7b590b3Smrg build_libtool_libs=no 6814a7b590b3Smrg fi 6815a7b590b3Smrg else 6816a7b590b3Smrg $ECHO "*** The inter-library dependencies that have been dropped here will be" 6817a7b590b3Smrg $ECHO "*** automatically added whenever a program is linked with this library" 6818a7b590b3Smrg $ECHO "*** or is declared to -dlopen it." 6819a7b590b3Smrg 6820a7b590b3Smrg if test "$allow_undefined" = no; then 6821a7b590b3Smrg $ECHO 6822a7b590b3Smrg $ECHO "*** Since this library must not contain undefined symbols," 6823a7b590b3Smrg $ECHO "*** because either the platform does not support them or" 6824a7b590b3Smrg $ECHO "*** it was explicitly requested with -no-undefined," 6825a7b590b3Smrg $ECHO "*** libtool will only create a static version of it." 6826a7b590b3Smrg if test "$build_old_libs" = no; then 6827a7b590b3Smrg oldlibs="$output_objdir/$libname.$libext" 6828a7b590b3Smrg build_libtool_libs=module 6829a7b590b3Smrg build_old_libs=yes 6830a7b590b3Smrg else 6831a7b590b3Smrg build_libtool_libs=no 6832a7b590b3Smrg fi 6833a7b590b3Smrg fi 6834a7b590b3Smrg fi 6835a7b590b3Smrg fi 6836a7b590b3Smrg # Done checking deplibs! 6837a7b590b3Smrg deplibs=$newdeplibs 6838a7b590b3Smrg fi 6839a7b590b3Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 6840a7b590b3Smrg case $host in 6841a7b590b3Smrg *-*-darwin*) 6842a7b590b3Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6843a7b590b3Smrg new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6844a7b590b3Smrg deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6845a7b590b3Smrg ;; 6846a7b590b3Smrg esac 6847a7b590b3Smrg 6848a7b590b3Smrg # move library search paths that coincide with paths to not yet 6849a7b590b3Smrg # installed libraries to the beginning of the library search list 6850a7b590b3Smrg new_libs= 6851a7b590b3Smrg for path in $notinst_path; do 6852a7b590b3Smrg case " $new_libs " in 6853a7b590b3Smrg *" -L$path/$objdir "*) ;; 6854a7b590b3Smrg *) 6855a7b590b3Smrg case " $deplibs " in 6856a7b590b3Smrg *" -L$path/$objdir "*) 6857a7b590b3Smrg new_libs="$new_libs -L$path/$objdir" ;; 6858a7b590b3Smrg esac 6859a7b590b3Smrg ;; 6860a7b590b3Smrg esac 6861a7b590b3Smrg done 6862a7b590b3Smrg for deplib in $deplibs; do 6863a7b590b3Smrg case $deplib in 6864a7b590b3Smrg -L*) 6865a7b590b3Smrg case " $new_libs " in 6866a7b590b3Smrg *" $deplib "*) ;; 6867a7b590b3Smrg *) new_libs="$new_libs $deplib" ;; 6868a7b590b3Smrg esac 6869a7b590b3Smrg ;; 6870a7b590b3Smrg *) new_libs="$new_libs $deplib" ;; 6871a7b590b3Smrg esac 6872a7b590b3Smrg done 6873a7b590b3Smrg deplibs="$new_libs" 6874a7b590b3Smrg 6875a7b590b3Smrg # All the library-specific variables (install_libdir is set above). 6876a7b590b3Smrg library_names= 6877a7b590b3Smrg old_library= 6878a7b590b3Smrg dlname= 6879a7b590b3Smrg 6880a7b590b3Smrg # Test again, we may have decided not to build it any more 6881a7b590b3Smrg if test "$build_libtool_libs" = yes; then 6882a7b590b3Smrg if test "$hardcode_into_libs" = yes; then 6883a7b590b3Smrg # Hardcode the library paths 6884a7b590b3Smrg hardcode_libdirs= 6885a7b590b3Smrg dep_rpath= 6886a7b590b3Smrg rpath="$finalize_rpath" 6887a7b590b3Smrg test "$mode" != relink && rpath="$compile_rpath$rpath" 6888a7b590b3Smrg for libdir in $rpath; do 6889a7b590b3Smrg if test -n "$hardcode_libdir_flag_spec"; then 6890a7b590b3Smrg if test -n "$hardcode_libdir_separator"; then 6891a7b590b3Smrg if test -z "$hardcode_libdirs"; then 6892a7b590b3Smrg hardcode_libdirs="$libdir" 6893a7b590b3Smrg else 6894a7b590b3Smrg # Just accumulate the unique libdirs. 6895a7b590b3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 6896a7b590b3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 6897a7b590b3Smrg ;; 6898a7b590b3Smrg *) 6899a7b590b3Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 6900a7b590b3Smrg ;; 6901a7b590b3Smrg esac 6902a7b590b3Smrg fi 6903a7b590b3Smrg else 6904a7b590b3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 6905a7b590b3Smrg dep_rpath="$dep_rpath $flag" 6906a7b590b3Smrg fi 6907a7b590b3Smrg elif test -n "$runpath_var"; then 6908a7b590b3Smrg case "$perm_rpath " in 6909a7b590b3Smrg *" $libdir "*) ;; 6910a7b590b3Smrg *) perm_rpath="$perm_rpath $libdir" ;; 6911a7b590b3Smrg esac 6912a7b590b3Smrg fi 6913a7b590b3Smrg done 6914a7b590b3Smrg # Substitute the hardcoded libdirs into the rpath. 6915a7b590b3Smrg if test -n "$hardcode_libdir_separator" && 6916a7b590b3Smrg test -n "$hardcode_libdirs"; then 6917a7b590b3Smrg libdir="$hardcode_libdirs" 6918a7b590b3Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 6919a7b590b3Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 6920a7b590b3Smrg else 6921a7b590b3Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 6922a7b590b3Smrg fi 6923a7b590b3Smrg fi 6924a7b590b3Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 6925a7b590b3Smrg # We should set the runpath_var. 6926a7b590b3Smrg rpath= 6927a7b590b3Smrg for dir in $perm_rpath; do 6928a7b590b3Smrg rpath="$rpath$dir:" 6929a7b590b3Smrg done 6930a7b590b3Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 6931a7b590b3Smrg fi 6932a7b590b3Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 6933a7b590b3Smrg fi 6934943345d3Smrg 6935a7b590b3Smrg shlibpath="$finalize_shlibpath" 6936a7b590b3Smrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 6937a7b590b3Smrg if test -n "$shlibpath"; then 6938a7b590b3Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 6939a7b590b3Smrg fi 6940943345d3Smrg 6941a7b590b3Smrg # Get the real and link names of the library. 6942a7b590b3Smrg eval shared_ext=\"$shrext_cmds\" 6943a7b590b3Smrg eval library_names=\"$library_names_spec\" 6944a7b590b3Smrg set dummy $library_names 6945a7b590b3Smrg shift 6946a7b590b3Smrg realname="$1" 6947a7b590b3Smrg shift 6948943345d3Smrg 6949a7b590b3Smrg if test -n "$soname_spec"; then 6950a7b590b3Smrg eval soname=\"$soname_spec\" 6951a7b590b3Smrg else 6952a7b590b3Smrg soname="$realname" 6953a7b590b3Smrg fi 6954a7b590b3Smrg if test -z "$dlname"; then 6955a7b590b3Smrg dlname=$soname 6956a7b590b3Smrg fi 6957943345d3Smrg 6958a7b590b3Smrg lib="$output_objdir/$realname" 6959a7b590b3Smrg linknames= 6960a7b590b3Smrg for link 6961a7b590b3Smrg do 6962a7b590b3Smrg linknames="$linknames $link" 6963a7b590b3Smrg done 6964943345d3Smrg 6965a7b590b3Smrg # Use standard objects if they are pic 6966a7b590b3Smrg test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 6967a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 6968943345d3Smrg 6969a7b590b3Smrg delfiles= 6970a7b590b3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 6971a7b590b3Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 6972a7b590b3Smrg export_symbols="$output_objdir/$libname.uexp" 6973a7b590b3Smrg delfiles="$delfiles $export_symbols" 6974a7b590b3Smrg fi 6975943345d3Smrg 6976a7b590b3Smrg orig_export_symbols= 6977a7b590b3Smrg case $host_os in 6978a7b590b3Smrg cygwin* | mingw* | cegcc*) 6979a7b590b3Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 6980a7b590b3Smrg # exporting using user supplied symfile 6981a7b590b3Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 6982a7b590b3Smrg # and it's NOT already a .def file. Must figure out 6983a7b590b3Smrg # which of the given symbols are data symbols and tag 6984a7b590b3Smrg # them as such. So, trigger use of export_symbols_cmds. 6985a7b590b3Smrg # export_symbols gets reassigned inside the "prepare 6986a7b590b3Smrg # the list of exported symbols" if statement, so the 6987a7b590b3Smrg # include_expsyms logic still works. 6988a7b590b3Smrg orig_export_symbols="$export_symbols" 6989a7b590b3Smrg export_symbols= 6990a7b590b3Smrg always_export_symbols=yes 6991a7b590b3Smrg fi 6992a7b590b3Smrg fi 6993a7b590b3Smrg ;; 6994a7b590b3Smrg esac 6995943345d3Smrg 6996a7b590b3Smrg # Prepare the list of exported symbols 6997a7b590b3Smrg if test -z "$export_symbols"; then 6998a7b590b3Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 6999a7b590b3Smrg func_verbose "generating symbol list for \`$libname.la'" 7000a7b590b3Smrg export_symbols="$output_objdir/$libname.exp" 7001a7b590b3Smrg $opt_dry_run || $RM $export_symbols 7002a7b590b3Smrg cmds=$export_symbols_cmds 7003a7b590b3Smrg save_ifs="$IFS"; IFS='~' 7004a7b590b3Smrg for cmd in $cmds; do 7005a7b590b3Smrg IFS="$save_ifs" 7006a7b590b3Smrg eval cmd=\"$cmd\" 7007a7b590b3Smrg func_len " $cmd" 7008a7b590b3Smrg len=$func_len_result 7009a7b590b3Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7010a7b590b3Smrg func_show_eval "$cmd" 'exit $?' 7011a7b590b3Smrg skipped_export=false 7012a7b590b3Smrg else 7013a7b590b3Smrg # The command line is too long to execute in one step. 7014a7b590b3Smrg func_verbose "using reloadable object file for export list..." 7015a7b590b3Smrg skipped_export=: 7016a7b590b3Smrg # Break out early, otherwise skipped_export may be 7017a7b590b3Smrg # set to false by a later but shorter cmd. 7018a7b590b3Smrg break 7019a7b590b3Smrg fi 7020a7b590b3Smrg done 7021a7b590b3Smrg IFS="$save_ifs" 7022a7b590b3Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 7023a7b590b3Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7024a7b590b3Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7025a7b590b3Smrg fi 7026a7b590b3Smrg fi 7027943345d3Smrg fi 7028943345d3Smrg 7029a7b590b3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7030a7b590b3Smrg tmp_export_symbols="$export_symbols" 7031a7b590b3Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7032a7b590b3Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 7033a7b590b3Smrg fi 7034943345d3Smrg 7035a7b590b3Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 7036a7b590b3Smrg # The given exports_symbols file has to be filtered, so filter it. 7037a7b590b3Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7038a7b590b3Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7039a7b590b3Smrg # 's' commands which not all seds can handle. GNU sed should be fine 7040a7b590b3Smrg # though. Also, the filter scales superlinearly with the number of 7041a7b590b3Smrg # global variables. join(1) would be nice here, but unfortunately 7042a7b590b3Smrg # isn't a blessed tool. 7043a7b590b3Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7044a7b590b3Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7045a7b590b3Smrg export_symbols=$output_objdir/$libname.def 7046a7b590b3Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7047a7b590b3Smrg fi 7048943345d3Smrg 7049a7b590b3Smrg tmp_deplibs= 7050a7b590b3Smrg for test_deplib in $deplibs; do 7051a7b590b3Smrg case " $convenience " in 7052a7b590b3Smrg *" $test_deplib "*) ;; 7053a7b590b3Smrg *) 7054a7b590b3Smrg tmp_deplibs="$tmp_deplibs $test_deplib" 7055a7b590b3Smrg ;; 7056a7b590b3Smrg esac 7057a7b590b3Smrg done 7058a7b590b3Smrg deplibs="$tmp_deplibs" 7059943345d3Smrg 7060a7b590b3Smrg if test -n "$convenience"; then 7061a7b590b3Smrg if test -n "$whole_archive_flag_spec" && 7062a7b590b3Smrg test "$compiler_needs_object" = yes && 7063a7b590b3Smrg test -z "$libobjs"; then 7064a7b590b3Smrg # extract the archives, so we have objects to list. 7065a7b590b3Smrg # TODO: could optimize this to just extract one archive. 7066a7b590b3Smrg whole_archive_flag_spec= 7067a7b590b3Smrg fi 7068a7b590b3Smrg if test -n "$whole_archive_flag_spec"; then 7069a7b590b3Smrg save_libobjs=$libobjs 7070a7b590b3Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7071a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 7072a7b590b3Smrg else 7073a7b590b3Smrg gentop="$output_objdir/${outputname}x" 7074a7b590b3Smrg generated="$generated $gentop" 7075943345d3Smrg 7076a7b590b3Smrg func_extract_archives $gentop $convenience 7077a7b590b3Smrg libobjs="$libobjs $func_extract_archives_result" 7078a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 7079a7b590b3Smrg fi 7080943345d3Smrg fi 7081943345d3Smrg 7082a7b590b3Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 7083a7b590b3Smrg eval flag=\"$thread_safe_flag_spec\" 7084a7b590b3Smrg linker_flags="$linker_flags $flag" 7085943345d3Smrg fi 7086943345d3Smrg 7087a7b590b3Smrg # Make a backup of the uninstalled library when relinking 7088a7b590b3Smrg if test "$mode" = relink; then 7089a7b590b3Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 7090a7b590b3Smrg fi 7091943345d3Smrg 7092a7b590b3Smrg # Do each of the archive commands. 7093a7b590b3Smrg if test "$module" = yes && test -n "$module_cmds" ; then 7094a7b590b3Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7095a7b590b3Smrg eval test_cmds=\"$module_expsym_cmds\" 7096a7b590b3Smrg cmds=$module_expsym_cmds 7097a7b590b3Smrg else 7098a7b590b3Smrg eval test_cmds=\"$module_cmds\" 7099a7b590b3Smrg cmds=$module_cmds 7100a7b590b3Smrg fi 7101943345d3Smrg else 7102a7b590b3Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7103a7b590b3Smrg eval test_cmds=\"$archive_expsym_cmds\" 7104a7b590b3Smrg cmds=$archive_expsym_cmds 7105a7b590b3Smrg else 7106a7b590b3Smrg eval test_cmds=\"$archive_cmds\" 7107a7b590b3Smrg cmds=$archive_cmds 7108a7b590b3Smrg fi 7109943345d3Smrg fi 7110943345d3Smrg 7111a7b590b3Smrg if test "X$skipped_export" != "X:" && 7112a7b590b3Smrg func_len " $test_cmds" && 7113a7b590b3Smrg len=$func_len_result && 7114a7b590b3Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7115a7b590b3Smrg : 7116a7b590b3Smrg else 7117a7b590b3Smrg # The command line is too long to link in one step, link piecewise 7118a7b590b3Smrg # or, if using GNU ld and skipped_export is not :, use a linker 7119a7b590b3Smrg # script. 7120943345d3Smrg 7121a7b590b3Smrg # Save the value of $output and $libobjs because we want to 7122a7b590b3Smrg # use them later. If we have whole_archive_flag_spec, we 7123a7b590b3Smrg # want to use save_libobjs as it was before 7124a7b590b3Smrg # whole_archive_flag_spec was expanded, because we can't 7125a7b590b3Smrg # assume the linker understands whole_archive_flag_spec. 7126a7b590b3Smrg # This may have to be revisited, in case too many 7127a7b590b3Smrg # convenience libraries get linked in and end up exceeding 7128a7b590b3Smrg # the spec. 7129a7b590b3Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 7130a7b590b3Smrg save_libobjs=$libobjs 7131a7b590b3Smrg fi 7132a7b590b3Smrg save_output=$output 7133a7b590b3Smrg output_la=`$ECHO "X$output" | $Xsed -e "$basename"` 7134943345d3Smrg 7135a7b590b3Smrg # Clear the reloadable object creation command queue and 7136a7b590b3Smrg # initialize k to one. 7137a7b590b3Smrg test_cmds= 7138a7b590b3Smrg concat_cmds= 7139a7b590b3Smrg objlist= 7140a7b590b3Smrg last_robj= 7141a7b590b3Smrg k=1 7142a7b590b3Smrg 7143a7b590b3Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 7144a7b590b3Smrg output=${output_objdir}/${output_la}.lnkscript 7145a7b590b3Smrg func_verbose "creating GNU ld script: $output" 7146a7b590b3Smrg $ECHO 'INPUT (' > $output 7147a7b590b3Smrg for obj in $save_libobjs 7148943345d3Smrg do 7149a7b590b3Smrg $ECHO "$obj" >> $output 7150a7b590b3Smrg done 7151a7b590b3Smrg $ECHO ')' >> $output 7152a7b590b3Smrg delfiles="$delfiles $output" 7153a7b590b3Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 7154a7b590b3Smrg output=${output_objdir}/${output_la}.lnk 7155a7b590b3Smrg func_verbose "creating linker input file list: $output" 7156a7b590b3Smrg : > $output 7157a7b590b3Smrg set x $save_libobjs 7158a7b590b3Smrg shift 7159a7b590b3Smrg firstobj= 7160a7b590b3Smrg if test "$compiler_needs_object" = yes; then 7161a7b590b3Smrg firstobj="$1 " 7162a7b590b3Smrg shift 7163a7b590b3Smrg fi 7164a7b590b3Smrg for obj 7165a7b590b3Smrg do 7166a7b590b3Smrg $ECHO "$obj" >> $output 7167a7b590b3Smrg done 7168a7b590b3Smrg delfiles="$delfiles $output" 7169a7b590b3Smrg output=$firstobj\"$file_list_spec$output\" 7170a7b590b3Smrg else 7171a7b590b3Smrg if test -n "$save_libobjs"; then 7172a7b590b3Smrg func_verbose "creating reloadable object files..." 7173a7b590b3Smrg output=$output_objdir/$output_la-${k}.$objext 7174a7b590b3Smrg eval test_cmds=\"$reload_cmds\" 7175a7b590b3Smrg func_len " $test_cmds" 7176a7b590b3Smrg len0=$func_len_result 7177a7b590b3Smrg len=$len0 7178a7b590b3Smrg 7179a7b590b3Smrg # Loop over the list of objects to be linked. 7180a7b590b3Smrg for obj in $save_libobjs 7181a7b590b3Smrg do 7182a7b590b3Smrg func_len " $obj" 7183a7b590b3Smrg func_arith $len + $func_len_result 7184a7b590b3Smrg len=$func_arith_result 7185a7b590b3Smrg if test "X$objlist" = X || 7186a7b590b3Smrg test "$len" -lt "$max_cmd_len"; then 7187a7b590b3Smrg func_append objlist " $obj" 7188a7b590b3Smrg else 7189a7b590b3Smrg # The command $test_cmds is almost too long, add a 7190a7b590b3Smrg # command to the queue. 7191a7b590b3Smrg if test "$k" -eq 1 ; then 7192a7b590b3Smrg # The first file doesn't have a previous command to add. 7193a7b590b3Smrg eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 7194a7b590b3Smrg else 7195a7b590b3Smrg # All subsequent reloadable object files will link in 7196a7b590b3Smrg # the last one created. 7197a7b590b3Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" 7198a7b590b3Smrg fi 7199a7b590b3Smrg last_robj=$output_objdir/$output_la-${k}.$objext 7200a7b590b3Smrg func_arith $k + 1 7201a7b590b3Smrg k=$func_arith_result 7202a7b590b3Smrg output=$output_objdir/$output_la-${k}.$objext 7203a7b590b3Smrg objlist=$obj 7204a7b590b3Smrg func_len " $last_robj" 7205a7b590b3Smrg func_arith $len0 + $func_len_result 7206a7b590b3Smrg len=$func_arith_result 7207a7b590b3Smrg fi 7208a7b590b3Smrg done 7209a7b590b3Smrg # Handle the remaining objects by creating one last 7210a7b590b3Smrg # reloadable object file. All subsequent reloadable object 7211a7b590b3Smrg # files will link in the last one created. 7212a7b590b3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7213a7b590b3Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 7214a7b590b3Smrg if test -n "$last_robj"; then 7215a7b590b3Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 7216a7b590b3Smrg fi 7217a7b590b3Smrg delfiles="$delfiles $output" 7218943345d3Smrg 7219a7b590b3Smrg else 7220a7b590b3Smrg output= 7221a7b590b3Smrg fi 7222943345d3Smrg 7223a7b590b3Smrg if ${skipped_export-false}; then 7224a7b590b3Smrg func_verbose "generating symbol list for \`$libname.la'" 7225a7b590b3Smrg export_symbols="$output_objdir/$libname.exp" 7226a7b590b3Smrg $opt_dry_run || $RM $export_symbols 7227a7b590b3Smrg libobjs=$output 7228a7b590b3Smrg # Append the command to create the export file. 7229a7b590b3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7230a7b590b3Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 7231a7b590b3Smrg if test -n "$last_robj"; then 7232a7b590b3Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 7233a7b590b3Smrg fi 7234943345d3Smrg fi 7235943345d3Smrg 7236a7b590b3Smrg test -n "$save_libobjs" && 7237a7b590b3Smrg func_verbose "creating a temporary reloadable object file: $output" 7238943345d3Smrg 7239a7b590b3Smrg # Loop through the commands generated above and execute them. 7240a7b590b3Smrg save_ifs="$IFS"; IFS='~' 7241a7b590b3Smrg for cmd in $concat_cmds; do 7242a7b590b3Smrg IFS="$save_ifs" 7243a7b590b3Smrg $opt_silent || { 7244a7b590b3Smrg func_quote_for_expand "$cmd" 7245a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 7246a7b590b3Smrg } 7247a7b590b3Smrg $opt_dry_run || eval "$cmd" || { 7248a7b590b3Smrg lt_exit=$? 7249a7b590b3Smrg 7250a7b590b3Smrg # Restore the uninstalled library and exit 7251a7b590b3Smrg if test "$mode" = relink; then 7252a7b590b3Smrg ( cd "$output_objdir" && \ 7253a7b590b3Smrg $RM "${realname}T" && \ 7254a7b590b3Smrg $MV "${realname}U" "$realname" ) 7255a7b590b3Smrg fi 7256943345d3Smrg 7257a7b590b3Smrg exit $lt_exit 7258a7b590b3Smrg } 7259a7b590b3Smrg done 7260a7b590b3Smrg IFS="$save_ifs" 7261943345d3Smrg 7262a7b590b3Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 7263a7b590b3Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7264a7b590b3Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7265943345d3Smrg fi 7266943345d3Smrg fi 7267943345d3Smrg 7268a7b590b3Smrg if ${skipped_export-false}; then 7269a7b590b3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7270a7b590b3Smrg tmp_export_symbols="$export_symbols" 7271a7b590b3Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7272a7b590b3Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 7273a7b590b3Smrg fi 7274943345d3Smrg 7275a7b590b3Smrg if test -n "$orig_export_symbols"; then 7276a7b590b3Smrg # The given exports_symbols file has to be filtered, so filter it. 7277a7b590b3Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7278a7b590b3Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7279a7b590b3Smrg # 's' commands which not all seds can handle. GNU sed should be fine 7280a7b590b3Smrg # though. Also, the filter scales superlinearly with the number of 7281a7b590b3Smrg # global variables. join(1) would be nice here, but unfortunately 7282a7b590b3Smrg # isn't a blessed tool. 7283a7b590b3Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7284a7b590b3Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7285a7b590b3Smrg export_symbols=$output_objdir/$libname.def 7286a7b590b3Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7287a7b590b3Smrg fi 7288a7b590b3Smrg fi 7289943345d3Smrg 7290a7b590b3Smrg libobjs=$output 7291a7b590b3Smrg # Restore the value of output. 7292a7b590b3Smrg output=$save_output 7293943345d3Smrg 7294a7b590b3Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 7295a7b590b3Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7296a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 7297a7b590b3Smrg fi 7298a7b590b3Smrg # Expand the library linking commands again to reset the 7299a7b590b3Smrg # value of $libobjs for piecewise linking. 7300943345d3Smrg 7301a7b590b3Smrg # Do each of the archive commands. 7302a7b590b3Smrg if test "$module" = yes && test -n "$module_cmds" ; then 7303a7b590b3Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7304a7b590b3Smrg cmds=$module_expsym_cmds 7305a7b590b3Smrg else 7306a7b590b3Smrg cmds=$module_cmds 7307943345d3Smrg fi 7308943345d3Smrg else 7309a7b590b3Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7310a7b590b3Smrg cmds=$archive_expsym_cmds 7311a7b590b3Smrg else 7312a7b590b3Smrg cmds=$archive_cmds 7313a7b590b3Smrg fi 7314943345d3Smrg fi 7315a7b590b3Smrg fi 7316943345d3Smrg 7317a7b590b3Smrg if test -n "$delfiles"; then 7318a7b590b3Smrg # Append the command to remove temporary files to $cmds. 7319a7b590b3Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 7320a7b590b3Smrg fi 7321943345d3Smrg 7322a7b590b3Smrg # Add any objects from preloaded convenience libraries 7323a7b590b3Smrg if test -n "$dlprefiles"; then 7324a7b590b3Smrg gentop="$output_objdir/${outputname}x" 7325a7b590b3Smrg generated="$generated $gentop" 7326943345d3Smrg 7327a7b590b3Smrg func_extract_archives $gentop $dlprefiles 7328a7b590b3Smrg libobjs="$libobjs $func_extract_archives_result" 7329a7b590b3Smrg test "X$libobjs" = "X " && libobjs= 7330a7b590b3Smrg fi 7331943345d3Smrg 7332a7b590b3Smrg save_ifs="$IFS"; IFS='~' 7333a7b590b3Smrg for cmd in $cmds; do 7334a7b590b3Smrg IFS="$save_ifs" 7335a7b590b3Smrg eval cmd=\"$cmd\" 7336a7b590b3Smrg $opt_silent || { 7337a7b590b3Smrg func_quote_for_expand "$cmd" 7338a7b590b3Smrg eval "func_echo $func_quote_for_expand_result" 7339a7b590b3Smrg } 7340a7b590b3Smrg $opt_dry_run || eval "$cmd" || { 7341a7b590b3Smrg lt_exit=$? 7342943345d3Smrg 7343a7b590b3Smrg # Restore the uninstalled library and exit 7344a7b590b3Smrg if test "$mode" = relink; then 7345a7b590b3Smrg ( cd "$output_objdir" && \ 7346a7b590b3Smrg $RM "${realname}T" && \ 7347a7b590b3Smrg $MV "${realname}U" "$realname" ) 7348a7b590b3Smrg fi 7349943345d3Smrg 7350a7b590b3Smrg exit $lt_exit 7351a7b590b3Smrg } 7352a7b590b3Smrg done 7353a7b590b3Smrg IFS="$save_ifs" 7354943345d3Smrg 7355a7b590b3Smrg # Restore the uninstalled library and exit 7356a7b590b3Smrg if test "$mode" = relink; then 7357a7b590b3Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 7358943345d3Smrg 7359a7b590b3Smrg if test -n "$convenience"; then 7360a7b590b3Smrg if test -z "$whole_archive_flag_spec"; then 7361a7b590b3Smrg func_show_eval '${RM}r "$gentop"' 7362a7b590b3Smrg fi 7363a7b590b3Smrg fi 7364943345d3Smrg 7365a7b590b3Smrg exit $EXIT_SUCCESS 7366a7b590b3Smrg fi 7367a7b590b3Smrg 7368a7b590b3Smrg # Create links to the real library. 7369a7b590b3Smrg for linkname in $linknames; do 7370a7b590b3Smrg if test "$realname" != "$linkname"; then 7371a7b590b3Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 7372943345d3Smrg fi 7373943345d3Smrg done 7374943345d3Smrg 7375a7b590b3Smrg # If -module or -export-dynamic was specified, set the dlname. 7376a7b590b3Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 7377a7b590b3Smrg # On all known operating systems, these are identical. 7378a7b590b3Smrg dlname="$soname" 7379a7b590b3Smrg fi 7380a7b590b3Smrg fi 7381943345d3Smrg ;; 7382943345d3Smrg 7383a7b590b3Smrg obj) 7384a7b590b3Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7385a7b590b3Smrg func_warning "\`-dlopen' is ignored for objects" 7386a7b590b3Smrg fi 7387943345d3Smrg 7388a7b590b3Smrg case " $deplibs" in 7389a7b590b3Smrg *\ -l* | *\ -L*) 7390a7b590b3Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 7391943345d3Smrg esac 7392943345d3Smrg 7393a7b590b3Smrg test -n "$rpath" && \ 7394a7b590b3Smrg func_warning "\`-rpath' is ignored for objects" 7395a7b590b3Smrg 7396a7b590b3Smrg test -n "$xrpath" && \ 7397a7b590b3Smrg func_warning "\`-R' is ignored for objects" 7398943345d3Smrg 7399a7b590b3Smrg test -n "$vinfo" && \ 7400a7b590b3Smrg func_warning "\`-version-info' is ignored for objects" 7401943345d3Smrg 7402a7b590b3Smrg test -n "$release" && \ 7403a7b590b3Smrg func_warning "\`-release' is ignored for objects" 7404a7b590b3Smrg 7405a7b590b3Smrg case $output in 7406a7b590b3Smrg *.lo) 7407a7b590b3Smrg test -n "$objs$old_deplibs" && \ 7408a7b590b3Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 7409a7b590b3Smrg 7410a7b590b3Smrg libobj=$output 7411a7b590b3Smrg func_lo2o "$libobj" 7412a7b590b3Smrg obj=$func_lo2o_result 7413943345d3Smrg ;; 7414943345d3Smrg *) 7415a7b590b3Smrg libobj= 7416a7b590b3Smrg obj="$output" 7417943345d3Smrg ;; 7418943345d3Smrg esac 7419943345d3Smrg 7420a7b590b3Smrg # Delete the old objects. 7421a7b590b3Smrg $opt_dry_run || $RM $obj $libobj 7422943345d3Smrg 7423a7b590b3Smrg # Objects from convenience libraries. This assumes 7424a7b590b3Smrg # single-version convenience libraries. Whenever we create 7425a7b590b3Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 7426a7b590b3Smrg # the extraction. 7427a7b590b3Smrg reload_conv_objs= 7428a7b590b3Smrg gentop= 7429a7b590b3Smrg # reload_cmds runs $LD directly, so let us get rid of 7430a7b590b3Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 7431a7b590b3Smrg # turning comma into space.. 7432a7b590b3Smrg wl= 7433943345d3Smrg 7434a7b590b3Smrg if test -n "$convenience"; then 7435a7b590b3Smrg if test -n "$whole_archive_flag_spec"; then 7436a7b590b3Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 7437a7b590b3Smrg reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 7438a7b590b3Smrg else 7439a7b590b3Smrg gentop="$output_objdir/${obj}x" 7440a7b590b3Smrg generated="$generated $gentop" 7441943345d3Smrg 7442a7b590b3Smrg func_extract_archives $gentop $convenience 7443a7b590b3Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 7444a7b590b3Smrg fi 7445943345d3Smrg fi 7446943345d3Smrg 7447a7b590b3Smrg # Create the old-style object. 7448a7b590b3Smrg 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 7449943345d3Smrg 7450a7b590b3Smrg output="$obj" 7451a7b590b3Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7452943345d3Smrg 7453a7b590b3Smrg # Exit if we aren't doing a library object file. 7454a7b590b3Smrg if test -z "$libobj"; then 7455a7b590b3Smrg if test -n "$gentop"; then 7456a7b590b3Smrg func_show_eval '${RM}r "$gentop"' 7457a7b590b3Smrg fi 7458a7b590b3Smrg 7459a7b590b3Smrg exit $EXIT_SUCCESS 7460943345d3Smrg fi 7461a7b590b3Smrg 7462a7b590b3Smrg if test "$build_libtool_libs" != yes; then 7463a7b590b3Smrg if test -n "$gentop"; then 7464a7b590b3Smrg func_show_eval '${RM}r "$gentop"' 7465a7b590b3Smrg fi 7466a7b590b3Smrg 7467a7b590b3Smrg # Create an invalid libtool object if no PIC, so that we don't 7468a7b590b3Smrg # accidentally link it into a program. 7469a7b590b3Smrg # $show "echo timestamp > $libobj" 7470a7b590b3Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 7471a7b590b3Smrg exit $EXIT_SUCCESS 7472a7b590b3Smrg fi 7473a7b590b3Smrg 7474a7b590b3Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 7475a7b590b3Smrg # Only do commands if we really have different PIC objects. 7476a7b590b3Smrg reload_objs="$libobjs $reload_conv_objs" 7477a7b590b3Smrg output="$libobj" 7478a7b590b3Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7479a7b590b3Smrg fi 7480a7b590b3Smrg 7481a7b590b3Smrg if test -n "$gentop"; then 7482a7b590b3Smrg func_show_eval '${RM}r "$gentop"' 7483a7b590b3Smrg fi 7484a7b590b3Smrg 7485a7b590b3Smrg exit $EXIT_SUCCESS 7486943345d3Smrg ;; 7487943345d3Smrg 7488a7b590b3Smrg prog) 7489a7b590b3Smrg case $host in 7490a7b590b3Smrg *cygwin*) func_stripname '' '.exe' "$output" 7491a7b590b3Smrg output=$func_stripname_result.exe;; 7492a7b590b3Smrg esac 7493a7b590b3Smrg test -n "$vinfo" && \ 7494a7b590b3Smrg func_warning "\`-version-info' is ignored for programs" 7495943345d3Smrg 7496a7b590b3Smrg test -n "$release" && \ 7497a7b590b3Smrg func_warning "\`-release' is ignored for programs" 7498943345d3Smrg 7499a7b590b3Smrg test "$preload" = yes \ 7500a7b590b3Smrg && test "$dlopen_support" = unknown \ 7501a7b590b3Smrg && test "$dlopen_self" = unknown \ 7502a7b590b3Smrg && test "$dlopen_self_static" = unknown && \ 7503a7b590b3Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 7504a7b590b3Smrg 7505a7b590b3Smrg case $host in 7506a7b590b3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7507a7b590b3Smrg # On Rhapsody replace the C library is the System framework 7508a7b590b3Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 7509a7b590b3Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 7510943345d3Smrg ;; 7511a7b590b3Smrg esac 7512943345d3Smrg 7513a7b590b3Smrg case $host in 7514a7b590b3Smrg *-*-darwin*) 7515a7b590b3Smrg # Don't allow lazy linking, it breaks C++ global constructors 7516a7b590b3Smrg # But is supposedly fixed on 10.4 or later (yay!). 7517a7b590b3Smrg if test "$tagname" = CXX ; then 7518a7b590b3Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 7519a7b590b3Smrg 10.[0123]) 7520a7b590b3Smrg compile_command="$compile_command ${wl}-bind_at_load" 7521a7b590b3Smrg finalize_command="$finalize_command ${wl}-bind_at_load" 7522a7b590b3Smrg ;; 7523a7b590b3Smrg esac 7524943345d3Smrg fi 7525a7b590b3Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7526a7b590b3Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 7527a7b590b3Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 7528a7b590b3Smrg ;; 7529a7b590b3Smrg esac 7530943345d3Smrg 7531943345d3Smrg 7532a7b590b3Smrg # move library search paths that coincide with paths to not yet 7533a7b590b3Smrg # installed libraries to the beginning of the library search list 7534a7b590b3Smrg new_libs= 7535a7b590b3Smrg for path in $notinst_path; do 7536a7b590b3Smrg case " $new_libs " in 7537a7b590b3Smrg *" -L$path/$objdir "*) ;; 7538a7b590b3Smrg *) 7539a7b590b3Smrg case " $compile_deplibs " in 7540a7b590b3Smrg *" -L$path/$objdir "*) 7541a7b590b3Smrg new_libs="$new_libs -L$path/$objdir" ;; 7542943345d3Smrg esac 7543a7b590b3Smrg ;; 7544a7b590b3Smrg esac 7545a7b590b3Smrg done 7546a7b590b3Smrg for deplib in $compile_deplibs; do 7547a7b590b3Smrg case $deplib in 7548a7b590b3Smrg -L*) 7549a7b590b3Smrg case " $new_libs " in 7550a7b590b3Smrg *" $deplib "*) ;; 7551a7b590b3Smrg *) new_libs="$new_libs $deplib" ;; 7552943345d3Smrg esac 7553a7b590b3Smrg ;; 7554a7b590b3Smrg *) new_libs="$new_libs $deplib" ;; 7555a7b590b3Smrg esac 7556a7b590b3Smrg done 7557a7b590b3Smrg compile_deplibs="$new_libs" 7558943345d3Smrg 7559943345d3Smrg 7560a7b590b3Smrg compile_command="$compile_command $compile_deplibs" 7561a7b590b3Smrg finalize_command="$finalize_command $finalize_deplibs" 7562943345d3Smrg 7563a7b590b3Smrg if test -n "$rpath$xrpath"; then 7564a7b590b3Smrg # If the user specified any rpath flags, then add them. 7565a7b590b3Smrg for libdir in $rpath $xrpath; do 7566a7b590b3Smrg # This is the magic to use -rpath. 7567a7b590b3Smrg case "$finalize_rpath " in 7568a7b590b3Smrg *" $libdir "*) ;; 7569a7b590b3Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 7570a7b590b3Smrg esac 7571a7b590b3Smrg done 7572a7b590b3Smrg fi 7573943345d3Smrg 7574a7b590b3Smrg # Now hardcode the library paths 7575a7b590b3Smrg rpath= 7576a7b590b3Smrg hardcode_libdirs= 7577a7b590b3Smrg for libdir in $compile_rpath $finalize_rpath; do 7578a7b590b3Smrg if test -n "$hardcode_libdir_flag_spec"; then 7579a7b590b3Smrg if test -n "$hardcode_libdir_separator"; then 7580a7b590b3Smrg if test -z "$hardcode_libdirs"; then 7581a7b590b3Smrg hardcode_libdirs="$libdir" 7582a7b590b3Smrg else 7583a7b590b3Smrg # Just accumulate the unique libdirs. 7584a7b590b3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7585a7b590b3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7586a7b590b3Smrg ;; 7587a7b590b3Smrg *) 7588a7b590b3Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7589a7b590b3Smrg ;; 7590a7b590b3Smrg esac 7591a7b590b3Smrg fi 7592943345d3Smrg else 7593a7b590b3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7594a7b590b3Smrg rpath="$rpath $flag" 7595943345d3Smrg fi 7596a7b590b3Smrg elif test -n "$runpath_var"; then 7597a7b590b3Smrg case "$perm_rpath " in 7598a7b590b3Smrg *" $libdir "*) ;; 7599a7b590b3Smrg *) perm_rpath="$perm_rpath $libdir" ;; 7600a7b590b3Smrg esac 7601a7b590b3Smrg fi 7602a7b590b3Smrg case $host in 7603a7b590b3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7604a7b590b3Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 7605a7b590b3Smrg case :$dllsearchpath: in 7606a7b590b3Smrg *":$libdir:"*) ;; 7607a7b590b3Smrg ::) dllsearchpath=$libdir;; 7608a7b590b3Smrg *) dllsearchpath="$dllsearchpath:$libdir";; 7609a7b590b3Smrg esac 7610a7b590b3Smrg case :$dllsearchpath: in 7611a7b590b3Smrg *":$testbindir:"*) ;; 7612a7b590b3Smrg ::) dllsearchpath=$testbindir;; 7613a7b590b3Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 7614a7b590b3Smrg esac 7615a7b590b3Smrg ;; 7616a7b590b3Smrg esac 7617a7b590b3Smrg done 7618a7b590b3Smrg # Substitute the hardcoded libdirs into the rpath. 7619a7b590b3Smrg if test -n "$hardcode_libdir_separator" && 7620a7b590b3Smrg test -n "$hardcode_libdirs"; then 7621a7b590b3Smrg libdir="$hardcode_libdirs" 7622a7b590b3Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 7623a7b590b3Smrg fi 7624a7b590b3Smrg compile_rpath="$rpath" 7625943345d3Smrg 7626a7b590b3Smrg rpath= 7627a7b590b3Smrg hardcode_libdirs= 7628a7b590b3Smrg for libdir in $finalize_rpath; do 7629a7b590b3Smrg if test -n "$hardcode_libdir_flag_spec"; then 7630a7b590b3Smrg if test -n "$hardcode_libdir_separator"; then 7631a7b590b3Smrg if test -z "$hardcode_libdirs"; then 7632a7b590b3Smrg hardcode_libdirs="$libdir" 7633a7b590b3Smrg else 7634a7b590b3Smrg # Just accumulate the unique libdirs. 7635a7b590b3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7636a7b590b3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7637a7b590b3Smrg ;; 7638a7b590b3Smrg *) 7639a7b590b3Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7640a7b590b3Smrg ;; 7641a7b590b3Smrg esac 7642a7b590b3Smrg fi 7643943345d3Smrg else 7644a7b590b3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7645a7b590b3Smrg rpath="$rpath $flag" 7646943345d3Smrg fi 7647a7b590b3Smrg elif test -n "$runpath_var"; then 7648a7b590b3Smrg case "$finalize_perm_rpath " in 7649a7b590b3Smrg *" $libdir "*) ;; 7650a7b590b3Smrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 7651a7b590b3Smrg esac 7652943345d3Smrg fi 7653a7b590b3Smrg done 7654a7b590b3Smrg # Substitute the hardcoded libdirs into the rpath. 7655a7b590b3Smrg if test -n "$hardcode_libdir_separator" && 7656a7b590b3Smrg test -n "$hardcode_libdirs"; then 7657a7b590b3Smrg libdir="$hardcode_libdirs" 7658a7b590b3Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 7659a7b590b3Smrg fi 7660a7b590b3Smrg finalize_rpath="$rpath" 7661943345d3Smrg 7662a7b590b3Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 7663a7b590b3Smrg # Transform all the library objects into standard objects. 7664a7b590b3Smrg compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 7665a7b590b3Smrg finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 7666a7b590b3Smrg fi 7667943345d3Smrg 7668a7b590b3Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 7669943345d3Smrg 7670a7b590b3Smrg # template prelinking step 7671a7b590b3Smrg if test -n "$prelink_cmds"; then 7672a7b590b3Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 7673a7b590b3Smrg fi 7674943345d3Smrg 7675a7b590b3Smrg wrappers_required=yes 7676a7b590b3Smrg case $host in 7677a7b590b3Smrg *cygwin* | *mingw* ) 7678a7b590b3Smrg if test "$build_libtool_libs" != yes; then 7679a7b590b3Smrg wrappers_required=no 7680a7b590b3Smrg fi 7681a7b590b3Smrg ;; 7682a7b590b3Smrg *cegcc) 7683a7b590b3Smrg # Disable wrappers for cegcc, we are cross compiling anyway. 7684a7b590b3Smrg wrappers_required=no 7685a7b590b3Smrg ;; 7686a7b590b3Smrg *) 7687a7b590b3Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 7688a7b590b3Smrg wrappers_required=no 7689a7b590b3Smrg fi 7690a7b590b3Smrg ;; 7691a7b590b3Smrg esac 7692a7b590b3Smrg if test "$wrappers_required" = no; then 7693a7b590b3Smrg # Replace the output file specification. 7694a7b590b3Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 7695a7b590b3Smrg link_command="$compile_command$compile_rpath" 7696943345d3Smrg 7697a7b590b3Smrg # We have no uninstalled library dependencies, so finalize right now. 7698a7b590b3Smrg exit_status=0 7699a7b590b3Smrg func_show_eval "$link_command" 'exit_status=$?' 7700943345d3Smrg 7701a7b590b3Smrg # Delete the generated files. 7702a7b590b3Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 7703a7b590b3Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 7704943345d3Smrg fi 7705943345d3Smrg 7706a7b590b3Smrg exit $exit_status 7707a7b590b3Smrg fi 7708943345d3Smrg 7709a7b590b3Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 7710a7b590b3Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 7711a7b590b3Smrg fi 7712a7b590b3Smrg if test -n "$finalize_shlibpath"; then 7713a7b590b3Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 7714a7b590b3Smrg fi 7715943345d3Smrg 7716a7b590b3Smrg compile_var= 7717a7b590b3Smrg finalize_var= 7718a7b590b3Smrg if test -n "$runpath_var"; then 7719a7b590b3Smrg if test -n "$perm_rpath"; then 7720a7b590b3Smrg # We should set the runpath_var. 7721a7b590b3Smrg rpath= 7722a7b590b3Smrg for dir in $perm_rpath; do 7723a7b590b3Smrg rpath="$rpath$dir:" 7724a7b590b3Smrg done 7725a7b590b3Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 7726943345d3Smrg fi 7727a7b590b3Smrg if test -n "$finalize_perm_rpath"; then 7728a7b590b3Smrg # We should set the runpath_var. 7729a7b590b3Smrg rpath= 7730a7b590b3Smrg for dir in $finalize_perm_rpath; do 7731a7b590b3Smrg rpath="$rpath$dir:" 7732a7b590b3Smrg done 7733a7b590b3Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 7734943345d3Smrg fi 7735a7b590b3Smrg fi 7736943345d3Smrg 7737a7b590b3Smrg if test "$no_install" = yes; then 7738a7b590b3Smrg # We don't need to create a wrapper script. 7739a7b590b3Smrg link_command="$compile_var$compile_command$compile_rpath" 7740a7b590b3Smrg # Replace the output file specification. 7741a7b590b3Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 7742a7b590b3Smrg # Delete the old output file. 7743a7b590b3Smrg $opt_dry_run || $RM $output 7744a7b590b3Smrg # Link the executable and exit 7745a7b590b3Smrg func_show_eval "$link_command" 'exit $?' 7746943345d3Smrg exit $EXIT_SUCCESS 7747a7b590b3Smrg fi 7748943345d3Smrg 7749a7b590b3Smrg if test "$hardcode_action" = relink; then 7750a7b590b3Smrg # Fast installation is not supported 7751a7b590b3Smrg link_command="$compile_var$compile_command$compile_rpath" 7752a7b590b3Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 7753a7b590b3Smrg 7754a7b590b3Smrg func_warning "this platform does not like uninstalled shared libraries" 7755a7b590b3Smrg func_warning "\`$output' will be relinked during installation" 7756a7b590b3Smrg else 7757a7b590b3Smrg if test "$fast_install" != no; then 7758a7b590b3Smrg link_command="$finalize_var$compile_command$finalize_rpath" 7759a7b590b3Smrg if test "$fast_install" = yes; then 7760a7b590b3Smrg relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` 7761a7b590b3Smrg else 7762a7b590b3Smrg # fast_install is set to needless 7763a7b590b3Smrg relink_command= 7764a7b590b3Smrg fi 7765943345d3Smrg else 7766a7b590b3Smrg link_command="$compile_var$compile_command$compile_rpath" 7767a7b590b3Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 7768943345d3Smrg fi 7769a7b590b3Smrg fi 7770943345d3Smrg 7771a7b590b3Smrg # Replace the output file specification. 7772a7b590b3Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 7773943345d3Smrg 7774a7b590b3Smrg # Delete the old output files. 7775a7b590b3Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 7776943345d3Smrg 7777a7b590b3Smrg func_show_eval "$link_command" 'exit $?' 7778943345d3Smrg 7779a7b590b3Smrg # Now create the wrapper script. 7780a7b590b3Smrg func_verbose "creating $output" 7781943345d3Smrg 7782a7b590b3Smrg # Quote the relink command for shipping. 7783a7b590b3Smrg if test -n "$relink_command"; then 7784a7b590b3Smrg # Preserve any variables that may affect compiler behavior 7785a7b590b3Smrg for var in $variables_saved_for_relink; do 7786a7b590b3Smrg if eval test -z \"\${$var+set}\"; then 7787a7b590b3Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 7788a7b590b3Smrg elif eval var_value=\$$var; test -z "$var_value"; then 7789a7b590b3Smrg relink_command="$var=; export $var; $relink_command" 7790943345d3Smrg else 7791a7b590b3Smrg func_quote_for_eval "$var_value" 7792a7b590b3Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 7793943345d3Smrg fi 7794a7b590b3Smrg done 7795a7b590b3Smrg relink_command="(cd `pwd`; $relink_command)" 7796a7b590b3Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 7797a7b590b3Smrg fi 7798943345d3Smrg 7799a7b590b3Smrg # Quote $ECHO for shipping. 7800a7b590b3Smrg if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then 7801a7b590b3Smrg case $progpath in 7802a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 7803a7b590b3Smrg *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 7804a7b590b3Smrg esac 7805a7b590b3Smrg qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` 7806a7b590b3Smrg else 7807a7b590b3Smrg qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` 7808a7b590b3Smrg fi 7809a7b590b3Smrg 7810a7b590b3Smrg # Only actually do things if not in dry run mode. 7811a7b590b3Smrg $opt_dry_run || { 7812a7b590b3Smrg # win32 will think the script is a binary if it has 7813a7b590b3Smrg # a .exe suffix, so we strip it off here. 7814a7b590b3Smrg case $output in 7815a7b590b3Smrg *.exe) func_stripname '' '.exe' "$output" 7816a7b590b3Smrg output=$func_stripname_result ;; 7817a7b590b3Smrg esac 7818a7b590b3Smrg # test for cygwin because mv fails w/o .exe extensions 7819a7b590b3Smrg case $host in 7820a7b590b3Smrg *cygwin*) 7821a7b590b3Smrg exeext=.exe 7822a7b590b3Smrg func_stripname '' '.exe' "$outputname" 7823a7b590b3Smrg outputname=$func_stripname_result ;; 7824a7b590b3Smrg *) exeext= ;; 7825943345d3Smrg esac 7826a7b590b3Smrg case $host in 7827a7b590b3Smrg *cygwin* | *mingw* ) 7828a7b590b3Smrg func_dirname_and_basename "$output" "" "." 7829a7b590b3Smrg output_name=$func_basename_result 7830a7b590b3Smrg output_path=$func_dirname_result 7831a7b590b3Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 7832a7b590b3Smrg cwrapper="$output_path/$output_name.exe" 7833a7b590b3Smrg $RM $cwrappersource $cwrapper 7834a7b590b3Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 7835a7b590b3Smrg 7836a7b590b3Smrg func_emit_cwrapperexe_src > $cwrappersource 7837a7b590b3Smrg 7838a7b590b3Smrg # The wrapper executable is built using the $host compiler, 7839a7b590b3Smrg # because it contains $host paths and files. If cross- 7840a7b590b3Smrg # compiling, it, like the target executable, must be 7841a7b590b3Smrg # executed on the $host or under an emulation environment. 7842a7b590b3Smrg $opt_dry_run || { 7843a7b590b3Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 7844a7b590b3Smrg $STRIP $cwrapper 7845a7b590b3Smrg } 7846943345d3Smrg 7847a7b590b3Smrg # Now, create the wrapper script for func_source use: 7848a7b590b3Smrg func_ltwrapper_scriptname $cwrapper 7849a7b590b3Smrg $RM $func_ltwrapper_scriptname_result 7850a7b590b3Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 7851a7b590b3Smrg $opt_dry_run || { 7852a7b590b3Smrg # note: this script will not be executed, so do not chmod. 7853a7b590b3Smrg if test "x$build" = "x$host" ; then 7854a7b590b3Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 7855a7b590b3Smrg else 7856a7b590b3Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 7857a7b590b3Smrg fi 7858a7b590b3Smrg } 7859a7b590b3Smrg ;; 7860a7b590b3Smrg * ) 7861a7b590b3Smrg $RM $output 7862a7b590b3Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 7863943345d3Smrg 7864a7b590b3Smrg func_emit_wrapper no > $output 7865a7b590b3Smrg chmod +x $output 7866a7b590b3Smrg ;; 7867a7b590b3Smrg esac 7868a7b590b3Smrg } 7869a7b590b3Smrg exit $EXIT_SUCCESS 7870a7b590b3Smrg ;; 7871a7b590b3Smrg esac 7872943345d3Smrg 7873a7b590b3Smrg # See if we need to build an old-fashioned archive. 7874a7b590b3Smrg for oldlib in $oldlibs; do 7875943345d3Smrg 7876a7b590b3Smrg if test "$build_libtool_libs" = convenience; then 7877a7b590b3Smrg oldobjs="$libobjs_save $symfileobj" 7878a7b590b3Smrg addlibs="$convenience" 7879a7b590b3Smrg build_libtool_libs=no 7880a7b590b3Smrg else 7881a7b590b3Smrg if test "$build_libtool_libs" = module; then 7882a7b590b3Smrg oldobjs="$libobjs_save" 7883a7b590b3Smrg build_libtool_libs=no 7884a7b590b3Smrg else 7885a7b590b3Smrg oldobjs="$old_deplibs $non_pic_objects" 7886a7b590b3Smrg if test "$preload" = yes && test -f "$symfileobj"; then 7887a7b590b3Smrg oldobjs="$oldobjs $symfileobj" 7888a7b590b3Smrg fi 7889a7b590b3Smrg fi 7890a7b590b3Smrg addlibs="$old_convenience" 7891943345d3Smrg fi 7892943345d3Smrg 7893a7b590b3Smrg if test -n "$addlibs"; then 7894a7b590b3Smrg gentop="$output_objdir/${outputname}x" 7895a7b590b3Smrg generated="$generated $gentop" 7896943345d3Smrg 7897a7b590b3Smrg func_extract_archives $gentop $addlibs 7898a7b590b3Smrg oldobjs="$oldobjs $func_extract_archives_result" 7899a7b590b3Smrg fi 7900943345d3Smrg 7901a7b590b3Smrg # Do each command in the archive commands. 7902a7b590b3Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 7903a7b590b3Smrg cmds=$old_archive_from_new_cmds 7904a7b590b3Smrg else 7905943345d3Smrg 7906a7b590b3Smrg # Add any objects from preloaded convenience libraries 7907a7b590b3Smrg if test -n "$dlprefiles"; then 7908a7b590b3Smrg gentop="$output_objdir/${outputname}x" 7909a7b590b3Smrg generated="$generated $gentop" 7910943345d3Smrg 7911a7b590b3Smrg func_extract_archives $gentop $dlprefiles 7912a7b590b3Smrg oldobjs="$oldobjs $func_extract_archives_result" 7913a7b590b3Smrg fi 7914943345d3Smrg 7915a7b590b3Smrg # POSIX demands no paths to be encoded in archives. We have 7916a7b590b3Smrg # to avoid creating archives with duplicate basenames if we 7917a7b590b3Smrg # might have to extract them afterwards, e.g., when creating a 7918a7b590b3Smrg # static archive out of a convenience library, or when linking 7919a7b590b3Smrg # the entirety of a libtool archive into another (currently 7920a7b590b3Smrg # not supported by libtool). 7921a7b590b3Smrg if (for obj in $oldobjs 7922a7b590b3Smrg do 7923a7b590b3Smrg func_basename "$obj" 7924a7b590b3Smrg $ECHO "$func_basename_result" 7925a7b590b3Smrg done | sort | sort -uc >/dev/null 2>&1); then 7926a7b590b3Smrg : 7927a7b590b3Smrg else 7928a7b590b3Smrg $ECHO "copying selected object files to avoid basename conflicts..." 7929a7b590b3Smrg gentop="$output_objdir/${outputname}x" 7930a7b590b3Smrg generated="$generated $gentop" 7931a7b590b3Smrg func_mkdir_p "$gentop" 7932a7b590b3Smrg save_oldobjs=$oldobjs 7933a7b590b3Smrg oldobjs= 7934a7b590b3Smrg counter=1 7935a7b590b3Smrg for obj in $save_oldobjs 7936a7b590b3Smrg do 7937a7b590b3Smrg func_basename "$obj" 7938a7b590b3Smrg objbase="$func_basename_result" 7939a7b590b3Smrg case " $oldobjs " in 7940a7b590b3Smrg " ") oldobjs=$obj ;; 7941a7b590b3Smrg *[\ /]"$objbase "*) 7942a7b590b3Smrg while :; do 7943a7b590b3Smrg # Make sure we don't pick an alternate name that also 7944a7b590b3Smrg # overlaps. 7945a7b590b3Smrg newobj=lt$counter-$objbase 7946a7b590b3Smrg func_arith $counter + 1 7947a7b590b3Smrg counter=$func_arith_result 7948a7b590b3Smrg case " $oldobjs " in 7949a7b590b3Smrg *[\ /]"$newobj "*) ;; 7950a7b590b3Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 7951a7b590b3Smrg esac 7952a7b590b3Smrg done 7953a7b590b3Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 7954a7b590b3Smrg oldobjs="$oldobjs $gentop/$newobj" 7955a7b590b3Smrg ;; 7956a7b590b3Smrg *) oldobjs="$oldobjs $obj" ;; 7957a7b590b3Smrg esac 7958943345d3Smrg done 7959943345d3Smrg fi 7960a7b590b3Smrg eval cmds=\"$old_archive_cmds\" 7961943345d3Smrg 7962a7b590b3Smrg func_len " $cmds" 7963a7b590b3Smrg len=$func_len_result 7964a7b590b3Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7965a7b590b3Smrg cmds=$old_archive_cmds 7966a7b590b3Smrg else 7967a7b590b3Smrg # the command line is too long to link in one step, link in parts 7968a7b590b3Smrg func_verbose "using piecewise archive linking..." 7969a7b590b3Smrg save_RANLIB=$RANLIB 7970a7b590b3Smrg RANLIB=: 7971a7b590b3Smrg objlist= 7972a7b590b3Smrg concat_cmds= 7973a7b590b3Smrg save_oldobjs=$oldobjs 7974a7b590b3Smrg oldobjs= 7975a7b590b3Smrg # Is there a better way of finding the last object in the list? 7976a7b590b3Smrg for obj in $save_oldobjs 7977a7b590b3Smrg do 7978a7b590b3Smrg last_oldobj=$obj 7979a7b590b3Smrg done 7980a7b590b3Smrg eval test_cmds=\"$old_archive_cmds\" 7981a7b590b3Smrg func_len " $test_cmds" 7982a7b590b3Smrg len0=$func_len_result 7983a7b590b3Smrg len=$len0 7984a7b590b3Smrg for obj in $save_oldobjs 7985a7b590b3Smrg do 7986a7b590b3Smrg func_len " $obj" 7987a7b590b3Smrg func_arith $len + $func_len_result 7988a7b590b3Smrg len=$func_arith_result 7989a7b590b3Smrg func_append objlist " $obj" 7990a7b590b3Smrg if test "$len" -lt "$max_cmd_len"; then 7991a7b590b3Smrg : 7992a7b590b3Smrg else 7993a7b590b3Smrg # the above command should be used before it gets too long 7994a7b590b3Smrg oldobjs=$objlist 7995a7b590b3Smrg if test "$obj" = "$last_oldobj" ; then 7996a7b590b3Smrg RANLIB=$save_RANLIB 7997a7b590b3Smrg fi 7998a7b590b3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7999a7b590b3Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 8000a7b590b3Smrg objlist= 8001a7b590b3Smrg len=$len0 8002a7b590b3Smrg fi 8003a7b590b3Smrg done 8004a7b590b3Smrg RANLIB=$save_RANLIB 8005a7b590b3Smrg oldobjs=$objlist 8006a7b590b3Smrg if test "X$oldobjs" = "X" ; then 8007a7b590b3Smrg eval cmds=\"\$concat_cmds\" 8008a7b590b3Smrg else 8009a7b590b3Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 8010a7b590b3Smrg fi 8011a7b590b3Smrg fi 8012a7b590b3Smrg fi 8013a7b590b3Smrg func_execute_cmds "$cmds" 'exit $?' 8014943345d3Smrg done 8015943345d3Smrg 8016a7b590b3Smrg test -n "$generated" && \ 8017a7b590b3Smrg func_show_eval "${RM}r$generated" 8018943345d3Smrg 8019a7b590b3Smrg # Now create the libtool archive. 8020a7b590b3Smrg case $output in 8021a7b590b3Smrg *.la) 8022a7b590b3Smrg old_library= 8023a7b590b3Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 8024a7b590b3Smrg func_verbose "creating $output" 8025943345d3Smrg 8026a7b590b3Smrg # Preserve any variables that may affect compiler behavior 8027a7b590b3Smrg for var in $variables_saved_for_relink; do 8028a7b590b3Smrg if eval test -z \"\${$var+set}\"; then 8029a7b590b3Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8030a7b590b3Smrg elif eval var_value=\$$var; test -z "$var_value"; then 8031a7b590b3Smrg relink_command="$var=; export $var; $relink_command" 8032943345d3Smrg else 8033a7b590b3Smrg func_quote_for_eval "$var_value" 8034a7b590b3Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8035943345d3Smrg fi 8036a7b590b3Smrg done 8037a7b590b3Smrg # Quote the link command for shipping. 8038a7b590b3Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 8039a7b590b3Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 8040a7b590b3Smrg if test "$hardcode_automatic" = yes ; then 8041a7b590b3Smrg relink_command= 8042a7b590b3Smrg fi 8043943345d3Smrg 8044a7b590b3Smrg # Only create the output if not a dry run. 8045a7b590b3Smrg $opt_dry_run || { 8046a7b590b3Smrg for installed in no yes; do 8047a7b590b3Smrg if test "$installed" = yes; then 8048a7b590b3Smrg if test -z "$install_libdir"; then 8049a7b590b3Smrg break 8050a7b590b3Smrg fi 8051a7b590b3Smrg output="$output_objdir/$outputname"i 8052a7b590b3Smrg # Replace all uninstalled libtool libraries with the installed ones 8053a7b590b3Smrg newdependency_libs= 8054a7b590b3Smrg for deplib in $dependency_libs; do 8055a7b590b3Smrg case $deplib in 8056a7b590b3Smrg *.la) 8057a7b590b3Smrg func_basename "$deplib" 8058a7b590b3Smrg name="$func_basename_result" 8059a7b590b3Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8060a7b590b3Smrg test -z "$libdir" && \ 8061a7b590b3Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 8062a7b590b3Smrg newdependency_libs="$newdependency_libs $libdir/$name" 8063a7b590b3Smrg ;; 8064a7b590b3Smrg *) newdependency_libs="$newdependency_libs $deplib" ;; 8065a7b590b3Smrg esac 8066a7b590b3Smrg done 8067a7b590b3Smrg dependency_libs="$newdependency_libs" 8068a7b590b3Smrg newdlfiles= 8069a7b590b3Smrg 8070a7b590b3Smrg for lib in $dlfiles; do 8071a7b590b3Smrg case $lib in 8072a7b590b3Smrg *.la) 8073a7b590b3Smrg func_basename "$lib" 8074a7b590b3Smrg name="$func_basename_result" 8075a7b590b3Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8076a7b590b3Smrg test -z "$libdir" && \ 8077a7b590b3Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 8078a7b590b3Smrg newdlfiles="$newdlfiles $libdir/$name" 8079a7b590b3Smrg ;; 8080a7b590b3Smrg *) newdlfiles="$newdlfiles $lib" ;; 8081a7b590b3Smrg esac 8082a7b590b3Smrg done 8083a7b590b3Smrg dlfiles="$newdlfiles" 8084a7b590b3Smrg newdlprefiles= 8085a7b590b3Smrg for lib in $dlprefiles; do 8086a7b590b3Smrg case $lib in 8087a7b590b3Smrg *.la) 8088a7b590b3Smrg # Only pass preopened files to the pseudo-archive (for 8089a7b590b3Smrg # eventual linking with the app. that links it) if we 8090a7b590b3Smrg # didn't already link the preopened objects directly into 8091a7b590b3Smrg # the library: 8092a7b590b3Smrg func_basename "$lib" 8093a7b590b3Smrg name="$func_basename_result" 8094a7b590b3Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8095a7b590b3Smrg test -z "$libdir" && \ 8096a7b590b3Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 8097a7b590b3Smrg newdlprefiles="$newdlprefiles $libdir/$name" 8098a7b590b3Smrg ;; 8099a7b590b3Smrg esac 8100a7b590b3Smrg done 8101a7b590b3Smrg dlprefiles="$newdlprefiles" 8102a7b590b3Smrg else 8103a7b590b3Smrg newdlfiles= 8104a7b590b3Smrg for lib in $dlfiles; do 8105a7b590b3Smrg case $lib in 8106a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8107a7b590b3Smrg *) abs=`pwd`"/$lib" ;; 8108a7b590b3Smrg esac 8109a7b590b3Smrg newdlfiles="$newdlfiles $abs" 8110a7b590b3Smrg done 8111a7b590b3Smrg dlfiles="$newdlfiles" 8112a7b590b3Smrg newdlprefiles= 8113a7b590b3Smrg for lib in $dlprefiles; do 8114a7b590b3Smrg case $lib in 8115a7b590b3Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8116a7b590b3Smrg *) abs=`pwd`"/$lib" ;; 8117a7b590b3Smrg esac 8118a7b590b3Smrg newdlprefiles="$newdlprefiles $abs" 8119a7b590b3Smrg done 8120a7b590b3Smrg dlprefiles="$newdlprefiles" 8121a7b590b3Smrg fi 8122a7b590b3Smrg $RM $output 8123a7b590b3Smrg # place dlname in correct position for cygwin 8124a7b590b3Smrg tdlname=$dlname 8125a7b590b3Smrg case $host,$output,$installed,$module,$dlname in 8126a7b590b3Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 8127a7b590b3Smrg esac 8128a7b590b3Smrg $ECHO > $output "\ 8129a7b590b3Smrg# $outputname - a libtool library file 8130a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 8131a7b590b3Smrg# 8132a7b590b3Smrg# Please DO NOT delete this file! 8133a7b590b3Smrg# It is necessary for linking the library. 8134943345d3Smrg 8135a7b590b3Smrg# The name that we can dlopen(3). 8136a7b590b3Smrgdlname='$tdlname' 8137943345d3Smrg 8138a7b590b3Smrg# Names of this library. 8139a7b590b3Smrglibrary_names='$library_names' 8140943345d3Smrg 8141a7b590b3Smrg# The name of the static archive. 8142a7b590b3Smrgold_library='$old_library' 8143943345d3Smrg 8144a7b590b3Smrg# Linker flags that can not go in dependency_libs. 8145a7b590b3Smrginherited_linker_flags='$new_inherited_linker_flags' 8146943345d3Smrg 8147a7b590b3Smrg# Libraries that this one depends upon. 8148a7b590b3Smrgdependency_libs='$dependency_libs' 8149943345d3Smrg 8150a7b590b3Smrg# Names of additional weak libraries provided by this library 8151a7b590b3Smrgweak_library_names='$weak_libs' 8152943345d3Smrg 8153a7b590b3Smrg# Version information for $libname. 8154a7b590b3Smrgcurrent=$current 8155a7b590b3Smrgage=$age 8156a7b590b3Smrgrevision=$revision 8157943345d3Smrg 8158a7b590b3Smrg# Is this an already installed library? 8159a7b590b3Smrginstalled=$installed 8160943345d3Smrg 8161a7b590b3Smrg# Should we warn about portability when linking against -modules? 8162a7b590b3Smrgshouldnotlink=$module 8163943345d3Smrg 8164a7b590b3Smrg# Files to dlopen/dlpreopen 8165a7b590b3Smrgdlopen='$dlfiles' 8166a7b590b3Smrgdlpreopen='$dlprefiles' 8167943345d3Smrg 8168a7b590b3Smrg# Directory that this library needs to be installed in: 8169a7b590b3Smrglibdir='$install_libdir'" 8170a7b590b3Smrg if test "$installed" = no && test "$need_relink" = yes; then 8171a7b590b3Smrg $ECHO >> $output "\ 8172a7b590b3Smrgrelink_command=\"$relink_command\"" 8173a7b590b3Smrg fi 8174a7b590b3Smrg done 8175a7b590b3Smrg } 8176943345d3Smrg 8177a7b590b3Smrg # Do a symbolic link so that the libtool archive can be found in 8178a7b590b3Smrg # LD_LIBRARY_PATH before the program is installed. 8179a7b590b3Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 8180a7b590b3Smrg ;; 8181a7b590b3Smrg esac 8182a7b590b3Smrg exit $EXIT_SUCCESS 8183a7b590b3Smrg} 8184943345d3Smrg 8185a7b590b3Smrg{ test "$mode" = link || test "$mode" = relink; } && 8186a7b590b3Smrg func_mode_link ${1+"$@"} 8187f67b85aaSmrg 8188943345d3Smrg 8189a7b590b3Smrg# func_mode_uninstall arg... 8190a7b590b3Smrgfunc_mode_uninstall () 8191a7b590b3Smrg{ 8192a7b590b3Smrg $opt_debug 8193a7b590b3Smrg RM="$nonopt" 8194943345d3Smrg files= 8195943345d3Smrg rmforce= 8196943345d3Smrg exit_status=0 8197943345d3Smrg 8198943345d3Smrg # This variable tells wrapper scripts just to set variables rather 8199943345d3Smrg # than running their programs. 8200943345d3Smrg libtool_install_magic="$magic" 8201943345d3Smrg 8202943345d3Smrg for arg 8203943345d3Smrg do 8204943345d3Smrg case $arg in 8205a7b590b3Smrg -f) RM="$RM $arg"; rmforce=yes ;; 8206a7b590b3Smrg -*) RM="$RM $arg" ;; 8207943345d3Smrg *) files="$files $arg" ;; 8208943345d3Smrg esac 8209943345d3Smrg done 8210943345d3Smrg 8211a7b590b3Smrg test -z "$RM" && \ 8212a7b590b3Smrg func_fatal_help "you must specify an RM program" 8213943345d3Smrg 8214943345d3Smrg rmdirs= 8215943345d3Smrg 8216943345d3Smrg origobjdir="$objdir" 8217943345d3Smrg for file in $files; do 8218a7b590b3Smrg func_dirname "$file" "" "." 8219a7b590b3Smrg dir="$func_dirname_result" 8220a7b590b3Smrg if test "X$dir" = X.; then 8221943345d3Smrg objdir="$origobjdir" 8222943345d3Smrg else 8223943345d3Smrg objdir="$dir/$origobjdir" 8224943345d3Smrg fi 8225a7b590b3Smrg func_basename "$file" 8226a7b590b3Smrg name="$func_basename_result" 8227943345d3Smrg test "$mode" = uninstall && objdir="$dir" 8228943345d3Smrg 8229943345d3Smrg # Remember objdir for removal later, being careful to avoid duplicates 8230943345d3Smrg if test "$mode" = clean; then 8231943345d3Smrg case " $rmdirs " in 8232943345d3Smrg *" $objdir "*) ;; 8233943345d3Smrg *) rmdirs="$rmdirs $objdir" ;; 8234943345d3Smrg esac 8235943345d3Smrg fi 8236943345d3Smrg 8237943345d3Smrg # Don't error if the file doesn't exist and rm -f was used. 8238a7b590b3Smrg if { test -L "$file"; } >/dev/null 2>&1 || 8239a7b590b3Smrg { test -h "$file"; } >/dev/null 2>&1 || 8240a7b590b3Smrg test -f "$file"; then 8241943345d3Smrg : 8242943345d3Smrg elif test -d "$file"; then 8243943345d3Smrg exit_status=1 8244943345d3Smrg continue 8245943345d3Smrg elif test "$rmforce" = yes; then 8246943345d3Smrg continue 8247943345d3Smrg fi 8248943345d3Smrg 8249943345d3Smrg rmfiles="$file" 8250943345d3Smrg 8251943345d3Smrg case $name in 8252943345d3Smrg *.la) 8253943345d3Smrg # Possibly a libtool archive, so verify it. 8254a7b590b3Smrg if func_lalib_p "$file"; then 8255a7b590b3Smrg func_source $dir/$name 8256943345d3Smrg 8257943345d3Smrg # Delete the libtool libraries and symlinks. 8258943345d3Smrg for n in $library_names; do 8259943345d3Smrg rmfiles="$rmfiles $objdir/$n" 8260943345d3Smrg done 8261943345d3Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 8262943345d3Smrg 8263943345d3Smrg case "$mode" in 8264943345d3Smrg clean) 8265943345d3Smrg case " $library_names " in 8266943345d3Smrg # " " in the beginning catches empty $dlname 8267943345d3Smrg *" $dlname "*) ;; 8268943345d3Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 8269943345d3Smrg esac 8270a7b590b3Smrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 8271943345d3Smrg ;; 8272943345d3Smrg uninstall) 8273943345d3Smrg if test -n "$library_names"; then 8274943345d3Smrg # Do each command in the postuninstall commands. 8275a7b590b3Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8276943345d3Smrg fi 8277943345d3Smrg 8278943345d3Smrg if test -n "$old_library"; then 8279943345d3Smrg # Do each command in the old_postuninstall commands. 8280a7b590b3Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8281943345d3Smrg fi 8282943345d3Smrg # FIXME: should reinstall the best remaining shared library. 8283943345d3Smrg ;; 8284943345d3Smrg esac 8285943345d3Smrg fi 8286943345d3Smrg ;; 8287943345d3Smrg 8288943345d3Smrg *.lo) 8289943345d3Smrg # Possibly a libtool object, so verify it. 8290a7b590b3Smrg if func_lalib_p "$file"; then 8291943345d3Smrg 8292943345d3Smrg # Read the .lo file 8293a7b590b3Smrg func_source $dir/$name 8294943345d3Smrg 8295943345d3Smrg # Add PIC object to the list of files to remove. 8296a7b590b3Smrg if test -n "$pic_object" && 8297a7b590b3Smrg test "$pic_object" != none; then 8298943345d3Smrg rmfiles="$rmfiles $dir/$pic_object" 8299943345d3Smrg fi 8300943345d3Smrg 8301943345d3Smrg # Add non-PIC object to the list of files to remove. 8302a7b590b3Smrg if test -n "$non_pic_object" && 8303a7b590b3Smrg test "$non_pic_object" != none; then 8304943345d3Smrg rmfiles="$rmfiles $dir/$non_pic_object" 8305943345d3Smrg fi 8306943345d3Smrg fi 8307943345d3Smrg ;; 8308943345d3Smrg 8309943345d3Smrg *) 8310943345d3Smrg if test "$mode" = clean ; then 8311943345d3Smrg noexename=$name 8312943345d3Smrg case $file in 8313943345d3Smrg *.exe) 8314a7b590b3Smrg func_stripname '' '.exe' "$file" 8315a7b590b3Smrg file=$func_stripname_result 8316a7b590b3Smrg func_stripname '' '.exe' "$name" 8317a7b590b3Smrg noexename=$func_stripname_result 8318943345d3Smrg # $file with .exe has already been added to rmfiles, 8319943345d3Smrg # add $file without .exe 8320943345d3Smrg rmfiles="$rmfiles $file" 8321943345d3Smrg ;; 8322943345d3Smrg esac 8323943345d3Smrg # Do a test to see if this is a libtool program. 8324a7b590b3Smrg if func_ltwrapper_p "$file"; then 8325a7b590b3Smrg if func_ltwrapper_executable_p "$file"; then 8326a7b590b3Smrg func_ltwrapper_scriptname "$file" 8327a7b590b3Smrg relink_command= 8328a7b590b3Smrg func_source $func_ltwrapper_scriptname_result 8329a7b590b3Smrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 8330a7b590b3Smrg else 8331a7b590b3Smrg relink_command= 8332a7b590b3Smrg func_source $dir/$noexename 8333a7b590b3Smrg fi 8334943345d3Smrg 8335943345d3Smrg # note $name still contains .exe if it was in $file originally 8336943345d3Smrg # as does the version of $file that was added into $rmfiles 8337943345d3Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 8338943345d3Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 8339943345d3Smrg rmfiles="$rmfiles $objdir/lt-$name" 8340943345d3Smrg fi 8341943345d3Smrg if test "X$noexename" != "X$name" ; then 8342943345d3Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 8343943345d3Smrg fi 8344943345d3Smrg fi 8345943345d3Smrg fi 8346943345d3Smrg ;; 8347943345d3Smrg esac 8348a7b590b3Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 8349943345d3Smrg done 8350943345d3Smrg objdir="$origobjdir" 8351943345d3Smrg 8352943345d3Smrg # Try to remove the ${objdir}s in the directories where we deleted files 8353943345d3Smrg for dir in $rmdirs; do 8354943345d3Smrg if test -d "$dir"; then 8355a7b590b3Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 8356943345d3Smrg fi 8357943345d3Smrg done 8358943345d3Smrg 8359943345d3Smrg exit $exit_status 8360a7b590b3Smrg} 8361943345d3Smrg 8362a7b590b3Smrg{ test "$mode" = uninstall || test "$mode" = clean; } && 8363a7b590b3Smrg func_mode_uninstall ${1+"$@"} 8364943345d3Smrg 8365a7b590b3Smrgtest -z "$mode" && { 8366a7b590b3Smrg help="$generic_help" 8367a7b590b3Smrg func_fatal_help "you must specify a MODE" 8368a7b590b3Smrg} 8369a7b590b3Smrg 8370a7b590b3Smrgtest -z "$exec_cmd" && \ 8371a7b590b3Smrg func_fatal_help "invalid operation mode \`$mode'" 8372943345d3Smrg 8373943345d3Smrgif test -n "$exec_cmd"; then 8374a7b590b3Smrg eval exec "$exec_cmd" 8375943345d3Smrg exit $EXIT_FAILURE 8376943345d3Smrgfi 8377943345d3Smrg 8378a7b590b3Smrgexit $exit_status 8379943345d3Smrg 8380943345d3Smrg 8381943345d3Smrg# The TAGs below are defined such that we never get into a situation 8382943345d3Smrg# in which we disable both kinds of libraries. Given conflicting 8383943345d3Smrg# choices, we go for a static library, that is the most portable, 8384943345d3Smrg# since we can't tell whether shared libraries were disabled because 8385943345d3Smrg# the user asked for that or because the platform doesn't support 8386943345d3Smrg# them. This is particularly important on AIX, because we don't 8387943345d3Smrg# support having both static and shared libraries enabled at the same 8388943345d3Smrg# time on that platform, so we default to a shared-only configuration. 8389943345d3Smrg# If a disable-shared tag is given, we'll fallback to a static-only 8390943345d3Smrg# configuration. But we'll never go from static-only to shared-only. 8391943345d3Smrg 8392943345d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 8393a7b590b3Smrgbuild_libtool_libs=no 8394a7b590b3Smrgbuild_old_libs=yes 8395943345d3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 8396943345d3Smrg 8397943345d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 8398a7b590b3Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 8399943345d3Smrg# ### END LIBTOOL TAG CONFIG: disable-static 8400943345d3Smrg 8401943345d3Smrg# Local Variables: 8402943345d3Smrg# mode:shell-script 8403943345d3Smrg# sh-indentation:2 8404943345d3Smrg# End: 8405a7b590b3Smrg# vi:sw=2 8406a7b590b3Smrg 8407