ltmain.sh revision c3c9db83
1c3c9db83Smrg# Generated from ltmain.m4sh. 2c3c9db83Smrg 3c3c9db83Smrg# ltmain.sh (GNU libtool) 2.2.6b 4c3c9db83Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 5c3c9db83Smrg 6c3c9db83Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. 7c3c9db83Smrg# This is free software; see the source for copying conditions. There is NO 8c3c9db83Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9c3c9db83Smrg 10c3c9db83Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11692f60a7Smrg# it under the terms of the GNU General Public License as published by 12692f60a7Smrg# the Free Software Foundation; either version 2 of the License, or 13692f60a7Smrg# (at your option) any later version. 14692f60a7Smrg# 15c3c9db83Smrg# As a special exception to the GNU General Public License, 16c3c9db83Smrg# if you distribute this file as part of a program or library that 17c3c9db83Smrg# is built using GNU Libtool, you may include this file under the 18c3c9db83Smrg# same distribution terms that you use for the rest of that program. 19c3c9db83Smrg# 20c3c9db83Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21692f60a7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22692f60a7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23692f60a7Smrg# General Public License for more details. 24692f60a7Smrg# 25692f60a7Smrg# You should have received a copy of the GNU General Public License 26c3c9db83Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 27c3c9db83Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28c3c9db83Smrg# or obtained by writing to the Free Software Foundation, Inc., 29c3c9db83Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 302e71ea71Smrg 31c3c9db83Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 32c3c9db83Smrg# 33c3c9db83Smrg# Provide generalized library-building support services. 34c3c9db83Smrg# 35c3c9db83Smrg# --config show all configuration variables 36c3c9db83Smrg# --debug enable verbose shell tracing 37c3c9db83Smrg# -n, --dry-run display commands without modifying any files 38c3c9db83Smrg# --features display basic configuration information and exit 39c3c9db83Smrg# --mode=MODE use operation mode MODE 40c3c9db83Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 41c3c9db83Smrg# --quiet, --silent don't print informational messages 42c3c9db83Smrg# --tag=TAG use configuration variables from tag TAG 43c3c9db83Smrg# -v, --verbose print informational messages (default) 44c3c9db83Smrg# --version print version information 45c3c9db83Smrg# -h, --help print short or long help message 46c3c9db83Smrg# 47c3c9db83Smrg# MODE must be one of the following: 48c3c9db83Smrg# 49c3c9db83Smrg# clean remove files from the build directory 50c3c9db83Smrg# compile compile a source file into a libtool object 51c3c9db83Smrg# execute automatically set library path, then run a program 52c3c9db83Smrg# finish complete the installation of libtool libraries 53c3c9db83Smrg# install install libraries or executables 54c3c9db83Smrg# link create a library or an executable 55c3c9db83Smrg# uninstall remove libraries from an installed directory 56c3c9db83Smrg# 57c3c9db83Smrg# MODE-ARGS vary depending on the MODE. 58c3c9db83Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 59c3c9db83Smrg# 60c3c9db83Smrg# When reporting a bug, please describe a test case to reproduce it and 61c3c9db83Smrg# include the following information: 62c3c9db83Smrg# 63c3c9db83Smrg# host-triplet: $host 64c3c9db83Smrg# shell: $SHELL 65c3c9db83Smrg# compiler: $LTCC 66c3c9db83Smrg# compiler flags: $LTCFLAGS 67c3c9db83Smrg# linker: $LD (gnu? $with_gnu_ld) 68c3c9db83Smrg# $progname: (GNU libtool) 2.2.6b 69c3c9db83Smrg# automake: $automake_version 70c3c9db83Smrg# autoconf: $autoconf_version 71c3c9db83Smrg# 72c3c9db83Smrg# Report bugs to <bug-libtool@gnu.org>. 73692f60a7Smrg 74692f60a7SmrgPROGRAM=ltmain.sh 75692f60a7SmrgPACKAGE=libtool 76c3c9db83SmrgVERSION=2.2.6b 77c3c9db83SmrgTIMESTAMP="" 78c3c9db83Smrgpackage_revision=1.3017 7954569438Smrg 80c3c9db83Smrg# Be Bourne compatible 8154569438Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8254569438Smrg emulate sh 8354569438Smrg NULLCMD=: 8454569438Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 8554569438Smrg # is contrary to our usage. Disable this feature. 8654569438Smrg alias -g '${1+"$@"}'='"$@"' 87692f60a7Smrg setopt NO_GLOB_SUBST 8854569438Smrgelse 8954569438Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 90692f60a7Smrgfi 9154569438SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9254569438SmrgDUALCASE=1; export DUALCASE # for MKS sh 93692f60a7Smrg 94c3c9db83Smrg# NLS nuisances: We save the old values to restore during execute mode. 95692f60a7Smrg# Only set LANG and LC_ALL to C if already set. 96692f60a7Smrg# These must not be set unconditionally because not all systems understand 97692f60a7Smrg# e.g. LANG=C (notably SCO). 98c3c9db83Smrglt_user_locale= 99c3c9db83Smrglt_safe_locale= 10054569438Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 10154569438Smrgdo 10254569438Smrg eval "if test \"\${$lt_var+set}\" = set; then 103c3c9db83Smrg save_$lt_var=\$$lt_var 104c3c9db83Smrg $lt_var=C 10554569438Smrg export $lt_var 106c3c9db83Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 107c3c9db83Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 10854569438Smrg fi" 10954569438Smrgdone 11054569438Smrg 111c3c9db83Smrg$lt_unset CDPATH 112c3c9db83Smrg 113c3c9db83Smrg 114c3c9db83Smrg 115c3c9db83Smrg 116c3c9db83Smrg 117c3c9db83Smrg: ${CP="cp -f"} 118c3c9db83Smrg: ${ECHO="echo"} 119c3c9db83Smrg: ${EGREP="/bin/grep -E"} 120c3c9db83Smrg: ${FGREP="/bin/grep -F"} 121c3c9db83Smrg: ${GREP="/bin/grep"} 122c3c9db83Smrg: ${LN_S="ln -s"} 123c3c9db83Smrg: ${MAKE="make"} 124c3c9db83Smrg: ${MKDIR="mkdir"} 125c3c9db83Smrg: ${MV="mv -f"} 126c3c9db83Smrg: ${RM="rm -f"} 127c3c9db83Smrg: ${SED="/bin/sed"} 128c3c9db83Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 129c3c9db83Smrg: ${Xsed="$SED -e 1s/^X//"} 130c3c9db83Smrg 131c3c9db83Smrg# Global variables: 132c3c9db83SmrgEXIT_SUCCESS=0 133c3c9db83SmrgEXIT_FAILURE=1 134c3c9db83SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 135c3c9db83SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 136c3c9db83Smrg 137c3c9db83Smrgexit_status=$EXIT_SUCCESS 138692f60a7Smrg 139692f60a7Smrg# Make sure IFS has a sensible default 140692f60a7Smrglt_nl=' 141692f60a7Smrg' 142692f60a7SmrgIFS=" $lt_nl" 143692f60a7Smrg 144c3c9db83Smrgdirname="s,/[^/]*$,," 145c3c9db83Smrgbasename="s,^.*/,," 146c3c9db83Smrg 147c3c9db83Smrg# func_dirname_and_basename file append nondir_replacement 148c3c9db83Smrg# perform func_basename and func_dirname in a single function 149c3c9db83Smrg# call: 150c3c9db83Smrg# dirname: Compute the dirname of FILE. If nonempty, 151c3c9db83Smrg# add APPEND to the result, otherwise set result 152c3c9db83Smrg# to NONDIR_REPLACEMENT. 153c3c9db83Smrg# value returned in "$func_dirname_result" 154c3c9db83Smrg# basename: Compute filename of FILE. 155c3c9db83Smrg# value retuned in "$func_basename_result" 156c3c9db83Smrg# Implementation must be kept synchronized with func_dirname 157c3c9db83Smrg# and func_basename. For efficiency, we do not delegate to 158c3c9db83Smrg# those functions but instead duplicate the functionality here. 159c3c9db83Smrgfunc_dirname_and_basename () 160c3c9db83Smrg{ 161c3c9db83Smrg # Extract subdirectory from the argument. 162c3c9db83Smrg func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` 163c3c9db83Smrg if test "X$func_dirname_result" = "X${1}"; then 164c3c9db83Smrg func_dirname_result="${3}" 165c3c9db83Smrg else 166c3c9db83Smrg func_dirname_result="$func_dirname_result${2}" 167c3c9db83Smrg fi 168c3c9db83Smrg func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` 169c3c9db83Smrg} 17085ee4c00Smrg 171c3c9db83Smrg# Generated shell functions inserted here. 172c3c9db83Smrg 173c3c9db83Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 174c3c9db83Smrg# is ksh but when the shell is invoked as "sh" and the current value of 175c3c9db83Smrg# the _XPG environment variable is not equal to 1 (one), the special 176c3c9db83Smrg# positional parameter $0, within a function call, is the name of the 177c3c9db83Smrg# function. 178c3c9db83Smrgprogpath="$0" 179c3c9db83Smrg 180c3c9db83Smrg# The name of this program: 181c3c9db83Smrg# In the unlikely event $progname began with a '-', it would play havoc with 182c3c9db83Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case: 183c3c9db83Smrgfunc_dirname_and_basename "$progpath" 184c3c9db83Smrgprogname=$func_basename_result 185c3c9db83Smrgcase $progname in 186c3c9db83Smrg -*) progname=./$progname ;; 187c3c9db83Smrgesac 188c3c9db83Smrg 189c3c9db83Smrg# Make sure we have an absolute path for reexecution: 190c3c9db83Smrgcase $progpath in 191c3c9db83Smrg [\\/]*|[A-Za-z]:\\*) ;; 192c3c9db83Smrg *[\\/]*) 193c3c9db83Smrg progdir=$func_dirname_result 194c3c9db83Smrg progdir=`cd "$progdir" && pwd` 195c3c9db83Smrg progpath="$progdir/$progname" 196c3c9db83Smrg ;; 197c3c9db83Smrg *) 198c3c9db83Smrg save_IFS="$IFS" 199c3c9db83Smrg IFS=: 200c3c9db83Smrg for progdir in $PATH; do 201c3c9db83Smrg IFS="$save_IFS" 202c3c9db83Smrg test -x "$progdir/$progname" && break 203c3c9db83Smrg done 204c3c9db83Smrg IFS="$save_IFS" 205c3c9db83Smrg test -n "$progdir" || progdir=`pwd` 206c3c9db83Smrg progpath="$progdir/$progname" 207c3c9db83Smrg ;; 208c3c9db83Smrgesac 209c3c9db83Smrg 210c3c9db83Smrg# Sed substitution that helps us do robust quoting. It backslashifies 211c3c9db83Smrg# metacharacters that are still active within double-quoted strings. 212c3c9db83SmrgXsed="${SED}"' -e 1s/^X//' 213c3c9db83Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 214c3c9db83Smrg 215c3c9db83Smrg# Same as above, but do not quote variable references. 216c3c9db83Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 217c3c9db83Smrg 218c3c9db83Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 219c3c9db83Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 220c3c9db83Smrg# in input to double_quote_subst, that '$' was protected from expansion. 221c3c9db83Smrg# Since each input `\' is now two `\'s, look for any number of runs of 222c3c9db83Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 223c3c9db83Smrgbs='\\' 224c3c9db83Smrgbs2='\\\\' 225c3c9db83Smrgbs4='\\\\\\\\' 226c3c9db83Smrgdollar='\$' 227c3c9db83Smrgsed_double_backslash="\ 228c3c9db83Smrg s/$bs4/&\\ 229c3c9db83Smrg/g 230c3c9db83Smrg s/^$bs2$dollar/$bs&/ 231c3c9db83Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 232c3c9db83Smrg s/\n//g" 233c3c9db83Smrg 234c3c9db83Smrg# Standard options: 235c3c9db83Smrgopt_dry_run=false 236c3c9db83Smrgopt_help=false 237c3c9db83Smrgopt_quiet=false 238c3c9db83Smrgopt_verbose=false 239c3c9db83Smrgopt_warning=: 240c3c9db83Smrg 241c3c9db83Smrg# func_echo arg... 242c3c9db83Smrg# Echo program name prefixed message, along with the current mode 243c3c9db83Smrg# name if it has been set yet. 244c3c9db83Smrgfunc_echo () 245c3c9db83Smrg{ 246c3c9db83Smrg $ECHO "$progname${mode+: }$mode: $*" 247c3c9db83Smrg} 248c3c9db83Smrg 249c3c9db83Smrg# func_verbose arg... 250c3c9db83Smrg# Echo program name prefixed message in verbose mode only. 251c3c9db83Smrgfunc_verbose () 252c3c9db83Smrg{ 253c3c9db83Smrg $opt_verbose && func_echo ${1+"$@"} 254c3c9db83Smrg 255c3c9db83Smrg # A bug in bash halts the script if the last line of a function 256c3c9db83Smrg # fails when set -e is in force, so we need another command to 257c3c9db83Smrg # work around that: 258c3c9db83Smrg : 259c3c9db83Smrg} 260c3c9db83Smrg 261c3c9db83Smrg# func_error arg... 262c3c9db83Smrg# Echo program name prefixed message to standard error. 263c3c9db83Smrgfunc_error () 264c3c9db83Smrg{ 265c3c9db83Smrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 266c3c9db83Smrg} 267c3c9db83Smrg 268c3c9db83Smrg# func_warning arg... 269c3c9db83Smrg# Echo program name prefixed warning message to standard error. 270c3c9db83Smrgfunc_warning () 271c3c9db83Smrg{ 272c3c9db83Smrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 273c3c9db83Smrg 274c3c9db83Smrg # bash bug again: 275c3c9db83Smrg : 276c3c9db83Smrg} 277c3c9db83Smrg 278c3c9db83Smrg# func_fatal_error arg... 279c3c9db83Smrg# Echo program name prefixed message to standard error, and exit. 280c3c9db83Smrgfunc_fatal_error () 281c3c9db83Smrg{ 282c3c9db83Smrg func_error ${1+"$@"} 283c3c9db83Smrg exit $EXIT_FAILURE 284c3c9db83Smrg} 285c3c9db83Smrg 286c3c9db83Smrg# func_fatal_help arg... 287c3c9db83Smrg# Echo program name prefixed message to standard error, followed by 288c3c9db83Smrg# a help hint, and exit. 289c3c9db83Smrgfunc_fatal_help () 290c3c9db83Smrg{ 291c3c9db83Smrg func_error ${1+"$@"} 292c3c9db83Smrg func_fatal_error "$help" 293c3c9db83Smrg} 294c3c9db83Smrghelp="Try \`$progname --help' for more information." ## default 295c3c9db83Smrg 296c3c9db83Smrg 297c3c9db83Smrg# func_grep expression filename 298c3c9db83Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 299c3c9db83Smrgfunc_grep () 300c3c9db83Smrg{ 301c3c9db83Smrg $GREP "$1" "$2" >/dev/null 2>&1 302c3c9db83Smrg} 303c3c9db83Smrg 304c3c9db83Smrg 305c3c9db83Smrg# func_mkdir_p directory-path 306c3c9db83Smrg# Make sure the entire path to DIRECTORY-PATH is available. 307c3c9db83Smrgfunc_mkdir_p () 308c3c9db83Smrg{ 309c3c9db83Smrg my_directory_path="$1" 310c3c9db83Smrg my_dir_list= 311c3c9db83Smrg 312c3c9db83Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 313c3c9db83Smrg 314c3c9db83Smrg # Protect directory names starting with `-' 315c3c9db83Smrg case $my_directory_path in 316c3c9db83Smrg -*) my_directory_path="./$my_directory_path" ;; 317c3c9db83Smrg esac 318c3c9db83Smrg 319c3c9db83Smrg # While some portion of DIR does not yet exist... 320c3c9db83Smrg while test ! -d "$my_directory_path"; do 321c3c9db83Smrg # ...make a list in topmost first order. Use a colon delimited 322c3c9db83Smrg # list incase some portion of path contains whitespace. 323c3c9db83Smrg my_dir_list="$my_directory_path:$my_dir_list" 324c3c9db83Smrg 325c3c9db83Smrg # If the last portion added has no slash in it, the list is done 326c3c9db83Smrg case $my_directory_path in */*) ;; *) break ;; esac 327c3c9db83Smrg 328c3c9db83Smrg # ...otherwise throw away the child directory and loop 329c3c9db83Smrg my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` 330c3c9db83Smrg done 331c3c9db83Smrg my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` 332c3c9db83Smrg 333c3c9db83Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 334c3c9db83Smrg for my_dir in $my_dir_list; do 335c3c9db83Smrg IFS="$save_mkdir_p_IFS" 336c3c9db83Smrg # mkdir can fail with a `File exist' error if two processes 337c3c9db83Smrg # try to create one of the directories concurrently. Don't 338c3c9db83Smrg # stop in that case! 339c3c9db83Smrg $MKDIR "$my_dir" 2>/dev/null || : 340c3c9db83Smrg done 341c3c9db83Smrg IFS="$save_mkdir_p_IFS" 342c3c9db83Smrg 343c3c9db83Smrg # Bail out if we (or some other process) failed to create a directory. 344c3c9db83Smrg test -d "$my_directory_path" || \ 345c3c9db83Smrg func_fatal_error "Failed to create \`$1'" 346c3c9db83Smrg fi 347c3c9db83Smrg} 348692f60a7Smrg 349692f60a7Smrg 350692f60a7Smrg# func_mktempdir [string] 351692f60a7Smrg# Make a temporary directory that won't clash with other running 352692f60a7Smrg# libtool processes, and avoids race conditions if possible. If 353692f60a7Smrg# given, STRING is the basename for that directory. 354692f60a7Smrgfunc_mktempdir () 355692f60a7Smrg{ 356692f60a7Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 357692f60a7Smrg 358c3c9db83Smrg if test "$opt_dry_run" = ":"; then 359692f60a7Smrg # Return a directory name, but don't create it in dry-run mode 360692f60a7Smrg my_tmpdir="${my_template}-$$" 361692f60a7Smrg else 362692f60a7Smrg 363692f60a7Smrg # If mktemp works, use that first and foremost 364692f60a7Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 365692f60a7Smrg 366692f60a7Smrg if test ! -d "$my_tmpdir"; then 367c3c9db83Smrg # Failing that, at least try and use $RANDOM to avoid a race 368c3c9db83Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 369692f60a7Smrg 370c3c9db83Smrg save_mktempdir_umask=`umask` 371c3c9db83Smrg umask 0077 372c3c9db83Smrg $MKDIR "$my_tmpdir" 373c3c9db83Smrg umask $save_mktempdir_umask 374692f60a7Smrg fi 375692f60a7Smrg 376692f60a7Smrg # If we're not in dry-run mode, bomb out on failure 377c3c9db83Smrg test -d "$my_tmpdir" || \ 378c3c9db83Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 379692f60a7Smrg fi 380692f60a7Smrg 381c3c9db83Smrg $ECHO "X$my_tmpdir" | $Xsed 382692f60a7Smrg} 383692f60a7Smrg 384692f60a7Smrg 385c3c9db83Smrg# func_quote_for_eval arg 386c3c9db83Smrg# Aesthetically quote ARG to be evaled later. 387c3c9db83Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 388c3c9db83Smrg# is double-quoted, suitable for a subsequent eval, whereas 389c3c9db83Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 390c3c9db83Smrg# which are still active within double quotes backslashified. 391c3c9db83Smrgfunc_quote_for_eval () 392692f60a7Smrg{ 393c3c9db83Smrg case $1 in 394c3c9db83Smrg *[\\\`\"\$]*) 395c3c9db83Smrg func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; 396c3c9db83Smrg *) 397c3c9db83Smrg func_quote_for_eval_unquoted_result="$1" ;; 398c3c9db83Smrg esac 399c3c9db83Smrg 400c3c9db83Smrg case $func_quote_for_eval_unquoted_result in 401c3c9db83Smrg # Double-quote args containing shell metacharacters to delay 402c3c9db83Smrg # word splitting, command substitution and and variable 403c3c9db83Smrg # expansion for a subsequent eval. 404c3c9db83Smrg # Many Bourne shells cannot handle close brackets correctly 405c3c9db83Smrg # in scan sets, so we specify it separately. 406c3c9db83Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 407c3c9db83Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 408c3c9db83Smrg ;; 409c3c9db83Smrg *) 410c3c9db83Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 411692f60a7Smrg esac 412692f60a7Smrg} 413692f60a7Smrg 414692f60a7Smrg 415c3c9db83Smrg# func_quote_for_expand arg 416c3c9db83Smrg# Aesthetically quote ARG to be evaled later; same as above, 417c3c9db83Smrg# but do not quote variable references. 418c3c9db83Smrgfunc_quote_for_expand () 419692f60a7Smrg{ 420c3c9db83Smrg case $1 in 421c3c9db83Smrg *[\\\`\"]*) 422c3c9db83Smrg my_arg=`$ECHO "X$1" | $Xsed \ 423c3c9db83Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 424692f60a7Smrg *) 425c3c9db83Smrg my_arg="$1" ;; 426c3c9db83Smrg esac 427c3c9db83Smrg 428c3c9db83Smrg case $my_arg in 429c3c9db83Smrg # Double-quote args containing shell metacharacters to delay 430c3c9db83Smrg # word splitting and command substitution for a subsequent eval. 431c3c9db83Smrg # Many Bourne shells cannot handle close brackets correctly 432c3c9db83Smrg # in scan sets, so we specify it separately. 433c3c9db83Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 434c3c9db83Smrg my_arg="\"$my_arg\"" 435c3c9db83Smrg ;; 436c3c9db83Smrg esac 437c3c9db83Smrg 438c3c9db83Smrg func_quote_for_expand_result="$my_arg" 439692f60a7Smrg} 440692f60a7Smrg 441692f60a7Smrg 442c3c9db83Smrg# func_show_eval cmd [fail_exp] 443c3c9db83Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 444c3c9db83Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 445c3c9db83Smrg# is given, then evaluate it. 446c3c9db83Smrgfunc_show_eval () 447692f60a7Smrg{ 448c3c9db83Smrg my_cmd="$1" 449c3c9db83Smrg my_fail_exp="${2-:}" 45085ee4c00Smrg 451c3c9db83Smrg ${opt_silent-false} || { 452c3c9db83Smrg func_quote_for_expand "$my_cmd" 453c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 454c3c9db83Smrg } 455c3c9db83Smrg 456c3c9db83Smrg if ${opt_dry_run-false}; then :; else 457c3c9db83Smrg eval "$my_cmd" 458c3c9db83Smrg my_status=$? 459c3c9db83Smrg if test "$my_status" -eq 0; then :; else 460c3c9db83Smrg eval "(exit $my_status); $my_fail_exp" 461c3c9db83Smrg fi 462692f60a7Smrg fi 463692f60a7Smrg} 464692f60a7Smrg 465c3c9db83Smrg 466c3c9db83Smrg# func_show_eval_locale cmd [fail_exp] 467c3c9db83Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 468c3c9db83Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 469c3c9db83Smrg# is given, then evaluate it. Use the saved locale for evaluation. 470c3c9db83Smrgfunc_show_eval_locale () 471692f60a7Smrg{ 472c3c9db83Smrg my_cmd="$1" 473c3c9db83Smrg my_fail_exp="${2-:}" 474c3c9db83Smrg 475c3c9db83Smrg ${opt_silent-false} || { 476c3c9db83Smrg func_quote_for_expand "$my_cmd" 477c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 478c3c9db83Smrg } 479c3c9db83Smrg 480c3c9db83Smrg if ${opt_dry_run-false}; then :; else 481c3c9db83Smrg eval "$lt_user_locale 482c3c9db83Smrg $my_cmd" 483c3c9db83Smrg my_status=$? 484c3c9db83Smrg eval "$lt_safe_locale" 485c3c9db83Smrg if test "$my_status" -eq 0; then :; else 486c3c9db83Smrg eval "(exit $my_status); $my_fail_exp" 487c3c9db83Smrg fi 488692f60a7Smrg fi 489c3c9db83Smrg} 490692f60a7Smrg 49185ee4c00Smrg 492c3c9db83Smrg 493c3c9db83Smrg 494c3c9db83Smrg 495c3c9db83Smrg# func_version 496c3c9db83Smrg# Echo version message to standard output and exit. 497c3c9db83Smrgfunc_version () 498c3c9db83Smrg{ 499c3c9db83Smrg $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { 500c3c9db83Smrg s/^# // 501c3c9db83Smrg s/^# *$// 502c3c9db83Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 503c3c9db83Smrg p 504c3c9db83Smrg }' < "$progpath" 505c3c9db83Smrg exit $? 506c3c9db83Smrg} 507c3c9db83Smrg 508c3c9db83Smrg# func_usage 509c3c9db83Smrg# Echo short help message to standard output and exit. 510c3c9db83Smrgfunc_usage () 511c3c9db83Smrg{ 512c3c9db83Smrg $SED -n '/^# Usage:/,/# -h/ { 513c3c9db83Smrg s/^# // 514c3c9db83Smrg s/^# *$// 515c3c9db83Smrg s/\$progname/'$progname'/ 516c3c9db83Smrg p 517c3c9db83Smrg }' < "$progpath" 518c3c9db83Smrg $ECHO 519c3c9db83Smrg $ECHO "run \`$progname --help | more' for full usage" 520c3c9db83Smrg exit $? 521c3c9db83Smrg} 522c3c9db83Smrg 523c3c9db83Smrg# func_help 524c3c9db83Smrg# Echo long help message to standard output and exit. 525c3c9db83Smrgfunc_help () 526c3c9db83Smrg{ 527c3c9db83Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 528c3c9db83Smrg s/^# // 529c3c9db83Smrg s/^# *$// 530c3c9db83Smrg s*\$progname*'$progname'* 531c3c9db83Smrg s*\$host*'"$host"'* 532c3c9db83Smrg s*\$SHELL*'"$SHELL"'* 533c3c9db83Smrg s*\$LTCC*'"$LTCC"'* 534c3c9db83Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 535c3c9db83Smrg s*\$LD*'"$LD"'* 536c3c9db83Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 537c3c9db83Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 538c3c9db83Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 539c3c9db83Smrg p 540c3c9db83Smrg }' < "$progpath" 541c3c9db83Smrg exit $? 542c3c9db83Smrg} 543c3c9db83Smrg 544c3c9db83Smrg# func_missing_arg argname 545c3c9db83Smrg# Echo program name prefixed message to standard error and set global 546c3c9db83Smrg# exit_cmd. 547c3c9db83Smrgfunc_missing_arg () 548c3c9db83Smrg{ 549c3c9db83Smrg func_error "missing argument for $1" 550c3c9db83Smrg exit_cmd=exit 551692f60a7Smrg} 552692f60a7Smrg 553c3c9db83Smrgexit_cmd=: 55485ee4c00Smrg 55585ee4c00Smrg 556c3c9db83Smrg 557c3c9db83Smrg 558c3c9db83Smrg 559c3c9db83Smrg# Check that we have a working $ECHO. 560c3c9db83Smrgif test "X$1" = X--no-reexec; then 561c3c9db83Smrg # Discard the --no-reexec flag, and continue. 56285ee4c00Smrg shift 563c3c9db83Smrgelif test "X$1" = X--fallback-echo; then 564c3c9db83Smrg # Avoid inline document here, it may be left over 565c3c9db83Smrg : 566c3c9db83Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then 567c3c9db83Smrg # Yippee, $ECHO works! 568c3c9db83Smrg : 569c3c9db83Smrgelse 570c3c9db83Smrg # Restart under the correct shell, and then maybe $ECHO will work. 571c3c9db83Smrg exec $SHELL "$progpath" --no-reexec ${1+"$@"} 572c3c9db83Smrgfi 573692f60a7Smrg 574c3c9db83Smrgif test "X$1" = X--fallback-echo; then 575c3c9db83Smrg # used as fallback echo 576c3c9db83Smrg shift 577c3c9db83Smrg cat <<EOF 578c3c9db83Smrg$* 579c3c9db83SmrgEOF 580c3c9db83Smrg exit $EXIT_SUCCESS 581c3c9db83Smrgfi 582692f60a7Smrg 583c3c9db83Smrgmagic="%%%MAGIC variable%%%" 584c3c9db83Smrgmagic_exe="%%%MAGIC EXE variable%%%" 585692f60a7Smrg 586c3c9db83Smrg# Global variables. 587c3c9db83Smrg# $mode is unset 588c3c9db83Smrgnonopt= 589c3c9db83Smrgexecute_dlfiles= 590c3c9db83Smrgpreserve_args= 591c3c9db83Smrglo2o="s/\\.lo\$/.${objext}/" 592c3c9db83Smrgo2lo="s/\\.${objext}\$/.lo/" 593c3c9db83Smrgextracted_archives= 594c3c9db83Smrgextracted_serial=0 59585ee4c00Smrg 596c3c9db83Smrgopt_dry_run=false 597c3c9db83Smrgopt_duplicate_deps=false 598c3c9db83Smrgopt_silent=false 599c3c9db83Smrgopt_debug=: 600692f60a7Smrg 601c3c9db83Smrg# If this variable is set in any of the actions, the command in it 602c3c9db83Smrg# will be execed at the end. This prevents here-documents from being 603c3c9db83Smrg# left over by shells. 604c3c9db83Smrgexec_cmd= 605c3c9db83Smrg 606c3c9db83Smrg# func_fatal_configuration arg... 607c3c9db83Smrg# Echo program name prefixed message to standard error, followed by 608c3c9db83Smrg# a configuration failure hint, and exit. 609c3c9db83Smrgfunc_fatal_configuration () 610c3c9db83Smrg{ 611c3c9db83Smrg func_error ${1+"$@"} 612c3c9db83Smrg func_error "See the $PACKAGE documentation for more information." 613c3c9db83Smrg func_fatal_error "Fatal configuration error." 614c3c9db83Smrg} 61554569438Smrg 61685ee4c00Smrg 617c3c9db83Smrg# func_config 618c3c9db83Smrg# Display the configuration for all the tags in this script. 619c3c9db83Smrgfunc_config () 620c3c9db83Smrg{ 621c3c9db83Smrg re_begincf='^# ### BEGIN LIBTOOL' 622c3c9db83Smrg re_endcf='^# ### END LIBTOOL' 623c3c9db83Smrg 624c3c9db83Smrg # Default configuration. 625c3c9db83Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 626692f60a7Smrg 627692f60a7Smrg # Now print the configurations for the tags. 628692f60a7Smrg for tagname in $taglist; do 629c3c9db83Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 630692f60a7Smrg done 6312e71ea71Smrg 632c3c9db83Smrg exit $? 633c3c9db83Smrg} 6342e71ea71Smrg 635c3c9db83Smrg# func_features 636c3c9db83Smrg# Display the features supported by this script. 637c3c9db83Smrgfunc_features () 638c3c9db83Smrg{ 639c3c9db83Smrg $ECHO "host: $host" 640692f60a7Smrg if test "$build_libtool_libs" = yes; then 641c3c9db83Smrg $ECHO "enable shared libraries" 642692f60a7Smrg else 643c3c9db83Smrg $ECHO "disable shared libraries" 644692f60a7Smrg fi 645692f60a7Smrg if test "$build_old_libs" = yes; then 646c3c9db83Smrg $ECHO "enable static libraries" 647692f60a7Smrg else 648c3c9db83Smrg $ECHO "disable static libraries" 649692f60a7Smrg fi 650c3c9db83Smrg 651692f60a7Smrg exit $? 652c3c9db83Smrg} 653692f60a7Smrg 654c3c9db83Smrg# func_enable_tag tagname 655c3c9db83Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 656c3c9db83Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 657c3c9db83Smrg# variable here. 658c3c9db83Smrgfunc_enable_tag () 659c3c9db83Smrg{ 660c3c9db83Smrg # Global variable: 661c3c9db83Smrg tagname="$1" 662692f60a7Smrg 663c3c9db83Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 664c3c9db83Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 665c3c9db83Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 66685ee4c00Smrg 667c3c9db83Smrg # Validate tagname. 668c3c9db83Smrg case $tagname in 669c3c9db83Smrg *[!-_A-Za-z0-9,/]*) 670c3c9db83Smrg func_fatal_error "invalid tag name: $tagname" 671c3c9db83Smrg ;; 672c3c9db83Smrg esac 673692f60a7Smrg 674c3c9db83Smrg # Don't test for the "default" C tag, as we know it's 675c3c9db83Smrg # there but not specially marked. 676c3c9db83Smrg case $tagname in 677c3c9db83Smrg CC) ;; 678c3c9db83Smrg *) 679c3c9db83Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 680c3c9db83Smrg taglist="$taglist $tagname" 681c3c9db83Smrg 682c3c9db83Smrg # Evaluate the configuration. Be careful to quote the path 683c3c9db83Smrg # and the sed script, to avoid splitting on whitespace, but 684c3c9db83Smrg # also don't use non-portable quotes within backquotes within 685c3c9db83Smrg # quotes we have to do it in 2 steps: 686c3c9db83Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 687c3c9db83Smrg eval "$extractedcf" 688c3c9db83Smrg else 689c3c9db83Smrg func_error "ignoring unknown tag $tagname" 690c3c9db83Smrg fi 691c3c9db83Smrg ;; 692c3c9db83Smrg esac 693c3c9db83Smrg} 694c3c9db83Smrg 695c3c9db83Smrg# Parse options once, thoroughly. This comes as soon as possible in 696c3c9db83Smrg# the script to make things like `libtool --version' happen quickly. 697c3c9db83Smrg{ 6982e71ea71Smrg 699c3c9db83Smrg # Shorthand for --mode=foo, only valid as the first argument 700c3c9db83Smrg case $1 in 701c3c9db83Smrg clean|clea|cle|cl) 702c3c9db83Smrg shift; set dummy --mode clean ${1+"$@"}; shift 703692f60a7Smrg ;; 704c3c9db83Smrg compile|compil|compi|comp|com|co|c) 705c3c9db83Smrg shift; set dummy --mode compile ${1+"$@"}; shift 706692f60a7Smrg ;; 707c3c9db83Smrg execute|execut|execu|exec|exe|ex|e) 708c3c9db83Smrg shift; set dummy --mode execute ${1+"$@"}; shift 70985ee4c00Smrg ;; 710c3c9db83Smrg finish|finis|fini|fin|fi|f) 711c3c9db83Smrg shift; set dummy --mode finish ${1+"$@"}; shift 71285ee4c00Smrg ;; 713c3c9db83Smrg install|instal|insta|inst|ins|in|i) 714c3c9db83Smrg shift; set dummy --mode install ${1+"$@"}; shift 715c3c9db83Smrg ;; 716c3c9db83Smrg link|lin|li|l) 717c3c9db83Smrg shift; set dummy --mode link ${1+"$@"}; shift 718c3c9db83Smrg ;; 719c3c9db83Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 720c3c9db83Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 721692f60a7Smrg ;; 722692f60a7Smrg esac 723692f60a7Smrg 724c3c9db83Smrg # Parse non-mode specific arguments: 725c3c9db83Smrg while test "$#" -gt 0; do 726c3c9db83Smrg opt="$1" 727c3c9db83Smrg shift 72885ee4c00Smrg 729c3c9db83Smrg case $opt in 730c3c9db83Smrg --config) func_config ;; 73185ee4c00Smrg 732c3c9db83Smrg --debug) preserve_args="$preserve_args $opt" 733c3c9db83Smrg func_echo "enabling shell trace mode" 734c3c9db83Smrg opt_debug='set -x' 735c3c9db83Smrg $opt_debug 736c3c9db83Smrg ;; 73785ee4c00Smrg 738c3c9db83Smrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 739c3c9db83Smrg execute_dlfiles="$execute_dlfiles $1" 740c3c9db83Smrg shift 741c3c9db83Smrg ;; 74285ee4c00Smrg 743c3c9db83Smrg --dry-run | -n) opt_dry_run=: ;; 744c3c9db83Smrg --features) func_features ;; 745c3c9db83Smrg --finish) mode="finish" ;; 746c3c9db83Smrg 747c3c9db83Smrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 748c3c9db83Smrg case $1 in 749c3c9db83Smrg # Valid mode arguments: 750c3c9db83Smrg clean) ;; 751c3c9db83Smrg compile) ;; 752c3c9db83Smrg execute) ;; 753c3c9db83Smrg finish) ;; 754c3c9db83Smrg install) ;; 755c3c9db83Smrg link) ;; 756c3c9db83Smrg relink) ;; 757c3c9db83Smrg uninstall) ;; 758c3c9db83Smrg 759c3c9db83Smrg # Catch anything else as an error 760c3c9db83Smrg *) func_error "invalid argument for $opt" 761c3c9db83Smrg exit_cmd=exit 762c3c9db83Smrg break 763c3c9db83Smrg ;; 764c3c9db83Smrg esac 765c3c9db83Smrg 766c3c9db83Smrg mode="$1" 767c3c9db83Smrg shift 768c3c9db83Smrg ;; 769c3c9db83Smrg 770c3c9db83Smrg --preserve-dup-deps) 771c3c9db83Smrg opt_duplicate_deps=: ;; 772c3c9db83Smrg 773c3c9db83Smrg --quiet|--silent) preserve_args="$preserve_args $opt" 774c3c9db83Smrg opt_silent=: 775c3c9db83Smrg ;; 776c3c9db83Smrg 777c3c9db83Smrg --verbose| -v) preserve_args="$preserve_args $opt" 778c3c9db83Smrg opt_silent=false 779c3c9db83Smrg ;; 780c3c9db83Smrg 781c3c9db83Smrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 782c3c9db83Smrg preserve_args="$preserve_args $opt $1" 783c3c9db83Smrg func_enable_tag "$1" # tagname is set here 784c3c9db83Smrg shift 785c3c9db83Smrg ;; 786c3c9db83Smrg 787c3c9db83Smrg # Separate optargs to long options: 788c3c9db83Smrg -dlopen=*|--mode=*|--tag=*) 789c3c9db83Smrg func_opt_split "$opt" 790c3c9db83Smrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 791c3c9db83Smrg shift 792c3c9db83Smrg ;; 793c3c9db83Smrg 794c3c9db83Smrg -\?|-h) func_usage ;; 795c3c9db83Smrg --help) opt_help=: ;; 796c3c9db83Smrg --version) func_version ;; 797c3c9db83Smrg 798c3c9db83Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 799c3c9db83Smrg 800c3c9db83Smrg *) nonopt="$opt" 801c3c9db83Smrg break 802c3c9db83Smrg ;; 803c3c9db83Smrg esac 804c3c9db83Smrg done 805c3c9db83Smrg 806c3c9db83Smrg 807c3c9db83Smrg case $host in 808c3c9db83Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 809c3c9db83Smrg # don't eliminate duplications in $postdeps and $predeps 810c3c9db83Smrg opt_duplicate_compiler_generated_deps=: 8112e71ea71Smrg ;; 8122e71ea71Smrg *) 813c3c9db83Smrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 814c3c9db83Smrg ;; 815c3c9db83Smrg esac 81685ee4c00Smrg 817c3c9db83Smrg # Having warned about all mis-specified options, bail out if 818c3c9db83Smrg # anything was wrong. 819c3c9db83Smrg $exit_cmd $EXIT_FAILURE 820c3c9db83Smrg} 821c3c9db83Smrg 822c3c9db83Smrg# func_check_version_match 823c3c9db83Smrg# Ensure that we are using m4 macros, and libtool script from the same 824c3c9db83Smrg# release of libtool. 825c3c9db83Smrgfunc_check_version_match () 826c3c9db83Smrg{ 827c3c9db83Smrg if test "$package_revision" != "$macro_revision"; then 828c3c9db83Smrg if test "$VERSION" != "$macro_version"; then 829c3c9db83Smrg if test -z "$macro_version"; then 830c3c9db83Smrg cat >&2 <<_LT_EOF 831c3c9db83Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 832c3c9db83Smrg$progname: definition of this LT_INIT comes from an older release. 833c3c9db83Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 834c3c9db83Smrg$progname: and run autoconf again. 835c3c9db83Smrg_LT_EOF 836c3c9db83Smrg else 837c3c9db83Smrg cat >&2 <<_LT_EOF 838c3c9db83Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 839c3c9db83Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 840c3c9db83Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 841c3c9db83Smrg$progname: and run autoconf again. 842c3c9db83Smrg_LT_EOF 843692f60a7Smrg fi 844c3c9db83Smrg else 845c3c9db83Smrg cat >&2 <<_LT_EOF 846c3c9db83Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 847c3c9db83Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 848c3c9db83Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 849c3c9db83Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 850c3c9db83Smrg_LT_EOF 851c3c9db83Smrg fi 852c3c9db83Smrg 853c3c9db83Smrg exit $EXIT_MISMATCH 854c3c9db83Smrg fi 855c3c9db83Smrg} 856c3c9db83Smrg 857c3c9db83Smrg 858c3c9db83Smrg## ----------- ## 859c3c9db83Smrg## Main. ## 860c3c9db83Smrg## ----------- ## 861c3c9db83Smrg 862c3c9db83Smrg$opt_help || { 863c3c9db83Smrg # Sanity checks first: 864c3c9db83Smrg func_check_version_match 865c3c9db83Smrg 866c3c9db83Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 867c3c9db83Smrg func_fatal_configuration "not configured to build any kind of library" 868692f60a7Smrg fi 869692f60a7Smrg 870c3c9db83Smrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 871c3c9db83Smrg 872c3c9db83Smrg 873c3c9db83Smrg # Darwin sucks 874c3c9db83Smrg eval std_shrext=\"$shrext_cmds\" 875c3c9db83Smrg 876c3c9db83Smrg 877692f60a7Smrg # Only execute mode is allowed to have -dlopen flags. 878692f60a7Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 879c3c9db83Smrg func_error "unrecognized option \`-dlopen'" 880c3c9db83Smrg $ECHO "$help" 1>&2 881692f60a7Smrg exit $EXIT_FAILURE 882692f60a7Smrg fi 883692f60a7Smrg 884692f60a7Smrg # Change the help message to a mode-specific one. 885692f60a7Smrg generic_help="$help" 886c3c9db83Smrg help="Try \`$progname --help --mode=$mode' for more information." 887c3c9db83Smrg} 888692f60a7Smrg 889692f60a7Smrg 890c3c9db83Smrg# func_lalib_p file 891c3c9db83Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 892c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out 893c3c9db83Smrg# determined imposters. 894c3c9db83Smrgfunc_lalib_p () 895c3c9db83Smrg{ 896c3c9db83Smrg test -f "$1" && 897c3c9db83Smrg $SED -e 4q "$1" 2>/dev/null \ 898c3c9db83Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 899c3c9db83Smrg} 900692f60a7Smrg 901c3c9db83Smrg# func_lalib_unsafe_p file 902c3c9db83Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 903c3c9db83Smrg# This function implements the same check as func_lalib_p without 904c3c9db83Smrg# resorting to external programs. To this end, it redirects stdin and 905c3c9db83Smrg# closes it afterwards, without saving the original file descriptor. 906c3c9db83Smrg# As a safety measure, use it only where a negative result would be 907c3c9db83Smrg# fatal anyway. Works if `file' does not exist. 908c3c9db83Smrgfunc_lalib_unsafe_p () 909c3c9db83Smrg{ 910c3c9db83Smrg lalib_p=no 911c3c9db83Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 912c3c9db83Smrg for lalib_p_l in 1 2 3 4 913c3c9db83Smrg do 914c3c9db83Smrg read lalib_p_line 915c3c9db83Smrg case "$lalib_p_line" in 916c3c9db83Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 917c3c9db83Smrg esac 918c3c9db83Smrg done 919c3c9db83Smrg exec 0<&5 5<&- 920c3c9db83Smrg fi 921c3c9db83Smrg test "$lalib_p" = yes 922c3c9db83Smrg} 923692f60a7Smrg 924c3c9db83Smrg# func_ltwrapper_script_p file 925c3c9db83Smrg# True iff FILE is a libtool wrapper script 926c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out 927c3c9db83Smrg# determined imposters. 928c3c9db83Smrgfunc_ltwrapper_script_p () 929c3c9db83Smrg{ 930c3c9db83Smrg func_lalib_p "$1" 931c3c9db83Smrg} 932692f60a7Smrg 933c3c9db83Smrg# func_ltwrapper_executable_p file 934c3c9db83Smrg# True iff FILE is a libtool wrapper executable 935c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out 936c3c9db83Smrg# determined imposters. 937c3c9db83Smrgfunc_ltwrapper_executable_p () 938c3c9db83Smrg{ 939c3c9db83Smrg func_ltwrapper_exec_suffix= 940c3c9db83Smrg case $1 in 941c3c9db83Smrg *.exe) ;; 942c3c9db83Smrg *) func_ltwrapper_exec_suffix=.exe ;; 943c3c9db83Smrg esac 944c3c9db83Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 945c3c9db83Smrg} 94685ee4c00Smrg 947c3c9db83Smrg# func_ltwrapper_scriptname file 948c3c9db83Smrg# Assumes file is an ltwrapper_executable 949c3c9db83Smrg# uses $file to determine the appropriate filename for a 950c3c9db83Smrg# temporary ltwrapper_script. 951c3c9db83Smrgfunc_ltwrapper_scriptname () 952c3c9db83Smrg{ 953c3c9db83Smrg func_ltwrapper_scriptname_result="" 954c3c9db83Smrg if func_ltwrapper_executable_p "$1"; then 955c3c9db83Smrg func_dirname_and_basename "$1" "" "." 956c3c9db83Smrg func_stripname '' '.exe' "$func_basename_result" 957c3c9db83Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 958c3c9db83Smrg fi 959c3c9db83Smrg} 960c3c9db83Smrg 961c3c9db83Smrg# func_ltwrapper_p file 962c3c9db83Smrg# True iff FILE is a libtool wrapper script or wrapper executable 963c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out 964c3c9db83Smrg# determined imposters. 965c3c9db83Smrgfunc_ltwrapper_p () 966c3c9db83Smrg{ 967c3c9db83Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 968c3c9db83Smrg} 969c3c9db83Smrg 970c3c9db83Smrg 971c3c9db83Smrg# func_execute_cmds commands fail_cmd 972c3c9db83Smrg# Execute tilde-delimited COMMANDS. 973c3c9db83Smrg# If FAIL_CMD is given, eval that upon failure. 974c3c9db83Smrg# FAIL_CMD may read-access the current command in variable CMD! 975c3c9db83Smrgfunc_execute_cmds () 976c3c9db83Smrg{ 977c3c9db83Smrg $opt_debug 978c3c9db83Smrg save_ifs=$IFS; IFS='~' 979c3c9db83Smrg for cmd in $1; do 980c3c9db83Smrg IFS=$save_ifs 981c3c9db83Smrg eval cmd=\"$cmd\" 982c3c9db83Smrg func_show_eval "$cmd" "${2-:}" 983c3c9db83Smrg done 984c3c9db83Smrg IFS=$save_ifs 985c3c9db83Smrg} 986c3c9db83Smrg 987c3c9db83Smrg 988c3c9db83Smrg# func_source file 989c3c9db83Smrg# Source FILE, adding directory component if necessary. 990c3c9db83Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 991c3c9db83Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 992c3c9db83Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 993c3c9db83Smrg# `FILE.' does not work on cygwin managed mounts. 994c3c9db83Smrgfunc_source () 995c3c9db83Smrg{ 996c3c9db83Smrg $opt_debug 997c3c9db83Smrg case $1 in 998c3c9db83Smrg */* | *\\*) . "$1" ;; 999c3c9db83Smrg *) . "./$1" ;; 1000c3c9db83Smrg esac 1001c3c9db83Smrg} 1002c3c9db83Smrg 1003c3c9db83Smrg 1004c3c9db83Smrg# func_infer_tag arg 1005c3c9db83Smrg# Infer tagged configuration to use if any are available and 1006c3c9db83Smrg# if one wasn't chosen via the "--tag" command line option. 1007c3c9db83Smrg# Only attempt this if the compiler in the base compile 1008c3c9db83Smrg# command doesn't match the default compiler. 1009c3c9db83Smrg# arg is usually of the form 'gcc ...' 1010c3c9db83Smrgfunc_infer_tag () 1011c3c9db83Smrg{ 1012c3c9db83Smrg $opt_debug 1013c3c9db83Smrg if test -n "$available_tags" && test -z "$tagname"; then 1014c3c9db83Smrg CC_quoted= 1015c3c9db83Smrg for arg in $CC; do 1016c3c9db83Smrg func_quote_for_eval "$arg" 1017c3c9db83Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1018c3c9db83Smrg done 1019c3c9db83Smrg case $@ in 1020c3c9db83Smrg # Blanks in the command may have been stripped by the calling shell, 1021c3c9db83Smrg # but not from the CC environment variable when configure was run. 1022c3c9db83Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; 1023c3c9db83Smrg # Blanks at the start of $base_compile will cause this to fail 1024c3c9db83Smrg # if we don't check for them as well. 1025c3c9db83Smrg *) 1026c3c9db83Smrg for z in $available_tags; do 1027c3c9db83Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1028c3c9db83Smrg # Evaluate the configuration. 1029c3c9db83Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1030c3c9db83Smrg CC_quoted= 1031c3c9db83Smrg for arg in $CC; do 1032c3c9db83Smrg # Double-quote args containing other shell metacharacters. 1033c3c9db83Smrg func_quote_for_eval "$arg" 1034c3c9db83Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1035c3c9db83Smrg done 1036c3c9db83Smrg case "$@ " in 1037c3c9db83Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) 1038c3c9db83Smrg # The compiler in the base compile command matches 1039c3c9db83Smrg # the one in the tagged configuration. 1040c3c9db83Smrg # Assume this is the tagged configuration we want. 1041c3c9db83Smrg tagname=$z 1042c3c9db83Smrg break 1043c3c9db83Smrg ;; 1044c3c9db83Smrg esac 1045c3c9db83Smrg fi 1046c3c9db83Smrg done 1047c3c9db83Smrg # If $tagname still isn't set, then no tagged configuration 1048c3c9db83Smrg # was found and let the user know that the "--tag" command 1049c3c9db83Smrg # line option must be used. 1050c3c9db83Smrg if test -z "$tagname"; then 1051c3c9db83Smrg func_echo "unable to infer tagged configuration" 1052c3c9db83Smrg func_fatal_error "specify a tag with \`--tag'" 1053c3c9db83Smrg# else 1054c3c9db83Smrg# func_verbose "using $tagname tagged configuration" 1055c3c9db83Smrg fi 1056c3c9db83Smrg ;; 1057c3c9db83Smrg esac 1058c3c9db83Smrg fi 1059c3c9db83Smrg} 1060c3c9db83Smrg 1061c3c9db83Smrg 1062c3c9db83Smrg 1063c3c9db83Smrg# func_write_libtool_object output_name pic_name nonpic_name 1064c3c9db83Smrg# Create a libtool object file (analogous to a ".la" file), 1065c3c9db83Smrg# but don't create it if we're doing a dry run. 1066c3c9db83Smrgfunc_write_libtool_object () 1067c3c9db83Smrg{ 1068c3c9db83Smrg write_libobj=${1} 1069c3c9db83Smrg if test "$build_libtool_libs" = yes; then 1070c3c9db83Smrg write_lobj=\'${2}\' 1071c3c9db83Smrg else 1072c3c9db83Smrg write_lobj=none 1073c3c9db83Smrg fi 1074c3c9db83Smrg 1075c3c9db83Smrg if test "$build_old_libs" = yes; then 1076c3c9db83Smrg write_oldobj=\'${3}\' 1077c3c9db83Smrg else 1078c3c9db83Smrg write_oldobj=none 1079c3c9db83Smrg fi 1080c3c9db83Smrg 1081c3c9db83Smrg $opt_dry_run || { 1082c3c9db83Smrg cat >${write_libobj}T <<EOF 1083c3c9db83Smrg# $write_libobj - a libtool object file 1084c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1085c3c9db83Smrg# 1086c3c9db83Smrg# Please DO NOT delete this file! 1087c3c9db83Smrg# It is necessary for linking the library. 1088c3c9db83Smrg 1089c3c9db83Smrg# Name of the PIC object. 1090c3c9db83Smrgpic_object=$write_lobj 1091c3c9db83Smrg 1092c3c9db83Smrg# Name of the non-PIC object 1093c3c9db83Smrgnon_pic_object=$write_oldobj 1094c3c9db83Smrg 1095c3c9db83SmrgEOF 1096c3c9db83Smrg $MV "${write_libobj}T" "${write_libobj}" 1097c3c9db83Smrg } 1098c3c9db83Smrg} 1099c3c9db83Smrg 1100c3c9db83Smrg# func_mode_compile arg... 1101c3c9db83Smrgfunc_mode_compile () 1102c3c9db83Smrg{ 1103c3c9db83Smrg $opt_debug 1104c3c9db83Smrg # Get the compilation command and the source file. 1105c3c9db83Smrg base_compile= 1106c3c9db83Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1107c3c9db83Smrg suppress_opt=yes 1108c3c9db83Smrg suppress_output= 1109c3c9db83Smrg arg_mode=normal 1110c3c9db83Smrg libobj= 1111c3c9db83Smrg later= 1112c3c9db83Smrg pie_flag= 1113c3c9db83Smrg 1114c3c9db83Smrg for arg 1115c3c9db83Smrg do 1116c3c9db83Smrg case $arg_mode in 1117c3c9db83Smrg arg ) 1118c3c9db83Smrg # do not "continue". Instead, add this to base_compile 1119c3c9db83Smrg lastarg="$arg" 1120c3c9db83Smrg arg_mode=normal 1121c3c9db83Smrg ;; 1122c3c9db83Smrg 1123c3c9db83Smrg target ) 1124c3c9db83Smrg libobj="$arg" 1125c3c9db83Smrg arg_mode=normal 1126c3c9db83Smrg continue 1127c3c9db83Smrg ;; 1128c3c9db83Smrg 1129c3c9db83Smrg normal ) 1130c3c9db83Smrg # Accept any command-line options. 1131c3c9db83Smrg case $arg in 1132c3c9db83Smrg -o) 1133c3c9db83Smrg test -n "$libobj" && \ 1134c3c9db83Smrg func_fatal_error "you cannot specify \`-o' more than once" 1135c3c9db83Smrg arg_mode=target 1136c3c9db83Smrg continue 1137c3c9db83Smrg ;; 1138c3c9db83Smrg 1139c3c9db83Smrg -pie | -fpie | -fPIE) 1140c3c9db83Smrg pie_flag="$pie_flag $arg" 1141c3c9db83Smrg continue 1142c3c9db83Smrg ;; 1143c3c9db83Smrg 1144c3c9db83Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 1145c3c9db83Smrg later="$later $arg" 1146c3c9db83Smrg continue 1147c3c9db83Smrg ;; 1148c3c9db83Smrg 1149c3c9db83Smrg -no-suppress) 1150692f60a7Smrg suppress_opt=no 1151692f60a7Smrg continue 1152692f60a7Smrg ;; 1153692f60a7Smrg 1154692f60a7Smrg -Xcompiler) 1155692f60a7Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 1156692f60a7Smrg continue # The current "srcfile" will either be retained or 1157692f60a7Smrg ;; # replaced later. I would guess that would be a bug. 1158692f60a7Smrg 1159692f60a7Smrg -Wc,*) 1160c3c9db83Smrg func_stripname '-Wc,' '' "$arg" 1161c3c9db83Smrg args=$func_stripname_result 1162692f60a7Smrg lastarg= 1163692f60a7Smrg save_ifs="$IFS"; IFS=',' 1164c3c9db83Smrg for arg in $args; do 1165692f60a7Smrg IFS="$save_ifs" 1166c3c9db83Smrg func_quote_for_eval "$arg" 1167c3c9db83Smrg lastarg="$lastarg $func_quote_for_eval_result" 1168692f60a7Smrg done 1169692f60a7Smrg IFS="$save_ifs" 1170c3c9db83Smrg func_stripname ' ' '' "$lastarg" 1171c3c9db83Smrg lastarg=$func_stripname_result 1172692f60a7Smrg 1173692f60a7Smrg # Add the arguments to base_compile. 1174692f60a7Smrg base_compile="$base_compile $lastarg" 1175692f60a7Smrg continue 1176692f60a7Smrg ;; 1177692f60a7Smrg 1178c3c9db83Smrg *) 1179692f60a7Smrg # Accept the current argument as the source file. 1180692f60a7Smrg # The previous "srcfile" becomes the current argument. 1181692f60a7Smrg # 1182692f60a7Smrg lastarg="$srcfile" 1183692f60a7Smrg srcfile="$arg" 1184692f60a7Smrg ;; 1185692f60a7Smrg esac # case $arg 1186692f60a7Smrg ;; 1187692f60a7Smrg esac # case $arg_mode 1188692f60a7Smrg 1189692f60a7Smrg # Aesthetically quote the previous argument. 1190c3c9db83Smrg func_quote_for_eval "$lastarg" 1191c3c9db83Smrg base_compile="$base_compile $func_quote_for_eval_result" 1192692f60a7Smrg done # for arg 1193692f60a7Smrg 1194692f60a7Smrg case $arg_mode in 1195692f60a7Smrg arg) 1196c3c9db83Smrg func_fatal_error "you must specify an argument for -Xcompile" 1197692f60a7Smrg ;; 1198692f60a7Smrg target) 1199c3c9db83Smrg func_fatal_error "you must specify a target with \`-o'" 1200692f60a7Smrg ;; 1201692f60a7Smrg *) 1202692f60a7Smrg # Get the name of the library object. 1203c3c9db83Smrg test -z "$libobj" && { 1204c3c9db83Smrg func_basename "$srcfile" 1205c3c9db83Smrg libobj="$func_basename_result" 1206c3c9db83Smrg } 1207692f60a7Smrg ;; 1208692f60a7Smrg esac 1209692f60a7Smrg 1210692f60a7Smrg # Recognize several different file suffixes. 1211692f60a7Smrg # If the user specifies -o file.o, it is replaced with file.lo 1212692f60a7Smrg case $libobj in 1213c3c9db83Smrg *.[cCFSifmso] | \ 1214c3c9db83Smrg *.ada | *.adb | *.ads | *.asm | \ 1215c3c9db83Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 1216c3c9db83Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx) 1217c3c9db83Smrg func_xform "$libobj" 1218c3c9db83Smrg libobj=$func_xform_result 1219c3c9db83Smrg ;; 1220692f60a7Smrg esac 1221692f60a7Smrg 1222692f60a7Smrg case $libobj in 1223c3c9db83Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 1224692f60a7Smrg *) 1225c3c9db83Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 1226692f60a7Smrg ;; 1227692f60a7Smrg esac 1228692f60a7Smrg 1229692f60a7Smrg func_infer_tag $base_compile 1230692f60a7Smrg 1231692f60a7Smrg for arg in $later; do 1232692f60a7Smrg case $arg in 1233c3c9db83Smrg -shared) 1234c3c9db83Smrg test "$build_libtool_libs" != yes && \ 1235c3c9db83Smrg func_fatal_configuration "can not build a shared library" 1236c3c9db83Smrg build_old_libs=no 1237c3c9db83Smrg continue 1238c3c9db83Smrg ;; 1239c3c9db83Smrg 1240692f60a7Smrg -static) 1241c3c9db83Smrg build_libtool_libs=no 1242692f60a7Smrg build_old_libs=yes 1243692f60a7Smrg continue 1244692f60a7Smrg ;; 1245692f60a7Smrg 1246692f60a7Smrg -prefer-pic) 1247692f60a7Smrg pic_mode=yes 1248692f60a7Smrg continue 1249692f60a7Smrg ;; 1250692f60a7Smrg 1251692f60a7Smrg -prefer-non-pic) 1252692f60a7Smrg pic_mode=no 1253692f60a7Smrg continue 1254692f60a7Smrg ;; 1255692f60a7Smrg esac 1256692f60a7Smrg done 1257692f60a7Smrg 1258c3c9db83Smrg func_quote_for_eval "$libobj" 1259c3c9db83Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 1260c3c9db83Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 1261c3c9db83Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 1262c3c9db83Smrg func_dirname_and_basename "$obj" "/" "" 1263c3c9db83Smrg objname="$func_basename_result" 1264c3c9db83Smrg xdir="$func_dirname_result" 1265692f60a7Smrg lobj=${xdir}$objdir/$objname 1266692f60a7Smrg 1267c3c9db83Smrg test -z "$base_compile" && \ 1268c3c9db83Smrg func_fatal_help "you must specify a compilation command" 1269692f60a7Smrg 1270692f60a7Smrg # Delete any leftover library objects. 1271692f60a7Smrg if test "$build_old_libs" = yes; then 1272692f60a7Smrg removelist="$obj $lobj $libobj ${libobj}T" 1273692f60a7Smrg else 1274692f60a7Smrg removelist="$lobj $libobj ${libobj}T" 1275692f60a7Smrg fi 1276692f60a7Smrg 1277692f60a7Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 1278692f60a7Smrg case $host_os in 1279c3c9db83Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 1280692f60a7Smrg pic_mode=default 1281692f60a7Smrg ;; 1282692f60a7Smrg esac 1283692f60a7Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 1284692f60a7Smrg # non-PIC code in shared libraries is not supported 1285692f60a7Smrg pic_mode=default 1286692f60a7Smrg fi 1287692f60a7Smrg 1288692f60a7Smrg # Calculate the filename of the output object if compiler does 1289692f60a7Smrg # not support -o with -c 1290692f60a7Smrg if test "$compiler_c_o" = no; then 1291c3c9db83Smrg output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 1292692f60a7Smrg lockfile="$output_obj.lock" 1293692f60a7Smrg else 1294692f60a7Smrg output_obj= 1295692f60a7Smrg need_locks=no 1296692f60a7Smrg lockfile= 1297692f60a7Smrg fi 1298692f60a7Smrg 1299692f60a7Smrg # Lock this critical section if it is needed 1300692f60a7Smrg # We use this script file to make the link, it avoids creating a new file 1301692f60a7Smrg if test "$need_locks" = yes; then 1302c3c9db83Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 1303c3c9db83Smrg func_echo "Waiting for $lockfile to be removed" 1304692f60a7Smrg sleep 2 1305692f60a7Smrg done 1306692f60a7Smrg elif test "$need_locks" = warn; then 1307692f60a7Smrg if test -f "$lockfile"; then 1308c3c9db83Smrg $ECHO "\ 1309692f60a7Smrg*** ERROR, $lockfile exists and contains: 1310692f60a7Smrg`cat $lockfile 2>/dev/null` 1311692f60a7Smrg 1312692f60a7SmrgThis indicates that another process is trying to use the same 1313692f60a7Smrgtemporary object file, and libtool could not work around it because 1314692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 1315692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 1316692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 1317692f60a7Smrgcompiler." 1318692f60a7Smrg 1319c3c9db83Smrg $opt_dry_run || $RM $removelist 1320692f60a7Smrg exit $EXIT_FAILURE 1321692f60a7Smrg fi 1322c3c9db83Smrg removelist="$removelist $output_obj" 1323c3c9db83Smrg $ECHO "$srcfile" > "$lockfile" 1324692f60a7Smrg fi 1325692f60a7Smrg 1326c3c9db83Smrg $opt_dry_run || $RM $removelist 1327c3c9db83Smrg removelist="$removelist $lockfile" 1328c3c9db83Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 1329c3c9db83Smrg 1330692f60a7Smrg if test -n "$fix_srcfile_path"; then 1331692f60a7Smrg eval srcfile=\"$fix_srcfile_path\" 1332692f60a7Smrg fi 1333c3c9db83Smrg func_quote_for_eval "$srcfile" 1334c3c9db83Smrg qsrcfile=$func_quote_for_eval_result 1335692f60a7Smrg 1336692f60a7Smrg # Only build a PIC object if we are building libtool libraries. 1337692f60a7Smrg if test "$build_libtool_libs" = yes; then 1338692f60a7Smrg # Without this assignment, base_compile gets emptied. 1339692f60a7Smrg fbsd_hideous_sh_bug=$base_compile 1340692f60a7Smrg 1341692f60a7Smrg if test "$pic_mode" != no; then 1342692f60a7Smrg command="$base_compile $qsrcfile $pic_flag" 1343692f60a7Smrg else 1344692f60a7Smrg # Don't build PIC code 1345692f60a7Smrg command="$base_compile $qsrcfile" 1346692f60a7Smrg fi 1347692f60a7Smrg 1348c3c9db83Smrg func_mkdir_p "$xdir$objdir" 1349692f60a7Smrg 1350692f60a7Smrg if test -z "$output_obj"; then 1351692f60a7Smrg # Place PIC objects in $objdir 1352692f60a7Smrg command="$command -o $lobj" 1353692f60a7Smrg fi 1354692f60a7Smrg 1355c3c9db83Smrg func_show_eval_locale "$command" \ 1356c3c9db83Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 1357692f60a7Smrg 1358692f60a7Smrg if test "$need_locks" = warn && 1359692f60a7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1360c3c9db83Smrg $ECHO "\ 1361692f60a7Smrg*** ERROR, $lockfile contains: 1362692f60a7Smrg`cat $lockfile 2>/dev/null` 1363692f60a7Smrg 1364692f60a7Smrgbut it should contain: 1365692f60a7Smrg$srcfile 1366692f60a7Smrg 1367692f60a7SmrgThis indicates that another process is trying to use the same 1368692f60a7Smrgtemporary object file, and libtool could not work around it because 1369692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 1370692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 1371692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 1372692f60a7Smrgcompiler." 1373692f60a7Smrg 1374c3c9db83Smrg $opt_dry_run || $RM $removelist 1375692f60a7Smrg exit $EXIT_FAILURE 1376692f60a7Smrg fi 1377692f60a7Smrg 1378692f60a7Smrg # Just move the object if needed, then go on to compile the next one 1379692f60a7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 1380c3c9db83Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 1381c3c9db83Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1382692f60a7Smrg fi 1383692f60a7Smrg 1384692f60a7Smrg # Allow error messages only from the first compilation. 1385692f60a7Smrg if test "$suppress_opt" = yes; then 1386c3c9db83Smrg suppress_output=' >/dev/null 2>&1' 1387692f60a7Smrg fi 1388692f60a7Smrg fi 1389692f60a7Smrg 1390692f60a7Smrg # Only build a position-dependent object if we build old libraries. 1391692f60a7Smrg if test "$build_old_libs" = yes; then 1392692f60a7Smrg if test "$pic_mode" != yes; then 1393692f60a7Smrg # Don't build PIC code 1394c3c9db83Smrg command="$base_compile $qsrcfile$pie_flag" 1395692f60a7Smrg else 1396692f60a7Smrg command="$base_compile $qsrcfile $pic_flag" 1397692f60a7Smrg fi 1398692f60a7Smrg if test "$compiler_c_o" = yes; then 1399692f60a7Smrg command="$command -o $obj" 1400692f60a7Smrg fi 1401692f60a7Smrg 1402692f60a7Smrg # Suppress compiler output if we already did a PIC compilation. 1403692f60a7Smrg command="$command$suppress_output" 1404c3c9db83Smrg func_show_eval_locale "$command" \ 1405c3c9db83Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1406692f60a7Smrg 1407692f60a7Smrg if test "$need_locks" = warn && 1408692f60a7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1409c3c9db83Smrg $ECHO "\ 1410692f60a7Smrg*** ERROR, $lockfile contains: 1411692f60a7Smrg`cat $lockfile 2>/dev/null` 1412692f60a7Smrg 1413692f60a7Smrgbut it should contain: 1414692f60a7Smrg$srcfile 1415692f60a7Smrg 1416692f60a7SmrgThis indicates that another process is trying to use the same 1417692f60a7Smrgtemporary object file, and libtool could not work around it because 1418692f60a7Smrgyour compiler does not support \`-c' and \`-o' together. If you 1419692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better 1420692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better 1421692f60a7Smrgcompiler." 1422692f60a7Smrg 1423c3c9db83Smrg $opt_dry_run || $RM $removelist 1424692f60a7Smrg exit $EXIT_FAILURE 1425692f60a7Smrg fi 1426692f60a7Smrg 1427692f60a7Smrg # Just move the object if needed 1428692f60a7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 1429c3c9db83Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 1430c3c9db83Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1431692f60a7Smrg fi 1432692f60a7Smrg fi 1433692f60a7Smrg 1434c3c9db83Smrg $opt_dry_run || { 1435c3c9db83Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 1436692f60a7Smrg 1437c3c9db83Smrg # Unlock the critical section if it was locked 1438c3c9db83Smrg if test "$need_locks" != no; then 1439c3c9db83Smrg removelist=$lockfile 1440c3c9db83Smrg $RM "$lockfile" 1441c3c9db83Smrg fi 1442c3c9db83Smrg } 1443692f60a7Smrg 1444692f60a7Smrg exit $EXIT_SUCCESS 1445c3c9db83Smrg} 1446692f60a7Smrg 1447c3c9db83Smrg$opt_help || { 1448c3c9db83Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"} 1449c3c9db83Smrg} 1450692f60a7Smrg 1451c3c9db83Smrgfunc_mode_help () 1452c3c9db83Smrg{ 1453c3c9db83Smrg # We need to display help for each of the modes. 1454c3c9db83Smrg case $mode in 1455c3c9db83Smrg "") 1456c3c9db83Smrg # Generic help is extracted from the usage comments 1457c3c9db83Smrg # at the start of this file. 1458c3c9db83Smrg func_help 1459c3c9db83Smrg ;; 1460692f60a7Smrg 1461c3c9db83Smrg clean) 1462c3c9db83Smrg $ECHO \ 1463c3c9db83Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 1464692f60a7Smrg 1465c3c9db83SmrgRemove files from the build directory. 1466692f60a7Smrg 1467c3c9db83SmrgRM is the name of the program to use to delete files associated with each FILE 1468c3c9db83Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1469c3c9db83Smrgto RM. 1470692f60a7Smrg 1471c3c9db83SmrgIf FILE is a libtool library, object or program, all the files associated 1472c3c9db83Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 1473c3c9db83Smrg ;; 1474692f60a7Smrg 1475c3c9db83Smrg compile) 1476c3c9db83Smrg $ECHO \ 1477c3c9db83Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 1478692f60a7Smrg 1479c3c9db83SmrgCompile a source file into a libtool library object. 1480692f60a7Smrg 1481c3c9db83SmrgThis mode accepts the following additional options: 1482692f60a7Smrg 1483c3c9db83Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 1484c3c9db83Smrg -no-suppress do not suppress compiler output for multiple passes 1485c3c9db83Smrg -prefer-pic try to building PIC objects only 1486c3c9db83Smrg -prefer-non-pic try to building non-PIC objects only 1487c3c9db83Smrg -shared do not build a \`.o' file suitable for static linking 1488c3c9db83Smrg -static only build a \`.o' file suitable for static linking 1489692f60a7Smrg 1490c3c9db83SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 1491c3c9db83Smrgfrom the given SOURCEFILE. 1492692f60a7Smrg 1493c3c9db83SmrgThe output file name is determined by removing the directory component from 1494c3c9db83SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 1495c3c9db83Smrglibrary object suffix, \`.lo'." 1496c3c9db83Smrg ;; 1497692f60a7Smrg 1498c3c9db83Smrg execute) 1499c3c9db83Smrg $ECHO \ 1500c3c9db83Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 1501692f60a7Smrg 1502c3c9db83SmrgAutomatically set library path, then run a program. 1503692f60a7Smrg 1504c3c9db83SmrgThis mode accepts the following additional options: 1505692f60a7Smrg 1506c3c9db83Smrg -dlopen FILE add the directory containing FILE to the library path 1507692f60a7Smrg 1508c3c9db83SmrgThis mode sets the library path environment variable according to \`-dlopen' 1509c3c9db83Smrgflags. 1510692f60a7Smrg 1511c3c9db83SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 1512c3c9db83Smrginto their corresponding uninstalled binary, and any of their required library 1513c3c9db83Smrgdirectories are added to the library path. 1514692f60a7Smrg 1515c3c9db83SmrgThen, COMMAND is executed, with ARGS as arguments." 1516c3c9db83Smrg ;; 1517692f60a7Smrg 1518c3c9db83Smrg finish) 1519c3c9db83Smrg $ECHO \ 1520c3c9db83Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 1521692f60a7Smrg 1522c3c9db83SmrgComplete the installation of libtool libraries. 1523692f60a7Smrg 1524c3c9db83SmrgEach LIBDIR is a directory that contains libtool libraries. 1525692f60a7Smrg 1526c3c9db83SmrgThe commands that this mode executes may require superuser privileges. Use 1527c3c9db83Smrgthe \`--dry-run' option if you just want to see what would be executed." 1528c3c9db83Smrg ;; 1529692f60a7Smrg 1530c3c9db83Smrg install) 1531c3c9db83Smrg $ECHO \ 1532c3c9db83Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 1533692f60a7Smrg 1534c3c9db83SmrgInstall executables or libraries. 1535692f60a7Smrg 1536c3c9db83SmrgINSTALL-COMMAND is the installation command. The first component should be 1537c3c9db83Smrgeither the \`install' or \`cp' program. 1538692f60a7Smrg 1539c3c9db83SmrgThe following components of INSTALL-COMMAND are treated specially: 1540692f60a7Smrg 1541c3c9db83Smrg -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation 1542692f60a7Smrg 1543c3c9db83SmrgThe rest of the components are interpreted as arguments to that command (only 1544c3c9db83SmrgBSD-compatible install options are recognized)." 1545c3c9db83Smrg ;; 1546692f60a7Smrg 1547c3c9db83Smrg link) 1548c3c9db83Smrg $ECHO \ 1549c3c9db83Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 1550692f60a7Smrg 1551c3c9db83SmrgLink object files or libraries together to form another library, or to 1552c3c9db83Smrgcreate an executable program. 1553692f60a7Smrg 1554c3c9db83SmrgLINK-COMMAND is a command using the C compiler that you would use to create 1555c3c9db83Smrga program from several object files. 1556692f60a7Smrg 1557c3c9db83SmrgThe following components of LINK-COMMAND are treated specially: 1558692f60a7Smrg 1559c3c9db83Smrg -all-static do not do any dynamic linking at all 1560c3c9db83Smrg -avoid-version do not add a version suffix if possible 1561c3c9db83Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 1562c3c9db83Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 1563c3c9db83Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 1564c3c9db83Smrg -export-symbols SYMFILE 1565c3c9db83Smrg try to export only the symbols listed in SYMFILE 1566c3c9db83Smrg -export-symbols-regex REGEX 1567c3c9db83Smrg try to export only the symbols matching REGEX 1568c3c9db83Smrg -LLIBDIR search LIBDIR for required installed libraries 1569c3c9db83Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 1570c3c9db83Smrg -module build a library that can dlopened 1571c3c9db83Smrg -no-fast-install disable the fast-install mode 1572c3c9db83Smrg -no-install link a not-installable executable 1573c3c9db83Smrg -no-undefined declare that a library does not refer to external symbols 1574c3c9db83Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 1575c3c9db83Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 1576c3c9db83Smrg -precious-files-regex REGEX 1577c3c9db83Smrg don't remove output files matching REGEX 1578c3c9db83Smrg -release RELEASE specify package release information 1579c3c9db83Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 1580c3c9db83Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 1581c3c9db83Smrg -shared only do dynamic linking of libtool libraries 1582c3c9db83Smrg -shrext SUFFIX override the standard shared library file extension 1583c3c9db83Smrg -static do not do any dynamic linking of uninstalled libtool libraries 1584c3c9db83Smrg -static-libtool-libs 1585c3c9db83Smrg do not do any dynamic linking of libtool libraries 1586c3c9db83Smrg -version-info CURRENT[:REVISION[:AGE]] 1587c3c9db83Smrg specify library version info [each variable defaults to 0] 1588c3c9db83Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 1589692f60a7Smrg 1590c3c9db83SmrgAll other options (arguments beginning with \`-') are ignored. 1591692f60a7Smrg 1592c3c9db83SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 1593c3c9db83Smrgtreated as uninstalled libtool libraries, other files are standard or library 1594c3c9db83Smrgobject files. 1595692f60a7Smrg 1596c3c9db83SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 1597c3c9db83Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 1598c3c9db83Smrgrequired, except when creating a convenience library. 1599692f60a7Smrg 1600c3c9db83SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 1601c3c9db83Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 1602692f60a7Smrg 1603c3c9db83SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 1604c3c9db83Smrgis created, otherwise an executable program is created." 16052e71ea71Smrg ;; 1606692f60a7Smrg 1607c3c9db83Smrg uninstall) 1608c3c9db83Smrg $ECHO \ 1609c3c9db83Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 1610692f60a7Smrg 1611c3c9db83SmrgRemove libraries from an installation directory. 1612692f60a7Smrg 1613c3c9db83SmrgRM is the name of the program to use to delete files associated with each FILE 1614c3c9db83Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1615c3c9db83Smrgto RM. 161685ee4c00Smrg 1617c3c9db83SmrgIf FILE is a libtool library, all the files associated with it are deleted. 1618c3c9db83SmrgOtherwise, only FILE itself is deleted using RM." 1619c3c9db83Smrg ;; 162085ee4c00Smrg 1621c3c9db83Smrg *) 1622c3c9db83Smrg func_fatal_help "invalid operation mode \`$mode'" 1623c3c9db83Smrg ;; 1624c3c9db83Smrg esac 162585ee4c00Smrg 1626c3c9db83Smrg $ECHO 1627c3c9db83Smrg $ECHO "Try \`$progname --help' for more information about other modes." 162885ee4c00Smrg 1629c3c9db83Smrg exit $? 1630c3c9db83Smrg} 163185ee4c00Smrg 1632c3c9db83Smrg # Now that we've collected a possible --mode arg, show help if necessary 1633c3c9db83Smrg $opt_help && func_mode_help 163485ee4c00Smrg 163585ee4c00Smrg 1636c3c9db83Smrg# func_mode_execute arg... 1637c3c9db83Smrgfunc_mode_execute () 1638c3c9db83Smrg{ 1639c3c9db83Smrg $opt_debug 1640c3c9db83Smrg # The first argument is the command name. 1641c3c9db83Smrg cmd="$nonopt" 1642c3c9db83Smrg test -z "$cmd" && \ 1643c3c9db83Smrg func_fatal_help "you must specify a COMMAND" 16442e71ea71Smrg 1645c3c9db83Smrg # Handle -dlopen flags immediately. 1646c3c9db83Smrg for file in $execute_dlfiles; do 1647c3c9db83Smrg test -f "$file" \ 1648c3c9db83Smrg || func_fatal_help "\`$file' is not a file" 16492e71ea71Smrg 1650c3c9db83Smrg dir= 1651c3c9db83Smrg case $file in 1652c3c9db83Smrg *.la) 1653c3c9db83Smrg # Check to see that this really is a libtool archive. 1654c3c9db83Smrg func_lalib_unsafe_p "$file" \ 1655c3c9db83Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 16562e71ea71Smrg 1657c3c9db83Smrg # Read the libtool library. 1658c3c9db83Smrg dlname= 1659c3c9db83Smrg library_names= 1660c3c9db83Smrg func_source "$file" 1661692f60a7Smrg 1662c3c9db83Smrg # Skip this library if it cannot be dlopened. 1663c3c9db83Smrg if test -z "$dlname"; then 1664c3c9db83Smrg # Warn if it was a shared library. 1665c3c9db83Smrg test -n "$library_names" && \ 1666c3c9db83Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 1667c3c9db83Smrg continue 1668c3c9db83Smrg fi 1669692f60a7Smrg 1670c3c9db83Smrg func_dirname "$file" "" "." 1671c3c9db83Smrg dir="$func_dirname_result" 1672692f60a7Smrg 1673c3c9db83Smrg if test -f "$dir/$objdir/$dlname"; then 1674c3c9db83Smrg dir="$dir/$objdir" 1675c3c9db83Smrg else 1676c3c9db83Smrg if test ! -f "$dir/$dlname"; then 1677c3c9db83Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1678c3c9db83Smrg fi 1679c3c9db83Smrg fi 16802e71ea71Smrg ;; 1681692f60a7Smrg 1682c3c9db83Smrg *.lo) 1683c3c9db83Smrg # Just add the directory containing the .lo file. 1684c3c9db83Smrg func_dirname "$file" "" "." 1685c3c9db83Smrg dir="$func_dirname_result" 16862e71ea71Smrg ;; 1687692f60a7Smrg 1688c3c9db83Smrg *) 1689c3c9db83Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 16902e71ea71Smrg continue 16912e71ea71Smrg ;; 1692c3c9db83Smrg esac 1693692f60a7Smrg 1694c3c9db83Smrg # Get the absolute pathname. 1695c3c9db83Smrg absdir=`cd "$dir" && pwd` 1696c3c9db83Smrg test -n "$absdir" && dir="$absdir" 169785ee4c00Smrg 1698c3c9db83Smrg # Now add the directory to shlibpath_var. 1699c3c9db83Smrg if eval "test -z \"\$$shlibpath_var\""; then 1700c3c9db83Smrg eval "$shlibpath_var=\"\$dir\"" 1701c3c9db83Smrg else 1702c3c9db83Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 1703c3c9db83Smrg fi 1704c3c9db83Smrg done 170585ee4c00Smrg 1706c3c9db83Smrg # This variable tells wrapper scripts just to set shlibpath_var 1707c3c9db83Smrg # rather than running their programs. 1708c3c9db83Smrg libtool_execute_magic="$magic" 170985ee4c00Smrg 1710c3c9db83Smrg # Check if any of the arguments is a wrapper script. 1711c3c9db83Smrg args= 1712c3c9db83Smrg for file 1713c3c9db83Smrg do 1714c3c9db83Smrg case $file in 1715c3c9db83Smrg -*) ;; 1716c3c9db83Smrg *) 1717c3c9db83Smrg # Do a test to see if this is really a libtool program. 1718c3c9db83Smrg if func_ltwrapper_script_p "$file"; then 1719c3c9db83Smrg func_source "$file" 1720c3c9db83Smrg # Transform arg to wrapped name. 1721c3c9db83Smrg file="$progdir/$program" 1722c3c9db83Smrg elif func_ltwrapper_executable_p "$file"; then 1723c3c9db83Smrg func_ltwrapper_scriptname "$file" 1724c3c9db83Smrg func_source "$func_ltwrapper_scriptname_result" 1725c3c9db83Smrg # Transform arg to wrapped name. 1726c3c9db83Smrg file="$progdir/$program" 1727c3c9db83Smrg fi 1728c3c9db83Smrg ;; 1729c3c9db83Smrg esac 1730c3c9db83Smrg # Quote arguments (to preserve shell metacharacters). 1731c3c9db83Smrg func_quote_for_eval "$file" 1732c3c9db83Smrg args="$args $func_quote_for_eval_result" 1733c3c9db83Smrg done 173485ee4c00Smrg 1735c3c9db83Smrg if test "X$opt_dry_run" = Xfalse; then 1736c3c9db83Smrg if test -n "$shlibpath_var"; then 1737c3c9db83Smrg # Export the shlibpath_var. 1738c3c9db83Smrg eval "export $shlibpath_var" 1739c3c9db83Smrg fi 174085ee4c00Smrg 1741c3c9db83Smrg # Restore saved environment variables 1742c3c9db83Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1743c3c9db83Smrg do 1744c3c9db83Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 1745c3c9db83Smrg $lt_var=\$save_$lt_var; export $lt_var 17462e71ea71Smrg else 1747c3c9db83Smrg $lt_unset $lt_var 1748c3c9db83Smrg fi" 1749c3c9db83Smrg done 175085ee4c00Smrg 1751c3c9db83Smrg # Now prepare to actually exec the command. 1752c3c9db83Smrg exec_cmd="\$cmd$args" 1753c3c9db83Smrg else 1754c3c9db83Smrg # Display what would be done. 1755c3c9db83Smrg if test -n "$shlibpath_var"; then 1756c3c9db83Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 1757c3c9db83Smrg $ECHO "export $shlibpath_var" 1758c3c9db83Smrg fi 1759c3c9db83Smrg $ECHO "$cmd$args" 1760c3c9db83Smrg exit $EXIT_SUCCESS 1761c3c9db83Smrg fi 1762c3c9db83Smrg} 176385ee4c00Smrg 1764c3c9db83Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 176585ee4c00Smrg 17662e71ea71Smrg 1767c3c9db83Smrg# func_mode_finish arg... 1768c3c9db83Smrgfunc_mode_finish () 1769c3c9db83Smrg{ 1770c3c9db83Smrg $opt_debug 1771c3c9db83Smrg libdirs="$nonopt" 1772c3c9db83Smrg admincmds= 1773692f60a7Smrg 1774c3c9db83Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 1775c3c9db83Smrg for dir 1776c3c9db83Smrg do 1777c3c9db83Smrg libdirs="$libdirs $dir" 1778c3c9db83Smrg done 1779692f60a7Smrg 1780c3c9db83Smrg for libdir in $libdirs; do 1781c3c9db83Smrg if test -n "$finish_cmds"; then 1782c3c9db83Smrg # Do each command in the finish commands. 1783c3c9db83Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 1784c3c9db83Smrg'"$cmd"'"' 17852e71ea71Smrg fi 1786c3c9db83Smrg if test -n "$finish_eval"; then 1787c3c9db83Smrg # Do the single finish_eval. 1788c3c9db83Smrg eval cmds=\"$finish_eval\" 1789c3c9db83Smrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 1790c3c9db83Smrg $cmds" 1791c3c9db83Smrg fi 1792c3c9db83Smrg done 1793c3c9db83Smrg fi 1794692f60a7Smrg 1795c3c9db83Smrg # Exit here if they wanted silent mode. 1796c3c9db83Smrg $opt_silent && exit $EXIT_SUCCESS 1797692f60a7Smrg 1798c3c9db83Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 1799c3c9db83Smrg $ECHO "Libraries have been installed in:" 1800c3c9db83Smrg for libdir in $libdirs; do 1801c3c9db83Smrg $ECHO " $libdir" 1802c3c9db83Smrg done 1803c3c9db83Smrg $ECHO 1804c3c9db83Smrg $ECHO "If you ever happen to want to link against installed libraries" 1805c3c9db83Smrg $ECHO "in a given directory, LIBDIR, you must either use libtool, and" 1806c3c9db83Smrg $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" 1807c3c9db83Smrg $ECHO "flag during linking and do at least one of the following:" 1808c3c9db83Smrg if test -n "$shlibpath_var"; then 1809c3c9db83Smrg $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" 1810c3c9db83Smrg $ECHO " during execution" 1811c3c9db83Smrg fi 1812c3c9db83Smrg if test -n "$runpath_var"; then 1813c3c9db83Smrg $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" 1814c3c9db83Smrg $ECHO " during linking" 1815c3c9db83Smrg fi 1816c3c9db83Smrg if test -n "$hardcode_libdir_flag_spec"; then 1817c3c9db83Smrg libdir=LIBDIR 1818c3c9db83Smrg eval flag=\"$hardcode_libdir_flag_spec\" 1819c3c9db83Smrg 1820c3c9db83Smrg $ECHO " - use the \`$flag' linker flag" 1821c3c9db83Smrg fi 1822c3c9db83Smrg if test -n "$admincmds"; then 1823c3c9db83Smrg $ECHO " - have your system administrator run these commands:$admincmds" 1824c3c9db83Smrg fi 1825c3c9db83Smrg if test -f /etc/ld.so.conf; then 1826c3c9db83Smrg $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 1827c3c9db83Smrg fi 1828c3c9db83Smrg $ECHO 1829c3c9db83Smrg 1830c3c9db83Smrg $ECHO "See any operating system documentation about shared libraries for" 1831c3c9db83Smrg case $host in 1832c3c9db83Smrg solaris2.[6789]|solaris2.1[0-9]) 1833c3c9db83Smrg $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" 1834c3c9db83Smrg $ECHO "pages." 1835c3c9db83Smrg ;; 1836c3c9db83Smrg *) 1837c3c9db83Smrg $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." 1838c3c9db83Smrg ;; 1839c3c9db83Smrg esac 1840c3c9db83Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 1841c3c9db83Smrg exit $EXIT_SUCCESS 1842c3c9db83Smrg} 1843c3c9db83Smrg 1844c3c9db83Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 1845c3c9db83Smrg 1846c3c9db83Smrg 1847c3c9db83Smrg# func_mode_install arg... 1848c3c9db83Smrgfunc_mode_install () 1849c3c9db83Smrg{ 1850c3c9db83Smrg $opt_debug 1851c3c9db83Smrg # There may be an optional sh(1) argument at the beginning of 1852c3c9db83Smrg # install_prog (especially on Windows NT). 1853c3c9db83Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 1854c3c9db83Smrg # Allow the use of GNU shtool's install command. 1855c3c9db83Smrg $ECHO "X$nonopt" | $GREP shtool >/dev/null; then 1856c3c9db83Smrg # Aesthetically quote it. 1857c3c9db83Smrg func_quote_for_eval "$nonopt" 1858c3c9db83Smrg install_prog="$func_quote_for_eval_result " 1859c3c9db83Smrg arg=$1 1860c3c9db83Smrg shift 1861c3c9db83Smrg else 1862c3c9db83Smrg install_prog= 1863c3c9db83Smrg arg=$nonopt 1864c3c9db83Smrg fi 1865c3c9db83Smrg 1866c3c9db83Smrg # The real first argument should be the name of the installation program. 1867c3c9db83Smrg # Aesthetically quote it. 1868c3c9db83Smrg func_quote_for_eval "$arg" 1869c3c9db83Smrg install_prog="$install_prog$func_quote_for_eval_result" 1870c3c9db83Smrg 1871c3c9db83Smrg # We need to accept at least all the BSD install flags. 1872c3c9db83Smrg dest= 1873c3c9db83Smrg files= 1874c3c9db83Smrg opts= 1875c3c9db83Smrg prev= 1876c3c9db83Smrg install_type= 1877c3c9db83Smrg isdir=no 1878c3c9db83Smrg stripme= 1879c3c9db83Smrg for arg 1880c3c9db83Smrg do 1881c3c9db83Smrg if test -n "$dest"; then 1882c3c9db83Smrg files="$files $dest" 1883c3c9db83Smrg dest=$arg 1884c3c9db83Smrg continue 1885c3c9db83Smrg fi 1886c3c9db83Smrg 1887c3c9db83Smrg case $arg in 1888c3c9db83Smrg -d) isdir=yes ;; 1889c3c9db83Smrg -f) 1890c3c9db83Smrg case " $install_prog " in 1891c3c9db83Smrg *[\\\ /]cp\ *) ;; 1892c3c9db83Smrg *) prev=$arg ;; 1893c3c9db83Smrg esac 1894c3c9db83Smrg ;; 1895c3c9db83Smrg -g | -m | -o) 1896c3c9db83Smrg prev=$arg 1897c3c9db83Smrg ;; 1898c3c9db83Smrg -s) 1899c3c9db83Smrg stripme=" -s" 1900c3c9db83Smrg continue 1901c3c9db83Smrg ;; 1902c3c9db83Smrg -*) 1903c3c9db83Smrg ;; 1904c3c9db83Smrg *) 1905c3c9db83Smrg # If the previous option needed an argument, then skip it. 1906c3c9db83Smrg if test -n "$prev"; then 19072e71ea71Smrg prev= 190885ee4c00Smrg else 1909c3c9db83Smrg dest=$arg 1910c3c9db83Smrg continue 1911692f60a7Smrg fi 19122e71ea71Smrg ;; 1913c3c9db83Smrg esac 1914692f60a7Smrg 1915c3c9db83Smrg # Aesthetically quote the argument. 1916c3c9db83Smrg func_quote_for_eval "$arg" 1917c3c9db83Smrg install_prog="$install_prog $func_quote_for_eval_result" 1918c3c9db83Smrg done 1919692f60a7Smrg 1920c3c9db83Smrg test -z "$install_prog" && \ 1921c3c9db83Smrg func_fatal_help "you must specify an install program" 1922692f60a7Smrg 1923c3c9db83Smrg test -n "$prev" && \ 1924c3c9db83Smrg func_fatal_help "the \`$prev' option requires an argument" 192585ee4c00Smrg 1926c3c9db83Smrg if test -z "$files"; then 1927c3c9db83Smrg if test -z "$dest"; then 1928c3c9db83Smrg func_fatal_help "no file or destination specified" 1929c3c9db83Smrg else 1930c3c9db83Smrg func_fatal_help "you must specify a destination" 1931c3c9db83Smrg fi 19322e71ea71Smrg fi 193385ee4c00Smrg 1934c3c9db83Smrg # Strip any trailing slash from the destination. 1935c3c9db83Smrg func_stripname '' '/' "$dest" 1936c3c9db83Smrg dest=$func_stripname_result 193785ee4c00Smrg 1938c3c9db83Smrg # Check to see that the destination is a directory. 1939c3c9db83Smrg test -d "$dest" && isdir=yes 1940c3c9db83Smrg if test "$isdir" = yes; then 1941c3c9db83Smrg destdir="$dest" 1942c3c9db83Smrg destname= 19432e71ea71Smrg else 1944c3c9db83Smrg func_dirname_and_basename "$dest" "" "." 1945c3c9db83Smrg destdir="$func_dirname_result" 1946c3c9db83Smrg destname="$func_basename_result" 194785ee4c00Smrg 1948c3c9db83Smrg # Not a directory, so check to see that there is only one file specified. 1949c3c9db83Smrg set dummy $files; shift 1950c3c9db83Smrg test "$#" -gt 1 && \ 1951c3c9db83Smrg func_fatal_help "\`$dest' is not a directory" 195285ee4c00Smrg fi 1953c3c9db83Smrg case $destdir in 1954c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 19552e71ea71Smrg *) 1956c3c9db83Smrg for file in $files; do 1957c3c9db83Smrg case $file in 1958c3c9db83Smrg *.lo) ;; 1959c3c9db83Smrg *) 1960c3c9db83Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 1961c3c9db83Smrg ;; 1962c3c9db83Smrg esac 1963c3c9db83Smrg done 19642e71ea71Smrg ;; 19652e71ea71Smrg esac 1966692f60a7Smrg 1967c3c9db83Smrg # This variable tells wrapper scripts just to set variables rather 1968c3c9db83Smrg # than running their programs. 1969c3c9db83Smrg libtool_install_magic="$magic" 1970692f60a7Smrg 1971c3c9db83Smrg staticlibs= 1972c3c9db83Smrg future_libdirs= 1973c3c9db83Smrg current_libdirs= 1974c3c9db83Smrg for file in $files; do 1975692f60a7Smrg 1976c3c9db83Smrg # Do each installation. 1977c3c9db83Smrg case $file in 1978c3c9db83Smrg *.$libext) 1979c3c9db83Smrg # Do the static libraries later. 1980c3c9db83Smrg staticlibs="$staticlibs $file" 1981c3c9db83Smrg ;; 1982c3c9db83Smrg 1983c3c9db83Smrg *.la) 1984c3c9db83Smrg # Check to see that this really is a libtool archive. 1985c3c9db83Smrg func_lalib_unsafe_p "$file" \ 1986c3c9db83Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 1987c3c9db83Smrg 1988c3c9db83Smrg library_names= 1989c3c9db83Smrg old_library= 1990c3c9db83Smrg relink_command= 1991c3c9db83Smrg func_source "$file" 1992c3c9db83Smrg 1993c3c9db83Smrg # Add the libdir to current_libdirs if it is the destination. 1994c3c9db83Smrg if test "X$destdir" = "X$libdir"; then 1995c3c9db83Smrg case "$current_libdirs " in 1996c3c9db83Smrg *" $libdir "*) ;; 1997c3c9db83Smrg *) current_libdirs="$current_libdirs $libdir" ;; 199885ee4c00Smrg esac 1999c3c9db83Smrg else 2000c3c9db83Smrg # Note the libdir as a future libdir. 2001c3c9db83Smrg case "$future_libdirs " in 2002c3c9db83Smrg *" $libdir "*) ;; 2003c3c9db83Smrg *) future_libdirs="$future_libdirs $libdir" ;; 2004c3c9db83Smrg esac 2005c3c9db83Smrg fi 200685ee4c00Smrg 2007c3c9db83Smrg func_dirname "$file" "/" "" 2008c3c9db83Smrg dir="$func_dirname_result" 2009c3c9db83Smrg dir="$dir$objdir" 2010c3c9db83Smrg 2011c3c9db83Smrg if test -n "$relink_command"; then 2012c3c9db83Smrg # Determine the prefix the user has applied to our future dir. 2013c3c9db83Smrg inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` 2014c3c9db83Smrg 2015c3c9db83Smrg # Don't allow the user to place us outside of our expected 2016c3c9db83Smrg # location b/c this prevents finding dependent libraries that 2017c3c9db83Smrg # are installed to the same prefix. 2018c3c9db83Smrg # At present, this check doesn't affect windows .dll's that 2019c3c9db83Smrg # are installed into $libdir/../bin (currently, that works fine) 2020c3c9db83Smrg # but it's something to keep an eye on. 2021c3c9db83Smrg test "$inst_prefix_dir" = "$destdir" && \ 2022c3c9db83Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2023c3c9db83Smrg 2024c3c9db83Smrg if test -n "$inst_prefix_dir"; then 2025c3c9db83Smrg # Stick the inst_prefix_dir data into the link command. 2026c3c9db83Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2027c3c9db83Smrg else 2028c3c9db83Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` 2029c3c9db83Smrg fi 2030c3c9db83Smrg 2031c3c9db83Smrg func_warning "relinking \`$file'" 2032c3c9db83Smrg func_show_eval "$relink_command" \ 2033c3c9db83Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2034c3c9db83Smrg fi 2035c3c9db83Smrg 2036c3c9db83Smrg # See the names of the shared library. 2037c3c9db83Smrg set dummy $library_names; shift 2038c3c9db83Smrg if test -n "$1"; then 2039c3c9db83Smrg realname="$1" 2040c3c9db83Smrg shift 2041c3c9db83Smrg 2042c3c9db83Smrg srcname="$realname" 2043c3c9db83Smrg test -n "$relink_command" && srcname="$realname"T 2044c3c9db83Smrg 2045c3c9db83Smrg # Install the shared library and build the symlinks. 2046c3c9db83Smrg func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 2047c3c9db83Smrg 'exit $?' 2048c3c9db83Smrg tstripme="$stripme" 2049c3c9db83Smrg case $host_os in 2050c3c9db83Smrg cygwin* | mingw* | pw32* | cegcc*) 2051c3c9db83Smrg case $realname in 2052c3c9db83Smrg *.dll.a) 2053c3c9db83Smrg tstripme="" 2054c3c9db83Smrg ;; 2055c3c9db83Smrg esac 205685ee4c00Smrg ;; 205785ee4c00Smrg esac 2058c3c9db83Smrg if test -n "$tstripme" && test -n "$striplib"; then 2059c3c9db83Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 20602e71ea71Smrg fi 2061c3c9db83Smrg 2062c3c9db83Smrg if test "$#" -gt 0; then 2063c3c9db83Smrg # Delete the old symlinks, and create new ones. 2064c3c9db83Smrg # Try `ln -sf' first, because the `ln' binary might depend on 2065c3c9db83Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 2066c3c9db83Smrg # so we also need to try rm && ln -s. 2067c3c9db83Smrg for linkname 2068c3c9db83Smrg do 2069c3c9db83Smrg test "$linkname" != "$realname" \ 2070c3c9db83Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 20712e71ea71Smrg done 20722e71ea71Smrg fi 2073692f60a7Smrg 2074c3c9db83Smrg # Do each command in the postinstall commands. 2075c3c9db83Smrg lib="$destdir/$realname" 2076c3c9db83Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 20772e71ea71Smrg fi 2078692f60a7Smrg 2079c3c9db83Smrg # Install the pseudo-library for information purposes. 2080c3c9db83Smrg func_basename "$file" 2081c3c9db83Smrg name="$func_basename_result" 2082c3c9db83Smrg instname="$dir/$name"i 2083c3c9db83Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 2084692f60a7Smrg 2085c3c9db83Smrg # Maybe install the static library, too. 2086c3c9db83Smrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 2087c3c9db83Smrg ;; 2088692f60a7Smrg 2089c3c9db83Smrg *.lo) 2090c3c9db83Smrg # Install (i.e. copy) a libtool object. 2091692f60a7Smrg 2092c3c9db83Smrg # Figure out destination file name, if it wasn't already specified. 2093c3c9db83Smrg if test -n "$destname"; then 2094c3c9db83Smrg destfile="$destdir/$destname" 2095c3c9db83Smrg else 2096c3c9db83Smrg func_basename "$file" 2097c3c9db83Smrg destfile="$func_basename_result" 2098c3c9db83Smrg destfile="$destdir/$destfile" 20992e71ea71Smrg fi 2100692f60a7Smrg 2101c3c9db83Smrg # Deduce the name of the destination old-style object file. 2102c3c9db83Smrg case $destfile in 2103c3c9db83Smrg *.lo) 2104c3c9db83Smrg func_lo2o "$destfile" 2105c3c9db83Smrg staticdest=$func_lo2o_result 2106c3c9db83Smrg ;; 2107c3c9db83Smrg *.$objext) 2108c3c9db83Smrg staticdest="$destfile" 2109c3c9db83Smrg destfile= 2110c3c9db83Smrg ;; 2111c3c9db83Smrg *) 2112c3c9db83Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 2113c3c9db83Smrg ;; 2114c3c9db83Smrg esac 2115692f60a7Smrg 2116c3c9db83Smrg # Install the libtool object if requested. 2117c3c9db83Smrg test -n "$destfile" && \ 2118c3c9db83Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 2119692f60a7Smrg 2120c3c9db83Smrg # Install the old object if enabled. 2121c3c9db83Smrg if test "$build_old_libs" = yes; then 2122c3c9db83Smrg # Deduce the name of the old-style object file. 2123c3c9db83Smrg func_lo2o "$file" 2124c3c9db83Smrg staticobj=$func_lo2o_result 2125c3c9db83Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 2126692f60a7Smrg fi 2127c3c9db83Smrg exit $EXIT_SUCCESS 2128c3c9db83Smrg ;; 2129692f60a7Smrg 2130c3c9db83Smrg *) 2131c3c9db83Smrg # Figure out destination file name, if it wasn't already specified. 2132c3c9db83Smrg if test -n "$destname"; then 2133c3c9db83Smrg destfile="$destdir/$destname" 2134c3c9db83Smrg else 2135c3c9db83Smrg func_basename "$file" 2136c3c9db83Smrg destfile="$func_basename_result" 2137c3c9db83Smrg destfile="$destdir/$destfile" 2138c3c9db83Smrg fi 2139692f60a7Smrg 2140c3c9db83Smrg # If the file is missing, and there is a .exe on the end, strip it 2141c3c9db83Smrg # because it is most likely a libtool script we actually want to 2142c3c9db83Smrg # install 2143c3c9db83Smrg stripped_ext="" 2144c3c9db83Smrg case $file in 2145c3c9db83Smrg *.exe) 2146c3c9db83Smrg if test ! -f "$file"; then 2147c3c9db83Smrg func_stripname '' '.exe' "$file" 2148c3c9db83Smrg file=$func_stripname_result 2149c3c9db83Smrg stripped_ext=".exe" 2150c3c9db83Smrg fi 2151c3c9db83Smrg ;; 2152c3c9db83Smrg esac 2153c3c9db83Smrg 2154c3c9db83Smrg # Do a test to see if this is really a libtool program. 2155c3c9db83Smrg case $host in 2156c3c9db83Smrg *cygwin* | *mingw*) 2157c3c9db83Smrg if func_ltwrapper_executable_p "$file"; then 2158c3c9db83Smrg func_ltwrapper_scriptname "$file" 2159c3c9db83Smrg wrapper=$func_ltwrapper_scriptname_result 2160c3c9db83Smrg else 2161c3c9db83Smrg func_stripname '' '.exe' "$file" 2162c3c9db83Smrg wrapper=$func_stripname_result 2163c3c9db83Smrg fi 2164c3c9db83Smrg ;; 21652e71ea71Smrg *) 2166c3c9db83Smrg wrapper=$file 2167c3c9db83Smrg ;; 2168c3c9db83Smrg esac 2169c3c9db83Smrg if func_ltwrapper_script_p "$wrapper"; then 2170c3c9db83Smrg notinst_deplibs= 2171c3c9db83Smrg relink_command= 2172c3c9db83Smrg 2173c3c9db83Smrg func_source "$wrapper" 2174c3c9db83Smrg 2175c3c9db83Smrg # Check the variables that should have been set. 2176c3c9db83Smrg test -z "$generated_by_libtool_version" && \ 2177c3c9db83Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 2178c3c9db83Smrg 2179c3c9db83Smrg finalize=yes 2180c3c9db83Smrg for lib in $notinst_deplibs; do 2181c3c9db83Smrg # Check to see that each library is installed. 2182c3c9db83Smrg libdir= 2183c3c9db83Smrg if test -f "$lib"; then 2184c3c9db83Smrg func_source "$lib" 2185c3c9db83Smrg fi 2186c3c9db83Smrg libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 2187c3c9db83Smrg if test -n "$libdir" && test ! -f "$libfile"; then 2188c3c9db83Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 2189c3c9db83Smrg finalize=no 2190c3c9db83Smrg fi 2191c3c9db83Smrg done 2192c3c9db83Smrg 2193c3c9db83Smrg relink_command= 2194c3c9db83Smrg func_source "$wrapper" 2195c3c9db83Smrg 2196c3c9db83Smrg outputname= 2197c3c9db83Smrg if test "$fast_install" = no && test -n "$relink_command"; then 2198c3c9db83Smrg $opt_dry_run || { 2199c3c9db83Smrg if test "$finalize" = yes; then 2200c3c9db83Smrg tmpdir=`func_mktempdir` 2201c3c9db83Smrg func_basename "$file$stripped_ext" 2202c3c9db83Smrg file="$func_basename_result" 2203c3c9db83Smrg outputname="$tmpdir/$file" 2204c3c9db83Smrg # Replace the output file specification. 2205c3c9db83Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` 2206c3c9db83Smrg 2207c3c9db83Smrg $opt_silent || { 2208c3c9db83Smrg func_quote_for_expand "$relink_command" 2209c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 2210c3c9db83Smrg } 2211c3c9db83Smrg if eval "$relink_command"; then : 2212c3c9db83Smrg else 2213c3c9db83Smrg func_error "error: relink \`$file' with the above command before installing it" 2214c3c9db83Smrg $opt_dry_run || ${RM}r "$tmpdir" 2215c3c9db83Smrg continue 2216c3c9db83Smrg fi 2217c3c9db83Smrg file="$outputname" 2218c3c9db83Smrg else 2219c3c9db83Smrg func_warning "cannot relink \`$file'" 2220c3c9db83Smrg fi 2221c3c9db83Smrg } 2222c3c9db83Smrg else 2223c3c9db83Smrg # Install the binary that we compiled earlier. 2224c3c9db83Smrg file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 22252e71ea71Smrg fi 2226c3c9db83Smrg fi 2227c3c9db83Smrg 2228c3c9db83Smrg # remove .exe since cygwin /usr/bin/install will append another 2229c3c9db83Smrg # one anyway 2230c3c9db83Smrg case $install_prog,$host in 2231c3c9db83Smrg */usr/bin/install*,*cygwin*) 2232c3c9db83Smrg case $file:$destfile in 2233c3c9db83Smrg *.exe:*.exe) 2234c3c9db83Smrg # this is ok 2235c3c9db83Smrg ;; 2236c3c9db83Smrg *.exe:*) 2237c3c9db83Smrg destfile=$destfile.exe 2238c3c9db83Smrg ;; 2239c3c9db83Smrg *:*.exe) 2240c3c9db83Smrg func_stripname '' '.exe' "$destfile" 2241c3c9db83Smrg destfile=$func_stripname_result 2242c3c9db83Smrg ;; 2243c3c9db83Smrg esac 22442e71ea71Smrg ;; 22452e71ea71Smrg esac 2246c3c9db83Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 2247c3c9db83Smrg $opt_dry_run || if test -n "$outputname"; then 2248c3c9db83Smrg ${RM}r "$tmpdir" 2249c3c9db83Smrg fi 2250c3c9db83Smrg ;; 2251c3c9db83Smrg esac 2252c3c9db83Smrg done 2253692f60a7Smrg 2254c3c9db83Smrg for file in $staticlibs; do 2255c3c9db83Smrg func_basename "$file" 2256c3c9db83Smrg name="$func_basename_result" 2257c3c9db83Smrg 2258c3c9db83Smrg # Set up the ranlib parameters. 2259c3c9db83Smrg oldlib="$destdir/$name" 2260c3c9db83Smrg 2261c3c9db83Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 2262c3c9db83Smrg 2263c3c9db83Smrg if test -n "$stripme" && test -n "$old_striplib"; then 2264c3c9db83Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 2265c3c9db83Smrg fi 2266c3c9db83Smrg 2267c3c9db83Smrg # Do each command in the postinstall commands. 2268c3c9db83Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 2269c3c9db83Smrg done 2270c3c9db83Smrg 2271c3c9db83Smrg test -n "$future_libdirs" && \ 2272c3c9db83Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 2273c3c9db83Smrg 2274c3c9db83Smrg if test -n "$current_libdirs"; then 2275c3c9db83Smrg # Maybe just do a dry run. 2276c3c9db83Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 2277c3c9db83Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 2278c3c9db83Smrg else 2279c3c9db83Smrg exit $EXIT_SUCCESS 2280c3c9db83Smrg fi 2281c3c9db83Smrg} 2282c3c9db83Smrg 2283c3c9db83Smrgtest "$mode" = install && func_mode_install ${1+"$@"} 2284c3c9db83Smrg 2285c3c9db83Smrg 2286c3c9db83Smrg# func_generate_dlsyms outputname originator pic_p 2287c3c9db83Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 2288c3c9db83Smrg# a dlpreopen symbol table. 2289c3c9db83Smrgfunc_generate_dlsyms () 2290c3c9db83Smrg{ 2291c3c9db83Smrg $opt_debug 2292c3c9db83Smrg my_outputname="$1" 2293c3c9db83Smrg my_originator="$2" 2294c3c9db83Smrg my_pic_p="${3-no}" 2295c3c9db83Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 2296c3c9db83Smrg my_dlsyms= 2297c3c9db83Smrg 2298c3c9db83Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 2299c3c9db83Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 2300c3c9db83Smrg my_dlsyms="${my_outputname}S.c" 2301c3c9db83Smrg else 2302c3c9db83Smrg func_error "not configured to extract global symbols from dlpreopened files" 2303c3c9db83Smrg fi 2304c3c9db83Smrg fi 2305c3c9db83Smrg 2306c3c9db83Smrg if test -n "$my_dlsyms"; then 2307c3c9db83Smrg case $my_dlsyms in 2308c3c9db83Smrg "") ;; 2309c3c9db83Smrg *.c) 2310c3c9db83Smrg # Discover the nlist of each of the dlfiles. 2311c3c9db83Smrg nlist="$output_objdir/${my_outputname}.nm" 2312c3c9db83Smrg 2313c3c9db83Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 2314c3c9db83Smrg 2315c3c9db83Smrg # Parse the name list into a source file. 2316c3c9db83Smrg func_verbose "creating $output_objdir/$my_dlsyms" 2317c3c9db83Smrg 2318c3c9db83Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 2319c3c9db83Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 2320c3c9db83Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 2321c3c9db83Smrg 2322c3c9db83Smrg#ifdef __cplusplus 2323c3c9db83Smrgextern \"C\" { 2324c3c9db83Smrg#endif 2325c3c9db83Smrg 2326c3c9db83Smrg/* External symbol declarations for the compiler. */\ 2327c3c9db83Smrg" 2328c3c9db83Smrg 2329c3c9db83Smrg if test "$dlself" = yes; then 2330c3c9db83Smrg func_verbose "generating symbol list for \`$output'" 2331c3c9db83Smrg 2332c3c9db83Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 2333c3c9db83Smrg 2334c3c9db83Smrg # Add our own program objects to the symbol list. 2335c3c9db83Smrg progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 2336c3c9db83Smrg for progfile in $progfiles; do 2337c3c9db83Smrg func_verbose "extracting global C symbols from \`$progfile'" 2338c3c9db83Smrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 2339c3c9db83Smrg done 2340c3c9db83Smrg 2341c3c9db83Smrg if test -n "$exclude_expsyms"; then 2342c3c9db83Smrg $opt_dry_run || { 2343c3c9db83Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 2344c3c9db83Smrg eval '$MV "$nlist"T "$nlist"' 2345c3c9db83Smrg } 23462e71ea71Smrg fi 2347c3c9db83Smrg 2348c3c9db83Smrg if test -n "$export_symbols_regex"; then 2349c3c9db83Smrg $opt_dry_run || { 2350c3c9db83Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 2351c3c9db83Smrg eval '$MV "$nlist"T "$nlist"' 2352c3c9db83Smrg } 2353c3c9db83Smrg fi 2354c3c9db83Smrg 2355c3c9db83Smrg # Prepare the list of exported symbols 2356c3c9db83Smrg if test -z "$export_symbols"; then 2357c3c9db83Smrg export_symbols="$output_objdir/$outputname.exp" 2358c3c9db83Smrg $opt_dry_run || { 2359c3c9db83Smrg $RM $export_symbols 2360c3c9db83Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 2361c3c9db83Smrg case $host in 2362c3c9db83Smrg *cygwin* | *mingw* | *cegcc* ) 2363c3c9db83Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2364c3c9db83Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 2365c3c9db83Smrg ;; 2366c3c9db83Smrg esac 2367c3c9db83Smrg } 23682e71ea71Smrg else 2369c3c9db83Smrg $opt_dry_run || { 2370c3c9db83Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 2371c3c9db83Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 2372c3c9db83Smrg eval '$MV "$nlist"T "$nlist"' 2373c3c9db83Smrg case $host in 2374c3c9db83Smrg *cygwin | *mingw* | *cegcc* ) 2375c3c9db83Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2376c3c9db83Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 2377c3c9db83Smrg ;; 2378c3c9db83Smrg esac 2379c3c9db83Smrg } 23802e71ea71Smrg fi 2381c3c9db83Smrg fi 2382692f60a7Smrg 2383c3c9db83Smrg for dlprefile in $dlprefiles; do 2384c3c9db83Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 2385c3c9db83Smrg func_basename "$dlprefile" 2386c3c9db83Smrg name="$func_basename_result" 2387c3c9db83Smrg $opt_dry_run || { 2388c3c9db83Smrg eval '$ECHO ": $name " >> "$nlist"' 2389c3c9db83Smrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 2390c3c9db83Smrg } 2391c3c9db83Smrg done 2392c3c9db83Smrg 2393c3c9db83Smrg $opt_dry_run || { 2394c3c9db83Smrg # Make sure we have at least an empty file. 2395c3c9db83Smrg test -f "$nlist" || : > "$nlist" 2396c3c9db83Smrg 2397c3c9db83Smrg if test -n "$exclude_expsyms"; then 2398c3c9db83Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 2399c3c9db83Smrg $MV "$nlist"T "$nlist" 24002e71ea71Smrg fi 2401c3c9db83Smrg 2402c3c9db83Smrg # Try sorting and uniquifying the output. 2403c3c9db83Smrg if $GREP -v "^: " < "$nlist" | 2404c3c9db83Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 2405c3c9db83Smrg sort -k 3 2406c3c9db83Smrg else 2407c3c9db83Smrg sort +2 2408c3c9db83Smrg fi | 2409c3c9db83Smrg uniq > "$nlist"S; then 2410c3c9db83Smrg : 24112e71ea71Smrg else 2412c3c9db83Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 24132e71ea71Smrg fi 2414692f60a7Smrg 2415c3c9db83Smrg if test -f "$nlist"S; then 2416c3c9db83Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 24172e71ea71Smrg else 2418c3c9db83Smrg $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" 24192e71ea71Smrg fi 2420692f60a7Smrg 2421c3c9db83Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2422692f60a7Smrg 2423c3c9db83Smrg/* The mapping between symbol names and symbols. */ 2424c3c9db83Smrgtypedef struct { 2425c3c9db83Smrg const char *name; 2426c3c9db83Smrg void *address; 2427c3c9db83Smrg} lt_dlsymlist; 2428c3c9db83Smrg" 2429c3c9db83Smrg case $host in 2430c3c9db83Smrg *cygwin* | *mingw* | *cegcc* ) 2431c3c9db83Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2432c3c9db83Smrg/* DATA imports from DLLs on WIN32 con't be const, because 2433c3c9db83Smrg runtime relocations are performed -- see ld's documentation 2434c3c9db83Smrg on pseudo-relocs. */" 2435c3c9db83Smrg lt_dlsym_const= ;; 2436c3c9db83Smrg *osf5*) 2437c3c9db83Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2438c3c9db83Smrg/* This system does not cope well with relocations in const data */" 2439c3c9db83Smrg lt_dlsym_const= ;; 2440c3c9db83Smrg *) 2441c3c9db83Smrg lt_dlsym_const=const ;; 2442c3c9db83Smrg esac 2443692f60a7Smrg 2444c3c9db83Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2445c3c9db83Smrgextern $lt_dlsym_const lt_dlsymlist 2446c3c9db83Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 2447c3c9db83Smrg$lt_dlsym_const lt_dlsymlist 2448c3c9db83Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 2449c3c9db83Smrg{\ 2450c3c9db83Smrg { \"$my_originator\", (void *) 0 }," 2451692f60a7Smrg 2452c3c9db83Smrg case $need_lib_prefix in 2453c3c9db83Smrg no) 2454c3c9db83Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 2455c3c9db83Smrg ;; 2456c3c9db83Smrg *) 2457c3c9db83Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 2458c3c9db83Smrg ;; 2459c3c9db83Smrg esac 2460c3c9db83Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2461c3c9db83Smrg {0, (void *) 0} 2462c3c9db83Smrg}; 2463692f60a7Smrg 2464c3c9db83Smrg/* This works around a problem in FreeBSD linker */ 2465c3c9db83Smrg#ifdef FREEBSD_WORKAROUND 2466c3c9db83Smrgstatic const void *lt_preloaded_setup() { 2467c3c9db83Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 2468c3c9db83Smrg} 2469c3c9db83Smrg#endif 2470c3c9db83Smrg 2471c3c9db83Smrg#ifdef __cplusplus 2472c3c9db83Smrg} 2473c3c9db83Smrg#endif\ 2474c3c9db83Smrg" 2475c3c9db83Smrg } # !$opt_dry_run 2476c3c9db83Smrg 2477c3c9db83Smrg pic_flag_for_symtable= 2478c3c9db83Smrg case "$compile_command " in 2479c3c9db83Smrg *" -static "*) ;; 2480c3c9db83Smrg *) 2481c3c9db83Smrg case $host in 2482c3c9db83Smrg # compiling the symbol table file with pic_flag works around 2483c3c9db83Smrg # a FreeBSD bug that causes programs to crash when -lm is 2484c3c9db83Smrg # linked before any other PIC object. But we must not use 2485c3c9db83Smrg # pic_flag when linking with -static. The problem exists in 2486c3c9db83Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 2487c3c9db83Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 2488c3c9db83Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 2489c3c9db83Smrg *-*-hpux*) 2490c3c9db83Smrg pic_flag_for_symtable=" $pic_flag" ;; 2491c3c9db83Smrg *) 2492c3c9db83Smrg if test "X$my_pic_p" != Xno; then 2493c3c9db83Smrg pic_flag_for_symtable=" $pic_flag" 24942e71ea71Smrg fi 2495c3c9db83Smrg ;; 2496c3c9db83Smrg esac 2497c3c9db83Smrg ;; 2498c3c9db83Smrg esac 2499c3c9db83Smrg symtab_cflags= 2500c3c9db83Smrg for arg in $LTCFLAGS; do 2501c3c9db83Smrg case $arg in 2502c3c9db83Smrg -pie | -fpie | -fPIE) ;; 2503c3c9db83Smrg *) symtab_cflags="$symtab_cflags $arg" ;; 2504c3c9db83Smrg esac 2505c3c9db83Smrg done 2506692f60a7Smrg 2507c3c9db83Smrg # Now compile the dynamic symbol file. 2508c3c9db83Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 250985ee4c00Smrg 2510c3c9db83Smrg # Clean up the generated files. 2511c3c9db83Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2512692f60a7Smrg 2513c3c9db83Smrg # Transform the symbol file into the correct name. 2514c3c9db83Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 2515c3c9db83Smrg case $host in 2516c3c9db83Smrg *cygwin* | *mingw* | *cegcc* ) 2517c3c9db83Smrg if test -f "$output_objdir/$my_outputname.def"; then 2518c3c9db83Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2519c3c9db83Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2520c3c9db83Smrg else 2521c3c9db83Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2522c3c9db83Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25232e71ea71Smrg fi 2524c3c9db83Smrg ;; 2525c3c9db83Smrg *) 2526c3c9db83Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2527c3c9db83Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 2528c3c9db83Smrg ;; 2529c3c9db83Smrg esac 2530c3c9db83Smrg ;; 2531c3c9db83Smrg *) 2532c3c9db83Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 2533c3c9db83Smrg ;; 2534c3c9db83Smrg esac 2535c3c9db83Smrg else 2536c3c9db83Smrg # We keep going just in case the user didn't refer to 2537c3c9db83Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 2538c3c9db83Smrg # really was required. 2539692f60a7Smrg 2540c3c9db83Smrg # Nullify the symbol file. 2541c3c9db83Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` 2542c3c9db83Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` 2543c3c9db83Smrg fi 2544c3c9db83Smrg} 254585ee4c00Smrg 2546c3c9db83Smrg# func_win32_libid arg 2547c3c9db83Smrg# return the library type of file 'arg' 2548c3c9db83Smrg# 2549c3c9db83Smrg# Need a lot of goo to handle *both* DLLs and import libs 2550c3c9db83Smrg# Has to be a shell function in order to 'eat' the argument 2551c3c9db83Smrg# that is supplied when $file_magic_command is called. 2552c3c9db83Smrgfunc_win32_libid () 2553c3c9db83Smrg{ 2554c3c9db83Smrg $opt_debug 2555c3c9db83Smrg win32_libid_type="unknown" 2556c3c9db83Smrg win32_fileres=`file -L $1 2>/dev/null` 2557c3c9db83Smrg case $win32_fileres in 2558c3c9db83Smrg *ar\ archive\ import\ library*) # definitely import 2559c3c9db83Smrg win32_libid_type="x86 archive import" 2560c3c9db83Smrg ;; 2561c3c9db83Smrg *ar\ archive*) # could be an import, or static 2562c3c9db83Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 2563c3c9db83Smrg $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 2564c3c9db83Smrg win32_nmres=`eval $NM -f posix -A $1 | 2565c3c9db83Smrg $SED -n -e ' 2566c3c9db83Smrg 1,100{ 2567c3c9db83Smrg / I /{ 2568c3c9db83Smrg s,.*,import, 2569c3c9db83Smrg p 2570c3c9db83Smrg q 2571c3c9db83Smrg } 2572c3c9db83Smrg }'` 2573c3c9db83Smrg case $win32_nmres in 2574c3c9db83Smrg import*) win32_libid_type="x86 archive import";; 2575c3c9db83Smrg *) win32_libid_type="x86 archive static";; 2576c3c9db83Smrg esac 2577c3c9db83Smrg fi 2578c3c9db83Smrg ;; 2579c3c9db83Smrg *DLL*) 2580c3c9db83Smrg win32_libid_type="x86 DLL" 2581c3c9db83Smrg ;; 2582c3c9db83Smrg *executable*) # but shell scripts are "executable" too... 2583c3c9db83Smrg case $win32_fileres in 2584c3c9db83Smrg *MS\ Windows\ PE\ Intel*) 2585c3c9db83Smrg win32_libid_type="x86 DLL" 2586c3c9db83Smrg ;; 2587c3c9db83Smrg esac 2588c3c9db83Smrg ;; 2589c3c9db83Smrg esac 2590c3c9db83Smrg $ECHO "$win32_libid_type" 2591c3c9db83Smrg} 259285ee4c00Smrg 259385ee4c00Smrg 259485ee4c00Smrg 2595c3c9db83Smrg# func_extract_an_archive dir oldlib 2596c3c9db83Smrgfunc_extract_an_archive () 2597c3c9db83Smrg{ 2598c3c9db83Smrg $opt_debug 2599c3c9db83Smrg f_ex_an_ar_dir="$1"; shift 2600c3c9db83Smrg f_ex_an_ar_oldlib="$1" 2601c3c9db83Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 2602c3c9db83Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 2603c3c9db83Smrg : 2604c3c9db83Smrg else 2605c3c9db83Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 2606c3c9db83Smrg fi 2607c3c9db83Smrg} 2608692f60a7Smrg 2609692f60a7Smrg 2610c3c9db83Smrg# func_extract_archives gentop oldlib ... 2611c3c9db83Smrgfunc_extract_archives () 2612c3c9db83Smrg{ 2613c3c9db83Smrg $opt_debug 2614c3c9db83Smrg my_gentop="$1"; shift 2615c3c9db83Smrg my_oldlibs=${1+"$@"} 2616c3c9db83Smrg my_oldobjs="" 2617c3c9db83Smrg my_xlib="" 2618c3c9db83Smrg my_xabs="" 2619c3c9db83Smrg my_xdir="" 2620692f60a7Smrg 2621c3c9db83Smrg for my_xlib in $my_oldlibs; do 2622c3c9db83Smrg # Extract the objects. 2623c3c9db83Smrg case $my_xlib in 2624c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 2625c3c9db83Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 2626c3c9db83Smrg esac 2627c3c9db83Smrg func_basename "$my_xlib" 2628c3c9db83Smrg my_xlib="$func_basename_result" 2629c3c9db83Smrg my_xlib_u=$my_xlib 2630c3c9db83Smrg while :; do 2631c3c9db83Smrg case " $extracted_archives " in 2632c3c9db83Smrg *" $my_xlib_u "*) 2633c3c9db83Smrg func_arith $extracted_serial + 1 2634c3c9db83Smrg extracted_serial=$func_arith_result 2635c3c9db83Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 2636c3c9db83Smrg *) break ;; 2637c3c9db83Smrg esac 2638c3c9db83Smrg done 2639c3c9db83Smrg extracted_archives="$extracted_archives $my_xlib_u" 2640c3c9db83Smrg my_xdir="$my_gentop/$my_xlib_u" 2641692f60a7Smrg 2642c3c9db83Smrg func_mkdir_p "$my_xdir" 264385ee4c00Smrg 2644c3c9db83Smrg case $host in 2645c3c9db83Smrg *-darwin*) 2646c3c9db83Smrg func_verbose "Extracting $my_xabs" 2647c3c9db83Smrg # Do not bother doing anything if just a dry run 2648c3c9db83Smrg $opt_dry_run || { 2649c3c9db83Smrg darwin_orig_dir=`pwd` 2650c3c9db83Smrg cd $my_xdir || exit $? 2651c3c9db83Smrg darwin_archive=$my_xabs 2652c3c9db83Smrg darwin_curdir=`pwd` 2653c3c9db83Smrg darwin_base_archive=`basename "$darwin_archive"` 2654c3c9db83Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 2655c3c9db83Smrg if test -n "$darwin_arches"; then 2656c3c9db83Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 2657c3c9db83Smrg darwin_arch= 2658c3c9db83Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 2659c3c9db83Smrg for darwin_arch in $darwin_arches ; do 2660c3c9db83Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2661c3c9db83Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 2662c3c9db83Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2663c3c9db83Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 2664c3c9db83Smrg cd "$darwin_curdir" 2665c3c9db83Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 2666c3c9db83Smrg done # $darwin_arches 2667c3c9db83Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 2668c3c9db83Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 2669c3c9db83Smrg darwin_file= 2670c3c9db83Smrg darwin_files= 2671c3c9db83Smrg for darwin_file in $darwin_filelist; do 2672c3c9db83Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 2673c3c9db83Smrg $LIPO -create -output "$darwin_file" $darwin_files 2674c3c9db83Smrg done # $darwin_filelist 2675c3c9db83Smrg $RM -rf unfat-$$ 2676c3c9db83Smrg cd "$darwin_orig_dir" 26772e71ea71Smrg else 2678c3c9db83Smrg cd $darwin_orig_dir 2679c3c9db83Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 2680c3c9db83Smrg fi # $darwin_arches 2681c3c9db83Smrg } # !$opt_dry_run 2682c3c9db83Smrg ;; 2683c3c9db83Smrg *) 2684c3c9db83Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 2685c3c9db83Smrg ;; 2686c3c9db83Smrg esac 2687c3c9db83Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 2688c3c9db83Smrg done 2689692f60a7Smrg 2690c3c9db83Smrg func_extract_archives_result="$my_oldobjs" 2691c3c9db83Smrg} 2692692f60a7Smrg 2693692f60a7Smrg 2694692f60a7Smrg 2695c3c9db83Smrg# func_emit_wrapper_part1 [arg=no] 2696c3c9db83Smrg# 2697c3c9db83Smrg# Emit the first part of a libtool wrapper script on stdout. 2698c3c9db83Smrg# For more information, see the description associated with 2699c3c9db83Smrg# func_emit_wrapper(), below. 2700c3c9db83Smrgfunc_emit_wrapper_part1 () 2701c3c9db83Smrg{ 2702c3c9db83Smrg func_emit_wrapper_part1_arg1=no 2703c3c9db83Smrg if test -n "$1" ; then 2704c3c9db83Smrg func_emit_wrapper_part1_arg1=$1 27052e71ea71Smrg fi 27062e71ea71Smrg 2707c3c9db83Smrg $ECHO "\ 2708c3c9db83Smrg#! $SHELL 2709692f60a7Smrg 2710c3c9db83Smrg# $output - temporary wrapper script for $objdir/$outputname 2711c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 2712c3c9db83Smrg# 2713c3c9db83Smrg# The $output program cannot be directly executed until all the libtool 2714c3c9db83Smrg# libraries that it depends on are installed. 2715c3c9db83Smrg# 2716c3c9db83Smrg# This wrapper script should never be moved out of the build directory. 2717c3c9db83Smrg# If it is, it will not operate correctly. 2718692f60a7Smrg 2719c3c9db83Smrg# Sed substitution that helps us do robust quoting. It backslashifies 2720c3c9db83Smrg# metacharacters that are still active within double-quoted strings. 2721c3c9db83SmrgXsed='${SED} -e 1s/^X//' 2722c3c9db83Smrgsed_quote_subst='$sed_quote_subst' 2723692f60a7Smrg 2724c3c9db83Smrg# Be Bourne compatible 2725c3c9db83Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 2726c3c9db83Smrg emulate sh 2727c3c9db83Smrg NULLCMD=: 2728c3c9db83Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 2729c3c9db83Smrg # is contrary to our usage. Disable this feature. 2730c3c9db83Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 2731c3c9db83Smrg setopt NO_GLOB_SUBST 2732c3c9db83Smrgelse 2733c3c9db83Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 2734c3c9db83Smrgfi 2735c3c9db83SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 2736c3c9db83SmrgDUALCASE=1; export DUALCASE # for MKS sh 2737692f60a7Smrg 2738c3c9db83Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 2739c3c9db83Smrg# if CDPATH is set. 2740c3c9db83Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 2741692f60a7Smrg 2742c3c9db83Smrgrelink_command=\"$relink_command\" 2743692f60a7Smrg 2744c3c9db83Smrg# This environment variable determines our operation mode. 2745c3c9db83Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 2746c3c9db83Smrg # install mode needs the following variables: 2747c3c9db83Smrg generated_by_libtool_version='$macro_version' 2748c3c9db83Smrg notinst_deplibs='$notinst_deplibs' 2749c3c9db83Smrgelse 2750c3c9db83Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 2751c3c9db83Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 2752c3c9db83Smrg ECHO=\"$qecho\" 2753c3c9db83Smrg file=\"\$0\" 2754c3c9db83Smrg # Make sure echo works. 2755c3c9db83Smrg if test \"X\$1\" = X--no-reexec; then 2756c3c9db83Smrg # Discard the --no-reexec flag, and continue. 2757c3c9db83Smrg shift 2758c3c9db83Smrg elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then 2759c3c9db83Smrg # Yippee, \$ECHO works! 2760c3c9db83Smrg : 2761c3c9db83Smrg else 2762c3c9db83Smrg # Restart under the correct shell, and then maybe \$ECHO will work. 2763c3c9db83Smrg exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 2764c3c9db83Smrg fi 2765c3c9db83Smrg fi\ 2766c3c9db83Smrg" 2767c3c9db83Smrg $ECHO "\ 2768692f60a7Smrg 2769c3c9db83Smrg # Find the directory that this script lives in. 2770c3c9db83Smrg thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 2771c3c9db83Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 2772692f60a7Smrg 2773c3c9db83Smrg # Follow symbolic links until we get to the real thisdir. 2774c3c9db83Smrg file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 2775c3c9db83Smrg while test -n \"\$file\"; do 2776c3c9db83Smrg destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 2777692f60a7Smrg 2778c3c9db83Smrg # If there was a directory component, then change thisdir. 2779c3c9db83Smrg if test \"x\$destdir\" != \"x\$file\"; then 2780c3c9db83Smrg case \"\$destdir\" in 2781c3c9db83Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 2782c3c9db83Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 27832e71ea71Smrg esac 2784c3c9db83Smrg fi 2785692f60a7Smrg 2786c3c9db83Smrg file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 2787c3c9db83Smrg file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 2788c3c9db83Smrg done 2789c3c9db83Smrg" 2790c3c9db83Smrg} 2791c3c9db83Smrg# end: func_emit_wrapper_part1 2792c3c9db83Smrg 2793c3c9db83Smrg# func_emit_wrapper_part2 [arg=no] 2794c3c9db83Smrg# 2795c3c9db83Smrg# Emit the second part of a libtool wrapper script on stdout. 2796c3c9db83Smrg# For more information, see the description associated with 2797c3c9db83Smrg# func_emit_wrapper(), below. 2798c3c9db83Smrgfunc_emit_wrapper_part2 () 2799c3c9db83Smrg{ 2800c3c9db83Smrg func_emit_wrapper_part2_arg1=no 2801c3c9db83Smrg if test -n "$1" ; then 2802c3c9db83Smrg func_emit_wrapper_part2_arg1=$1 28032e71ea71Smrg fi 2804692f60a7Smrg 2805c3c9db83Smrg $ECHO "\ 2806692f60a7Smrg 2807c3c9db83Smrg # Usually 'no', except on cygwin/mingw when embedded into 2808c3c9db83Smrg # the cwrapper. 2809c3c9db83Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 2810c3c9db83Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 2811c3c9db83Smrg # special case for '.' 2812c3c9db83Smrg if test \"\$thisdir\" = \".\"; then 2813c3c9db83Smrg thisdir=\`pwd\` 2814c3c9db83Smrg fi 2815c3c9db83Smrg # remove .libs from thisdir 2816c3c9db83Smrg case \"\$thisdir\" in 2817c3c9db83Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; 2818c3c9db83Smrg $objdir ) thisdir=. ;; 2819c3c9db83Smrg esac 2820c3c9db83Smrg fi 2821c3c9db83Smrg 2822c3c9db83Smrg # Try to get the absolute directory name. 2823c3c9db83Smrg absdir=\`cd \"\$thisdir\" && pwd\` 2824c3c9db83Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 2825c3c9db83Smrg" 2826c3c9db83Smrg 2827c3c9db83Smrg if test "$fast_install" = yes; then 2828c3c9db83Smrg $ECHO "\ 2829c3c9db83Smrg program=lt-'$outputname'$exeext 2830c3c9db83Smrg progdir=\"\$thisdir/$objdir\" 2831c3c9db83Smrg 2832c3c9db83Smrg if test ! -f \"\$progdir/\$program\" || 2833c3c9db83Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 2834c3c9db83Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 2835c3c9db83Smrg 2836c3c9db83Smrg file=\"\$\$-\$program\" 2837c3c9db83Smrg 2838c3c9db83Smrg if test ! -d \"\$progdir\"; then 2839c3c9db83Smrg $MKDIR \"\$progdir\" 2840c3c9db83Smrg else 2841c3c9db83Smrg $RM \"\$progdir/\$file\" 2842c3c9db83Smrg fi" 2843c3c9db83Smrg 2844c3c9db83Smrg $ECHO "\ 2845c3c9db83Smrg 2846c3c9db83Smrg # relink executable if necessary 2847c3c9db83Smrg if test -n \"\$relink_command\"; then 2848c3c9db83Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 2849c3c9db83Smrg else 2850c3c9db83Smrg $ECHO \"\$relink_command_output\" >&2 2851c3c9db83Smrg $RM \"\$progdir/\$file\" 2852c3c9db83Smrg exit 1 28532e71ea71Smrg fi 2854c3c9db83Smrg fi 2855692f60a7Smrg 2856c3c9db83Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 2857c3c9db83Smrg { $RM \"\$progdir/\$program\"; 2858c3c9db83Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 2859c3c9db83Smrg $RM \"\$progdir/\$file\" 2860c3c9db83Smrg fi" 2861c3c9db83Smrg else 2862c3c9db83Smrg $ECHO "\ 2863c3c9db83Smrg program='$outputname' 2864c3c9db83Smrg progdir=\"\$thisdir/$objdir\" 2865c3c9db83Smrg" 28662e71ea71Smrg fi 2867692f60a7Smrg 2868c3c9db83Smrg $ECHO "\ 2869692f60a7Smrg 2870c3c9db83Smrg if test -f \"\$progdir/\$program\"; then" 2871692f60a7Smrg 2872c3c9db83Smrg # Export our shlibpath_var if we have one. 2873c3c9db83Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 2874c3c9db83Smrg $ECHO "\ 2875c3c9db83Smrg # Add our own library path to $shlibpath_var 2876c3c9db83Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 2877c3c9db83Smrg 2878c3c9db83Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 2879c3c9db83Smrg # The second colon is a workaround for a bug in BeOS R4 sed 2880c3c9db83Smrg $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 2881692f60a7Smrg 2882c3c9db83Smrg export $shlibpath_var 2883c3c9db83Smrg" 28842e71ea71Smrg fi 2885692f60a7Smrg 2886c3c9db83Smrg # fixup the dll searchpath if we need to. 2887c3c9db83Smrg if test -n "$dllsearchpath"; then 2888c3c9db83Smrg $ECHO "\ 2889c3c9db83Smrg # Add the dll search path components to the executable PATH 2890c3c9db83Smrg PATH=$dllsearchpath:\$PATH 2891c3c9db83Smrg" 2892c3c9db83Smrg fi 2893692f60a7Smrg 2894c3c9db83Smrg $ECHO "\ 2895c3c9db83Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 2896c3c9db83Smrg # Run the actual program with our arguments. 2897c3c9db83Smrg" 2898c3c9db83Smrg case $host in 2899c3c9db83Smrg # Backslashes separate directories on plain windows 2900c3c9db83Smrg *-*-mingw | *-*-os2* | *-cegcc*) 2901c3c9db83Smrg $ECHO "\ 2902c3c9db83Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 2903c3c9db83Smrg" 29042e71ea71Smrg ;; 2905692f60a7Smrg 29062e71ea71Smrg *) 2907c3c9db83Smrg $ECHO "\ 2908c3c9db83Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 2909c3c9db83Smrg" 29102e71ea71Smrg ;; 29112e71ea71Smrg esac 2912c3c9db83Smrg $ECHO "\ 2913c3c9db83Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 2914c3c9db83Smrg exit 1 2915c3c9db83Smrg fi 2916c3c9db83Smrg else 2917c3c9db83Smrg # The program doesn't exist. 2918c3c9db83Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 2919c3c9db83Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 2920c3c9db83Smrg $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 2921c3c9db83Smrg exit 1 2922c3c9db83Smrg fi 2923c3c9db83Smrgfi\ 2924c3c9db83Smrg" 2925c3c9db83Smrg} 2926c3c9db83Smrg# end: func_emit_wrapper_part2 2927692f60a7Smrg 2928692f60a7Smrg 2929c3c9db83Smrg# func_emit_wrapper [arg=no] 2930c3c9db83Smrg# 2931c3c9db83Smrg# Emit a libtool wrapper script on stdout. 2932c3c9db83Smrg# Don't directly open a file because we may want to 2933c3c9db83Smrg# incorporate the script contents within a cygwin/mingw 2934c3c9db83Smrg# wrapper executable. Must ONLY be called from within 2935c3c9db83Smrg# func_mode_link because it depends on a number of variables 2936c3c9db83Smrg# set therein. 2937c3c9db83Smrg# 2938c3c9db83Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 2939c3c9db83Smrg# variable will take. If 'yes', then the emitted script 2940c3c9db83Smrg# will assume that the directory in which it is stored is 2941c3c9db83Smrg# the $objdir directory. This is a cygwin/mingw-specific 2942c3c9db83Smrg# behavior. 2943c3c9db83Smrgfunc_emit_wrapper () 2944c3c9db83Smrg{ 2945c3c9db83Smrg func_emit_wrapper_arg1=no 2946c3c9db83Smrg if test -n "$1" ; then 2947c3c9db83Smrg func_emit_wrapper_arg1=$1 29482e71ea71Smrg fi 2949692f60a7Smrg 2950c3c9db83Smrg # split this up so that func_emit_cwrapperexe_src 2951c3c9db83Smrg # can call each part independently. 2952c3c9db83Smrg func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" 2953c3c9db83Smrg func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" 2954c3c9db83Smrg} 2955692f60a7Smrg 2956692f60a7Smrg 2957c3c9db83Smrg# func_to_host_path arg 2958c3c9db83Smrg# 2959c3c9db83Smrg# Convert paths to host format when used with build tools. 2960c3c9db83Smrg# Intended for use with "native" mingw (where libtool itself 2961c3c9db83Smrg# is running under the msys shell), or in the following cross- 2962c3c9db83Smrg# build environments: 2963c3c9db83Smrg# $build $host 2964c3c9db83Smrg# mingw (msys) mingw [e.g. native] 2965c3c9db83Smrg# cygwin mingw 2966c3c9db83Smrg# *nix + wine mingw 2967c3c9db83Smrg# where wine is equipped with the `winepath' executable. 2968c3c9db83Smrg# In the native mingw case, the (msys) shell automatically 2969c3c9db83Smrg# converts paths for any non-msys applications it launches, 2970c3c9db83Smrg# but that facility isn't available from inside the cwrapper. 2971c3c9db83Smrg# Similar accommodations are necessary for $host mingw and 2972c3c9db83Smrg# $build cygwin. Calling this function does no harm for other 2973c3c9db83Smrg# $host/$build combinations not listed above. 2974c3c9db83Smrg# 2975c3c9db83Smrg# ARG is the path (on $build) that should be converted to 2976c3c9db83Smrg# the proper representation for $host. The result is stored 2977c3c9db83Smrg# in $func_to_host_path_result. 2978c3c9db83Smrgfunc_to_host_path () 2979c3c9db83Smrg{ 2980c3c9db83Smrg func_to_host_path_result="$1" 2981c3c9db83Smrg if test -n "$1" ; then 2982c3c9db83Smrg case $host in 2983c3c9db83Smrg *mingw* ) 2984c3c9db83Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 2985c3c9db83Smrg case $build in 2986c3c9db83Smrg *mingw* ) # actually, msys 2987c3c9db83Smrg # awkward: cmd appends spaces to result 2988c3c9db83Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 2989c3c9db83Smrg func_to_host_path_tmp1=`( cmd //c echo "$1" |\ 2990c3c9db83Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 2991c3c9db83Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 2992c3c9db83Smrg $SED -e "$lt_sed_naive_backslashify"` 2993c3c9db83Smrg ;; 2994c3c9db83Smrg *cygwin* ) 2995c3c9db83Smrg func_to_host_path_tmp1=`cygpath -w "$1"` 2996c3c9db83Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 2997c3c9db83Smrg $SED -e "$lt_sed_naive_backslashify"` 2998c3c9db83Smrg ;; 2999c3c9db83Smrg * ) 3000c3c9db83Smrg # Unfortunately, winepath does not exit with a non-zero 3001c3c9db83Smrg # error code, so we are forced to check the contents of 3002c3c9db83Smrg # stdout. On the other hand, if the command is not 3003c3c9db83Smrg # found, the shell will set an exit code of 127 and print 3004c3c9db83Smrg # *an error message* to stdout. So we must check for both 3005c3c9db83Smrg # error code of zero AND non-empty stdout, which explains 3006c3c9db83Smrg # the odd construction: 3007c3c9db83Smrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 3008c3c9db83Smrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 3009c3c9db83Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 3010c3c9db83Smrg $SED -e "$lt_sed_naive_backslashify"` 3011c3c9db83Smrg else 3012c3c9db83Smrg # Allow warning below. 3013c3c9db83Smrg func_to_host_path_result="" 3014c3c9db83Smrg fi 3015c3c9db83Smrg ;; 3016c3c9db83Smrg esac 3017c3c9db83Smrg if test -z "$func_to_host_path_result" ; then 3018c3c9db83Smrg func_error "Could not determine host path corresponding to" 3019c3c9db83Smrg func_error " '$1'" 3020c3c9db83Smrg func_error "Continuing, but uninstalled executables may not work." 3021c3c9db83Smrg # Fallback: 3022c3c9db83Smrg func_to_host_path_result="$1" 3023c3c9db83Smrg fi 3024c3c9db83Smrg ;; 3025c3c9db83Smrg esac 3026c3c9db83Smrg fi 3027c3c9db83Smrg} 3028c3c9db83Smrg# end: func_to_host_path 3029692f60a7Smrg 3030c3c9db83Smrg# func_to_host_pathlist arg 3031c3c9db83Smrg# 3032c3c9db83Smrg# Convert pathlists to host format when used with build tools. 3033c3c9db83Smrg# See func_to_host_path(), above. This function supports the 3034c3c9db83Smrg# following $build/$host combinations (but does no harm for 3035c3c9db83Smrg# combinations not listed here): 3036c3c9db83Smrg# $build $host 3037c3c9db83Smrg# mingw (msys) mingw [e.g. native] 3038c3c9db83Smrg# cygwin mingw 3039c3c9db83Smrg# *nix + wine mingw 3040c3c9db83Smrg# 3041c3c9db83Smrg# Path separators are also converted from $build format to 3042c3c9db83Smrg# $host format. If ARG begins or ends with a path separator 3043c3c9db83Smrg# character, it is preserved (but converted to $host format) 3044c3c9db83Smrg# on output. 3045c3c9db83Smrg# 3046c3c9db83Smrg# ARG is a pathlist (on $build) that should be converted to 3047c3c9db83Smrg# the proper representation on $host. The result is stored 3048c3c9db83Smrg# in $func_to_host_pathlist_result. 3049c3c9db83Smrgfunc_to_host_pathlist () 3050c3c9db83Smrg{ 3051c3c9db83Smrg func_to_host_pathlist_result="$1" 3052c3c9db83Smrg if test -n "$1" ; then 3053c3c9db83Smrg case $host in 3054c3c9db83Smrg *mingw* ) 3055c3c9db83Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3056c3c9db83Smrg # Remove leading and trailing path separator characters from 3057c3c9db83Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3058c3c9db83Smrg # into '.;' and ';.', and winepath ignores them completely. 3059c3c9db83Smrg func_to_host_pathlist_tmp2="$1" 3060c3c9db83Smrg # Once set for this call, this variable should not be 3061c3c9db83Smrg # reassigned. It is used in tha fallback case. 3062c3c9db83Smrg func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ 3063c3c9db83Smrg $SED -e 's|^:*||' -e 's|:*$||'` 3064c3c9db83Smrg case $build in 3065c3c9db83Smrg *mingw* ) # Actually, msys. 3066c3c9db83Smrg # Awkward: cmd appends spaces to result. 3067c3c9db83Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 3068c3c9db83Smrg func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ 3069c3c9db83Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 3070c3c9db83Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 3071c3c9db83Smrg $SED -e "$lt_sed_naive_backslashify"` 3072c3c9db83Smrg ;; 3073c3c9db83Smrg *cygwin* ) 3074c3c9db83Smrg func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` 3075c3c9db83Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 3076c3c9db83Smrg $SED -e "$lt_sed_naive_backslashify"` 3077c3c9db83Smrg ;; 3078c3c9db83Smrg * ) 3079c3c9db83Smrg # unfortunately, winepath doesn't convert pathlists 3080c3c9db83Smrg func_to_host_pathlist_result="" 3081c3c9db83Smrg func_to_host_pathlist_oldIFS=$IFS 3082c3c9db83Smrg IFS=: 3083c3c9db83Smrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 3084c3c9db83Smrg IFS=$func_to_host_pathlist_oldIFS 3085c3c9db83Smrg if test -n "$func_to_host_pathlist_f" ; then 3086c3c9db83Smrg func_to_host_path "$func_to_host_pathlist_f" 3087c3c9db83Smrg if test -n "$func_to_host_path_result" ; then 3088c3c9db83Smrg if test -z "$func_to_host_pathlist_result" ; then 3089c3c9db83Smrg func_to_host_pathlist_result="$func_to_host_path_result" 3090c3c9db83Smrg else 3091c3c9db83Smrg func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" 3092c3c9db83Smrg fi 3093c3c9db83Smrg fi 3094c3c9db83Smrg fi 3095c3c9db83Smrg IFS=: 3096c3c9db83Smrg done 3097c3c9db83Smrg IFS=$func_to_host_pathlist_oldIFS 3098c3c9db83Smrg ;; 3099c3c9db83Smrg esac 3100c3c9db83Smrg if test -z "$func_to_host_pathlist_result" ; then 3101c3c9db83Smrg func_error "Could not determine the host path(s) corresponding to" 3102c3c9db83Smrg func_error " '$1'" 3103c3c9db83Smrg func_error "Continuing, but uninstalled executables may not work." 3104c3c9db83Smrg # Fallback. This may break if $1 contains DOS-style drive 3105c3c9db83Smrg # specifications. The fix is not to complicate the expression 3106c3c9db83Smrg # below, but for the user to provide a working wine installation 3107c3c9db83Smrg # with winepath so that path translation in the cross-to-mingw 3108c3c9db83Smrg # case works properly. 3109c3c9db83Smrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 3110c3c9db83Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 3111c3c9db83Smrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 3112c3c9db83Smrg fi 3113c3c9db83Smrg # Now, add the leading and trailing path separators back 3114c3c9db83Smrg case "$1" in 3115c3c9db83Smrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 3116c3c9db83Smrg ;; 3117c3c9db83Smrg esac 3118c3c9db83Smrg case "$1" in 3119c3c9db83Smrg *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" 3120c3c9db83Smrg ;; 3121c3c9db83Smrg esac 3122c3c9db83Smrg ;; 3123c3c9db83Smrg esac 3124c3c9db83Smrg fi 3125c3c9db83Smrg} 3126c3c9db83Smrg# end: func_to_host_pathlist 312785ee4c00Smrg 3128c3c9db83Smrg# func_emit_cwrapperexe_src 3129c3c9db83Smrg# emit the source code for a wrapper executable on stdout 3130c3c9db83Smrg# Must ONLY be called from within func_mode_link because 3131c3c9db83Smrg# it depends on a number of variable set therein. 3132c3c9db83Smrgfunc_emit_cwrapperexe_src () 3133c3c9db83Smrg{ 3134c3c9db83Smrg cat <<EOF 3135692f60a7Smrg 3136c3c9db83Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 3137c3c9db83Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3138692f60a7Smrg 3139c3c9db83Smrg The $output program cannot be directly executed until all the libtool 3140c3c9db83Smrg libraries that it depends on are installed. 3141692f60a7Smrg 3142c3c9db83Smrg This wrapper executable should never be moved out of the build directory. 3143c3c9db83Smrg If it is, it will not operate correctly. 3144692f60a7Smrg 3145c3c9db83Smrg Currently, it simply execs the wrapper *script* "$SHELL $output", 3146c3c9db83Smrg but could eventually absorb all of the scripts functionality and 3147c3c9db83Smrg exec $objdir/$outputname directly. 3148c3c9db83Smrg*/ 3149c3c9db83SmrgEOF 3150c3c9db83Smrg cat <<"EOF" 3151c3c9db83Smrg#include <stdio.h> 3152c3c9db83Smrg#include <stdlib.h> 3153c3c9db83Smrg#ifdef _MSC_VER 3154c3c9db83Smrg# include <direct.h> 3155c3c9db83Smrg# include <process.h> 3156c3c9db83Smrg# include <io.h> 3157c3c9db83Smrg# define setmode _setmode 3158c3c9db83Smrg#else 3159c3c9db83Smrg# include <unistd.h> 3160c3c9db83Smrg# include <stdint.h> 3161c3c9db83Smrg# ifdef __CYGWIN__ 3162c3c9db83Smrg# include <io.h> 3163c3c9db83Smrg# define HAVE_SETENV 3164c3c9db83Smrg# ifdef __STRICT_ANSI__ 3165c3c9db83Smrgchar *realpath (const char *, char *); 3166c3c9db83Smrgint putenv (char *); 3167c3c9db83Smrgint setenv (const char *, const char *, int); 3168c3c9db83Smrg# endif 3169c3c9db83Smrg# endif 3170c3c9db83Smrg#endif 3171c3c9db83Smrg#include <malloc.h> 3172c3c9db83Smrg#include <stdarg.h> 3173c3c9db83Smrg#include <assert.h> 3174c3c9db83Smrg#include <string.h> 3175c3c9db83Smrg#include <ctype.h> 3176c3c9db83Smrg#include <errno.h> 3177c3c9db83Smrg#include <fcntl.h> 3178c3c9db83Smrg#include <sys/stat.h> 3179692f60a7Smrg 3180c3c9db83Smrg#if defined(PATH_MAX) 3181c3c9db83Smrg# define LT_PATHMAX PATH_MAX 3182c3c9db83Smrg#elif defined(MAXPATHLEN) 3183c3c9db83Smrg# define LT_PATHMAX MAXPATHLEN 3184c3c9db83Smrg#else 3185c3c9db83Smrg# define LT_PATHMAX 1024 3186c3c9db83Smrg#endif 3187692f60a7Smrg 3188c3c9db83Smrg#ifndef S_IXOTH 3189c3c9db83Smrg# define S_IXOTH 0 3190c3c9db83Smrg#endif 3191c3c9db83Smrg#ifndef S_IXGRP 3192c3c9db83Smrg# define S_IXGRP 0 3193c3c9db83Smrg#endif 3194692f60a7Smrg 3195c3c9db83Smrg#ifdef _MSC_VER 3196c3c9db83Smrg# define S_IXUSR _S_IEXEC 3197c3c9db83Smrg# define stat _stat 3198c3c9db83Smrg# ifndef _INTPTR_T_DEFINED 3199c3c9db83Smrg# define intptr_t int 3200c3c9db83Smrg# endif 3201c3c9db83Smrg#endif 3202692f60a7Smrg 3203c3c9db83Smrg#ifndef DIR_SEPARATOR 3204c3c9db83Smrg# define DIR_SEPARATOR '/' 3205c3c9db83Smrg# define PATH_SEPARATOR ':' 3206c3c9db83Smrg#endif 3207692f60a7Smrg 3208c3c9db83Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 3209c3c9db83Smrg defined (__OS2__) 3210c3c9db83Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 3211c3c9db83Smrg# define FOPEN_WB "wb" 3212c3c9db83Smrg# ifndef DIR_SEPARATOR_2 3213c3c9db83Smrg# define DIR_SEPARATOR_2 '\\' 3214c3c9db83Smrg# endif 3215c3c9db83Smrg# ifndef PATH_SEPARATOR_2 3216c3c9db83Smrg# define PATH_SEPARATOR_2 ';' 3217c3c9db83Smrg# endif 3218c3c9db83Smrg#endif 3219692f60a7Smrg 3220c3c9db83Smrg#ifndef DIR_SEPARATOR_2 3221c3c9db83Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 3222c3c9db83Smrg#else /* DIR_SEPARATOR_2 */ 3223c3c9db83Smrg# define IS_DIR_SEPARATOR(ch) \ 3224c3c9db83Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 3225c3c9db83Smrg#endif /* DIR_SEPARATOR_2 */ 3226692f60a7Smrg 3227c3c9db83Smrg#ifndef PATH_SEPARATOR_2 3228c3c9db83Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 3229c3c9db83Smrg#else /* PATH_SEPARATOR_2 */ 3230c3c9db83Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 3231c3c9db83Smrg#endif /* PATH_SEPARATOR_2 */ 3232692f60a7Smrg 3233c3c9db83Smrg#ifdef __CYGWIN__ 3234c3c9db83Smrg# define FOPEN_WB "wb" 3235c3c9db83Smrg#endif 3236692f60a7Smrg 3237c3c9db83Smrg#ifndef FOPEN_WB 3238c3c9db83Smrg# define FOPEN_WB "w" 3239c3c9db83Smrg#endif 3240c3c9db83Smrg#ifndef _O_BINARY 3241c3c9db83Smrg# define _O_BINARY 0 3242c3c9db83Smrg#endif 3243692f60a7Smrg 3244c3c9db83Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 3245c3c9db83Smrg#define XFREE(stale) do { \ 3246c3c9db83Smrg if (stale) { free ((void *) stale); stale = 0; } \ 3247c3c9db83Smrg} while (0) 3248692f60a7Smrg 3249c3c9db83Smrg#undef LTWRAPPER_DEBUGPRINTF 3250c3c9db83Smrg#if defined DEBUGWRAPPER 3251c3c9db83Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args 3252c3c9db83Smrgstatic void 3253c3c9db83Smrgltwrapper_debugprintf (const char *fmt, ...) 3254c3c9db83Smrg{ 3255c3c9db83Smrg va_list args; 3256c3c9db83Smrg va_start (args, fmt); 3257c3c9db83Smrg (void) vfprintf (stderr, fmt, args); 3258c3c9db83Smrg va_end (args); 3259c3c9db83Smrg} 3260c3c9db83Smrg#else 3261c3c9db83Smrg# define LTWRAPPER_DEBUGPRINTF(args) 3262c3c9db83Smrg#endif 3263692f60a7Smrg 3264c3c9db83Smrgconst char *program_name = NULL; 3265692f60a7Smrg 3266c3c9db83Smrgvoid *xmalloc (size_t num); 3267c3c9db83Smrgchar *xstrdup (const char *string); 3268c3c9db83Smrgconst char *base_name (const char *name); 3269c3c9db83Smrgchar *find_executable (const char *wrapper); 3270c3c9db83Smrgchar *chase_symlinks (const char *pathspec); 3271c3c9db83Smrgint make_executable (const char *path); 3272c3c9db83Smrgint check_executable (const char *path); 3273c3c9db83Smrgchar *strendzap (char *str, const char *pat); 3274c3c9db83Smrgvoid lt_fatal (const char *message, ...); 3275c3c9db83Smrgvoid lt_setenv (const char *name, const char *value); 3276c3c9db83Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 3277c3c9db83Smrgvoid lt_opt_process_env_set (const char *arg); 3278c3c9db83Smrgvoid lt_opt_process_env_prepend (const char *arg); 3279c3c9db83Smrgvoid lt_opt_process_env_append (const char *arg); 3280c3c9db83Smrgint lt_split_name_value (const char *arg, char** name, char** value); 3281c3c9db83Smrgvoid lt_update_exe_path (const char *name, const char *value); 3282c3c9db83Smrgvoid lt_update_lib_path (const char *name, const char *value); 3283c3c9db83Smrg 3284c3c9db83Smrgstatic const char *script_text_part1 = 3285c3c9db83SmrgEOF 3286692f60a7Smrg 3287c3c9db83Smrg func_emit_wrapper_part1 yes | 3288c3c9db83Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 3289c3c9db83Smrg -e 's/^/ "/' -e 's/$/\\n"/' 3290c3c9db83Smrg echo ";" 3291c3c9db83Smrg cat <<EOF 3292692f60a7Smrg 3293c3c9db83Smrgstatic const char *script_text_part2 = 3294c3c9db83SmrgEOF 3295c3c9db83Smrg func_emit_wrapper_part2 yes | 3296c3c9db83Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 3297c3c9db83Smrg -e 's/^/ "/' -e 's/$/\\n"/' 3298c3c9db83Smrg echo ";" 3299c3c9db83Smrg 3300c3c9db83Smrg cat <<EOF 3301c3c9db83Smrgconst char * MAGIC_EXE = "$magic_exe"; 3302c3c9db83Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 3303c3c9db83SmrgEOF 3304692f60a7Smrg 3305c3c9db83Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3306c3c9db83Smrg func_to_host_pathlist "$temp_rpath" 3307c3c9db83Smrg cat <<EOF 3308c3c9db83Smrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 3309c3c9db83SmrgEOF 3310c3c9db83Smrg else 3311c3c9db83Smrg cat <<"EOF" 3312c3c9db83Smrgconst char * LIB_PATH_VALUE = ""; 3313c3c9db83SmrgEOF 33142e71ea71Smrg fi 3315692f60a7Smrg 3316c3c9db83Smrg if test -n "$dllsearchpath"; then 3317c3c9db83Smrg func_to_host_pathlist "$dllsearchpath:" 3318c3c9db83Smrg cat <<EOF 3319c3c9db83Smrgconst char * EXE_PATH_VARNAME = "PATH"; 3320c3c9db83Smrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 33212e71ea71SmrgEOF 33222e71ea71Smrg else 3323c3c9db83Smrg cat <<"EOF" 3324c3c9db83Smrgconst char * EXE_PATH_VARNAME = ""; 3325c3c9db83Smrgconst char * EXE_PATH_VALUE = ""; 3326c3c9db83SmrgEOF 33272e71ea71Smrg fi 3328c3c9db83Smrg 3329c3c9db83Smrg if test "$fast_install" = yes; then 3330c3c9db83Smrg cat <<EOF 3331c3c9db83Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 3332c3c9db83SmrgEOF 33332e71ea71Smrg else 3334c3c9db83Smrg cat <<EOF 3335c3c9db83Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 3336c3c9db83SmrgEOF 33372e71ea71Smrg fi 3338692f60a7Smrg 3339692f60a7Smrg 3340c3c9db83Smrg cat <<"EOF" 3341692f60a7Smrg 3342c3c9db83Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 3343c3c9db83Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH 5 3344692f60a7Smrg 3345c3c9db83Smrgstatic const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH; 3346c3c9db83Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 3347692f60a7Smrg 3348c3c9db83Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 3349692f60a7Smrg 3350c3c9db83Smrgstatic const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7; 3351c3c9db83Smrgstatic const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set"; 3352c3c9db83Smrg /* argument is putenv-style "foo=bar", value of foo is set to bar */ 3353692f60a7Smrg 3354c3c9db83Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11; 3355c3c9db83Smrgstatic const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend"; 3356c3c9db83Smrg /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */ 3357692f60a7Smrg 3358c3c9db83Smrgstatic const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10; 3359c3c9db83Smrgstatic const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append"; 3360c3c9db83Smrg /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */ 3361692f60a7Smrg 3362c3c9db83Smrgint 3363c3c9db83Smrgmain (int argc, char *argv[]) 3364c3c9db83Smrg{ 3365c3c9db83Smrg char **newargz; 3366c3c9db83Smrg int newargc; 3367c3c9db83Smrg char *tmp_pathspec; 3368c3c9db83Smrg char *actual_cwrapper_path; 3369c3c9db83Smrg char *actual_cwrapper_name; 3370c3c9db83Smrg char *target_name; 3371c3c9db83Smrg char *lt_argv_zero; 3372c3c9db83Smrg intptr_t rval = 127; 3373692f60a7Smrg 3374c3c9db83Smrg int i; 3375692f60a7Smrg 3376c3c9db83Smrg program_name = (char *) xstrdup (base_name (argv[0])); 3377c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0])); 3378c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name)); 3379692f60a7Smrg 3380c3c9db83Smrg /* very simple arg parsing; don't want to rely on getopt */ 3381c3c9db83Smrg for (i = 1; i < argc; i++) 3382c3c9db83Smrg { 3383c3c9db83Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 3384c3c9db83Smrg { 3385c3c9db83SmrgEOF 3386c3c9db83Smrg case "$host" in 3387c3c9db83Smrg *mingw* | *cygwin* ) 3388c3c9db83Smrg # make stdout use "unix" line endings 3389c3c9db83Smrg echo " setmode(1,_O_BINARY);" 3390c3c9db83Smrg ;; 3391c3c9db83Smrg esac 3392692f60a7Smrg 3393c3c9db83Smrg cat <<"EOF" 3394c3c9db83Smrg printf ("%s", script_text_part1); 3395c3c9db83Smrg printf ("%s", script_text_part2); 3396c3c9db83Smrg return 0; 3397c3c9db83Smrg } 3398c3c9db83Smrg } 3399692f60a7Smrg 3400c3c9db83Smrg newargz = XMALLOC (char *, argc + 1); 3401c3c9db83Smrg tmp_pathspec = find_executable (argv[0]); 3402c3c9db83Smrg if (tmp_pathspec == NULL) 3403c3c9db83Smrg lt_fatal ("Couldn't find %s", argv[0]); 3404c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", 3405c3c9db83Smrg tmp_pathspec)); 3406c3c9db83Smrg 3407c3c9db83Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 3408c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", 3409c3c9db83Smrg actual_cwrapper_path)); 3410c3c9db83Smrg XFREE (tmp_pathspec); 3411c3c9db83Smrg 3412c3c9db83Smrg actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); 3413c3c9db83Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 3414c3c9db83Smrg 3415c3c9db83Smrg /* wrapper name transforms */ 3416c3c9db83Smrg strendzap (actual_cwrapper_name, ".exe"); 3417c3c9db83Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 3418c3c9db83Smrg XFREE (actual_cwrapper_name); 3419c3c9db83Smrg actual_cwrapper_name = tmp_pathspec; 3420c3c9db83Smrg tmp_pathspec = 0; 3421c3c9db83Smrg 3422c3c9db83Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 3423c3c9db83Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 3424c3c9db83Smrg strendzap (target_name, ".exe"); 3425c3c9db83Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 3426c3c9db83Smrg XFREE (target_name); 3427c3c9db83Smrg target_name = tmp_pathspec; 3428c3c9db83Smrg tmp_pathspec = 0; 3429c3c9db83Smrg 3430c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", 3431c3c9db83Smrg target_name)); 3432c3c9db83SmrgEOF 3433692f60a7Smrg 3434c3c9db83Smrg cat <<EOF 3435c3c9db83Smrg newargz[0] = 3436c3c9db83Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 3437c3c9db83Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 3438c3c9db83Smrg strcpy (newargz[0], actual_cwrapper_path); 3439c3c9db83Smrg strcat (newargz[0], "$objdir"); 3440c3c9db83Smrg strcat (newargz[0], "/"); 3441c3c9db83SmrgEOF 3442692f60a7Smrg 3443c3c9db83Smrg cat <<"EOF" 3444c3c9db83Smrg /* stop here, and copy so we don't have to do this twice */ 3445c3c9db83Smrg tmp_pathspec = xstrdup (newargz[0]); 3446692f60a7Smrg 3447c3c9db83Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 3448c3c9db83Smrg strcat (newargz[0], actual_cwrapper_name); 3449692f60a7Smrg 3450c3c9db83Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 3451c3c9db83Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 3452c3c9db83Smrg XFREE (tmp_pathspec); 3453c3c9db83Smrg tmp_pathspec = NULL; 3454c3c9db83SmrgEOF 3455692f60a7Smrg 3456c3c9db83Smrg case $host_os in 3457c3c9db83Smrg mingw*) 3458c3c9db83Smrg cat <<"EOF" 3459c3c9db83Smrg { 3460c3c9db83Smrg char* p; 3461c3c9db83Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 3462c3c9db83Smrg { 3463c3c9db83Smrg *p = '/'; 3464c3c9db83Smrg } 3465c3c9db83Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 3466c3c9db83Smrg { 3467c3c9db83Smrg *p = '/'; 3468c3c9db83Smrg } 3469c3c9db83Smrg } 3470c3c9db83SmrgEOF 3471c3c9db83Smrg ;; 3472c3c9db83Smrg esac 3473692f60a7Smrg 3474c3c9db83Smrg cat <<"EOF" 3475c3c9db83Smrg XFREE (target_name); 3476c3c9db83Smrg XFREE (actual_cwrapper_path); 3477c3c9db83Smrg XFREE (actual_cwrapper_name); 3478692f60a7Smrg 3479c3c9db83Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 3480c3c9db83Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 3481c3c9db83Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 3482c3c9db83Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 3483692f60a7Smrg 3484c3c9db83Smrg newargc=0; 3485c3c9db83Smrg for (i = 1; i < argc; i++) 3486c3c9db83Smrg { 3487c3c9db83Smrg if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) 3488c3c9db83Smrg { 3489c3c9db83Smrg if (argv[i][env_set_opt_len] == '=') 3490c3c9db83Smrg { 3491c3c9db83Smrg const char *p = argv[i] + env_set_opt_len + 1; 3492c3c9db83Smrg lt_opt_process_env_set (p); 3493c3c9db83Smrg } 3494c3c9db83Smrg else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) 3495c3c9db83Smrg { 3496c3c9db83Smrg lt_opt_process_env_set (argv[++i]); /* don't copy */ 3497c3c9db83Smrg } 3498c3c9db83Smrg else 3499c3c9db83Smrg lt_fatal ("%s missing required argument", env_set_opt); 3500c3c9db83Smrg continue; 3501c3c9db83Smrg } 3502c3c9db83Smrg if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) 3503c3c9db83Smrg { 3504c3c9db83Smrg if (argv[i][env_prepend_opt_len] == '=') 3505c3c9db83Smrg { 3506c3c9db83Smrg const char *p = argv[i] + env_prepend_opt_len + 1; 3507c3c9db83Smrg lt_opt_process_env_prepend (p); 3508c3c9db83Smrg } 3509c3c9db83Smrg else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) 3510c3c9db83Smrg { 3511c3c9db83Smrg lt_opt_process_env_prepend (argv[++i]); /* don't copy */ 3512c3c9db83Smrg } 3513c3c9db83Smrg else 3514c3c9db83Smrg lt_fatal ("%s missing required argument", env_prepend_opt); 3515c3c9db83Smrg continue; 3516c3c9db83Smrg } 3517c3c9db83Smrg if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) 3518c3c9db83Smrg { 3519c3c9db83Smrg if (argv[i][env_append_opt_len] == '=') 3520c3c9db83Smrg { 3521c3c9db83Smrg const char *p = argv[i] + env_append_opt_len + 1; 3522c3c9db83Smrg lt_opt_process_env_append (p); 3523c3c9db83Smrg } 3524c3c9db83Smrg else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) 3525c3c9db83Smrg { 3526c3c9db83Smrg lt_opt_process_env_append (argv[++i]); /* don't copy */ 3527c3c9db83Smrg } 3528c3c9db83Smrg else 3529c3c9db83Smrg lt_fatal ("%s missing required argument", env_append_opt); 3530c3c9db83Smrg continue; 3531c3c9db83Smrg } 3532c3c9db83Smrg if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) 3533c3c9db83Smrg { 3534c3c9db83Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 3535c3c9db83Smrg namespace, but it is not one of the ones we know about and 3536c3c9db83Smrg have already dealt with, above (inluding dump-script), then 3537c3c9db83Smrg report an error. Otherwise, targets might begin to believe 3538c3c9db83Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 3539c3c9db83Smrg namespace. The first time any user complains about this, we'll 3540c3c9db83Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 3541c3c9db83Smrg or a configure.ac-settable value. 3542c3c9db83Smrg */ 3543c3c9db83Smrg lt_fatal ("Unrecognized option in %s namespace: '%s'", 3544c3c9db83Smrg ltwrapper_option_prefix, argv[i]); 3545c3c9db83Smrg } 3546c3c9db83Smrg /* otherwise ... */ 3547c3c9db83Smrg newargz[++newargc] = xstrdup (argv[i]); 3548c3c9db83Smrg } 3549c3c9db83Smrg newargz[++newargc] = NULL; 3550692f60a7Smrg 3551c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>"))); 3552c3c9db83Smrg for (i = 0; i < newargc; i++) 3553c3c9db83Smrg { 3554c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>"))); 3555c3c9db83Smrg } 3556692f60a7Smrg 3557c3c9db83SmrgEOF 3558692f60a7Smrg 3559c3c9db83Smrg case $host_os in 3560c3c9db83Smrg mingw*) 3561c3c9db83Smrg cat <<"EOF" 3562c3c9db83Smrg /* execv doesn't actually work on mingw as expected on unix */ 3563c3c9db83Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 3564c3c9db83Smrg if (rval == -1) 3565c3c9db83Smrg { 3566c3c9db83Smrg /* failed to start process */ 3567c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); 3568c3c9db83Smrg return 127; 3569c3c9db83Smrg } 3570c3c9db83Smrg return rval; 3571c3c9db83SmrgEOF 3572c3c9db83Smrg ;; 3573c3c9db83Smrg *) 3574c3c9db83Smrg cat <<"EOF" 3575c3c9db83Smrg execv (lt_argv_zero, newargz); 3576c3c9db83Smrg return rval; /* =127, but avoids unused variable warning */ 3577c3c9db83SmrgEOF 3578c3c9db83Smrg ;; 3579c3c9db83Smrg esac 3580692f60a7Smrg 3581c3c9db83Smrg cat <<"EOF" 3582c3c9db83Smrg} 3583692f60a7Smrg 3584c3c9db83Smrgvoid * 3585c3c9db83Smrgxmalloc (size_t num) 3586c3c9db83Smrg{ 3587c3c9db83Smrg void *p = (void *) malloc (num); 3588c3c9db83Smrg if (!p) 3589c3c9db83Smrg lt_fatal ("Memory exhausted"); 3590692f60a7Smrg 3591c3c9db83Smrg return p; 3592c3c9db83Smrg} 3593692f60a7Smrg 3594c3c9db83Smrgchar * 3595c3c9db83Smrgxstrdup (const char *string) 3596c3c9db83Smrg{ 3597c3c9db83Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 3598c3c9db83Smrg string) : NULL; 3599c3c9db83Smrg} 3600692f60a7Smrg 3601c3c9db83Smrgconst char * 3602c3c9db83Smrgbase_name (const char *name) 3603c3c9db83Smrg{ 3604c3c9db83Smrg const char *base; 36052e71ea71Smrg 3606c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3607c3c9db83Smrg /* Skip over the disk name in MSDOS pathnames. */ 3608c3c9db83Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 3609c3c9db83Smrg name += 2; 3610c3c9db83Smrg#endif 36112e71ea71Smrg 3612c3c9db83Smrg for (base = name; *name; name++) 3613c3c9db83Smrg if (IS_DIR_SEPARATOR (*name)) 3614c3c9db83Smrg base = name + 1; 3615c3c9db83Smrg return base; 3616c3c9db83Smrg} 36172e71ea71Smrg 3618c3c9db83Smrgint 3619c3c9db83Smrgcheck_executable (const char *path) 3620c3c9db83Smrg{ 3621c3c9db83Smrg struct stat st; 36222e71ea71Smrg 3623c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", 3624c3c9db83Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 3625c3c9db83Smrg if ((!path) || (!*path)) 3626c3c9db83Smrg return 0; 36272e71ea71Smrg 3628c3c9db83Smrg if ((stat (path, &st) >= 0) 3629c3c9db83Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 3630c3c9db83Smrg return 1; 3631c3c9db83Smrg else 3632c3c9db83Smrg return 0; 3633c3c9db83Smrg} 3634692f60a7Smrg 3635c3c9db83Smrgint 3636c3c9db83Smrgmake_executable (const char *path) 3637c3c9db83Smrg{ 3638c3c9db83Smrg int rval = 0; 3639c3c9db83Smrg struct stat st; 3640692f60a7Smrg 3641c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", 3642c3c9db83Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 3643c3c9db83Smrg if ((!path) || (!*path)) 3644c3c9db83Smrg return 0; 364585ee4c00Smrg 3646c3c9db83Smrg if (stat (path, &st) >= 0) 3647c3c9db83Smrg { 3648c3c9db83Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 3649c3c9db83Smrg } 3650c3c9db83Smrg return rval; 3651c3c9db83Smrg} 36522e71ea71Smrg 3653c3c9db83Smrg/* Searches for the full path of the wrapper. Returns 3654c3c9db83Smrg newly allocated full path name if found, NULL otherwise 3655c3c9db83Smrg Does not chase symlinks, even on platforms that support them. 3656c3c9db83Smrg*/ 3657c3c9db83Smrgchar * 3658c3c9db83Smrgfind_executable (const char *wrapper) 3659c3c9db83Smrg{ 3660c3c9db83Smrg int has_slash = 0; 3661c3c9db83Smrg const char *p; 3662c3c9db83Smrg const char *p_next; 3663c3c9db83Smrg /* static buffer for getcwd */ 3664c3c9db83Smrg char tmp[LT_PATHMAX + 1]; 3665c3c9db83Smrg int tmp_len; 3666c3c9db83Smrg char *concat_name; 36672e71ea71Smrg 3668c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", 3669c3c9db83Smrg wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 36702e71ea71Smrg 3671c3c9db83Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 3672c3c9db83Smrg return NULL; 36732e71ea71Smrg 3674c3c9db83Smrg /* Absolute path? */ 3675c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3676c3c9db83Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 3677c3c9db83Smrg { 3678c3c9db83Smrg concat_name = xstrdup (wrapper); 3679c3c9db83Smrg if (check_executable (concat_name)) 3680c3c9db83Smrg return concat_name; 3681c3c9db83Smrg XFREE (concat_name); 3682c3c9db83Smrg } 3683c3c9db83Smrg else 3684c3c9db83Smrg { 3685c3c9db83Smrg#endif 3686c3c9db83Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 3687c3c9db83Smrg { 3688c3c9db83Smrg concat_name = xstrdup (wrapper); 3689c3c9db83Smrg if (check_executable (concat_name)) 3690c3c9db83Smrg return concat_name; 3691c3c9db83Smrg XFREE (concat_name); 3692c3c9db83Smrg } 3693c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3694c3c9db83Smrg } 3695c3c9db83Smrg#endif 3696692f60a7Smrg 3697c3c9db83Smrg for (p = wrapper; *p; p++) 3698c3c9db83Smrg if (*p == '/') 3699c3c9db83Smrg { 3700c3c9db83Smrg has_slash = 1; 3701c3c9db83Smrg break; 3702c3c9db83Smrg } 3703c3c9db83Smrg if (!has_slash) 3704c3c9db83Smrg { 3705c3c9db83Smrg /* no slashes; search PATH */ 3706c3c9db83Smrg const char *path = getenv ("PATH"); 3707c3c9db83Smrg if (path != NULL) 3708c3c9db83Smrg { 3709c3c9db83Smrg for (p = path; *p; p = p_next) 3710c3c9db83Smrg { 3711c3c9db83Smrg const char *q; 3712c3c9db83Smrg size_t p_len; 3713c3c9db83Smrg for (q = p; *q; q++) 3714c3c9db83Smrg if (IS_PATH_SEPARATOR (*q)) 3715c3c9db83Smrg break; 3716c3c9db83Smrg p_len = q - p; 3717c3c9db83Smrg p_next = (*q == '\0' ? q : q + 1); 3718c3c9db83Smrg if (p_len == 0) 3719c3c9db83Smrg { 3720c3c9db83Smrg /* empty path: current directory */ 3721c3c9db83Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3722c3c9db83Smrg lt_fatal ("getcwd failed"); 3723c3c9db83Smrg tmp_len = strlen (tmp); 3724c3c9db83Smrg concat_name = 3725c3c9db83Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3726c3c9db83Smrg memcpy (concat_name, tmp, tmp_len); 3727c3c9db83Smrg concat_name[tmp_len] = '/'; 3728c3c9db83Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3729c3c9db83Smrg } 3730c3c9db83Smrg else 3731c3c9db83Smrg { 3732c3c9db83Smrg concat_name = 3733c3c9db83Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 3734c3c9db83Smrg memcpy (concat_name, p, p_len); 3735c3c9db83Smrg concat_name[p_len] = '/'; 3736c3c9db83Smrg strcpy (concat_name + p_len + 1, wrapper); 3737c3c9db83Smrg } 3738c3c9db83Smrg if (check_executable (concat_name)) 3739c3c9db83Smrg return concat_name; 3740c3c9db83Smrg XFREE (concat_name); 3741c3c9db83Smrg } 3742c3c9db83Smrg } 3743c3c9db83Smrg /* not found in PATH; assume curdir */ 3744c3c9db83Smrg } 3745c3c9db83Smrg /* Relative path | not found in path: prepend cwd */ 3746c3c9db83Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3747c3c9db83Smrg lt_fatal ("getcwd failed"); 3748c3c9db83Smrg tmp_len = strlen (tmp); 3749c3c9db83Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3750c3c9db83Smrg memcpy (concat_name, tmp, tmp_len); 3751c3c9db83Smrg concat_name[tmp_len] = '/'; 3752c3c9db83Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3753692f60a7Smrg 3754c3c9db83Smrg if (check_executable (concat_name)) 3755c3c9db83Smrg return concat_name; 3756c3c9db83Smrg XFREE (concat_name); 3757c3c9db83Smrg return NULL; 3758c3c9db83Smrg} 3759692f60a7Smrg 3760c3c9db83Smrgchar * 3761c3c9db83Smrgchase_symlinks (const char *pathspec) 3762c3c9db83Smrg{ 3763c3c9db83Smrg#ifndef S_ISLNK 3764c3c9db83Smrg return xstrdup (pathspec); 3765c3c9db83Smrg#else 3766c3c9db83Smrg char buf[LT_PATHMAX]; 3767c3c9db83Smrg struct stat s; 3768c3c9db83Smrg char *tmp_pathspec = xstrdup (pathspec); 3769c3c9db83Smrg char *p; 3770c3c9db83Smrg int has_symlinks = 0; 3771c3c9db83Smrg while (strlen (tmp_pathspec) && !has_symlinks) 3772c3c9db83Smrg { 3773c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", 3774c3c9db83Smrg tmp_pathspec)); 3775c3c9db83Smrg if (lstat (tmp_pathspec, &s) == 0) 3776c3c9db83Smrg { 3777c3c9db83Smrg if (S_ISLNK (s.st_mode) != 0) 3778c3c9db83Smrg { 3779c3c9db83Smrg has_symlinks = 1; 3780c3c9db83Smrg break; 3781c3c9db83Smrg } 3782692f60a7Smrg 3783c3c9db83Smrg /* search backwards for last DIR_SEPARATOR */ 3784c3c9db83Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 3785c3c9db83Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 3786c3c9db83Smrg p--; 3787c3c9db83Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 3788c3c9db83Smrg { 3789c3c9db83Smrg /* no more DIR_SEPARATORS left */ 3790c3c9db83Smrg break; 3791c3c9db83Smrg } 3792c3c9db83Smrg *p = '\0'; 3793c3c9db83Smrg } 3794c3c9db83Smrg else 3795c3c9db83Smrg { 3796c3c9db83Smrg char *errstr = strerror (errno); 3797c3c9db83Smrg lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); 3798c3c9db83Smrg } 3799c3c9db83Smrg } 3800c3c9db83Smrg XFREE (tmp_pathspec); 3801692f60a7Smrg 3802c3c9db83Smrg if (!has_symlinks) 3803c3c9db83Smrg { 3804c3c9db83Smrg return xstrdup (pathspec); 3805c3c9db83Smrg } 3806692f60a7Smrg 3807c3c9db83Smrg tmp_pathspec = realpath (pathspec, buf); 3808c3c9db83Smrg if (tmp_pathspec == 0) 3809c3c9db83Smrg { 3810c3c9db83Smrg lt_fatal ("Could not follow symlinks for %s", pathspec); 3811c3c9db83Smrg } 3812c3c9db83Smrg return xstrdup (tmp_pathspec); 3813c3c9db83Smrg#endif 3814c3c9db83Smrg} 3815692f60a7Smrg 3816c3c9db83Smrgchar * 3817c3c9db83Smrgstrendzap (char *str, const char *pat) 3818c3c9db83Smrg{ 3819c3c9db83Smrg size_t len, patlen; 3820692f60a7Smrg 3821c3c9db83Smrg assert (str != NULL); 3822c3c9db83Smrg assert (pat != NULL); 3823692f60a7Smrg 3824c3c9db83Smrg len = strlen (str); 3825c3c9db83Smrg patlen = strlen (pat); 3826692f60a7Smrg 3827c3c9db83Smrg if (patlen <= len) 3828c3c9db83Smrg { 3829c3c9db83Smrg str += len - patlen; 3830c3c9db83Smrg if (strcmp (str, pat) == 0) 3831c3c9db83Smrg *str = '\0'; 3832c3c9db83Smrg } 3833c3c9db83Smrg return str; 3834c3c9db83Smrg} 3835692f60a7Smrg 3836c3c9db83Smrgstatic void 3837c3c9db83Smrglt_error_core (int exit_status, const char *mode, 3838c3c9db83Smrg const char *message, va_list ap) 3839c3c9db83Smrg{ 3840c3c9db83Smrg fprintf (stderr, "%s: %s: ", program_name, mode); 3841c3c9db83Smrg vfprintf (stderr, message, ap); 3842c3c9db83Smrg fprintf (stderr, ".\n"); 3843692f60a7Smrg 3844c3c9db83Smrg if (exit_status >= 0) 3845c3c9db83Smrg exit (exit_status); 3846c3c9db83Smrg} 3847692f60a7Smrg 3848c3c9db83Smrgvoid 3849c3c9db83Smrglt_fatal (const char *message, ...) 3850c3c9db83Smrg{ 3851c3c9db83Smrg va_list ap; 3852c3c9db83Smrg va_start (ap, message); 3853c3c9db83Smrg lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 3854c3c9db83Smrg va_end (ap); 3855c3c9db83Smrg} 3856692f60a7Smrg 3857c3c9db83Smrgvoid 3858c3c9db83Smrglt_setenv (const char *name, const char *value) 3859c3c9db83Smrg{ 3860c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", 3861c3c9db83Smrg (name ? name : "<NULL>"), 3862c3c9db83Smrg (value ? value : "<NULL>"))); 3863c3c9db83Smrg { 3864c3c9db83Smrg#ifdef HAVE_SETENV 3865c3c9db83Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 3866c3c9db83Smrg char *str = xstrdup (value); 3867c3c9db83Smrg setenv (name, str, 1); 3868c3c9db83Smrg#else 3869c3c9db83Smrg int len = strlen (name) + 1 + strlen (value) + 1; 3870c3c9db83Smrg char *str = XMALLOC (char, len); 3871c3c9db83Smrg sprintf (str, "%s=%s", name, value); 3872c3c9db83Smrg if (putenv (str) != EXIT_SUCCESS) 3873c3c9db83Smrg { 3874c3c9db83Smrg XFREE (str); 3875c3c9db83Smrg } 3876c3c9db83Smrg#endif 3877c3c9db83Smrg } 3878c3c9db83Smrg} 3879692f60a7Smrg 3880c3c9db83Smrgchar * 3881c3c9db83Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 3882c3c9db83Smrg{ 3883c3c9db83Smrg char *new_value; 3884c3c9db83Smrg if (orig_value && *orig_value) 3885c3c9db83Smrg { 3886c3c9db83Smrg int orig_value_len = strlen (orig_value); 3887c3c9db83Smrg int add_len = strlen (add); 3888c3c9db83Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 3889c3c9db83Smrg if (to_end) 3890c3c9db83Smrg { 3891c3c9db83Smrg strcpy (new_value, orig_value); 3892c3c9db83Smrg strcpy (new_value + orig_value_len, add); 3893c3c9db83Smrg } 3894c3c9db83Smrg else 3895c3c9db83Smrg { 3896c3c9db83Smrg strcpy (new_value, add); 3897c3c9db83Smrg strcpy (new_value + add_len, orig_value); 3898c3c9db83Smrg } 3899c3c9db83Smrg } 3900c3c9db83Smrg else 3901c3c9db83Smrg { 3902c3c9db83Smrg new_value = xstrdup (add); 3903c3c9db83Smrg } 3904c3c9db83Smrg return new_value; 3905c3c9db83Smrg} 3906692f60a7Smrg 3907c3c9db83Smrgint 3908c3c9db83Smrglt_split_name_value (const char *arg, char** name, char** value) 3909c3c9db83Smrg{ 3910c3c9db83Smrg const char *p; 3911c3c9db83Smrg int len; 3912c3c9db83Smrg if (!arg || !*arg) 3913c3c9db83Smrg return 1; 3914692f60a7Smrg 3915c3c9db83Smrg p = strchr (arg, (int)'='); 3916692f60a7Smrg 3917c3c9db83Smrg if (!p) 3918c3c9db83Smrg return 1; 3919692f60a7Smrg 3920c3c9db83Smrg *value = xstrdup (++p); 3921692f60a7Smrg 3922c3c9db83Smrg len = strlen (arg) - strlen (*value); 3923c3c9db83Smrg *name = XMALLOC (char, len); 3924c3c9db83Smrg strncpy (*name, arg, len-1); 3925c3c9db83Smrg (*name)[len - 1] = '\0'; 3926692f60a7Smrg 3927c3c9db83Smrg return 0; 3928c3c9db83Smrg} 3929692f60a7Smrg 3930c3c9db83Smrgvoid 3931c3c9db83Smrglt_opt_process_env_set (const char *arg) 3932c3c9db83Smrg{ 3933c3c9db83Smrg char *name = NULL; 3934c3c9db83Smrg char *value = NULL; 3935692f60a7Smrg 3936c3c9db83Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3937c3c9db83Smrg { 3938c3c9db83Smrg XFREE (name); 3939c3c9db83Smrg XFREE (value); 3940c3c9db83Smrg lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); 3941c3c9db83Smrg } 3942692f60a7Smrg 3943c3c9db83Smrg lt_setenv (name, value); 3944c3c9db83Smrg XFREE (name); 3945c3c9db83Smrg XFREE (value); 3946c3c9db83Smrg} 3947692f60a7Smrg 3948c3c9db83Smrgvoid 3949c3c9db83Smrglt_opt_process_env_prepend (const char *arg) 3950c3c9db83Smrg{ 3951c3c9db83Smrg char *name = NULL; 3952c3c9db83Smrg char *value = NULL; 3953c3c9db83Smrg char *new_value = NULL; 3954692f60a7Smrg 3955c3c9db83Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3956c3c9db83Smrg { 3957c3c9db83Smrg XFREE (name); 3958c3c9db83Smrg XFREE (value); 3959c3c9db83Smrg lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); 3960c3c9db83Smrg } 3961692f60a7Smrg 3962c3c9db83Smrg new_value = lt_extend_str (getenv (name), value, 0); 3963c3c9db83Smrg lt_setenv (name, new_value); 3964c3c9db83Smrg XFREE (new_value); 3965c3c9db83Smrg XFREE (name); 3966c3c9db83Smrg XFREE (value); 3967c3c9db83Smrg} 3968692f60a7Smrg 3969c3c9db83Smrgvoid 3970c3c9db83Smrglt_opt_process_env_append (const char *arg) 3971c3c9db83Smrg{ 3972c3c9db83Smrg char *name = NULL; 3973c3c9db83Smrg char *value = NULL; 3974c3c9db83Smrg char *new_value = NULL; 3975692f60a7Smrg 3976c3c9db83Smrg if (lt_split_name_value (arg, &name, &value) != 0) 3977c3c9db83Smrg { 3978c3c9db83Smrg XFREE (name); 3979c3c9db83Smrg XFREE (value); 3980c3c9db83Smrg lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); 3981c3c9db83Smrg } 3982692f60a7Smrg 3983c3c9db83Smrg new_value = lt_extend_str (getenv (name), value, 1); 3984c3c9db83Smrg lt_setenv (name, new_value); 3985c3c9db83Smrg XFREE (new_value); 3986c3c9db83Smrg XFREE (name); 3987c3c9db83Smrg XFREE (value); 3988c3c9db83Smrg} 3989692f60a7Smrg 3990c3c9db83Smrgvoid 3991c3c9db83Smrglt_update_exe_path (const char *name, const char *value) 3992c3c9db83Smrg{ 3993c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 3994c3c9db83Smrg (name ? name : "<NULL>"), 3995c3c9db83Smrg (value ? value : "<NULL>"))); 3996692f60a7Smrg 3997c3c9db83Smrg if (name && *name && value && *value) 3998c3c9db83Smrg { 3999c3c9db83Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4000c3c9db83Smrg /* some systems can't cope with a ':'-terminated path #' */ 4001c3c9db83Smrg int len = strlen (new_value); 4002c3c9db83Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4003c3c9db83Smrg { 4004c3c9db83Smrg new_value[len-1] = '\0'; 4005c3c9db83Smrg } 4006c3c9db83Smrg lt_setenv (name, new_value); 4007c3c9db83Smrg XFREE (new_value); 4008c3c9db83Smrg } 4009c3c9db83Smrg} 4010692f60a7Smrg 4011c3c9db83Smrgvoid 4012c3c9db83Smrglt_update_lib_path (const char *name, const char *value) 4013c3c9db83Smrg{ 4014c3c9db83Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4015c3c9db83Smrg (name ? name : "<NULL>"), 4016c3c9db83Smrg (value ? value : "<NULL>"))); 4017692f60a7Smrg 4018c3c9db83Smrg if (name && *name && value && *value) 4019c3c9db83Smrg { 4020c3c9db83Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 4021c3c9db83Smrg lt_setenv (name, new_value); 4022c3c9db83Smrg XFREE (new_value); 4023c3c9db83Smrg } 4024c3c9db83Smrg} 4025692f60a7Smrg 4026692f60a7Smrg 4027c3c9db83SmrgEOF 4028c3c9db83Smrg} 4029c3c9db83Smrg# end: func_emit_cwrapperexe_src 4030692f60a7Smrg 4031c3c9db83Smrg# func_mode_link arg... 4032c3c9db83Smrgfunc_mode_link () 4033c3c9db83Smrg{ 4034c3c9db83Smrg $opt_debug 4035c3c9db83Smrg case $host in 4036c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4037c3c9db83Smrg # It is impossible to link a dll without this setting, and 4038c3c9db83Smrg # we shouldn't force the makefile maintainer to figure out 4039c3c9db83Smrg # which system we are compiling for in order to pass an extra 4040c3c9db83Smrg # flag for every libtool invocation. 4041c3c9db83Smrg # allow_undefined=no 4042692f60a7Smrg 4043c3c9db83Smrg # FIXME: Unfortunately, there are problems with the above when trying 4044c3c9db83Smrg # to make a dll which has undefined symbols, in which case not 4045c3c9db83Smrg # even a static library is built. For now, we need to specify 4046c3c9db83Smrg # -no-undefined on the libtool link line when we can be certain 4047c3c9db83Smrg # that all symbols are satisfied, otherwise we get a static library. 4048c3c9db83Smrg allow_undefined=yes 4049c3c9db83Smrg ;; 4050c3c9db83Smrg *) 4051c3c9db83Smrg allow_undefined=yes 4052c3c9db83Smrg ;; 4053c3c9db83Smrg esac 4054c3c9db83Smrg libtool_args=$nonopt 4055c3c9db83Smrg base_compile="$nonopt $@" 4056c3c9db83Smrg compile_command=$nonopt 4057c3c9db83Smrg finalize_command=$nonopt 4058692f60a7Smrg 4059c3c9db83Smrg compile_rpath= 4060c3c9db83Smrg finalize_rpath= 4061c3c9db83Smrg compile_shlibpath= 4062c3c9db83Smrg finalize_shlibpath= 4063c3c9db83Smrg convenience= 4064c3c9db83Smrg old_convenience= 4065c3c9db83Smrg deplibs= 4066c3c9db83Smrg old_deplibs= 4067c3c9db83Smrg compiler_flags= 4068c3c9db83Smrg linker_flags= 4069c3c9db83Smrg dllsearchpath= 4070c3c9db83Smrg lib_search_path=`pwd` 4071c3c9db83Smrg inst_prefix_dir= 4072c3c9db83Smrg new_inherited_linker_flags= 4073692f60a7Smrg 4074c3c9db83Smrg avoid_version=no 4075c3c9db83Smrg dlfiles= 4076c3c9db83Smrg dlprefiles= 4077c3c9db83Smrg dlself=no 4078c3c9db83Smrg export_dynamic=no 4079c3c9db83Smrg export_symbols= 4080c3c9db83Smrg export_symbols_regex= 4081c3c9db83Smrg generated= 4082c3c9db83Smrg libobjs= 4083c3c9db83Smrg ltlibs= 4084c3c9db83Smrg module=no 4085c3c9db83Smrg no_install=no 4086c3c9db83Smrg objs= 4087c3c9db83Smrg non_pic_objects= 4088c3c9db83Smrg precious_files_regex= 4089c3c9db83Smrg prefer_static_libs=no 4090c3c9db83Smrg preload=no 4091c3c9db83Smrg prev= 4092c3c9db83Smrg prevarg= 4093c3c9db83Smrg release= 4094c3c9db83Smrg rpath= 4095c3c9db83Smrg xrpath= 4096c3c9db83Smrg perm_rpath= 4097c3c9db83Smrg temp_rpath= 4098c3c9db83Smrg thread_safe=no 4099c3c9db83Smrg vinfo= 4100c3c9db83Smrg vinfo_number=no 4101c3c9db83Smrg weak_libs= 4102c3c9db83Smrg single_module="${wl}-single_module" 4103c3c9db83Smrg func_infer_tag $base_compile 4104c3c9db83Smrg 4105c3c9db83Smrg # We need to know -static, to get the right output filenames. 4106c3c9db83Smrg for arg 4107c3c9db83Smrg do 4108c3c9db83Smrg case $arg in 4109c3c9db83Smrg -shared) 4110c3c9db83Smrg test "$build_libtool_libs" != yes && \ 4111c3c9db83Smrg func_fatal_configuration "can not build a shared library" 4112c3c9db83Smrg build_old_libs=no 4113c3c9db83Smrg break 4114c3c9db83Smrg ;; 4115c3c9db83Smrg -all-static | -static | -static-libtool-libs) 4116c3c9db83Smrg case $arg in 4117c3c9db83Smrg -all-static) 4118c3c9db83Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 4119c3c9db83Smrg func_warning "complete static linking is impossible in this configuration" 4120c3c9db83Smrg fi 4121c3c9db83Smrg if test -n "$link_static_flag"; then 4122c3c9db83Smrg dlopen_self=$dlopen_self_static 4123c3c9db83Smrg fi 4124c3c9db83Smrg prefer_static_libs=yes 4125c3c9db83Smrg ;; 4126c3c9db83Smrg -static) 4127c3c9db83Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4128c3c9db83Smrg dlopen_self=$dlopen_self_static 4129c3c9db83Smrg fi 4130c3c9db83Smrg prefer_static_libs=built 4131c3c9db83Smrg ;; 4132c3c9db83Smrg -static-libtool-libs) 4133c3c9db83Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4134c3c9db83Smrg dlopen_self=$dlopen_self_static 41352e71ea71Smrg fi 4136c3c9db83Smrg prefer_static_libs=yes 4137c3c9db83Smrg ;; 4138c3c9db83Smrg esac 4139c3c9db83Smrg build_libtool_libs=no 4140c3c9db83Smrg build_old_libs=yes 4141c3c9db83Smrg break 4142c3c9db83Smrg ;; 4143c3c9db83Smrg esac 4144c3c9db83Smrg done 4145692f60a7Smrg 4146c3c9db83Smrg # See if our shared archives depend on static archives. 4147c3c9db83Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 4148692f60a7Smrg 4149c3c9db83Smrg # Go through the arguments, transforming them on the way. 4150c3c9db83Smrg while test "$#" -gt 0; do 4151c3c9db83Smrg arg="$1" 4152c3c9db83Smrg shift 4153c3c9db83Smrg func_quote_for_eval "$arg" 4154c3c9db83Smrg qarg=$func_quote_for_eval_unquoted_result 4155c3c9db83Smrg func_append libtool_args " $func_quote_for_eval_result" 4156692f60a7Smrg 4157c3c9db83Smrg # If the previous option needs an argument, assign it. 4158c3c9db83Smrg if test -n "$prev"; then 4159c3c9db83Smrg case $prev in 4160c3c9db83Smrg output) 4161c3c9db83Smrg func_append compile_command " @OUTPUT@" 4162c3c9db83Smrg func_append finalize_command " @OUTPUT@" 4163c3c9db83Smrg ;; 4164c3c9db83Smrg esac 4165692f60a7Smrg 4166c3c9db83Smrg case $prev in 4167c3c9db83Smrg dlfiles|dlprefiles) 4168c3c9db83Smrg if test "$preload" = no; then 4169c3c9db83Smrg # Add the symbol object into the linking commands. 4170c3c9db83Smrg func_append compile_command " @SYMFILE@" 4171c3c9db83Smrg func_append finalize_command " @SYMFILE@" 4172c3c9db83Smrg preload=yes 4173c3c9db83Smrg fi 4174c3c9db83Smrg case $arg in 4175c3c9db83Smrg *.la | *.lo) ;; # We handle these cases below. 4176c3c9db83Smrg force) 4177c3c9db83Smrg if test "$dlself" = no; then 4178c3c9db83Smrg dlself=needless 4179c3c9db83Smrg export_dynamic=yes 4180c3c9db83Smrg fi 4181c3c9db83Smrg prev= 4182c3c9db83Smrg continue 4183c3c9db83Smrg ;; 4184c3c9db83Smrg self) 4185c3c9db83Smrg if test "$prev" = dlprefiles; then 4186c3c9db83Smrg dlself=yes 4187c3c9db83Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 4188c3c9db83Smrg dlself=yes 41892e71ea71Smrg else 4190c3c9db83Smrg dlself=needless 4191c3c9db83Smrg export_dynamic=yes 41922e71ea71Smrg fi 4193c3c9db83Smrg prev= 4194c3c9db83Smrg continue 4195c3c9db83Smrg ;; 4196c3c9db83Smrg *) 4197c3c9db83Smrg if test "$prev" = dlfiles; then 4198c3c9db83Smrg dlfiles="$dlfiles $arg" 41992e71ea71Smrg else 4200c3c9db83Smrg dlprefiles="$dlprefiles $arg" 42012e71ea71Smrg fi 4202c3c9db83Smrg prev= 4203c3c9db83Smrg continue 4204c3c9db83Smrg ;; 4205c3c9db83Smrg esac 4206c3c9db83Smrg ;; 4207c3c9db83Smrg expsyms) 4208c3c9db83Smrg export_symbols="$arg" 4209c3c9db83Smrg test -f "$arg" \ 4210c3c9db83Smrg || func_fatal_error "symbol file \`$arg' does not exist" 4211c3c9db83Smrg prev= 4212c3c9db83Smrg continue 4213c3c9db83Smrg ;; 4214c3c9db83Smrg expsyms_regex) 4215c3c9db83Smrg export_symbols_regex="$arg" 4216c3c9db83Smrg prev= 4217c3c9db83Smrg continue 4218c3c9db83Smrg ;; 4219c3c9db83Smrg framework) 42202e71ea71Smrg case $host in 4221c3c9db83Smrg *-*-darwin*) 4222c3c9db83Smrg case "$deplibs " in 4223c3c9db83Smrg *" $qarg.ltframework "*) ;; 4224c3c9db83Smrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 4225c3c9db83Smrg ;; 4226c3c9db83Smrg esac 4227c3c9db83Smrg ;; 42282e71ea71Smrg esac 4229c3c9db83Smrg prev= 4230c3c9db83Smrg continue 42312e71ea71Smrg ;; 4232c3c9db83Smrg inst_prefix) 4233c3c9db83Smrg inst_prefix_dir="$arg" 4234c3c9db83Smrg prev= 4235c3c9db83Smrg continue 42362e71ea71Smrg ;; 4237c3c9db83Smrg objectlist) 4238c3c9db83Smrg if test -f "$arg"; then 4239c3c9db83Smrg save_arg=$arg 4240c3c9db83Smrg moreargs= 4241c3c9db83Smrg for fil in `cat "$save_arg"` 4242c3c9db83Smrg do 4243c3c9db83Smrg# moreargs="$moreargs $fil" 4244c3c9db83Smrg arg=$fil 4245c3c9db83Smrg # A libtool-controlled object. 4246692f60a7Smrg 4247c3c9db83Smrg # Check to see that this really is a libtool object. 4248c3c9db83Smrg if func_lalib_unsafe_p "$arg"; then 4249c3c9db83Smrg pic_object= 4250c3c9db83Smrg non_pic_object= 425185ee4c00Smrg 4252c3c9db83Smrg # Read the .lo file 4253c3c9db83Smrg func_source "$arg" 425485ee4c00Smrg 4255c3c9db83Smrg if test -z "$pic_object" || 4256c3c9db83Smrg test -z "$non_pic_object" || 4257c3c9db83Smrg test "$pic_object" = none && 4258c3c9db83Smrg test "$non_pic_object" = none; then 4259c3c9db83Smrg func_fatal_error "cannot find name of object for \`$arg'" 4260c3c9db83Smrg fi 426185ee4c00Smrg 4262c3c9db83Smrg # Extract subdirectory from the argument. 4263c3c9db83Smrg func_dirname "$arg" "/" "" 4264c3c9db83Smrg xdir="$func_dirname_result" 426585ee4c00Smrg 4266c3c9db83Smrg if test "$pic_object" != none; then 4267c3c9db83Smrg # Prepend the subdirectory the object is found in. 4268c3c9db83Smrg pic_object="$xdir$pic_object" 426985ee4c00Smrg 4270c3c9db83Smrg if test "$prev" = dlfiles; then 4271c3c9db83Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4272c3c9db83Smrg dlfiles="$dlfiles $pic_object" 4273c3c9db83Smrg prev= 4274c3c9db83Smrg continue 4275c3c9db83Smrg else 4276c3c9db83Smrg # If libtool objects are unsupported, then we need to preload. 4277c3c9db83Smrg prev=dlprefiles 4278c3c9db83Smrg fi 4279c3c9db83Smrg fi 428085ee4c00Smrg 4281c3c9db83Smrg # CHECK ME: I think I busted this. -Ossama 4282c3c9db83Smrg if test "$prev" = dlprefiles; then 4283c3c9db83Smrg # Preload the old-style object. 4284c3c9db83Smrg dlprefiles="$dlprefiles $pic_object" 4285c3c9db83Smrg prev= 4286c3c9db83Smrg fi 428785ee4c00Smrg 4288c3c9db83Smrg # A PIC object. 4289c3c9db83Smrg func_append libobjs " $pic_object" 4290c3c9db83Smrg arg="$pic_object" 4291c3c9db83Smrg fi 429285ee4c00Smrg 4293c3c9db83Smrg # Non-PIC object. 4294c3c9db83Smrg if test "$non_pic_object" != none; then 4295c3c9db83Smrg # Prepend the subdirectory the object is found in. 4296c3c9db83Smrg non_pic_object="$xdir$non_pic_object" 429785ee4c00Smrg 4298c3c9db83Smrg # A standard non-PIC object 4299c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 4300c3c9db83Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 4301c3c9db83Smrg arg="$non_pic_object" 4302c3c9db83Smrg fi 4303c3c9db83Smrg else 4304c3c9db83Smrg # If the PIC object exists, use it instead. 4305c3c9db83Smrg # $xdir was prepended to $pic_object above. 4306c3c9db83Smrg non_pic_object="$pic_object" 4307c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 4308c3c9db83Smrg fi 4309c3c9db83Smrg else 4310c3c9db83Smrg # Only an error if not doing a dry-run. 4311c3c9db83Smrg if $opt_dry_run; then 4312c3c9db83Smrg # Extract subdirectory from the argument. 4313c3c9db83Smrg func_dirname "$arg" "/" "" 4314c3c9db83Smrg xdir="$func_dirname_result" 4315c3c9db83Smrg 4316c3c9db83Smrg func_lo2o "$arg" 4317c3c9db83Smrg pic_object=$xdir$objdir/$func_lo2o_result 4318c3c9db83Smrg non_pic_object=$xdir$func_lo2o_result 4319c3c9db83Smrg func_append libobjs " $pic_object" 4320c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 4321c3c9db83Smrg else 4322c3c9db83Smrg func_fatal_error "\`$arg' is not a valid libtool object" 4323c3c9db83Smrg fi 4324c3c9db83Smrg fi 4325c3c9db83Smrg done 43262e71ea71Smrg else 4327c3c9db83Smrg func_fatal_error "link input file \`$arg' does not exist" 43282e71ea71Smrg fi 4329c3c9db83Smrg arg=$save_arg 4330c3c9db83Smrg prev= 4331c3c9db83Smrg continue 4332c3c9db83Smrg ;; 4333c3c9db83Smrg precious_regex) 4334c3c9db83Smrg precious_files_regex="$arg" 4335c3c9db83Smrg prev= 4336c3c9db83Smrg continue 4337c3c9db83Smrg ;; 4338c3c9db83Smrg release) 4339c3c9db83Smrg release="-$arg" 4340c3c9db83Smrg prev= 4341c3c9db83Smrg continue 4342c3c9db83Smrg ;; 4343c3c9db83Smrg rpath | xrpath) 4344c3c9db83Smrg # We need an absolute path. 4345c3c9db83Smrg case $arg in 4346c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4347c3c9db83Smrg *) 4348c3c9db83Smrg func_fatal_error "only absolute run-paths are allowed" 4349c3c9db83Smrg ;; 4350c3c9db83Smrg esac 4351c3c9db83Smrg if test "$prev" = rpath; then 4352c3c9db83Smrg case "$rpath " in 4353c3c9db83Smrg *" $arg "*) ;; 4354c3c9db83Smrg *) rpath="$rpath $arg" ;; 4355c3c9db83Smrg esac 43562e71ea71Smrg else 4357c3c9db83Smrg case "$xrpath " in 4358c3c9db83Smrg *" $arg "*) ;; 4359c3c9db83Smrg *) xrpath="$xrpath $arg" ;; 4360c3c9db83Smrg esac 43612e71ea71Smrg fi 4362c3c9db83Smrg prev= 4363c3c9db83Smrg continue 4364c3c9db83Smrg ;; 4365c3c9db83Smrg shrext) 4366c3c9db83Smrg shrext_cmds="$arg" 4367c3c9db83Smrg prev= 4368c3c9db83Smrg continue 4369c3c9db83Smrg ;; 4370c3c9db83Smrg weak) 4371c3c9db83Smrg weak_libs="$weak_libs $arg" 4372c3c9db83Smrg prev= 4373c3c9db83Smrg continue 4374c3c9db83Smrg ;; 4375c3c9db83Smrg xcclinker) 4376c3c9db83Smrg linker_flags="$linker_flags $qarg" 4377c3c9db83Smrg compiler_flags="$compiler_flags $qarg" 4378c3c9db83Smrg prev= 4379c3c9db83Smrg func_append compile_command " $qarg" 4380c3c9db83Smrg func_append finalize_command " $qarg" 4381c3c9db83Smrg continue 4382c3c9db83Smrg ;; 4383c3c9db83Smrg xcompiler) 4384c3c9db83Smrg compiler_flags="$compiler_flags $qarg" 4385c3c9db83Smrg prev= 4386c3c9db83Smrg func_append compile_command " $qarg" 4387c3c9db83Smrg func_append finalize_command " $qarg" 4388c3c9db83Smrg continue 4389c3c9db83Smrg ;; 4390c3c9db83Smrg xlinker) 4391c3c9db83Smrg linker_flags="$linker_flags $qarg" 4392c3c9db83Smrg compiler_flags="$compiler_flags $wl$qarg" 4393c3c9db83Smrg prev= 4394c3c9db83Smrg func_append compile_command " $wl$qarg" 4395c3c9db83Smrg func_append finalize_command " $wl$qarg" 4396c3c9db83Smrg continue 4397c3c9db83Smrg ;; 4398c3c9db83Smrg *) 4399c3c9db83Smrg eval "$prev=\"\$arg\"" 4400c3c9db83Smrg prev= 4401c3c9db83Smrg continue 4402c3c9db83Smrg ;; 440385ee4c00Smrg esac 4404c3c9db83Smrg fi # test -n "$prev" 440585ee4c00Smrg 4406c3c9db83Smrg prevarg="$arg" 440785ee4c00Smrg 4408c3c9db83Smrg case $arg in 4409c3c9db83Smrg -all-static) 4410c3c9db83Smrg if test -n "$link_static_flag"; then 4411c3c9db83Smrg # See comment for -static flag below, for more details. 4412c3c9db83Smrg func_append compile_command " $link_static_flag" 4413c3c9db83Smrg func_append finalize_command " $link_static_flag" 4414c3c9db83Smrg fi 4415c3c9db83Smrg continue 4416c3c9db83Smrg ;; 441785ee4c00Smrg 4418c3c9db83Smrg -allow-undefined) 4419c3c9db83Smrg # FIXME: remove this flag sometime in the future. 4420c3c9db83Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 4421c3c9db83Smrg ;; 442285ee4c00Smrg 4423c3c9db83Smrg -avoid-version) 4424c3c9db83Smrg avoid_version=yes 4425c3c9db83Smrg continue 4426c3c9db83Smrg ;; 442785ee4c00Smrg 4428c3c9db83Smrg -dlopen) 4429c3c9db83Smrg prev=dlfiles 4430c3c9db83Smrg continue 4431c3c9db83Smrg ;; 443285ee4c00Smrg 4433c3c9db83Smrg -dlpreopen) 4434c3c9db83Smrg prev=dlprefiles 4435c3c9db83Smrg continue 4436c3c9db83Smrg ;; 443785ee4c00Smrg 4438c3c9db83Smrg -export-dynamic) 4439c3c9db83Smrg export_dynamic=yes 4440c3c9db83Smrg continue 4441c3c9db83Smrg ;; 444285ee4c00Smrg 4443c3c9db83Smrg -export-symbols | -export-symbols-regex) 4444c3c9db83Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 4445c3c9db83Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 4446c3c9db83Smrg fi 4447c3c9db83Smrg if test "X$arg" = "X-export-symbols"; then 4448c3c9db83Smrg prev=expsyms 4449c3c9db83Smrg else 4450c3c9db83Smrg prev=expsyms_regex 4451c3c9db83Smrg fi 4452c3c9db83Smrg continue 4453c3c9db83Smrg ;; 445485ee4c00Smrg 4455c3c9db83Smrg -framework) 4456c3c9db83Smrg prev=framework 4457c3c9db83Smrg continue 4458c3c9db83Smrg ;; 445985ee4c00Smrg 4460c3c9db83Smrg -inst-prefix-dir) 4461c3c9db83Smrg prev=inst_prefix 4462c3c9db83Smrg continue 4463c3c9db83Smrg ;; 446485ee4c00Smrg 4465c3c9db83Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 4466c3c9db83Smrg # so, if we see these flags be careful not to treat them like -L 4467c3c9db83Smrg -L[A-Z][A-Z]*:*) 4468c3c9db83Smrg case $with_gcc/$host in 4469c3c9db83Smrg no/*-*-irix* | /*-*-irix*) 4470c3c9db83Smrg func_append compile_command " $arg" 4471c3c9db83Smrg func_append finalize_command " $arg" 4472c3c9db83Smrg ;; 4473c3c9db83Smrg esac 4474c3c9db83Smrg continue 4475c3c9db83Smrg ;; 447685ee4c00Smrg 4477c3c9db83Smrg -L*) 4478c3c9db83Smrg func_stripname '-L' '' "$arg" 4479c3c9db83Smrg dir=$func_stripname_result 4480c3c9db83Smrg if test -z "$dir"; then 4481c3c9db83Smrg if test "$#" -gt 0; then 4482c3c9db83Smrg func_fatal_error "require no space between \`-L' and \`$1'" 4483c3c9db83Smrg else 4484c3c9db83Smrg func_fatal_error "need path for \`-L' option" 4485c3c9db83Smrg fi 4486c3c9db83Smrg fi 4487c3c9db83Smrg # We need an absolute path. 4488c3c9db83Smrg case $dir in 4489c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4490c3c9db83Smrg *) 4491c3c9db83Smrg absdir=`cd "$dir" && pwd` 4492c3c9db83Smrg test -z "$absdir" && \ 4493c3c9db83Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 4494c3c9db83Smrg dir="$absdir" 4495c3c9db83Smrg ;; 4496c3c9db83Smrg esac 4497c3c9db83Smrg case "$deplibs " in 4498c3c9db83Smrg *" -L$dir "*) ;; 4499c3c9db83Smrg *) 4500c3c9db83Smrg deplibs="$deplibs -L$dir" 4501c3c9db83Smrg lib_search_path="$lib_search_path $dir" 4502c3c9db83Smrg ;; 4503c3c9db83Smrg esac 4504c3c9db83Smrg case $host in 4505c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4506c3c9db83Smrg testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` 4507c3c9db83Smrg case :$dllsearchpath: in 4508c3c9db83Smrg *":$dir:"*) ;; 4509c3c9db83Smrg ::) dllsearchpath=$dir;; 4510c3c9db83Smrg *) dllsearchpath="$dllsearchpath:$dir";; 4511c3c9db83Smrg esac 4512c3c9db83Smrg case :$dllsearchpath: in 4513c3c9db83Smrg *":$testbindir:"*) ;; 4514c3c9db83Smrg ::) dllsearchpath=$testbindir;; 4515c3c9db83Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 4516c3c9db83Smrg esac 4517c3c9db83Smrg ;; 4518c3c9db83Smrg esac 4519c3c9db83Smrg continue 4520c3c9db83Smrg ;; 452185ee4c00Smrg 4522c3c9db83Smrg -l*) 4523c3c9db83Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 4524c3c9db83Smrg case $host in 4525c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) 4526c3c9db83Smrg # These systems don't actually have a C or math library (as such) 4527c3c9db83Smrg continue 4528c3c9db83Smrg ;; 4529c3c9db83Smrg *-*-os2*) 4530c3c9db83Smrg # These systems don't actually have a C library (as such) 4531c3c9db83Smrg test "X$arg" = "X-lc" && continue 4532c3c9db83Smrg ;; 4533c3c9db83Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4534c3c9db83Smrg # Do not include libc due to us having libc/libc_r. 4535c3c9db83Smrg test "X$arg" = "X-lc" && continue 4536c3c9db83Smrg ;; 4537c3c9db83Smrg *-*-rhapsody* | *-*-darwin1.[012]) 4538c3c9db83Smrg # Rhapsody C and math libraries are in the System framework 4539c3c9db83Smrg deplibs="$deplibs System.ltframework" 4540c3c9db83Smrg continue 4541c3c9db83Smrg ;; 4542c3c9db83Smrg *-*-sco3.2v5* | *-*-sco5v6*) 4543c3c9db83Smrg # Causes problems with __ctype 4544c3c9db83Smrg test "X$arg" = "X-lc" && continue 4545c3c9db83Smrg ;; 4546c3c9db83Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 4547c3c9db83Smrg # Compiler inserts libc in the correct place for threads to work 4548c3c9db83Smrg test "X$arg" = "X-lc" && continue 4549c3c9db83Smrg ;; 4550c3c9db83Smrg esac 4551c3c9db83Smrg elif test "X$arg" = "X-lc_r"; then 4552c3c9db83Smrg case $host in 4553c3c9db83Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4554c3c9db83Smrg # Do not include libc_r directly, use -pthread flag. 4555c3c9db83Smrg continue 4556c3c9db83Smrg ;; 4557c3c9db83Smrg esac 4558c3c9db83Smrg fi 4559c3c9db83Smrg deplibs="$deplibs $arg" 4560c3c9db83Smrg continue 4561c3c9db83Smrg ;; 456285ee4c00Smrg 4563c3c9db83Smrg -module) 4564c3c9db83Smrg module=yes 4565c3c9db83Smrg continue 4566c3c9db83Smrg ;; 456785ee4c00Smrg 4568c3c9db83Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 4569c3c9db83Smrg # classes, name mangling, and exception handling. 4570c3c9db83Smrg # Darwin uses the -arch flag to determine output architecture. 4571c3c9db83Smrg -model|-arch|-isysroot) 4572c3c9db83Smrg compiler_flags="$compiler_flags $arg" 4573c3c9db83Smrg func_append compile_command " $arg" 4574c3c9db83Smrg func_append finalize_command " $arg" 4575c3c9db83Smrg prev=xcompiler 4576c3c9db83Smrg continue 4577c3c9db83Smrg ;; 457885ee4c00Smrg 4579c3c9db83Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 4580c3c9db83Smrg compiler_flags="$compiler_flags $arg" 4581c3c9db83Smrg func_append compile_command " $arg" 4582c3c9db83Smrg func_append finalize_command " $arg" 4583c3c9db83Smrg case "$new_inherited_linker_flags " in 4584c3c9db83Smrg *" $arg "*) ;; 4585c3c9db83Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 4586c3c9db83Smrg esac 4587c3c9db83Smrg continue 4588c3c9db83Smrg ;; 458985ee4c00Smrg 4590c3c9db83Smrg -multi_module) 4591c3c9db83Smrg single_module="${wl}-multi_module" 4592c3c9db83Smrg continue 4593c3c9db83Smrg ;; 459485ee4c00Smrg 4595c3c9db83Smrg -no-fast-install) 4596c3c9db83Smrg fast_install=no 4597c3c9db83Smrg continue 4598c3c9db83Smrg ;; 459985ee4c00Smrg 4600c3c9db83Smrg -no-install) 4601c3c9db83Smrg case $host in 4602c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 4603c3c9db83Smrg # The PATH hackery in wrapper scripts is required on Windows 4604c3c9db83Smrg # and Darwin in order for the loader to find any dlls it needs. 4605c3c9db83Smrg func_warning "\`-no-install' is ignored for $host" 4606c3c9db83Smrg func_warning "assuming \`-no-fast-install' instead" 4607c3c9db83Smrg fast_install=no 4608c3c9db83Smrg ;; 4609c3c9db83Smrg *) no_install=yes ;; 4610c3c9db83Smrg esac 4611c3c9db83Smrg continue 4612c3c9db83Smrg ;; 461385ee4c00Smrg 4614c3c9db83Smrg -no-undefined) 4615c3c9db83Smrg allow_undefined=no 4616c3c9db83Smrg continue 4617c3c9db83Smrg ;; 461885ee4c00Smrg 4619c3c9db83Smrg -objectlist) 4620c3c9db83Smrg prev=objectlist 4621c3c9db83Smrg continue 4622c3c9db83Smrg ;; 462385ee4c00Smrg 4624c3c9db83Smrg -o) prev=output ;; 462585ee4c00Smrg 4626c3c9db83Smrg -precious-files-regex) 4627c3c9db83Smrg prev=precious_regex 4628c3c9db83Smrg continue 4629c3c9db83Smrg ;; 463085ee4c00Smrg 4631c3c9db83Smrg -release) 4632c3c9db83Smrg prev=release 4633c3c9db83Smrg continue 4634c3c9db83Smrg ;; 463585ee4c00Smrg 4636c3c9db83Smrg -rpath) 4637c3c9db83Smrg prev=rpath 4638c3c9db83Smrg continue 4639c3c9db83Smrg ;; 464085ee4c00Smrg 4641c3c9db83Smrg -R) 4642c3c9db83Smrg prev=xrpath 4643c3c9db83Smrg continue 4644c3c9db83Smrg ;; 464585ee4c00Smrg 4646c3c9db83Smrg -R*) 4647c3c9db83Smrg func_stripname '-R' '' "$arg" 4648c3c9db83Smrg dir=$func_stripname_result 4649c3c9db83Smrg # We need an absolute path. 4650c3c9db83Smrg case $dir in 4651c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4652c3c9db83Smrg *) 4653c3c9db83Smrg func_fatal_error "only absolute run-paths are allowed" 4654c3c9db83Smrg ;; 4655c3c9db83Smrg esac 4656c3c9db83Smrg case "$xrpath " in 4657c3c9db83Smrg *" $dir "*) ;; 4658c3c9db83Smrg *) xrpath="$xrpath $dir" ;; 4659c3c9db83Smrg esac 4660c3c9db83Smrg continue 4661c3c9db83Smrg ;; 466285ee4c00Smrg 4663c3c9db83Smrg -shared) 4664c3c9db83Smrg # The effects of -shared are defined in a previous loop. 4665c3c9db83Smrg continue 4666c3c9db83Smrg ;; 466785ee4c00Smrg 4668c3c9db83Smrg -shrext) 4669c3c9db83Smrg prev=shrext 4670c3c9db83Smrg continue 4671c3c9db83Smrg ;; 467285ee4c00Smrg 4673c3c9db83Smrg -static | -static-libtool-libs) 4674c3c9db83Smrg # The effects of -static are defined in a previous loop. 4675c3c9db83Smrg # We used to do the same as -all-static on platforms that 4676c3c9db83Smrg # didn't have a PIC flag, but the assumption that the effects 4677c3c9db83Smrg # would be equivalent was wrong. It would break on at least 4678c3c9db83Smrg # Digital Unix and AIX. 4679c3c9db83Smrg continue 4680c3c9db83Smrg ;; 468185ee4c00Smrg 4682c3c9db83Smrg -thread-safe) 4683c3c9db83Smrg thread_safe=yes 4684c3c9db83Smrg continue 4685c3c9db83Smrg ;; 468685ee4c00Smrg 4687c3c9db83Smrg -version-info) 4688c3c9db83Smrg prev=vinfo 4689c3c9db83Smrg continue 4690c3c9db83Smrg ;; 469185ee4c00Smrg 4692c3c9db83Smrg -version-number) 4693c3c9db83Smrg prev=vinfo 4694c3c9db83Smrg vinfo_number=yes 4695c3c9db83Smrg continue 4696c3c9db83Smrg ;; 469785ee4c00Smrg 4698c3c9db83Smrg -weak) 4699c3c9db83Smrg prev=weak 4700c3c9db83Smrg continue 4701c3c9db83Smrg ;; 4702692f60a7Smrg 4703c3c9db83Smrg -Wc,*) 4704c3c9db83Smrg func_stripname '-Wc,' '' "$arg" 4705c3c9db83Smrg args=$func_stripname_result 4706c3c9db83Smrg arg= 4707c3c9db83Smrg save_ifs="$IFS"; IFS=',' 4708c3c9db83Smrg for flag in $args; do 4709c3c9db83Smrg IFS="$save_ifs" 4710c3c9db83Smrg func_quote_for_eval "$flag" 4711c3c9db83Smrg arg="$arg $wl$func_quote_for_eval_result" 4712c3c9db83Smrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 4713c3c9db83Smrg done 4714c3c9db83Smrg IFS="$save_ifs" 4715c3c9db83Smrg func_stripname ' ' '' "$arg" 4716c3c9db83Smrg arg=$func_stripname_result 4717c3c9db83Smrg ;; 47182e71ea71Smrg 4719c3c9db83Smrg -Wl,*) 4720c3c9db83Smrg func_stripname '-Wl,' '' "$arg" 4721c3c9db83Smrg args=$func_stripname_result 4722c3c9db83Smrg arg= 4723c3c9db83Smrg save_ifs="$IFS"; IFS=',' 4724c3c9db83Smrg for flag in $args; do 4725c3c9db83Smrg IFS="$save_ifs" 4726c3c9db83Smrg func_quote_for_eval "$flag" 4727c3c9db83Smrg arg="$arg $wl$func_quote_for_eval_result" 4728c3c9db83Smrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 4729c3c9db83Smrg linker_flags="$linker_flags $func_quote_for_eval_result" 4730c3c9db83Smrg done 4731c3c9db83Smrg IFS="$save_ifs" 4732c3c9db83Smrg func_stripname ' ' '' "$arg" 4733c3c9db83Smrg arg=$func_stripname_result 4734c3c9db83Smrg ;; 47352e71ea71Smrg 4736c3c9db83Smrg -Xcompiler) 4737c3c9db83Smrg prev=xcompiler 4738c3c9db83Smrg continue 4739c3c9db83Smrg ;; 47402e71ea71Smrg 4741c3c9db83Smrg -Xlinker) 4742c3c9db83Smrg prev=xlinker 4743c3c9db83Smrg continue 4744c3c9db83Smrg ;; 47452e71ea71Smrg 4746c3c9db83Smrg -XCClinker) 4747c3c9db83Smrg prev=xcclinker 4748c3c9db83Smrg continue 4749c3c9db83Smrg ;; 47502e71ea71Smrg 4751c3c9db83Smrg # -msg_* for osf cc 4752c3c9db83Smrg -msg_*) 4753c3c9db83Smrg func_quote_for_eval "$arg" 4754c3c9db83Smrg arg="$func_quote_for_eval_result" 4755c3c9db83Smrg ;; 47562e71ea71Smrg 4757c3c9db83Smrg # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 4758c3c9db83Smrg # -r[0-9][0-9]* specifies the processor on the SGI compiler 4759c3c9db83Smrg # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 4760c3c9db83Smrg # +DA*, +DD* enable 64-bit mode on the HP compiler 4761c3c9db83Smrg # -q* pass through compiler args for the IBM compiler 4762c3c9db83Smrg # -m*, -t[45]*, -txscale* pass through architecture-specific 4763c3c9db83Smrg # compiler args for GCC 4764c3c9db83Smrg # -F/path gives path to uninstalled frameworks, gcc on darwin 4765c3c9db83Smrg # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 4766c3c9db83Smrg # @file GCC response files 4767c3c9db83Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 4768c3c9db83Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 4769c3c9db83Smrg func_quote_for_eval "$arg" 4770c3c9db83Smrg arg="$func_quote_for_eval_result" 4771c3c9db83Smrg func_append compile_command " $arg" 4772c3c9db83Smrg func_append finalize_command " $arg" 4773c3c9db83Smrg compiler_flags="$compiler_flags $arg" 4774c3c9db83Smrg continue 4775c3c9db83Smrg ;; 47762e71ea71Smrg 4777c3c9db83Smrg # Some other compiler flag. 4778c3c9db83Smrg -* | +*) 4779c3c9db83Smrg func_quote_for_eval "$arg" 4780c3c9db83Smrg arg="$func_quote_for_eval_result" 4781c3c9db83Smrg ;; 47822e71ea71Smrg 4783c3c9db83Smrg *.$objext) 4784c3c9db83Smrg # A standard object. 4785c3c9db83Smrg objs="$objs $arg" 4786c3c9db83Smrg ;; 47872e71ea71Smrg 4788c3c9db83Smrg *.lo) 4789c3c9db83Smrg # A libtool-controlled object. 47902e71ea71Smrg 4791c3c9db83Smrg # Check to see that this really is a libtool object. 4792c3c9db83Smrg if func_lalib_unsafe_p "$arg"; then 4793c3c9db83Smrg pic_object= 4794c3c9db83Smrg non_pic_object= 47952e71ea71Smrg 4796c3c9db83Smrg # Read the .lo file 4797c3c9db83Smrg func_source "$arg" 47982e71ea71Smrg 4799c3c9db83Smrg if test -z "$pic_object" || 4800c3c9db83Smrg test -z "$non_pic_object" || 4801c3c9db83Smrg test "$pic_object" = none && 4802c3c9db83Smrg test "$non_pic_object" = none; then 4803c3c9db83Smrg func_fatal_error "cannot find name of object for \`$arg'" 4804c3c9db83Smrg fi 48052e71ea71Smrg 4806c3c9db83Smrg # Extract subdirectory from the argument. 4807c3c9db83Smrg func_dirname "$arg" "/" "" 4808c3c9db83Smrg xdir="$func_dirname_result" 48092e71ea71Smrg 4810c3c9db83Smrg if test "$pic_object" != none; then 4811c3c9db83Smrg # Prepend the subdirectory the object is found in. 4812c3c9db83Smrg pic_object="$xdir$pic_object" 48132e71ea71Smrg 4814c3c9db83Smrg if test "$prev" = dlfiles; then 4815c3c9db83Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4816c3c9db83Smrg dlfiles="$dlfiles $pic_object" 4817c3c9db83Smrg prev= 4818c3c9db83Smrg continue 4819c3c9db83Smrg else 4820c3c9db83Smrg # If libtool objects are unsupported, then we need to preload. 4821c3c9db83Smrg prev=dlprefiles 4822c3c9db83Smrg fi 4823c3c9db83Smrg fi 48242e71ea71Smrg 4825c3c9db83Smrg # CHECK ME: I think I busted this. -Ossama 4826c3c9db83Smrg if test "$prev" = dlprefiles; then 4827c3c9db83Smrg # Preload the old-style object. 4828c3c9db83Smrg dlprefiles="$dlprefiles $pic_object" 4829c3c9db83Smrg prev= 4830c3c9db83Smrg fi 4831692f60a7Smrg 4832c3c9db83Smrg # A PIC object. 4833c3c9db83Smrg func_append libobjs " $pic_object" 4834c3c9db83Smrg arg="$pic_object" 4835c3c9db83Smrg fi 4836692f60a7Smrg 4837c3c9db83Smrg # Non-PIC object. 4838c3c9db83Smrg if test "$non_pic_object" != none; then 4839c3c9db83Smrg # Prepend the subdirectory the object is found in. 4840c3c9db83Smrg non_pic_object="$xdir$non_pic_object" 4841692f60a7Smrg 4842c3c9db83Smrg # A standard non-PIC object 4843c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 4844c3c9db83Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 4845c3c9db83Smrg arg="$non_pic_object" 4846c3c9db83Smrg fi 4847c3c9db83Smrg else 4848c3c9db83Smrg # If the PIC object exists, use it instead. 4849c3c9db83Smrg # $xdir was prepended to $pic_object above. 4850c3c9db83Smrg non_pic_object="$pic_object" 4851c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 4852c3c9db83Smrg fi 4853c3c9db83Smrg else 4854c3c9db83Smrg # Only an error if not doing a dry-run. 4855c3c9db83Smrg if $opt_dry_run; then 4856c3c9db83Smrg # Extract subdirectory from the argument. 4857c3c9db83Smrg func_dirname "$arg" "/" "" 4858c3c9db83Smrg xdir="$func_dirname_result" 4859c3c9db83Smrg 4860c3c9db83Smrg func_lo2o "$arg" 4861c3c9db83Smrg pic_object=$xdir$objdir/$func_lo2o_result 4862c3c9db83Smrg non_pic_object=$xdir$func_lo2o_result 4863c3c9db83Smrg func_append libobjs " $pic_object" 4864c3c9db83Smrg func_append non_pic_objects " $non_pic_object" 4865c3c9db83Smrg else 4866c3c9db83Smrg func_fatal_error "\`$arg' is not a valid libtool object" 4867c3c9db83Smrg fi 4868c3c9db83Smrg fi 4869c3c9db83Smrg ;; 4870692f60a7Smrg 4871c3c9db83Smrg *.$libext) 4872c3c9db83Smrg # An archive. 4873c3c9db83Smrg deplibs="$deplibs $arg" 4874c3c9db83Smrg old_deplibs="$old_deplibs $arg" 4875c3c9db83Smrg continue 4876c3c9db83Smrg ;; 4877c3c9db83Smrg 4878c3c9db83Smrg *.la) 4879c3c9db83Smrg # A libtool-controlled library. 4880c3c9db83Smrg 4881c3c9db83Smrg if test "$prev" = dlfiles; then 4882c3c9db83Smrg # This library was specified with -dlopen. 4883c3c9db83Smrg dlfiles="$dlfiles $arg" 4884c3c9db83Smrg prev= 4885c3c9db83Smrg elif test "$prev" = dlprefiles; then 4886c3c9db83Smrg # The library was specified with -dlpreopen. 4887c3c9db83Smrg dlprefiles="$dlprefiles $arg" 4888c3c9db83Smrg prev= 4889c3c9db83Smrg else 4890c3c9db83Smrg deplibs="$deplibs $arg" 4891c3c9db83Smrg fi 4892c3c9db83Smrg continue 4893c3c9db83Smrg ;; 4894c3c9db83Smrg 4895c3c9db83Smrg # Some other compiler argument. 4896c3c9db83Smrg *) 4897c3c9db83Smrg # Unknown arguments in both finalize_command and compile_command need 4898c3c9db83Smrg # to be aesthetically quoted because they are evaled later. 4899c3c9db83Smrg func_quote_for_eval "$arg" 4900c3c9db83Smrg arg="$func_quote_for_eval_result" 4901c3c9db83Smrg ;; 4902c3c9db83Smrg esac # arg 4903c3c9db83Smrg 4904c3c9db83Smrg # Now actually substitute the argument into the commands. 4905c3c9db83Smrg if test -n "$arg"; then 4906c3c9db83Smrg func_append compile_command " $arg" 4907c3c9db83Smrg func_append finalize_command " $arg" 4908c3c9db83Smrg fi 4909c3c9db83Smrg done # argument parsing loop 4910c3c9db83Smrg 4911c3c9db83Smrg test -n "$prev" && \ 4912c3c9db83Smrg func_fatal_help "the \`$prevarg' option requires an argument" 4913c3c9db83Smrg 4914c3c9db83Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 4915c3c9db83Smrg eval arg=\"$export_dynamic_flag_spec\" 4916c3c9db83Smrg func_append compile_command " $arg" 4917c3c9db83Smrg func_append finalize_command " $arg" 4918c3c9db83Smrg fi 4919c3c9db83Smrg 4920c3c9db83Smrg oldlibs= 4921c3c9db83Smrg # calculate the name of the file, without its directory 4922c3c9db83Smrg func_basename "$output" 4923c3c9db83Smrg outputname="$func_basename_result" 4924c3c9db83Smrg libobjs_save="$libobjs" 4925c3c9db83Smrg 4926c3c9db83Smrg if test -n "$shlibpath_var"; then 4927c3c9db83Smrg # get the directories listed in $shlibpath_var 4928c3c9db83Smrg eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 4929c3c9db83Smrg else 4930c3c9db83Smrg shlib_search_path= 4931c3c9db83Smrg fi 4932c3c9db83Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 4933c3c9db83Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 4934c3c9db83Smrg 4935c3c9db83Smrg func_dirname "$output" "/" "" 4936c3c9db83Smrg output_objdir="$func_dirname_result$objdir" 4937c3c9db83Smrg # Create the object directory. 4938c3c9db83Smrg func_mkdir_p "$output_objdir" 4939c3c9db83Smrg 4940c3c9db83Smrg # Determine the type of output 4941c3c9db83Smrg case $output in 4942c3c9db83Smrg "") 4943c3c9db83Smrg func_fatal_help "you must specify an output file" 4944c3c9db83Smrg ;; 4945c3c9db83Smrg *.$libext) linkmode=oldlib ;; 4946c3c9db83Smrg *.lo | *.$objext) linkmode=obj ;; 4947c3c9db83Smrg *.la) linkmode=lib ;; 4948c3c9db83Smrg *) linkmode=prog ;; # Anything else should be a program. 4949c3c9db83Smrg esac 4950c3c9db83Smrg 4951c3c9db83Smrg specialdeplibs= 4952c3c9db83Smrg 4953c3c9db83Smrg libs= 4954c3c9db83Smrg # Find all interdependent deplibs by searching for libraries 4955c3c9db83Smrg # that are linked more than once (e.g. -la -lb -la) 4956c3c9db83Smrg for deplib in $deplibs; do 4957c3c9db83Smrg if $opt_duplicate_deps ; then 4958c3c9db83Smrg case "$libs " in 4959c3c9db83Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 4960c3c9db83Smrg esac 4961c3c9db83Smrg fi 4962c3c9db83Smrg libs="$libs $deplib" 4963c3c9db83Smrg done 4964c3c9db83Smrg 4965c3c9db83Smrg if test "$linkmode" = lib; then 4966c3c9db83Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 4967c3c9db83Smrg 4968c3c9db83Smrg # Compute libraries that are listed more than once in $predeps 4969c3c9db83Smrg # $postdeps and mark them as special (i.e., whose duplicates are 4970c3c9db83Smrg # not to be eliminated). 4971c3c9db83Smrg pre_post_deps= 4972c3c9db83Smrg if $opt_duplicate_compiler_generated_deps; then 4973c3c9db83Smrg for pre_post_dep in $predeps $postdeps; do 4974c3c9db83Smrg case "$pre_post_deps " in 4975c3c9db83Smrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 4976c3c9db83Smrg esac 4977c3c9db83Smrg pre_post_deps="$pre_post_deps $pre_post_dep" 4978c3c9db83Smrg done 4979c3c9db83Smrg fi 4980c3c9db83Smrg pre_post_deps= 4981c3c9db83Smrg fi 4982c3c9db83Smrg 4983c3c9db83Smrg deplibs= 4984c3c9db83Smrg newdependency_libs= 4985c3c9db83Smrg newlib_search_path= 4986c3c9db83Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 4987c3c9db83Smrg notinst_deplibs= # not-installed libtool libraries 4988c3c9db83Smrg notinst_path= # paths that contain not-installed libtool libraries 4989c3c9db83Smrg 4990c3c9db83Smrg case $linkmode in 4991c3c9db83Smrg lib) 4992c3c9db83Smrg passes="conv dlpreopen link" 4993c3c9db83Smrg for file in $dlfiles $dlprefiles; do 4994c3c9db83Smrg case $file in 4995c3c9db83Smrg *.la) ;; 4996c3c9db83Smrg *) 4997c3c9db83Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 4998c3c9db83Smrg ;; 4999c3c9db83Smrg esac 5000c3c9db83Smrg done 5001c3c9db83Smrg ;; 5002c3c9db83Smrg prog) 5003c3c9db83Smrg compile_deplibs= 5004c3c9db83Smrg finalize_deplibs= 5005c3c9db83Smrg alldeplibs=no 5006c3c9db83Smrg newdlfiles= 5007c3c9db83Smrg newdlprefiles= 5008c3c9db83Smrg passes="conv scan dlopen dlpreopen link" 5009c3c9db83Smrg ;; 5010c3c9db83Smrg *) passes="conv" 5011c3c9db83Smrg ;; 5012c3c9db83Smrg esac 5013c3c9db83Smrg 5014c3c9db83Smrg for pass in $passes; do 5015c3c9db83Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 5016c3c9db83Smrg # so that -L comes before libs that need it for instance... 5017c3c9db83Smrg if test "$linkmode,$pass" = "lib,link"; then 5018c3c9db83Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 5019c3c9db83Smrg ## order, and fix it there properly 5020c3c9db83Smrg tmp_deplibs= 5021c3c9db83Smrg for deplib in $deplibs; do 5022c3c9db83Smrg tmp_deplibs="$deplib $tmp_deplibs" 5023c3c9db83Smrg done 5024c3c9db83Smrg deplibs="$tmp_deplibs" 5025c3c9db83Smrg fi 5026c3c9db83Smrg 5027c3c9db83Smrg if test "$linkmode,$pass" = "lib,link" || 5028c3c9db83Smrg test "$linkmode,$pass" = "prog,scan"; then 5029c3c9db83Smrg libs="$deplibs" 5030c3c9db83Smrg deplibs= 5031c3c9db83Smrg fi 5032c3c9db83Smrg if test "$linkmode" = prog; then 5033c3c9db83Smrg case $pass in 5034c3c9db83Smrg dlopen) libs="$dlfiles" ;; 5035c3c9db83Smrg dlpreopen) libs="$dlprefiles" ;; 5036c3c9db83Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 5037c3c9db83Smrg esac 5038c3c9db83Smrg fi 5039c3c9db83Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 5040c3c9db83Smrg # Collect and forward deplibs of preopened libtool libs 5041c3c9db83Smrg for lib in $dlprefiles; do 5042c3c9db83Smrg # Ignore non-libtool-libs 5043c3c9db83Smrg dependency_libs= 5044c3c9db83Smrg case $lib in 5045c3c9db83Smrg *.la) func_source "$lib" ;; 5046c3c9db83Smrg esac 5047c3c9db83Smrg 5048c3c9db83Smrg # Collect preopened libtool deplibs, except any this library 5049c3c9db83Smrg # has declared as weak libs 5050c3c9db83Smrg for deplib in $dependency_libs; do 5051c3c9db83Smrg deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` 5052c3c9db83Smrg case " $weak_libs " in 5053c3c9db83Smrg *" $deplib_base "*) ;; 5054c3c9db83Smrg *) deplibs="$deplibs $deplib" ;; 5055c3c9db83Smrg esac 5056c3c9db83Smrg done 5057c3c9db83Smrg done 5058c3c9db83Smrg libs="$dlprefiles" 5059c3c9db83Smrg fi 5060c3c9db83Smrg if test "$pass" = dlopen; then 5061c3c9db83Smrg # Collect dlpreopened libraries 5062c3c9db83Smrg save_deplibs="$deplibs" 5063c3c9db83Smrg deplibs= 5064c3c9db83Smrg fi 5065c3c9db83Smrg 5066c3c9db83Smrg for deplib in $libs; do 5067c3c9db83Smrg lib= 5068c3c9db83Smrg found=no 5069c3c9db83Smrg case $deplib in 5070c3c9db83Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5071c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 5072c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 5073c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 5074c3c9db83Smrg else 5075c3c9db83Smrg compiler_flags="$compiler_flags $deplib" 5076c3c9db83Smrg if test "$linkmode" = lib ; then 5077c3c9db83Smrg case "$new_inherited_linker_flags " in 5078c3c9db83Smrg *" $deplib "*) ;; 5079c3c9db83Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5080c3c9db83Smrg esac 5081c3c9db83Smrg fi 5082c3c9db83Smrg fi 5083c3c9db83Smrg continue 5084c3c9db83Smrg ;; 5085c3c9db83Smrg -l*) 5086c3c9db83Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 5087c3c9db83Smrg func_warning "\`-l' is ignored for archives/objects" 5088c3c9db83Smrg continue 5089c3c9db83Smrg fi 5090c3c9db83Smrg func_stripname '-l' '' "$deplib" 5091c3c9db83Smrg name=$func_stripname_result 5092c3c9db83Smrg if test "$linkmode" = lib; then 5093c3c9db83Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 5094c3c9db83Smrg else 5095c3c9db83Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 5096c3c9db83Smrg fi 5097c3c9db83Smrg for searchdir in $searchdirs; do 5098c3c9db83Smrg for search_ext in .la $std_shrext .so .a; do 5099c3c9db83Smrg # Search the libtool library 5100c3c9db83Smrg lib="$searchdir/lib${name}${search_ext}" 5101c3c9db83Smrg if test -f "$lib"; then 5102c3c9db83Smrg if test "$search_ext" = ".la"; then 5103c3c9db83Smrg found=yes 5104c3c9db83Smrg else 5105c3c9db83Smrg found=no 5106c3c9db83Smrg fi 5107c3c9db83Smrg break 2 5108c3c9db83Smrg fi 5109c3c9db83Smrg done 5110c3c9db83Smrg done 5111c3c9db83Smrg if test "$found" != yes; then 5112c3c9db83Smrg # deplib doesn't seem to be a libtool library 5113c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 5114c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 5115c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 5116c3c9db83Smrg else 5117c3c9db83Smrg deplibs="$deplib $deplibs" 5118c3c9db83Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5119c3c9db83Smrg fi 5120c3c9db83Smrg continue 5121c3c9db83Smrg else # deplib is a libtool library 5122c3c9db83Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 5123c3c9db83Smrg # We need to do some special things here, and not later. 5124c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 5125c3c9db83Smrg case " $predeps $postdeps " in 5126c3c9db83Smrg *" $deplib "*) 5127c3c9db83Smrg if func_lalib_p "$lib"; then 5128c3c9db83Smrg library_names= 5129c3c9db83Smrg old_library= 5130c3c9db83Smrg func_source "$lib" 5131c3c9db83Smrg for l in $old_library $library_names; do 5132c3c9db83Smrg ll="$l" 5133c3c9db83Smrg done 5134c3c9db83Smrg if test "X$ll" = "X$old_library" ; then # only static version available 5135c3c9db83Smrg found=no 5136c3c9db83Smrg func_dirname "$lib" "" "." 5137c3c9db83Smrg ladir="$func_dirname_result" 5138c3c9db83Smrg lib=$ladir/$old_library 5139c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 5140c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 5141c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 5142c3c9db83Smrg else 5143c3c9db83Smrg deplibs="$deplib $deplibs" 5144c3c9db83Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5145c3c9db83Smrg fi 5146c3c9db83Smrg continue 5147c3c9db83Smrg fi 5148c3c9db83Smrg fi 5149c3c9db83Smrg ;; 5150c3c9db83Smrg *) ;; 5151c3c9db83Smrg esac 5152c3c9db83Smrg fi 5153c3c9db83Smrg fi 5154c3c9db83Smrg ;; # -l 5155c3c9db83Smrg *.ltframework) 5156c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 5157c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 5158c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 5159c3c9db83Smrg else 5160c3c9db83Smrg deplibs="$deplib $deplibs" 5161c3c9db83Smrg if test "$linkmode" = lib ; then 5162c3c9db83Smrg case "$new_inherited_linker_flags " in 5163c3c9db83Smrg *" $deplib "*) ;; 5164c3c9db83Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5165c3c9db83Smrg esac 5166c3c9db83Smrg fi 5167c3c9db83Smrg fi 5168c3c9db83Smrg continue 5169c3c9db83Smrg ;; 5170c3c9db83Smrg -L*) 5171c3c9db83Smrg case $linkmode in 5172c3c9db83Smrg lib) 5173c3c9db83Smrg deplibs="$deplib $deplibs" 5174c3c9db83Smrg test "$pass" = conv && continue 5175c3c9db83Smrg newdependency_libs="$deplib $newdependency_libs" 5176c3c9db83Smrg func_stripname '-L' '' "$deplib" 5177c3c9db83Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5178c3c9db83Smrg ;; 5179c3c9db83Smrg prog) 5180c3c9db83Smrg if test "$pass" = conv; then 5181c3c9db83Smrg deplibs="$deplib $deplibs" 5182c3c9db83Smrg continue 5183c3c9db83Smrg fi 5184c3c9db83Smrg if test "$pass" = scan; then 5185c3c9db83Smrg deplibs="$deplib $deplibs" 5186c3c9db83Smrg else 5187c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 5188c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 5189c3c9db83Smrg fi 5190c3c9db83Smrg func_stripname '-L' '' "$deplib" 5191c3c9db83Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5192c3c9db83Smrg ;; 5193c3c9db83Smrg *) 5194c3c9db83Smrg func_warning "\`-L' is ignored for archives/objects" 5195c3c9db83Smrg ;; 5196c3c9db83Smrg esac # linkmode 5197c3c9db83Smrg continue 5198c3c9db83Smrg ;; # -L 5199c3c9db83Smrg -R*) 5200c3c9db83Smrg if test "$pass" = link; then 5201c3c9db83Smrg func_stripname '-R' '' "$deplib" 5202c3c9db83Smrg dir=$func_stripname_result 5203c3c9db83Smrg # Make sure the xrpath contains only unique directories. 5204c3c9db83Smrg case "$xrpath " in 5205c3c9db83Smrg *" $dir "*) ;; 5206c3c9db83Smrg *) xrpath="$xrpath $dir" ;; 5207c3c9db83Smrg esac 5208c3c9db83Smrg fi 5209c3c9db83Smrg deplibs="$deplib $deplibs" 5210c3c9db83Smrg continue 5211c3c9db83Smrg ;; 5212c3c9db83Smrg *.la) lib="$deplib" ;; 5213c3c9db83Smrg *.$libext) 5214c3c9db83Smrg if test "$pass" = conv; then 5215c3c9db83Smrg deplibs="$deplib $deplibs" 5216c3c9db83Smrg continue 5217c3c9db83Smrg fi 5218c3c9db83Smrg case $linkmode in 5219c3c9db83Smrg lib) 5220c3c9db83Smrg # Linking convenience modules into shared libraries is allowed, 5221c3c9db83Smrg # but linking other static libraries is non-portable. 5222c3c9db83Smrg case " $dlpreconveniencelibs " in 5223c3c9db83Smrg *" $deplib "*) ;; 5224c3c9db83Smrg *) 5225c3c9db83Smrg valid_a_lib=no 5226c3c9db83Smrg case $deplibs_check_method in 5227c3c9db83Smrg match_pattern*) 5228c3c9db83Smrg set dummy $deplibs_check_method; shift 5229c3c9db83Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 5230c3c9db83Smrg if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ 5231c3c9db83Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 5232c3c9db83Smrg valid_a_lib=yes 5233c3c9db83Smrg fi 5234c3c9db83Smrg ;; 5235c3c9db83Smrg pass_all) 5236c3c9db83Smrg valid_a_lib=yes 5237c3c9db83Smrg ;; 5238c3c9db83Smrg esac 5239c3c9db83Smrg if test "$valid_a_lib" != yes; then 5240c3c9db83Smrg $ECHO 5241c3c9db83Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 5242c3c9db83Smrg $ECHO "*** I have the capability to make that library automatically link in when" 5243c3c9db83Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 5244c3c9db83Smrg $ECHO "*** shared version of the library, which you do not appear to have" 5245c3c9db83Smrg $ECHO "*** because the file extensions .$libext of this argument makes me believe" 5246c3c9db83Smrg $ECHO "*** that it is just a static archive that I should not use here." 5247c3c9db83Smrg else 5248c3c9db83Smrg $ECHO 5249c3c9db83Smrg $ECHO "*** Warning: Linking the shared library $output against the" 5250c3c9db83Smrg $ECHO "*** static library $deplib is not portable!" 5251c3c9db83Smrg deplibs="$deplib $deplibs" 5252c3c9db83Smrg fi 5253c3c9db83Smrg ;; 5254c3c9db83Smrg esac 5255c3c9db83Smrg continue 5256c3c9db83Smrg ;; 5257c3c9db83Smrg prog) 5258c3c9db83Smrg if test "$pass" != link; then 5259c3c9db83Smrg deplibs="$deplib $deplibs" 5260c3c9db83Smrg else 5261c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 5262c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 5263c3c9db83Smrg fi 5264c3c9db83Smrg continue 5265c3c9db83Smrg ;; 5266c3c9db83Smrg esac # linkmode 5267c3c9db83Smrg ;; # *.$libext 5268c3c9db83Smrg *.lo | *.$objext) 5269c3c9db83Smrg if test "$pass" = conv; then 5270c3c9db83Smrg deplibs="$deplib $deplibs" 5271c3c9db83Smrg elif test "$linkmode" = prog; then 5272c3c9db83Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 5273c3c9db83Smrg # If there is no dlopen support or we're linking statically, 5274c3c9db83Smrg # we need to preload. 5275c3c9db83Smrg newdlprefiles="$newdlprefiles $deplib" 5276c3c9db83Smrg compile_deplibs="$deplib $compile_deplibs" 5277c3c9db83Smrg finalize_deplibs="$deplib $finalize_deplibs" 5278c3c9db83Smrg else 5279c3c9db83Smrg newdlfiles="$newdlfiles $deplib" 5280c3c9db83Smrg fi 5281c3c9db83Smrg fi 5282c3c9db83Smrg continue 5283c3c9db83Smrg ;; 5284c3c9db83Smrg %DEPLIBS%) 5285c3c9db83Smrg alldeplibs=yes 5286c3c9db83Smrg continue 5287c3c9db83Smrg ;; 5288c3c9db83Smrg esac # case $deplib 5289c3c9db83Smrg 5290c3c9db83Smrg if test "$found" = yes || test -f "$lib"; then : 5291c3c9db83Smrg else 5292c3c9db83Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 5293c3c9db83Smrg fi 5294c3c9db83Smrg 5295c3c9db83Smrg # Check to see that this really is a libtool archive. 5296c3c9db83Smrg func_lalib_unsafe_p "$lib" \ 5297c3c9db83Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 5298c3c9db83Smrg 5299c3c9db83Smrg func_dirname "$lib" "" "." 5300c3c9db83Smrg ladir="$func_dirname_result" 5301c3c9db83Smrg 5302c3c9db83Smrg dlname= 5303c3c9db83Smrg dlopen= 5304c3c9db83Smrg dlpreopen= 5305c3c9db83Smrg libdir= 5306c3c9db83Smrg library_names= 5307c3c9db83Smrg old_library= 5308c3c9db83Smrg inherited_linker_flags= 5309c3c9db83Smrg # If the library was installed with an old release of libtool, 5310c3c9db83Smrg # it will not redefine variables installed, or shouldnotlink 5311c3c9db83Smrg installed=yes 5312c3c9db83Smrg shouldnotlink=no 5313c3c9db83Smrg avoidtemprpath= 5314c3c9db83Smrg 5315c3c9db83Smrg 5316c3c9db83Smrg # Read the .la file 5317c3c9db83Smrg func_source "$lib" 5318c3c9db83Smrg 5319c3c9db83Smrg # Convert "-framework foo" to "foo.ltframework" 5320c3c9db83Smrg if test -n "$inherited_linker_flags"; then 5321c3c9db83Smrg tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` 5322c3c9db83Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 5323c3c9db83Smrg case " $new_inherited_linker_flags " in 5324c3c9db83Smrg *" $tmp_inherited_linker_flag "*) ;; 5325c3c9db83Smrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 5326c3c9db83Smrg esac 5327c3c9db83Smrg done 5328c3c9db83Smrg fi 5329c3c9db83Smrg dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 5330c3c9db83Smrg if test "$linkmode,$pass" = "lib,link" || 5331c3c9db83Smrg test "$linkmode,$pass" = "prog,scan" || 5332c3c9db83Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 5333c3c9db83Smrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 5334c3c9db83Smrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 5335c3c9db83Smrg fi 5336c3c9db83Smrg 5337c3c9db83Smrg if test "$pass" = conv; then 5338c3c9db83Smrg # Only check for convenience libraries 5339c3c9db83Smrg deplibs="$lib $deplibs" 5340c3c9db83Smrg if test -z "$libdir"; then 5341c3c9db83Smrg if test -z "$old_library"; then 5342c3c9db83Smrg func_fatal_error "cannot find name of link library for \`$lib'" 5343c3c9db83Smrg fi 5344c3c9db83Smrg # It is a libtool convenience library, so add in its objects. 5345c3c9db83Smrg convenience="$convenience $ladir/$objdir/$old_library" 5346c3c9db83Smrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 5347c3c9db83Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 5348c3c9db83Smrg func_fatal_error "\`$lib' is not a convenience library" 5349c3c9db83Smrg fi 5350c3c9db83Smrg tmp_libs= 5351c3c9db83Smrg for deplib in $dependency_libs; do 5352c3c9db83Smrg deplibs="$deplib $deplibs" 5353c3c9db83Smrg if $opt_duplicate_deps ; then 5354c3c9db83Smrg case "$tmp_libs " in 5355c3c9db83Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5356c3c9db83Smrg esac 5357c3c9db83Smrg fi 5358c3c9db83Smrg tmp_libs="$tmp_libs $deplib" 5359c3c9db83Smrg done 5360c3c9db83Smrg continue 5361c3c9db83Smrg fi # $pass = conv 5362c3c9db83Smrg 5363c3c9db83Smrg 5364c3c9db83Smrg # Get the name of the library we link against. 5365c3c9db83Smrg linklib= 5366c3c9db83Smrg for l in $old_library $library_names; do 5367c3c9db83Smrg linklib="$l" 5368c3c9db83Smrg done 5369c3c9db83Smrg if test -z "$linklib"; then 5370c3c9db83Smrg func_fatal_error "cannot find name of link library for \`$lib'" 5371c3c9db83Smrg fi 5372c3c9db83Smrg 5373c3c9db83Smrg # This library was specified with -dlopen. 5374c3c9db83Smrg if test "$pass" = dlopen; then 5375c3c9db83Smrg if test -z "$libdir"; then 5376c3c9db83Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 5377c3c9db83Smrg fi 5378c3c9db83Smrg if test -z "$dlname" || 5379c3c9db83Smrg test "$dlopen_support" != yes || 5380c3c9db83Smrg test "$build_libtool_libs" = no; then 5381c3c9db83Smrg # If there is no dlname, no dlopen support or we're linking 5382c3c9db83Smrg # statically, we need to preload. We also need to preload any 5383c3c9db83Smrg # dependent libraries so libltdl's deplib preloader doesn't 5384c3c9db83Smrg # bomb out in the load deplibs phase. 5385c3c9db83Smrg dlprefiles="$dlprefiles $lib $dependency_libs" 5386c3c9db83Smrg else 5387c3c9db83Smrg newdlfiles="$newdlfiles $lib" 5388c3c9db83Smrg fi 5389c3c9db83Smrg continue 5390c3c9db83Smrg fi # $pass = dlopen 5391c3c9db83Smrg 5392c3c9db83Smrg # We need an absolute path. 5393c3c9db83Smrg case $ladir in 5394c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 5395c3c9db83Smrg *) 5396c3c9db83Smrg abs_ladir=`cd "$ladir" && pwd` 5397c3c9db83Smrg if test -z "$abs_ladir"; then 5398c3c9db83Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 5399c3c9db83Smrg func_warning "passing it literally to the linker, although it might fail" 5400c3c9db83Smrg abs_ladir="$ladir" 5401c3c9db83Smrg fi 5402c3c9db83Smrg ;; 5403c3c9db83Smrg esac 5404c3c9db83Smrg func_basename "$lib" 5405c3c9db83Smrg laname="$func_basename_result" 5406c3c9db83Smrg 5407c3c9db83Smrg # Find the relevant object directory and library name. 5408c3c9db83Smrg if test "X$installed" = Xyes; then 5409c3c9db83Smrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5410c3c9db83Smrg func_warning "library \`$lib' was moved." 5411c3c9db83Smrg dir="$ladir" 5412c3c9db83Smrg absdir="$abs_ladir" 5413c3c9db83Smrg libdir="$abs_ladir" 5414c3c9db83Smrg else 5415c3c9db83Smrg dir="$libdir" 5416c3c9db83Smrg absdir="$libdir" 5417c3c9db83Smrg fi 5418c3c9db83Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 5419c3c9db83Smrg else 5420c3c9db83Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5421c3c9db83Smrg dir="$ladir" 5422c3c9db83Smrg absdir="$abs_ladir" 5423c3c9db83Smrg # Remove this search path later 5424c3c9db83Smrg notinst_path="$notinst_path $abs_ladir" 5425c3c9db83Smrg else 5426c3c9db83Smrg dir="$ladir/$objdir" 5427c3c9db83Smrg absdir="$abs_ladir/$objdir" 5428c3c9db83Smrg # Remove this search path later 5429c3c9db83Smrg notinst_path="$notinst_path $abs_ladir" 5430c3c9db83Smrg fi 5431c3c9db83Smrg fi # $installed = yes 5432c3c9db83Smrg func_stripname 'lib' '.la' "$laname" 5433c3c9db83Smrg name=$func_stripname_result 5434c3c9db83Smrg 5435c3c9db83Smrg # This library was specified with -dlpreopen. 5436c3c9db83Smrg if test "$pass" = dlpreopen; then 5437c3c9db83Smrg if test -z "$libdir" && test "$linkmode" = prog; then 5438c3c9db83Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 5439c3c9db83Smrg fi 5440c3c9db83Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 5441c3c9db83Smrg # are required to link). 5442c3c9db83Smrg if test -n "$old_library"; then 5443c3c9db83Smrg newdlprefiles="$newdlprefiles $dir/$old_library" 5444c3c9db83Smrg # Keep a list of preopened convenience libraries to check 5445c3c9db83Smrg # that they are being used correctly in the link pass. 5446c3c9db83Smrg test -z "$libdir" && \ 5447c3c9db83Smrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 5448c3c9db83Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 5449c3c9db83Smrg elif test -n "$dlname"; then 5450c3c9db83Smrg newdlprefiles="$newdlprefiles $dir/$dlname" 5451c3c9db83Smrg else 5452c3c9db83Smrg newdlprefiles="$newdlprefiles $dir/$linklib" 5453c3c9db83Smrg fi 5454c3c9db83Smrg fi # $pass = dlpreopen 5455c3c9db83Smrg 5456c3c9db83Smrg if test -z "$libdir"; then 5457c3c9db83Smrg # Link the convenience library 5458c3c9db83Smrg if test "$linkmode" = lib; then 5459c3c9db83Smrg deplibs="$dir/$old_library $deplibs" 5460c3c9db83Smrg elif test "$linkmode,$pass" = "prog,link"; then 5461c3c9db83Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 5462c3c9db83Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 5463c3c9db83Smrg else 5464c3c9db83Smrg deplibs="$lib $deplibs" # used for prog,scan pass 5465c3c9db83Smrg fi 5466c3c9db83Smrg continue 5467c3c9db83Smrg fi 5468c3c9db83Smrg 5469c3c9db83Smrg 5470c3c9db83Smrg if test "$linkmode" = prog && test "$pass" != link; then 5471c3c9db83Smrg newlib_search_path="$newlib_search_path $ladir" 5472c3c9db83Smrg deplibs="$lib $deplibs" 5473c3c9db83Smrg 5474c3c9db83Smrg linkalldeplibs=no 5475c3c9db83Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 5476c3c9db83Smrg test "$build_libtool_libs" = no; then 5477c3c9db83Smrg linkalldeplibs=yes 5478c3c9db83Smrg fi 5479c3c9db83Smrg 5480c3c9db83Smrg tmp_libs= 5481c3c9db83Smrg for deplib in $dependency_libs; do 5482c3c9db83Smrg case $deplib in 5483c3c9db83Smrg -L*) func_stripname '-L' '' "$deplib" 5484c3c9db83Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 5485c3c9db83Smrg ;; 5486c3c9db83Smrg esac 5487c3c9db83Smrg # Need to link against all dependency_libs? 5488c3c9db83Smrg if test "$linkalldeplibs" = yes; then 5489c3c9db83Smrg deplibs="$deplib $deplibs" 5490c3c9db83Smrg else 5491c3c9db83Smrg # Need to hardcode shared library paths 5492c3c9db83Smrg # or/and link against static libraries 5493c3c9db83Smrg newdependency_libs="$deplib $newdependency_libs" 5494c3c9db83Smrg fi 5495c3c9db83Smrg if $opt_duplicate_deps ; then 5496c3c9db83Smrg case "$tmp_libs " in 5497c3c9db83Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5498c3c9db83Smrg esac 5499c3c9db83Smrg fi 5500c3c9db83Smrg tmp_libs="$tmp_libs $deplib" 5501c3c9db83Smrg done # for deplib 5502c3c9db83Smrg continue 5503c3c9db83Smrg fi # $linkmode = prog... 5504c3c9db83Smrg 5505c3c9db83Smrg if test "$linkmode,$pass" = "prog,link"; then 5506c3c9db83Smrg if test -n "$library_names" && 5507c3c9db83Smrg { { test "$prefer_static_libs" = no || 5508c3c9db83Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 5509c3c9db83Smrg test -z "$old_library"; }; then 5510c3c9db83Smrg # We need to hardcode the library path 5511c3c9db83Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 5512c3c9db83Smrg # Make sure the rpath contains only unique directories. 5513c3c9db83Smrg case "$temp_rpath:" in 5514c3c9db83Smrg *"$absdir:"*) ;; 5515c3c9db83Smrg *) temp_rpath="$temp_rpath$absdir:" ;; 5516c3c9db83Smrg esac 5517c3c9db83Smrg fi 5518c3c9db83Smrg 5519c3c9db83Smrg # Hardcode the library path. 5520c3c9db83Smrg # Skip directories that are in the system default run-time 5521c3c9db83Smrg # search path. 5522c3c9db83Smrg case " $sys_lib_dlsearch_path " in 5523c3c9db83Smrg *" $absdir "*) ;; 5524c3c9db83Smrg *) 5525c3c9db83Smrg case "$compile_rpath " in 5526c3c9db83Smrg *" $absdir "*) ;; 5527c3c9db83Smrg *) compile_rpath="$compile_rpath $absdir" 5528c3c9db83Smrg esac 5529c3c9db83Smrg ;; 5530c3c9db83Smrg esac 5531c3c9db83Smrg case " $sys_lib_dlsearch_path " in 5532c3c9db83Smrg *" $libdir "*) ;; 5533c3c9db83Smrg *) 5534c3c9db83Smrg case "$finalize_rpath " in 5535c3c9db83Smrg *" $libdir "*) ;; 5536c3c9db83Smrg *) finalize_rpath="$finalize_rpath $libdir" 5537c3c9db83Smrg esac 5538c3c9db83Smrg ;; 5539c3c9db83Smrg esac 5540c3c9db83Smrg fi # $linkmode,$pass = prog,link... 5541c3c9db83Smrg 5542c3c9db83Smrg if test "$alldeplibs" = yes && 5543c3c9db83Smrg { test "$deplibs_check_method" = pass_all || 5544c3c9db83Smrg { test "$build_libtool_libs" = yes && 5545c3c9db83Smrg test -n "$library_names"; }; }; then 5546c3c9db83Smrg # We only need to search for static libraries 5547c3c9db83Smrg continue 5548c3c9db83Smrg fi 5549c3c9db83Smrg fi 5550c3c9db83Smrg 5551c3c9db83Smrg link_static=no # Whether the deplib will be linked statically 5552c3c9db83Smrg use_static_libs=$prefer_static_libs 5553c3c9db83Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 5554c3c9db83Smrg use_static_libs=no 5555c3c9db83Smrg fi 5556c3c9db83Smrg if test -n "$library_names" && 5557c3c9db83Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 5558c3c9db83Smrg case $host in 5559c3c9db83Smrg *cygwin* | *mingw* | *cegcc*) 5560c3c9db83Smrg # No point in relinking DLLs because paths are not encoded 5561c3c9db83Smrg notinst_deplibs="$notinst_deplibs $lib" 5562c3c9db83Smrg need_relink=no 5563c3c9db83Smrg ;; 5564c3c9db83Smrg *) 5565c3c9db83Smrg if test "$installed" = no; then 5566c3c9db83Smrg notinst_deplibs="$notinst_deplibs $lib" 5567c3c9db83Smrg need_relink=yes 5568c3c9db83Smrg fi 5569c3c9db83Smrg ;; 5570c3c9db83Smrg esac 5571c3c9db83Smrg # This is a shared library 5572c3c9db83Smrg 5573c3c9db83Smrg # Warn about portability, can't link against -module's on some 5574c3c9db83Smrg # systems (darwin). Don't bleat about dlopened modules though! 5575c3c9db83Smrg dlopenmodule="" 5576c3c9db83Smrg for dlpremoduletest in $dlprefiles; do 5577c3c9db83Smrg if test "X$dlpremoduletest" = "X$lib"; then 5578c3c9db83Smrg dlopenmodule="$dlpremoduletest" 5579c3c9db83Smrg break 5580c3c9db83Smrg fi 5581c3c9db83Smrg done 5582c3c9db83Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 5583c3c9db83Smrg $ECHO 5584c3c9db83Smrg if test "$linkmode" = prog; then 5585c3c9db83Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 5586c3c9db83Smrg else 5587c3c9db83Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 5588c3c9db83Smrg fi 5589c3c9db83Smrg $ECHO "*** $linklib is not portable!" 5590c3c9db83Smrg fi 5591c3c9db83Smrg if test "$linkmode" = lib && 5592c3c9db83Smrg test "$hardcode_into_libs" = yes; then 5593c3c9db83Smrg # Hardcode the library path. 5594c3c9db83Smrg # Skip directories that are in the system default run-time 5595c3c9db83Smrg # search path. 5596c3c9db83Smrg case " $sys_lib_dlsearch_path " in 5597c3c9db83Smrg *" $absdir "*) ;; 5598c3c9db83Smrg *) 5599c3c9db83Smrg case "$compile_rpath " in 5600c3c9db83Smrg *" $absdir "*) ;; 5601c3c9db83Smrg *) compile_rpath="$compile_rpath $absdir" 5602c3c9db83Smrg esac 5603c3c9db83Smrg ;; 5604c3c9db83Smrg esac 5605c3c9db83Smrg case " $sys_lib_dlsearch_path " in 5606c3c9db83Smrg *" $libdir "*) ;; 5607c3c9db83Smrg *) 5608c3c9db83Smrg case "$finalize_rpath " in 5609c3c9db83Smrg *" $libdir "*) ;; 5610c3c9db83Smrg *) finalize_rpath="$finalize_rpath $libdir" 5611c3c9db83Smrg esac 5612c3c9db83Smrg ;; 5613c3c9db83Smrg esac 5614c3c9db83Smrg fi 5615c3c9db83Smrg 5616c3c9db83Smrg if test -n "$old_archive_from_expsyms_cmds"; then 5617c3c9db83Smrg # figure out the soname 5618c3c9db83Smrg set dummy $library_names 5619c3c9db83Smrg shift 5620c3c9db83Smrg realname="$1" 5621c3c9db83Smrg shift 5622c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 5623c3c9db83Smrg # use dlname if we got it. it's perfectly good, no? 5624c3c9db83Smrg if test -n "$dlname"; then 5625c3c9db83Smrg soname="$dlname" 5626c3c9db83Smrg elif test -n "$soname_spec"; then 5627c3c9db83Smrg # bleh windows 5628c3c9db83Smrg case $host in 5629c3c9db83Smrg *cygwin* | mingw* | *cegcc*) 5630c3c9db83Smrg func_arith $current - $age 5631c3c9db83Smrg major=$func_arith_result 5632c3c9db83Smrg versuffix="-$major" 5633c3c9db83Smrg ;; 5634c3c9db83Smrg esac 5635c3c9db83Smrg eval soname=\"$soname_spec\" 5636c3c9db83Smrg else 5637c3c9db83Smrg soname="$realname" 5638c3c9db83Smrg fi 5639c3c9db83Smrg 5640c3c9db83Smrg # Make a new name for the extract_expsyms_cmds to use 5641c3c9db83Smrg soroot="$soname" 5642c3c9db83Smrg func_basename "$soroot" 5643c3c9db83Smrg soname="$func_basename_result" 5644c3c9db83Smrg func_stripname 'lib' '.dll' "$soname" 5645c3c9db83Smrg newlib=libimp-$func_stripname_result.a 5646c3c9db83Smrg 5647c3c9db83Smrg # If the library has no export list, then create one now 5648c3c9db83Smrg if test -f "$output_objdir/$soname-def"; then : 5649c3c9db83Smrg else 5650c3c9db83Smrg func_verbose "extracting exported symbol list from \`$soname'" 5651c3c9db83Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 5652c3c9db83Smrg fi 5653c3c9db83Smrg 5654c3c9db83Smrg # Create $newlib 5655c3c9db83Smrg if test -f "$output_objdir/$newlib"; then :; else 5656c3c9db83Smrg func_verbose "generating import library for \`$soname'" 5657c3c9db83Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 5658c3c9db83Smrg fi 5659c3c9db83Smrg # make sure the library variables are pointing to the new library 5660c3c9db83Smrg dir=$output_objdir 5661c3c9db83Smrg linklib=$newlib 5662c3c9db83Smrg fi # test -n "$old_archive_from_expsyms_cmds" 5663c3c9db83Smrg 5664c3c9db83Smrg if test "$linkmode" = prog || test "$mode" != relink; then 5665c3c9db83Smrg add_shlibpath= 5666c3c9db83Smrg add_dir= 5667c3c9db83Smrg add= 5668c3c9db83Smrg lib_linked=yes 5669c3c9db83Smrg case $hardcode_action in 5670c3c9db83Smrg immediate | unsupported) 5671c3c9db83Smrg if test "$hardcode_direct" = no; then 5672c3c9db83Smrg add="$dir/$linklib" 5673c3c9db83Smrg case $host in 5674c3c9db83Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 5675c3c9db83Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 5676c3c9db83Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 5677c3c9db83Smrg *-*-unixware7*) add_dir="-L$dir" ;; 5678c3c9db83Smrg *-*-darwin* ) 5679c3c9db83Smrg # if the lib is a (non-dlopened) module then we can not 5680c3c9db83Smrg # link against it, someone is ignoring the earlier warnings 5681c3c9db83Smrg if /usr/bin/file -L $add 2> /dev/null | 5682c3c9db83Smrg $GREP ": [^:]* bundle" >/dev/null ; then 5683c3c9db83Smrg if test "X$dlopenmodule" != "X$lib"; then 5684c3c9db83Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 5685c3c9db83Smrg if test -z "$old_library" ; then 5686c3c9db83Smrg $ECHO 5687c3c9db83Smrg $ECHO "*** And there doesn't seem to be a static archive available" 5688c3c9db83Smrg $ECHO "*** The link will probably fail, sorry" 5689c3c9db83Smrg else 5690c3c9db83Smrg add="$dir/$old_library" 5691c3c9db83Smrg fi 5692c3c9db83Smrg elif test -n "$old_library"; then 5693c3c9db83Smrg add="$dir/$old_library" 5694c3c9db83Smrg fi 5695c3c9db83Smrg fi 5696c3c9db83Smrg esac 5697c3c9db83Smrg elif test "$hardcode_minus_L" = no; then 5698c3c9db83Smrg case $host in 5699c3c9db83Smrg *-*-sunos*) add_shlibpath="$dir" ;; 5700c3c9db83Smrg esac 5701c3c9db83Smrg add_dir="-L$dir" 5702c3c9db83Smrg add="-l$name" 5703c3c9db83Smrg elif test "$hardcode_shlibpath_var" = no; then 5704c3c9db83Smrg add_shlibpath="$dir" 5705c3c9db83Smrg add="-l$name" 5706c3c9db83Smrg else 5707c3c9db83Smrg lib_linked=no 5708c3c9db83Smrg fi 5709c3c9db83Smrg ;; 5710c3c9db83Smrg relink) 5711c3c9db83Smrg if test "$hardcode_direct" = yes && 5712c3c9db83Smrg test "$hardcode_direct_absolute" = no; then 5713c3c9db83Smrg add="$dir/$linklib" 5714c3c9db83Smrg elif test "$hardcode_minus_L" = yes; then 5715c3c9db83Smrg add_dir="-L$dir" 5716c3c9db83Smrg # Try looking first in the location we're being installed to. 5717c3c9db83Smrg if test -n "$inst_prefix_dir"; then 5718c3c9db83Smrg case $libdir in 5719c3c9db83Smrg [\\/]*) 5720c3c9db83Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 5721c3c9db83Smrg ;; 5722c3c9db83Smrg esac 5723c3c9db83Smrg fi 5724c3c9db83Smrg add="-l$name" 5725c3c9db83Smrg elif test "$hardcode_shlibpath_var" = yes; then 5726c3c9db83Smrg add_shlibpath="$dir" 5727c3c9db83Smrg add="-l$name" 5728c3c9db83Smrg else 5729c3c9db83Smrg lib_linked=no 5730c3c9db83Smrg fi 5731c3c9db83Smrg ;; 5732c3c9db83Smrg *) lib_linked=no ;; 5733c3c9db83Smrg esac 5734c3c9db83Smrg 5735c3c9db83Smrg if test "$lib_linked" != yes; then 5736c3c9db83Smrg func_fatal_configuration "unsupported hardcode properties" 5737c3c9db83Smrg fi 5738c3c9db83Smrg 5739c3c9db83Smrg if test -n "$add_shlibpath"; then 5740c3c9db83Smrg case :$compile_shlibpath: in 5741c3c9db83Smrg *":$add_shlibpath:"*) ;; 5742c3c9db83Smrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 5743c3c9db83Smrg esac 5744c3c9db83Smrg fi 5745c3c9db83Smrg if test "$linkmode" = prog; then 5746c3c9db83Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 5747c3c9db83Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 5748c3c9db83Smrg else 5749c3c9db83Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 5750c3c9db83Smrg test -n "$add" && deplibs="$add $deplibs" 5751c3c9db83Smrg if test "$hardcode_direct" != yes && 5752c3c9db83Smrg test "$hardcode_minus_L" != yes && 5753c3c9db83Smrg test "$hardcode_shlibpath_var" = yes; then 5754c3c9db83Smrg case :$finalize_shlibpath: in 5755c3c9db83Smrg *":$libdir:"*) ;; 5756c3c9db83Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 5757c3c9db83Smrg esac 5758c3c9db83Smrg fi 5759c3c9db83Smrg fi 5760c3c9db83Smrg fi 5761c3c9db83Smrg 5762c3c9db83Smrg if test "$linkmode" = prog || test "$mode" = relink; then 5763c3c9db83Smrg add_shlibpath= 5764c3c9db83Smrg add_dir= 5765c3c9db83Smrg add= 5766c3c9db83Smrg # Finalize command for both is simple: just hardcode it. 5767c3c9db83Smrg if test "$hardcode_direct" = yes && 5768c3c9db83Smrg test "$hardcode_direct_absolute" = no; then 5769c3c9db83Smrg add="$libdir/$linklib" 5770c3c9db83Smrg elif test "$hardcode_minus_L" = yes; then 5771c3c9db83Smrg add_dir="-L$libdir" 5772c3c9db83Smrg add="-l$name" 5773c3c9db83Smrg elif test "$hardcode_shlibpath_var" = yes; then 5774c3c9db83Smrg case :$finalize_shlibpath: in 5775c3c9db83Smrg *":$libdir:"*) ;; 5776c3c9db83Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 5777c3c9db83Smrg esac 5778c3c9db83Smrg add="-l$name" 5779c3c9db83Smrg elif test "$hardcode_automatic" = yes; then 5780c3c9db83Smrg if test -n "$inst_prefix_dir" && 5781c3c9db83Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 5782c3c9db83Smrg add="$inst_prefix_dir$libdir/$linklib" 5783c3c9db83Smrg else 5784c3c9db83Smrg add="$libdir/$linklib" 5785c3c9db83Smrg fi 5786c3c9db83Smrg else 5787c3c9db83Smrg # We cannot seem to hardcode it, guess we'll fake it. 5788c3c9db83Smrg add_dir="-L$libdir" 5789c3c9db83Smrg # Try looking first in the location we're being installed to. 5790c3c9db83Smrg if test -n "$inst_prefix_dir"; then 5791c3c9db83Smrg case $libdir in 5792c3c9db83Smrg [\\/]*) 5793c3c9db83Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 5794c3c9db83Smrg ;; 5795c3c9db83Smrg esac 5796c3c9db83Smrg fi 5797c3c9db83Smrg add="-l$name" 5798c3c9db83Smrg fi 5799c3c9db83Smrg 5800c3c9db83Smrg if test "$linkmode" = prog; then 5801c3c9db83Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 5802c3c9db83Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 5803c3c9db83Smrg else 5804c3c9db83Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 5805c3c9db83Smrg test -n "$add" && deplibs="$add $deplibs" 5806c3c9db83Smrg fi 5807c3c9db83Smrg fi 5808c3c9db83Smrg elif test "$linkmode" = prog; then 5809c3c9db83Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 5810c3c9db83Smrg # is not unsupported. This is valid on all known static and 5811c3c9db83Smrg # shared platforms. 5812c3c9db83Smrg if test "$hardcode_direct" != unsupported; then 5813c3c9db83Smrg test -n "$old_library" && linklib="$old_library" 5814c3c9db83Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 5815c3c9db83Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 5816c3c9db83Smrg else 5817c3c9db83Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 5818c3c9db83Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 5819c3c9db83Smrg fi 5820c3c9db83Smrg elif test "$build_libtool_libs" = yes; then 5821c3c9db83Smrg # Not a shared library 5822c3c9db83Smrg if test "$deplibs_check_method" != pass_all; then 5823c3c9db83Smrg # We're trying link a shared library against a static one 5824c3c9db83Smrg # but the system doesn't support it. 5825c3c9db83Smrg 5826c3c9db83Smrg # Just print a warning and add the library to dependency_libs so 5827c3c9db83Smrg # that the program can be linked against the static library. 5828c3c9db83Smrg $ECHO 5829c3c9db83Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 5830c3c9db83Smrg $ECHO "*** I have the capability to make that library automatically link in when" 5831c3c9db83Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 5832c3c9db83Smrg $ECHO "*** shared version of the library, which you do not appear to have." 5833c3c9db83Smrg if test "$module" = yes; then 5834c3c9db83Smrg $ECHO "*** But as you try to build a module library, libtool will still create " 5835c3c9db83Smrg $ECHO "*** a static module, that should work as long as the dlopening application" 5836c3c9db83Smrg $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." 5837c3c9db83Smrg if test -z "$global_symbol_pipe"; then 5838c3c9db83Smrg $ECHO 5839c3c9db83Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 5840c3c9db83Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 5841c3c9db83Smrg $ECHO "*** not find such a program. So, this module is probably useless." 5842c3c9db83Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 5843c3c9db83Smrg fi 5844c3c9db83Smrg if test "$build_old_libs" = no; then 5845c3c9db83Smrg build_libtool_libs=module 5846c3c9db83Smrg build_old_libs=yes 5847c3c9db83Smrg else 5848c3c9db83Smrg build_libtool_libs=no 5849c3c9db83Smrg fi 5850c3c9db83Smrg fi 5851c3c9db83Smrg else 5852c3c9db83Smrg deplibs="$dir/$old_library $deplibs" 5853c3c9db83Smrg link_static=yes 5854c3c9db83Smrg fi 5855c3c9db83Smrg fi # link shared/static library? 5856c3c9db83Smrg 5857c3c9db83Smrg if test "$linkmode" = lib; then 5858c3c9db83Smrg if test -n "$dependency_libs" && 5859c3c9db83Smrg { test "$hardcode_into_libs" != yes || 5860c3c9db83Smrg test "$build_old_libs" = yes || 5861c3c9db83Smrg test "$link_static" = yes; }; then 5862c3c9db83Smrg # Extract -R from dependency_libs 5863c3c9db83Smrg temp_deplibs= 5864c3c9db83Smrg for libdir in $dependency_libs; do 5865c3c9db83Smrg case $libdir in 5866c3c9db83Smrg -R*) func_stripname '-R' '' "$libdir" 5867c3c9db83Smrg temp_xrpath=$func_stripname_result 5868c3c9db83Smrg case " $xrpath " in 5869c3c9db83Smrg *" $temp_xrpath "*) ;; 5870c3c9db83Smrg *) xrpath="$xrpath $temp_xrpath";; 5871c3c9db83Smrg esac;; 5872c3c9db83Smrg *) temp_deplibs="$temp_deplibs $libdir";; 5873c3c9db83Smrg esac 5874c3c9db83Smrg done 5875c3c9db83Smrg dependency_libs="$temp_deplibs" 5876c3c9db83Smrg fi 5877c3c9db83Smrg 5878c3c9db83Smrg newlib_search_path="$newlib_search_path $absdir" 5879c3c9db83Smrg # Link against this library 5880c3c9db83Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 5881c3c9db83Smrg # ... and its dependency_libs 5882c3c9db83Smrg tmp_libs= 5883c3c9db83Smrg for deplib in $dependency_libs; do 5884c3c9db83Smrg newdependency_libs="$deplib $newdependency_libs" 5885c3c9db83Smrg if $opt_duplicate_deps ; then 5886c3c9db83Smrg case "$tmp_libs " in 5887c3c9db83Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5888c3c9db83Smrg esac 5889c3c9db83Smrg fi 5890c3c9db83Smrg tmp_libs="$tmp_libs $deplib" 5891c3c9db83Smrg done 5892c3c9db83Smrg 5893c3c9db83Smrg if test "$link_all_deplibs" != no; then 5894c3c9db83Smrg # Add the search paths of all dependency libraries 5895c3c9db83Smrg for deplib in $dependency_libs; do 5896c3c9db83Smrg case $deplib in 5897c3c9db83Smrg -L*) path="$deplib" ;; 5898c3c9db83Smrg *.la) 5899c3c9db83Smrg func_dirname "$deplib" "" "." 5900c3c9db83Smrg dir="$func_dirname_result" 5901c3c9db83Smrg # We need an absolute path. 5902c3c9db83Smrg case $dir in 5903c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 5904c3c9db83Smrg *) 5905c3c9db83Smrg absdir=`cd "$dir" && pwd` 5906c3c9db83Smrg if test -z "$absdir"; then 5907c3c9db83Smrg func_warning "cannot determine absolute directory name of \`$dir'" 5908c3c9db83Smrg absdir="$dir" 5909c3c9db83Smrg fi 5910c3c9db83Smrg ;; 5911c3c9db83Smrg esac 5912c3c9db83Smrg if $GREP "^installed=no" $deplib > /dev/null; then 5913c3c9db83Smrg case $host in 5914c3c9db83Smrg *-*-darwin*) 5915c3c9db83Smrg depdepl= 5916c3c9db83Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 5917c3c9db83Smrg if test -n "$deplibrary_names" ; then 5918c3c9db83Smrg for tmp in $deplibrary_names ; do 5919c3c9db83Smrg depdepl=$tmp 5920c3c9db83Smrg done 5921c3c9db83Smrg if test -f "$absdir/$objdir/$depdepl" ; then 5922c3c9db83Smrg depdepl="$absdir/$objdir/$depdepl" 5923c3c9db83Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 5924c3c9db83Smrg if test -z "$darwin_install_name"; then 5925c3c9db83Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 5926c3c9db83Smrg fi 5927c3c9db83Smrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 5928c3c9db83Smrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 5929c3c9db83Smrg path= 5930c3c9db83Smrg fi 5931c3c9db83Smrg fi 5932c3c9db83Smrg ;; 5933c3c9db83Smrg *) 5934c3c9db83Smrg path="-L$absdir/$objdir" 5935c3c9db83Smrg ;; 5936c3c9db83Smrg esac 5937c3c9db83Smrg else 5938c3c9db83Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 5939c3c9db83Smrg test -z "$libdir" && \ 5940c3c9db83Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 5941c3c9db83Smrg test "$absdir" != "$libdir" && \ 5942c3c9db83Smrg func_warning "\`$deplib' seems to be moved" 5943c3c9db83Smrg 5944c3c9db83Smrg path="-L$absdir" 5945c3c9db83Smrg fi 5946c3c9db83Smrg ;; 5947c3c9db83Smrg esac 5948c3c9db83Smrg case " $deplibs " in 5949c3c9db83Smrg *" $path "*) ;; 5950c3c9db83Smrg *) deplibs="$path $deplibs" ;; 5951c3c9db83Smrg esac 5952c3c9db83Smrg done 5953c3c9db83Smrg fi # link_all_deplibs != no 5954c3c9db83Smrg fi # linkmode = lib 5955c3c9db83Smrg done # for deplib in $libs 5956c3c9db83Smrg if test "$pass" = link; then 5957c3c9db83Smrg if test "$linkmode" = "prog"; then 5958c3c9db83Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 5959c3c9db83Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 5960c3c9db83Smrg else 5961c3c9db83Smrg compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 5962c3c9db83Smrg fi 5963c3c9db83Smrg fi 5964c3c9db83Smrg dependency_libs="$newdependency_libs" 5965c3c9db83Smrg if test "$pass" = dlpreopen; then 5966c3c9db83Smrg # Link the dlpreopened libraries before other libraries 5967c3c9db83Smrg for deplib in $save_deplibs; do 5968c3c9db83Smrg deplibs="$deplib $deplibs" 5969c3c9db83Smrg done 5970c3c9db83Smrg fi 5971c3c9db83Smrg if test "$pass" != dlopen; then 5972c3c9db83Smrg if test "$pass" != conv; then 5973c3c9db83Smrg # Make sure lib_search_path contains only unique directories. 5974c3c9db83Smrg lib_search_path= 5975c3c9db83Smrg for dir in $newlib_search_path; do 5976c3c9db83Smrg case "$lib_search_path " in 5977c3c9db83Smrg *" $dir "*) ;; 5978c3c9db83Smrg *) lib_search_path="$lib_search_path $dir" ;; 5979c3c9db83Smrg esac 5980c3c9db83Smrg done 5981c3c9db83Smrg newlib_search_path= 5982c3c9db83Smrg fi 5983c3c9db83Smrg 5984c3c9db83Smrg if test "$linkmode,$pass" != "prog,link"; then 5985c3c9db83Smrg vars="deplibs" 5986c3c9db83Smrg else 5987c3c9db83Smrg vars="compile_deplibs finalize_deplibs" 5988c3c9db83Smrg fi 5989c3c9db83Smrg for var in $vars dependency_libs; do 5990c3c9db83Smrg # Add libraries to $var in reverse order 5991c3c9db83Smrg eval tmp_libs=\"\$$var\" 5992c3c9db83Smrg new_libs= 5993c3c9db83Smrg for deplib in $tmp_libs; do 5994c3c9db83Smrg # FIXME: Pedantically, this is the right thing to do, so 5995c3c9db83Smrg # that some nasty dependency loop isn't accidentally 5996c3c9db83Smrg # broken: 5997c3c9db83Smrg #new_libs="$deplib $new_libs" 5998c3c9db83Smrg # Pragmatically, this seems to cause very few problems in 5999c3c9db83Smrg # practice: 6000c3c9db83Smrg case $deplib in 6001c3c9db83Smrg -L*) new_libs="$deplib $new_libs" ;; 6002c3c9db83Smrg -R*) ;; 6003c3c9db83Smrg *) 6004c3c9db83Smrg # And here is the reason: when a library appears more 6005c3c9db83Smrg # than once as an explicit dependence of a library, or 6006c3c9db83Smrg # is implicitly linked in more than once by the 6007c3c9db83Smrg # compiler, it is considered special, and multiple 6008c3c9db83Smrg # occurrences thereof are not removed. Compare this 6009c3c9db83Smrg # with having the same library being listed as a 6010c3c9db83Smrg # dependency of multiple other libraries: in this case, 6011c3c9db83Smrg # we know (pedantically, we assume) the library does not 6012c3c9db83Smrg # need to be listed more than once, so we keep only the 6013c3c9db83Smrg # last copy. This is not always right, but it is rare 6014c3c9db83Smrg # enough that we require users that really mean to play 6015c3c9db83Smrg # such unportable linking tricks to link the library 6016c3c9db83Smrg # using -Wl,-lname, so that libtool does not consider it 6017c3c9db83Smrg # for duplicate removal. 6018c3c9db83Smrg case " $specialdeplibs " in 6019c3c9db83Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 6020c3c9db83Smrg *) 6021c3c9db83Smrg case " $new_libs " in 6022c3c9db83Smrg *" $deplib "*) ;; 6023c3c9db83Smrg *) new_libs="$deplib $new_libs" ;; 6024c3c9db83Smrg esac 6025c3c9db83Smrg ;; 6026c3c9db83Smrg esac 6027c3c9db83Smrg ;; 6028c3c9db83Smrg esac 6029c3c9db83Smrg done 6030c3c9db83Smrg tmp_libs= 6031c3c9db83Smrg for deplib in $new_libs; do 6032c3c9db83Smrg case $deplib in 6033c3c9db83Smrg -L*) 6034c3c9db83Smrg case " $tmp_libs " in 6035c3c9db83Smrg *" $deplib "*) ;; 6036c3c9db83Smrg *) tmp_libs="$tmp_libs $deplib" ;; 6037c3c9db83Smrg esac 6038c3c9db83Smrg ;; 6039c3c9db83Smrg *) tmp_libs="$tmp_libs $deplib" ;; 6040c3c9db83Smrg esac 6041c3c9db83Smrg done 6042c3c9db83Smrg eval $var=\"$tmp_libs\" 6043c3c9db83Smrg done # for var 6044c3c9db83Smrg fi 6045c3c9db83Smrg # Last step: remove runtime libs from dependency_libs 6046c3c9db83Smrg # (they stay in deplibs) 6047c3c9db83Smrg tmp_libs= 6048c3c9db83Smrg for i in $dependency_libs ; do 6049c3c9db83Smrg case " $predeps $postdeps $compiler_lib_search_path " in 6050c3c9db83Smrg *" $i "*) 6051c3c9db83Smrg i="" 6052c3c9db83Smrg ;; 6053c3c9db83Smrg esac 6054c3c9db83Smrg if test -n "$i" ; then 6055c3c9db83Smrg tmp_libs="$tmp_libs $i" 6056c3c9db83Smrg fi 6057c3c9db83Smrg done 6058c3c9db83Smrg dependency_libs=$tmp_libs 6059c3c9db83Smrg done # for pass 6060c3c9db83Smrg if test "$linkmode" = prog; then 6061c3c9db83Smrg dlfiles="$newdlfiles" 6062c3c9db83Smrg fi 6063c3c9db83Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 6064c3c9db83Smrg dlprefiles="$newdlprefiles" 6065c3c9db83Smrg fi 6066c3c9db83Smrg 6067c3c9db83Smrg case $linkmode in 6068c3c9db83Smrg oldlib) 6069c3c9db83Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 6070c3c9db83Smrg func_warning "\`-dlopen' is ignored for archives" 6071c3c9db83Smrg fi 6072c3c9db83Smrg 6073c3c9db83Smrg case " $deplibs" in 6074c3c9db83Smrg *\ -l* | *\ -L*) 6075c3c9db83Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 6076c3c9db83Smrg esac 6077c3c9db83Smrg 6078c3c9db83Smrg test -n "$rpath" && \ 6079c3c9db83Smrg func_warning "\`-rpath' is ignored for archives" 6080c3c9db83Smrg 6081c3c9db83Smrg test -n "$xrpath" && \ 6082c3c9db83Smrg func_warning "\`-R' is ignored for archives" 6083c3c9db83Smrg 6084c3c9db83Smrg test -n "$vinfo" && \ 6085c3c9db83Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 6086c3c9db83Smrg 6087c3c9db83Smrg test -n "$release" && \ 6088c3c9db83Smrg func_warning "\`-release' is ignored for archives" 6089c3c9db83Smrg 6090c3c9db83Smrg test -n "$export_symbols$export_symbols_regex" && \ 6091c3c9db83Smrg func_warning "\`-export-symbols' is ignored for archives" 6092c3c9db83Smrg 6093c3c9db83Smrg # Now set the variables for building old libraries. 6094c3c9db83Smrg build_libtool_libs=no 6095c3c9db83Smrg oldlibs="$output" 6096c3c9db83Smrg objs="$objs$old_deplibs" 6097c3c9db83Smrg ;; 6098c3c9db83Smrg 6099c3c9db83Smrg lib) 6100c3c9db83Smrg # Make sure we only generate libraries of the form `libNAME.la'. 6101c3c9db83Smrg case $outputname in 6102c3c9db83Smrg lib*) 6103c3c9db83Smrg func_stripname 'lib' '.la' "$outputname" 6104c3c9db83Smrg name=$func_stripname_result 6105c3c9db83Smrg eval shared_ext=\"$shrext_cmds\" 6106c3c9db83Smrg eval libname=\"$libname_spec\" 6107c3c9db83Smrg ;; 6108c3c9db83Smrg *) 6109c3c9db83Smrg test "$module" = no && \ 6110c3c9db83Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 6111c3c9db83Smrg 6112c3c9db83Smrg if test "$need_lib_prefix" != no; then 6113c3c9db83Smrg # Add the "lib" prefix for modules if required 6114c3c9db83Smrg func_stripname '' '.la' "$outputname" 6115c3c9db83Smrg name=$func_stripname_result 6116c3c9db83Smrg eval shared_ext=\"$shrext_cmds\" 6117c3c9db83Smrg eval libname=\"$libname_spec\" 6118c3c9db83Smrg else 6119c3c9db83Smrg func_stripname '' '.la' "$outputname" 6120c3c9db83Smrg libname=$func_stripname_result 6121c3c9db83Smrg fi 6122c3c9db83Smrg ;; 6123c3c9db83Smrg esac 6124c3c9db83Smrg 6125c3c9db83Smrg if test -n "$objs"; then 6126c3c9db83Smrg if test "$deplibs_check_method" != pass_all; then 6127c3c9db83Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 6128c3c9db83Smrg else 6129c3c9db83Smrg $ECHO 6130c3c9db83Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 6131c3c9db83Smrg $ECHO "*** objects $objs is not portable!" 6132c3c9db83Smrg libobjs="$libobjs $objs" 6133c3c9db83Smrg fi 6134c3c9db83Smrg fi 6135c3c9db83Smrg 6136c3c9db83Smrg test "$dlself" != no && \ 6137c3c9db83Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 6138c3c9db83Smrg 6139c3c9db83Smrg set dummy $rpath 6140c3c9db83Smrg shift 6141c3c9db83Smrg test "$#" -gt 1 && \ 6142c3c9db83Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 6143c3c9db83Smrg 6144c3c9db83Smrg install_libdir="$1" 6145c3c9db83Smrg 6146c3c9db83Smrg oldlibs= 6147c3c9db83Smrg if test -z "$rpath"; then 6148c3c9db83Smrg if test "$build_libtool_libs" = yes; then 6149c3c9db83Smrg # Building a libtool convenience library. 6150c3c9db83Smrg # Some compilers have problems with a `.al' extension so 6151c3c9db83Smrg # convenience libraries should have the same extension an 6152c3c9db83Smrg # archive normally would. 6153c3c9db83Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 6154c3c9db83Smrg build_libtool_libs=convenience 6155c3c9db83Smrg build_old_libs=yes 6156c3c9db83Smrg fi 6157c3c9db83Smrg 6158c3c9db83Smrg test -n "$vinfo" && \ 6159c3c9db83Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 6160c3c9db83Smrg 6161c3c9db83Smrg test -n "$release" && \ 6162c3c9db83Smrg func_warning "\`-release' is ignored for convenience libraries" 6163c3c9db83Smrg else 6164c3c9db83Smrg 6165c3c9db83Smrg # Parse the version information argument. 6166c3c9db83Smrg save_ifs="$IFS"; IFS=':' 6167c3c9db83Smrg set dummy $vinfo 0 0 0 6168c3c9db83Smrg shift 6169c3c9db83Smrg IFS="$save_ifs" 6170c3c9db83Smrg 6171c3c9db83Smrg test -n "$7" && \ 6172c3c9db83Smrg func_fatal_help "too many parameters to \`-version-info'" 6173c3c9db83Smrg 6174c3c9db83Smrg # convert absolute version numbers to libtool ages 6175c3c9db83Smrg # this retains compatibility with .la files and attempts 6176c3c9db83Smrg # to make the code below a bit more comprehensible 6177c3c9db83Smrg 6178c3c9db83Smrg case $vinfo_number in 6179c3c9db83Smrg yes) 6180c3c9db83Smrg number_major="$1" 6181c3c9db83Smrg number_minor="$2" 6182c3c9db83Smrg number_revision="$3" 6183c3c9db83Smrg # 6184c3c9db83Smrg # There are really only two kinds -- those that 6185c3c9db83Smrg # use the current revision as the major version 6186c3c9db83Smrg # and those that subtract age and use age as 6187c3c9db83Smrg # a minor version. But, then there is irix 6188c3c9db83Smrg # which has an extra 1 added just for fun 6189c3c9db83Smrg # 6190c3c9db83Smrg case $version_type in 6191c3c9db83Smrg darwin|linux|osf|windows|none) 6192c3c9db83Smrg func_arith $number_major + $number_minor 6193c3c9db83Smrg current=$func_arith_result 6194c3c9db83Smrg age="$number_minor" 6195c3c9db83Smrg revision="$number_revision" 6196c3c9db83Smrg ;; 6197c3c9db83Smrg freebsd-aout|freebsd-elf|sunos) 6198c3c9db83Smrg current="$number_major" 6199c3c9db83Smrg revision="$number_minor" 6200c3c9db83Smrg age="0" 6201c3c9db83Smrg ;; 6202c3c9db83Smrg irix|nonstopux) 6203c3c9db83Smrg func_arith $number_major + $number_minor 6204c3c9db83Smrg current=$func_arith_result 6205c3c9db83Smrg age="$number_minor" 6206c3c9db83Smrg revision="$number_minor" 6207c3c9db83Smrg lt_irix_increment=no 6208c3c9db83Smrg ;; 6209c3c9db83Smrg esac 6210c3c9db83Smrg ;; 6211c3c9db83Smrg no) 6212c3c9db83Smrg current="$1" 6213c3c9db83Smrg revision="$2" 6214c3c9db83Smrg age="$3" 6215c3c9db83Smrg ;; 6216c3c9db83Smrg esac 6217c3c9db83Smrg 6218c3c9db83Smrg # Check that each of the things are valid numbers. 6219c3c9db83Smrg case $current in 6220c3c9db83Smrg 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]) ;; 6221c3c9db83Smrg *) 6222c3c9db83Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 6223c3c9db83Smrg func_fatal_error "\`$vinfo' is not valid version information" 6224c3c9db83Smrg ;; 6225c3c9db83Smrg esac 6226c3c9db83Smrg 6227c3c9db83Smrg case $revision in 6228c3c9db83Smrg 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]) ;; 6229c3c9db83Smrg *) 6230c3c9db83Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 6231c3c9db83Smrg func_fatal_error "\`$vinfo' is not valid version information" 6232c3c9db83Smrg ;; 6233c3c9db83Smrg esac 6234c3c9db83Smrg 6235c3c9db83Smrg case $age in 6236c3c9db83Smrg 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]) ;; 6237c3c9db83Smrg *) 6238c3c9db83Smrg func_error "AGE \`$age' must be a nonnegative integer" 6239c3c9db83Smrg func_fatal_error "\`$vinfo' is not valid version information" 6240c3c9db83Smrg ;; 6241c3c9db83Smrg esac 6242c3c9db83Smrg 6243c3c9db83Smrg if test "$age" -gt "$current"; then 6244c3c9db83Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 6245c3c9db83Smrg func_fatal_error "\`$vinfo' is not valid version information" 6246c3c9db83Smrg fi 6247c3c9db83Smrg 6248c3c9db83Smrg # Calculate the version variables. 6249c3c9db83Smrg major= 6250c3c9db83Smrg versuffix= 6251c3c9db83Smrg verstring= 6252c3c9db83Smrg case $version_type in 6253c3c9db83Smrg none) ;; 6254c3c9db83Smrg 6255c3c9db83Smrg darwin) 6256c3c9db83Smrg # Like Linux, but with the current version available in 6257c3c9db83Smrg # verstring for coding it into the library header 6258c3c9db83Smrg func_arith $current - $age 6259c3c9db83Smrg major=.$func_arith_result 6260c3c9db83Smrg versuffix="$major.$age.$revision" 6261c3c9db83Smrg # Darwin ld doesn't like 0 for these options... 6262c3c9db83Smrg func_arith $current + 1 6263c3c9db83Smrg minor_current=$func_arith_result 6264c3c9db83Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 6265c3c9db83Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 6266c3c9db83Smrg ;; 6267c3c9db83Smrg 6268c3c9db83Smrg freebsd-aout) 6269c3c9db83Smrg major=".$current" 6270c3c9db83Smrg versuffix=".$current.$revision"; 6271c3c9db83Smrg ;; 6272c3c9db83Smrg 6273c3c9db83Smrg freebsd-elf) 6274c3c9db83Smrg major=".$current" 6275c3c9db83Smrg versuffix=".$current" 6276c3c9db83Smrg ;; 6277c3c9db83Smrg 6278c3c9db83Smrg irix | nonstopux) 6279c3c9db83Smrg if test "X$lt_irix_increment" = "Xno"; then 6280c3c9db83Smrg func_arith $current - $age 6281c3c9db83Smrg else 6282c3c9db83Smrg func_arith $current - $age + 1 6283c3c9db83Smrg fi 6284c3c9db83Smrg major=$func_arith_result 6285c3c9db83Smrg 6286c3c9db83Smrg case $version_type in 6287c3c9db83Smrg nonstopux) verstring_prefix=nonstopux ;; 6288c3c9db83Smrg *) verstring_prefix=sgi ;; 6289c3c9db83Smrg esac 6290c3c9db83Smrg verstring="$verstring_prefix$major.$revision" 6291c3c9db83Smrg 6292c3c9db83Smrg # Add in all the interfaces that we are compatible with. 6293c3c9db83Smrg loop=$revision 6294c3c9db83Smrg while test "$loop" -ne 0; do 6295c3c9db83Smrg func_arith $revision - $loop 6296c3c9db83Smrg iface=$func_arith_result 6297c3c9db83Smrg func_arith $loop - 1 6298c3c9db83Smrg loop=$func_arith_result 6299c3c9db83Smrg verstring="$verstring_prefix$major.$iface:$verstring" 6300c3c9db83Smrg done 6301c3c9db83Smrg 6302c3c9db83Smrg # Before this point, $major must not contain `.'. 6303c3c9db83Smrg major=.$major 6304c3c9db83Smrg versuffix="$major.$revision" 6305c3c9db83Smrg ;; 6306c3c9db83Smrg 6307c3c9db83Smrg linux) 6308c3c9db83Smrg func_arith $current - $age 6309c3c9db83Smrg major=.$func_arith_result 6310c3c9db83Smrg versuffix="$major.$age.$revision" 6311c3c9db83Smrg ;; 6312c3c9db83Smrg 6313c3c9db83Smrg osf) 6314c3c9db83Smrg func_arith $current - $age 6315c3c9db83Smrg major=.$func_arith_result 6316c3c9db83Smrg versuffix=".$current.$age.$revision" 6317c3c9db83Smrg verstring="$current.$age.$revision" 6318c3c9db83Smrg 6319c3c9db83Smrg # Add in all the interfaces that we are compatible with. 6320c3c9db83Smrg loop=$age 6321c3c9db83Smrg while test "$loop" -ne 0; do 6322c3c9db83Smrg func_arith $current - $loop 6323c3c9db83Smrg iface=$func_arith_result 6324c3c9db83Smrg func_arith $loop - 1 6325c3c9db83Smrg loop=$func_arith_result 6326c3c9db83Smrg verstring="$verstring:${iface}.0" 6327c3c9db83Smrg done 6328c3c9db83Smrg 6329c3c9db83Smrg # Make executables depend on our current version. 6330c3c9db83Smrg verstring="$verstring:${current}.0" 6331c3c9db83Smrg ;; 6332c3c9db83Smrg 6333c3c9db83Smrg qnx) 6334c3c9db83Smrg major=".$current" 6335c3c9db83Smrg versuffix=".$current" 6336c3c9db83Smrg ;; 6337c3c9db83Smrg 6338c3c9db83Smrg sunos) 6339c3c9db83Smrg major=".$current" 6340c3c9db83Smrg versuffix=".$current.$revision" 6341c3c9db83Smrg ;; 6342c3c9db83Smrg 6343c3c9db83Smrg windows) 6344c3c9db83Smrg # Use '-' rather than '.', since we only want one 6345c3c9db83Smrg # extension on DOS 8.3 filesystems. 6346c3c9db83Smrg func_arith $current - $age 6347c3c9db83Smrg major=$func_arith_result 6348c3c9db83Smrg versuffix="-$major" 6349c3c9db83Smrg ;; 6350c3c9db83Smrg 6351c3c9db83Smrg *) 6352c3c9db83Smrg func_fatal_configuration "unknown library version type \`$version_type'" 6353c3c9db83Smrg ;; 6354c3c9db83Smrg esac 6355c3c9db83Smrg 6356c3c9db83Smrg # Clear the version info if we defaulted, and they specified a release. 6357c3c9db83Smrg if test -z "$vinfo" && test -n "$release"; then 6358c3c9db83Smrg major= 6359c3c9db83Smrg case $version_type in 6360c3c9db83Smrg darwin) 6361c3c9db83Smrg # we can't check for "0.0" in archive_cmds due to quoting 6362c3c9db83Smrg # problems, so we reset it completely 6363c3c9db83Smrg verstring= 6364c3c9db83Smrg ;; 6365c3c9db83Smrg *) 6366c3c9db83Smrg verstring="0.0" 6367c3c9db83Smrg ;; 6368c3c9db83Smrg esac 6369c3c9db83Smrg if test "$need_version" = no; then 6370c3c9db83Smrg versuffix= 6371c3c9db83Smrg else 6372c3c9db83Smrg versuffix=".0.0" 6373c3c9db83Smrg fi 6374c3c9db83Smrg fi 6375c3c9db83Smrg 6376c3c9db83Smrg # Remove version info from name if versioning should be avoided 6377c3c9db83Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 6378c3c9db83Smrg major= 6379c3c9db83Smrg versuffix= 6380c3c9db83Smrg verstring="" 6381c3c9db83Smrg fi 6382c3c9db83Smrg 6383c3c9db83Smrg # Check to see if the archive will have undefined symbols. 6384c3c9db83Smrg if test "$allow_undefined" = yes; then 6385c3c9db83Smrg if test "$allow_undefined_flag" = unsupported; then 6386c3c9db83Smrg func_warning "undefined symbols not allowed in $host shared libraries" 6387c3c9db83Smrg build_libtool_libs=no 6388c3c9db83Smrg build_old_libs=yes 6389c3c9db83Smrg fi 6390c3c9db83Smrg else 6391c3c9db83Smrg # Don't allow undefined symbols. 6392c3c9db83Smrg allow_undefined_flag="$no_undefined_flag" 6393c3c9db83Smrg fi 6394c3c9db83Smrg 6395c3c9db83Smrg fi 6396c3c9db83Smrg 6397c3c9db83Smrg func_generate_dlsyms "$libname" "$libname" "yes" 6398c3c9db83Smrg libobjs="$libobjs $symfileobj" 6399c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 6400c3c9db83Smrg 6401c3c9db83Smrg if test "$mode" != relink; then 6402c3c9db83Smrg # Remove our outputs, but don't remove object files since they 6403c3c9db83Smrg # may have been created when compiling PIC objects. 6404c3c9db83Smrg removelist= 6405c3c9db83Smrg tempremovelist=`$ECHO "$output_objdir/*"` 6406c3c9db83Smrg for p in $tempremovelist; do 6407c3c9db83Smrg case $p in 6408c3c9db83Smrg *.$objext | *.gcno) 6409c3c9db83Smrg ;; 6410c3c9db83Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 6411c3c9db83Smrg if test "X$precious_files_regex" != "X"; then 6412c3c9db83Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 6413c3c9db83Smrg then 6414c3c9db83Smrg continue 6415c3c9db83Smrg fi 6416c3c9db83Smrg fi 6417c3c9db83Smrg removelist="$removelist $p" 6418c3c9db83Smrg ;; 6419c3c9db83Smrg *) ;; 6420c3c9db83Smrg esac 6421c3c9db83Smrg done 6422c3c9db83Smrg test -n "$removelist" && \ 6423c3c9db83Smrg func_show_eval "${RM}r \$removelist" 6424c3c9db83Smrg fi 6425c3c9db83Smrg 6426c3c9db83Smrg # Now set the variables for building old libraries. 6427c3c9db83Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 6428c3c9db83Smrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 6429c3c9db83Smrg 6430c3c9db83Smrg # Transform .lo files to .o files. 6431c3c9db83Smrg oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 6432c3c9db83Smrg fi 6433c3c9db83Smrg 6434c3c9db83Smrg # Eliminate all temporary directories. 6435c3c9db83Smrg #for path in $notinst_path; do 6436c3c9db83Smrg # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` 6437c3c9db83Smrg # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` 6438c3c9db83Smrg # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` 6439c3c9db83Smrg #done 6440c3c9db83Smrg 6441c3c9db83Smrg if test -n "$xrpath"; then 6442c3c9db83Smrg # If the user specified any rpath flags, then add them. 6443c3c9db83Smrg temp_xrpath= 6444c3c9db83Smrg for libdir in $xrpath; do 6445c3c9db83Smrg temp_xrpath="$temp_xrpath -R$libdir" 6446c3c9db83Smrg case "$finalize_rpath " in 6447c3c9db83Smrg *" $libdir "*) ;; 6448c3c9db83Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 6449c3c9db83Smrg esac 6450c3c9db83Smrg done 6451c3c9db83Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 6452c3c9db83Smrg dependency_libs="$temp_xrpath $dependency_libs" 6453c3c9db83Smrg fi 6454c3c9db83Smrg fi 6455c3c9db83Smrg 6456c3c9db83Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 6457c3c9db83Smrg old_dlfiles="$dlfiles" 6458c3c9db83Smrg dlfiles= 6459c3c9db83Smrg for lib in $old_dlfiles; do 6460c3c9db83Smrg case " $dlprefiles $dlfiles " in 6461c3c9db83Smrg *" $lib "*) ;; 6462c3c9db83Smrg *) dlfiles="$dlfiles $lib" ;; 6463c3c9db83Smrg esac 6464c3c9db83Smrg done 6465c3c9db83Smrg 6466c3c9db83Smrg # Make sure dlprefiles contains only unique files 6467c3c9db83Smrg old_dlprefiles="$dlprefiles" 6468c3c9db83Smrg dlprefiles= 6469c3c9db83Smrg for lib in $old_dlprefiles; do 6470c3c9db83Smrg case "$dlprefiles " in 6471c3c9db83Smrg *" $lib "*) ;; 6472c3c9db83Smrg *) dlprefiles="$dlprefiles $lib" ;; 6473c3c9db83Smrg esac 6474c3c9db83Smrg done 6475c3c9db83Smrg 6476c3c9db83Smrg if test "$build_libtool_libs" = yes; then 6477c3c9db83Smrg if test -n "$rpath"; then 6478c3c9db83Smrg case $host in 6479c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) 6480c3c9db83Smrg # these systems don't actually have a c library (as such)! 6481c3c9db83Smrg ;; 6482c3c9db83Smrg *-*-rhapsody* | *-*-darwin1.[012]) 6483c3c9db83Smrg # Rhapsody C library is in the System framework 6484c3c9db83Smrg deplibs="$deplibs System.ltframework" 6485c3c9db83Smrg ;; 6486c3c9db83Smrg *-*-netbsd*) 6487c3c9db83Smrg # Don't link with libc until the a.out ld.so is fixed. 6488c3c9db83Smrg ;; 6489c3c9db83Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 6490c3c9db83Smrg # Do not include libc due to us having libc/libc_r. 6491c3c9db83Smrg ;; 6492c3c9db83Smrg *-*-sco3.2v5* | *-*-sco5v6*) 6493c3c9db83Smrg # Causes problems with __ctype 6494c3c9db83Smrg ;; 6495c3c9db83Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 6496c3c9db83Smrg # Compiler inserts libc in the correct place for threads to work 6497c3c9db83Smrg ;; 6498c3c9db83Smrg *) 6499c3c9db83Smrg # Add libc to deplibs on all other systems if necessary. 6500c3c9db83Smrg if test "$build_libtool_need_lc" = "yes"; then 6501c3c9db83Smrg deplibs="$deplibs -lc" 6502c3c9db83Smrg fi 6503c3c9db83Smrg ;; 6504c3c9db83Smrg esac 6505c3c9db83Smrg fi 6506c3c9db83Smrg 6507c3c9db83Smrg # Transform deplibs into only deplibs that can be linked in shared. 6508c3c9db83Smrg name_save=$name 6509c3c9db83Smrg libname_save=$libname 6510c3c9db83Smrg release_save=$release 6511c3c9db83Smrg versuffix_save=$versuffix 6512c3c9db83Smrg major_save=$major 6513c3c9db83Smrg # I'm not sure if I'm treating the release correctly. I think 6514c3c9db83Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 6515c3c9db83Smrg # add it in twice. Is that correct? 6516c3c9db83Smrg release="" 6517c3c9db83Smrg versuffix="" 6518c3c9db83Smrg major="" 6519c3c9db83Smrg newdeplibs= 6520c3c9db83Smrg droppeddeps=no 6521c3c9db83Smrg case $deplibs_check_method in 6522c3c9db83Smrg pass_all) 6523c3c9db83Smrg # Don't check for shared/static. Everything works. 6524c3c9db83Smrg # This might be a little naive. We might want to check 6525c3c9db83Smrg # whether the library exists or not. But this is on 6526c3c9db83Smrg # osf3 & osf4 and I'm not really sure... Just 6527c3c9db83Smrg # implementing what was already the behavior. 6528c3c9db83Smrg newdeplibs=$deplibs 6529c3c9db83Smrg ;; 6530c3c9db83Smrg test_compile) 6531c3c9db83Smrg # This code stresses the "libraries are programs" paradigm to its 6532c3c9db83Smrg # limits. Maybe even breaks it. We compile a program, linking it 6533c3c9db83Smrg # against the deplibs as a proxy for the library. Then we can check 6534c3c9db83Smrg # whether they linked in statically or dynamically with ldd. 6535c3c9db83Smrg $opt_dry_run || $RM conftest.c 6536c3c9db83Smrg cat > conftest.c <<EOF 6537c3c9db83Smrg int main() { return 0; } 6538c3c9db83SmrgEOF 6539c3c9db83Smrg $opt_dry_run || $RM conftest 6540c3c9db83Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 6541c3c9db83Smrg ldd_output=`ldd conftest` 6542c3c9db83Smrg for i in $deplibs; do 6543c3c9db83Smrg case $i in 6544c3c9db83Smrg -l*) 6545c3c9db83Smrg func_stripname -l '' "$i" 6546c3c9db83Smrg name=$func_stripname_result 6547c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6548c3c9db83Smrg case " $predeps $postdeps " in 6549c3c9db83Smrg *" $i "*) 6550c3c9db83Smrg newdeplibs="$newdeplibs $i" 6551c3c9db83Smrg i="" 6552c3c9db83Smrg ;; 6553c3c9db83Smrg esac 6554c3c9db83Smrg fi 6555c3c9db83Smrg if test -n "$i" ; then 6556c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6557c3c9db83Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6558c3c9db83Smrg set dummy $deplib_matches; shift 6559c3c9db83Smrg deplib_match=$1 6560c3c9db83Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6561c3c9db83Smrg newdeplibs="$newdeplibs $i" 6562c3c9db83Smrg else 6563c3c9db83Smrg droppeddeps=yes 6564c3c9db83Smrg $ECHO 6565c3c9db83Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6566c3c9db83Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6567c3c9db83Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6568c3c9db83Smrg $ECHO "*** shared version of the library, which I believe you do not have" 6569c3c9db83Smrg $ECHO "*** because a test_compile did reveal that the linker did not use it for" 6570c3c9db83Smrg $ECHO "*** its dynamic dependency list that programs get resolved with at runtime." 6571c3c9db83Smrg fi 6572c3c9db83Smrg fi 6573c3c9db83Smrg ;; 6574c3c9db83Smrg *) 6575c3c9db83Smrg newdeplibs="$newdeplibs $i" 6576c3c9db83Smrg ;; 6577c3c9db83Smrg esac 6578c3c9db83Smrg done 6579c3c9db83Smrg else 6580c3c9db83Smrg # Error occurred in the first compile. Let's try to salvage 6581c3c9db83Smrg # the situation: Compile a separate program for each library. 6582c3c9db83Smrg for i in $deplibs; do 6583c3c9db83Smrg case $i in 6584c3c9db83Smrg -l*) 6585c3c9db83Smrg func_stripname -l '' "$i" 6586c3c9db83Smrg name=$func_stripname_result 6587c3c9db83Smrg $opt_dry_run || $RM conftest 6588c3c9db83Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 6589c3c9db83Smrg ldd_output=`ldd conftest` 6590c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6591c3c9db83Smrg case " $predeps $postdeps " in 6592c3c9db83Smrg *" $i "*) 6593c3c9db83Smrg newdeplibs="$newdeplibs $i" 6594c3c9db83Smrg i="" 6595c3c9db83Smrg ;; 6596c3c9db83Smrg esac 6597c3c9db83Smrg fi 6598c3c9db83Smrg if test -n "$i" ; then 6599c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6600c3c9db83Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6601c3c9db83Smrg set dummy $deplib_matches; shift 6602c3c9db83Smrg deplib_match=$1 6603c3c9db83Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6604c3c9db83Smrg newdeplibs="$newdeplibs $i" 6605c3c9db83Smrg else 6606c3c9db83Smrg droppeddeps=yes 6607c3c9db83Smrg $ECHO 6608c3c9db83Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6609c3c9db83Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6610c3c9db83Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6611c3c9db83Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6612c3c9db83Smrg $ECHO "*** because a test_compile did reveal that the linker did not use this one" 6613c3c9db83Smrg $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime." 6614c3c9db83Smrg fi 6615c3c9db83Smrg fi 6616c3c9db83Smrg else 6617c3c9db83Smrg droppeddeps=yes 6618c3c9db83Smrg $ECHO 6619c3c9db83Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 6620c3c9db83Smrg $ECHO "*** make it link in! You will probably need to install it or some" 6621c3c9db83Smrg $ECHO "*** library that it depends on before this library will be fully" 6622c3c9db83Smrg $ECHO "*** functional. Installing it before continuing would be even better." 6623c3c9db83Smrg fi 6624c3c9db83Smrg ;; 6625c3c9db83Smrg *) 6626c3c9db83Smrg newdeplibs="$newdeplibs $i" 6627c3c9db83Smrg ;; 6628c3c9db83Smrg esac 6629c3c9db83Smrg done 6630c3c9db83Smrg fi 6631c3c9db83Smrg ;; 6632c3c9db83Smrg file_magic*) 6633c3c9db83Smrg set dummy $deplibs_check_method; shift 6634c3c9db83Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6635c3c9db83Smrg for a_deplib in $deplibs; do 6636c3c9db83Smrg case $a_deplib in 6637c3c9db83Smrg -l*) 6638c3c9db83Smrg func_stripname -l '' "$a_deplib" 6639c3c9db83Smrg name=$func_stripname_result 6640c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6641c3c9db83Smrg case " $predeps $postdeps " in 6642c3c9db83Smrg *" $a_deplib "*) 6643c3c9db83Smrg newdeplibs="$newdeplibs $a_deplib" 6644c3c9db83Smrg a_deplib="" 6645c3c9db83Smrg ;; 6646c3c9db83Smrg esac 6647c3c9db83Smrg fi 6648c3c9db83Smrg if test -n "$a_deplib" ; then 6649c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6650c3c9db83Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6651c3c9db83Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6652c3c9db83Smrg for potent_lib in $potential_libs; do 6653c3c9db83Smrg # Follow soft links. 6654c3c9db83Smrg if ls -lLd "$potent_lib" 2>/dev/null | 6655c3c9db83Smrg $GREP " -> " >/dev/null; then 6656c3c9db83Smrg continue 6657c3c9db83Smrg fi 6658c3c9db83Smrg # The statement above tries to avoid entering an 6659c3c9db83Smrg # endless loop below, in case of cyclic links. 6660c3c9db83Smrg # We might still enter an endless loop, since a link 6661c3c9db83Smrg # loop can be closed while we follow links, 6662c3c9db83Smrg # but so what? 6663c3c9db83Smrg potlib="$potent_lib" 6664c3c9db83Smrg while test -h "$potlib" 2>/dev/null; do 6665c3c9db83Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 6666c3c9db83Smrg case $potliblink in 6667c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 6668c3c9db83Smrg *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 6669c3c9db83Smrg esac 6670c3c9db83Smrg done 6671c3c9db83Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 6672c3c9db83Smrg $SED -e 10q | 6673c3c9db83Smrg $EGREP "$file_magic_regex" > /dev/null; then 6674c3c9db83Smrg newdeplibs="$newdeplibs $a_deplib" 6675c3c9db83Smrg a_deplib="" 6676c3c9db83Smrg break 2 6677c3c9db83Smrg fi 6678c3c9db83Smrg done 6679c3c9db83Smrg done 6680c3c9db83Smrg fi 6681c3c9db83Smrg if test -n "$a_deplib" ; then 6682c3c9db83Smrg droppeddeps=yes 6683c3c9db83Smrg $ECHO 6684c3c9db83Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 6685c3c9db83Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6686c3c9db83Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6687c3c9db83Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6688c3c9db83Smrg $ECHO "*** because I did check the linker path looking for a file starting" 6689c3c9db83Smrg if test -z "$potlib" ; then 6690c3c9db83Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 6691c3c9db83Smrg else 6692c3c9db83Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 6693c3c9db83Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 6694c3c9db83Smrg fi 6695c3c9db83Smrg fi 6696c3c9db83Smrg ;; 6697c3c9db83Smrg *) 6698c3c9db83Smrg # Add a -L argument. 6699c3c9db83Smrg newdeplibs="$newdeplibs $a_deplib" 6700c3c9db83Smrg ;; 6701c3c9db83Smrg esac 6702c3c9db83Smrg done # Gone through all deplibs. 6703c3c9db83Smrg ;; 6704c3c9db83Smrg match_pattern*) 6705c3c9db83Smrg set dummy $deplibs_check_method; shift 6706c3c9db83Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6707c3c9db83Smrg for a_deplib in $deplibs; do 6708c3c9db83Smrg case $a_deplib in 6709c3c9db83Smrg -l*) 6710c3c9db83Smrg func_stripname -l '' "$a_deplib" 6711c3c9db83Smrg name=$func_stripname_result 6712c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6713c3c9db83Smrg case " $predeps $postdeps " in 6714c3c9db83Smrg *" $a_deplib "*) 6715c3c9db83Smrg newdeplibs="$newdeplibs $a_deplib" 6716c3c9db83Smrg a_deplib="" 6717c3c9db83Smrg ;; 6718c3c9db83Smrg esac 6719c3c9db83Smrg fi 6720c3c9db83Smrg if test -n "$a_deplib" ; then 6721c3c9db83Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 6722c3c9db83Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6723c3c9db83Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6724c3c9db83Smrg for potent_lib in $potential_libs; do 6725c3c9db83Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 6726c3c9db83Smrg if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ 6727c3c9db83Smrg $EGREP "$match_pattern_regex" > /dev/null; then 6728c3c9db83Smrg newdeplibs="$newdeplibs $a_deplib" 6729c3c9db83Smrg a_deplib="" 6730c3c9db83Smrg break 2 6731c3c9db83Smrg fi 6732c3c9db83Smrg done 6733c3c9db83Smrg done 6734c3c9db83Smrg fi 6735c3c9db83Smrg if test -n "$a_deplib" ; then 6736c3c9db83Smrg droppeddeps=yes 6737c3c9db83Smrg $ECHO 6738c3c9db83Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 6739c3c9db83Smrg $ECHO "*** I have the capability to make that library automatically link in when" 6740c3c9db83Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 6741c3c9db83Smrg $ECHO "*** shared version of the library, which you do not appear to have" 6742c3c9db83Smrg $ECHO "*** because I did check the linker path looking for a file starting" 6743c3c9db83Smrg if test -z "$potlib" ; then 6744c3c9db83Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 6745c3c9db83Smrg else 6746c3c9db83Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 6747c3c9db83Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 6748c3c9db83Smrg fi 6749c3c9db83Smrg fi 6750c3c9db83Smrg ;; 6751c3c9db83Smrg *) 6752c3c9db83Smrg # Add a -L argument. 6753c3c9db83Smrg newdeplibs="$newdeplibs $a_deplib" 6754c3c9db83Smrg ;; 6755c3c9db83Smrg esac 6756c3c9db83Smrg done # Gone through all deplibs. 6757c3c9db83Smrg ;; 6758c3c9db83Smrg none | unknown | *) 6759c3c9db83Smrg newdeplibs="" 6760c3c9db83Smrg tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ 6761c3c9db83Smrg -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` 6762c3c9db83Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6763c3c9db83Smrg for i in $predeps $postdeps ; do 6764c3c9db83Smrg # can't use Xsed below, because $i might contain '/' 6765c3c9db83Smrg tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` 6766c3c9db83Smrg done 6767c3c9db83Smrg fi 6768c3c9db83Smrg if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | 6769c3c9db83Smrg $GREP . >/dev/null; then 6770c3c9db83Smrg $ECHO 6771c3c9db83Smrg if test "X$deplibs_check_method" = "Xnone"; then 6772c3c9db83Smrg $ECHO "*** Warning: inter-library dependencies are not supported in this platform." 6773c3c9db83Smrg else 6774c3c9db83Smrg $ECHO "*** Warning: inter-library dependencies are not known to be supported." 6775c3c9db83Smrg fi 6776c3c9db83Smrg $ECHO "*** All declared inter-library dependencies are being dropped." 6777c3c9db83Smrg droppeddeps=yes 6778c3c9db83Smrg fi 6779c3c9db83Smrg ;; 6780c3c9db83Smrg esac 6781c3c9db83Smrg versuffix=$versuffix_save 6782c3c9db83Smrg major=$major_save 6783c3c9db83Smrg release=$release_save 6784c3c9db83Smrg libname=$libname_save 6785c3c9db83Smrg name=$name_save 6786c3c9db83Smrg 6787c3c9db83Smrg case $host in 6788c3c9db83Smrg *-*-rhapsody* | *-*-darwin1.[012]) 6789c3c9db83Smrg # On Rhapsody replace the C library with the System framework 6790c3c9db83Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 6791c3c9db83Smrg ;; 6792c3c9db83Smrg esac 6793c3c9db83Smrg 6794c3c9db83Smrg if test "$droppeddeps" = yes; then 6795c3c9db83Smrg if test "$module" = yes; then 6796c3c9db83Smrg $ECHO 6797c3c9db83Smrg $ECHO "*** Warning: libtool could not satisfy all declared inter-library" 6798c3c9db83Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 6799c3c9db83Smrg $ECHO "*** a static module, that should work as long as the dlopening" 6800c3c9db83Smrg $ECHO "*** application is linked with the -dlopen flag." 6801c3c9db83Smrg if test -z "$global_symbol_pipe"; then 6802c3c9db83Smrg $ECHO 6803c3c9db83Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 6804c3c9db83Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 6805c3c9db83Smrg $ECHO "*** not find such a program. So, this module is probably useless." 6806c3c9db83Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 6807c3c9db83Smrg fi 6808c3c9db83Smrg if test "$build_old_libs" = no; then 6809c3c9db83Smrg oldlibs="$output_objdir/$libname.$libext" 6810c3c9db83Smrg build_libtool_libs=module 6811c3c9db83Smrg build_old_libs=yes 6812c3c9db83Smrg else 6813c3c9db83Smrg build_libtool_libs=no 6814c3c9db83Smrg fi 6815c3c9db83Smrg else 6816c3c9db83Smrg $ECHO "*** The inter-library dependencies that have been dropped here will be" 6817c3c9db83Smrg $ECHO "*** automatically added whenever a program is linked with this library" 6818c3c9db83Smrg $ECHO "*** or is declared to -dlopen it." 6819c3c9db83Smrg 6820c3c9db83Smrg if test "$allow_undefined" = no; then 6821c3c9db83Smrg $ECHO 6822c3c9db83Smrg $ECHO "*** Since this library must not contain undefined symbols," 6823c3c9db83Smrg $ECHO "*** because either the platform does not support them or" 6824c3c9db83Smrg $ECHO "*** it was explicitly requested with -no-undefined," 6825c3c9db83Smrg $ECHO "*** libtool will only create a static version of it." 6826c3c9db83Smrg if test "$build_old_libs" = no; then 6827c3c9db83Smrg oldlibs="$output_objdir/$libname.$libext" 6828c3c9db83Smrg build_libtool_libs=module 6829c3c9db83Smrg build_old_libs=yes 6830c3c9db83Smrg else 6831c3c9db83Smrg build_libtool_libs=no 6832c3c9db83Smrg fi 6833c3c9db83Smrg fi 6834c3c9db83Smrg fi 6835c3c9db83Smrg fi 6836c3c9db83Smrg # Done checking deplibs! 6837c3c9db83Smrg deplibs=$newdeplibs 6838c3c9db83Smrg fi 6839c3c9db83Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 6840c3c9db83Smrg case $host in 6841c3c9db83Smrg *-*-darwin*) 6842c3c9db83Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6843c3c9db83Smrg new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6844c3c9db83Smrg deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 6845c3c9db83Smrg ;; 6846c3c9db83Smrg esac 6847c3c9db83Smrg 6848c3c9db83Smrg # move library search paths that coincide with paths to not yet 6849c3c9db83Smrg # installed libraries to the beginning of the library search list 6850c3c9db83Smrg new_libs= 6851c3c9db83Smrg for path in $notinst_path; do 6852c3c9db83Smrg case " $new_libs " in 6853c3c9db83Smrg *" -L$path/$objdir "*) ;; 6854c3c9db83Smrg *) 6855c3c9db83Smrg case " $deplibs " in 6856c3c9db83Smrg *" -L$path/$objdir "*) 6857c3c9db83Smrg new_libs="$new_libs -L$path/$objdir" ;; 6858c3c9db83Smrg esac 6859c3c9db83Smrg ;; 6860c3c9db83Smrg esac 6861c3c9db83Smrg done 6862c3c9db83Smrg for deplib in $deplibs; do 6863c3c9db83Smrg case $deplib in 6864c3c9db83Smrg -L*) 6865c3c9db83Smrg case " $new_libs " in 6866c3c9db83Smrg *" $deplib "*) ;; 6867c3c9db83Smrg *) new_libs="$new_libs $deplib" ;; 6868c3c9db83Smrg esac 6869c3c9db83Smrg ;; 6870c3c9db83Smrg *) new_libs="$new_libs $deplib" ;; 6871c3c9db83Smrg esac 6872c3c9db83Smrg done 6873c3c9db83Smrg deplibs="$new_libs" 6874c3c9db83Smrg 6875c3c9db83Smrg # All the library-specific variables (install_libdir is set above). 6876c3c9db83Smrg library_names= 6877c3c9db83Smrg old_library= 6878c3c9db83Smrg dlname= 6879c3c9db83Smrg 6880c3c9db83Smrg # Test again, we may have decided not to build it any more 6881c3c9db83Smrg if test "$build_libtool_libs" = yes; then 6882c3c9db83Smrg if test "$hardcode_into_libs" = yes; then 6883c3c9db83Smrg # Hardcode the library paths 6884c3c9db83Smrg hardcode_libdirs= 6885c3c9db83Smrg dep_rpath= 6886c3c9db83Smrg rpath="$finalize_rpath" 6887c3c9db83Smrg test "$mode" != relink && rpath="$compile_rpath$rpath" 6888c3c9db83Smrg for libdir in $rpath; do 6889c3c9db83Smrg if test -n "$hardcode_libdir_flag_spec"; then 6890c3c9db83Smrg if test -n "$hardcode_libdir_separator"; then 6891c3c9db83Smrg if test -z "$hardcode_libdirs"; then 6892c3c9db83Smrg hardcode_libdirs="$libdir" 6893c3c9db83Smrg else 6894c3c9db83Smrg # Just accumulate the unique libdirs. 6895c3c9db83Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 6896c3c9db83Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 6897c3c9db83Smrg ;; 6898c3c9db83Smrg *) 6899c3c9db83Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 6900c3c9db83Smrg ;; 6901c3c9db83Smrg esac 6902c3c9db83Smrg fi 6903c3c9db83Smrg else 6904c3c9db83Smrg eval flag=\"$hardcode_libdir_flag_spec\" 6905c3c9db83Smrg dep_rpath="$dep_rpath $flag" 6906c3c9db83Smrg fi 6907c3c9db83Smrg elif test -n "$runpath_var"; then 6908c3c9db83Smrg case "$perm_rpath " in 6909c3c9db83Smrg *" $libdir "*) ;; 6910c3c9db83Smrg *) perm_rpath="$perm_rpath $libdir" ;; 6911c3c9db83Smrg esac 6912c3c9db83Smrg fi 6913c3c9db83Smrg done 6914c3c9db83Smrg # Substitute the hardcoded libdirs into the rpath. 6915c3c9db83Smrg if test -n "$hardcode_libdir_separator" && 6916c3c9db83Smrg test -n "$hardcode_libdirs"; then 6917c3c9db83Smrg libdir="$hardcode_libdirs" 6918c3c9db83Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 6919c3c9db83Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 6920c3c9db83Smrg else 6921c3c9db83Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 6922c3c9db83Smrg fi 6923c3c9db83Smrg fi 6924c3c9db83Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 6925c3c9db83Smrg # We should set the runpath_var. 6926c3c9db83Smrg rpath= 6927c3c9db83Smrg for dir in $perm_rpath; do 6928c3c9db83Smrg rpath="$rpath$dir:" 6929c3c9db83Smrg done 6930c3c9db83Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 6931c3c9db83Smrg fi 6932c3c9db83Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 6933c3c9db83Smrg fi 6934692f60a7Smrg 6935c3c9db83Smrg shlibpath="$finalize_shlibpath" 6936c3c9db83Smrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 6937c3c9db83Smrg if test -n "$shlibpath"; then 6938c3c9db83Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 6939c3c9db83Smrg fi 6940692f60a7Smrg 6941c3c9db83Smrg # Get the real and link names of the library. 6942c3c9db83Smrg eval shared_ext=\"$shrext_cmds\" 6943c3c9db83Smrg eval library_names=\"$library_names_spec\" 6944c3c9db83Smrg set dummy $library_names 6945c3c9db83Smrg shift 6946c3c9db83Smrg realname="$1" 6947c3c9db83Smrg shift 6948692f60a7Smrg 6949c3c9db83Smrg if test -n "$soname_spec"; then 6950c3c9db83Smrg eval soname=\"$soname_spec\" 6951c3c9db83Smrg else 6952c3c9db83Smrg soname="$realname" 6953c3c9db83Smrg fi 6954c3c9db83Smrg if test -z "$dlname"; then 6955c3c9db83Smrg dlname=$soname 6956c3c9db83Smrg fi 6957692f60a7Smrg 6958c3c9db83Smrg lib="$output_objdir/$realname" 6959c3c9db83Smrg linknames= 6960c3c9db83Smrg for link 6961c3c9db83Smrg do 6962c3c9db83Smrg linknames="$linknames $link" 6963c3c9db83Smrg done 6964692f60a7Smrg 6965c3c9db83Smrg # Use standard objects if they are pic 6966c3c9db83Smrg test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 6967c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 6968692f60a7Smrg 6969c3c9db83Smrg delfiles= 6970c3c9db83Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 6971c3c9db83Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 6972c3c9db83Smrg export_symbols="$output_objdir/$libname.uexp" 6973c3c9db83Smrg delfiles="$delfiles $export_symbols" 6974c3c9db83Smrg fi 6975692f60a7Smrg 6976c3c9db83Smrg orig_export_symbols= 6977c3c9db83Smrg case $host_os in 6978c3c9db83Smrg cygwin* | mingw* | cegcc*) 6979c3c9db83Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 6980c3c9db83Smrg # exporting using user supplied symfile 6981c3c9db83Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 6982c3c9db83Smrg # and it's NOT already a .def file. Must figure out 6983c3c9db83Smrg # which of the given symbols are data symbols and tag 6984c3c9db83Smrg # them as such. So, trigger use of export_symbols_cmds. 6985c3c9db83Smrg # export_symbols gets reassigned inside the "prepare 6986c3c9db83Smrg # the list of exported symbols" if statement, so the 6987c3c9db83Smrg # include_expsyms logic still works. 6988c3c9db83Smrg orig_export_symbols="$export_symbols" 6989c3c9db83Smrg export_symbols= 6990c3c9db83Smrg always_export_symbols=yes 6991c3c9db83Smrg fi 6992c3c9db83Smrg fi 6993c3c9db83Smrg ;; 6994c3c9db83Smrg esac 6995692f60a7Smrg 6996c3c9db83Smrg # Prepare the list of exported symbols 6997c3c9db83Smrg if test -z "$export_symbols"; then 6998c3c9db83Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 6999c3c9db83Smrg func_verbose "generating symbol list for \`$libname.la'" 7000c3c9db83Smrg export_symbols="$output_objdir/$libname.exp" 7001c3c9db83Smrg $opt_dry_run || $RM $export_symbols 7002c3c9db83Smrg cmds=$export_symbols_cmds 7003c3c9db83Smrg save_ifs="$IFS"; IFS='~' 7004c3c9db83Smrg for cmd in $cmds; do 7005c3c9db83Smrg IFS="$save_ifs" 7006c3c9db83Smrg eval cmd=\"$cmd\" 7007c3c9db83Smrg func_len " $cmd" 7008c3c9db83Smrg len=$func_len_result 7009c3c9db83Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7010c3c9db83Smrg func_show_eval "$cmd" 'exit $?' 7011c3c9db83Smrg skipped_export=false 7012c3c9db83Smrg else 7013c3c9db83Smrg # The command line is too long to execute in one step. 7014c3c9db83Smrg func_verbose "using reloadable object file for export list..." 7015c3c9db83Smrg skipped_export=: 7016c3c9db83Smrg # Break out early, otherwise skipped_export may be 7017c3c9db83Smrg # set to false by a later but shorter cmd. 7018c3c9db83Smrg break 7019c3c9db83Smrg fi 7020c3c9db83Smrg done 7021c3c9db83Smrg IFS="$save_ifs" 7022c3c9db83Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 7023c3c9db83Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7024c3c9db83Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7025c3c9db83Smrg fi 7026c3c9db83Smrg fi 7027692f60a7Smrg fi 7028692f60a7Smrg 7029c3c9db83Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7030c3c9db83Smrg tmp_export_symbols="$export_symbols" 7031c3c9db83Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7032c3c9db83Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 7033c3c9db83Smrg fi 7034692f60a7Smrg 7035c3c9db83Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 7036c3c9db83Smrg # The given exports_symbols file has to be filtered, so filter it. 7037c3c9db83Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7038c3c9db83Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7039c3c9db83Smrg # 's' commands which not all seds can handle. GNU sed should be fine 7040c3c9db83Smrg # though. Also, the filter scales superlinearly with the number of 7041c3c9db83Smrg # global variables. join(1) would be nice here, but unfortunately 7042c3c9db83Smrg # isn't a blessed tool. 7043c3c9db83Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7044c3c9db83Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7045c3c9db83Smrg export_symbols=$output_objdir/$libname.def 7046c3c9db83Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7047c3c9db83Smrg fi 7048692f60a7Smrg 7049c3c9db83Smrg tmp_deplibs= 7050c3c9db83Smrg for test_deplib in $deplibs; do 7051c3c9db83Smrg case " $convenience " in 7052c3c9db83Smrg *" $test_deplib "*) ;; 7053c3c9db83Smrg *) 7054c3c9db83Smrg tmp_deplibs="$tmp_deplibs $test_deplib" 7055c3c9db83Smrg ;; 7056c3c9db83Smrg esac 7057c3c9db83Smrg done 7058c3c9db83Smrg deplibs="$tmp_deplibs" 7059692f60a7Smrg 7060c3c9db83Smrg if test -n "$convenience"; then 7061c3c9db83Smrg if test -n "$whole_archive_flag_spec" && 7062c3c9db83Smrg test "$compiler_needs_object" = yes && 7063c3c9db83Smrg test -z "$libobjs"; then 7064c3c9db83Smrg # extract the archives, so we have objects to list. 7065c3c9db83Smrg # TODO: could optimize this to just extract one archive. 7066c3c9db83Smrg whole_archive_flag_spec= 7067c3c9db83Smrg fi 7068c3c9db83Smrg if test -n "$whole_archive_flag_spec"; then 7069c3c9db83Smrg save_libobjs=$libobjs 7070c3c9db83Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7071c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 7072c3c9db83Smrg else 7073c3c9db83Smrg gentop="$output_objdir/${outputname}x" 7074c3c9db83Smrg generated="$generated $gentop" 7075692f60a7Smrg 7076c3c9db83Smrg func_extract_archives $gentop $convenience 7077c3c9db83Smrg libobjs="$libobjs $func_extract_archives_result" 7078c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 7079c3c9db83Smrg fi 70802e71ea71Smrg fi 7081692f60a7Smrg 7082c3c9db83Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 7083c3c9db83Smrg eval flag=\"$thread_safe_flag_spec\" 7084c3c9db83Smrg linker_flags="$linker_flags $flag" 70852e71ea71Smrg fi 708685ee4c00Smrg 7087c3c9db83Smrg # Make a backup of the uninstalled library when relinking 7088c3c9db83Smrg if test "$mode" = relink; then 7089c3c9db83Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 7090c3c9db83Smrg fi 7091692f60a7Smrg 7092c3c9db83Smrg # Do each of the archive commands. 7093c3c9db83Smrg if test "$module" = yes && test -n "$module_cmds" ; then 7094c3c9db83Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7095c3c9db83Smrg eval test_cmds=\"$module_expsym_cmds\" 7096c3c9db83Smrg cmds=$module_expsym_cmds 7097c3c9db83Smrg else 7098c3c9db83Smrg eval test_cmds=\"$module_cmds\" 7099c3c9db83Smrg cmds=$module_cmds 7100c3c9db83Smrg fi 71012e71ea71Smrg else 7102c3c9db83Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7103c3c9db83Smrg eval test_cmds=\"$archive_expsym_cmds\" 7104c3c9db83Smrg cmds=$archive_expsym_cmds 7105c3c9db83Smrg else 7106c3c9db83Smrg eval test_cmds=\"$archive_cmds\" 7107c3c9db83Smrg cmds=$archive_cmds 7108c3c9db83Smrg fi 71092e71ea71Smrg fi 7110692f60a7Smrg 7111c3c9db83Smrg if test "X$skipped_export" != "X:" && 7112c3c9db83Smrg func_len " $test_cmds" && 7113c3c9db83Smrg len=$func_len_result && 7114c3c9db83Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7115c3c9db83Smrg : 7116c3c9db83Smrg else 7117c3c9db83Smrg # The command line is too long to link in one step, link piecewise 7118c3c9db83Smrg # or, if using GNU ld and skipped_export is not :, use a linker 7119c3c9db83Smrg # script. 7120692f60a7Smrg 7121c3c9db83Smrg # Save the value of $output and $libobjs because we want to 7122c3c9db83Smrg # use them later. If we have whole_archive_flag_spec, we 7123c3c9db83Smrg # want to use save_libobjs as it was before 7124c3c9db83Smrg # whole_archive_flag_spec was expanded, because we can't 7125c3c9db83Smrg # assume the linker understands whole_archive_flag_spec. 7126c3c9db83Smrg # This may have to be revisited, in case too many 7127c3c9db83Smrg # convenience libraries get linked in and end up exceeding 7128c3c9db83Smrg # the spec. 7129c3c9db83Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 7130c3c9db83Smrg save_libobjs=$libobjs 7131c3c9db83Smrg fi 7132c3c9db83Smrg save_output=$output 7133c3c9db83Smrg output_la=`$ECHO "X$output" | $Xsed -e "$basename"` 7134692f60a7Smrg 7135c3c9db83Smrg # Clear the reloadable object creation command queue and 7136c3c9db83Smrg # initialize k to one. 7137c3c9db83Smrg test_cmds= 7138c3c9db83Smrg concat_cmds= 7139c3c9db83Smrg objlist= 7140c3c9db83Smrg last_robj= 7141c3c9db83Smrg k=1 7142c3c9db83Smrg 7143c3c9db83Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 7144c3c9db83Smrg output=${output_objdir}/${output_la}.lnkscript 7145c3c9db83Smrg func_verbose "creating GNU ld script: $output" 7146c3c9db83Smrg $ECHO 'INPUT (' > $output 7147c3c9db83Smrg for obj in $save_libobjs 71482e71ea71Smrg do 7149c3c9db83Smrg $ECHO "$obj" >> $output 7150c3c9db83Smrg done 7151c3c9db83Smrg $ECHO ')' >> $output 7152c3c9db83Smrg delfiles="$delfiles $output" 7153c3c9db83Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 7154c3c9db83Smrg output=${output_objdir}/${output_la}.lnk 7155c3c9db83Smrg func_verbose "creating linker input file list: $output" 7156c3c9db83Smrg : > $output 7157c3c9db83Smrg set x $save_libobjs 7158c3c9db83Smrg shift 7159c3c9db83Smrg firstobj= 7160c3c9db83Smrg if test "$compiler_needs_object" = yes; then 7161c3c9db83Smrg firstobj="$1 " 7162c3c9db83Smrg shift 7163c3c9db83Smrg fi 7164c3c9db83Smrg for obj 7165c3c9db83Smrg do 7166c3c9db83Smrg $ECHO "$obj" >> $output 7167c3c9db83Smrg done 7168c3c9db83Smrg delfiles="$delfiles $output" 7169c3c9db83Smrg output=$firstobj\"$file_list_spec$output\" 7170c3c9db83Smrg else 7171c3c9db83Smrg if test -n "$save_libobjs"; then 7172c3c9db83Smrg func_verbose "creating reloadable object files..." 7173c3c9db83Smrg output=$output_objdir/$output_la-${k}.$objext 7174c3c9db83Smrg eval test_cmds=\"$reload_cmds\" 7175c3c9db83Smrg func_len " $test_cmds" 7176c3c9db83Smrg len0=$func_len_result 7177c3c9db83Smrg len=$len0 7178c3c9db83Smrg 7179c3c9db83Smrg # Loop over the list of objects to be linked. 7180c3c9db83Smrg for obj in $save_libobjs 7181c3c9db83Smrg do 7182c3c9db83Smrg func_len " $obj" 7183c3c9db83Smrg func_arith $len + $func_len_result 7184c3c9db83Smrg len=$func_arith_result 7185c3c9db83Smrg if test "X$objlist" = X || 7186c3c9db83Smrg test "$len" -lt "$max_cmd_len"; then 7187c3c9db83Smrg func_append objlist " $obj" 7188c3c9db83Smrg else 7189c3c9db83Smrg # The command $test_cmds is almost too long, add a 7190c3c9db83Smrg # command to the queue. 7191c3c9db83Smrg if test "$k" -eq 1 ; then 7192c3c9db83Smrg # The first file doesn't have a previous command to add. 7193c3c9db83Smrg eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 7194c3c9db83Smrg else 7195c3c9db83Smrg # All subsequent reloadable object files will link in 7196c3c9db83Smrg # the last one created. 7197c3c9db83Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" 7198c3c9db83Smrg fi 7199c3c9db83Smrg last_robj=$output_objdir/$output_la-${k}.$objext 7200c3c9db83Smrg func_arith $k + 1 7201c3c9db83Smrg k=$func_arith_result 7202c3c9db83Smrg output=$output_objdir/$output_la-${k}.$objext 7203c3c9db83Smrg objlist=$obj 7204c3c9db83Smrg func_len " $last_robj" 7205c3c9db83Smrg func_arith $len0 + $func_len_result 7206c3c9db83Smrg len=$func_arith_result 7207c3c9db83Smrg fi 7208c3c9db83Smrg done 7209c3c9db83Smrg # Handle the remaining objects by creating one last 7210c3c9db83Smrg # reloadable object file. All subsequent reloadable object 7211c3c9db83Smrg # files will link in the last one created. 7212c3c9db83Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7213c3c9db83Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 7214c3c9db83Smrg if test -n "$last_robj"; then 7215c3c9db83Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 7216c3c9db83Smrg fi 7217c3c9db83Smrg delfiles="$delfiles $output" 7218692f60a7Smrg 7219c3c9db83Smrg else 7220c3c9db83Smrg output= 7221c3c9db83Smrg fi 7222692f60a7Smrg 7223c3c9db83Smrg if ${skipped_export-false}; then 7224c3c9db83Smrg func_verbose "generating symbol list for \`$libname.la'" 7225c3c9db83Smrg export_symbols="$output_objdir/$libname.exp" 7226c3c9db83Smrg $opt_dry_run || $RM $export_symbols 7227c3c9db83Smrg libobjs=$output 7228c3c9db83Smrg # Append the command to create the export file. 7229c3c9db83Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7230c3c9db83Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 7231c3c9db83Smrg if test -n "$last_robj"; then 7232c3c9db83Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 7233c3c9db83Smrg fi 723485ee4c00Smrg fi 7235692f60a7Smrg 7236c3c9db83Smrg test -n "$save_libobjs" && 7237c3c9db83Smrg func_verbose "creating a temporary reloadable object file: $output" 7238692f60a7Smrg 7239c3c9db83Smrg # Loop through the commands generated above and execute them. 7240c3c9db83Smrg save_ifs="$IFS"; IFS='~' 7241c3c9db83Smrg for cmd in $concat_cmds; do 7242c3c9db83Smrg IFS="$save_ifs" 7243c3c9db83Smrg $opt_silent || { 7244c3c9db83Smrg func_quote_for_expand "$cmd" 7245c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 7246c3c9db83Smrg } 7247c3c9db83Smrg $opt_dry_run || eval "$cmd" || { 7248c3c9db83Smrg lt_exit=$? 7249c3c9db83Smrg 7250c3c9db83Smrg # Restore the uninstalled library and exit 7251c3c9db83Smrg if test "$mode" = relink; then 7252c3c9db83Smrg ( cd "$output_objdir" && \ 7253c3c9db83Smrg $RM "${realname}T" && \ 7254c3c9db83Smrg $MV "${realname}U" "$realname" ) 7255c3c9db83Smrg fi 7256692f60a7Smrg 7257c3c9db83Smrg exit $lt_exit 7258c3c9db83Smrg } 7259c3c9db83Smrg done 7260c3c9db83Smrg IFS="$save_ifs" 72612e71ea71Smrg 7262c3c9db83Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 7263c3c9db83Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7264c3c9db83Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7265692f60a7Smrg fi 7266692f60a7Smrg fi 7267692f60a7Smrg 7268c3c9db83Smrg if ${skipped_export-false}; then 7269c3c9db83Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7270c3c9db83Smrg tmp_export_symbols="$export_symbols" 7271c3c9db83Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7272c3c9db83Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 7273c3c9db83Smrg fi 727485ee4c00Smrg 7275c3c9db83Smrg if test -n "$orig_export_symbols"; then 7276c3c9db83Smrg # The given exports_symbols file has to be filtered, so filter it. 7277c3c9db83Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7278c3c9db83Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7279c3c9db83Smrg # 's' commands which not all seds can handle. GNU sed should be fine 7280c3c9db83Smrg # though. Also, the filter scales superlinearly with the number of 7281c3c9db83Smrg # global variables. join(1) would be nice here, but unfortunately 7282c3c9db83Smrg # isn't a blessed tool. 7283c3c9db83Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7284c3c9db83Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7285c3c9db83Smrg export_symbols=$output_objdir/$libname.def 7286c3c9db83Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7287c3c9db83Smrg fi 7288c3c9db83Smrg fi 7289692f60a7Smrg 7290c3c9db83Smrg libobjs=$output 7291c3c9db83Smrg # Restore the value of output. 7292c3c9db83Smrg output=$save_output 7293692f60a7Smrg 7294c3c9db83Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 7295c3c9db83Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7296c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 7297c3c9db83Smrg fi 7298c3c9db83Smrg # Expand the library linking commands again to reset the 7299c3c9db83Smrg # value of $libobjs for piecewise linking. 7300692f60a7Smrg 7301c3c9db83Smrg # Do each of the archive commands. 7302c3c9db83Smrg if test "$module" = yes && test -n "$module_cmds" ; then 7303c3c9db83Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7304c3c9db83Smrg cmds=$module_expsym_cmds 7305c3c9db83Smrg else 7306c3c9db83Smrg cmds=$module_cmds 73072e71ea71Smrg fi 73082e71ea71Smrg else 7309c3c9db83Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7310c3c9db83Smrg cmds=$archive_expsym_cmds 7311c3c9db83Smrg else 7312c3c9db83Smrg cmds=$archive_cmds 7313c3c9db83Smrg fi 73142e71ea71Smrg fi 7315c3c9db83Smrg fi 7316692f60a7Smrg 7317c3c9db83Smrg if test -n "$delfiles"; then 7318c3c9db83Smrg # Append the command to remove temporary files to $cmds. 7319c3c9db83Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 7320c3c9db83Smrg fi 7321692f60a7Smrg 7322c3c9db83Smrg # Add any objects from preloaded convenience libraries 7323c3c9db83Smrg if test -n "$dlprefiles"; then 7324c3c9db83Smrg gentop="$output_objdir/${outputname}x" 7325c3c9db83Smrg generated="$generated $gentop" 7326692f60a7Smrg 7327c3c9db83Smrg func_extract_archives $gentop $dlprefiles 7328c3c9db83Smrg libobjs="$libobjs $func_extract_archives_result" 7329c3c9db83Smrg test "X$libobjs" = "X " && libobjs= 7330c3c9db83Smrg fi 7331692f60a7Smrg 7332c3c9db83Smrg save_ifs="$IFS"; IFS='~' 7333c3c9db83Smrg for cmd in $cmds; do 7334c3c9db83Smrg IFS="$save_ifs" 7335c3c9db83Smrg eval cmd=\"$cmd\" 7336c3c9db83Smrg $opt_silent || { 7337c3c9db83Smrg func_quote_for_expand "$cmd" 7338c3c9db83Smrg eval "func_echo $func_quote_for_expand_result" 7339c3c9db83Smrg } 7340c3c9db83Smrg $opt_dry_run || eval "$cmd" || { 7341c3c9db83Smrg lt_exit=$? 734285ee4c00Smrg 7343c3c9db83Smrg # Restore the uninstalled library and exit 7344c3c9db83Smrg if test "$mode" = relink; then 7345c3c9db83Smrg ( cd "$output_objdir" && \ 7346c3c9db83Smrg $RM "${realname}T" && \ 7347c3c9db83Smrg $MV "${realname}U" "$realname" ) 7348c3c9db83Smrg fi 734985ee4c00Smrg 7350c3c9db83Smrg exit $lt_exit 7351c3c9db83Smrg } 7352c3c9db83Smrg done 7353c3c9db83Smrg IFS="$save_ifs" 735485ee4c00Smrg 7355c3c9db83Smrg # Restore the uninstalled library and exit 7356c3c9db83Smrg if test "$mode" = relink; then 7357c3c9db83Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 735885ee4c00Smrg 7359c3c9db83Smrg if test -n "$convenience"; then 7360c3c9db83Smrg if test -z "$whole_archive_flag_spec"; then 7361c3c9db83Smrg func_show_eval '${RM}r "$gentop"' 7362c3c9db83Smrg fi 7363c3c9db83Smrg fi 736485ee4c00Smrg 7365c3c9db83Smrg exit $EXIT_SUCCESS 7366c3c9db83Smrg fi 7367c3c9db83Smrg 7368c3c9db83Smrg # Create links to the real library. 7369c3c9db83Smrg for linkname in $linknames; do 7370c3c9db83Smrg if test "$realname" != "$linkname"; then 7371c3c9db83Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 73722e71ea71Smrg fi 73732e71ea71Smrg done 737485ee4c00Smrg 7375c3c9db83Smrg # If -module or -export-dynamic was specified, set the dlname. 7376c3c9db83Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 7377c3c9db83Smrg # On all known operating systems, these are identical. 7378c3c9db83Smrg dlname="$soname" 7379c3c9db83Smrg fi 7380c3c9db83Smrg fi 7381692f60a7Smrg ;; 7382692f60a7Smrg 7383c3c9db83Smrg obj) 7384c3c9db83Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7385c3c9db83Smrg func_warning "\`-dlopen' is ignored for objects" 7386c3c9db83Smrg fi 73872e71ea71Smrg 7388c3c9db83Smrg case " $deplibs" in 7389c3c9db83Smrg *\ -l* | *\ -L*) 7390c3c9db83Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 739185ee4c00Smrg esac 7392692f60a7Smrg 7393c3c9db83Smrg test -n "$rpath" && \ 7394c3c9db83Smrg func_warning "\`-rpath' is ignored for objects" 7395c3c9db83Smrg 7396c3c9db83Smrg test -n "$xrpath" && \ 7397c3c9db83Smrg func_warning "\`-R' is ignored for objects" 7398692f60a7Smrg 7399c3c9db83Smrg test -n "$vinfo" && \ 7400c3c9db83Smrg func_warning "\`-version-info' is ignored for objects" 740185ee4c00Smrg 7402c3c9db83Smrg test -n "$release" && \ 7403c3c9db83Smrg func_warning "\`-release' is ignored for objects" 7404c3c9db83Smrg 7405c3c9db83Smrg case $output in 7406c3c9db83Smrg *.lo) 7407c3c9db83Smrg test -n "$objs$old_deplibs" && \ 7408c3c9db83Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 7409c3c9db83Smrg 7410c3c9db83Smrg libobj=$output 7411c3c9db83Smrg func_lo2o "$libobj" 7412c3c9db83Smrg obj=$func_lo2o_result 74132e71ea71Smrg ;; 74142e71ea71Smrg *) 7415c3c9db83Smrg libobj= 7416c3c9db83Smrg obj="$output" 7417692f60a7Smrg ;; 741885ee4c00Smrg esac 7419692f60a7Smrg 7420c3c9db83Smrg # Delete the old objects. 7421c3c9db83Smrg $opt_dry_run || $RM $obj $libobj 7422692f60a7Smrg 7423c3c9db83Smrg # Objects from convenience libraries. This assumes 7424c3c9db83Smrg # single-version convenience libraries. Whenever we create 7425c3c9db83Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 7426c3c9db83Smrg # the extraction. 7427c3c9db83Smrg reload_conv_objs= 7428c3c9db83Smrg gentop= 7429c3c9db83Smrg # reload_cmds runs $LD directly, so let us get rid of 7430c3c9db83Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 7431c3c9db83Smrg # turning comma into space.. 7432c3c9db83Smrg wl= 7433692f60a7Smrg 7434c3c9db83Smrg if test -n "$convenience"; then 7435c3c9db83Smrg if test -n "$whole_archive_flag_spec"; then 7436c3c9db83Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 7437c3c9db83Smrg reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 7438c3c9db83Smrg else 7439c3c9db83Smrg gentop="$output_objdir/${obj}x" 7440c3c9db83Smrg generated="$generated $gentop" 74412e71ea71Smrg 7442c3c9db83Smrg func_extract_archives $gentop $convenience 7443c3c9db83Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 7444c3c9db83Smrg fi 74452e71ea71Smrg fi 74462e71ea71Smrg 7447c3c9db83Smrg # Create the old-style object. 7448c3c9db83Smrg 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 74492e71ea71Smrg 7450c3c9db83Smrg output="$obj" 7451c3c9db83Smrg func_execute_cmds "$reload_cmds" 'exit $?' 74522e71ea71Smrg 7453c3c9db83Smrg # Exit if we aren't doing a library object file. 7454c3c9db83Smrg if test -z "$libobj"; then 7455c3c9db83Smrg if test -n "$gentop"; then 7456c3c9db83Smrg func_show_eval '${RM}r "$gentop"' 7457c3c9db83Smrg fi 7458c3c9db83Smrg 7459c3c9db83Smrg exit $EXIT_SUCCESS 74602e71ea71Smrg fi 7461c3c9db83Smrg 7462c3c9db83Smrg if test "$build_libtool_libs" != yes; then 7463c3c9db83Smrg if test -n "$gentop"; then 7464c3c9db83Smrg func_show_eval '${RM}r "$gentop"' 7465c3c9db83Smrg fi 7466c3c9db83Smrg 7467c3c9db83Smrg # Create an invalid libtool object if no PIC, so that we don't 7468c3c9db83Smrg # accidentally link it into a program. 7469c3c9db83Smrg # $show "echo timestamp > $libobj" 7470c3c9db83Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 7471c3c9db83Smrg exit $EXIT_SUCCESS 7472c3c9db83Smrg fi 7473c3c9db83Smrg 7474c3c9db83Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 7475c3c9db83Smrg # Only do commands if we really have different PIC objects. 7476c3c9db83Smrg reload_objs="$libobjs $reload_conv_objs" 7477c3c9db83Smrg output="$libobj" 7478c3c9db83Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7479c3c9db83Smrg fi 7480c3c9db83Smrg 7481c3c9db83Smrg if test -n "$gentop"; then 7482c3c9db83Smrg func_show_eval '${RM}r "$gentop"' 7483c3c9db83Smrg fi 7484c3c9db83Smrg 7485c3c9db83Smrg exit $EXIT_SUCCESS 74862e71ea71Smrg ;; 7487692f60a7Smrg 7488c3c9db83Smrg prog) 7489c3c9db83Smrg case $host in 7490c3c9db83Smrg *cygwin*) func_stripname '' '.exe' "$output" 7491c3c9db83Smrg output=$func_stripname_result.exe;; 7492c3c9db83Smrg esac 7493c3c9db83Smrg test -n "$vinfo" && \ 7494c3c9db83Smrg func_warning "\`-version-info' is ignored for programs" 7495692f60a7Smrg 7496c3c9db83Smrg test -n "$release" && \ 7497c3c9db83Smrg func_warning "\`-release' is ignored for programs" 7498692f60a7Smrg 7499c3c9db83Smrg test "$preload" = yes \ 7500c3c9db83Smrg && test "$dlopen_support" = unknown \ 7501c3c9db83Smrg && test "$dlopen_self" = unknown \ 7502c3c9db83Smrg && test "$dlopen_self_static" = unknown && \ 7503c3c9db83Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 7504c3c9db83Smrg 7505c3c9db83Smrg case $host in 7506c3c9db83Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7507c3c9db83Smrg # On Rhapsody replace the C library is the System framework 7508c3c9db83Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 7509c3c9db83Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 75102e71ea71Smrg ;; 7511c3c9db83Smrg esac 75122e71ea71Smrg 7513c3c9db83Smrg case $host in 7514c3c9db83Smrg *-*-darwin*) 7515c3c9db83Smrg # Don't allow lazy linking, it breaks C++ global constructors 7516c3c9db83Smrg # But is supposedly fixed on 10.4 or later (yay!). 7517c3c9db83Smrg if test "$tagname" = CXX ; then 7518c3c9db83Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 7519c3c9db83Smrg 10.[0123]) 7520c3c9db83Smrg compile_command="$compile_command ${wl}-bind_at_load" 7521c3c9db83Smrg finalize_command="$finalize_command ${wl}-bind_at_load" 7522c3c9db83Smrg ;; 7523c3c9db83Smrg esac 75242e71ea71Smrg fi 7525c3c9db83Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7526c3c9db83Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 7527c3c9db83Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 7528c3c9db83Smrg ;; 7529c3c9db83Smrg esac 75302e71ea71Smrg 75312e71ea71Smrg 7532c3c9db83Smrg # move library search paths that coincide with paths to not yet 7533c3c9db83Smrg # installed libraries to the beginning of the library search list 7534c3c9db83Smrg new_libs= 7535c3c9db83Smrg for path in $notinst_path; do 7536c3c9db83Smrg case " $new_libs " in 7537c3c9db83Smrg *" -L$path/$objdir "*) ;; 7538c3c9db83Smrg *) 7539c3c9db83Smrg case " $compile_deplibs " in 7540c3c9db83Smrg *" -L$path/$objdir "*) 7541c3c9db83Smrg new_libs="$new_libs -L$path/$objdir" ;; 754285ee4c00Smrg esac 7543c3c9db83Smrg ;; 7544c3c9db83Smrg esac 7545c3c9db83Smrg done 7546c3c9db83Smrg for deplib in $compile_deplibs; do 7547c3c9db83Smrg case $deplib in 7548c3c9db83Smrg -L*) 7549c3c9db83Smrg case " $new_libs " in 7550c3c9db83Smrg *" $deplib "*) ;; 7551c3c9db83Smrg *) new_libs="$new_libs $deplib" ;; 755285ee4c00Smrg esac 7553c3c9db83Smrg ;; 7554c3c9db83Smrg *) new_libs="$new_libs $deplib" ;; 7555c3c9db83Smrg esac 7556c3c9db83Smrg done 7557c3c9db83Smrg compile_deplibs="$new_libs" 7558692f60a7Smrg 75592e71ea71Smrg 7560c3c9db83Smrg compile_command="$compile_command $compile_deplibs" 7561c3c9db83Smrg finalize_command="$finalize_command $finalize_deplibs" 75622e71ea71Smrg 7563c3c9db83Smrg if test -n "$rpath$xrpath"; then 7564c3c9db83Smrg # If the user specified any rpath flags, then add them. 7565c3c9db83Smrg for libdir in $rpath $xrpath; do 7566c3c9db83Smrg # This is the magic to use -rpath. 7567c3c9db83Smrg case "$finalize_rpath " in 7568c3c9db83Smrg *" $libdir "*) ;; 7569c3c9db83Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 7570c3c9db83Smrg esac 7571c3c9db83Smrg done 7572c3c9db83Smrg fi 75732e71ea71Smrg 7574c3c9db83Smrg # Now hardcode the library paths 7575c3c9db83Smrg rpath= 7576c3c9db83Smrg hardcode_libdirs= 7577c3c9db83Smrg for libdir in $compile_rpath $finalize_rpath; do 7578c3c9db83Smrg if test -n "$hardcode_libdir_flag_spec"; then 7579c3c9db83Smrg if test -n "$hardcode_libdir_separator"; then 7580c3c9db83Smrg if test -z "$hardcode_libdirs"; then 7581c3c9db83Smrg hardcode_libdirs="$libdir" 7582c3c9db83Smrg else 7583c3c9db83Smrg # Just accumulate the unique libdirs. 7584c3c9db83Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7585c3c9db83Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7586c3c9db83Smrg ;; 7587c3c9db83Smrg *) 7588c3c9db83Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7589c3c9db83Smrg ;; 7590c3c9db83Smrg esac 7591c3c9db83Smrg fi 75922e71ea71Smrg else 7593c3c9db83Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7594c3c9db83Smrg rpath="$rpath $flag" 75952e71ea71Smrg fi 7596c3c9db83Smrg elif test -n "$runpath_var"; then 7597c3c9db83Smrg case "$perm_rpath " in 7598c3c9db83Smrg *" $libdir "*) ;; 7599c3c9db83Smrg *) perm_rpath="$perm_rpath $libdir" ;; 7600c3c9db83Smrg esac 7601c3c9db83Smrg fi 7602c3c9db83Smrg case $host in 7603c3c9db83Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7604c3c9db83Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 7605c3c9db83Smrg case :$dllsearchpath: in 7606c3c9db83Smrg *":$libdir:"*) ;; 7607c3c9db83Smrg ::) dllsearchpath=$libdir;; 7608c3c9db83Smrg *) dllsearchpath="$dllsearchpath:$libdir";; 7609c3c9db83Smrg esac 7610c3c9db83Smrg case :$dllsearchpath: in 7611c3c9db83Smrg *":$testbindir:"*) ;; 7612c3c9db83Smrg ::) dllsearchpath=$testbindir;; 7613c3c9db83Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 7614c3c9db83Smrg esac 7615c3c9db83Smrg ;; 7616c3c9db83Smrg esac 7617c3c9db83Smrg done 7618c3c9db83Smrg # Substitute the hardcoded libdirs into the rpath. 7619c3c9db83Smrg if test -n "$hardcode_libdir_separator" && 7620c3c9db83Smrg test -n "$hardcode_libdirs"; then 7621c3c9db83Smrg libdir="$hardcode_libdirs" 7622c3c9db83Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 7623c3c9db83Smrg fi 7624c3c9db83Smrg compile_rpath="$rpath" 76252e71ea71Smrg 7626c3c9db83Smrg rpath= 7627c3c9db83Smrg hardcode_libdirs= 7628c3c9db83Smrg for libdir in $finalize_rpath; do 7629c3c9db83Smrg if test -n "$hardcode_libdir_flag_spec"; then 7630c3c9db83Smrg if test -n "$hardcode_libdir_separator"; then 7631c3c9db83Smrg if test -z "$hardcode_libdirs"; then 7632c3c9db83Smrg hardcode_libdirs="$libdir" 7633c3c9db83Smrg else 7634c3c9db83Smrg # Just accumulate the unique libdirs. 7635c3c9db83Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7636c3c9db83Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7637c3c9db83Smrg ;; 7638c3c9db83Smrg *) 7639c3c9db83Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7640c3c9db83Smrg ;; 7641c3c9db83Smrg esac 7642c3c9db83Smrg fi 7643692f60a7Smrg else 7644c3c9db83Smrg eval flag=\"$hardcode_libdir_flag_spec\" 7645c3c9db83Smrg rpath="$rpath $flag" 7646692f60a7Smrg fi 7647c3c9db83Smrg elif test -n "$runpath_var"; then 7648c3c9db83Smrg case "$finalize_perm_rpath " in 7649c3c9db83Smrg *" $libdir "*) ;; 7650c3c9db83Smrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 7651c3c9db83Smrg esac 7652692f60a7Smrg fi 7653c3c9db83Smrg done 7654c3c9db83Smrg # Substitute the hardcoded libdirs into the rpath. 7655c3c9db83Smrg if test -n "$hardcode_libdir_separator" && 7656c3c9db83Smrg test -n "$hardcode_libdirs"; then 7657c3c9db83Smrg libdir="$hardcode_libdirs" 7658c3c9db83Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 7659c3c9db83Smrg fi 7660c3c9db83Smrg finalize_rpath="$rpath" 7661692f60a7Smrg 7662c3c9db83Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 7663c3c9db83Smrg # Transform all the library objects into standard objects. 7664c3c9db83Smrg compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 7665c3c9db83Smrg finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 7666c3c9db83Smrg fi 7667692f60a7Smrg 7668c3c9db83Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 7669692f60a7Smrg 7670c3c9db83Smrg # template prelinking step 7671c3c9db83Smrg if test -n "$prelink_cmds"; then 7672c3c9db83Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 7673c3c9db83Smrg fi 7674692f60a7Smrg 7675c3c9db83Smrg wrappers_required=yes 7676c3c9db83Smrg case $host in 7677c3c9db83Smrg *cygwin* | *mingw* ) 7678c3c9db83Smrg if test "$build_libtool_libs" != yes; then 7679c3c9db83Smrg wrappers_required=no 7680c3c9db83Smrg fi 7681c3c9db83Smrg ;; 7682c3c9db83Smrg *cegcc) 7683c3c9db83Smrg # Disable wrappers for cegcc, we are cross compiling anyway. 7684c3c9db83Smrg wrappers_required=no 7685c3c9db83Smrg ;; 7686c3c9db83Smrg *) 7687c3c9db83Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 7688c3c9db83Smrg wrappers_required=no 7689c3c9db83Smrg fi 7690c3c9db83Smrg ;; 7691c3c9db83Smrg esac 7692c3c9db83Smrg if test "$wrappers_required" = no; then 7693c3c9db83Smrg # Replace the output file specification. 7694c3c9db83Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 7695c3c9db83Smrg link_command="$compile_command$compile_rpath" 7696692f60a7Smrg 7697c3c9db83Smrg # We have no uninstalled library dependencies, so finalize right now. 7698c3c9db83Smrg exit_status=0 7699c3c9db83Smrg func_show_eval "$link_command" 'exit_status=$?' 7700692f60a7Smrg 7701c3c9db83Smrg # Delete the generated files. 7702c3c9db83Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 7703c3c9db83Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 7704692f60a7Smrg fi 7705692f60a7Smrg 7706c3c9db83Smrg exit $exit_status 7707c3c9db83Smrg fi 7708692f60a7Smrg 7709c3c9db83Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 7710c3c9db83Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 7711c3c9db83Smrg fi 7712c3c9db83Smrg if test -n "$finalize_shlibpath"; then 7713c3c9db83Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 7714c3c9db83Smrg fi 77152e71ea71Smrg 7716c3c9db83Smrg compile_var= 7717c3c9db83Smrg finalize_var= 7718c3c9db83Smrg if test -n "$runpath_var"; then 7719c3c9db83Smrg if test -n "$perm_rpath"; then 7720c3c9db83Smrg # We should set the runpath_var. 7721c3c9db83Smrg rpath= 7722c3c9db83Smrg for dir in $perm_rpath; do 7723c3c9db83Smrg rpath="$rpath$dir:" 7724c3c9db83Smrg done 7725c3c9db83Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 7726692f60a7Smrg fi 7727c3c9db83Smrg if test -n "$finalize_perm_rpath"; then 7728c3c9db83Smrg # We should set the runpath_var. 7729c3c9db83Smrg rpath= 7730c3c9db83Smrg for dir in $finalize_perm_rpath; do 7731c3c9db83Smrg rpath="$rpath$dir:" 7732c3c9db83Smrg done 7733c3c9db83Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 7734692f60a7Smrg fi 7735c3c9db83Smrg fi 7736692f60a7Smrg 7737c3c9db83Smrg if test "$no_install" = yes; then 7738c3c9db83Smrg # We don't need to create a wrapper script. 7739c3c9db83Smrg link_command="$compile_var$compile_command$compile_rpath" 7740c3c9db83Smrg # Replace the output file specification. 7741c3c9db83Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 7742c3c9db83Smrg # Delete the old output file. 7743c3c9db83Smrg $opt_dry_run || $RM $output 7744c3c9db83Smrg # Link the executable and exit 7745c3c9db83Smrg func_show_eval "$link_command" 'exit $?' 77462e71ea71Smrg exit $EXIT_SUCCESS 7747c3c9db83Smrg fi 774885ee4c00Smrg 7749c3c9db83Smrg if test "$hardcode_action" = relink; then 7750c3c9db83Smrg # Fast installation is not supported 7751c3c9db83Smrg link_command="$compile_var$compile_command$compile_rpath" 7752c3c9db83Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 7753c3c9db83Smrg 7754c3c9db83Smrg func_warning "this platform does not like uninstalled shared libraries" 7755c3c9db83Smrg func_warning "\`$output' will be relinked during installation" 7756c3c9db83Smrg else 7757c3c9db83Smrg if test "$fast_install" != no; then 7758c3c9db83Smrg link_command="$finalize_var$compile_command$finalize_rpath" 7759c3c9db83Smrg if test "$fast_install" = yes; then 7760c3c9db83Smrg relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` 7761c3c9db83Smrg else 7762c3c9db83Smrg # fast_install is set to needless 7763c3c9db83Smrg relink_command= 7764c3c9db83Smrg fi 7765692f60a7Smrg else 7766c3c9db83Smrg link_command="$compile_var$compile_command$compile_rpath" 7767c3c9db83Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 7768692f60a7Smrg fi 7769c3c9db83Smrg fi 7770692f60a7Smrg 7771c3c9db83Smrg # Replace the output file specification. 7772c3c9db83Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 7773692f60a7Smrg 7774c3c9db83Smrg # Delete the old output files. 7775c3c9db83Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 7776692f60a7Smrg 7777c3c9db83Smrg func_show_eval "$link_command" 'exit $?' 77782e71ea71Smrg 7779c3c9db83Smrg # Now create the wrapper script. 7780c3c9db83Smrg func_verbose "creating $output" 77812e71ea71Smrg 7782c3c9db83Smrg # Quote the relink command for shipping. 7783c3c9db83Smrg if test -n "$relink_command"; then 7784c3c9db83Smrg # Preserve any variables that may affect compiler behavior 7785c3c9db83Smrg for var in $variables_saved_for_relink; do 7786c3c9db83Smrg if eval test -z \"\${$var+set}\"; then 7787c3c9db83Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 7788c3c9db83Smrg elif eval var_value=\$$var; test -z "$var_value"; then 7789c3c9db83Smrg relink_command="$var=; export $var; $relink_command" 7790692f60a7Smrg else 7791c3c9db83Smrg func_quote_for_eval "$var_value" 7792c3c9db83Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 7793692f60a7Smrg fi 7794c3c9db83Smrg done 7795c3c9db83Smrg relink_command="(cd `pwd`; $relink_command)" 7796c3c9db83Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 7797c3c9db83Smrg fi 779885ee4c00Smrg 7799c3c9db83Smrg # Quote $ECHO for shipping. 7800c3c9db83Smrg if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then 7801c3c9db83Smrg case $progpath in 7802c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 7803c3c9db83Smrg *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 7804c3c9db83Smrg esac 7805c3c9db83Smrg qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` 7806c3c9db83Smrg else 7807c3c9db83Smrg qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` 7808c3c9db83Smrg fi 7809c3c9db83Smrg 7810c3c9db83Smrg # Only actually do things if not in dry run mode. 7811c3c9db83Smrg $opt_dry_run || { 7812c3c9db83Smrg # win32 will think the script is a binary if it has 7813c3c9db83Smrg # a .exe suffix, so we strip it off here. 7814c3c9db83Smrg case $output in 7815c3c9db83Smrg *.exe) func_stripname '' '.exe' "$output" 7816c3c9db83Smrg output=$func_stripname_result ;; 7817c3c9db83Smrg esac 7818c3c9db83Smrg # test for cygwin because mv fails w/o .exe extensions 7819c3c9db83Smrg case $host in 7820c3c9db83Smrg *cygwin*) 7821c3c9db83Smrg exeext=.exe 7822c3c9db83Smrg func_stripname '' '.exe' "$outputname" 7823c3c9db83Smrg outputname=$func_stripname_result ;; 7824c3c9db83Smrg *) exeext= ;; 7825692f60a7Smrg esac 7826c3c9db83Smrg case $host in 7827c3c9db83Smrg *cygwin* | *mingw* ) 7828c3c9db83Smrg func_dirname_and_basename "$output" "" "." 7829c3c9db83Smrg output_name=$func_basename_result 7830c3c9db83Smrg output_path=$func_dirname_result 7831c3c9db83Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 7832c3c9db83Smrg cwrapper="$output_path/$output_name.exe" 7833c3c9db83Smrg $RM $cwrappersource $cwrapper 7834c3c9db83Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 7835c3c9db83Smrg 7836c3c9db83Smrg func_emit_cwrapperexe_src > $cwrappersource 7837c3c9db83Smrg 7838c3c9db83Smrg # The wrapper executable is built using the $host compiler, 7839c3c9db83Smrg # because it contains $host paths and files. If cross- 7840c3c9db83Smrg # compiling, it, like the target executable, must be 7841c3c9db83Smrg # executed on the $host or under an emulation environment. 7842c3c9db83Smrg $opt_dry_run || { 7843c3c9db83Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 7844c3c9db83Smrg $STRIP $cwrapper 7845c3c9db83Smrg } 7846692f60a7Smrg 7847c3c9db83Smrg # Now, create the wrapper script for func_source use: 7848c3c9db83Smrg func_ltwrapper_scriptname $cwrapper 7849c3c9db83Smrg $RM $func_ltwrapper_scriptname_result 7850c3c9db83Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 7851c3c9db83Smrg $opt_dry_run || { 7852c3c9db83Smrg # note: this script will not be executed, so do not chmod. 7853c3c9db83Smrg if test "x$build" = "x$host" ; then 7854c3c9db83Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 7855c3c9db83Smrg else 7856c3c9db83Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 7857c3c9db83Smrg fi 7858c3c9db83Smrg } 7859c3c9db83Smrg ;; 7860c3c9db83Smrg * ) 7861c3c9db83Smrg $RM $output 7862c3c9db83Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 7863692f60a7Smrg 7864c3c9db83Smrg func_emit_wrapper no > $output 7865c3c9db83Smrg chmod +x $output 7866c3c9db83Smrg ;; 7867c3c9db83Smrg esac 7868c3c9db83Smrg } 7869c3c9db83Smrg exit $EXIT_SUCCESS 7870c3c9db83Smrg ;; 7871c3c9db83Smrg esac 7872692f60a7Smrg 7873c3c9db83Smrg # See if we need to build an old-fashioned archive. 7874c3c9db83Smrg for oldlib in $oldlibs; do 7875692f60a7Smrg 7876c3c9db83Smrg if test "$build_libtool_libs" = convenience; then 7877c3c9db83Smrg oldobjs="$libobjs_save $symfileobj" 7878c3c9db83Smrg addlibs="$convenience" 7879c3c9db83Smrg build_libtool_libs=no 7880c3c9db83Smrg else 7881c3c9db83Smrg if test "$build_libtool_libs" = module; then 7882c3c9db83Smrg oldobjs="$libobjs_save" 7883c3c9db83Smrg build_libtool_libs=no 7884c3c9db83Smrg else 7885c3c9db83Smrg oldobjs="$old_deplibs $non_pic_objects" 7886c3c9db83Smrg if test "$preload" = yes && test -f "$symfileobj"; then 7887c3c9db83Smrg oldobjs="$oldobjs $symfileobj" 7888c3c9db83Smrg fi 7889c3c9db83Smrg fi 7890c3c9db83Smrg addlibs="$old_convenience" 7891692f60a7Smrg fi 7892692f60a7Smrg 7893c3c9db83Smrg if test -n "$addlibs"; then 7894c3c9db83Smrg gentop="$output_objdir/${outputname}x" 7895c3c9db83Smrg generated="$generated $gentop" 7896692f60a7Smrg 7897c3c9db83Smrg func_extract_archives $gentop $addlibs 7898c3c9db83Smrg oldobjs="$oldobjs $func_extract_archives_result" 7899c3c9db83Smrg fi 7900692f60a7Smrg 7901c3c9db83Smrg # Do each command in the archive commands. 7902c3c9db83Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 7903c3c9db83Smrg cmds=$old_archive_from_new_cmds 7904c3c9db83Smrg else 7905692f60a7Smrg 7906c3c9db83Smrg # Add any objects from preloaded convenience libraries 7907c3c9db83Smrg if test -n "$dlprefiles"; then 7908c3c9db83Smrg gentop="$output_objdir/${outputname}x" 7909c3c9db83Smrg generated="$generated $gentop" 7910692f60a7Smrg 7911c3c9db83Smrg func_extract_archives $gentop $dlprefiles 7912c3c9db83Smrg oldobjs="$oldobjs $func_extract_archives_result" 7913c3c9db83Smrg fi 7914692f60a7Smrg 7915c3c9db83Smrg # POSIX demands no paths to be encoded in archives. We have 7916c3c9db83Smrg # to avoid creating archives with duplicate basenames if we 7917c3c9db83Smrg # might have to extract them afterwards, e.g., when creating a 7918c3c9db83Smrg # static archive out of a convenience library, or when linking 7919c3c9db83Smrg # the entirety of a libtool archive into another (currently 7920c3c9db83Smrg # not supported by libtool). 7921c3c9db83Smrg if (for obj in $oldobjs 7922c3c9db83Smrg do 7923c3c9db83Smrg func_basename "$obj" 7924c3c9db83Smrg $ECHO "$func_basename_result" 7925c3c9db83Smrg done | sort | sort -uc >/dev/null 2>&1); then 7926c3c9db83Smrg : 7927c3c9db83Smrg else 7928c3c9db83Smrg $ECHO "copying selected object files to avoid basename conflicts..." 7929c3c9db83Smrg gentop="$output_objdir/${outputname}x" 7930c3c9db83Smrg generated="$generated $gentop" 7931c3c9db83Smrg func_mkdir_p "$gentop" 7932c3c9db83Smrg save_oldobjs=$oldobjs 7933c3c9db83Smrg oldobjs= 7934c3c9db83Smrg counter=1 7935c3c9db83Smrg for obj in $save_oldobjs 7936c3c9db83Smrg do 7937c3c9db83Smrg func_basename "$obj" 7938c3c9db83Smrg objbase="$func_basename_result" 7939c3c9db83Smrg case " $oldobjs " in 7940c3c9db83Smrg " ") oldobjs=$obj ;; 7941c3c9db83Smrg *[\ /]"$objbase "*) 7942c3c9db83Smrg while :; do 7943c3c9db83Smrg # Make sure we don't pick an alternate name that also 7944c3c9db83Smrg # overlaps. 7945c3c9db83Smrg newobj=lt$counter-$objbase 7946c3c9db83Smrg func_arith $counter + 1 7947c3c9db83Smrg counter=$func_arith_result 7948c3c9db83Smrg case " $oldobjs " in 7949c3c9db83Smrg *[\ /]"$newobj "*) ;; 7950c3c9db83Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 7951c3c9db83Smrg esac 7952c3c9db83Smrg done 7953c3c9db83Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 7954c3c9db83Smrg oldobjs="$oldobjs $gentop/$newobj" 7955c3c9db83Smrg ;; 7956c3c9db83Smrg *) oldobjs="$oldobjs $obj" ;; 7957c3c9db83Smrg esac 7958692f60a7Smrg done 795985ee4c00Smrg fi 7960c3c9db83Smrg eval cmds=\"$old_archive_cmds\" 79612e71ea71Smrg 7962c3c9db83Smrg func_len " $cmds" 7963c3c9db83Smrg len=$func_len_result 7964c3c9db83Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7965c3c9db83Smrg cmds=$old_archive_cmds 7966c3c9db83Smrg else 7967c3c9db83Smrg # the command line is too long to link in one step, link in parts 7968c3c9db83Smrg func_verbose "using piecewise archive linking..." 7969c3c9db83Smrg save_RANLIB=$RANLIB 7970c3c9db83Smrg RANLIB=: 7971c3c9db83Smrg objlist= 7972c3c9db83Smrg concat_cmds= 7973c3c9db83Smrg save_oldobjs=$oldobjs 7974c3c9db83Smrg oldobjs= 7975c3c9db83Smrg # Is there a better way of finding the last object in the list? 7976c3c9db83Smrg for obj in $save_oldobjs 7977c3c9db83Smrg do 7978c3c9db83Smrg last_oldobj=$obj 7979c3c9db83Smrg done 7980c3c9db83Smrg eval test_cmds=\"$old_archive_cmds\" 7981c3c9db83Smrg func_len " $test_cmds" 7982c3c9db83Smrg len0=$func_len_result 7983c3c9db83Smrg len=$len0 7984c3c9db83Smrg for obj in $save_oldobjs 7985c3c9db83Smrg do 7986c3c9db83Smrg func_len " $obj" 7987c3c9db83Smrg func_arith $len + $func_len_result 7988c3c9db83Smrg len=$func_arith_result 7989c3c9db83Smrg func_append objlist " $obj" 7990c3c9db83Smrg if test "$len" -lt "$max_cmd_len"; then 7991c3c9db83Smrg : 7992c3c9db83Smrg else 7993c3c9db83Smrg # the above command should be used before it gets too long 7994c3c9db83Smrg oldobjs=$objlist 7995c3c9db83Smrg if test "$obj" = "$last_oldobj" ; then 7996c3c9db83Smrg RANLIB=$save_RANLIB 7997c3c9db83Smrg fi 7998c3c9db83Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7999c3c9db83Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 8000c3c9db83Smrg objlist= 8001c3c9db83Smrg len=$len0 8002c3c9db83Smrg fi 8003c3c9db83Smrg done 8004c3c9db83Smrg RANLIB=$save_RANLIB 8005c3c9db83Smrg oldobjs=$objlist 8006c3c9db83Smrg if test "X$oldobjs" = "X" ; then 8007c3c9db83Smrg eval cmds=\"\$concat_cmds\" 8008c3c9db83Smrg else 8009c3c9db83Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 8010c3c9db83Smrg fi 8011c3c9db83Smrg fi 8012c3c9db83Smrg fi 8013c3c9db83Smrg func_execute_cmds "$cmds" 'exit $?' 8014692f60a7Smrg done 8015692f60a7Smrg 8016c3c9db83Smrg test -n "$generated" && \ 8017c3c9db83Smrg func_show_eval "${RM}r$generated" 8018692f60a7Smrg 8019c3c9db83Smrg # Now create the libtool archive. 8020c3c9db83Smrg case $output in 8021c3c9db83Smrg *.la) 8022c3c9db83Smrg old_library= 8023c3c9db83Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 8024c3c9db83Smrg func_verbose "creating $output" 802585ee4c00Smrg 8026c3c9db83Smrg # Preserve any variables that may affect compiler behavior 8027c3c9db83Smrg for var in $variables_saved_for_relink; do 8028c3c9db83Smrg if eval test -z \"\${$var+set}\"; then 8029c3c9db83Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8030c3c9db83Smrg elif eval var_value=\$$var; test -z "$var_value"; then 8031c3c9db83Smrg relink_command="$var=; export $var; $relink_command" 80322e71ea71Smrg else 8033c3c9db83Smrg func_quote_for_eval "$var_value" 8034c3c9db83Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 80352e71ea71Smrg fi 8036c3c9db83Smrg done 8037c3c9db83Smrg # Quote the link command for shipping. 8038c3c9db83Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 8039c3c9db83Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 8040c3c9db83Smrg if test "$hardcode_automatic" = yes ; then 8041c3c9db83Smrg relink_command= 8042c3c9db83Smrg fi 8043692f60a7Smrg 8044c3c9db83Smrg # Only create the output if not a dry run. 8045c3c9db83Smrg $opt_dry_run || { 8046c3c9db83Smrg for installed in no yes; do 8047c3c9db83Smrg if test "$installed" = yes; then 8048c3c9db83Smrg if test -z "$install_libdir"; then 8049c3c9db83Smrg break 8050c3c9db83Smrg fi 8051c3c9db83Smrg output="$output_objdir/$outputname"i 8052c3c9db83Smrg # Replace all uninstalled libtool libraries with the installed ones 8053c3c9db83Smrg newdependency_libs= 8054c3c9db83Smrg for deplib in $dependency_libs; do 8055c3c9db83Smrg case $deplib in 8056c3c9db83Smrg *.la) 8057c3c9db83Smrg func_basename "$deplib" 8058c3c9db83Smrg name="$func_basename_result" 8059c3c9db83Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8060c3c9db83Smrg test -z "$libdir" && \ 8061c3c9db83Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 8062c3c9db83Smrg newdependency_libs="$newdependency_libs $libdir/$name" 8063c3c9db83Smrg ;; 8064c3c9db83Smrg *) newdependency_libs="$newdependency_libs $deplib" ;; 8065c3c9db83Smrg esac 8066c3c9db83Smrg done 8067c3c9db83Smrg dependency_libs="$newdependency_libs" 8068c3c9db83Smrg newdlfiles= 8069c3c9db83Smrg 8070c3c9db83Smrg for lib in $dlfiles; do 8071c3c9db83Smrg case $lib in 8072c3c9db83Smrg *.la) 8073c3c9db83Smrg func_basename "$lib" 8074c3c9db83Smrg name="$func_basename_result" 8075c3c9db83Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8076c3c9db83Smrg test -z "$libdir" && \ 8077c3c9db83Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 8078c3c9db83Smrg newdlfiles="$newdlfiles $libdir/$name" 8079c3c9db83Smrg ;; 8080c3c9db83Smrg *) newdlfiles="$newdlfiles $lib" ;; 8081c3c9db83Smrg esac 8082c3c9db83Smrg done 8083c3c9db83Smrg dlfiles="$newdlfiles" 8084c3c9db83Smrg newdlprefiles= 8085c3c9db83Smrg for lib in $dlprefiles; do 8086c3c9db83Smrg case $lib in 8087c3c9db83Smrg *.la) 8088c3c9db83Smrg # Only pass preopened files to the pseudo-archive (for 8089c3c9db83Smrg # eventual linking with the app. that links it) if we 8090c3c9db83Smrg # didn't already link the preopened objects directly into 8091c3c9db83Smrg # the library: 8092c3c9db83Smrg func_basename "$lib" 8093c3c9db83Smrg name="$func_basename_result" 8094c3c9db83Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8095c3c9db83Smrg test -z "$libdir" && \ 8096c3c9db83Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 8097c3c9db83Smrg newdlprefiles="$newdlprefiles $libdir/$name" 8098c3c9db83Smrg ;; 8099c3c9db83Smrg esac 8100c3c9db83Smrg done 8101c3c9db83Smrg dlprefiles="$newdlprefiles" 8102c3c9db83Smrg else 8103c3c9db83Smrg newdlfiles= 8104c3c9db83Smrg for lib in $dlfiles; do 8105c3c9db83Smrg case $lib in 8106c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8107c3c9db83Smrg *) abs=`pwd`"/$lib" ;; 8108c3c9db83Smrg esac 8109c3c9db83Smrg newdlfiles="$newdlfiles $abs" 8110c3c9db83Smrg done 8111c3c9db83Smrg dlfiles="$newdlfiles" 8112c3c9db83Smrg newdlprefiles= 8113c3c9db83Smrg for lib in $dlprefiles; do 8114c3c9db83Smrg case $lib in 8115c3c9db83Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8116c3c9db83Smrg *) abs=`pwd`"/$lib" ;; 8117c3c9db83Smrg esac 8118c3c9db83Smrg newdlprefiles="$newdlprefiles $abs" 8119c3c9db83Smrg done 8120c3c9db83Smrg dlprefiles="$newdlprefiles" 8121c3c9db83Smrg fi 8122c3c9db83Smrg $RM $output 8123c3c9db83Smrg # place dlname in correct position for cygwin 8124c3c9db83Smrg tdlname=$dlname 8125c3c9db83Smrg case $host,$output,$installed,$module,$dlname in 8126c3c9db83Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 8127c3c9db83Smrg esac 8128c3c9db83Smrg $ECHO > $output "\ 8129c3c9db83Smrg# $outputname - a libtool library file 8130c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 8131c3c9db83Smrg# 8132c3c9db83Smrg# Please DO NOT delete this file! 8133c3c9db83Smrg# It is necessary for linking the library. 8134692f60a7Smrg 8135c3c9db83Smrg# The name that we can dlopen(3). 8136c3c9db83Smrgdlname='$tdlname' 8137692f60a7Smrg 8138c3c9db83Smrg# Names of this library. 8139c3c9db83Smrglibrary_names='$library_names' 8140692f60a7Smrg 8141c3c9db83Smrg# The name of the static archive. 8142c3c9db83Smrgold_library='$old_library' 8143692f60a7Smrg 8144c3c9db83Smrg# Linker flags that can not go in dependency_libs. 8145c3c9db83Smrginherited_linker_flags='$new_inherited_linker_flags' 8146692f60a7Smrg 8147c3c9db83Smrg# Libraries that this one depends upon. 8148c3c9db83Smrgdependency_libs='$dependency_libs' 8149692f60a7Smrg 8150c3c9db83Smrg# Names of additional weak libraries provided by this library 8151c3c9db83Smrgweak_library_names='$weak_libs' 8152692f60a7Smrg 8153c3c9db83Smrg# Version information for $libname. 8154c3c9db83Smrgcurrent=$current 8155c3c9db83Smrgage=$age 8156c3c9db83Smrgrevision=$revision 8157692f60a7Smrg 8158c3c9db83Smrg# Is this an already installed library? 8159c3c9db83Smrginstalled=$installed 8160692f60a7Smrg 8161c3c9db83Smrg# Should we warn about portability when linking against -modules? 8162c3c9db83Smrgshouldnotlink=$module 8163692f60a7Smrg 8164c3c9db83Smrg# Files to dlopen/dlpreopen 8165c3c9db83Smrgdlopen='$dlfiles' 8166c3c9db83Smrgdlpreopen='$dlprefiles' 8167692f60a7Smrg 8168c3c9db83Smrg# Directory that this library needs to be installed in: 8169c3c9db83Smrglibdir='$install_libdir'" 8170c3c9db83Smrg if test "$installed" = no && test "$need_relink" = yes; then 8171c3c9db83Smrg $ECHO >> $output "\ 8172c3c9db83Smrgrelink_command=\"$relink_command\"" 8173c3c9db83Smrg fi 8174c3c9db83Smrg done 8175c3c9db83Smrg } 8176692f60a7Smrg 8177c3c9db83Smrg # Do a symbolic link so that the libtool archive can be found in 8178c3c9db83Smrg # LD_LIBRARY_PATH before the program is installed. 8179c3c9db83Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 8180c3c9db83Smrg ;; 8181c3c9db83Smrg esac 8182c3c9db83Smrg exit $EXIT_SUCCESS 8183c3c9db83Smrg} 81842e71ea71Smrg 8185c3c9db83Smrg{ test "$mode" = link || test "$mode" = relink; } && 8186c3c9db83Smrg func_mode_link ${1+"$@"} 8187692f60a7Smrg 8188692f60a7Smrg 8189c3c9db83Smrg# func_mode_uninstall arg... 8190c3c9db83Smrgfunc_mode_uninstall () 8191c3c9db83Smrg{ 8192c3c9db83Smrg $opt_debug 8193c3c9db83Smrg RM="$nonopt" 8194692f60a7Smrg files= 8195692f60a7Smrg rmforce= 8196692f60a7Smrg exit_status=0 8197692f60a7Smrg 8198692f60a7Smrg # This variable tells wrapper scripts just to set variables rather 8199692f60a7Smrg # than running their programs. 8200692f60a7Smrg libtool_install_magic="$magic" 8201692f60a7Smrg 8202692f60a7Smrg for arg 8203692f60a7Smrg do 8204692f60a7Smrg case $arg in 8205c3c9db83Smrg -f) RM="$RM $arg"; rmforce=yes ;; 8206c3c9db83Smrg -*) RM="$RM $arg" ;; 8207692f60a7Smrg *) files="$files $arg" ;; 8208692f60a7Smrg esac 8209692f60a7Smrg done 8210692f60a7Smrg 8211c3c9db83Smrg test -z "$RM" && \ 8212c3c9db83Smrg func_fatal_help "you must specify an RM program" 8213692f60a7Smrg 8214692f60a7Smrg rmdirs= 8215692f60a7Smrg 8216692f60a7Smrg origobjdir="$objdir" 8217692f60a7Smrg for file in $files; do 8218c3c9db83Smrg func_dirname "$file" "" "." 8219c3c9db83Smrg dir="$func_dirname_result" 8220c3c9db83Smrg if test "X$dir" = X.; then 8221692f60a7Smrg objdir="$origobjdir" 8222692f60a7Smrg else 8223692f60a7Smrg objdir="$dir/$origobjdir" 8224692f60a7Smrg fi 8225c3c9db83Smrg func_basename "$file" 8226c3c9db83Smrg name="$func_basename_result" 8227692f60a7Smrg test "$mode" = uninstall && objdir="$dir" 8228692f60a7Smrg 8229692f60a7Smrg # Remember objdir for removal later, being careful to avoid duplicates 8230692f60a7Smrg if test "$mode" = clean; then 8231692f60a7Smrg case " $rmdirs " in 8232692f60a7Smrg *" $objdir "*) ;; 8233692f60a7Smrg *) rmdirs="$rmdirs $objdir" ;; 8234692f60a7Smrg esac 8235692f60a7Smrg fi 8236692f60a7Smrg 8237692f60a7Smrg # Don't error if the file doesn't exist and rm -f was used. 8238c3c9db83Smrg if { test -L "$file"; } >/dev/null 2>&1 || 8239c3c9db83Smrg { test -h "$file"; } >/dev/null 2>&1 || 8240c3c9db83Smrg test -f "$file"; then 8241692f60a7Smrg : 8242692f60a7Smrg elif test -d "$file"; then 8243692f60a7Smrg exit_status=1 8244692f60a7Smrg continue 8245692f60a7Smrg elif test "$rmforce" = yes; then 8246692f60a7Smrg continue 8247692f60a7Smrg fi 8248692f60a7Smrg 8249692f60a7Smrg rmfiles="$file" 8250692f60a7Smrg 8251692f60a7Smrg case $name in 8252692f60a7Smrg *.la) 8253692f60a7Smrg # Possibly a libtool archive, so verify it. 8254c3c9db83Smrg if func_lalib_p "$file"; then 8255c3c9db83Smrg func_source $dir/$name 8256692f60a7Smrg 8257692f60a7Smrg # Delete the libtool libraries and symlinks. 8258692f60a7Smrg for n in $library_names; do 8259692f60a7Smrg rmfiles="$rmfiles $objdir/$n" 8260692f60a7Smrg done 8261692f60a7Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 8262692f60a7Smrg 8263692f60a7Smrg case "$mode" in 8264692f60a7Smrg clean) 8265692f60a7Smrg case " $library_names " in 8266692f60a7Smrg # " " in the beginning catches empty $dlname 8267692f60a7Smrg *" $dlname "*) ;; 8268692f60a7Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 8269692f60a7Smrg esac 8270c3c9db83Smrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 8271692f60a7Smrg ;; 8272692f60a7Smrg uninstall) 8273692f60a7Smrg if test -n "$library_names"; then 8274692f60a7Smrg # Do each command in the postuninstall commands. 8275c3c9db83Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8276692f60a7Smrg fi 8277692f60a7Smrg 8278692f60a7Smrg if test -n "$old_library"; then 8279692f60a7Smrg # Do each command in the old_postuninstall commands. 8280c3c9db83Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8281692f60a7Smrg fi 8282692f60a7Smrg # FIXME: should reinstall the best remaining shared library. 8283692f60a7Smrg ;; 8284692f60a7Smrg esac 8285692f60a7Smrg fi 8286692f60a7Smrg ;; 8287692f60a7Smrg 8288692f60a7Smrg *.lo) 8289692f60a7Smrg # Possibly a libtool object, so verify it. 8290c3c9db83Smrg if func_lalib_p "$file"; then 8291692f60a7Smrg 8292692f60a7Smrg # Read the .lo file 8293c3c9db83Smrg func_source $dir/$name 8294692f60a7Smrg 8295692f60a7Smrg # Add PIC object to the list of files to remove. 8296c3c9db83Smrg if test -n "$pic_object" && 8297c3c9db83Smrg test "$pic_object" != none; then 8298692f60a7Smrg rmfiles="$rmfiles $dir/$pic_object" 8299692f60a7Smrg fi 8300692f60a7Smrg 8301692f60a7Smrg # Add non-PIC object to the list of files to remove. 8302c3c9db83Smrg if test -n "$non_pic_object" && 8303c3c9db83Smrg test "$non_pic_object" != none; then 8304692f60a7Smrg rmfiles="$rmfiles $dir/$non_pic_object" 8305692f60a7Smrg fi 8306692f60a7Smrg fi 8307692f60a7Smrg ;; 8308692f60a7Smrg 8309692f60a7Smrg *) 8310692f60a7Smrg if test "$mode" = clean ; then 8311692f60a7Smrg noexename=$name 8312692f60a7Smrg case $file in 8313692f60a7Smrg *.exe) 8314c3c9db83Smrg func_stripname '' '.exe' "$file" 8315c3c9db83Smrg file=$func_stripname_result 8316c3c9db83Smrg func_stripname '' '.exe' "$name" 8317c3c9db83Smrg noexename=$func_stripname_result 8318692f60a7Smrg # $file with .exe has already been added to rmfiles, 8319692f60a7Smrg # add $file without .exe 8320692f60a7Smrg rmfiles="$rmfiles $file" 8321692f60a7Smrg ;; 8322692f60a7Smrg esac 8323692f60a7Smrg # Do a test to see if this is a libtool program. 8324c3c9db83Smrg if func_ltwrapper_p "$file"; then 8325c3c9db83Smrg if func_ltwrapper_executable_p "$file"; then 8326c3c9db83Smrg func_ltwrapper_scriptname "$file" 8327c3c9db83Smrg relink_command= 8328c3c9db83Smrg func_source $func_ltwrapper_scriptname_result 8329c3c9db83Smrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 8330c3c9db83Smrg else 8331c3c9db83Smrg relink_command= 8332c3c9db83Smrg func_source $dir/$noexename 8333c3c9db83Smrg fi 8334692f60a7Smrg 8335692f60a7Smrg # note $name still contains .exe if it was in $file originally 8336692f60a7Smrg # as does the version of $file that was added into $rmfiles 8337692f60a7Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 8338692f60a7Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 8339692f60a7Smrg rmfiles="$rmfiles $objdir/lt-$name" 8340692f60a7Smrg fi 8341692f60a7Smrg if test "X$noexename" != "X$name" ; then 8342692f60a7Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 8343692f60a7Smrg fi 8344692f60a7Smrg fi 8345692f60a7Smrg fi 8346692f60a7Smrg ;; 8347692f60a7Smrg esac 8348c3c9db83Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 8349692f60a7Smrg done 8350692f60a7Smrg objdir="$origobjdir" 8351692f60a7Smrg 8352692f60a7Smrg # Try to remove the ${objdir}s in the directories where we deleted files 8353692f60a7Smrg for dir in $rmdirs; do 8354692f60a7Smrg if test -d "$dir"; then 8355c3c9db83Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 8356692f60a7Smrg fi 8357692f60a7Smrg done 8358692f60a7Smrg 8359692f60a7Smrg exit $exit_status 8360c3c9db83Smrg} 8361692f60a7Smrg 8362c3c9db83Smrg{ test "$mode" = uninstall || test "$mode" = clean; } && 8363c3c9db83Smrg func_mode_uninstall ${1+"$@"} 836485ee4c00Smrg 8365c3c9db83Smrgtest -z "$mode" && { 8366c3c9db83Smrg help="$generic_help" 8367c3c9db83Smrg func_fatal_help "you must specify a MODE" 8368c3c9db83Smrg} 8369c3c9db83Smrg 8370c3c9db83Smrgtest -z "$exec_cmd" && \ 8371c3c9db83Smrg func_fatal_help "invalid operation mode \`$mode'" 8372692f60a7Smrg 8373692f60a7Smrgif test -n "$exec_cmd"; then 8374c3c9db83Smrg eval exec "$exec_cmd" 8375692f60a7Smrg exit $EXIT_FAILURE 8376692f60a7Smrgfi 8377692f60a7Smrg 8378c3c9db83Smrgexit $exit_status 8379692f60a7Smrg 8380692f60a7Smrg 8381692f60a7Smrg# The TAGs below are defined such that we never get into a situation 8382692f60a7Smrg# in which we disable both kinds of libraries. Given conflicting 8383692f60a7Smrg# choices, we go for a static library, that is the most portable, 8384692f60a7Smrg# since we can't tell whether shared libraries were disabled because 8385692f60a7Smrg# the user asked for that or because the platform doesn't support 8386692f60a7Smrg# them. This is particularly important on AIX, because we don't 8387692f60a7Smrg# support having both static and shared libraries enabled at the same 8388692f60a7Smrg# time on that platform, so we default to a shared-only configuration. 8389692f60a7Smrg# If a disable-shared tag is given, we'll fallback to a static-only 8390692f60a7Smrg# configuration. But we'll never go from static-only to shared-only. 8391692f60a7Smrg 8392692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 8393c3c9db83Smrgbuild_libtool_libs=no 8394c3c9db83Smrgbuild_old_libs=yes 8395692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 8396692f60a7Smrg 8397692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 8398c3c9db83Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 8399692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-static 8400692f60a7Smrg 8401692f60a7Smrg# Local Variables: 8402692f60a7Smrg# mode:shell-script 8403692f60a7Smrg# sh-indentation:2 8404692f60a7Smrg# End: 8405c3c9db83Smrg# vi:sw=2 8406c3c9db83Smrg 8407