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