ltmain.sh revision 1473d951
11473d951Smrg# Generated from ltmain.m4sh. 21473d951Smrg 31473d951Smrg# ltmain.sh (GNU libtool) 2.2.6 41473d951Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 51473d951Smrg 61473d951Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. 71473d951Smrg# This is free software; see the source for copying conditions. There is NO 81473d951Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 91473d951Smrg 101473d951Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11ab47cfaaSmrg# it under the terms of the GNU General Public License as published by 12ab47cfaaSmrg# the Free Software Foundation; either version 2 of the License, or 13ab47cfaaSmrg# (at your option) any later version. 14ab47cfaaSmrg# 151473d951Smrg# As a special exception to the GNU General Public License, 161473d951Smrg# if you distribute this file as part of a program or library that 171473d951Smrg# is built using GNU Libtool, you may include this file under the 181473d951Smrg# same distribution terms that you use for the rest of that program. 191473d951Smrg# 201473d951Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21ab47cfaaSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22ab47cfaaSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23ab47cfaaSmrg# General Public License for more details. 24ab47cfaaSmrg# 25ab47cfaaSmrg# You should have received a copy of the GNU General Public License 261473d951Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 271473d951Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 281473d951Smrg# or obtained by writing to the Free Software Foundation, Inc., 291473d951Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30ab47cfaaSmrg 311473d951Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 321473d951Smrg# 331473d951Smrg# Provide generalized library-building support services. 341473d951Smrg# 351473d951Smrg# --config show all configuration variables 361473d951Smrg# --debug enable verbose shell tracing 371473d951Smrg# -n, --dry-run display commands without modifying any files 381473d951Smrg# --features display basic configuration information and exit 391473d951Smrg# --mode=MODE use operation mode MODE 401473d951Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 411473d951Smrg# --quiet, --silent don't print informational messages 421473d951Smrg# --tag=TAG use configuration variables from tag TAG 431473d951Smrg# -v, --verbose print informational messages (default) 441473d951Smrg# --version print version information 451473d951Smrg# -h, --help print short or long help message 461473d951Smrg# 471473d951Smrg# MODE must be one of the following: 481473d951Smrg# 491473d951Smrg# clean remove files from the build directory 501473d951Smrg# compile compile a source file into a libtool object 511473d951Smrg# execute automatically set library path, then run a program 521473d951Smrg# finish complete the installation of libtool libraries 531473d951Smrg# install install libraries or executables 541473d951Smrg# link create a library or an executable 551473d951Smrg# uninstall remove libraries from an installed directory 561473d951Smrg# 571473d951Smrg# MODE-ARGS vary depending on the MODE. 581473d951Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 591473d951Smrg# 601473d951Smrg# When reporting a bug, please describe a test case to reproduce it and 611473d951Smrg# include the following information: 621473d951Smrg# 631473d951Smrg# host-triplet: $host 641473d951Smrg# shell: $SHELL 651473d951Smrg# compiler: $LTCC 661473d951Smrg# compiler flags: $LTCFLAGS 671473d951Smrg# linker: $LD (gnu? $with_gnu_ld) 681473d951Smrg# $progname: (GNU libtool) 2.2.6 691473d951Smrg# automake: $automake_version 701473d951Smrg# autoconf: $autoconf_version 711473d951Smrg# 721473d951Smrg# Report bugs to <bug-libtool@gnu.org>. 73ab47cfaaSmrg 74ab47cfaaSmrgPROGRAM=ltmain.sh 75ab47cfaaSmrgPACKAGE=libtool 761473d951SmrgVERSION=2.2.6 771473d951SmrgTIMESTAMP="" 781473d951Smrgpackage_revision=1.3012 798697ee19Smrg 801473d951Smrg# Be Bourne compatible 818697ee19Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 828697ee19Smrg emulate sh 838697ee19Smrg NULLCMD=: 848697ee19Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 858697ee19Smrg # is contrary to our usage. Disable this feature. 868697ee19Smrg alias -g '${1+"$@"}'='"$@"' 87ab47cfaaSmrg setopt NO_GLOB_SUBST 888697ee19Smrgelse 898697ee19Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 90ab47cfaaSmrgfi 918697ee19SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 928697ee19SmrgDUALCASE=1; export DUALCASE # for MKS sh 93ab47cfaaSmrg 941473d951Smrg# NLS nuisances: We save the old values to restore during execute mode. 95ab47cfaaSmrg# Only set LANG and LC_ALL to C if already set. 96ab47cfaaSmrg# These must not be set unconditionally because not all systems understand 97ab47cfaaSmrg# e.g. LANG=C (notably SCO). 981473d951Smrglt_user_locale= 991473d951Smrglt_safe_locale= 1001473d951Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1018697ee19Smrgdo 1028697ee19Smrg eval "if test \"\${$lt_var+set}\" = set; then 1031473d951Smrg save_$lt_var=\$$lt_var 1041473d951Smrg $lt_var=C 1058697ee19Smrg export $lt_var 1061473d951Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 1071473d951Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1088697ee19Smrg fi" 1098697ee19Smrgdone 110ab47cfaaSmrg 1111473d951Smrg$lt_unset CDPATH 1121473d951Smrg 1131473d951Smrg 1141473d951Smrg 1151473d951Smrg 1161473d951Smrg 1171473d951Smrg: ${CP="cp -f"} 1181473d951Smrg: ${ECHO="echo"} 1191473d951Smrg: ${EGREP="/bin/grep -E"} 1201473d951Smrg: ${FGREP="/bin/grep -F"} 1211473d951Smrg: ${GREP="/bin/grep"} 1221473d951Smrg: ${LN_S="ln -s"} 1231473d951Smrg: ${MAKE="make"} 1241473d951Smrg: ${MKDIR="mkdir"} 1251473d951Smrg: ${MV="mv -f"} 1261473d951Smrg: ${RM="rm -f"} 1271473d951Smrg: ${SED="/bin/sed"} 1281473d951Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 1291473d951Smrg: ${Xsed="$SED -e 1s/^X//"} 1301473d951Smrg 1311473d951Smrg# Global variables: 1321473d951SmrgEXIT_SUCCESS=0 1331473d951SmrgEXIT_FAILURE=1 1341473d951SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 1351473d951SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 1361473d951Smrg 1371473d951Smrgexit_status=$EXIT_SUCCESS 1381473d951Smrg 139ab47cfaaSmrg# Make sure IFS has a sensible default 140ab47cfaaSmrglt_nl=' 141ab47cfaaSmrg' 142ab47cfaaSmrgIFS=" $lt_nl" 143ab47cfaaSmrg 1441473d951Smrgdirname="s,/[^/]*$,," 1451473d951Smrgbasename="s,^.*/,," 1461473d951Smrg 1471473d951Smrg# func_dirname_and_basename file append nondir_replacement 1481473d951Smrg# perform func_basename and func_dirname in a single function 1491473d951Smrg# call: 1501473d951Smrg# dirname: Compute the dirname of FILE. If nonempty, 1511473d951Smrg# add APPEND to the result, otherwise set result 1521473d951Smrg# to NONDIR_REPLACEMENT. 1531473d951Smrg# value returned in "$func_dirname_result" 1541473d951Smrg# basename: Compute filename of FILE. 1551473d951Smrg# value retuned in "$func_basename_result" 1561473d951Smrg# Implementation must be kept synchronized with func_dirname 1571473d951Smrg# and func_basename. For efficiency, we do not delegate to 1581473d951Smrg# those functions but instead duplicate the functionality here. 1591473d951Smrgfunc_dirname_and_basename () 1601473d951Smrg{ 1611473d951Smrg # Extract subdirectory from the argument. 1621473d951Smrg func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` 1631473d951Smrg if test "X$func_dirname_result" = "X${1}"; then 1641473d951Smrg func_dirname_result="${3}" 1651473d951Smrg else 1661473d951Smrg func_dirname_result="$func_dirname_result${2}" 1671473d951Smrg fi 1681473d951Smrg func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` 1691473d951Smrg} 170ab47cfaaSmrg 1711473d951Smrg# Generated shell functions inserted here. 1721473d951Smrg 1731473d951Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1741473d951Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1751473d951Smrg# the _XPG environment variable is not equal to 1 (one), the special 1761473d951Smrg# positional parameter $0, within a function call, is the name of the 1771473d951Smrg# function. 1781473d951Smrgprogpath="$0" 1791473d951Smrg 1801473d951Smrg# The name of this program: 1811473d951Smrg# In the unlikely event $progname began with a '-', it would play havoc with 1821473d951Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case: 1831473d951Smrgfunc_dirname_and_basename "$progpath" 1841473d951Smrgprogname=$func_basename_result 1851473d951Smrgcase $progname in 1861473d951Smrg -*) progname=./$progname ;; 1871473d951Smrgesac 1881473d951Smrg 1891473d951Smrg# Make sure we have an absolute path for reexecution: 1901473d951Smrgcase $progpath in 1911473d951Smrg [\\/]*|[A-Za-z]:\\*) ;; 1921473d951Smrg *[\\/]*) 1931473d951Smrg progdir=$func_dirname_result 1941473d951Smrg progdir=`cd "$progdir" && pwd` 1951473d951Smrg progpath="$progdir/$progname" 1961473d951Smrg ;; 1971473d951Smrg *) 1981473d951Smrg save_IFS="$IFS" 1991473d951Smrg IFS=: 2001473d951Smrg for progdir in $PATH; do 2011473d951Smrg IFS="$save_IFS" 2021473d951Smrg test -x "$progdir/$progname" && break 2031473d951Smrg done 2041473d951Smrg IFS="$save_IFS" 2051473d951Smrg test -n "$progdir" || progdir=`pwd` 2061473d951Smrg progpath="$progdir/$progname" 2071473d951Smrg ;; 2081473d951Smrgesac 2091473d951Smrg 2101473d951Smrg# Sed substitution that helps us do robust quoting. It backslashifies 2111473d951Smrg# metacharacters that are still active within double-quoted strings. 2121473d951SmrgXsed="${SED}"' -e 1s/^X//' 2131473d951Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 2141473d951Smrg 2151473d951Smrg# Same as above, but do not quote variable references. 2161473d951Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 2171473d951Smrg 2181473d951Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 2191473d951Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 2201473d951Smrg# in input to double_quote_subst, that '$' was protected from expansion. 2211473d951Smrg# Since each input `\' is now two `\'s, look for any number of runs of 2221473d951Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 2231473d951Smrgbs='\\' 2241473d951Smrgbs2='\\\\' 2251473d951Smrgbs4='\\\\\\\\' 2261473d951Smrgdollar='\$' 2271473d951Smrgsed_double_backslash="\ 2281473d951Smrg s/$bs4/&\\ 2291473d951Smrg/g 2301473d951Smrg s/^$bs2$dollar/$bs&/ 2311473d951Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 2321473d951Smrg s/\n//g" 2331473d951Smrg 2341473d951Smrg# Standard options: 2351473d951Smrgopt_dry_run=false 2361473d951Smrgopt_help=false 2371473d951Smrgopt_quiet=false 2381473d951Smrgopt_verbose=false 2391473d951Smrgopt_warning=: 2401473d951Smrg 2411473d951Smrg# func_echo arg... 2421473d951Smrg# Echo program name prefixed message, along with the current mode 2431473d951Smrg# name if it has been set yet. 2441473d951Smrgfunc_echo () 2451473d951Smrg{ 2461473d951Smrg $ECHO "$progname${mode+: }$mode: $*" 2471473d951Smrg} 2481473d951Smrg 2491473d951Smrg# func_verbose arg... 2501473d951Smrg# Echo program name prefixed message in verbose mode only. 2511473d951Smrgfunc_verbose () 2521473d951Smrg{ 2531473d951Smrg $opt_verbose && func_echo ${1+"$@"} 2541473d951Smrg 2551473d951Smrg # A bug in bash halts the script if the last line of a function 2561473d951Smrg # fails when set -e is in force, so we need another command to 2571473d951Smrg # work around that: 2581473d951Smrg : 2591473d951Smrg} 2601473d951Smrg 2611473d951Smrg# func_error arg... 2621473d951Smrg# Echo program name prefixed message to standard error. 2631473d951Smrgfunc_error () 2641473d951Smrg{ 2651473d951Smrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 2661473d951Smrg} 2671473d951Smrg 2681473d951Smrg# func_warning arg... 2691473d951Smrg# Echo program name prefixed warning message to standard error. 2701473d951Smrgfunc_warning () 2711473d951Smrg{ 2721473d951Smrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 2731473d951Smrg 2741473d951Smrg # bash bug again: 2751473d951Smrg : 2761473d951Smrg} 2771473d951Smrg 2781473d951Smrg# func_fatal_error arg... 2791473d951Smrg# Echo program name prefixed message to standard error, and exit. 2801473d951Smrgfunc_fatal_error () 2811473d951Smrg{ 2821473d951Smrg func_error ${1+"$@"} 2831473d951Smrg exit $EXIT_FAILURE 2841473d951Smrg} 2851473d951Smrg 2861473d951Smrg# func_fatal_help arg... 2871473d951Smrg# Echo program name prefixed message to standard error, followed by 2881473d951Smrg# a help hint, and exit. 2891473d951Smrgfunc_fatal_help () 2901473d951Smrg{ 2911473d951Smrg func_error ${1+"$@"} 2921473d951Smrg func_fatal_error "$help" 2931473d951Smrg} 2941473d951Smrghelp="Try \`$progname --help' for more information." ## default 2951473d951Smrg 2961473d951Smrg 2971473d951Smrg# func_grep expression filename 2981473d951Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 2991473d951Smrgfunc_grep () 3001473d951Smrg{ 3011473d951Smrg $GREP "$1" "$2" >/dev/null 2>&1 3021473d951Smrg} 3031473d951Smrg 3041473d951Smrg 3051473d951Smrg# func_mkdir_p directory-path 3061473d951Smrg# Make sure the entire path to DIRECTORY-PATH is available. 3071473d951Smrgfunc_mkdir_p () 3081473d951Smrg{ 3091473d951Smrg my_directory_path="$1" 3101473d951Smrg my_dir_list= 3111473d951Smrg 3121473d951Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 3131473d951Smrg 3141473d951Smrg # Protect directory names starting with `-' 3151473d951Smrg case $my_directory_path in 3161473d951Smrg -*) my_directory_path="./$my_directory_path" ;; 3171473d951Smrg esac 3181473d951Smrg 3191473d951Smrg # While some portion of DIR does not yet exist... 3201473d951Smrg while test ! -d "$my_directory_path"; do 3211473d951Smrg # ...make a list in topmost first order. Use a colon delimited 3221473d951Smrg # list incase some portion of path contains whitespace. 3231473d951Smrg my_dir_list="$my_directory_path:$my_dir_list" 3241473d951Smrg 3251473d951Smrg # If the last portion added has no slash in it, the list is done 3261473d951Smrg case $my_directory_path in */*) ;; *) break ;; esac 3271473d951Smrg 3281473d951Smrg # ...otherwise throw away the child directory and loop 3291473d951Smrg my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` 3301473d951Smrg done 3311473d951Smrg my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` 3321473d951Smrg 3331473d951Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 3341473d951Smrg for my_dir in $my_dir_list; do 3351473d951Smrg IFS="$save_mkdir_p_IFS" 3361473d951Smrg # mkdir can fail with a `File exist' error if two processes 3371473d951Smrg # try to create one of the directories concurrently. Don't 3381473d951Smrg # stop in that case! 3391473d951Smrg $MKDIR "$my_dir" 2>/dev/null || : 3401473d951Smrg done 3411473d951Smrg IFS="$save_mkdir_p_IFS" 3421473d951Smrg 3431473d951Smrg # Bail out if we (or some other process) failed to create a directory. 3441473d951Smrg test -d "$my_directory_path" || \ 3451473d951Smrg func_fatal_error "Failed to create \`$1'" 3461473d951Smrg fi 3471473d951Smrg} 348ab47cfaaSmrg 349ab47cfaaSmrg 350ab47cfaaSmrg# func_mktempdir [string] 351ab47cfaaSmrg# Make a temporary directory that won't clash with other running 352ab47cfaaSmrg# libtool processes, and avoids race conditions if possible. If 353ab47cfaaSmrg# given, STRING is the basename for that directory. 354ab47cfaaSmrgfunc_mktempdir () 355ab47cfaaSmrg{ 356ab47cfaaSmrg my_template="${TMPDIR-/tmp}/${1-$progname}" 357ab47cfaaSmrg 3581473d951Smrg if test "$opt_dry_run" = ":"; then 359ab47cfaaSmrg # Return a directory name, but don't create it in dry-run mode 360ab47cfaaSmrg my_tmpdir="${my_template}-$$" 361ab47cfaaSmrg else 362ab47cfaaSmrg 363ab47cfaaSmrg # If mktemp works, use that first and foremost 364ab47cfaaSmrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 365ab47cfaaSmrg 366ab47cfaaSmrg if test ! -d "$my_tmpdir"; then 3671473d951Smrg # Failing that, at least try and use $RANDOM to avoid a race 3681473d951Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 369ab47cfaaSmrg 3701473d951Smrg save_mktempdir_umask=`umask` 3711473d951Smrg umask 0077 3721473d951Smrg $MKDIR "$my_tmpdir" 3731473d951Smrg umask $save_mktempdir_umask 374ab47cfaaSmrg fi 375ab47cfaaSmrg 376ab47cfaaSmrg # If we're not in dry-run mode, bomb out on failure 3771473d951Smrg test -d "$my_tmpdir" || \ 3781473d951Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 379ab47cfaaSmrg fi 380ab47cfaaSmrg 3811473d951Smrg $ECHO "X$my_tmpdir" | $Xsed 382ab47cfaaSmrg} 383ab47cfaaSmrg 384ab47cfaaSmrg 3851473d951Smrg# func_quote_for_eval arg 3861473d951Smrg# Aesthetically quote ARG to be evaled later. 3871473d951Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 3881473d951Smrg# is double-quoted, suitable for a subsequent eval, whereas 3891473d951Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 3901473d951Smrg# which are still active within double quotes backslashified. 3911473d951Smrgfunc_quote_for_eval () 392ab47cfaaSmrg{ 3931473d951Smrg case $1 in 3941473d951Smrg *[\\\`\"\$]*) 3951473d951Smrg func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; 3961473d951Smrg *) 3971473d951Smrg func_quote_for_eval_unquoted_result="$1" ;; 3981473d951Smrg esac 3991473d951Smrg 4001473d951Smrg case $func_quote_for_eval_unquoted_result in 4011473d951Smrg # Double-quote args containing shell metacharacters to delay 4021473d951Smrg # word splitting, command substitution and and variable 4031473d951Smrg # expansion for a subsequent eval. 4041473d951Smrg # Many Bourne shells cannot handle close brackets correctly 4051473d951Smrg # in scan sets, so we specify it separately. 4061473d951Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 4071473d951Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 4081473d951Smrg ;; 4091473d951Smrg *) 4101473d951Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 411ab47cfaaSmrg esac 412ab47cfaaSmrg} 413ab47cfaaSmrg 414ab47cfaaSmrg 4151473d951Smrg# func_quote_for_expand arg 4161473d951Smrg# Aesthetically quote ARG to be evaled later; same as above, 4171473d951Smrg# but do not quote variable references. 4181473d951Smrgfunc_quote_for_expand () 419ab47cfaaSmrg{ 4201473d951Smrg case $1 in 4211473d951Smrg *[\\\`\"]*) 4221473d951Smrg my_arg=`$ECHO "X$1" | $Xsed \ 4231473d951Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 424ab47cfaaSmrg *) 4251473d951Smrg my_arg="$1" ;; 4261473d951Smrg esac 4271473d951Smrg 4281473d951Smrg case $my_arg in 4291473d951Smrg # Double-quote args containing shell metacharacters to delay 4301473d951Smrg # word splitting and command substitution for a subsequent eval. 4311473d951Smrg # Many Bourne shells cannot handle close brackets correctly 4321473d951Smrg # in scan sets, so we specify it separately. 4331473d951Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 4341473d951Smrg my_arg="\"$my_arg\"" 4351473d951Smrg ;; 4361473d951Smrg esac 4371473d951Smrg 4381473d951Smrg func_quote_for_expand_result="$my_arg" 439ab47cfaaSmrg} 440ab47cfaaSmrg 441ab47cfaaSmrg 4421473d951Smrg# func_show_eval cmd [fail_exp] 4431473d951Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 4441473d951Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 4451473d951Smrg# is given, then evaluate it. 4461473d951Smrgfunc_show_eval () 447ab47cfaaSmrg{ 4481473d951Smrg my_cmd="$1" 4491473d951Smrg my_fail_exp="${2-:}" 450ab47cfaaSmrg 4511473d951Smrg ${opt_silent-false} || { 4521473d951Smrg func_quote_for_expand "$my_cmd" 4531473d951Smrg eval "func_echo $func_quote_for_expand_result" 4541473d951Smrg } 4551473d951Smrg 4561473d951Smrg if ${opt_dry_run-false}; then :; else 4571473d951Smrg eval "$my_cmd" 4581473d951Smrg my_status=$? 4591473d951Smrg if test "$my_status" -eq 0; then :; else 4601473d951Smrg eval "(exit $my_status); $my_fail_exp" 4611473d951Smrg fi 462ab47cfaaSmrg fi 463ab47cfaaSmrg} 464ab47cfaaSmrg 4651473d951Smrg 4661473d951Smrg# func_show_eval_locale cmd [fail_exp] 4671473d951Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 4681473d951Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 4691473d951Smrg# is given, then evaluate it. Use the saved locale for evaluation. 4701473d951Smrgfunc_show_eval_locale () 471ab47cfaaSmrg{ 4721473d951Smrg my_cmd="$1" 4731473d951Smrg my_fail_exp="${2-:}" 4741473d951Smrg 4751473d951Smrg ${opt_silent-false} || { 4761473d951Smrg func_quote_for_expand "$my_cmd" 4771473d951Smrg eval "func_echo $func_quote_for_expand_result" 4781473d951Smrg } 4791473d951Smrg 4801473d951Smrg if ${opt_dry_run-false}; then :; else 4811473d951Smrg eval "$lt_user_locale 4821473d951Smrg $my_cmd" 4831473d951Smrg my_status=$? 4841473d951Smrg eval "$lt_safe_locale" 4851473d951Smrg if test "$my_status" -eq 0; then :; else 4861473d951Smrg eval "(exit $my_status); $my_fail_exp" 4871473d951Smrg fi 488ab47cfaaSmrg fi 4891473d951Smrg} 490ab47cfaaSmrg 491ab47cfaaSmrg 4921473d951Smrg 4931473d951Smrg 4941473d951Smrg 4951473d951Smrg# func_version 4961473d951Smrg# Echo version message to standard output and exit. 4971473d951Smrgfunc_version () 4981473d951Smrg{ 4991473d951Smrg $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { 5001473d951Smrg s/^# // 5011473d951Smrg s/^# *$// 5021473d951Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 5031473d951Smrg p 5041473d951Smrg }' < "$progpath" 5051473d951Smrg exit $? 5061473d951Smrg} 5071473d951Smrg 5081473d951Smrg# func_usage 5091473d951Smrg# Echo short help message to standard output and exit. 5101473d951Smrgfunc_usage () 5111473d951Smrg{ 5121473d951Smrg $SED -n '/^# Usage:/,/# -h/ { 5131473d951Smrg s/^# // 5141473d951Smrg s/^# *$// 5151473d951Smrg s/\$progname/'$progname'/ 5161473d951Smrg p 5171473d951Smrg }' < "$progpath" 5181473d951Smrg $ECHO 5191473d951Smrg $ECHO "run \`$progname --help | more' for full usage" 5201473d951Smrg exit $? 5211473d951Smrg} 5221473d951Smrg 5231473d951Smrg# func_help 5241473d951Smrg# Echo long help message to standard output and exit. 5251473d951Smrgfunc_help () 5261473d951Smrg{ 5271473d951Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 5281473d951Smrg s/^# // 5291473d951Smrg s/^# *$// 5301473d951Smrg s*\$progname*'$progname'* 5311473d951Smrg s*\$host*'"$host"'* 5321473d951Smrg s*\$SHELL*'"$SHELL"'* 5331473d951Smrg s*\$LTCC*'"$LTCC"'* 5341473d951Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 5351473d951Smrg s*\$LD*'"$LD"'* 5361473d951Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 5371473d951Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 5381473d951Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 5391473d951Smrg p 5401473d951Smrg }' < "$progpath" 5411473d951Smrg exit $? 5421473d951Smrg} 5431473d951Smrg 5441473d951Smrg# func_missing_arg argname 5451473d951Smrg# Echo program name prefixed message to standard error and set global 5461473d951Smrg# exit_cmd. 5471473d951Smrgfunc_missing_arg () 5481473d951Smrg{ 5491473d951Smrg func_error "missing argument for $1" 5501473d951Smrg exit_cmd=exit 551ab47cfaaSmrg} 552ab47cfaaSmrg 5531473d951Smrgexit_cmd=: 554ab47cfaaSmrg 555ab47cfaaSmrg 5561473d951Smrg 5571473d951Smrg 5581473d951Smrg 5591473d951Smrg# Check that we have a working $ECHO. 5601473d951Smrgif test "X$1" = X--no-reexec; then 5611473d951Smrg # Discard the --no-reexec flag, and continue. 562ab47cfaaSmrg shift 5631473d951Smrgelif test "X$1" = X--fallback-echo; then 5641473d951Smrg # Avoid inline document here, it may be left over 5651473d951Smrg : 5661473d951Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then 5671473d951Smrg # Yippee, $ECHO works! 5681473d951Smrg : 5691473d951Smrgelse 5701473d951Smrg # Restart under the correct shell, and then maybe $ECHO will work. 5711473d951Smrg exec $SHELL "$progpath" --no-reexec ${1+"$@"} 5721473d951Smrgfi 573ab47cfaaSmrg 5741473d951Smrgif test "X$1" = X--fallback-echo; then 5751473d951Smrg # used as fallback echo 5761473d951Smrg shift 5771473d951Smrg cat <<EOF 5781473d951Smrg$* 5791473d951SmrgEOF 5801473d951Smrg exit $EXIT_SUCCESS 5811473d951Smrgfi 582ab47cfaaSmrg 5831473d951Smrgmagic="%%%MAGIC variable%%%" 5841473d951Smrgmagic_exe="%%%MAGIC EXE variable%%%" 585ab47cfaaSmrg 5861473d951Smrg# Global variables. 5871473d951Smrg# $mode is unset 5881473d951Smrgnonopt= 5891473d951Smrgexecute_dlfiles= 5901473d951Smrgpreserve_args= 5911473d951Smrglo2o="s/\\.lo\$/.${objext}/" 5921473d951Smrgo2lo="s/\\.${objext}\$/.lo/" 5931473d951Smrgextracted_archives= 5941473d951Smrgextracted_serial=0 595ab47cfaaSmrg 5961473d951Smrgopt_dry_run=false 5971473d951Smrgopt_duplicate_deps=false 5981473d951Smrgopt_silent=false 5991473d951Smrgopt_debug=: 600ab47cfaaSmrg 6011473d951Smrg# If this variable is set in any of the actions, the command in it 6021473d951Smrg# will be execed at the end. This prevents here-documents from being 6031473d951Smrg# left over by shells. 6041473d951Smrgexec_cmd= 6051473d951Smrg 6061473d951Smrg# func_fatal_configuration arg... 6071473d951Smrg# Echo program name prefixed message to standard error, followed by 6081473d951Smrg# a configuration failure hint, and exit. 6091473d951Smrgfunc_fatal_configuration () 6101473d951Smrg{ 6111473d951Smrg func_error ${1+"$@"} 6121473d951Smrg func_error "See the $PACKAGE documentation for more information." 6131473d951Smrg func_fatal_error "Fatal configuration error." 6141473d951Smrg} 615ab47cfaaSmrg 6168697ee19Smrg 6171473d951Smrg# func_config 6181473d951Smrg# Display the configuration for all the tags in this script. 6191473d951Smrgfunc_config () 6201473d951Smrg{ 6211473d951Smrg re_begincf='^# ### BEGIN LIBTOOL' 6221473d951Smrg re_endcf='^# ### END LIBTOOL' 6231473d951Smrg 6241473d951Smrg # Default configuration. 6251473d951Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 626ab47cfaaSmrg 627ab47cfaaSmrg # Now print the configurations for the tags. 628ab47cfaaSmrg for tagname in $taglist; do 6291473d951Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 630ab47cfaaSmrg done 631ab47cfaaSmrg 6321473d951Smrg exit $? 6331473d951Smrg} 634ab47cfaaSmrg 6351473d951Smrg# func_features 6361473d951Smrg# Display the features supported by this script. 6371473d951Smrgfunc_features () 6381473d951Smrg{ 6391473d951Smrg $ECHO "host: $host" 640ab47cfaaSmrg if test "$build_libtool_libs" = yes; then 6411473d951Smrg $ECHO "enable shared libraries" 642ab47cfaaSmrg else 6431473d951Smrg $ECHO "disable shared libraries" 644ab47cfaaSmrg fi 645ab47cfaaSmrg if test "$build_old_libs" = yes; then 6461473d951Smrg $ECHO "enable static libraries" 647ab47cfaaSmrg else 6481473d951Smrg $ECHO "disable static libraries" 649ab47cfaaSmrg fi 6501473d951Smrg 651ab47cfaaSmrg exit $? 6521473d951Smrg} 653ab47cfaaSmrg 6541473d951Smrg# func_enable_tag tagname 6551473d951Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 6561473d951Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 6571473d951Smrg# variable here. 6581473d951Smrgfunc_enable_tag () 6591473d951Smrg{ 6601473d951Smrg # Global variable: 6611473d951Smrg tagname="$1" 662ab47cfaaSmrg 6631473d951Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 6641473d951Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 6651473d951Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 666ab47cfaaSmrg 6671473d951Smrg # Validate tagname. 6681473d951Smrg case $tagname in 6691473d951Smrg *[!-_A-Za-z0-9,/]*) 6701473d951Smrg func_fatal_error "invalid tag name: $tagname" 6711473d951Smrg ;; 6721473d951Smrg esac 673ab47cfaaSmrg 6741473d951Smrg # Don't test for the "default" C tag, as we know it's 6751473d951Smrg # there but not specially marked. 6761473d951Smrg case $tagname in 6771473d951Smrg CC) ;; 6781473d951Smrg *) 6791473d951Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 6801473d951Smrg taglist="$taglist $tagname" 6811473d951Smrg 6821473d951Smrg # Evaluate the configuration. Be careful to quote the path 6831473d951Smrg # and the sed script, to avoid splitting on whitespace, but 6841473d951Smrg # also don't use non-portable quotes within backquotes within 6851473d951Smrg # quotes we have to do it in 2 steps: 6861473d951Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 6871473d951Smrg eval "$extractedcf" 6881473d951Smrg else 6891473d951Smrg func_error "ignoring unknown tag $tagname" 6901473d951Smrg fi 6911473d951Smrg ;; 6921473d951Smrg esac 6931473d951Smrg} 6941473d951Smrg 6951473d951Smrg# Parse options once, thoroughly. This comes as soon as possible in 6961473d951Smrg# the script to make things like `libtool --version' happen quickly. 6971473d951Smrg{ 698ab47cfaaSmrg 6991473d951Smrg # Shorthand for --mode=foo, only valid as the first argument 7001473d951Smrg case $1 in 7011473d951Smrg clean|clea|cle|cl) 7021473d951Smrg shift; set dummy --mode clean ${1+"$@"}; shift 703ab47cfaaSmrg ;; 7041473d951Smrg compile|compil|compi|comp|com|co|c) 7051473d951Smrg shift; set dummy --mode compile ${1+"$@"}; shift 706ab47cfaaSmrg ;; 7071473d951Smrg execute|execut|execu|exec|exe|ex|e) 7081473d951Smrg shift; set dummy --mode execute ${1+"$@"}; shift 709ab47cfaaSmrg ;; 7101473d951Smrg finish|finis|fini|fin|fi|f) 7111473d951Smrg shift; set dummy --mode finish ${1+"$@"}; shift 712ab47cfaaSmrg ;; 7131473d951Smrg install|instal|insta|inst|ins|in|i) 7141473d951Smrg shift; set dummy --mode install ${1+"$@"}; shift 7151473d951Smrg ;; 7161473d951Smrg link|lin|li|l) 7171473d951Smrg shift; set dummy --mode link ${1+"$@"}; shift 7181473d951Smrg ;; 7191473d951Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 7201473d951Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 721ab47cfaaSmrg ;; 722ab47cfaaSmrg esac 723ab47cfaaSmrg 7241473d951Smrg # Parse non-mode specific arguments: 7251473d951Smrg while test "$#" -gt 0; do 7261473d951Smrg opt="$1" 7271473d951Smrg shift 728ab47cfaaSmrg 7291473d951Smrg case $opt in 7301473d951Smrg --config) func_config ;; 731ab47cfaaSmrg 7321473d951Smrg --debug) preserve_args="$preserve_args $opt" 7331473d951Smrg func_echo "enabling shell trace mode" 7341473d951Smrg opt_debug='set -x' 7351473d951Smrg $opt_debug 7361473d951Smrg ;; 737ab47cfaaSmrg 7381473d951Smrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 7391473d951Smrg execute_dlfiles="$execute_dlfiles $1" 7401473d951Smrg shift 7411473d951Smrg ;; 742ab47cfaaSmrg 7431473d951Smrg --dry-run | -n) opt_dry_run=: ;; 7441473d951Smrg --features) func_features ;; 7451473d951Smrg --finish) mode="finish" ;; 7461473d951Smrg 7471473d951Smrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 7481473d951Smrg case $1 in 7491473d951Smrg # Valid mode arguments: 7501473d951Smrg clean) ;; 7511473d951Smrg compile) ;; 7521473d951Smrg execute) ;; 7531473d951Smrg finish) ;; 7541473d951Smrg install) ;; 7551473d951Smrg link) ;; 7561473d951Smrg relink) ;; 7571473d951Smrg uninstall) ;; 7581473d951Smrg 7591473d951Smrg # Catch anything else as an error 7601473d951Smrg *) func_error "invalid argument for $opt" 7611473d951Smrg exit_cmd=exit 7621473d951Smrg break 7631473d951Smrg ;; 7641473d951Smrg esac 7651473d951Smrg 7661473d951Smrg mode="$1" 7671473d951Smrg shift 7681473d951Smrg ;; 7691473d951Smrg 7701473d951Smrg --preserve-dup-deps) 7711473d951Smrg opt_duplicate_deps=: ;; 7721473d951Smrg 7731473d951Smrg --quiet|--silent) preserve_args="$preserve_args $opt" 7741473d951Smrg opt_silent=: 7751473d951Smrg ;; 7761473d951Smrg 7771473d951Smrg --verbose| -v) preserve_args="$preserve_args $opt" 7781473d951Smrg opt_silent=false 7791473d951Smrg ;; 7801473d951Smrg 7811473d951Smrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 7821473d951Smrg preserve_args="$preserve_args $opt $1" 7831473d951Smrg func_enable_tag "$1" # tagname is set here 7841473d951Smrg shift 7851473d951Smrg ;; 7861473d951Smrg 7871473d951Smrg # Separate optargs to long options: 7881473d951Smrg -dlopen=*|--mode=*|--tag=*) 7891473d951Smrg func_opt_split "$opt" 7901473d951Smrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 7911473d951Smrg shift 7921473d951Smrg ;; 7931473d951Smrg 7941473d951Smrg -\?|-h) func_usage ;; 7951473d951Smrg --help) opt_help=: ;; 7961473d951Smrg --version) func_version ;; 7971473d951Smrg 7981473d951Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 7991473d951Smrg 8001473d951Smrg *) nonopt="$opt" 8011473d951Smrg break 8021473d951Smrg ;; 8031473d951Smrg esac 8041473d951Smrg done 8051473d951Smrg 8061473d951Smrg 8071473d951Smrg case $host in 8081473d951Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 8091473d951Smrg # don't eliminate duplications in $postdeps and $predeps 8101473d951Smrg opt_duplicate_compiler_generated_deps=: 811ab47cfaaSmrg ;; 812ab47cfaaSmrg *) 8131473d951Smrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 8141473d951Smrg ;; 8151473d951Smrg esac 816ab47cfaaSmrg 8171473d951Smrg # Having warned about all mis-specified options, bail out if 8181473d951Smrg # anything was wrong. 8191473d951Smrg $exit_cmd $EXIT_FAILURE 8201473d951Smrg} 8211473d951Smrg 8221473d951Smrg# func_check_version_match 8231473d951Smrg# Ensure that we are using m4 macros, and libtool script from the same 8241473d951Smrg# release of libtool. 8251473d951Smrgfunc_check_version_match () 8261473d951Smrg{ 8271473d951Smrg if test "$package_revision" != "$macro_revision"; then 8281473d951Smrg if test "$VERSION" != "$macro_version"; then 8291473d951Smrg if test -z "$macro_version"; then 8301473d951Smrg cat >&2 <<_LT_EOF 8311473d951Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 8321473d951Smrg$progname: definition of this LT_INIT comes from an older release. 8331473d951Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 8341473d951Smrg$progname: and run autoconf again. 8351473d951Smrg_LT_EOF 8361473d951Smrg else 8371473d951Smrg cat >&2 <<_LT_EOF 8381473d951Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 8391473d951Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 8401473d951Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 8411473d951Smrg$progname: and run autoconf again. 8421473d951Smrg_LT_EOF 843ab47cfaaSmrg fi 8441473d951Smrg else 8451473d951Smrg cat >&2 <<_LT_EOF 8461473d951Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 8471473d951Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 8481473d951Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 8491473d951Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 8501473d951Smrg_LT_EOF 8511473d951Smrg fi 8521473d951Smrg 8531473d951Smrg exit $EXIT_MISMATCH 8541473d951Smrg fi 8551473d951Smrg} 8561473d951Smrg 8571473d951Smrg 8581473d951Smrg## ----------- ## 8591473d951Smrg## Main. ## 8601473d951Smrg## ----------- ## 8611473d951Smrg 8621473d951Smrg$opt_help || { 8631473d951Smrg # Sanity checks first: 8641473d951Smrg func_check_version_match 8651473d951Smrg 8661473d951Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 8671473d951Smrg func_fatal_configuration "not configured to build any kind of library" 868ab47cfaaSmrg fi 869ab47cfaaSmrg 8701473d951Smrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 8711473d951Smrg 8721473d951Smrg 8731473d951Smrg # Darwin sucks 8741473d951Smrg eval std_shrext=\"$shrext_cmds\" 8751473d951Smrg 8761473d951Smrg 877ab47cfaaSmrg # Only execute mode is allowed to have -dlopen flags. 878ab47cfaaSmrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 8791473d951Smrg func_error "unrecognized option \`-dlopen'" 8801473d951Smrg $ECHO "$help" 1>&2 881ab47cfaaSmrg exit $EXIT_FAILURE 882ab47cfaaSmrg fi 883ab47cfaaSmrg 884ab47cfaaSmrg # Change the help message to a mode-specific one. 885ab47cfaaSmrg generic_help="$help" 8861473d951Smrg help="Try \`$progname --help --mode=$mode' for more information." 8871473d951Smrg} 888ab47cfaaSmrg 889ab47cfaaSmrg 8901473d951Smrg# func_lalib_p file 8911473d951Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 8921473d951Smrg# This function is only a basic sanity check; it will hardly flush out 8931473d951Smrg# determined imposters. 8941473d951Smrgfunc_lalib_p () 8951473d951Smrg{ 8961473d951Smrg test -f "$1" && 8971473d951Smrg $SED -e 4q "$1" 2>/dev/null \ 8981473d951Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 8991473d951Smrg} 900ab47cfaaSmrg 9011473d951Smrg# func_lalib_unsafe_p file 9021473d951Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 9031473d951Smrg# This function implements the same check as func_lalib_p without 9041473d951Smrg# resorting to external programs. To this end, it redirects stdin and 9051473d951Smrg# closes it afterwards, without saving the original file descriptor. 9061473d951Smrg# As a safety measure, use it only where a negative result would be 9071473d951Smrg# fatal anyway. Works if `file' does not exist. 9081473d951Smrgfunc_lalib_unsafe_p () 9091473d951Smrg{ 9101473d951Smrg lalib_p=no 9111473d951Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 9121473d951Smrg for lalib_p_l in 1 2 3 4 9131473d951Smrg do 9141473d951Smrg read lalib_p_line 9151473d951Smrg case "$lalib_p_line" in 9161473d951Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 9171473d951Smrg esac 9181473d951Smrg done 9191473d951Smrg exec 0<&5 5<&- 9201473d951Smrg fi 9211473d951Smrg test "$lalib_p" = yes 9221473d951Smrg} 923ab47cfaaSmrg 9241473d951Smrg# func_ltwrapper_script_p file 9251473d951Smrg# True iff FILE is a libtool wrapper script 9261473d951Smrg# This function is only a basic sanity check; it will hardly flush out 9271473d951Smrg# determined imposters. 9281473d951Smrgfunc_ltwrapper_script_p () 9291473d951Smrg{ 9301473d951Smrg func_lalib_p "$1" 9311473d951Smrg} 932ab47cfaaSmrg 9331473d951Smrg# func_ltwrapper_executable_p file 9341473d951Smrg# True iff FILE is a libtool wrapper executable 9351473d951Smrg# This function is only a basic sanity check; it will hardly flush out 9361473d951Smrg# determined imposters. 9371473d951Smrgfunc_ltwrapper_executable_p () 9381473d951Smrg{ 9391473d951Smrg func_ltwrapper_exec_suffix= 9401473d951Smrg case $1 in 9411473d951Smrg *.exe) ;; 9421473d951Smrg *) func_ltwrapper_exec_suffix=.exe ;; 9431473d951Smrg esac 9441473d951Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 9451473d951Smrg} 946ab47cfaaSmrg 9471473d951Smrg# func_ltwrapper_scriptname file 9481473d951Smrg# Assumes file is an ltwrapper_executable 9491473d951Smrg# uses $file to determine the appropriate filename for a 9501473d951Smrg# temporary ltwrapper_script. 9511473d951Smrgfunc_ltwrapper_scriptname () 9521473d951Smrg{ 9531473d951Smrg func_ltwrapper_scriptname_result="" 9541473d951Smrg if func_ltwrapper_executable_p "$1"; then 9551473d951Smrg func_dirname_and_basename "$1" "" "." 9561473d951Smrg func_stripname '' '.exe' "$func_basename_result" 9571473d951Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 9581473d951Smrg fi 9591473d951Smrg} 9601473d951Smrg 9611473d951Smrg# func_ltwrapper_p file 9621473d951Smrg# True iff FILE is a libtool wrapper script or wrapper executable 9631473d951Smrg# This function is only a basic sanity check; it will hardly flush out 9641473d951Smrg# determined imposters. 9651473d951Smrgfunc_ltwrapper_p () 9661473d951Smrg{ 9671473d951Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 9681473d951Smrg} 9691473d951Smrg 9701473d951Smrg 9711473d951Smrg# func_execute_cmds commands fail_cmd 9721473d951Smrg# Execute tilde-delimited COMMANDS. 9731473d951Smrg# If FAIL_CMD is given, eval that upon failure. 9741473d951Smrg# FAIL_CMD may read-access the current command in variable CMD! 9751473d951Smrgfunc_execute_cmds () 9761473d951Smrg{ 9771473d951Smrg $opt_debug 9781473d951Smrg save_ifs=$IFS; IFS='~' 9791473d951Smrg for cmd in $1; do 9801473d951Smrg IFS=$save_ifs 9811473d951Smrg eval cmd=\"$cmd\" 9821473d951Smrg func_show_eval "$cmd" "${2-:}" 9831473d951Smrg done 9841473d951Smrg IFS=$save_ifs 9851473d951Smrg} 9861473d951Smrg 9871473d951Smrg 9881473d951Smrg# func_source file 9891473d951Smrg# Source FILE, adding directory component if necessary. 9901473d951Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 9911473d951Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 9921473d951Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 9931473d951Smrg# `FILE.' does not work on cygwin managed mounts. 9941473d951Smrgfunc_source () 9951473d951Smrg{ 9961473d951Smrg $opt_debug 9971473d951Smrg case $1 in 9981473d951Smrg */* | *\\*) . "$1" ;; 9991473d951Smrg *) . "./$1" ;; 10001473d951Smrg esac 10011473d951Smrg} 10021473d951Smrg 10031473d951Smrg 10041473d951Smrg# func_infer_tag arg 10051473d951Smrg# Infer tagged configuration to use if any are available and 10061473d951Smrg# if one wasn't chosen via the "--tag" command line option. 10071473d951Smrg# Only attempt this if the compiler in the base compile 10081473d951Smrg# command doesn't match the default compiler. 10091473d951Smrg# arg is usually of the form 'gcc ...' 10101473d951Smrgfunc_infer_tag () 10111473d951Smrg{ 10121473d951Smrg $opt_debug 10131473d951Smrg if test -n "$available_tags" && test -z "$tagname"; then 10141473d951Smrg CC_quoted= 10151473d951Smrg for arg in $CC; do 10161473d951Smrg func_quote_for_eval "$arg" 10171473d951Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 10181473d951Smrg done 10191473d951Smrg case $@ in 10201473d951Smrg # Blanks in the command may have been stripped by the calling shell, 10211473d951Smrg # but not from the CC environment variable when configure was run. 10221473d951Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; 10231473d951Smrg # Blanks at the start of $base_compile will cause this to fail 10241473d951Smrg # if we don't check for them as well. 10251473d951Smrg *) 10261473d951Smrg for z in $available_tags; do 10271473d951Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 10281473d951Smrg # Evaluate the configuration. 10291473d951Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 10301473d951Smrg CC_quoted= 10311473d951Smrg for arg in $CC; do 10321473d951Smrg # Double-quote args containing other shell metacharacters. 10331473d951Smrg func_quote_for_eval "$arg" 10341473d951Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 10351473d951Smrg done 10361473d951Smrg case "$@ " in 10371473d951Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) 10381473d951Smrg # The compiler in the base compile command matches 10391473d951Smrg # the one in the tagged configuration. 10401473d951Smrg # Assume this is the tagged configuration we want. 10411473d951Smrg tagname=$z 10421473d951Smrg break 10431473d951Smrg ;; 10441473d951Smrg esac 10451473d951Smrg fi 10461473d951Smrg done 10471473d951Smrg # If $tagname still isn't set, then no tagged configuration 10481473d951Smrg # was found and let the user know that the "--tag" command 10491473d951Smrg # line option must be used. 10501473d951Smrg if test -z "$tagname"; then 10511473d951Smrg func_echo "unable to infer tagged configuration" 10521473d951Smrg func_fatal_error "specify a tag with \`--tag'" 10531473d951Smrg# else 10541473d951Smrg# func_verbose "using $tagname tagged configuration" 10551473d951Smrg fi 10561473d951Smrg ;; 10571473d951Smrg esac 10581473d951Smrg fi 10591473d951Smrg} 10601473d951Smrg 10611473d951Smrg 10621473d951Smrg 10631473d951Smrg# func_write_libtool_object output_name pic_name nonpic_name 10641473d951Smrg# Create a libtool object file (analogous to a ".la" file), 10651473d951Smrg# but don't create it if we're doing a dry run. 10661473d951Smrgfunc_write_libtool_object () 10671473d951Smrg{ 10681473d951Smrg write_libobj=${1} 10691473d951Smrg if test "$build_libtool_libs" = yes; then 10701473d951Smrg write_lobj=\'${2}\' 10711473d951Smrg else 10721473d951Smrg write_lobj=none 10731473d951Smrg fi 10741473d951Smrg 10751473d951Smrg if test "$build_old_libs" = yes; then 10761473d951Smrg write_oldobj=\'${3}\' 10771473d951Smrg else 10781473d951Smrg write_oldobj=none 10791473d951Smrg fi 10801473d951Smrg 10811473d951Smrg $opt_dry_run || { 10821473d951Smrg cat >${write_libobj}T <<EOF 10831473d951Smrg# $write_libobj - a libtool object file 10841473d951Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 10851473d951Smrg# 10861473d951Smrg# Please DO NOT delete this file! 10871473d951Smrg# It is necessary for linking the library. 10881473d951Smrg 10891473d951Smrg# Name of the PIC object. 10901473d951Smrgpic_object=$write_lobj 10911473d951Smrg 10921473d951Smrg# Name of the non-PIC object 10931473d951Smrgnon_pic_object=$write_oldobj 10941473d951Smrg 10951473d951SmrgEOF 10961473d951Smrg $MV "${write_libobj}T" "${write_libobj}" 10971473d951Smrg } 10981473d951Smrg} 10991473d951Smrg 11001473d951Smrg# func_mode_compile arg... 11011473d951Smrgfunc_mode_compile () 11021473d951Smrg{ 11031473d951Smrg $opt_debug 11041473d951Smrg # Get the compilation command and the source file. 11051473d951Smrg base_compile= 11061473d951Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 11071473d951Smrg suppress_opt=yes 11081473d951Smrg suppress_output= 11091473d951Smrg arg_mode=normal 11101473d951Smrg libobj= 11111473d951Smrg later= 11121473d951Smrg pie_flag= 11131473d951Smrg 11141473d951Smrg for arg 11151473d951Smrg do 11161473d951Smrg case $arg_mode in 11171473d951Smrg arg ) 11181473d951Smrg # do not "continue". Instead, add this to base_compile 11191473d951Smrg lastarg="$arg" 11201473d951Smrg arg_mode=normal 11211473d951Smrg ;; 11221473d951Smrg 11231473d951Smrg target ) 11241473d951Smrg libobj="$arg" 11251473d951Smrg arg_mode=normal 11261473d951Smrg continue 11271473d951Smrg ;; 11281473d951Smrg 11291473d951Smrg normal ) 11301473d951Smrg # Accept any command-line options. 11311473d951Smrg case $arg in 11321473d951Smrg -o) 11331473d951Smrg test -n "$libobj" && \ 11341473d951Smrg func_fatal_error "you cannot specify \`-o' more than once" 11351473d951Smrg arg_mode=target 11361473d951Smrg continue 11371473d951Smrg ;; 11381473d951Smrg 11391473d951Smrg -pie | -fpie | -fPIE) 11401473d951Smrg pie_flag="$pie_flag $arg" 11411473d951Smrg continue 11421473d951Smrg ;; 11431473d951Smrg 11441473d951Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 11451473d951Smrg later="$later $arg" 11461473d951Smrg continue 11471473d951Smrg ;; 11481473d951Smrg 11491473d951Smrg -no-suppress) 1150ab47cfaaSmrg suppress_opt=no 1151ab47cfaaSmrg continue 1152ab47cfaaSmrg ;; 1153ab47cfaaSmrg 1154ab47cfaaSmrg -Xcompiler) 1155ab47cfaaSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 1156ab47cfaaSmrg continue # The current "srcfile" will either be retained or 1157ab47cfaaSmrg ;; # replaced later. I would guess that would be a bug. 1158ab47cfaaSmrg 1159ab47cfaaSmrg -Wc,*) 11601473d951Smrg func_stripname '-Wc,' '' "$arg" 11611473d951Smrg args=$func_stripname_result 1162ab47cfaaSmrg lastarg= 1163ab47cfaaSmrg save_ifs="$IFS"; IFS=',' 11641473d951Smrg for arg in $args; do 1165ab47cfaaSmrg IFS="$save_ifs" 11661473d951Smrg func_quote_for_eval "$arg" 11671473d951Smrg lastarg="$lastarg $func_quote_for_eval_result" 1168ab47cfaaSmrg done 1169ab47cfaaSmrg IFS="$save_ifs" 11701473d951Smrg func_stripname ' ' '' "$lastarg" 11711473d951Smrg lastarg=$func_stripname_result 1172ab47cfaaSmrg 1173ab47cfaaSmrg # Add the arguments to base_compile. 1174ab47cfaaSmrg base_compile="$base_compile $lastarg" 1175ab47cfaaSmrg continue 1176ab47cfaaSmrg ;; 1177ab47cfaaSmrg 11781473d951Smrg *) 1179ab47cfaaSmrg # Accept the current argument as the source file. 1180ab47cfaaSmrg # The previous "srcfile" becomes the current argument. 1181ab47cfaaSmrg # 1182ab47cfaaSmrg lastarg="$srcfile" 1183ab47cfaaSmrg srcfile="$arg" 1184ab47cfaaSmrg ;; 1185ab47cfaaSmrg esac # case $arg 1186ab47cfaaSmrg ;; 1187ab47cfaaSmrg esac # case $arg_mode 1188ab47cfaaSmrg 1189ab47cfaaSmrg # Aesthetically quote the previous argument. 11901473d951Smrg func_quote_for_eval "$lastarg" 11911473d951Smrg base_compile="$base_compile $func_quote_for_eval_result" 1192ab47cfaaSmrg done # for arg 1193ab47cfaaSmrg 1194ab47cfaaSmrg case $arg_mode in 1195ab47cfaaSmrg arg) 11961473d951Smrg func_fatal_error "you must specify an argument for -Xcompile" 1197ab47cfaaSmrg ;; 1198ab47cfaaSmrg target) 11991473d951Smrg func_fatal_error "you must specify a target with \`-o'" 1200ab47cfaaSmrg ;; 1201ab47cfaaSmrg *) 1202ab47cfaaSmrg # Get the name of the library object. 12031473d951Smrg test -z "$libobj" && { 12041473d951Smrg func_basename "$srcfile" 12051473d951Smrg libobj="$func_basename_result" 12061473d951Smrg } 1207ab47cfaaSmrg ;; 1208ab47cfaaSmrg esac 1209ab47cfaaSmrg 1210ab47cfaaSmrg # Recognize several different file suffixes. 1211ab47cfaaSmrg # If the user specifies -o file.o, it is replaced with file.lo 1212ab47cfaaSmrg case $libobj in 12131473d951Smrg *.[cCFSifmso] | \ 12141473d951Smrg *.ada | *.adb | *.ads | *.asm | \ 12151473d951Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 12161473d951Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx) 12171473d951Smrg func_xform "$libobj" 12181473d951Smrg libobj=$func_xform_result 12191473d951Smrg ;; 1220ab47cfaaSmrg esac 1221ab47cfaaSmrg 1222ab47cfaaSmrg case $libobj in 12231473d951Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 1224ab47cfaaSmrg *) 12251473d951Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 1226ab47cfaaSmrg ;; 1227ab47cfaaSmrg esac 1228ab47cfaaSmrg 1229ab47cfaaSmrg func_infer_tag $base_compile 1230ab47cfaaSmrg 1231ab47cfaaSmrg for arg in $later; do 1232ab47cfaaSmrg case $arg in 12331473d951Smrg -shared) 12341473d951Smrg test "$build_libtool_libs" != yes && \ 12351473d951Smrg func_fatal_configuration "can not build a shared library" 12361473d951Smrg build_old_libs=no 12371473d951Smrg continue 12381473d951Smrg ;; 12391473d951Smrg 1240ab47cfaaSmrg -static) 12411473d951Smrg build_libtool_libs=no 1242ab47cfaaSmrg build_old_libs=yes 1243ab47cfaaSmrg continue 1244ab47cfaaSmrg ;; 1245ab47cfaaSmrg 1246ab47cfaaSmrg -prefer-pic) 1247ab47cfaaSmrg pic_mode=yes 1248ab47cfaaSmrg continue 1249ab47cfaaSmrg ;; 1250ab47cfaaSmrg 1251ab47cfaaSmrg -prefer-non-pic) 1252ab47cfaaSmrg pic_mode=no 1253ab47cfaaSmrg continue 1254ab47cfaaSmrg ;; 1255ab47cfaaSmrg esac 1256ab47cfaaSmrg done 1257ab47cfaaSmrg 12581473d951Smrg func_quote_for_eval "$libobj" 12591473d951Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 12601473d951Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 12611473d951Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 12621473d951Smrg func_dirname_and_basename "$obj" "/" "" 12631473d951Smrg objname="$func_basename_result" 12641473d951Smrg xdir="$func_dirname_result" 1265ab47cfaaSmrg lobj=${xdir}$objdir/$objname 1266ab47cfaaSmrg 12671473d951Smrg test -z "$base_compile" && \ 12681473d951Smrg func_fatal_help "you must specify a compilation command" 1269ab47cfaaSmrg 1270ab47cfaaSmrg # Delete any leftover library objects. 1271ab47cfaaSmrg if test "$build_old_libs" = yes; then 1272ab47cfaaSmrg removelist="$obj $lobj $libobj ${libobj}T" 1273ab47cfaaSmrg else 1274ab47cfaaSmrg removelist="$lobj $libobj ${libobj}T" 1275ab47cfaaSmrg fi 1276ab47cfaaSmrg 1277ab47cfaaSmrg # On Cygwin there's no "real" PIC flag so we must build both object types 1278ab47cfaaSmrg case $host_os in 12791473d951Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 1280ab47cfaaSmrg pic_mode=default 1281ab47cfaaSmrg ;; 1282ab47cfaaSmrg esac 1283ab47cfaaSmrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 1284ab47cfaaSmrg # non-PIC code in shared libraries is not supported 1285ab47cfaaSmrg pic_mode=default 1286ab47cfaaSmrg fi 1287ab47cfaaSmrg 1288ab47cfaaSmrg # Calculate the filename of the output object if compiler does 1289ab47cfaaSmrg # not support -o with -c 1290ab47cfaaSmrg if test "$compiler_c_o" = no; then 12911473d951Smrg output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 1292ab47cfaaSmrg lockfile="$output_obj.lock" 1293ab47cfaaSmrg else 1294ab47cfaaSmrg output_obj= 1295ab47cfaaSmrg need_locks=no 1296ab47cfaaSmrg lockfile= 1297ab47cfaaSmrg fi 1298ab47cfaaSmrg 1299ab47cfaaSmrg # Lock this critical section if it is needed 1300ab47cfaaSmrg # We use this script file to make the link, it avoids creating a new file 1301ab47cfaaSmrg if test "$need_locks" = yes; then 13021473d951Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 13031473d951Smrg func_echo "Waiting for $lockfile to be removed" 1304ab47cfaaSmrg sleep 2 1305ab47cfaaSmrg done 1306ab47cfaaSmrg elif test "$need_locks" = warn; then 1307ab47cfaaSmrg if test -f "$lockfile"; then 13081473d951Smrg $ECHO "\ 1309ab47cfaaSmrg*** ERROR, $lockfile exists and contains: 1310ab47cfaaSmrg`cat $lockfile 2>/dev/null` 1311ab47cfaaSmrg 1312ab47cfaaSmrgThis indicates that another process is trying to use the same 1313ab47cfaaSmrgtemporary object file, and libtool could not work around it because 1314ab47cfaaSmrgyour compiler does not support \`-c' and \`-o' together. If you 1315ab47cfaaSmrgrepeat this compilation, it may succeed, by chance, but you had better 1316ab47cfaaSmrgavoid parallel builds (make -j) in this platform, or get a better 1317ab47cfaaSmrgcompiler." 1318ab47cfaaSmrg 13191473d951Smrg $opt_dry_run || $RM $removelist 1320ab47cfaaSmrg exit $EXIT_FAILURE 1321ab47cfaaSmrg fi 13221473d951Smrg removelist="$removelist $output_obj" 13231473d951Smrg $ECHO "$srcfile" > "$lockfile" 1324ab47cfaaSmrg fi 1325ab47cfaaSmrg 13261473d951Smrg $opt_dry_run || $RM $removelist 13271473d951Smrg removelist="$removelist $lockfile" 13281473d951Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 13291473d951Smrg 1330ab47cfaaSmrg if test -n "$fix_srcfile_path"; then 1331ab47cfaaSmrg eval srcfile=\"$fix_srcfile_path\" 1332ab47cfaaSmrg fi 13331473d951Smrg func_quote_for_eval "$srcfile" 13341473d951Smrg qsrcfile=$func_quote_for_eval_result 1335ab47cfaaSmrg 1336ab47cfaaSmrg # Only build a PIC object if we are building libtool libraries. 1337ab47cfaaSmrg if test "$build_libtool_libs" = yes; then 1338ab47cfaaSmrg # Without this assignment, base_compile gets emptied. 1339ab47cfaaSmrg fbsd_hideous_sh_bug=$base_compile 1340ab47cfaaSmrg 1341ab47cfaaSmrg if test "$pic_mode" != no; then 1342ab47cfaaSmrg command="$base_compile $qsrcfile $pic_flag" 1343ab47cfaaSmrg else 1344ab47cfaaSmrg # Don't build PIC code 1345ab47cfaaSmrg command="$base_compile $qsrcfile" 1346ab47cfaaSmrg fi 1347ab47cfaaSmrg 13481473d951Smrg func_mkdir_p "$xdir$objdir" 1349ab47cfaaSmrg 1350ab47cfaaSmrg if test -z "$output_obj"; then 1351ab47cfaaSmrg # Place PIC objects in $objdir 1352ab47cfaaSmrg command="$command -o $lobj" 1353ab47cfaaSmrg fi 1354ab47cfaaSmrg 13551473d951Smrg func_show_eval_locale "$command" \ 13561473d951Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 1357ab47cfaaSmrg 1358ab47cfaaSmrg if test "$need_locks" = warn && 1359ab47cfaaSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 13601473d951Smrg $ECHO "\ 1361ab47cfaaSmrg*** ERROR, $lockfile contains: 1362ab47cfaaSmrg`cat $lockfile 2>/dev/null` 1363ab47cfaaSmrg 1364ab47cfaaSmrgbut it should contain: 1365ab47cfaaSmrg$srcfile 1366ab47cfaaSmrg 1367ab47cfaaSmrgThis indicates that another process is trying to use the same 1368ab47cfaaSmrgtemporary object file, and libtool could not work around it because 1369ab47cfaaSmrgyour compiler does not support \`-c' and \`-o' together. If you 1370ab47cfaaSmrgrepeat this compilation, it may succeed, by chance, but you had better 1371ab47cfaaSmrgavoid parallel builds (make -j) in this platform, or get a better 1372ab47cfaaSmrgcompiler." 1373ab47cfaaSmrg 13741473d951Smrg $opt_dry_run || $RM $removelist 1375ab47cfaaSmrg exit $EXIT_FAILURE 1376ab47cfaaSmrg fi 1377ab47cfaaSmrg 1378ab47cfaaSmrg # Just move the object if needed, then go on to compile the next one 1379ab47cfaaSmrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 13801473d951Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 13811473d951Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1382ab47cfaaSmrg fi 1383ab47cfaaSmrg 1384ab47cfaaSmrg # Allow error messages only from the first compilation. 1385ab47cfaaSmrg if test "$suppress_opt" = yes; then 13861473d951Smrg suppress_output=' >/dev/null 2>&1' 1387ab47cfaaSmrg fi 1388ab47cfaaSmrg fi 1389ab47cfaaSmrg 1390ab47cfaaSmrg # Only build a position-dependent object if we build old libraries. 1391ab47cfaaSmrg if test "$build_old_libs" = yes; then 1392ab47cfaaSmrg if test "$pic_mode" != yes; then 1393ab47cfaaSmrg # Don't build PIC code 13941473d951Smrg command="$base_compile $qsrcfile$pie_flag" 1395ab47cfaaSmrg else 1396ab47cfaaSmrg command="$base_compile $qsrcfile $pic_flag" 1397ab47cfaaSmrg fi 1398ab47cfaaSmrg if test "$compiler_c_o" = yes; then 1399ab47cfaaSmrg command="$command -o $obj" 1400ab47cfaaSmrg fi 1401ab47cfaaSmrg 1402ab47cfaaSmrg # Suppress compiler output if we already did a PIC compilation. 1403ab47cfaaSmrg command="$command$suppress_output" 14041473d951Smrg func_show_eval_locale "$command" \ 14051473d951Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1406ab47cfaaSmrg 1407ab47cfaaSmrg if test "$need_locks" = warn && 1408ab47cfaaSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 14091473d951Smrg $ECHO "\ 1410ab47cfaaSmrg*** ERROR, $lockfile contains: 1411ab47cfaaSmrg`cat $lockfile 2>/dev/null` 1412ab47cfaaSmrg 1413ab47cfaaSmrgbut it should contain: 1414ab47cfaaSmrg$srcfile 1415ab47cfaaSmrg 1416ab47cfaaSmrgThis indicates that another process is trying to use the same 1417ab47cfaaSmrgtemporary object file, and libtool could not work around it because 1418ab47cfaaSmrgyour compiler does not support \`-c' and \`-o' together. If you 1419ab47cfaaSmrgrepeat this compilation, it may succeed, by chance, but you had better 1420ab47cfaaSmrgavoid parallel builds (make -j) in this platform, or get a better 1421ab47cfaaSmrgcompiler." 1422ab47cfaaSmrg 14231473d951Smrg $opt_dry_run || $RM $removelist 1424ab47cfaaSmrg exit $EXIT_FAILURE 1425ab47cfaaSmrg fi 1426ab47cfaaSmrg 1427ab47cfaaSmrg # Just move the object if needed 1428ab47cfaaSmrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 14291473d951Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 14301473d951Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1431ab47cfaaSmrg fi 1432ab47cfaaSmrg fi 1433ab47cfaaSmrg 14341473d951Smrg $opt_dry_run || { 14351473d951Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 1436ab47cfaaSmrg 14371473d951Smrg # Unlock the critical section if it was locked 14381473d951Smrg if test "$need_locks" != no; then 14391473d951Smrg removelist=$lockfile 14401473d951Smrg $RM "$lockfile" 14411473d951Smrg fi 14421473d951Smrg } 1443ab47cfaaSmrg 1444ab47cfaaSmrg exit $EXIT_SUCCESS 14451473d951Smrg} 1446ab47cfaaSmrg 14471473d951Smrg$opt_help || { 14481473d951Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"} 14491473d951Smrg} 1450ab47cfaaSmrg 14511473d951Smrgfunc_mode_help () 14521473d951Smrg{ 14531473d951Smrg # We need to display help for each of the modes. 14541473d951Smrg case $mode in 14551473d951Smrg "") 14561473d951Smrg # Generic help is extracted from the usage comments 14571473d951Smrg # at the start of this file. 14581473d951Smrg func_help 14591473d951Smrg ;; 1460ab47cfaaSmrg 14611473d951Smrg clean) 14621473d951Smrg $ECHO \ 14631473d951Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 1464ab47cfaaSmrg 14651473d951SmrgRemove files from the build directory. 1466ab47cfaaSmrg 14671473d951SmrgRM is the name of the program to use to delete files associated with each FILE 14681473d951Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 14691473d951Smrgto RM. 1470ab47cfaaSmrg 14711473d951SmrgIf FILE is a libtool library, object or program, all the files associated 14721473d951Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 14731473d951Smrg ;; 1474ab47cfaaSmrg 14751473d951Smrg compile) 14761473d951Smrg $ECHO \ 14771473d951Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 1478ab47cfaaSmrg 14791473d951SmrgCompile a source file into a libtool library object. 1480ab47cfaaSmrg 14811473d951SmrgThis mode accepts the following additional options: 1482ab47cfaaSmrg 14831473d951Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 14841473d951Smrg -no-suppress do not suppress compiler output for multiple passes 14851473d951Smrg -prefer-pic try to building PIC objects only 14861473d951Smrg -prefer-non-pic try to building non-PIC objects only 14871473d951Smrg -shared do not build a \`.o' file suitable for static linking 14881473d951Smrg -static only build a \`.o' file suitable for static linking 1489ab47cfaaSmrg 14901473d951SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 14911473d951Smrgfrom the given SOURCEFILE. 1492ab47cfaaSmrg 14931473d951SmrgThe output file name is determined by removing the directory component from 14941473d951SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 14951473d951Smrglibrary object suffix, \`.lo'." 14961473d951Smrg ;; 1497ab47cfaaSmrg 14981473d951Smrg execute) 14991473d951Smrg $ECHO \ 15001473d951Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 1501ab47cfaaSmrg 15021473d951SmrgAutomatically set library path, then run a program. 1503ab47cfaaSmrg 15041473d951SmrgThis mode accepts the following additional options: 1505ab47cfaaSmrg 15061473d951Smrg -dlopen FILE add the directory containing FILE to the library path 1507ab47cfaaSmrg 15081473d951SmrgThis mode sets the library path environment variable according to \`-dlopen' 15091473d951Smrgflags. 1510ab47cfaaSmrg 15111473d951SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 15121473d951Smrginto their corresponding uninstalled binary, and any of their required library 15131473d951Smrgdirectories are added to the library path. 1514ab47cfaaSmrg 15151473d951SmrgThen, COMMAND is executed, with ARGS as arguments." 15161473d951Smrg ;; 1517ab47cfaaSmrg 15181473d951Smrg finish) 15191473d951Smrg $ECHO \ 15201473d951Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 1521ab47cfaaSmrg 15221473d951SmrgComplete the installation of libtool libraries. 1523ab47cfaaSmrg 15241473d951SmrgEach LIBDIR is a directory that contains libtool libraries. 1525ab47cfaaSmrg 15261473d951SmrgThe commands that this mode executes may require superuser privileges. Use 15271473d951Smrgthe \`--dry-run' option if you just want to see what would be executed." 15281473d951Smrg ;; 1529ab47cfaaSmrg 15301473d951Smrg install) 15311473d951Smrg $ECHO \ 15321473d951Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 1533ab47cfaaSmrg 15341473d951SmrgInstall executables or libraries. 1535ab47cfaaSmrg 15361473d951SmrgINSTALL-COMMAND is the installation command. The first component should be 15371473d951Smrgeither the \`install' or \`cp' program. 1538ab47cfaaSmrg 15391473d951SmrgThe following components of INSTALL-COMMAND are treated specially: 1540ab47cfaaSmrg 15411473d951Smrg -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation 1542ab47cfaaSmrg 15431473d951SmrgThe rest of the components are interpreted as arguments to that command (only 15441473d951SmrgBSD-compatible install options are recognized)." 15451473d951Smrg ;; 1546ab47cfaaSmrg 15471473d951Smrg link) 15481473d951Smrg $ECHO \ 15491473d951Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 1550ab47cfaaSmrg 15511473d951SmrgLink object files or libraries together to form another library, or to 15521473d951Smrgcreate an executable program. 1553ab47cfaaSmrg 15541473d951SmrgLINK-COMMAND is a command using the C compiler that you would use to create 15551473d951Smrga program from several object files. 1556ab47cfaaSmrg 15571473d951SmrgThe following components of LINK-COMMAND are treated specially: 1558ab47cfaaSmrg 15591473d951Smrg -all-static do not do any dynamic linking at all 15601473d951Smrg -avoid-version do not add a version suffix if possible 15611473d951Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 15621473d951Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 15631473d951Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 15641473d951Smrg -export-symbols SYMFILE 15651473d951Smrg try to export only the symbols listed in SYMFILE 15661473d951Smrg -export-symbols-regex REGEX 15671473d951Smrg try to export only the symbols matching REGEX 15681473d951Smrg -LLIBDIR search LIBDIR for required installed libraries 15691473d951Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 15701473d951Smrg -module build a library that can dlopened 15711473d951Smrg -no-fast-install disable the fast-install mode 15721473d951Smrg -no-install link a not-installable executable 15731473d951Smrg -no-undefined declare that a library does not refer to external symbols 15741473d951Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 15751473d951Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 15761473d951Smrg -precious-files-regex REGEX 15771473d951Smrg don't remove output files matching REGEX 15781473d951Smrg -release RELEASE specify package release information 15791473d951Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 15801473d951Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 15811473d951Smrg -shared only do dynamic linking of libtool libraries 15821473d951Smrg -shrext SUFFIX override the standard shared library file extension 15831473d951Smrg -static do not do any dynamic linking of uninstalled libtool libraries 15841473d951Smrg -static-libtool-libs 15851473d951Smrg do not do any dynamic linking of libtool libraries 15861473d951Smrg -version-info CURRENT[:REVISION[:AGE]] 15871473d951Smrg specify library version info [each variable defaults to 0] 15881473d951Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 1589ab47cfaaSmrg 15901473d951SmrgAll other options (arguments beginning with \`-') are ignored. 1591ab47cfaaSmrg 15921473d951SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 15931473d951Smrgtreated as uninstalled libtool libraries, other files are standard or library 15941473d951Smrgobject files. 1595ab47cfaaSmrg 15961473d951SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 15971473d951Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 15981473d951Smrgrequired, except when creating a convenience library. 1599ab47cfaaSmrg 16001473d951SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 16011473d951Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 1602ab47cfaaSmrg 16031473d951SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 16041473d951Smrgis created, otherwise an executable program is created." 1605ab47cfaaSmrg ;; 1606ab47cfaaSmrg 16071473d951Smrg uninstall) 16081473d951Smrg $ECHO \ 16091473d951Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 1610ab47cfaaSmrg 16111473d951SmrgRemove libraries from an installation directory. 1612ab47cfaaSmrg 16131473d951SmrgRM is the name of the program to use to delete files associated with each FILE 16141473d951Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 16151473d951Smrgto RM. 1616ab47cfaaSmrg 16171473d951SmrgIf FILE is a libtool library, all the files associated with it are deleted. 16181473d951SmrgOtherwise, only FILE itself is deleted using RM." 16191473d951Smrg ;; 1620ab47cfaaSmrg 16211473d951Smrg *) 16221473d951Smrg func_fatal_help "invalid operation mode \`$mode'" 16231473d951Smrg ;; 16241473d951Smrg esac 1625ab47cfaaSmrg 16261473d951Smrg $ECHO 16271473d951Smrg $ECHO "Try \`$progname --help' for more information about other modes." 1628ab47cfaaSmrg 16291473d951Smrg exit $? 16301473d951Smrg} 1631ab47cfaaSmrg 16321473d951Smrg # Now that we've collected a possible --mode arg, show help if necessary 16331473d951Smrg $opt_help && func_mode_help 1634ab47cfaaSmrg 1635ab47cfaaSmrg 16361473d951Smrg# func_mode_execute arg... 16371473d951Smrgfunc_mode_execute () 16381473d951Smrg{ 16391473d951Smrg $opt_debug 16401473d951Smrg # The first argument is the command name. 16411473d951Smrg cmd="$nonopt" 16421473d951Smrg test -z "$cmd" && \ 16431473d951Smrg func_fatal_help "you must specify a COMMAND" 1644ab47cfaaSmrg 16451473d951Smrg # Handle -dlopen flags immediately. 16461473d951Smrg for file in $execute_dlfiles; do 16471473d951Smrg test -f "$file" \ 16481473d951Smrg || func_fatal_help "\`$file' is not a file" 1649ab47cfaaSmrg 16501473d951Smrg dir= 16511473d951Smrg case $file in 16521473d951Smrg *.la) 16531473d951Smrg # Check to see that this really is a libtool archive. 16541473d951Smrg func_lalib_unsafe_p "$file" \ 16551473d951Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 1656ab47cfaaSmrg 16571473d951Smrg # Read the libtool library. 16581473d951Smrg dlname= 16591473d951Smrg library_names= 16601473d951Smrg func_source "$file" 1661ab47cfaaSmrg 16621473d951Smrg # Skip this library if it cannot be dlopened. 16631473d951Smrg if test -z "$dlname"; then 16641473d951Smrg # Warn if it was a shared library. 16651473d951Smrg test -n "$library_names" && \ 16661473d951Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 16671473d951Smrg continue 16681473d951Smrg fi 1669ab47cfaaSmrg 16701473d951Smrg func_dirname "$file" "" "." 16711473d951Smrg dir="$func_dirname_result" 1672ab47cfaaSmrg 16731473d951Smrg if test -f "$dir/$objdir/$dlname"; then 16741473d951Smrg dir="$dir/$objdir" 16751473d951Smrg else 16761473d951Smrg if test ! -f "$dir/$dlname"; then 16771473d951Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 16781473d951Smrg fi 16791473d951Smrg fi 1680ab47cfaaSmrg ;; 1681ab47cfaaSmrg 16821473d951Smrg *.lo) 16831473d951Smrg # Just add the directory containing the .lo file. 16841473d951Smrg func_dirname "$file" "" "." 16851473d951Smrg dir="$func_dirname_result" 1686ab47cfaaSmrg ;; 1687ab47cfaaSmrg 16881473d951Smrg *) 16891473d951Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 1690ab47cfaaSmrg continue 1691ab47cfaaSmrg ;; 16921473d951Smrg esac 1693ab47cfaaSmrg 16941473d951Smrg # Get the absolute pathname. 16951473d951Smrg absdir=`cd "$dir" && pwd` 16961473d951Smrg test -n "$absdir" && dir="$absdir" 1697ab47cfaaSmrg 16981473d951Smrg # Now add the directory to shlibpath_var. 16991473d951Smrg if eval "test -z \"\$$shlibpath_var\""; then 17001473d951Smrg eval "$shlibpath_var=\"\$dir\"" 17011473d951Smrg else 17021473d951Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 17031473d951Smrg fi 17041473d951Smrg done 1705ab47cfaaSmrg 17061473d951Smrg # This variable tells wrapper scripts just to set shlibpath_var 17071473d951Smrg # rather than running their programs. 17081473d951Smrg libtool_execute_magic="$magic" 1709ab47cfaaSmrg 17101473d951Smrg # Check if any of the arguments is a wrapper script. 17111473d951Smrg args= 17121473d951Smrg for file 17131473d951Smrg do 17141473d951Smrg case $file in 17151473d951Smrg -*) ;; 17161473d951Smrg *) 17171473d951Smrg # Do a test to see if this is really a libtool program. 17181473d951Smrg if func_ltwrapper_script_p "$file"; then 17191473d951Smrg func_source "$file" 17201473d951Smrg # Transform arg to wrapped name. 17211473d951Smrg file="$progdir/$program" 17221473d951Smrg elif func_ltwrapper_executable_p "$file"; then 17231473d951Smrg func_ltwrapper_scriptname "$file" 17241473d951Smrg func_source "$func_ltwrapper_scriptname_result" 17251473d951Smrg # Transform arg to wrapped name. 17261473d951Smrg file="$progdir/$program" 17271473d951Smrg fi 17281473d951Smrg ;; 17291473d951Smrg esac 17301473d951Smrg # Quote arguments (to preserve shell metacharacters). 17311473d951Smrg func_quote_for_eval "$file" 17321473d951Smrg args="$args $func_quote_for_eval_result" 17331473d951Smrg done 1734ab47cfaaSmrg 17351473d951Smrg if test "X$opt_dry_run" = Xfalse; then 17361473d951Smrg if test -n "$shlibpath_var"; then 17371473d951Smrg # Export the shlibpath_var. 17381473d951Smrg eval "export $shlibpath_var" 17391473d951Smrg fi 1740ab47cfaaSmrg 17411473d951Smrg # Restore saved environment variables 17421473d951Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 17431473d951Smrg do 17441473d951Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 17451473d951Smrg $lt_var=\$save_$lt_var; export $lt_var 1746ab47cfaaSmrg else 17471473d951Smrg $lt_unset $lt_var 17481473d951Smrg fi" 17491473d951Smrg done 1750ab47cfaaSmrg 17511473d951Smrg # Now prepare to actually exec the command. 17521473d951Smrg exec_cmd="\$cmd$args" 17531473d951Smrg else 17541473d951Smrg # Display what would be done. 17551473d951Smrg if test -n "$shlibpath_var"; then 17561473d951Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 17571473d951Smrg $ECHO "export $shlibpath_var" 17581473d951Smrg fi 17591473d951Smrg $ECHO "$cmd$args" 17601473d951Smrg exit $EXIT_SUCCESS 17611473d951Smrg fi 17621473d951Smrg} 1763ab47cfaaSmrg 17641473d951Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 1765ab47cfaaSmrg 1766ab47cfaaSmrg 17671473d951Smrg# func_mode_finish arg... 17681473d951Smrgfunc_mode_finish () 17691473d951Smrg{ 17701473d951Smrg $opt_debug 17711473d951Smrg libdirs="$nonopt" 17721473d951Smrg admincmds= 1773ab47cfaaSmrg 17741473d951Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 17751473d951Smrg for dir 17761473d951Smrg do 17771473d951Smrg libdirs="$libdirs $dir" 17781473d951Smrg done 1779ab47cfaaSmrg 17801473d951Smrg for libdir in $libdirs; do 17811473d951Smrg if test -n "$finish_cmds"; then 17821473d951Smrg # Do each command in the finish commands. 17831473d951Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 17841473d951Smrg'"$cmd"'"' 1785ab47cfaaSmrg fi 17861473d951Smrg if test -n "$finish_eval"; then 17871473d951Smrg # Do the single finish_eval. 17881473d951Smrg eval cmds=\"$finish_eval\" 17891473d951Smrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 17901473d951Smrg $cmds" 17911473d951Smrg fi 17921473d951Smrg done 17931473d951Smrg fi 1794ab47cfaaSmrg 17951473d951Smrg # Exit here if they wanted silent mode. 17961473d951Smrg $opt_silent && exit $EXIT_SUCCESS 1797ab47cfaaSmrg 17981473d951Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 17991473d951Smrg $ECHO "Libraries have been installed in:" 18001473d951Smrg for libdir in $libdirs; do 18011473d951Smrg $ECHO " $libdir" 18021473d951Smrg done 18031473d951Smrg $ECHO 18041473d951Smrg $ECHO "If you ever happen to want to link against installed libraries" 18051473d951Smrg $ECHO "in a given directory, LIBDIR, you must either use libtool, and" 18061473d951Smrg $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" 18071473d951Smrg $ECHO "flag during linking and do at least one of the following:" 18081473d951Smrg if test -n "$shlibpath_var"; then 18091473d951Smrg $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" 18101473d951Smrg $ECHO " during execution" 18111473d951Smrg fi 18121473d951Smrg if test -n "$runpath_var"; then 18131473d951Smrg $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" 18141473d951Smrg $ECHO " during linking" 18151473d951Smrg fi 18161473d951Smrg if test -n "$hardcode_libdir_flag_spec"; then 18171473d951Smrg libdir=LIBDIR 18181473d951Smrg eval flag=\"$hardcode_libdir_flag_spec\" 1819ab47cfaaSmrg 18201473d951Smrg $ECHO " - use the \`$flag' linker flag" 18211473d951Smrg fi 18221473d951Smrg if test -n "$admincmds"; then 18231473d951Smrg $ECHO " - have your system administrator run these commands:$admincmds" 18241473d951Smrg fi 18251473d951Smrg if test -f /etc/ld.so.conf; then 18261473d951Smrg $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 18271473d951Smrg fi 18281473d951Smrg $ECHO 18291473d951Smrg 18301473d951Smrg $ECHO "See any operating system documentation about shared libraries for" 18311473d951Smrg case $host in 18321473d951Smrg solaris2.[6789]|solaris2.1[0-9]) 18331473d951Smrg $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" 18341473d951Smrg $ECHO "pages." 18351473d951Smrg ;; 18361473d951Smrg *) 18371473d951Smrg $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." 18381473d951Smrg ;; 18391473d951Smrg esac 18401473d951Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 18411473d951Smrg exit $EXIT_SUCCESS 18421473d951Smrg} 18431473d951Smrg 18441473d951Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 18451473d951Smrg 18461473d951Smrg 18471473d951Smrg# func_mode_install arg... 18481473d951Smrgfunc_mode_install () 18491473d951Smrg{ 18501473d951Smrg $opt_debug 18511473d951Smrg # There may be an optional sh(1) argument at the beginning of 18521473d951Smrg # install_prog (especially on Windows NT). 18531473d951Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 18541473d951Smrg # Allow the use of GNU shtool's install command. 18551473d951Smrg $ECHO "X$nonopt" | $GREP shtool >/dev/null; then 18561473d951Smrg # Aesthetically quote it. 18571473d951Smrg func_quote_for_eval "$nonopt" 18581473d951Smrg install_prog="$func_quote_for_eval_result " 18591473d951Smrg arg=$1 18601473d951Smrg shift 18611473d951Smrg else 18621473d951Smrg install_prog= 18631473d951Smrg arg=$nonopt 18641473d951Smrg fi 18651473d951Smrg 18661473d951Smrg # The real first argument should be the name of the installation program. 18671473d951Smrg # Aesthetically quote it. 18681473d951Smrg func_quote_for_eval "$arg" 18691473d951Smrg install_prog="$install_prog$func_quote_for_eval_result" 18701473d951Smrg 18711473d951Smrg # We need to accept at least all the BSD install flags. 18721473d951Smrg dest= 18731473d951Smrg files= 18741473d951Smrg opts= 18751473d951Smrg prev= 18761473d951Smrg install_type= 18771473d951Smrg isdir=no 18781473d951Smrg stripme= 18791473d951Smrg for arg 18801473d951Smrg do 18811473d951Smrg if test -n "$dest"; then 18821473d951Smrg files="$files $dest" 18831473d951Smrg dest=$arg 18841473d951Smrg continue 18851473d951Smrg fi 18861473d951Smrg 18871473d951Smrg case $arg in 18881473d951Smrg -d) isdir=yes ;; 18891473d951Smrg -f) 18901473d951Smrg case " $install_prog " in 18911473d951Smrg *[\\\ /]cp\ *) ;; 18921473d951Smrg *) prev=$arg ;; 18931473d951Smrg esac 18941473d951Smrg ;; 18951473d951Smrg -g | -m | -o) 18961473d951Smrg prev=$arg 18971473d951Smrg ;; 18981473d951Smrg -s) 18991473d951Smrg stripme=" -s" 19001473d951Smrg continue 19011473d951Smrg ;; 19021473d951Smrg -*) 19031473d951Smrg ;; 19041473d951Smrg *) 19051473d951Smrg # If the previous option needed an argument, then skip it. 19061473d951Smrg if test -n "$prev"; then 1907ab47cfaaSmrg prev= 1908ab47cfaaSmrg else 19091473d951Smrg dest=$arg 19101473d951Smrg continue 1911ab47cfaaSmrg fi 1912ab47cfaaSmrg ;; 19131473d951Smrg esac 1914ab47cfaaSmrg 19151473d951Smrg # Aesthetically quote the argument. 19161473d951Smrg func_quote_for_eval "$arg" 19171473d951Smrg install_prog="$install_prog $func_quote_for_eval_result" 19181473d951Smrg done 1919ab47cfaaSmrg 19201473d951Smrg test -z "$install_prog" && \ 19211473d951Smrg func_fatal_help "you must specify an install program" 1922ab47cfaaSmrg 19231473d951Smrg test -n "$prev" && \ 19241473d951Smrg func_fatal_help "the \`$prev' option requires an argument" 1925ab47cfaaSmrg 19261473d951Smrg if test -z "$files"; then 19271473d951Smrg if test -z "$dest"; then 19281473d951Smrg func_fatal_help "no file or destination specified" 19291473d951Smrg else 19301473d951Smrg func_fatal_help "you must specify a destination" 19311473d951Smrg fi 1932ab47cfaaSmrg fi 1933ab47cfaaSmrg 19341473d951Smrg # Strip any trailing slash from the destination. 19351473d951Smrg func_stripname '' '/' "$dest" 19361473d951Smrg dest=$func_stripname_result 1937ab47cfaaSmrg 19381473d951Smrg # Check to see that the destination is a directory. 19391473d951Smrg test -d "$dest" && isdir=yes 19401473d951Smrg if test "$isdir" = yes; then 19411473d951Smrg destdir="$dest" 19421473d951Smrg destname= 1943ab47cfaaSmrg else 19441473d951Smrg func_dirname_and_basename "$dest" "" "." 19451473d951Smrg destdir="$func_dirname_result" 19461473d951Smrg destname="$func_basename_result" 1947ab47cfaaSmrg 19481473d951Smrg # Not a directory, so check to see that there is only one file specified. 19491473d951Smrg set dummy $files; shift 19501473d951Smrg test "$#" -gt 1 && \ 19511473d951Smrg func_fatal_help "\`$dest' is not a directory" 1952ab47cfaaSmrg fi 19531473d951Smrg case $destdir in 19541473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 1955ab47cfaaSmrg *) 19561473d951Smrg for file in $files; do 19571473d951Smrg case $file in 19581473d951Smrg *.lo) ;; 19591473d951Smrg *) 19601473d951Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 19611473d951Smrg ;; 19621473d951Smrg esac 19631473d951Smrg done 1964ab47cfaaSmrg ;; 1965ab47cfaaSmrg esac 1966ab47cfaaSmrg 19671473d951Smrg # This variable tells wrapper scripts just to set variables rather 19681473d951Smrg # than running their programs. 19691473d951Smrg libtool_install_magic="$magic" 1970ab47cfaaSmrg 19711473d951Smrg staticlibs= 19721473d951Smrg future_libdirs= 19731473d951Smrg current_libdirs= 19741473d951Smrg for file in $files; do 1975ab47cfaaSmrg 19761473d951Smrg # Do each installation. 19771473d951Smrg case $file in 19781473d951Smrg *.$libext) 19791473d951Smrg # Do the static libraries later. 19801473d951Smrg staticlibs="$staticlibs $file" 19811473d951Smrg ;; 19821473d951Smrg 19831473d951Smrg *.la) 19841473d951Smrg # Check to see that this really is a libtool archive. 19851473d951Smrg func_lalib_unsafe_p "$file" \ 19861473d951Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 19871473d951Smrg 19881473d951Smrg library_names= 19891473d951Smrg old_library= 19901473d951Smrg relink_command= 19911473d951Smrg func_source "$file" 19921473d951Smrg 19931473d951Smrg # Add the libdir to current_libdirs if it is the destination. 19941473d951Smrg if test "X$destdir" = "X$libdir"; then 19951473d951Smrg case "$current_libdirs " in 19961473d951Smrg *" $libdir "*) ;; 19971473d951Smrg *) current_libdirs="$current_libdirs $libdir" ;; 1998ab47cfaaSmrg esac 19991473d951Smrg else 20001473d951Smrg # Note the libdir as a future libdir. 20011473d951Smrg case "$future_libdirs " in 20021473d951Smrg *" $libdir "*) ;; 20031473d951Smrg *) future_libdirs="$future_libdirs $libdir" ;; 20041473d951Smrg esac 20051473d951Smrg fi 2006ab47cfaaSmrg 20071473d951Smrg func_dirname "$file" "/" "" 20081473d951Smrg dir="$func_dirname_result" 20091473d951Smrg dir="$dir$objdir" 20101473d951Smrg 20111473d951Smrg if test -n "$relink_command"; then 20121473d951Smrg # Determine the prefix the user has applied to our future dir. 20131473d951Smrg inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` 20141473d951Smrg 20151473d951Smrg # Don't allow the user to place us outside of our expected 20161473d951Smrg # location b/c this prevents finding dependent libraries that 20171473d951Smrg # are installed to the same prefix. 20181473d951Smrg # At present, this check doesn't affect windows .dll's that 20191473d951Smrg # are installed into $libdir/../bin (currently, that works fine) 20201473d951Smrg # but it's something to keep an eye on. 20211473d951Smrg test "$inst_prefix_dir" = "$destdir" && \ 20221473d951Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 20231473d951Smrg 20241473d951Smrg if test -n "$inst_prefix_dir"; then 20251473d951Smrg # Stick the inst_prefix_dir data into the link command. 20261473d951Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 20271473d951Smrg else 20281473d951Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` 20291473d951Smrg fi 20301473d951Smrg 20311473d951Smrg func_warning "relinking \`$file'" 20321473d951Smrg func_show_eval "$relink_command" \ 20331473d951Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 20341473d951Smrg fi 20351473d951Smrg 20361473d951Smrg # See the names of the shared library. 20371473d951Smrg set dummy $library_names; shift 20381473d951Smrg if test -n "$1"; then 20391473d951Smrg realname="$1" 20401473d951Smrg shift 20411473d951Smrg 20421473d951Smrg srcname="$realname" 20431473d951Smrg test -n "$relink_command" && srcname="$realname"T 20441473d951Smrg 20451473d951Smrg # Install the shared library and build the symlinks. 20461473d951Smrg func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 20471473d951Smrg 'exit $?' 20481473d951Smrg tstripme="$stripme" 20491473d951Smrg case $host_os in 20501473d951Smrg cygwin* | mingw* | pw32* | cegcc*) 20511473d951Smrg case $realname in 20521473d951Smrg *.dll.a) 20531473d951Smrg tstripme="" 20541473d951Smrg ;; 20551473d951Smrg esac 2056ab47cfaaSmrg ;; 2057ab47cfaaSmrg esac 20581473d951Smrg if test -n "$tstripme" && test -n "$striplib"; then 20591473d951Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 2060ab47cfaaSmrg fi 20611473d951Smrg 20621473d951Smrg if test "$#" -gt 0; then 20631473d951Smrg # Delete the old symlinks, and create new ones. 20641473d951Smrg # Try `ln -sf' first, because the `ln' binary might depend on 20651473d951Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 20661473d951Smrg # so we also need to try rm && ln -s. 20671473d951Smrg for linkname 20681473d951Smrg do 20691473d951Smrg test "$linkname" != "$realname" \ 20701473d951Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 2071ab47cfaaSmrg done 2072ab47cfaaSmrg fi 2073ab47cfaaSmrg 20741473d951Smrg # Do each command in the postinstall commands. 20751473d951Smrg lib="$destdir/$realname" 20761473d951Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 2077ab47cfaaSmrg fi 2078ab47cfaaSmrg 20791473d951Smrg # Install the pseudo-library for information purposes. 20801473d951Smrg func_basename "$file" 20811473d951Smrg name="$func_basename_result" 20821473d951Smrg instname="$dir/$name"i 20831473d951Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 2084ab47cfaaSmrg 20851473d951Smrg # Maybe install the static library, too. 20861473d951Smrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 20871473d951Smrg ;; 2088ab47cfaaSmrg 20891473d951Smrg *.lo) 20901473d951Smrg # Install (i.e. copy) a libtool object. 2091ab47cfaaSmrg 20921473d951Smrg # Figure out destination file name, if it wasn't already specified. 20931473d951Smrg if test -n "$destname"; then 20941473d951Smrg destfile="$destdir/$destname" 20951473d951Smrg else 20961473d951Smrg func_basename "$file" 20971473d951Smrg destfile="$func_basename_result" 20981473d951Smrg destfile="$destdir/$destfile" 2099ab47cfaaSmrg fi 2100ab47cfaaSmrg 21011473d951Smrg # Deduce the name of the destination old-style object file. 21021473d951Smrg case $destfile in 21031473d951Smrg *.lo) 21041473d951Smrg func_lo2o "$destfile" 21051473d951Smrg staticdest=$func_lo2o_result 21061473d951Smrg ;; 21071473d951Smrg *.$objext) 21081473d951Smrg staticdest="$destfile" 21091473d951Smrg destfile= 21101473d951Smrg ;; 21111473d951Smrg *) 21121473d951Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 21131473d951Smrg ;; 21141473d951Smrg esac 2115ab47cfaaSmrg 21161473d951Smrg # Install the libtool object if requested. 21171473d951Smrg test -n "$destfile" && \ 21181473d951Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 2119ab47cfaaSmrg 21201473d951Smrg # Install the old object if enabled. 21211473d951Smrg if test "$build_old_libs" = yes; then 21221473d951Smrg # Deduce the name of the old-style object file. 21231473d951Smrg func_lo2o "$file" 21241473d951Smrg staticobj=$func_lo2o_result 21251473d951Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 2126ab47cfaaSmrg fi 21271473d951Smrg exit $EXIT_SUCCESS 21281473d951Smrg ;; 2129ab47cfaaSmrg 21301473d951Smrg *) 21311473d951Smrg # Figure out destination file name, if it wasn't already specified. 21321473d951Smrg if test -n "$destname"; then 21331473d951Smrg destfile="$destdir/$destname" 21341473d951Smrg else 21351473d951Smrg func_basename "$file" 21361473d951Smrg destfile="$func_basename_result" 21371473d951Smrg destfile="$destdir/$destfile" 21381473d951Smrg fi 2139ab47cfaaSmrg 21401473d951Smrg # If the file is missing, and there is a .exe on the end, strip it 21411473d951Smrg # because it is most likely a libtool script we actually want to 21421473d951Smrg # install 21431473d951Smrg stripped_ext="" 21441473d951Smrg case $file in 21451473d951Smrg *.exe) 21461473d951Smrg if test ! -f "$file"; then 21471473d951Smrg func_stripname '' '.exe' "$file" 21481473d951Smrg file=$func_stripname_result 21491473d951Smrg stripped_ext=".exe" 21501473d951Smrg fi 21511473d951Smrg ;; 21521473d951Smrg esac 21531473d951Smrg 21541473d951Smrg # Do a test to see if this is really a libtool program. 21551473d951Smrg case $host in 21561473d951Smrg *cygwin* | *mingw*) 21571473d951Smrg if func_ltwrapper_executable_p "$file"; then 21581473d951Smrg func_ltwrapper_scriptname "$file" 21591473d951Smrg wrapper=$func_ltwrapper_scriptname_result 21601473d951Smrg else 21611473d951Smrg func_stripname '' '.exe' "$file" 21621473d951Smrg wrapper=$func_stripname_result 21631473d951Smrg fi 21641473d951Smrg ;; 2165ab47cfaaSmrg *) 21661473d951Smrg wrapper=$file 21671473d951Smrg ;; 21681473d951Smrg esac 21691473d951Smrg if func_ltwrapper_script_p "$wrapper"; then 21701473d951Smrg notinst_deplibs= 21711473d951Smrg relink_command= 21721473d951Smrg 21731473d951Smrg func_source "$wrapper" 21741473d951Smrg 21751473d951Smrg # Check the variables that should have been set. 21761473d951Smrg test -z "$generated_by_libtool_version" && \ 21771473d951Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 21781473d951Smrg 21791473d951Smrg finalize=yes 21801473d951Smrg for lib in $notinst_deplibs; do 21811473d951Smrg # Check to see that each library is installed. 21821473d951Smrg libdir= 21831473d951Smrg if test -f "$lib"; then 21841473d951Smrg func_source "$lib" 21851473d951Smrg fi 21861473d951Smrg libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 21871473d951Smrg if test -n "$libdir" && test ! -f "$libfile"; then 21881473d951Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 21891473d951Smrg finalize=no 21901473d951Smrg fi 21911473d951Smrg done 21921473d951Smrg 21931473d951Smrg relink_command= 21941473d951Smrg func_source "$wrapper" 21951473d951Smrg 21961473d951Smrg outputname= 21971473d951Smrg if test "$fast_install" = no && test -n "$relink_command"; then 21981473d951Smrg $opt_dry_run || { 21991473d951Smrg if test "$finalize" = yes; then 22001473d951Smrg tmpdir=`func_mktempdir` 22011473d951Smrg func_basename "$file$stripped_ext" 22021473d951Smrg file="$func_basename_result" 22031473d951Smrg outputname="$tmpdir/$file" 22041473d951Smrg # Replace the output file specification. 22051473d951Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` 22061473d951Smrg 22071473d951Smrg $opt_silent || { 22081473d951Smrg func_quote_for_expand "$relink_command" 22091473d951Smrg eval "func_echo $func_quote_for_expand_result" 22101473d951Smrg } 22111473d951Smrg if eval "$relink_command"; then : 22121473d951Smrg else 22131473d951Smrg func_error "error: relink \`$file' with the above command before installing it" 22141473d951Smrg $opt_dry_run || ${RM}r "$tmpdir" 22151473d951Smrg continue 22161473d951Smrg fi 22171473d951Smrg file="$outputname" 22181473d951Smrg else 22191473d951Smrg func_warning "cannot relink \`$file'" 22201473d951Smrg fi 22211473d951Smrg } 22221473d951Smrg else 22231473d951Smrg # Install the binary that we compiled earlier. 22241473d951Smrg file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 2225ab47cfaaSmrg fi 22261473d951Smrg fi 22271473d951Smrg 22281473d951Smrg # remove .exe since cygwin /usr/bin/install will append another 22291473d951Smrg # one anyway 22301473d951Smrg case $install_prog,$host in 22311473d951Smrg */usr/bin/install*,*cygwin*) 22321473d951Smrg case $file:$destfile in 22331473d951Smrg *.exe:*.exe) 22341473d951Smrg # this is ok 22351473d951Smrg ;; 22361473d951Smrg *.exe:*) 22371473d951Smrg destfile=$destfile.exe 22381473d951Smrg ;; 22391473d951Smrg *:*.exe) 22401473d951Smrg func_stripname '' '.exe' "$destfile" 22411473d951Smrg destfile=$func_stripname_result 22421473d951Smrg ;; 22431473d951Smrg esac 2244ab47cfaaSmrg ;; 2245ab47cfaaSmrg esac 22461473d951Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 22471473d951Smrg $opt_dry_run || if test -n "$outputname"; then 22481473d951Smrg ${RM}r "$tmpdir" 22491473d951Smrg fi 22501473d951Smrg ;; 22511473d951Smrg esac 22521473d951Smrg done 2253ab47cfaaSmrg 22541473d951Smrg for file in $staticlibs; do 22551473d951Smrg func_basename "$file" 22561473d951Smrg name="$func_basename_result" 22571473d951Smrg 22581473d951Smrg # Set up the ranlib parameters. 22591473d951Smrg oldlib="$destdir/$name" 22601473d951Smrg 22611473d951Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 22621473d951Smrg 22631473d951Smrg if test -n "$stripme" && test -n "$old_striplib"; then 22641473d951Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 22651473d951Smrg fi 22661473d951Smrg 22671473d951Smrg # Do each command in the postinstall commands. 22681473d951Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 22691473d951Smrg done 22701473d951Smrg 22711473d951Smrg test -n "$future_libdirs" && \ 22721473d951Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 22731473d951Smrg 22741473d951Smrg if test -n "$current_libdirs"; then 22751473d951Smrg # Maybe just do a dry run. 22761473d951Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 22771473d951Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 22781473d951Smrg else 22791473d951Smrg exit $EXIT_SUCCESS 22801473d951Smrg fi 22811473d951Smrg} 22821473d951Smrg 22831473d951Smrgtest "$mode" = install && func_mode_install ${1+"$@"} 22841473d951Smrg 22851473d951Smrg 22861473d951Smrg# func_generate_dlsyms outputname originator pic_p 22871473d951Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 22881473d951Smrg# a dlpreopen symbol table. 22891473d951Smrgfunc_generate_dlsyms () 22901473d951Smrg{ 22911473d951Smrg $opt_debug 22921473d951Smrg my_outputname="$1" 22931473d951Smrg my_originator="$2" 22941473d951Smrg my_pic_p="${3-no}" 22951473d951Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 22961473d951Smrg my_dlsyms= 22971473d951Smrg 22981473d951Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 22991473d951Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 23001473d951Smrg my_dlsyms="${my_outputname}S.c" 23011473d951Smrg else 23021473d951Smrg func_error "not configured to extract global symbols from dlpreopened files" 23031473d951Smrg fi 23041473d951Smrg fi 23051473d951Smrg 23061473d951Smrg if test -n "$my_dlsyms"; then 23071473d951Smrg case $my_dlsyms in 23081473d951Smrg "") ;; 23091473d951Smrg *.c) 23101473d951Smrg # Discover the nlist of each of the dlfiles. 23111473d951Smrg nlist="$output_objdir/${my_outputname}.nm" 23121473d951Smrg 23131473d951Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 23141473d951Smrg 23151473d951Smrg # Parse the name list into a source file. 23161473d951Smrg func_verbose "creating $output_objdir/$my_dlsyms" 23171473d951Smrg 23181473d951Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 23191473d951Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 23201473d951Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 23211473d951Smrg 23221473d951Smrg#ifdef __cplusplus 23231473d951Smrgextern \"C\" { 23241473d951Smrg#endif 23251473d951Smrg 23261473d951Smrg/* External symbol declarations for the compiler. */\ 23271473d951Smrg" 23281473d951Smrg 23291473d951Smrg if test "$dlself" = yes; then 23301473d951Smrg func_verbose "generating symbol list for \`$output'" 23311473d951Smrg 23321473d951Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 23331473d951Smrg 23341473d951Smrg # Add our own program objects to the symbol list. 23351473d951Smrg progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 23361473d951Smrg for progfile in $progfiles; do 23371473d951Smrg func_verbose "extracting global C symbols from \`$progfile'" 23381473d951Smrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 23391473d951Smrg done 23401473d951Smrg 23411473d951Smrg if test -n "$exclude_expsyms"; then 23421473d951Smrg $opt_dry_run || { 23431473d951Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 23441473d951Smrg eval '$MV "$nlist"T "$nlist"' 23451473d951Smrg } 2346ab47cfaaSmrg fi 23471473d951Smrg 23481473d951Smrg if test -n "$export_symbols_regex"; then 23491473d951Smrg $opt_dry_run || { 23501473d951Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 23511473d951Smrg eval '$MV "$nlist"T "$nlist"' 23521473d951Smrg } 23531473d951Smrg fi 23541473d951Smrg 23551473d951Smrg # Prepare the list of exported symbols 23561473d951Smrg if test -z "$export_symbols"; then 23571473d951Smrg export_symbols="$output_objdir/$outputname.exp" 23581473d951Smrg $opt_dry_run || { 23591473d951Smrg $RM $export_symbols 23601473d951Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 23611473d951Smrg case $host in 23621473d951Smrg *cygwin* | *mingw* | *cegcc* ) 23631473d951Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 23641473d951Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 23651473d951Smrg ;; 23661473d951Smrg esac 23671473d951Smrg } 2368ab47cfaaSmrg else 23691473d951Smrg $opt_dry_run || { 23701473d951Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 23711473d951Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 23721473d951Smrg eval '$MV "$nlist"T "$nlist"' 23731473d951Smrg case $host in 23741473d951Smrg *cygwin | *mingw* | *cegcc* ) 23751473d951Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 23761473d951Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 23771473d951Smrg ;; 23781473d951Smrg esac 23791473d951Smrg } 2380ab47cfaaSmrg fi 23811473d951Smrg fi 2382ab47cfaaSmrg 23831473d951Smrg for dlprefile in $dlprefiles; do 23841473d951Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 23851473d951Smrg func_basename "$dlprefile" 23861473d951Smrg name="$func_basename_result" 23871473d951Smrg $opt_dry_run || { 23881473d951Smrg eval '$ECHO ": $name " >> "$nlist"' 23891473d951Smrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 23901473d951Smrg } 23911473d951Smrg done 23921473d951Smrg 23931473d951Smrg $opt_dry_run || { 23941473d951Smrg # Make sure we have at least an empty file. 23951473d951Smrg test -f "$nlist" || : > "$nlist" 23961473d951Smrg 23971473d951Smrg if test -n "$exclude_expsyms"; then 23981473d951Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 23991473d951Smrg $MV "$nlist"T "$nlist" 2400ab47cfaaSmrg fi 24011473d951Smrg 24021473d951Smrg # Try sorting and uniquifying the output. 24031473d951Smrg if $GREP -v "^: " < "$nlist" | 24041473d951Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 24051473d951Smrg sort -k 3 24061473d951Smrg else 24071473d951Smrg sort +2 24081473d951Smrg fi | 24091473d951Smrg uniq > "$nlist"S; then 24101473d951Smrg : 2411ab47cfaaSmrg else 24121473d951Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 2413ab47cfaaSmrg fi 2414ab47cfaaSmrg 24151473d951Smrg if test -f "$nlist"S; then 24161473d951Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 2417ab47cfaaSmrg else 24181473d951Smrg $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" 2419ab47cfaaSmrg fi 2420ab47cfaaSmrg 24211473d951Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 2422ab47cfaaSmrg 24231473d951Smrg/* The mapping between symbol names and symbols. */ 24241473d951Smrgtypedef struct { 24251473d951Smrg const char *name; 24261473d951Smrg void *address; 24271473d951Smrg} lt_dlsymlist; 24281473d951Smrg" 24291473d951Smrg case $host in 24301473d951Smrg *cygwin* | *mingw* | *cegcc* ) 24311473d951Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 24321473d951Smrg/* DATA imports from DLLs on WIN32 con't be const, because 24331473d951Smrg runtime relocations are performed -- see ld's documentation 24341473d951Smrg on pseudo-relocs. */" 24351473d951Smrg lt_dlsym_const= ;; 24361473d951Smrg *osf5*) 24371473d951Smrg echo >> "$output_objdir/$my_dlsyms" "\ 24381473d951Smrg/* This system does not cope well with relocations in const data */" 24391473d951Smrg lt_dlsym_const= ;; 24401473d951Smrg *) 24411473d951Smrg lt_dlsym_const=const ;; 24421473d951Smrg esac 2443ab47cfaaSmrg 24441473d951Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 24451473d951Smrgextern $lt_dlsym_const lt_dlsymlist 24461473d951Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 24471473d951Smrg$lt_dlsym_const lt_dlsymlist 24481473d951Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 24491473d951Smrg{\ 24501473d951Smrg { \"$my_originator\", (void *) 0 }," 2451ab47cfaaSmrg 24521473d951Smrg case $need_lib_prefix in 24531473d951Smrg no) 24541473d951Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 24551473d951Smrg ;; 24561473d951Smrg *) 24571473d951Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 24581473d951Smrg ;; 24591473d951Smrg esac 24601473d951Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 24611473d951Smrg {0, (void *) 0} 24621473d951Smrg}; 2463ab47cfaaSmrg 24641473d951Smrg/* This works around a problem in FreeBSD linker */ 24651473d951Smrg#ifdef FREEBSD_WORKAROUND 24661473d951Smrgstatic const void *lt_preloaded_setup() { 24671473d951Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 24681473d951Smrg} 24691473d951Smrg#endif 2470ab47cfaaSmrg 24711473d951Smrg#ifdef __cplusplus 24721473d951Smrg} 24731473d951Smrg#endif\ 24741473d951Smrg" 24751473d951Smrg } # !$opt_dry_run 2476ab47cfaaSmrg 24771473d951Smrg pic_flag_for_symtable= 24781473d951Smrg case "$compile_command " in 24791473d951Smrg *" -static "*) ;; 24801473d951Smrg *) 24811473d951Smrg case $host in 24821473d951Smrg # compiling the symbol table file with pic_flag works around 24831473d951Smrg # a FreeBSD bug that causes programs to crash when -lm is 24841473d951Smrg # linked before any other PIC object. But we must not use 24851473d951Smrg # pic_flag when linking with -static. The problem exists in 24861473d951Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 24871473d951Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 24881473d951Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 24891473d951Smrg *-*-hpux*) 24901473d951Smrg pic_flag_for_symtable=" $pic_flag" ;; 24911473d951Smrg *) 24921473d951Smrg if test "X$my_pic_p" != Xno; then 24931473d951Smrg pic_flag_for_symtable=" $pic_flag" 24941473d951Smrg fi 24951473d951Smrg ;; 24961473d951Smrg esac 24971473d951Smrg ;; 24981473d951Smrg esac 24991473d951Smrg symtab_cflags= 25001473d951Smrg for arg in $LTCFLAGS; do 25011473d951Smrg case $arg in 25021473d951Smrg -pie | -fpie | -fPIE) ;; 25031473d951Smrg *) symtab_cflags="$symtab_cflags $arg" ;; 25041473d951Smrg esac 25051473d951Smrg done 2506ab47cfaaSmrg 25071473d951Smrg # Now compile the dynamic symbol file. 25081473d951Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 2509ab47cfaaSmrg 25101473d951Smrg # Clean up the generated files. 25111473d951Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2512ab47cfaaSmrg 25131473d951Smrg # Transform the symbol file into the correct name. 25141473d951Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 25151473d951Smrg case $host in 25161473d951Smrg *cygwin* | *mingw* | *cegcc* ) 25171473d951Smrg if test -f "$output_objdir/$my_outputname.def"; then 25181473d951Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 25191473d951Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 25201473d951Smrg else 25211473d951Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25221473d951Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25231473d951Smrg fi 25241473d951Smrg ;; 25251473d951Smrg *) 25261473d951Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25271473d951Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25281473d951Smrg ;; 25291473d951Smrg esac 25301473d951Smrg ;; 25311473d951Smrg *) 25321473d951Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 25331473d951Smrg ;; 25341473d951Smrg esac 25351473d951Smrg else 25361473d951Smrg # We keep going just in case the user didn't refer to 25371473d951Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 25381473d951Smrg # really was required. 2539ab47cfaaSmrg 25401473d951Smrg # Nullify the symbol file. 25411473d951Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` 25421473d951Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` 25431473d951Smrg fi 25441473d951Smrg} 2545ab47cfaaSmrg 25461473d951Smrg# func_win32_libid arg 25471473d951Smrg# return the library type of file 'arg' 25481473d951Smrg# 25491473d951Smrg# Need a lot of goo to handle *both* DLLs and import libs 25501473d951Smrg# Has to be a shell function in order to 'eat' the argument 25511473d951Smrg# that is supplied when $file_magic_command is called. 25521473d951Smrgfunc_win32_libid () 25531473d951Smrg{ 25541473d951Smrg $opt_debug 25551473d951Smrg win32_libid_type="unknown" 25561473d951Smrg win32_fileres=`file -L $1 2>/dev/null` 25571473d951Smrg case $win32_fileres in 25581473d951Smrg *ar\ archive\ import\ library*) # definitely import 25591473d951Smrg win32_libid_type="x86 archive import" 25601473d951Smrg ;; 25611473d951Smrg *ar\ archive*) # could be an import, or static 25621473d951Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 25631473d951Smrg $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 25641473d951Smrg win32_nmres=`eval $NM -f posix -A $1 | 25651473d951Smrg $SED -n -e ' 25661473d951Smrg 1,100{ 25671473d951Smrg / I /{ 25681473d951Smrg s,.*,import, 25691473d951Smrg p 25701473d951Smrg q 25711473d951Smrg } 25721473d951Smrg }'` 25731473d951Smrg case $win32_nmres in 25741473d951Smrg import*) win32_libid_type="x86 archive import";; 25751473d951Smrg *) win32_libid_type="x86 archive static";; 25761473d951Smrg esac 25771473d951Smrg fi 25781473d951Smrg ;; 25791473d951Smrg *DLL*) 25801473d951Smrg win32_libid_type="x86 DLL" 25811473d951Smrg ;; 25821473d951Smrg *executable*) # but shell scripts are "executable" too... 25831473d951Smrg case $win32_fileres in 25841473d951Smrg *MS\ Windows\ PE\ Intel*) 25851473d951Smrg win32_libid_type="x86 DLL" 25861473d951Smrg ;; 25871473d951Smrg esac 25881473d951Smrg ;; 25891473d951Smrg esac 25901473d951Smrg $ECHO "$win32_libid_type" 25911473d951Smrg} 2592ab47cfaaSmrg 2593ab47cfaaSmrg 2594ab47cfaaSmrg 25951473d951Smrg# func_extract_an_archive dir oldlib 25961473d951Smrgfunc_extract_an_archive () 25971473d951Smrg{ 25981473d951Smrg $opt_debug 25991473d951Smrg f_ex_an_ar_dir="$1"; shift 26001473d951Smrg f_ex_an_ar_oldlib="$1" 26011473d951Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 26021473d951Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 26031473d951Smrg : 26041473d951Smrg else 26051473d951Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 26061473d951Smrg fi 26071473d951Smrg} 2608ab47cfaaSmrg 2609ab47cfaaSmrg 26101473d951Smrg# func_extract_archives gentop oldlib ... 26111473d951Smrgfunc_extract_archives () 26121473d951Smrg{ 26131473d951Smrg $opt_debug 26141473d951Smrg my_gentop="$1"; shift 26151473d951Smrg my_oldlibs=${1+"$@"} 26161473d951Smrg my_oldobjs="" 26171473d951Smrg my_xlib="" 26181473d951Smrg my_xabs="" 26191473d951Smrg my_xdir="" 2620ab47cfaaSmrg 26211473d951Smrg for my_xlib in $my_oldlibs; do 26221473d951Smrg # Extract the objects. 26231473d951Smrg case $my_xlib in 26241473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 26251473d951Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 26261473d951Smrg esac 26271473d951Smrg func_basename "$my_xlib" 26281473d951Smrg my_xlib="$func_basename_result" 26291473d951Smrg my_xlib_u=$my_xlib 26301473d951Smrg while :; do 26311473d951Smrg case " $extracted_archives " in 26321473d951Smrg *" $my_xlib_u "*) 26331473d951Smrg func_arith $extracted_serial + 1 26341473d951Smrg extracted_serial=$func_arith_result 26351473d951Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 26361473d951Smrg *) break ;; 26371473d951Smrg esac 26381473d951Smrg done 26391473d951Smrg extracted_archives="$extracted_archives $my_xlib_u" 26401473d951Smrg my_xdir="$my_gentop/$my_xlib_u" 2641ab47cfaaSmrg 26421473d951Smrg func_mkdir_p "$my_xdir" 26431473d951Smrg 26441473d951Smrg case $host in 26451473d951Smrg *-darwin*) 26461473d951Smrg func_verbose "Extracting $my_xabs" 26471473d951Smrg # Do not bother doing anything if just a dry run 26481473d951Smrg $opt_dry_run || { 26491473d951Smrg darwin_orig_dir=`pwd` 26501473d951Smrg cd $my_xdir || exit $? 26511473d951Smrg darwin_archive=$my_xabs 26521473d951Smrg darwin_curdir=`pwd` 26531473d951Smrg darwin_base_archive=`basename "$darwin_archive"` 26541473d951Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 26551473d951Smrg if test -n "$darwin_arches"; then 26561473d951Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 26571473d951Smrg darwin_arch= 26581473d951Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 26591473d951Smrg for darwin_arch in $darwin_arches ; do 26601473d951Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 26611473d951Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 26621473d951Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 26631473d951Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 26641473d951Smrg cd "$darwin_curdir" 26651473d951Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 26661473d951Smrg done # $darwin_arches 26671473d951Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 26681473d951Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 26691473d951Smrg darwin_file= 26701473d951Smrg darwin_files= 26711473d951Smrg for darwin_file in $darwin_filelist; do 26721473d951Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 26731473d951Smrg $LIPO -create -output "$darwin_file" $darwin_files 26741473d951Smrg done # $darwin_filelist 26751473d951Smrg $RM -rf unfat-$$ 26761473d951Smrg cd "$darwin_orig_dir" 2677ab47cfaaSmrg else 26781473d951Smrg cd $darwin_orig_dir 26791473d951Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 26801473d951Smrg fi # $darwin_arches 26811473d951Smrg } # !$opt_dry_run 26821473d951Smrg ;; 26831473d951Smrg *) 26841473d951Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 26851473d951Smrg ;; 26861473d951Smrg esac 26871473d951Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 26881473d951Smrg done 2689ab47cfaaSmrg 26901473d951Smrg func_extract_archives_result="$my_oldobjs" 26911473d951Smrg} 2692ab47cfaaSmrg 2693ab47cfaaSmrg 2694ab47cfaaSmrg 26951473d951Smrg# func_emit_wrapper_part1 [arg=no] 26961473d951Smrg# 26971473d951Smrg# Emit the first part of a libtool wrapper script on stdout. 26981473d951Smrg# For more information, see the description associated with 26991473d951Smrg# func_emit_wrapper(), below. 27001473d951Smrgfunc_emit_wrapper_part1 () 27011473d951Smrg{ 27021473d951Smrg func_emit_wrapper_part1_arg1=no 27031473d951Smrg if test -n "$1" ; then 27041473d951Smrg func_emit_wrapper_part1_arg1=$1 2705ab47cfaaSmrg fi 2706ab47cfaaSmrg 27071473d951Smrg $ECHO "\ 27081473d951Smrg#! $SHELL 2709ab47cfaaSmrg 27101473d951Smrg# $output - temporary wrapper script for $objdir/$outputname 27111473d951Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 27121473d951Smrg# 27131473d951Smrg# The $output program cannot be directly executed until all the libtool 27141473d951Smrg# libraries that it depends on are installed. 27151473d951Smrg# 27161473d951Smrg# This wrapper script should never be moved out of the build directory. 27171473d951Smrg# If it is, it will not operate correctly. 2718ab47cfaaSmrg 27191473d951Smrg# Sed substitution that helps us do robust quoting. It backslashifies 27201473d951Smrg# metacharacters that are still active within double-quoted strings. 27211473d951SmrgXsed='${SED} -e 1s/^X//' 27221473d951Smrgsed_quote_subst='$sed_quote_subst' 2723ab47cfaaSmrg 27241473d951Smrg# Be Bourne compatible 27251473d951Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 27261473d951Smrg emulate sh 27271473d951Smrg NULLCMD=: 27281473d951Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 27291473d951Smrg # is contrary to our usage. Disable this feature. 27301473d951Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 27311473d951Smrg setopt NO_GLOB_SUBST 27321473d951Smrgelse 27331473d951Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 27341473d951Smrgfi 27351473d951SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 27361473d951SmrgDUALCASE=1; export DUALCASE # for MKS sh 2737ab47cfaaSmrg 27381473d951Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 27391473d951Smrg# if CDPATH is set. 27401473d951Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 2741ab47cfaaSmrg 27421473d951Smrgrelink_command=\"$relink_command\" 2743ab47cfaaSmrg 27441473d951Smrg# This environment variable determines our operation mode. 27451473d951Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 27461473d951Smrg # install mode needs the following variables: 27471473d951Smrg generated_by_libtool_version='$macro_version' 27481473d951Smrg notinst_deplibs='$notinst_deplibs' 27491473d951Smrgelse 27501473d951Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 27511473d951Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 27521473d951Smrg ECHO=\"$qecho\" 27531473d951Smrg file=\"\$0\" 27541473d951Smrg # Make sure echo works. 27551473d951Smrg if test \"X\$1\" = X--no-reexec; then 27561473d951Smrg # Discard the --no-reexec flag, and continue. 27571473d951Smrg shift 27581473d951Smrg elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then 27591473d951Smrg # Yippee, \$ECHO works! 27601473d951Smrg : 27611473d951Smrg else 27621473d951Smrg # Restart under the correct shell, and then maybe \$ECHO will work. 27631473d951Smrg exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 27641473d951Smrg fi 27651473d951Smrg fi\ 27661473d951Smrg" 27671473d951Smrg $ECHO "\ 2768ab47cfaaSmrg 27691473d951Smrg # Find the directory that this script lives in. 27701473d951Smrg thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 27711473d951Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 2772ab47cfaaSmrg 27731473d951Smrg # Follow symbolic links until we get to the real thisdir. 27741473d951Smrg file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 27751473d951Smrg while test -n \"\$file\"; do 27761473d951Smrg destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 27771473d951Smrg 27781473d951Smrg # If there was a directory component, then change thisdir. 27791473d951Smrg if test \"x\$destdir\" != \"x\$file\"; then 27801473d951Smrg case \"\$destdir\" in 27811473d951Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 27821473d951Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 2783ab47cfaaSmrg esac 27841473d951Smrg fi 2785ab47cfaaSmrg 27861473d951Smrg file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 27871473d951Smrg file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 27881473d951Smrg done 27891473d951Smrg" 27901473d951Smrg} 27911473d951Smrg# end: func_emit_wrapper_part1 27921473d951Smrg 27931473d951Smrg# func_emit_wrapper_part2 [arg=no] 27941473d951Smrg# 27951473d951Smrg# Emit the second part of a libtool wrapper script on stdout. 27961473d951Smrg# For more information, see the description associated with 27971473d951Smrg# func_emit_wrapper(), below. 27981473d951Smrgfunc_emit_wrapper_part2 () 27991473d951Smrg{ 28001473d951Smrg func_emit_wrapper_part2_arg1=no 28011473d951Smrg if test -n "$1" ; then 28021473d951Smrg func_emit_wrapper_part2_arg1=$1 2803ab47cfaaSmrg fi 2804ab47cfaaSmrg 28051473d951Smrg $ECHO "\ 2806ab47cfaaSmrg 28071473d951Smrg # Usually 'no', except on cygwin/mingw when embedded into 28081473d951Smrg # the cwrapper. 28091473d951Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 28101473d951Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 28111473d951Smrg # special case for '.' 28121473d951Smrg if test \"\$thisdir\" = \".\"; then 28131473d951Smrg thisdir=\`pwd\` 28141473d951Smrg fi 28151473d951Smrg # remove .libs from thisdir 28161473d951Smrg case \"\$thisdir\" in 28171473d951Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; 28181473d951Smrg $objdir ) thisdir=. ;; 28191473d951Smrg esac 28201473d951Smrg fi 28211473d951Smrg 28221473d951Smrg # Try to get the absolute directory name. 28231473d951Smrg absdir=\`cd \"\$thisdir\" && pwd\` 28241473d951Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 28251473d951Smrg" 28261473d951Smrg 28271473d951Smrg if test "$fast_install" = yes; then 28281473d951Smrg $ECHO "\ 28291473d951Smrg program=lt-'$outputname'$exeext 28301473d951Smrg progdir=\"\$thisdir/$objdir\" 28311473d951Smrg 28321473d951Smrg if test ! -f \"\$progdir/\$program\" || 28331473d951Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 28341473d951Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 28351473d951Smrg 28361473d951Smrg file=\"\$\$-\$program\" 28371473d951Smrg 28381473d951Smrg if test ! -d \"\$progdir\"; then 28391473d951Smrg $MKDIR \"\$progdir\" 28401473d951Smrg else 28411473d951Smrg $RM \"\$progdir/\$file\" 28421473d951Smrg fi" 28431473d951Smrg 28441473d951Smrg $ECHO "\ 28451473d951Smrg 28461473d951Smrg # relink executable if necessary 28471473d951Smrg if test -n \"\$relink_command\"; then 28481473d951Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 28491473d951Smrg else 28501473d951Smrg $ECHO \"\$relink_command_output\" >&2 28511473d951Smrg $RM \"\$progdir/\$file\" 28521473d951Smrg exit 1 2853ab47cfaaSmrg fi 28541473d951Smrg fi 2855ab47cfaaSmrg 28561473d951Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 28571473d951Smrg { $RM \"\$progdir/\$program\"; 28581473d951Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 28591473d951Smrg $RM \"\$progdir/\$file\" 28601473d951Smrg fi" 28611473d951Smrg else 28621473d951Smrg $ECHO "\ 28631473d951Smrg program='$outputname' 28641473d951Smrg progdir=\"\$thisdir/$objdir\" 28651473d951Smrg" 2866ab47cfaaSmrg fi 2867ab47cfaaSmrg 28681473d951Smrg $ECHO "\ 28691473d951Smrg 28701473d951Smrg if test -f \"\$progdir/\$program\"; then" 28711473d951Smrg 28721473d951Smrg # Export our shlibpath_var if we have one. 28731473d951Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 28741473d951Smrg $ECHO "\ 28751473d951Smrg # Add our own library path to $shlibpath_var 28761473d951Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 28771473d951Smrg 28781473d951Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 28791473d951Smrg # The second colon is a workaround for a bug in BeOS R4 sed 28801473d951Smrg $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 28811473d951Smrg 28821473d951Smrg export $shlibpath_var 28831473d951Smrg" 2884ab47cfaaSmrg fi 2885ab47cfaaSmrg 28861473d951Smrg # fixup the dll searchpath if we need to. 28871473d951Smrg if test -n "$dllsearchpath"; then 28881473d951Smrg $ECHO "\ 28891473d951Smrg # Add the dll search path components to the executable PATH 28901473d951Smrg PATH=$dllsearchpath:\$PATH 28911473d951Smrg" 2892ab47cfaaSmrg fi 2893ab47cfaaSmrg 28941473d951Smrg $ECHO "\ 28951473d951Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 28961473d951Smrg # Run the actual program with our arguments. 28971473d951Smrg" 28981473d951Smrg case $host in 28991473d951Smrg # Backslashes separate directories on plain windows 29001473d951Smrg *-*-mingw | *-*-os2* | *-cegcc*) 29011473d951Smrg $ECHO "\ 29021473d951Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 29031473d951Smrg" 29041473d951Smrg ;; 29051473d951Smrg 29061473d951Smrg *) 29071473d951Smrg $ECHO "\ 29081473d951Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 29091473d951Smrg" 29101473d951Smrg ;; 29111473d951Smrg esac 29121473d951Smrg $ECHO "\ 29131473d951Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 29141473d951Smrg exit 1 29151473d951Smrg fi 29161473d951Smrg else 29171473d951Smrg # The program doesn't exist. 29181473d951Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 29191473d951Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 29201473d951Smrg $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 29211473d951Smrg exit 1 29221473d951Smrg fi 29231473d951Smrgfi\ 29241473d951Smrg" 29251473d951Smrg} 29261473d951Smrg# end: func_emit_wrapper_part2 29271473d951Smrg 2928ab47cfaaSmrg 29291473d951Smrg# func_emit_wrapper [arg=no] 29301473d951Smrg# 29311473d951Smrg# Emit a libtool wrapper script on stdout. 29321473d951Smrg# Don't directly open a file because we may want to 29331473d951Smrg# incorporate the script contents within a cygwin/mingw 29341473d951Smrg# wrapper executable. Must ONLY be called from within 29351473d951Smrg# func_mode_link because it depends on a number of variables 29361473d951Smrg# set therein. 29371473d951Smrg# 29381473d951Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 29391473d951Smrg# variable will take. If 'yes', then the emitted script 29401473d951Smrg# will assume that the directory in which it is stored is 29411473d951Smrg# the $objdir directory. This is a cygwin/mingw-specific 29421473d951Smrg# behavior. 29431473d951Smrgfunc_emit_wrapper () 29441473d951Smrg{ 29451473d951Smrg func_emit_wrapper_arg1=no 29461473d951Smrg if test -n "$1" ; then 29471473d951Smrg func_emit_wrapper_arg1=$1 2948ab47cfaaSmrg fi 2949ab47cfaaSmrg 29501473d951Smrg # split this up so that func_emit_cwrapperexe_src 29511473d951Smrg # can call each part independently. 29521473d951Smrg func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" 29531473d951Smrg func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" 29541473d951Smrg} 2955ab47cfaaSmrg 2956ab47cfaaSmrg 29571473d951Smrg# func_to_host_path arg 29581473d951Smrg# 29591473d951Smrg# Convert paths to host format when used with build tools. 29601473d951Smrg# Intended for use with "native" mingw (where libtool itself 29611473d951Smrg# is running under the msys shell), or in the following cross- 29621473d951Smrg# build environments: 29631473d951Smrg# $build $host 29641473d951Smrg# mingw (msys) mingw [e.g. native] 29651473d951Smrg# cygwin mingw 29661473d951Smrg# *nix + wine mingw 29671473d951Smrg# where wine is equipped with the `winepath' executable. 29681473d951Smrg# In the native mingw case, the (msys) shell automatically 29691473d951Smrg# converts paths for any non-msys applications it launches, 29701473d951Smrg# but that facility isn't available from inside the cwrapper. 29711473d951Smrg# Similar accommodations are necessary for $host mingw and 29721473d951Smrg# $build cygwin. Calling this function does no harm for other 29731473d951Smrg# $host/$build combinations not listed above. 29741473d951Smrg# 29751473d951Smrg# ARG is the path (on $build) that should be converted to 29761473d951Smrg# the proper representation for $host. The result is stored 29771473d951Smrg# in $func_to_host_path_result. 29781473d951Smrgfunc_to_host_path () 29791473d951Smrg{ 29801473d951Smrg func_to_host_path_result="$1" 29811473d951Smrg if test -n "$1" ; then 29821473d951Smrg case $host in 29831473d951Smrg *mingw* ) 29841473d951Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 29851473d951Smrg case $build in 29861473d951Smrg *mingw* ) # actually, msys 29871473d951Smrg # awkward: cmd appends spaces to result 29881473d951Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 29891473d951Smrg func_to_host_path_tmp1=`( cmd //c echo "$1" |\ 29901473d951Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 29911473d951Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 29921473d951Smrg $SED -e "$lt_sed_naive_backslashify"` 29931473d951Smrg ;; 29941473d951Smrg *cygwin* ) 29951473d951Smrg func_to_host_path_tmp1=`cygpath -w "$1"` 29961473d951Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 29971473d951Smrg $SED -e "$lt_sed_naive_backslashify"` 29981473d951Smrg ;; 29991473d951Smrg * ) 30001473d951Smrg # Unfortunately, winepath does not exit with a non-zero 30011473d951Smrg # error code, so we are forced to check the contents of 30021473d951Smrg # stdout. On the other hand, if the command is not 30031473d951Smrg # found, the shell will set an exit code of 127 and print 30041473d951Smrg # *an error message* to stdout. So we must check for both 30051473d951Smrg # error code of zero AND non-empty stdout, which explains 30061473d951Smrg # the odd construction: 30071473d951Smrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 30081473d951Smrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 30091473d951Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 30101473d951Smrg $SED -e "$lt_sed_naive_backslashify"` 30111473d951Smrg else 30121473d951Smrg # Allow warning below. 30131473d951Smrg func_to_host_path_result="" 30141473d951Smrg fi 30151473d951Smrg ;; 30161473d951Smrg esac 30171473d951Smrg if test -z "$func_to_host_path_result" ; then 30181473d951Smrg func_error "Could not determine host path corresponding to" 30191473d951Smrg func_error " '$1'" 30201473d951Smrg func_error "Continuing, but uninstalled executables may not work." 30211473d951Smrg # Fallback: 30221473d951Smrg func_to_host_path_result="$1" 30231473d951Smrg fi 30241473d951Smrg ;; 30251473d951Smrg esac 30261473d951Smrg fi 30271473d951Smrg} 30281473d951Smrg# end: func_to_host_path 3029ab47cfaaSmrg 30301473d951Smrg# func_to_host_pathlist arg 30311473d951Smrg# 30321473d951Smrg# Convert pathlists to host format when used with build tools. 30331473d951Smrg# See func_to_host_path(), above. This function supports the 30341473d951Smrg# following $build/$host combinations (but does no harm for 30351473d951Smrg# combinations not listed here): 30361473d951Smrg# $build $host 30371473d951Smrg# mingw (msys) mingw [e.g. native] 30381473d951Smrg# cygwin mingw 30391473d951Smrg# *nix + wine mingw 30401473d951Smrg# 30411473d951Smrg# Path separators are also converted from $build format to 30421473d951Smrg# $host format. If ARG begins or ends with a path separator 30431473d951Smrg# character, it is preserved (but converted to $host format) 30441473d951Smrg# on output. 30451473d951Smrg# 30461473d951Smrg# ARG is a pathlist (on $build) that should be converted to 30471473d951Smrg# the proper representation on $host. The result is stored 30481473d951Smrg# in $func_to_host_pathlist_result. 30491473d951Smrgfunc_to_host_pathlist () 30501473d951Smrg{ 30511473d951Smrg func_to_host_pathlist_result="$1" 30521473d951Smrg if test -n "$1" ; then 30531473d951Smrg case $host in 30541473d951Smrg *mingw* ) 30551473d951Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 30561473d951Smrg # Remove leading and trailing path separator characters from 30571473d951Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 30581473d951Smrg # into '.;' and ';.', and winepath ignores them completely. 30591473d951Smrg func_to_host_pathlist_tmp2="$1" 30601473d951Smrg # Once set for this call, this variable should not be 30611473d951Smrg # reassigned. It is used in tha fallback case. 30621473d951Smrg func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ 30631473d951Smrg $SED -e 's|^:*||' -e 's|:*$||'` 30641473d951Smrg case $build in 30651473d951Smrg *mingw* ) # Actually, msys. 30661473d951Smrg # Awkward: cmd appends spaces to result. 30671473d951Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 30681473d951Smrg func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ 30691473d951Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 30701473d951Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 30711473d951Smrg $SED -e "$lt_sed_naive_backslashify"` 30721473d951Smrg ;; 30731473d951Smrg *cygwin* ) 30741473d951Smrg func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` 30751473d951Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 30761473d951Smrg $SED -e "$lt_sed_naive_backslashify"` 30771473d951Smrg ;; 30781473d951Smrg * ) 30791473d951Smrg # unfortunately, winepath doesn't convert pathlists 30801473d951Smrg func_to_host_pathlist_result="" 30811473d951Smrg func_to_host_pathlist_oldIFS=$IFS 30821473d951Smrg IFS=: 30831473d951Smrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 30841473d951Smrg IFS=$func_to_host_pathlist_oldIFS 30851473d951Smrg if test -n "$func_to_host_pathlist_f" ; then 30861473d951Smrg func_to_host_path "$func_to_host_pathlist_f" 30871473d951Smrg if test -n "$func_to_host_path_result" ; then 30881473d951Smrg if test -z "$func_to_host_pathlist_result" ; then 30891473d951Smrg func_to_host_pathlist_result="$func_to_host_path_result" 30901473d951Smrg else 30911473d951Smrg func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" 30921473d951Smrg fi 30931473d951Smrg fi 30941473d951Smrg fi 30951473d951Smrg IFS=: 30961473d951Smrg done 30971473d951Smrg IFS=$func_to_host_pathlist_oldIFS 30981473d951Smrg ;; 30991473d951Smrg esac 31001473d951Smrg if test -z "$func_to_host_pathlist_result" ; then 31011473d951Smrg func_error "Could not determine the host path(s) corresponding to" 31021473d951Smrg func_error " '$1'" 31031473d951Smrg func_error "Continuing, but uninstalled executables may not work." 31041473d951Smrg # Fallback. This may break if $1 contains DOS-style drive 31051473d951Smrg # specifications. The fix is not to complicate the expression 31061473d951Smrg # below, but for the user to provide a working wine installation 31071473d951Smrg # with winepath so that path translation in the cross-to-mingw 31081473d951Smrg # case works properly. 31091473d951Smrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 31101473d951Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 31111473d951Smrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 31121473d951Smrg fi 31131473d951Smrg # Now, add the leading and trailing path separators back 31141473d951Smrg case "$1" in 31151473d951Smrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 31161473d951Smrg ;; 31171473d951Smrg esac 31181473d951Smrg case "$1" in 31191473d951Smrg *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" 31201473d951Smrg ;; 31211473d951Smrg esac 31221473d951Smrg ;; 31231473d951Smrg esac 31241473d951Smrg fi 31251473d951Smrg} 31261473d951Smrg# end: func_to_host_pathlist 3127ab47cfaaSmrg 31281473d951Smrg# func_emit_cwrapperexe_src 31291473d951Smrg# emit the source code for a wrapper executable on stdout 31301473d951Smrg# Must ONLY be called from within func_mode_link because 31311473d951Smrg# it depends on a number of variable set therein. 31321473d951Smrgfunc_emit_cwrapperexe_src () 31331473d951Smrg{ 31341473d951Smrg cat <<EOF 3135ab47cfaaSmrg 31361473d951Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 31371473d951Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3138ab47cfaaSmrg 31391473d951Smrg The $output program cannot be directly executed until all the libtool 31401473d951Smrg libraries that it depends on are installed. 3141ab47cfaaSmrg 31421473d951Smrg This wrapper executable should never be moved out of the build directory. 31431473d951Smrg If it is, it will not operate correctly. 3144ab47cfaaSmrg 31451473d951Smrg Currently, it simply execs the wrapper *script* "$SHELL $output", 31461473d951Smrg but could eventually absorb all of the scripts functionality and 31471473d951Smrg exec $objdir/$outputname directly. 31481473d951Smrg*/ 31491473d951SmrgEOF 31501473d951Smrg cat <<"EOF" 31511473d951Smrg#include <stdio.h> 31521473d951Smrg#include <stdlib.h> 31531473d951Smrg#ifdef _MSC_VER 31541473d951Smrg# include <direct.h> 31551473d951Smrg# include <process.h> 31561473d951Smrg# include <io.h> 31571473d951Smrg# define setmode _setmode 31581473d951Smrg#else 31591473d951Smrg# include <unistd.h> 31601473d951Smrg# include <stdint.h> 31611473d951Smrg# ifdef __CYGWIN__ 31621473d951Smrg# include <io.h> 31631473d951Smrg# define HAVE_SETENV 31641473d951Smrg# ifdef __STRICT_ANSI__ 31651473d951Smrgchar *realpath (const char *, char *); 31661473d951Smrgint putenv (char *); 31671473d951Smrgint setenv (const char *, const char *, int); 31681473d951Smrg# endif 31691473d951Smrg# endif 31701473d951Smrg#endif 31711473d951Smrg#include <malloc.h> 31721473d951Smrg#include <stdarg.h> 31731473d951Smrg#include <assert.h> 31741473d951Smrg#include <string.h> 31751473d951Smrg#include <ctype.h> 31761473d951Smrg#include <errno.h> 31771473d951Smrg#include <fcntl.h> 31781473d951Smrg#include <sys/stat.h> 3179ab47cfaaSmrg 31801473d951Smrg#if defined(PATH_MAX) 31811473d951Smrg# define LT_PATHMAX PATH_MAX 31821473d951Smrg#elif defined(MAXPATHLEN) 31831473d951Smrg# define LT_PATHMAX MAXPATHLEN 31841473d951Smrg#else 31851473d951Smrg# define LT_PATHMAX 1024 31861473d951Smrg#endif 3187ab47cfaaSmrg 31881473d951Smrg#ifndef S_IXOTH 31891473d951Smrg# define S_IXOTH 0 31901473d951Smrg#endif 31911473d951Smrg#ifndef S_IXGRP 31921473d951Smrg# define S_IXGRP 0 31931473d951Smrg#endif 3194ab47cfaaSmrg 31951473d951Smrg#ifdef _MSC_VER 31961473d951Smrg# define S_IXUSR _S_IEXEC 31971473d951Smrg# define stat _stat 31981473d951Smrg# ifndef _INTPTR_T_DEFINED 31991473d951Smrg# define intptr_t int 32001473d951Smrg# endif 32011473d951Smrg#endif 3202ab47cfaaSmrg 32031473d951Smrg#ifndef DIR_SEPARATOR 32041473d951Smrg# define DIR_SEPARATOR '/' 32051473d951Smrg# define PATH_SEPARATOR ':' 32061473d951Smrg#endif 3207ab47cfaaSmrg 32081473d951Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 32091473d951Smrg defined (__OS2__) 32101473d951Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 32111473d951Smrg# define FOPEN_WB "wb" 32121473d951Smrg# ifndef DIR_SEPARATOR_2 32131473d951Smrg# define DIR_SEPARATOR_2 '\\' 32141473d951Smrg# endif 32151473d951Smrg# ifndef PATH_SEPARATOR_2 32161473d951Smrg# define PATH_SEPARATOR_2 ';' 32171473d951Smrg# endif 32181473d951Smrg#endif 3219ab47cfaaSmrg 32201473d951Smrg#ifndef DIR_SEPARATOR_2 32211473d951Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 32221473d951Smrg#else /* DIR_SEPARATOR_2 */ 32231473d951Smrg# define IS_DIR_SEPARATOR(ch) \ 32241473d951Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 32251473d951Smrg#endif /* DIR_SEPARATOR_2 */ 3226ab47cfaaSmrg 32271473d951Smrg#ifndef PATH_SEPARATOR_2 32281473d951Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 32291473d951Smrg#else /* PATH_SEPARATOR_2 */ 32301473d951Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 32311473d951Smrg#endif /* PATH_SEPARATOR_2 */ 3232ab47cfaaSmrg 32331473d951Smrg#ifdef __CYGWIN__ 32341473d951Smrg# define FOPEN_WB "wb" 32351473d951Smrg#endif 3236ab47cfaaSmrg 32371473d951Smrg#ifndef FOPEN_WB 32381473d951Smrg# define FOPEN_WB "w" 32391473d951Smrg#endif 32401473d951Smrg#ifndef _O_BINARY 32411473d951Smrg# define _O_BINARY 0 32421473d951Smrg#endif 3243ab47cfaaSmrg 32441473d951Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 32451473d951Smrg#define XFREE(stale) do { \ 32461473d951Smrg if (stale) { free ((void *) stale); stale = 0; } \ 32471473d951Smrg} while (0) 3248ab47cfaaSmrg 32491473d951Smrg#undef LTWRAPPER_DEBUGPRINTF 32501473d951Smrg#if defined DEBUGWRAPPER 32511473d951Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args 32521473d951Smrgstatic void 32531473d951Smrgltwrapper_debugprintf (const char *fmt, ...) 32541473d951Smrg{ 32551473d951Smrg va_list args; 32561473d951Smrg va_start (args, fmt); 32571473d951Smrg (void) vfprintf (stderr, fmt, args); 32581473d951Smrg va_end (args); 32591473d951Smrg} 32601473d951Smrg#else 32611473d951Smrg# define LTWRAPPER_DEBUGPRINTF(args) 32621473d951Smrg#endif 3263ab47cfaaSmrg 32641473d951Smrgconst char *program_name = NULL; 3265ab47cfaaSmrg 32661473d951Smrgvoid *xmalloc (size_t num); 32671473d951Smrgchar *xstrdup (const char *string); 32681473d951Smrgconst char *base_name (const char *name); 32691473d951Smrgchar *find_executable (const char *wrapper); 32701473d951Smrgchar *chase_symlinks (const char *pathspec); 32711473d951Smrgint make_executable (const char *path); 32721473d951Smrgint check_executable (const char *path); 32731473d951Smrgchar *strendzap (char *str, const char *pat); 32741473d951Smrgvoid lt_fatal (const char *message, ...); 32751473d951Smrgvoid lt_setenv (const char *name, const char *value); 32761473d951Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 32771473d951Smrgvoid lt_opt_process_env_set (const char *arg); 32781473d951Smrgvoid lt_opt_process_env_prepend (const char *arg); 32791473d951Smrgvoid lt_opt_process_env_append (const char *arg); 32801473d951Smrgint lt_split_name_value (const char *arg, char** name, char** value); 32811473d951Smrgvoid lt_update_exe_path (const char *name, const char *value); 32821473d951Smrgvoid lt_update_lib_path (const char *name, const char *value); 32831473d951Smrg 32841473d951Smrgstatic const char *script_text_part1 = 32851473d951SmrgEOF 3286ab47cfaaSmrg 32871473d951Smrg func_emit_wrapper_part1 yes | 32881473d951Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 32891473d951Smrg -e 's/^/ "/' -e 's/$/\\n"/' 32901473d951Smrg echo ";" 32911473d951Smrg cat <<EOF 3292ab47cfaaSmrg 32931473d951Smrgstatic const char *script_text_part2 = 32941473d951SmrgEOF 32951473d951Smrg func_emit_wrapper_part2 yes | 32961473d951Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 32971473d951Smrg -e 's/^/ "/' -e 's/$/\\n"/' 32981473d951Smrg echo ";" 32991473d951Smrg 33001473d951Smrg cat <<EOF 33011473d951Smrgconst char * MAGIC_EXE = "$magic_exe"; 33021473d951Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 33031473d951SmrgEOF 3304ab47cfaaSmrg 33051473d951Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 33061473d951Smrg func_to_host_pathlist "$temp_rpath" 33071473d951Smrg cat <<EOF 33081473d951Smrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 33091473d951SmrgEOF 33101473d951Smrg else 33111473d951Smrg cat <<"EOF" 33121473d951Smrgconst char * LIB_PATH_VALUE = ""; 33131473d951SmrgEOF 33141473d951Smrg fi 3315ab47cfaaSmrg 33161473d951Smrg if test -n "$dllsearchpath"; then 33171473d951Smrg func_to_host_pathlist "$dllsearchpath:" 33181473d951Smrg cat <<EOF 33191473d951Smrgconst char * EXE_PATH_VARNAME = "PATH"; 33201473d951Smrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 33211473d951SmrgEOF 33221473d951Smrg else 33231473d951Smrg cat <<"EOF" 33241473d951Smrgconst char * EXE_PATH_VARNAME = ""; 33251473d951Smrgconst char * EXE_PATH_VALUE = ""; 33261473d951SmrgEOF 33271473d951Smrg fi 3328ab47cfaaSmrg 33291473d951Smrg if test "$fast_install" = yes; then 33301473d951Smrg cat <<EOF 33311473d951Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 33321473d951SmrgEOF 33331473d951Smrg else 33341473d951Smrg cat <<EOF 33351473d951Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 33361473d951SmrgEOF 33371473d951Smrg fi 3338ab47cfaaSmrg 3339ab47cfaaSmrg 33401473d951Smrg cat <<"EOF" 3341ab47cfaaSmrg 33421473d951Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 33431473d951Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH 5 3344ab47cfaaSmrg 33451473d951Smrgstatic const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH; 33461473d951Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 33471473d951Smrg 33481473d951Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 33491473d951Smrg 33501473d951Smrgstatic const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7; 33511473d951Smrgstatic const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set"; 33521473d951Smrg /* argument is putenv-style "foo=bar", value of foo is set to bar */ 33531473d951Smrg 33541473d951Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11; 33551473d951Smrgstatic const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend"; 33561473d951Smrg /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */ 33571473d951Smrg 33581473d951Smrgstatic const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10; 33591473d951Smrgstatic const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append"; 33601473d951Smrg /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */ 33611473d951Smrg 33621473d951Smrgint 33631473d951Smrgmain (int argc, char *argv[]) 33641473d951Smrg{ 33651473d951Smrg char **newargz; 33661473d951Smrg int newargc; 33671473d951Smrg char *tmp_pathspec; 33681473d951Smrg char *actual_cwrapper_path; 33691473d951Smrg char *actual_cwrapper_name; 33701473d951Smrg char *target_name; 33711473d951Smrg char *lt_argv_zero; 33721473d951Smrg intptr_t rval = 127; 33731473d951Smrg 33741473d951Smrg int i; 33751473d951Smrg 33761473d951Smrg program_name = (char *) xstrdup (base_name (argv[0])); 33771473d951Smrg LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0])); 33781473d951Smrg LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name)); 33791473d951Smrg 33801473d951Smrg /* very simple arg parsing; don't want to rely on getopt */ 33811473d951Smrg for (i = 1; i < argc; i++) 33821473d951Smrg { 33831473d951Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 33841473d951Smrg { 33851473d951SmrgEOF 33861473d951Smrg case "$host" in 33871473d951Smrg *mingw* | *cygwin* ) 33881473d951Smrg # make stdout use "unix" line endings 33891473d951Smrg echo " setmode(1,_O_BINARY);" 33901473d951Smrg ;; 33911473d951Smrg esac 33921473d951Smrg 33931473d951Smrg cat <<"EOF" 33941473d951Smrg printf ("%s", script_text_part1); 33951473d951Smrg printf ("%s", script_text_part2); 33961473d951Smrg return 0; 33971473d951Smrg } 33981473d951Smrg } 33991473d951Smrg 34001473d951Smrg newargz = XMALLOC (char *, argc + 1); 34011473d951Smrg tmp_pathspec = find_executable (argv[0]); 34021473d951Smrg if (tmp_pathspec == NULL) 34031473d951Smrg lt_fatal ("Couldn't find %s", argv[0]); 34041473d951Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", 34051473d951Smrg tmp_pathspec)); 34061473d951Smrg 34071473d951Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 34081473d951Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", 34091473d951Smrg actual_cwrapper_path)); 34101473d951Smrg XFREE (tmp_pathspec); 34111473d951Smrg 34121473d951Smrg actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); 34131473d951Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 34141473d951Smrg 34151473d951Smrg /* wrapper name transforms */ 34161473d951Smrg strendzap (actual_cwrapper_name, ".exe"); 34171473d951Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 34181473d951Smrg XFREE (actual_cwrapper_name); 34191473d951Smrg actual_cwrapper_name = tmp_pathspec; 34201473d951Smrg tmp_pathspec = 0; 34211473d951Smrg 34221473d951Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 34231473d951Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 34241473d951Smrg strendzap (target_name, ".exe"); 34251473d951Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 34261473d951Smrg XFREE (target_name); 34271473d951Smrg target_name = tmp_pathspec; 34281473d951Smrg tmp_pathspec = 0; 34291473d951Smrg 34301473d951Smrg LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", 34311473d951Smrg target_name)); 34321473d951SmrgEOF 34331473d951Smrg 34341473d951Smrg cat <<EOF 34351473d951Smrg newargz[0] = 34361473d951Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 34371473d951Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 34381473d951Smrg strcpy (newargz[0], actual_cwrapper_path); 34391473d951Smrg strcat (newargz[0], "$objdir"); 34401473d951Smrg strcat (newargz[0], "/"); 34411473d951SmrgEOF 34421473d951Smrg 34431473d951Smrg cat <<"EOF" 34441473d951Smrg /* stop here, and copy so we don't have to do this twice */ 34451473d951Smrg tmp_pathspec = xstrdup (newargz[0]); 34461473d951Smrg 34471473d951Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 34481473d951Smrg strcat (newargz[0], actual_cwrapper_name); 34491473d951Smrg 34501473d951Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 34511473d951Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 34521473d951Smrg XFREE (tmp_pathspec); 34531473d951Smrg tmp_pathspec = NULL; 34541473d951SmrgEOF 34551473d951Smrg 34561473d951Smrg case $host_os in 34571473d951Smrg mingw*) 34581473d951Smrg cat <<"EOF" 34591473d951Smrg { 34601473d951Smrg char* p; 34611473d951Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 34621473d951Smrg { 34631473d951Smrg *p = '/'; 34641473d951Smrg } 34651473d951Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 34661473d951Smrg { 34671473d951Smrg *p = '/'; 34681473d951Smrg } 34691473d951Smrg } 34701473d951SmrgEOF 3471ab47cfaaSmrg ;; 34721473d951Smrg esac 34731473d951Smrg 34741473d951Smrg cat <<"EOF" 34751473d951Smrg XFREE (target_name); 34761473d951Smrg XFREE (actual_cwrapper_path); 34771473d951Smrg XFREE (actual_cwrapper_name); 34781473d951Smrg 34791473d951Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 34801473d951Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 34811473d951Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 34821473d951Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 34831473d951Smrg 34841473d951Smrg newargc=0; 34851473d951Smrg for (i = 1; i < argc; i++) 34861473d951Smrg { 34871473d951Smrg if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) 34881473d951Smrg { 34891473d951Smrg if (argv[i][env_set_opt_len] == '=') 34901473d951Smrg { 34911473d951Smrg const char *p = argv[i] + env_set_opt_len + 1; 34921473d951Smrg lt_opt_process_env_set (p); 34931473d951Smrg } 34941473d951Smrg else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) 34951473d951Smrg { 34961473d951Smrg lt_opt_process_env_set (argv[++i]); /* don't copy */ 34971473d951Smrg } 34981473d951Smrg else 34991473d951Smrg lt_fatal ("%s missing required argument", env_set_opt); 35001473d951Smrg continue; 35011473d951Smrg } 35021473d951Smrg if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) 35031473d951Smrg { 35041473d951Smrg if (argv[i][env_prepend_opt_len] == '=') 35051473d951Smrg { 35061473d951Smrg const char *p = argv[i] + env_prepend_opt_len + 1; 35071473d951Smrg lt_opt_process_env_prepend (p); 35081473d951Smrg } 35091473d951Smrg else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) 35101473d951Smrg { 35111473d951Smrg lt_opt_process_env_prepend (argv[++i]); /* don't copy */ 35121473d951Smrg } 35131473d951Smrg else 35141473d951Smrg lt_fatal ("%s missing required argument", env_prepend_opt); 35151473d951Smrg continue; 35161473d951Smrg } 35171473d951Smrg if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) 35181473d951Smrg { 35191473d951Smrg if (argv[i][env_append_opt_len] == '=') 35201473d951Smrg { 35211473d951Smrg const char *p = argv[i] + env_append_opt_len + 1; 35221473d951Smrg lt_opt_process_env_append (p); 35231473d951Smrg } 35241473d951Smrg else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) 35251473d951Smrg { 35261473d951Smrg lt_opt_process_env_append (argv[++i]); /* don't copy */ 35271473d951Smrg } 35281473d951Smrg else 35291473d951Smrg lt_fatal ("%s missing required argument", env_append_opt); 35301473d951Smrg continue; 35311473d951Smrg } 35321473d951Smrg if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) 35331473d951Smrg { 35341473d951Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 35351473d951Smrg namespace, but it is not one of the ones we know about and 35361473d951Smrg have already dealt with, above (inluding dump-script), then 35371473d951Smrg report an error. Otherwise, targets might begin to believe 35381473d951Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 35391473d951Smrg namespace. The first time any user complains about this, we'll 35401473d951Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 35411473d951Smrg or a configure.ac-settable value. 35421473d951Smrg */ 35431473d951Smrg lt_fatal ("Unrecognized option in %s namespace: '%s'", 35441473d951Smrg ltwrapper_option_prefix, argv[i]); 35451473d951Smrg } 35461473d951Smrg /* otherwise ... */ 35471473d951Smrg newargz[++newargc] = xstrdup (argv[i]); 35481473d951Smrg } 35491473d951Smrg newargz[++newargc] = NULL; 35501473d951Smrg 35511473d951Smrg LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>"))); 35521473d951Smrg for (i = 0; i < newargc; i++) 35531473d951Smrg { 35541473d951Smrg LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>"))); 35551473d951Smrg } 3556ab47cfaaSmrg 3557ab47cfaaSmrgEOF 3558ab47cfaaSmrg 35591473d951Smrg case $host_os in 35601473d951Smrg mingw*) 35611473d951Smrg cat <<"EOF" 35621473d951Smrg /* execv doesn't actually work on mingw as expected on unix */ 35631473d951Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 35641473d951Smrg if (rval == -1) 35651473d951Smrg { 35661473d951Smrg /* failed to start process */ 35671473d951Smrg LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); 35681473d951Smrg return 127; 35691473d951Smrg } 35701473d951Smrg return rval; 35711473d951SmrgEOF 35721473d951Smrg ;; 35731473d951Smrg *) 35741473d951Smrg cat <<"EOF" 35751473d951Smrg execv (lt_argv_zero, newargz); 35761473d951Smrg return rval; /* =127, but avoids unused variable warning */ 35771473d951SmrgEOF 35781473d951Smrg ;; 35791473d951Smrg esac 3580ab47cfaaSmrg 35811473d951Smrg cat <<"EOF" 35821473d951Smrg} 3583ab47cfaaSmrg 35841473d951Smrgvoid * 35851473d951Smrgxmalloc (size_t num) 35861473d951Smrg{ 35871473d951Smrg void *p = (void *) malloc (num); 35881473d951Smrg if (!p) 35891473d951Smrg lt_fatal ("Memory exhausted"); 3590ab47cfaaSmrg 35911473d951Smrg return p; 35921473d951Smrg} 3593ab47cfaaSmrg 35941473d951Smrgchar * 35951473d951Smrgxstrdup (const char *string) 35961473d951Smrg{ 35971473d951Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 35981473d951Smrg string) : NULL; 35991473d951Smrg} 3600ab47cfaaSmrg 36011473d951Smrgconst char * 36021473d951Smrgbase_name (const char *name) 36031473d951Smrg{ 36041473d951Smrg const char *base; 3605ab47cfaaSmrg 36061473d951Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 36071473d951Smrg /* Skip over the disk name in MSDOS pathnames. */ 36081473d951Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 36091473d951Smrg name += 2; 36101473d951Smrg#endif 3611ab47cfaaSmrg 36121473d951Smrg for (base = name; *name; name++) 36131473d951Smrg if (IS_DIR_SEPARATOR (*name)) 36141473d951Smrg base = name + 1; 36151473d951Smrg return base; 36161473d951Smrg} 3617ab47cfaaSmrg 36181473d951Smrgint 36191473d951Smrgcheck_executable (const char *path) 36201473d951Smrg{ 36211473d951Smrg struct stat st; 3622ab47cfaaSmrg 36231473d951Smrg LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", 36241473d951Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 36251473d951Smrg if ((!path) || (!*path)) 36261473d951Smrg return 0; 3627ab47cfaaSmrg 36281473d951Smrg if ((stat (path, &st) >= 0) 36291473d951Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 36301473d951Smrg return 1; 36311473d951Smrg else 36321473d951Smrg return 0; 36331473d951Smrg} 3634ab47cfaaSmrg 36351473d951Smrgint 36361473d951Smrgmake_executable (const char *path) 36371473d951Smrg{ 36381473d951Smrg int rval = 0; 36391473d951Smrg struct stat st; 3640ab47cfaaSmrg 36411473d951Smrg LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", 36421473d951Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 36431473d951Smrg if ((!path) || (!*path)) 36441473d951Smrg return 0; 3645ab47cfaaSmrg 36461473d951Smrg if (stat (path, &st) >= 0) 36471473d951Smrg { 36481473d951Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 36491473d951Smrg } 36501473d951Smrg return rval; 36511473d951Smrg} 3652ab47cfaaSmrg 36531473d951Smrg/* Searches for the full path of the wrapper. Returns 36541473d951Smrg newly allocated full path name if found, NULL otherwise 36551473d951Smrg Does not chase symlinks, even on platforms that support them. 36561473d951Smrg*/ 36571473d951Smrgchar * 36581473d951Smrgfind_executable (const char *wrapper) 36591473d951Smrg{ 36601473d951Smrg int has_slash = 0; 36611473d951Smrg const char *p; 36621473d951Smrg const char *p_next; 36631473d951Smrg /* static buffer for getcwd */ 36641473d951Smrg char tmp[LT_PATHMAX + 1]; 36651473d951Smrg int tmp_len; 36661473d951Smrg char *concat_name; 3667ab47cfaaSmrg 36681473d951Smrg LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", 36691473d951Smrg wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 3670ab47cfaaSmrg 36711473d951Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 36721473d951Smrg return NULL; 3673ab47cfaaSmrg 36741473d951Smrg /* Absolute path? */ 36751473d951Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 36761473d951Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 36771473d951Smrg { 36781473d951Smrg concat_name = xstrdup (wrapper); 36791473d951Smrg if (check_executable (concat_name)) 36801473d951Smrg return concat_name; 36811473d951Smrg XFREE (concat_name); 36821473d951Smrg } 36831473d951Smrg else 36841473d951Smrg { 36851473d951Smrg#endif 36861473d951Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 36871473d951Smrg { 36881473d951Smrg concat_name = xstrdup (wrapper); 36891473d951Smrg if (check_executable (concat_name)) 36901473d951Smrg return concat_name; 36911473d951Smrg XFREE (concat_name); 36921473d951Smrg } 36931473d951Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 36941473d951Smrg } 36951473d951Smrg#endif 3696ab47cfaaSmrg 36971473d951Smrg for (p = wrapper; *p; p++) 36981473d951Smrg if (*p == '/') 36991473d951Smrg { 37001473d951Smrg has_slash = 1; 37011473d951Smrg break; 37021473d951Smrg } 37031473d951Smrg if (!has_slash) 37041473d951Smrg { 37051473d951Smrg /* no slashes; search PATH */ 37061473d951Smrg const char *path = getenv ("PATH"); 37071473d951Smrg if (path != NULL) 37081473d951Smrg { 37091473d951Smrg for (p = path; *p; p = p_next) 37101473d951Smrg { 37111473d951Smrg const char *q; 37121473d951Smrg size_t p_len; 37131473d951Smrg for (q = p; *q; q++) 37141473d951Smrg if (IS_PATH_SEPARATOR (*q)) 37151473d951Smrg break; 37161473d951Smrg p_len = q - p; 37171473d951Smrg p_next = (*q == '\0' ? q : q + 1); 37181473d951Smrg if (p_len == 0) 37191473d951Smrg { 37201473d951Smrg /* empty path: current directory */ 37211473d951Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 37221473d951Smrg lt_fatal ("getcwd failed"); 37231473d951Smrg tmp_len = strlen (tmp); 37241473d951Smrg concat_name = 37251473d951Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 37261473d951Smrg memcpy (concat_name, tmp, tmp_len); 37271473d951Smrg concat_name[tmp_len] = '/'; 37281473d951Smrg strcpy (concat_name + tmp_len + 1, wrapper); 37291473d951Smrg } 37301473d951Smrg else 37311473d951Smrg { 37321473d951Smrg concat_name = 37331473d951Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 37341473d951Smrg memcpy (concat_name, p, p_len); 37351473d951Smrg concat_name[p_len] = '/'; 37361473d951Smrg strcpy (concat_name + p_len + 1, wrapper); 37371473d951Smrg } 37381473d951Smrg if (check_executable (concat_name)) 37391473d951Smrg return concat_name; 37401473d951Smrg XFREE (concat_name); 37411473d951Smrg } 37421473d951Smrg } 37431473d951Smrg /* not found in PATH; assume curdir */ 37441473d951Smrg } 37451473d951Smrg /* Relative path | not found in path: prepend cwd */ 37461473d951Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 37471473d951Smrg lt_fatal ("getcwd failed"); 37481473d951Smrg tmp_len = strlen (tmp); 37491473d951Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 37501473d951Smrg memcpy (concat_name, tmp, tmp_len); 37511473d951Smrg concat_name[tmp_len] = '/'; 37521473d951Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3753ab47cfaaSmrg 37541473d951Smrg if (check_executable (concat_name)) 37551473d951Smrg return concat_name; 37561473d951Smrg XFREE (concat_name); 37571473d951Smrg return NULL; 37581473d951Smrg} 3759ab47cfaaSmrg 37601473d951Smrgchar * 37611473d951Smrgchase_symlinks (const char *pathspec) 37621473d951Smrg{ 37631473d951Smrg#ifndef S_ISLNK 37641473d951Smrg return xstrdup (pathspec); 37651473d951Smrg#else 37661473d951Smrg char buf[LT_PATHMAX]; 37671473d951Smrg struct stat s; 37681473d951Smrg char *tmp_pathspec = xstrdup (pathspec); 37691473d951Smrg char *p; 37701473d951Smrg int has_symlinks = 0; 37711473d951Smrg while (strlen (tmp_pathspec) && !has_symlinks) 37721473d951Smrg { 37731473d951Smrg LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", 37741473d951Smrg tmp_pathspec)); 37751473d951Smrg if (lstat (tmp_pathspec, &s) == 0) 37761473d951Smrg { 37771473d951Smrg if (S_ISLNK (s.st_mode) != 0) 37781473d951Smrg { 37791473d951Smrg has_symlinks = 1; 37801473d951Smrg break; 37811473d951Smrg } 3782ab47cfaaSmrg 37831473d951Smrg /* search backwards for last DIR_SEPARATOR */ 37841473d951Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 37851473d951Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 37861473d951Smrg p--; 37871473d951Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 37881473d951Smrg { 37891473d951Smrg /* no more DIR_SEPARATORS left */ 37901473d951Smrg break; 37911473d951Smrg } 37921473d951Smrg *p = '\0'; 37931473d951Smrg } 37941473d951Smrg else 37951473d951Smrg { 37961473d951Smrg char *errstr = strerror (errno); 37971473d951Smrg lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); 37981473d951Smrg } 37991473d951Smrg } 38001473d951Smrg XFREE (tmp_pathspec); 3801ab47cfaaSmrg 38021473d951Smrg if (!has_symlinks) 38031473d951Smrg { 38041473d951Smrg return xstrdup (pathspec); 38051473d951Smrg } 3806ab47cfaaSmrg 38071473d951Smrg tmp_pathspec = realpath (pathspec, buf); 38081473d951Smrg if (tmp_pathspec == 0) 38091473d951Smrg { 38101473d951Smrg lt_fatal ("Could not follow symlinks for %s", pathspec); 38111473d951Smrg } 38121473d951Smrg return xstrdup (tmp_pathspec); 38131473d951Smrg#endif 38141473d951Smrg} 3815ab47cfaaSmrg 38161473d951Smrgchar * 38171473d951Smrgstrendzap (char *str, const char *pat) 38181473d951Smrg{ 38191473d951Smrg size_t len, patlen; 3820ab47cfaaSmrg 38211473d951Smrg assert (str != NULL); 38221473d951Smrg assert (pat != NULL); 3823ab47cfaaSmrg 38241473d951Smrg len = strlen (str); 38251473d951Smrg patlen = strlen (pat); 3826ab47cfaaSmrg 38271473d951Smrg if (patlen <= len) 38281473d951Smrg { 38291473d951Smrg str += len - patlen; 38301473d951Smrg if (strcmp (str, pat) == 0) 38311473d951Smrg *str = '\0'; 38321473d951Smrg } 38331473d951Smrg return str; 38341473d951Smrg} 3835ab47cfaaSmrg 38361473d951Smrgstatic void 38371473d951Smrglt_error_core (int exit_status, const char *mode, 38381473d951Smrg const char *message, va_list ap) 38391473d951Smrg{ 38401473d951Smrg fprintf (stderr, "%s: %s: ", program_name, mode); 38411473d951Smrg vfprintf (stderr, message, ap); 38421473d951Smrg fprintf (stderr, ".\n"); 3843ab47cfaaSmrg 38441473d951Smrg if (exit_status >= 0) 38451473d951Smrg exit (exit_status); 38461473d951Smrg} 3847ab47cfaaSmrg 38481473d951Smrgvoid 38491473d951Smrglt_fatal (const char *message, ...) 38501473d951Smrg{ 38511473d951Smrg va_list ap; 38521473d951Smrg va_start (ap, message); 38531473d951Smrg lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 38541473d951Smrg va_end (ap); 38551473d951Smrg} 3856ab47cfaaSmrg 38571473d951Smrgvoid 38581473d951Smrglt_setenv (const char *name, const char *value) 38591473d951Smrg{ 38601473d951Smrg LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", 38611473d951Smrg (name ? name : "<NULL>"), 38621473d951Smrg (value ? value : "<NULL>"))); 38631473d951Smrg { 38641473d951Smrg#ifdef HAVE_SETENV 38651473d951Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 38661473d951Smrg char *str = xstrdup (value); 38671473d951Smrg setenv (name, str, 1); 38681473d951Smrg#else 38691473d951Smrg int len = strlen (name) + 1 + strlen (value) + 1; 38701473d951Smrg char *str = XMALLOC (char, len); 38711473d951Smrg sprintf (str, "%s=%s", name, value); 38721473d951Smrg if (putenv (str) != EXIT_SUCCESS) 38731473d951Smrg { 38741473d951Smrg XFREE (str); 38751473d951Smrg } 38761473d951Smrg#endif 38771473d951Smrg } 38781473d951Smrg} 3879ab47cfaaSmrg 38801473d951Smrgchar * 38811473d951Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 38821473d951Smrg{ 38831473d951Smrg char *new_value; 38841473d951Smrg if (orig_value && *orig_value) 38851473d951Smrg { 38861473d951Smrg int orig_value_len = strlen (orig_value); 38871473d951Smrg int add_len = strlen (add); 38881473d951Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 38891473d951Smrg if (to_end) 38901473d951Smrg { 38911473d951Smrg strcpy (new_value, orig_value); 38921473d951Smrg strcpy (new_value + orig_value_len, add); 38931473d951Smrg } 38941473d951Smrg else 38951473d951Smrg { 38961473d951Smrg strcpy (new_value, add); 38971473d951Smrg strcpy (new_value + add_len, orig_value); 38981473d951Smrg } 38991473d951Smrg } 39001473d951Smrg else 39011473d951Smrg { 39021473d951Smrg new_value = xstrdup (add); 39031473d951Smrg } 39041473d951Smrg return new_value; 39051473d951Smrg} 3906ab47cfaaSmrg 39071473d951Smrgint 39081473d951Smrglt_split_name_value (const char *arg, char** name, char** value) 39091473d951Smrg{ 39101473d951Smrg const char *p; 39111473d951Smrg int len; 39121473d951Smrg if (!arg || !*arg) 39131473d951Smrg return 1; 3914ab47cfaaSmrg 39151473d951Smrg p = strchr (arg, (int)'='); 3916ab47cfaaSmrg 39171473d951Smrg if (!p) 39181473d951Smrg return 1; 3919ab47cfaaSmrg 39201473d951Smrg *value = xstrdup (++p); 3921ab47cfaaSmrg 39221473d951Smrg len = strlen (arg) - strlen (*value); 39231473d951Smrg *name = XMALLOC (char, len); 39241473d951Smrg strncpy (*name, arg, len-1); 39251473d951Smrg (*name)[len - 1] = '\0'; 3926ab47cfaaSmrg 39271473d951Smrg return 0; 39281473d951Smrg} 3929ab47cfaaSmrg 39301473d951Smrgvoid 39311473d951Smrglt_opt_process_env_set (const char *arg) 39321473d951Smrg{ 39331473d951Smrg char *name = NULL; 39341473d951Smrg char *value = NULL; 3935ab47cfaaSmrg 39361473d951Smrg if (lt_split_name_value (arg, &name, &value) != 0) 39371473d951Smrg { 39381473d951Smrg XFREE (name); 39391473d951Smrg XFREE (value); 39401473d951Smrg lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); 39411473d951Smrg } 3942ab47cfaaSmrg 39431473d951Smrg lt_setenv (name, value); 39441473d951Smrg XFREE (name); 39451473d951Smrg XFREE (value); 39461473d951Smrg} 3947ab47cfaaSmrg 39481473d951Smrgvoid 39491473d951Smrglt_opt_process_env_prepend (const char *arg) 39501473d951Smrg{ 39511473d951Smrg char *name = NULL; 39521473d951Smrg char *value = NULL; 39531473d951Smrg char *new_value = NULL; 3954ab47cfaaSmrg 39551473d951Smrg if (lt_split_name_value (arg, &name, &value) != 0) 39561473d951Smrg { 39571473d951Smrg XFREE (name); 39581473d951Smrg XFREE (value); 39591473d951Smrg lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); 39601473d951Smrg } 3961ab47cfaaSmrg 39621473d951Smrg new_value = lt_extend_str (getenv (name), value, 0); 39631473d951Smrg lt_setenv (name, new_value); 39641473d951Smrg XFREE (new_value); 39651473d951Smrg XFREE (name); 39661473d951Smrg XFREE (value); 39671473d951Smrg} 3968ab47cfaaSmrg 39691473d951Smrgvoid 39701473d951Smrglt_opt_process_env_append (const char *arg) 39711473d951Smrg{ 39721473d951Smrg char *name = NULL; 39731473d951Smrg char *value = NULL; 39741473d951Smrg char *new_value = NULL; 3975ab47cfaaSmrg 39761473d951Smrg if (lt_split_name_value (arg, &name, &value) != 0) 39771473d951Smrg { 39781473d951Smrg XFREE (name); 39791473d951Smrg XFREE (value); 39801473d951Smrg lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); 39811473d951Smrg } 3982ab47cfaaSmrg 39831473d951Smrg new_value = lt_extend_str (getenv (name), value, 1); 39841473d951Smrg lt_setenv (name, new_value); 39851473d951Smrg XFREE (new_value); 39861473d951Smrg XFREE (name); 39871473d951Smrg XFREE (value); 39881473d951Smrg} 3989ab47cfaaSmrg 39901473d951Smrgvoid 39911473d951Smrglt_update_exe_path (const char *name, const char *value) 39921473d951Smrg{ 39931473d951Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 39941473d951Smrg (name ? name : "<NULL>"), 39951473d951Smrg (value ? value : "<NULL>"))); 3996ab47cfaaSmrg 39971473d951Smrg if (name && *name && value && *value) 39981473d951Smrg { 39991473d951Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 40001473d951Smrg /* some systems can't cope with a ':'-terminated path #' */ 40011473d951Smrg int len = strlen (new_value); 40021473d951Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 40031473d951Smrg { 40041473d951Smrg new_value[len-1] = '\0'; 40051473d951Smrg } 40061473d951Smrg lt_setenv (name, new_value); 40071473d951Smrg XFREE (new_value); 40081473d951Smrg } 40091473d951Smrg} 4010ab47cfaaSmrg 40111473d951Smrgvoid 40121473d951Smrglt_update_lib_path (const char *name, const char *value) 40131473d951Smrg{ 40141473d951Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 40151473d951Smrg (name ? name : "<NULL>"), 40161473d951Smrg (value ? value : "<NULL>"))); 4017ab47cfaaSmrg 40181473d951Smrg if (name && *name && value && *value) 40191473d951Smrg { 40201473d951Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 40211473d951Smrg lt_setenv (name, new_value); 40221473d951Smrg XFREE (new_value); 40231473d951Smrg } 40241473d951Smrg} 4025ab47cfaaSmrg 4026ab47cfaaSmrg 40271473d951SmrgEOF 40281473d951Smrg} 40291473d951Smrg# end: func_emit_cwrapperexe_src 4030ab47cfaaSmrg 40311473d951Smrg# func_mode_link arg... 40321473d951Smrgfunc_mode_link () 40331473d951Smrg{ 40341473d951Smrg $opt_debug 40351473d951Smrg case $host in 40361473d951Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 40371473d951Smrg # It is impossible to link a dll without this setting, and 40381473d951Smrg # we shouldn't force the makefile maintainer to figure out 40391473d951Smrg # which system we are compiling for in order to pass an extra 40401473d951Smrg # flag for every libtool invocation. 40411473d951Smrg # allow_undefined=no 4042ab47cfaaSmrg 40431473d951Smrg # FIXME: Unfortunately, there are problems with the above when trying 40441473d951Smrg # to make a dll which has undefined symbols, in which case not 40451473d951Smrg # even a static library is built. For now, we need to specify 40461473d951Smrg # -no-undefined on the libtool link line when we can be certain 40471473d951Smrg # that all symbols are satisfied, otherwise we get a static library. 40481473d951Smrg allow_undefined=yes 40491473d951Smrg ;; 40501473d951Smrg *) 40511473d951Smrg allow_undefined=yes 40521473d951Smrg ;; 40531473d951Smrg esac 40541473d951Smrg libtool_args=$nonopt 40551473d951Smrg base_compile="$nonopt $@" 40561473d951Smrg compile_command=$nonopt 40571473d951Smrg finalize_command=$nonopt 4058ab47cfaaSmrg 40591473d951Smrg compile_rpath= 40601473d951Smrg finalize_rpath= 40611473d951Smrg compile_shlibpath= 40621473d951Smrg finalize_shlibpath= 40631473d951Smrg convenience= 40641473d951Smrg old_convenience= 40651473d951Smrg deplibs= 40661473d951Smrg old_deplibs= 40671473d951Smrg compiler_flags= 40681473d951Smrg linker_flags= 40691473d951Smrg dllsearchpath= 40701473d951Smrg lib_search_path=`pwd` 40711473d951Smrg inst_prefix_dir= 40721473d951Smrg new_inherited_linker_flags= 4073ab47cfaaSmrg 40741473d951Smrg avoid_version=no 40751473d951Smrg dlfiles= 40761473d951Smrg dlprefiles= 40771473d951Smrg dlself=no 40781473d951Smrg export_dynamic=no 40791473d951Smrg export_symbols= 40801473d951Smrg export_symbols_regex= 40811473d951Smrg generated= 40821473d951Smrg libobjs= 40831473d951Smrg ltlibs= 40841473d951Smrg module=no 40851473d951Smrg no_install=no 40861473d951Smrg objs= 40871473d951Smrg non_pic_objects= 40881473d951Smrg precious_files_regex= 40891473d951Smrg prefer_static_libs=no 40901473d951Smrg preload=no 40911473d951Smrg prev= 40921473d951Smrg prevarg= 40931473d951Smrg release= 40941473d951Smrg rpath= 40951473d951Smrg xrpath= 40961473d951Smrg perm_rpath= 40971473d951Smrg temp_rpath= 40981473d951Smrg thread_safe=no 40991473d951Smrg vinfo= 41001473d951Smrg vinfo_number=no 41011473d951Smrg weak_libs= 41021473d951Smrg single_module="${wl}-single_module" 41031473d951Smrg func_infer_tag $base_compile 4104ab47cfaaSmrg 41051473d951Smrg # We need to know -static, to get the right output filenames. 41061473d951Smrg for arg 41071473d951Smrg do 41081473d951Smrg case $arg in 41091473d951Smrg -shared) 41101473d951Smrg test "$build_libtool_libs" != yes && \ 41111473d951Smrg func_fatal_configuration "can not build a shared library" 41121473d951Smrg build_old_libs=no 41131473d951Smrg break 41141473d951Smrg ;; 41151473d951Smrg -all-static | -static | -static-libtool-libs) 41161473d951Smrg case $arg in 41171473d951Smrg -all-static) 41181473d951Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 41191473d951Smrg func_warning "complete static linking is impossible in this configuration" 41201473d951Smrg fi 41211473d951Smrg if test -n "$link_static_flag"; then 41221473d951Smrg dlopen_self=$dlopen_self_static 41231473d951Smrg fi 41241473d951Smrg prefer_static_libs=yes 41251473d951Smrg ;; 41261473d951Smrg -static) 41271473d951Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 41281473d951Smrg dlopen_self=$dlopen_self_static 41291473d951Smrg fi 41301473d951Smrg prefer_static_libs=built 41311473d951Smrg ;; 41321473d951Smrg -static-libtool-libs) 41331473d951Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 41341473d951Smrg dlopen_self=$dlopen_self_static 41351473d951Smrg fi 41361473d951Smrg prefer_static_libs=yes 41371473d951Smrg ;; 41381473d951Smrg esac 41391473d951Smrg build_libtool_libs=no 41401473d951Smrg build_old_libs=yes 41411473d951Smrg break 4142ab47cfaaSmrg ;; 4143ab47cfaaSmrg esac 41441473d951Smrg done 4145ab47cfaaSmrg 41461473d951Smrg # See if our shared archives depend on static archives. 41471473d951Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 4148ab47cfaaSmrg 41491473d951Smrg # Go through the arguments, transforming them on the way. 41501473d951Smrg while test "$#" -gt 0; do 41511473d951Smrg arg="$1" 41521473d951Smrg shift 41531473d951Smrg func_quote_for_eval "$arg" 41541473d951Smrg qarg=$func_quote_for_eval_unquoted_result 41551473d951Smrg func_append libtool_args " $func_quote_for_eval_result" 4156ab47cfaaSmrg 41571473d951Smrg # If the previous option needs an argument, assign it. 41581473d951Smrg if test -n "$prev"; then 41591473d951Smrg case $prev in 41601473d951Smrg output) 41611473d951Smrg func_append compile_command " @OUTPUT@" 41621473d951Smrg func_append finalize_command " @OUTPUT@" 4163ab47cfaaSmrg ;; 4164ab47cfaaSmrg esac 4165ab47cfaaSmrg 41661473d951Smrg case $prev in 41671473d951Smrg dlfiles|dlprefiles) 41681473d951Smrg if test "$preload" = no; then 41691473d951Smrg # Add the symbol object into the linking commands. 41701473d951Smrg func_append compile_command " @SYMFILE@" 41711473d951Smrg func_append finalize_command " @SYMFILE@" 41721473d951Smrg preload=yes 41731473d951Smrg fi 41741473d951Smrg case $arg in 41751473d951Smrg *.la | *.lo) ;; # We handle these cases below. 41761473d951Smrg force) 41771473d951Smrg if test "$dlself" = no; then 41781473d951Smrg dlself=needless 41791473d951Smrg export_dynamic=yes 41801473d951Smrg fi 41811473d951Smrg prev= 41821473d951Smrg continue 41831473d951Smrg ;; 41841473d951Smrg self) 41851473d951Smrg if test "$prev" = dlprefiles; then 41861473d951Smrg dlself=yes 41871473d951Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 41881473d951Smrg dlself=yes 4189ab47cfaaSmrg else 41901473d951Smrg dlself=needless 41911473d951Smrg export_dynamic=yes 4192ab47cfaaSmrg fi 41931473d951Smrg prev= 41941473d951Smrg continue 41951473d951Smrg ;; 41961473d951Smrg *) 41971473d951Smrg if test "$prev" = dlfiles; then 41981473d951Smrg dlfiles="$dlfiles $arg" 41991473d951Smrg else 42001473d951Smrg dlprefiles="$dlprefiles $arg" 42011473d951Smrg fi 42021473d951Smrg prev= 42031473d951Smrg continue 42041473d951Smrg ;; 4205ab47cfaaSmrg esac 4206ab47cfaaSmrg ;; 42071473d951Smrg expsyms) 42081473d951Smrg export_symbols="$arg" 42091473d951Smrg test -f "$arg" \ 42101473d951Smrg || func_fatal_error "symbol file \`$arg' does not exist" 42111473d951Smrg prev= 42121473d951Smrg continue 42131473d951Smrg ;; 42141473d951Smrg expsyms_regex) 42151473d951Smrg export_symbols_regex="$arg" 42161473d951Smrg prev= 42171473d951Smrg continue 42181473d951Smrg ;; 42191473d951Smrg framework) 42201473d951Smrg case $host in 42211473d951Smrg *-*-darwin*) 42221473d951Smrg case "$deplibs " in 42231473d951Smrg *" $qarg.ltframework "*) ;; 42241473d951Smrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 42251473d951Smrg ;; 4226ab47cfaaSmrg esac 42271473d951Smrg ;; 4228ab47cfaaSmrg esac 42291473d951Smrg prev= 42301473d951Smrg continue 42311473d951Smrg ;; 42321473d951Smrg inst_prefix) 42331473d951Smrg inst_prefix_dir="$arg" 42341473d951Smrg prev= 42351473d951Smrg continue 42361473d951Smrg ;; 42371473d951Smrg objectlist) 42381473d951Smrg if test -f "$arg"; then 42391473d951Smrg save_arg=$arg 42401473d951Smrg moreargs= 42411473d951Smrg for fil in `cat "$save_arg"` 42421473d951Smrg do 42431473d951Smrg# moreargs="$moreargs $fil" 42441473d951Smrg arg=$fil 42451473d951Smrg # A libtool-controlled object. 4246ab47cfaaSmrg 42471473d951Smrg # Check to see that this really is a libtool object. 42481473d951Smrg if func_lalib_unsafe_p "$arg"; then 42491473d951Smrg pic_object= 42501473d951Smrg non_pic_object= 4251ab47cfaaSmrg 42521473d951Smrg # Read the .lo file 42531473d951Smrg func_source "$arg" 4254ab47cfaaSmrg 42551473d951Smrg if test -z "$pic_object" || 42561473d951Smrg test -z "$non_pic_object" || 42571473d951Smrg test "$pic_object" = none && 42581473d951Smrg test "$non_pic_object" = none; then 42591473d951Smrg func_fatal_error "cannot find name of object for \`$arg'" 42601473d951Smrg fi 4261ab47cfaaSmrg 42621473d951Smrg # Extract subdirectory from the argument. 42631473d951Smrg func_dirname "$arg" "/" "" 42641473d951Smrg xdir="$func_dirname_result" 4265ab47cfaaSmrg 42661473d951Smrg if test "$pic_object" != none; then 42671473d951Smrg # Prepend the subdirectory the object is found in. 42681473d951Smrg pic_object="$xdir$pic_object" 4269ab47cfaaSmrg 42701473d951Smrg if test "$prev" = dlfiles; then 42711473d951Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 42721473d951Smrg dlfiles="$dlfiles $pic_object" 42731473d951Smrg prev= 42741473d951Smrg continue 42751473d951Smrg else 42761473d951Smrg # If libtool objects are unsupported, then we need to preload. 42771473d951Smrg prev=dlprefiles 42781473d951Smrg fi 42791473d951Smrg fi 4280ab47cfaaSmrg 42811473d951Smrg # CHECK ME: I think I busted this. -Ossama 42821473d951Smrg if test "$prev" = dlprefiles; then 42831473d951Smrg # Preload the old-style object. 42841473d951Smrg dlprefiles="$dlprefiles $pic_object" 42851473d951Smrg prev= 42861473d951Smrg fi 4287ab47cfaaSmrg 42881473d951Smrg # A PIC object. 42891473d951Smrg func_append libobjs " $pic_object" 42901473d951Smrg arg="$pic_object" 42911473d951Smrg fi 4292ab47cfaaSmrg 42931473d951Smrg # Non-PIC object. 42941473d951Smrg if test "$non_pic_object" != none; then 42951473d951Smrg # Prepend the subdirectory the object is found in. 42961473d951Smrg non_pic_object="$xdir$non_pic_object" 4297ab47cfaaSmrg 42981473d951Smrg # A standard non-PIC object 42991473d951Smrg func_append non_pic_objects " $non_pic_object" 43001473d951Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 43011473d951Smrg arg="$non_pic_object" 43021473d951Smrg fi 43031473d951Smrg else 43041473d951Smrg # If the PIC object exists, use it instead. 43051473d951Smrg # $xdir was prepended to $pic_object above. 43061473d951Smrg non_pic_object="$pic_object" 43071473d951Smrg func_append non_pic_objects " $non_pic_object" 43081473d951Smrg fi 43091473d951Smrg else 43101473d951Smrg # Only an error if not doing a dry-run. 43111473d951Smrg if $opt_dry_run; then 43121473d951Smrg # Extract subdirectory from the argument. 43131473d951Smrg func_dirname "$arg" "/" "" 43141473d951Smrg xdir="$func_dirname_result" 43151473d951Smrg 43161473d951Smrg func_lo2o "$arg" 43171473d951Smrg pic_object=$xdir$objdir/$func_lo2o_result 43181473d951Smrg non_pic_object=$xdir$func_lo2o_result 43191473d951Smrg func_append libobjs " $pic_object" 43201473d951Smrg func_append non_pic_objects " $non_pic_object" 43211473d951Smrg else 43221473d951Smrg func_fatal_error "\`$arg' is not a valid libtool object" 43231473d951Smrg fi 43241473d951Smrg fi 4325ab47cfaaSmrg done 43261473d951Smrg else 43271473d951Smrg func_fatal_error "link input file \`$arg' does not exist" 4328ab47cfaaSmrg fi 43291473d951Smrg arg=$save_arg 43301473d951Smrg prev= 43311473d951Smrg continue 43321473d951Smrg ;; 43331473d951Smrg precious_regex) 43341473d951Smrg precious_files_regex="$arg" 43351473d951Smrg prev= 43361473d951Smrg continue 43371473d951Smrg ;; 43381473d951Smrg release) 43391473d951Smrg release="-$arg" 43401473d951Smrg prev= 43411473d951Smrg continue 43421473d951Smrg ;; 43431473d951Smrg rpath | xrpath) 43441473d951Smrg # We need an absolute path. 43451473d951Smrg case $arg in 43461473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 43471473d951Smrg *) 43481473d951Smrg func_fatal_error "only absolute run-paths are allowed" 43491473d951Smrg ;; 4350ab47cfaaSmrg esac 43511473d951Smrg if test "$prev" = rpath; then 43521473d951Smrg case "$rpath " in 43531473d951Smrg *" $arg "*) ;; 43541473d951Smrg *) rpath="$rpath $arg" ;; 43551473d951Smrg esac 43561473d951Smrg else 43571473d951Smrg case "$xrpath " in 43581473d951Smrg *" $arg "*) ;; 43591473d951Smrg *) xrpath="$xrpath $arg" ;; 43601473d951Smrg esac 43611473d951Smrg fi 43621473d951Smrg prev= 43631473d951Smrg continue 43641473d951Smrg ;; 43651473d951Smrg shrext) 43661473d951Smrg shrext_cmds="$arg" 43671473d951Smrg prev= 43681473d951Smrg continue 43691473d951Smrg ;; 43701473d951Smrg weak) 43711473d951Smrg weak_libs="$weak_libs $arg" 43721473d951Smrg prev= 43731473d951Smrg continue 43741473d951Smrg ;; 43751473d951Smrg xcclinker) 43761473d951Smrg linker_flags="$linker_flags $qarg" 43771473d951Smrg compiler_flags="$compiler_flags $qarg" 43781473d951Smrg prev= 43791473d951Smrg func_append compile_command " $qarg" 43801473d951Smrg func_append finalize_command " $qarg" 43811473d951Smrg continue 43821473d951Smrg ;; 43831473d951Smrg xcompiler) 43841473d951Smrg compiler_flags="$compiler_flags $qarg" 43851473d951Smrg prev= 43861473d951Smrg func_append compile_command " $qarg" 43871473d951Smrg func_append finalize_command " $qarg" 43881473d951Smrg continue 43891473d951Smrg ;; 43901473d951Smrg xlinker) 43911473d951Smrg linker_flags="$linker_flags $qarg" 43921473d951Smrg compiler_flags="$compiler_flags $wl$qarg" 43931473d951Smrg prev= 43941473d951Smrg func_append compile_command " $wl$qarg" 43951473d951Smrg func_append finalize_command " $wl$qarg" 43961473d951Smrg continue 4397ab47cfaaSmrg ;; 4398ab47cfaaSmrg *) 43991473d951Smrg eval "$prev=\"\$arg\"" 44001473d951Smrg prev= 44011473d951Smrg continue 4402ab47cfaaSmrg ;; 4403ab47cfaaSmrg esac 44041473d951Smrg fi # test -n "$prev" 4405ab47cfaaSmrg 44061473d951Smrg prevarg="$arg" 4407ab47cfaaSmrg 44081473d951Smrg case $arg in 44091473d951Smrg -all-static) 44101473d951Smrg if test -n "$link_static_flag"; then 44111473d951Smrg # See comment for -static flag below, for more details. 44121473d951Smrg func_append compile_command " $link_static_flag" 44131473d951Smrg func_append finalize_command " $link_static_flag" 4414ab47cfaaSmrg fi 44151473d951Smrg continue 44161473d951Smrg ;; 4417ab47cfaaSmrg 44181473d951Smrg -allow-undefined) 44191473d951Smrg # FIXME: remove this flag sometime in the future. 44201473d951Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 44211473d951Smrg ;; 4422ab47cfaaSmrg 44231473d951Smrg -avoid-version) 44241473d951Smrg avoid_version=yes 44251473d951Smrg continue 44261473d951Smrg ;; 4427ab47cfaaSmrg 44281473d951Smrg -dlopen) 44291473d951Smrg prev=dlfiles 44301473d951Smrg continue 44311473d951Smrg ;; 4432ab47cfaaSmrg 44331473d951Smrg -dlpreopen) 44341473d951Smrg prev=dlprefiles 44351473d951Smrg continue 44361473d951Smrg ;; 4437ab47cfaaSmrg 44381473d951Smrg -export-dynamic) 44391473d951Smrg export_dynamic=yes 44401473d951Smrg continue 44411473d951Smrg ;; 4442ab47cfaaSmrg 44431473d951Smrg -export-symbols | -export-symbols-regex) 44441473d951Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 44451473d951Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 44461473d951Smrg fi 44471473d951Smrg if test "X$arg" = "X-export-symbols"; then 44481473d951Smrg prev=expsyms 4449ab47cfaaSmrg else 44501473d951Smrg prev=expsyms_regex 4451ab47cfaaSmrg fi 44521473d951Smrg continue 44531473d951Smrg ;; 4454ab47cfaaSmrg 44551473d951Smrg -framework) 44561473d951Smrg prev=framework 44571473d951Smrg continue 44581473d951Smrg ;; 4459ab47cfaaSmrg 44601473d951Smrg -inst-prefix-dir) 44611473d951Smrg prev=inst_prefix 44621473d951Smrg continue 44631473d951Smrg ;; 4464ab47cfaaSmrg 44651473d951Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 44661473d951Smrg # so, if we see these flags be careful not to treat them like -L 44671473d951Smrg -L[A-Z][A-Z]*:*) 44681473d951Smrg case $with_gcc/$host in 44691473d951Smrg no/*-*-irix* | /*-*-irix*) 44701473d951Smrg func_append compile_command " $arg" 44711473d951Smrg func_append finalize_command " $arg" 44721473d951Smrg ;; 44731473d951Smrg esac 44741473d951Smrg continue 44751473d951Smrg ;; 4476ab47cfaaSmrg 44771473d951Smrg -L*) 44781473d951Smrg func_stripname '-L' '' "$arg" 44791473d951Smrg dir=$func_stripname_result 44801473d951Smrg if test -z "$dir"; then 44811473d951Smrg if test "$#" -gt 0; then 44821473d951Smrg func_fatal_error "require no space between \`-L' and \`$1'" 4483ab47cfaaSmrg else 44841473d951Smrg func_fatal_error "need path for \`-L' option" 4485ab47cfaaSmrg fi 44861473d951Smrg fi 44871473d951Smrg # We need an absolute path. 44881473d951Smrg case $dir in 44891473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 44901473d951Smrg *) 44911473d951Smrg absdir=`cd "$dir" && pwd` 44921473d951Smrg test -z "$absdir" && \ 44931473d951Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 44941473d951Smrg dir="$absdir" 44951473d951Smrg ;; 4496ab47cfaaSmrg esac 44971473d951Smrg case "$deplibs " in 44981473d951Smrg *" -L$dir "*) ;; 44991473d951Smrg *) 45001473d951Smrg deplibs="$deplibs -L$dir" 45011473d951Smrg lib_search_path="$lib_search_path $dir" 45021473d951Smrg ;; 4503ab47cfaaSmrg esac 4504ab47cfaaSmrg case $host in 45051473d951Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 45061473d951Smrg testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` 45071473d951Smrg case :$dllsearchpath: in 45081473d951Smrg *":$dir:"*) ;; 45091473d951Smrg ::) dllsearchpath=$dir;; 45101473d951Smrg *) dllsearchpath="$dllsearchpath:$dir";; 45111473d951Smrg esac 45121473d951Smrg case :$dllsearchpath: in 45131473d951Smrg *":$testbindir:"*) ;; 45141473d951Smrg ::) dllsearchpath=$testbindir;; 45151473d951Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 45161473d951Smrg esac 45171473d951Smrg ;; 4518ab47cfaaSmrg esac 45191473d951Smrg continue 45201473d951Smrg ;; 4521ab47cfaaSmrg 45221473d951Smrg -l*) 45231473d951Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 45241473d951Smrg case $host in 45251473d951Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) 45261473d951Smrg # These systems don't actually have a C or math library (as such) 45271473d951Smrg continue 45281473d951Smrg ;; 45291473d951Smrg *-*-os2*) 45301473d951Smrg # These systems don't actually have a C library (as such) 45311473d951Smrg test "X$arg" = "X-lc" && continue 45321473d951Smrg ;; 45331473d951Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 45341473d951Smrg # Do not include libc due to us having libc/libc_r. 45351473d951Smrg test "X$arg" = "X-lc" && continue 45361473d951Smrg ;; 45371473d951Smrg *-*-rhapsody* | *-*-darwin1.[012]) 45381473d951Smrg # Rhapsody C and math libraries are in the System framework 45391473d951Smrg deplibs="$deplibs System.ltframework" 45401473d951Smrg continue 45411473d951Smrg ;; 45421473d951Smrg *-*-sco3.2v5* | *-*-sco5v6*) 45431473d951Smrg # Causes problems with __ctype 45441473d951Smrg test "X$arg" = "X-lc" && continue 45451473d951Smrg ;; 45461473d951Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 45471473d951Smrg # Compiler inserts libc in the correct place for threads to work 45481473d951Smrg test "X$arg" = "X-lc" && continue 45491473d951Smrg ;; 45501473d951Smrg esac 45511473d951Smrg elif test "X$arg" = "X-lc_r"; then 45521473d951Smrg case $host in 45531473d951Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 45541473d951Smrg # Do not include libc_r directly, use -pthread flag. 45551473d951Smrg continue 45561473d951Smrg ;; 45571473d951Smrg esac 45581473d951Smrg fi 45591473d951Smrg deplibs="$deplibs $arg" 45601473d951Smrg continue 45611473d951Smrg ;; 4562ab47cfaaSmrg 45631473d951Smrg -module) 45641473d951Smrg module=yes 45651473d951Smrg continue 45661473d951Smrg ;; 4567ab47cfaaSmrg 45681473d951Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 45691473d951Smrg # classes, name mangling, and exception handling. 45701473d951Smrg # Darwin uses the -arch flag to determine output architecture. 45711473d951Smrg -model|-arch|-isysroot) 45721473d951Smrg compiler_flags="$compiler_flags $arg" 45731473d951Smrg func_append compile_command " $arg" 45741473d951Smrg func_append finalize_command " $arg" 45751473d951Smrg prev=xcompiler 45761473d951Smrg continue 45771473d951Smrg ;; 4578ab47cfaaSmrg 45791473d951Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 45801473d951Smrg compiler_flags="$compiler_flags $arg" 45811473d951Smrg func_append compile_command " $arg" 45821473d951Smrg func_append finalize_command " $arg" 45831473d951Smrg case "$new_inherited_linker_flags " in 45841473d951Smrg *" $arg "*) ;; 45851473d951Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 45861473d951Smrg esac 45871473d951Smrg continue 45881473d951Smrg ;; 4589ab47cfaaSmrg 45901473d951Smrg -multi_module) 45911473d951Smrg single_module="${wl}-multi_module" 45921473d951Smrg continue 45931473d951Smrg ;; 4594ab47cfaaSmrg 45951473d951Smrg -no-fast-install) 45961473d951Smrg fast_install=no 45971473d951Smrg continue 45981473d951Smrg ;; 4599ab47cfaaSmrg 46001473d951Smrg -no-install) 46011473d951Smrg case $host in 46021473d951Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 46031473d951Smrg # The PATH hackery in wrapper scripts is required on Windows 46041473d951Smrg # and Darwin in order for the loader to find any dlls it needs. 46051473d951Smrg func_warning "\`-no-install' is ignored for $host" 46061473d951Smrg func_warning "assuming \`-no-fast-install' instead" 46071473d951Smrg fast_install=no 46081473d951Smrg ;; 46091473d951Smrg *) no_install=yes ;; 46101473d951Smrg esac 46111473d951Smrg continue 46121473d951Smrg ;; 4613ab47cfaaSmrg 46141473d951Smrg -no-undefined) 46151473d951Smrg allow_undefined=no 46161473d951Smrg continue 46171473d951Smrg ;; 4618ab47cfaaSmrg 46191473d951Smrg -objectlist) 46201473d951Smrg prev=objectlist 46211473d951Smrg continue 46221473d951Smrg ;; 4623ab47cfaaSmrg 46241473d951Smrg -o) prev=output ;; 4625ab47cfaaSmrg 46261473d951Smrg -precious-files-regex) 46271473d951Smrg prev=precious_regex 46281473d951Smrg continue 46291473d951Smrg ;; 4630ab47cfaaSmrg 46311473d951Smrg -release) 46321473d951Smrg prev=release 46331473d951Smrg continue 46341473d951Smrg ;; 4635ab47cfaaSmrg 46361473d951Smrg -rpath) 46371473d951Smrg prev=rpath 46381473d951Smrg continue 46391473d951Smrg ;; 4640ab47cfaaSmrg 46411473d951Smrg -R) 46421473d951Smrg prev=xrpath 46431473d951Smrg continue 46441473d951Smrg ;; 4645ab47cfaaSmrg 46461473d951Smrg -R*) 46471473d951Smrg func_stripname '-R' '' "$arg" 46481473d951Smrg dir=$func_stripname_result 46491473d951Smrg # We need an absolute path. 46501473d951Smrg case $dir in 46511473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 46521473d951Smrg *) 46531473d951Smrg func_fatal_error "only absolute run-paths are allowed" 46541473d951Smrg ;; 46551473d951Smrg esac 46561473d951Smrg case "$xrpath " in 46571473d951Smrg *" $dir "*) ;; 46581473d951Smrg *) xrpath="$xrpath $dir" ;; 46591473d951Smrg esac 46601473d951Smrg continue 46611473d951Smrg ;; 4662ab47cfaaSmrg 46631473d951Smrg -shared) 46641473d951Smrg # The effects of -shared are defined in a previous loop. 46651473d951Smrg continue 46661473d951Smrg ;; 4667ab47cfaaSmrg 46681473d951Smrg -shrext) 46691473d951Smrg prev=shrext 46701473d951Smrg continue 46711473d951Smrg ;; 4672ab47cfaaSmrg 46731473d951Smrg -static | -static-libtool-libs) 46741473d951Smrg # The effects of -static are defined in a previous loop. 46751473d951Smrg # We used to do the same as -all-static on platforms that 46761473d951Smrg # didn't have a PIC flag, but the assumption that the effects 46771473d951Smrg # would be equivalent was wrong. It would break on at least 46781473d951Smrg # Digital Unix and AIX. 46791473d951Smrg continue 46801473d951Smrg ;; 4681ab47cfaaSmrg 46821473d951Smrg -thread-safe) 46831473d951Smrg thread_safe=yes 46841473d951Smrg continue 46851473d951Smrg ;; 4686ab47cfaaSmrg 46871473d951Smrg -version-info) 46881473d951Smrg prev=vinfo 46891473d951Smrg continue 46901473d951Smrg ;; 4691ab47cfaaSmrg 46921473d951Smrg -version-number) 46931473d951Smrg prev=vinfo 46941473d951Smrg vinfo_number=yes 46951473d951Smrg continue 46961473d951Smrg ;; 4697ab47cfaaSmrg 46981473d951Smrg -weak) 46991473d951Smrg prev=weak 47001473d951Smrg continue 47011473d951Smrg ;; 4702ab47cfaaSmrg 47031473d951Smrg -Wc,*) 47041473d951Smrg func_stripname '-Wc,' '' "$arg" 47051473d951Smrg args=$func_stripname_result 47061473d951Smrg arg= 47071473d951Smrg save_ifs="$IFS"; IFS=',' 47081473d951Smrg for flag in $args; do 47091473d951Smrg IFS="$save_ifs" 47101473d951Smrg func_quote_for_eval "$flag" 47111473d951Smrg arg="$arg $wl$func_quote_for_eval_result" 47121473d951Smrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 47131473d951Smrg done 47141473d951Smrg IFS="$save_ifs" 47151473d951Smrg func_stripname ' ' '' "$arg" 47161473d951Smrg arg=$func_stripname_result 47171473d951Smrg ;; 4718ab47cfaaSmrg 47191473d951Smrg -Wl,*) 47201473d951Smrg func_stripname '-Wl,' '' "$arg" 47211473d951Smrg args=$func_stripname_result 47221473d951Smrg arg= 47231473d951Smrg save_ifs="$IFS"; IFS=',' 47241473d951Smrg for flag in $args; do 47251473d951Smrg IFS="$save_ifs" 47261473d951Smrg func_quote_for_eval "$flag" 47271473d951Smrg arg="$arg $wl$func_quote_for_eval_result" 47281473d951Smrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 47291473d951Smrg linker_flags="$linker_flags $func_quote_for_eval_result" 47301473d951Smrg done 47311473d951Smrg IFS="$save_ifs" 47321473d951Smrg func_stripname ' ' '' "$arg" 47331473d951Smrg arg=$func_stripname_result 47341473d951Smrg ;; 4735ab47cfaaSmrg 47361473d951Smrg -Xcompiler) 47371473d951Smrg prev=xcompiler 47381473d951Smrg continue 47391473d951Smrg ;; 4740ab47cfaaSmrg 47411473d951Smrg -Xlinker) 47421473d951Smrg prev=xlinker 47431473d951Smrg continue 47441473d951Smrg ;; 4745ab47cfaaSmrg 47461473d951Smrg -XCClinker) 47471473d951Smrg prev=xcclinker 47481473d951Smrg continue 47491473d951Smrg ;; 4750ab47cfaaSmrg 47511473d951Smrg # -msg_* for osf cc 47521473d951Smrg -msg_*) 47531473d951Smrg func_quote_for_eval "$arg" 47541473d951Smrg arg="$func_quote_for_eval_result" 47551473d951Smrg ;; 4756ab47cfaaSmrg 47571473d951Smrg # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 47581473d951Smrg # -r[0-9][0-9]* specifies the processor on the SGI compiler 47591473d951Smrg # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 47601473d951Smrg # +DA*, +DD* enable 64-bit mode on the HP compiler 47611473d951Smrg # -q* pass through compiler args for the IBM compiler 47621473d951Smrg # -m*, -t[45]*, -txscale* pass through architecture-specific 47631473d951Smrg # compiler args for GCC 47641473d951Smrg # -F/path gives path to uninstalled frameworks, gcc on darwin 47651473d951Smrg # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 47661473d951Smrg # @file GCC response files 47671473d951Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 47681473d951Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 47691473d951Smrg func_quote_for_eval "$arg" 47701473d951Smrg arg="$func_quote_for_eval_result" 47711473d951Smrg func_append compile_command " $arg" 47721473d951Smrg func_append finalize_command " $arg" 47731473d951Smrg compiler_flags="$compiler_flags $arg" 47741473d951Smrg continue 47751473d951Smrg ;; 4776ab47cfaaSmrg 47771473d951Smrg # Some other compiler flag. 47781473d951Smrg -* | +*) 47791473d951Smrg func_quote_for_eval "$arg" 47801473d951Smrg arg="$func_quote_for_eval_result" 47811473d951Smrg ;; 4782ab47cfaaSmrg 47831473d951Smrg *.$objext) 47841473d951Smrg # A standard object. 47851473d951Smrg objs="$objs $arg" 47861473d951Smrg ;; 4787ab47cfaaSmrg 47881473d951Smrg *.lo) 47891473d951Smrg # A libtool-controlled object. 4790ab47cfaaSmrg 47911473d951Smrg # Check to see that this really is a libtool object. 47921473d951Smrg if func_lalib_unsafe_p "$arg"; then 47931473d951Smrg pic_object= 47941473d951Smrg non_pic_object= 4795ab47cfaaSmrg 47961473d951Smrg # Read the .lo file 47971473d951Smrg func_source "$arg" 4798ab47cfaaSmrg 47991473d951Smrg if test -z "$pic_object" || 48001473d951Smrg test -z "$non_pic_object" || 48011473d951Smrg test "$pic_object" = none && 48021473d951Smrg test "$non_pic_object" = none; then 48031473d951Smrg func_fatal_error "cannot find name of object for \`$arg'" 48041473d951Smrg fi 4805ab47cfaaSmrg 48061473d951Smrg # Extract subdirectory from the argument. 48071473d951Smrg func_dirname "$arg" "/" "" 48081473d951Smrg xdir="$func_dirname_result" 4809ab47cfaaSmrg 48101473d951Smrg if test "$pic_object" != none; then 48111473d951Smrg # Prepend the subdirectory the object is found in. 48121473d951Smrg pic_object="$xdir$pic_object" 4813ab47cfaaSmrg 48141473d951Smrg if test "$prev" = dlfiles; then 48151473d951Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 48161473d951Smrg dlfiles="$dlfiles $pic_object" 48171473d951Smrg prev= 48181473d951Smrg continue 48191473d951Smrg else 48201473d951Smrg # If libtool objects are unsupported, then we need to preload. 48211473d951Smrg prev=dlprefiles 48221473d951Smrg fi 48231473d951Smrg fi 4824ab47cfaaSmrg 48251473d951Smrg # CHECK ME: I think I busted this. -Ossama 48261473d951Smrg if test "$prev" = dlprefiles; then 48271473d951Smrg # Preload the old-style object. 48281473d951Smrg dlprefiles="$dlprefiles $pic_object" 48291473d951Smrg prev= 48301473d951Smrg fi 4831ab47cfaaSmrg 48321473d951Smrg # A PIC object. 48331473d951Smrg func_append libobjs " $pic_object" 48341473d951Smrg arg="$pic_object" 48351473d951Smrg fi 4836ab47cfaaSmrg 48371473d951Smrg # Non-PIC object. 48381473d951Smrg if test "$non_pic_object" != none; then 48391473d951Smrg # Prepend the subdirectory the object is found in. 48401473d951Smrg non_pic_object="$xdir$non_pic_object" 4841ab47cfaaSmrg 48421473d951Smrg # A standard non-PIC object 48431473d951Smrg func_append non_pic_objects " $non_pic_object" 48441473d951Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 48451473d951Smrg arg="$non_pic_object" 48461473d951Smrg fi 48471473d951Smrg else 48481473d951Smrg # If the PIC object exists, use it instead. 48491473d951Smrg # $xdir was prepended to $pic_object above. 48501473d951Smrg non_pic_object="$pic_object" 48511473d951Smrg func_append non_pic_objects " $non_pic_object" 48521473d951Smrg fi 48531473d951Smrg else 48541473d951Smrg # Only an error if not doing a dry-run. 48551473d951Smrg if $opt_dry_run; then 48561473d951Smrg # Extract subdirectory from the argument. 48571473d951Smrg func_dirname "$arg" "/" "" 48581473d951Smrg xdir="$func_dirname_result" 48591473d951Smrg 48601473d951Smrg func_lo2o "$arg" 48611473d951Smrg pic_object=$xdir$objdir/$func_lo2o_result 48621473d951Smrg non_pic_object=$xdir$func_lo2o_result 48631473d951Smrg func_append libobjs " $pic_object" 48641473d951Smrg func_append non_pic_objects " $non_pic_object" 48651473d951Smrg else 48661473d951Smrg func_fatal_error "\`$arg' is not a valid libtool object" 48671473d951Smrg fi 48681473d951Smrg fi 48691473d951Smrg ;; 4870ab47cfaaSmrg 48711473d951Smrg *.$libext) 48721473d951Smrg # An archive. 48731473d951Smrg deplibs="$deplibs $arg" 48741473d951Smrg old_deplibs="$old_deplibs $arg" 48751473d951Smrg continue 48761473d951Smrg ;; 4877ab47cfaaSmrg 48781473d951Smrg *.la) 48791473d951Smrg # A libtool-controlled library. 4880ab47cfaaSmrg 48811473d951Smrg if test "$prev" = dlfiles; then 48821473d951Smrg # This library was specified with -dlopen. 48831473d951Smrg dlfiles="$dlfiles $arg" 48841473d951Smrg prev= 48851473d951Smrg elif test "$prev" = dlprefiles; then 48861473d951Smrg # The library was specified with -dlpreopen. 48871473d951Smrg dlprefiles="$dlprefiles $arg" 48881473d951Smrg prev= 48891473d951Smrg else 48901473d951Smrg deplibs="$deplibs $arg" 48911473d951Smrg fi 48921473d951Smrg continue 48931473d951Smrg ;; 4894ab47cfaaSmrg 48951473d951Smrg # Some other compiler argument. 48961473d951Smrg *) 48971473d951Smrg # Unknown arguments in both finalize_command and compile_command need 48981473d951Smrg # to be aesthetically quoted because they are evaled later. 48991473d951Smrg func_quote_for_eval "$arg" 49001473d951Smrg arg="$func_quote_for_eval_result" 49011473d951Smrg ;; 49021473d951Smrg esac # arg 4903ab47cfaaSmrg 49041473d951Smrg # Now actually substitute the argument into the commands. 49051473d951Smrg if test -n "$arg"; then 49061473d951Smrg func_append compile_command " $arg" 49071473d951Smrg func_append finalize_command " $arg" 49081473d951Smrg fi 49091473d951Smrg done # argument parsing loop 49108697ee19Smrg 49111473d951Smrg test -n "$prev" && \ 49121473d951Smrg func_fatal_help "the \`$prevarg' option requires an argument" 4913ab47cfaaSmrg 49141473d951Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 49151473d951Smrg eval arg=\"$export_dynamic_flag_spec\" 49161473d951Smrg func_append compile_command " $arg" 49171473d951Smrg func_append finalize_command " $arg" 49181473d951Smrg fi 4919ab47cfaaSmrg 49201473d951Smrg oldlibs= 49211473d951Smrg # calculate the name of the file, without its directory 49221473d951Smrg func_basename "$output" 49231473d951Smrg outputname="$func_basename_result" 49241473d951Smrg libobjs_save="$libobjs" 49251473d951Smrg 49261473d951Smrg if test -n "$shlibpath_var"; then 49271473d951Smrg # get the directories listed in $shlibpath_var 49281473d951Smrg eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 4929ab47cfaaSmrg else 49301473d951Smrg shlib_search_path= 4931ab47cfaaSmrg fi 49321473d951Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 49331473d951Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 4934ab47cfaaSmrg 49351473d951Smrg func_dirname "$output" "/" "" 49361473d951Smrg output_objdir="$func_dirname_result$objdir" 49371473d951Smrg # Create the object directory. 49381473d951Smrg func_mkdir_p "$output_objdir" 4939ab47cfaaSmrg 49401473d951Smrg # Determine the type of output 49411473d951Smrg case $output in 49421473d951Smrg "") 49431473d951Smrg func_fatal_help "you must specify an output file" 49441473d951Smrg ;; 49451473d951Smrg *.$libext) linkmode=oldlib ;; 49461473d951Smrg *.lo | *.$objext) linkmode=obj ;; 49471473d951Smrg *.la) linkmode=lib ;; 49481473d951Smrg *) linkmode=prog ;; # Anything else should be a program. 49491473d951Smrg esac 49501473d951Smrg 49511473d951Smrg specialdeplibs= 49521473d951Smrg 49531473d951Smrg libs= 49541473d951Smrg # Find all interdependent deplibs by searching for libraries 49551473d951Smrg # that are linked more than once (e.g. -la -lb -la) 49561473d951Smrg for deplib in $deplibs; do 49571473d951Smrg if $opt_duplicate_deps ; then 49581473d951Smrg case "$libs " in 49591473d951Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 49601473d951Smrg esac 49611473d951Smrg fi 49621473d951Smrg libs="$libs $deplib" 49631473d951Smrg done 49641473d951Smrg 49651473d951Smrg if test "$linkmode" = lib; then 49661473d951Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 49671473d951Smrg 49681473d951Smrg # Compute libraries that are listed more than once in $predeps 49691473d951Smrg # $postdeps and mark them as special (i.e., whose duplicates are 49701473d951Smrg # not to be eliminated). 49711473d951Smrg pre_post_deps= 49721473d951Smrg if $opt_duplicate_compiler_generated_deps; then 49731473d951Smrg for pre_post_dep in $predeps $postdeps; do 49741473d951Smrg case "$pre_post_deps " in 49751473d951Smrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 49761473d951Smrg esac 49771473d951Smrg pre_post_deps="$pre_post_deps $pre_post_dep" 49781473d951Smrg done 49791473d951Smrg fi 49801473d951Smrg pre_post_deps= 49811473d951Smrg fi 49821473d951Smrg 49831473d951Smrg deplibs= 49841473d951Smrg newdependency_libs= 49851473d951Smrg newlib_search_path= 49861473d951Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 49871473d951Smrg notinst_deplibs= # not-installed libtool libraries 49881473d951Smrg notinst_path= # paths that contain not-installed libtool libraries 49891473d951Smrg 49901473d951Smrg case $linkmode in 49911473d951Smrg lib) 49921473d951Smrg passes="conv dlpreopen link" 49931473d951Smrg for file in $dlfiles $dlprefiles; do 49941473d951Smrg case $file in 49951473d951Smrg *.la) ;; 49961473d951Smrg *) 49971473d951Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 49981473d951Smrg ;; 49991473d951Smrg esac 50001473d951Smrg done 50011473d951Smrg ;; 50021473d951Smrg prog) 50031473d951Smrg compile_deplibs= 50041473d951Smrg finalize_deplibs= 50051473d951Smrg alldeplibs=no 50061473d951Smrg newdlfiles= 50071473d951Smrg newdlprefiles= 50081473d951Smrg passes="conv scan dlopen dlpreopen link" 50091473d951Smrg ;; 50101473d951Smrg *) passes="conv" 50111473d951Smrg ;; 50121473d951Smrg esac 50131473d951Smrg 50141473d951Smrg for pass in $passes; do 50151473d951Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 50161473d951Smrg # so that -L comes before libs that need it for instance... 50171473d951Smrg if test "$linkmode,$pass" = "lib,link"; then 50181473d951Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 50191473d951Smrg ## order, and fix it there properly 50201473d951Smrg tmp_deplibs= 50211473d951Smrg for deplib in $deplibs; do 50221473d951Smrg tmp_deplibs="$deplib $tmp_deplibs" 50231473d951Smrg done 50241473d951Smrg deplibs="$tmp_deplibs" 50251473d951Smrg fi 50261473d951Smrg 50271473d951Smrg if test "$linkmode,$pass" = "lib,link" || 50281473d951Smrg test "$linkmode,$pass" = "prog,scan"; then 50291473d951Smrg libs="$deplibs" 50301473d951Smrg deplibs= 50311473d951Smrg fi 50321473d951Smrg if test "$linkmode" = prog; then 50331473d951Smrg case $pass in 50341473d951Smrg dlopen) libs="$dlfiles" ;; 50351473d951Smrg dlpreopen) libs="$dlprefiles" ;; 50361473d951Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 50371473d951Smrg esac 50381473d951Smrg fi 50391473d951Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 50401473d951Smrg # Collect and forward deplibs of preopened libtool libs 50411473d951Smrg for lib in $dlprefiles; do 50421473d951Smrg # Ignore non-libtool-libs 50431473d951Smrg dependency_libs= 50441473d951Smrg case $lib in 50451473d951Smrg *.la) func_source "$lib" ;; 50461473d951Smrg esac 50471473d951Smrg 50481473d951Smrg # Collect preopened libtool deplibs, except any this library 50491473d951Smrg # has declared as weak libs 50501473d951Smrg for deplib in $dependency_libs; do 50511473d951Smrg deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` 50521473d951Smrg case " $weak_libs " in 50531473d951Smrg *" $deplib_base "*) ;; 50541473d951Smrg *) deplibs="$deplibs $deplib" ;; 50551473d951Smrg esac 50561473d951Smrg done 50571473d951Smrg done 50581473d951Smrg libs="$dlprefiles" 50591473d951Smrg fi 50601473d951Smrg if test "$pass" = dlopen; then 50611473d951Smrg # Collect dlpreopened libraries 50621473d951Smrg save_deplibs="$deplibs" 50631473d951Smrg deplibs= 50641473d951Smrg fi 50651473d951Smrg 50661473d951Smrg for deplib in $libs; do 50671473d951Smrg lib= 50681473d951Smrg found=no 50691473d951Smrg case $deplib in 50701473d951Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 50711473d951Smrg if test "$linkmode,$pass" = "prog,link"; then 50721473d951Smrg compile_deplibs="$deplib $compile_deplibs" 50731473d951Smrg finalize_deplibs="$deplib $finalize_deplibs" 50741473d951Smrg else 50751473d951Smrg compiler_flags="$compiler_flags $deplib" 50761473d951Smrg if test "$linkmode" = lib ; then 50771473d951Smrg case "$new_inherited_linker_flags " in 50781473d951Smrg *" $deplib "*) ;; 50791473d951Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 50801473d951Smrg esac 50811473d951Smrg fi 50821473d951Smrg fi 50831473d951Smrg continue 50841473d951Smrg ;; 50851473d951Smrg -l*) 50861473d951Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 50871473d951Smrg func_warning "\`-l' is ignored for archives/objects" 50881473d951Smrg continue 50891473d951Smrg fi 50901473d951Smrg func_stripname '-l' '' "$deplib" 50911473d951Smrg name=$func_stripname_result 50921473d951Smrg if test "$linkmode" = lib; then 50931473d951Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 50941473d951Smrg else 50951473d951Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 50961473d951Smrg fi 50971473d951Smrg for searchdir in $searchdirs; do 50981473d951Smrg for search_ext in .la $std_shrext .so .a; do 50991473d951Smrg # Search the libtool library 51001473d951Smrg lib="$searchdir/lib${name}${search_ext}" 51011473d951Smrg if test -f "$lib"; then 51021473d951Smrg if test "$search_ext" = ".la"; then 51031473d951Smrg found=yes 51041473d951Smrg else 51051473d951Smrg found=no 51061473d951Smrg fi 51071473d951Smrg break 2 51081473d951Smrg fi 51091473d951Smrg done 51101473d951Smrg done 51111473d951Smrg if test "$found" != yes; then 51121473d951Smrg # deplib doesn't seem to be a libtool library 51131473d951Smrg if test "$linkmode,$pass" = "prog,link"; then 51141473d951Smrg compile_deplibs="$deplib $compile_deplibs" 51151473d951Smrg finalize_deplibs="$deplib $finalize_deplibs" 51161473d951Smrg else 51171473d951Smrg deplibs="$deplib $deplibs" 51181473d951Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 51191473d951Smrg fi 51201473d951Smrg continue 51211473d951Smrg else # deplib is a libtool library 51221473d951Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 51231473d951Smrg # We need to do some special things here, and not later. 51241473d951Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 51251473d951Smrg case " $predeps $postdeps " in 51261473d951Smrg *" $deplib "*) 51271473d951Smrg if func_lalib_p "$lib"; then 51281473d951Smrg library_names= 51291473d951Smrg old_library= 51301473d951Smrg func_source "$lib" 51311473d951Smrg for l in $old_library $library_names; do 51321473d951Smrg ll="$l" 51331473d951Smrg done 51341473d951Smrg if test "X$ll" = "X$old_library" ; then # only static version available 51351473d951Smrg found=no 51361473d951Smrg func_dirname "$lib" "" "." 51371473d951Smrg ladir="$func_dirname_result" 51381473d951Smrg lib=$ladir/$old_library 51391473d951Smrg if test "$linkmode,$pass" = "prog,link"; then 51401473d951Smrg compile_deplibs="$deplib $compile_deplibs" 51411473d951Smrg finalize_deplibs="$deplib $finalize_deplibs" 51421473d951Smrg else 51431473d951Smrg deplibs="$deplib $deplibs" 51441473d951Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 51451473d951Smrg fi 51461473d951Smrg continue 51471473d951Smrg fi 51481473d951Smrg fi 51491473d951Smrg ;; 51501473d951Smrg *) ;; 51511473d951Smrg esac 51521473d951Smrg fi 51531473d951Smrg fi 51541473d951Smrg ;; # -l 51551473d951Smrg *.ltframework) 51561473d951Smrg if test "$linkmode,$pass" = "prog,link"; then 51571473d951Smrg compile_deplibs="$deplib $compile_deplibs" 51581473d951Smrg finalize_deplibs="$deplib $finalize_deplibs" 51591473d951Smrg else 51601473d951Smrg deplibs="$deplib $deplibs" 51611473d951Smrg if test "$linkmode" = lib ; then 51621473d951Smrg case "$new_inherited_linker_flags " in 51631473d951Smrg *" $deplib "*) ;; 51641473d951Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 51651473d951Smrg esac 51661473d951Smrg fi 51671473d951Smrg fi 51681473d951Smrg continue 51691473d951Smrg ;; 51701473d951Smrg -L*) 51711473d951Smrg case $linkmode in 51721473d951Smrg lib) 51731473d951Smrg deplibs="$deplib $deplibs" 51741473d951Smrg test "$pass" = conv && continue 51751473d951Smrg newdependency_libs="$deplib $newdependency_libs" 51761473d951Smrg func_stripname '-L' '' "$deplib" 51771473d951Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 51781473d951Smrg ;; 51791473d951Smrg prog) 51801473d951Smrg if test "$pass" = conv; then 51811473d951Smrg deplibs="$deplib $deplibs" 51821473d951Smrg continue 51831473d951Smrg fi 51841473d951Smrg if test "$pass" = scan; then 51851473d951Smrg deplibs="$deplib $deplibs" 51861473d951Smrg else 51871473d951Smrg compile_deplibs="$deplib $compile_deplibs" 51881473d951Smrg finalize_deplibs="$deplib $finalize_deplibs" 51891473d951Smrg fi 51901473d951Smrg func_stripname '-L' '' "$deplib" 51911473d951Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 51921473d951Smrg ;; 51931473d951Smrg *) 51941473d951Smrg func_warning "\`-L' is ignored for archives/objects" 51951473d951Smrg ;; 51961473d951Smrg esac # linkmode 51971473d951Smrg continue 51981473d951Smrg ;; # -L 51991473d951Smrg -R*) 52001473d951Smrg if test "$pass" = link; then 52011473d951Smrg func_stripname '-R' '' "$deplib" 52021473d951Smrg dir=$func_stripname_result 52031473d951Smrg # Make sure the xrpath contains only unique directories. 52041473d951Smrg case "$xrpath " in 52051473d951Smrg *" $dir "*) ;; 52061473d951Smrg *) xrpath="$xrpath $dir" ;; 52071473d951Smrg esac 52081473d951Smrg fi 52091473d951Smrg deplibs="$deplib $deplibs" 52101473d951Smrg continue 52111473d951Smrg ;; 52121473d951Smrg *.la) lib="$deplib" ;; 52131473d951Smrg *.$libext) 52141473d951Smrg if test "$pass" = conv; then 52151473d951Smrg deplibs="$deplib $deplibs" 52161473d951Smrg continue 52171473d951Smrg fi 52181473d951Smrg case $linkmode in 52191473d951Smrg lib) 52201473d951Smrg # Linking convenience modules into shared libraries is allowed, 52211473d951Smrg # but linking other static libraries is non-portable. 52221473d951Smrg case " $dlpreconveniencelibs " in 52231473d951Smrg *" $deplib "*) ;; 52241473d951Smrg *) 52251473d951Smrg valid_a_lib=no 52261473d951Smrg case $deplibs_check_method in 52271473d951Smrg match_pattern*) 52281473d951Smrg set dummy $deplibs_check_method; shift 52291473d951Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 52301473d951Smrg if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ 52311473d951Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 52321473d951Smrg valid_a_lib=yes 52331473d951Smrg fi 52341473d951Smrg ;; 52351473d951Smrg pass_all) 52361473d951Smrg valid_a_lib=yes 52371473d951Smrg ;; 52381473d951Smrg esac 52391473d951Smrg if test "$valid_a_lib" != yes; then 52401473d951Smrg $ECHO 52411473d951Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 52421473d951Smrg $ECHO "*** I have the capability to make that library automatically link in when" 52431473d951Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 52441473d951Smrg $ECHO "*** shared version of the library, which you do not appear to have" 52451473d951Smrg $ECHO "*** because the file extensions .$libext of this argument makes me believe" 52461473d951Smrg $ECHO "*** that it is just a static archive that I should not use here." 52471473d951Smrg else 52481473d951Smrg $ECHO 52491473d951Smrg $ECHO "*** Warning: Linking the shared library $output against the" 52501473d951Smrg $ECHO "*** static library $deplib is not portable!" 52511473d951Smrg deplibs="$deplib $deplibs" 52521473d951Smrg fi 52531473d951Smrg ;; 52541473d951Smrg esac 52551473d951Smrg continue 52561473d951Smrg ;; 52571473d951Smrg prog) 52581473d951Smrg if test "$pass" != link; then 52591473d951Smrg deplibs="$deplib $deplibs" 52601473d951Smrg else 52611473d951Smrg compile_deplibs="$deplib $compile_deplibs" 52621473d951Smrg finalize_deplibs="$deplib $finalize_deplibs" 52631473d951Smrg fi 52641473d951Smrg continue 52651473d951Smrg ;; 52661473d951Smrg esac # linkmode 52671473d951Smrg ;; # *.$libext 52681473d951Smrg *.lo | *.$objext) 52691473d951Smrg if test "$pass" = conv; then 52701473d951Smrg deplibs="$deplib $deplibs" 52711473d951Smrg elif test "$linkmode" = prog; then 52721473d951Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 52731473d951Smrg # If there is no dlopen support or we're linking statically, 52741473d951Smrg # we need to preload. 52751473d951Smrg newdlprefiles="$newdlprefiles $deplib" 52761473d951Smrg compile_deplibs="$deplib $compile_deplibs" 52771473d951Smrg finalize_deplibs="$deplib $finalize_deplibs" 52781473d951Smrg else 52791473d951Smrg newdlfiles="$newdlfiles $deplib" 52801473d951Smrg fi 52811473d951Smrg fi 52821473d951Smrg continue 52831473d951Smrg ;; 52841473d951Smrg %DEPLIBS%) 52851473d951Smrg alldeplibs=yes 52861473d951Smrg continue 52871473d951Smrg ;; 52881473d951Smrg esac # case $deplib 52891473d951Smrg 52901473d951Smrg if test "$found" = yes || test -f "$lib"; then : 52911473d951Smrg else 52921473d951Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 52931473d951Smrg fi 52941473d951Smrg 52951473d951Smrg # Check to see that this really is a libtool archive. 52961473d951Smrg func_lalib_unsafe_p "$lib" \ 52971473d951Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 52981473d951Smrg 52991473d951Smrg func_dirname "$lib" "" "." 53001473d951Smrg ladir="$func_dirname_result" 53011473d951Smrg 53021473d951Smrg dlname= 53031473d951Smrg dlopen= 53041473d951Smrg dlpreopen= 53051473d951Smrg libdir= 53061473d951Smrg library_names= 53071473d951Smrg old_library= 53081473d951Smrg inherited_linker_flags= 53091473d951Smrg # If the library was installed with an old release of libtool, 53101473d951Smrg # it will not redefine variables installed, or shouldnotlink 53111473d951Smrg installed=yes 53121473d951Smrg shouldnotlink=no 53131473d951Smrg avoidtemprpath= 53141473d951Smrg 53151473d951Smrg 53161473d951Smrg # Read the .la file 53171473d951Smrg func_source "$lib" 53181473d951Smrg 53191473d951Smrg # Convert "-framework foo" to "foo.ltframework" 53201473d951Smrg if test -n "$inherited_linker_flags"; then 53211473d951Smrg tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` 53221473d951Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 53231473d951Smrg case " $new_inherited_linker_flags " in 53241473d951Smrg *" $tmp_inherited_linker_flag "*) ;; 53251473d951Smrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 53261473d951Smrg esac 53271473d951Smrg done 53281473d951Smrg fi 53291473d951Smrg dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 53301473d951Smrg if test "$linkmode,$pass" = "lib,link" || 53311473d951Smrg test "$linkmode,$pass" = "prog,scan" || 53321473d951Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 53331473d951Smrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 53341473d951Smrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 53351473d951Smrg fi 53361473d951Smrg 53371473d951Smrg if test "$pass" = conv; then 53381473d951Smrg # Only check for convenience libraries 53391473d951Smrg deplibs="$lib $deplibs" 53401473d951Smrg if test -z "$libdir"; then 53411473d951Smrg if test -z "$old_library"; then 53421473d951Smrg func_fatal_error "cannot find name of link library for \`$lib'" 53431473d951Smrg fi 53441473d951Smrg # It is a libtool convenience library, so add in its objects. 53451473d951Smrg convenience="$convenience $ladir/$objdir/$old_library" 53461473d951Smrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 53471473d951Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 53481473d951Smrg func_fatal_error "\`$lib' is not a convenience library" 53491473d951Smrg fi 53501473d951Smrg tmp_libs= 53511473d951Smrg for deplib in $dependency_libs; do 53521473d951Smrg deplibs="$deplib $deplibs" 53531473d951Smrg if $opt_duplicate_deps ; then 53541473d951Smrg case "$tmp_libs " in 53551473d951Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 53561473d951Smrg esac 53571473d951Smrg fi 53581473d951Smrg tmp_libs="$tmp_libs $deplib" 53591473d951Smrg done 53601473d951Smrg continue 53611473d951Smrg fi # $pass = conv 53621473d951Smrg 53631473d951Smrg 53641473d951Smrg # Get the name of the library we link against. 53651473d951Smrg linklib= 53661473d951Smrg for l in $old_library $library_names; do 53671473d951Smrg linklib="$l" 53681473d951Smrg done 53691473d951Smrg if test -z "$linklib"; then 53701473d951Smrg func_fatal_error "cannot find name of link library for \`$lib'" 53711473d951Smrg fi 53721473d951Smrg 53731473d951Smrg # This library was specified with -dlopen. 53741473d951Smrg if test "$pass" = dlopen; then 53751473d951Smrg if test -z "$libdir"; then 53761473d951Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 53771473d951Smrg fi 53781473d951Smrg if test -z "$dlname" || 53791473d951Smrg test "$dlopen_support" != yes || 53801473d951Smrg test "$build_libtool_libs" = no; then 53811473d951Smrg # If there is no dlname, no dlopen support or we're linking 53821473d951Smrg # statically, we need to preload. We also need to preload any 53831473d951Smrg # dependent libraries so libltdl's deplib preloader doesn't 53841473d951Smrg # bomb out in the load deplibs phase. 53851473d951Smrg dlprefiles="$dlprefiles $lib $dependency_libs" 53861473d951Smrg else 53871473d951Smrg newdlfiles="$newdlfiles $lib" 53881473d951Smrg fi 53891473d951Smrg continue 53901473d951Smrg fi # $pass = dlopen 53911473d951Smrg 53921473d951Smrg # We need an absolute path. 53931473d951Smrg case $ladir in 53941473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 53951473d951Smrg *) 53961473d951Smrg abs_ladir=`cd "$ladir" && pwd` 53971473d951Smrg if test -z "$abs_ladir"; then 53981473d951Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 53991473d951Smrg func_warning "passing it literally to the linker, although it might fail" 54001473d951Smrg abs_ladir="$ladir" 54011473d951Smrg fi 54021473d951Smrg ;; 54031473d951Smrg esac 54041473d951Smrg func_basename "$lib" 54051473d951Smrg laname="$func_basename_result" 54061473d951Smrg 54071473d951Smrg # Find the relevant object directory and library name. 54081473d951Smrg if test "X$installed" = Xyes; then 54091473d951Smrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 54101473d951Smrg func_warning "library \`$lib' was moved." 54111473d951Smrg dir="$ladir" 54121473d951Smrg absdir="$abs_ladir" 54131473d951Smrg libdir="$abs_ladir" 54141473d951Smrg else 54151473d951Smrg dir="$libdir" 54161473d951Smrg absdir="$libdir" 54171473d951Smrg fi 54181473d951Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 54191473d951Smrg else 54201473d951Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 54211473d951Smrg dir="$ladir" 54221473d951Smrg absdir="$abs_ladir" 54231473d951Smrg # Remove this search path later 54241473d951Smrg notinst_path="$notinst_path $abs_ladir" 54251473d951Smrg else 54261473d951Smrg dir="$ladir/$objdir" 54271473d951Smrg absdir="$abs_ladir/$objdir" 54281473d951Smrg # Remove this search path later 54291473d951Smrg notinst_path="$notinst_path $abs_ladir" 54301473d951Smrg fi 54311473d951Smrg fi # $installed = yes 54321473d951Smrg func_stripname 'lib' '.la' "$laname" 54331473d951Smrg name=$func_stripname_result 54341473d951Smrg 54351473d951Smrg # This library was specified with -dlpreopen. 54361473d951Smrg if test "$pass" = dlpreopen; then 54371473d951Smrg if test -z "$libdir" && test "$linkmode" = prog; then 54381473d951Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 54391473d951Smrg fi 54401473d951Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 54411473d951Smrg # are required to link). 54421473d951Smrg if test -n "$old_library"; then 54431473d951Smrg newdlprefiles="$newdlprefiles $dir/$old_library" 54441473d951Smrg # Keep a list of preopened convenience libraries to check 54451473d951Smrg # that they are being used correctly in the link pass. 54461473d951Smrg test -z "$libdir" && \ 54471473d951Smrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 54481473d951Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 54491473d951Smrg elif test -n "$dlname"; then 54501473d951Smrg newdlprefiles="$newdlprefiles $dir/$dlname" 54511473d951Smrg else 54521473d951Smrg newdlprefiles="$newdlprefiles $dir/$linklib" 54531473d951Smrg fi 54541473d951Smrg fi # $pass = dlpreopen 54551473d951Smrg 54561473d951Smrg if test -z "$libdir"; then 54571473d951Smrg # Link the convenience library 54581473d951Smrg if test "$linkmode" = lib; then 54591473d951Smrg deplibs="$dir/$old_library $deplibs" 54601473d951Smrg elif test "$linkmode,$pass" = "prog,link"; then 54611473d951Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 54621473d951Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 54631473d951Smrg else 54641473d951Smrg deplibs="$lib $deplibs" # used for prog,scan pass 54651473d951Smrg fi 54661473d951Smrg continue 54671473d951Smrg fi 54681473d951Smrg 54691473d951Smrg 54701473d951Smrg if test "$linkmode" = prog && test "$pass" != link; then 54711473d951Smrg newlib_search_path="$newlib_search_path $ladir" 54721473d951Smrg deplibs="$lib $deplibs" 54731473d951Smrg 54741473d951Smrg linkalldeplibs=no 54751473d951Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 54761473d951Smrg test "$build_libtool_libs" = no; then 54771473d951Smrg linkalldeplibs=yes 54781473d951Smrg fi 54791473d951Smrg 54801473d951Smrg tmp_libs= 54811473d951Smrg for deplib in $dependency_libs; do 54821473d951Smrg case $deplib in 54831473d951Smrg -L*) func_stripname '-L' '' "$deplib" 54841473d951Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 54851473d951Smrg ;; 54861473d951Smrg esac 54871473d951Smrg # Need to link against all dependency_libs? 54881473d951Smrg if test "$linkalldeplibs" = yes; then 54891473d951Smrg deplibs="$deplib $deplibs" 54901473d951Smrg else 54911473d951Smrg # Need to hardcode shared library paths 54921473d951Smrg # or/and link against static libraries 54931473d951Smrg newdependency_libs="$deplib $newdependency_libs" 54941473d951Smrg fi 54951473d951Smrg if $opt_duplicate_deps ; then 54961473d951Smrg case "$tmp_libs " in 54971473d951Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 54981473d951Smrg esac 54991473d951Smrg fi 55001473d951Smrg tmp_libs="$tmp_libs $deplib" 55011473d951Smrg done # for deplib 55021473d951Smrg continue 55031473d951Smrg fi # $linkmode = prog... 55041473d951Smrg 55051473d951Smrg if test "$linkmode,$pass" = "prog,link"; then 55061473d951Smrg if test -n "$library_names" && 55071473d951Smrg { { test "$prefer_static_libs" = no || 55081473d951Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 55091473d951Smrg test -z "$old_library"; }; then 55101473d951Smrg # We need to hardcode the library path 55111473d951Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 55121473d951Smrg # Make sure the rpath contains only unique directories. 55131473d951Smrg case "$temp_rpath:" in 55141473d951Smrg *"$absdir:"*) ;; 55151473d951Smrg *) temp_rpath="$temp_rpath$absdir:" ;; 55161473d951Smrg esac 55171473d951Smrg fi 55181473d951Smrg 55191473d951Smrg # Hardcode the library path. 55201473d951Smrg # Skip directories that are in the system default run-time 55211473d951Smrg # search path. 55221473d951Smrg case " $sys_lib_dlsearch_path " in 55231473d951Smrg *" $absdir "*) ;; 55241473d951Smrg *) 55251473d951Smrg case "$compile_rpath " in 55261473d951Smrg *" $absdir "*) ;; 55271473d951Smrg *) compile_rpath="$compile_rpath $absdir" 55281473d951Smrg esac 55291473d951Smrg ;; 55301473d951Smrg esac 55311473d951Smrg case " $sys_lib_dlsearch_path " in 55321473d951Smrg *" $libdir "*) ;; 55331473d951Smrg *) 55341473d951Smrg case "$finalize_rpath " in 55351473d951Smrg *" $libdir "*) ;; 55361473d951Smrg *) finalize_rpath="$finalize_rpath $libdir" 55371473d951Smrg esac 55381473d951Smrg ;; 55391473d951Smrg esac 55401473d951Smrg fi # $linkmode,$pass = prog,link... 55411473d951Smrg 55421473d951Smrg if test "$alldeplibs" = yes && 55431473d951Smrg { test "$deplibs_check_method" = pass_all || 55441473d951Smrg { test "$build_libtool_libs" = yes && 55451473d951Smrg test -n "$library_names"; }; }; then 55461473d951Smrg # We only need to search for static libraries 55471473d951Smrg continue 55481473d951Smrg fi 55491473d951Smrg fi 55501473d951Smrg 55511473d951Smrg link_static=no # Whether the deplib will be linked statically 55521473d951Smrg use_static_libs=$prefer_static_libs 55531473d951Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 55541473d951Smrg use_static_libs=no 55551473d951Smrg fi 55561473d951Smrg if test -n "$library_names" && 55571473d951Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 55581473d951Smrg case $host in 55591473d951Smrg *cygwin* | *mingw* | *cegcc*) 55601473d951Smrg # No point in relinking DLLs because paths are not encoded 55611473d951Smrg notinst_deplibs="$notinst_deplibs $lib" 55621473d951Smrg need_relink=no 55631473d951Smrg ;; 55641473d951Smrg *) 55651473d951Smrg if test "$installed" = no; then 55661473d951Smrg notinst_deplibs="$notinst_deplibs $lib" 55671473d951Smrg need_relink=yes 55681473d951Smrg fi 55691473d951Smrg ;; 55701473d951Smrg esac 55711473d951Smrg # This is a shared library 55721473d951Smrg 55731473d951Smrg # Warn about portability, can't link against -module's on some 55741473d951Smrg # systems (darwin). Don't bleat about dlopened modules though! 55751473d951Smrg dlopenmodule="" 55761473d951Smrg for dlpremoduletest in $dlprefiles; do 55771473d951Smrg if test "X$dlpremoduletest" = "X$lib"; then 55781473d951Smrg dlopenmodule="$dlpremoduletest" 55791473d951Smrg break 55801473d951Smrg fi 55811473d951Smrg done 55821473d951Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 55831473d951Smrg $ECHO 55841473d951Smrg if test "$linkmode" = prog; then 55851473d951Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 55861473d951Smrg else 55871473d951Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 55881473d951Smrg fi 55891473d951Smrg $ECHO "*** $linklib is not portable!" 55901473d951Smrg fi 55911473d951Smrg if test "$linkmode" = lib && 55921473d951Smrg test "$hardcode_into_libs" = yes; then 55931473d951Smrg # Hardcode the library path. 55941473d951Smrg # Skip directories that are in the system default run-time 55951473d951Smrg # search path. 55961473d951Smrg case " $sys_lib_dlsearch_path " in 55971473d951Smrg *" $absdir "*) ;; 55981473d951Smrg *) 55991473d951Smrg case "$compile_rpath " in 56001473d951Smrg *" $absdir "*) ;; 56011473d951Smrg *) compile_rpath="$compile_rpath $absdir" 56021473d951Smrg esac 56031473d951Smrg ;; 56041473d951Smrg esac 56051473d951Smrg case " $sys_lib_dlsearch_path " in 56061473d951Smrg *" $libdir "*) ;; 56071473d951Smrg *) 56081473d951Smrg case "$finalize_rpath " in 56091473d951Smrg *" $libdir "*) ;; 56101473d951Smrg *) finalize_rpath="$finalize_rpath $libdir" 56111473d951Smrg esac 56121473d951Smrg ;; 56131473d951Smrg esac 56141473d951Smrg fi 56151473d951Smrg 56161473d951Smrg if test -n "$old_archive_from_expsyms_cmds"; then 56171473d951Smrg # figure out the soname 56181473d951Smrg set dummy $library_names 56191473d951Smrg shift 56201473d951Smrg realname="$1" 56211473d951Smrg shift 56221473d951Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 56231473d951Smrg # use dlname if we got it. it's perfectly good, no? 56241473d951Smrg if test -n "$dlname"; then 56251473d951Smrg soname="$dlname" 56261473d951Smrg elif test -n "$soname_spec"; then 56271473d951Smrg # bleh windows 56281473d951Smrg case $host in 56291473d951Smrg *cygwin* | mingw* | *cegcc*) 56301473d951Smrg func_arith $current - $age 56311473d951Smrg major=$func_arith_result 56321473d951Smrg versuffix="-$major" 56331473d951Smrg ;; 56341473d951Smrg esac 56351473d951Smrg eval soname=\"$soname_spec\" 56361473d951Smrg else 56371473d951Smrg soname="$realname" 56381473d951Smrg fi 56391473d951Smrg 56401473d951Smrg # Make a new name for the extract_expsyms_cmds to use 56411473d951Smrg soroot="$soname" 56421473d951Smrg func_basename "$soroot" 56431473d951Smrg soname="$func_basename_result" 56441473d951Smrg func_stripname 'lib' '.dll' "$soname" 56451473d951Smrg newlib=libimp-$func_stripname_result.a 56461473d951Smrg 56471473d951Smrg # If the library has no export list, then create one now 56481473d951Smrg if test -f "$output_objdir/$soname-def"; then : 56491473d951Smrg else 56501473d951Smrg func_verbose "extracting exported symbol list from \`$soname'" 56511473d951Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 56521473d951Smrg fi 56531473d951Smrg 56541473d951Smrg # Create $newlib 56551473d951Smrg if test -f "$output_objdir/$newlib"; then :; else 56561473d951Smrg func_verbose "generating import library for \`$soname'" 56571473d951Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 56581473d951Smrg fi 56591473d951Smrg # make sure the library variables are pointing to the new library 56601473d951Smrg dir=$output_objdir 56611473d951Smrg linklib=$newlib 56621473d951Smrg fi # test -n "$old_archive_from_expsyms_cmds" 56631473d951Smrg 56641473d951Smrg if test "$linkmode" = prog || test "$mode" != relink; then 56651473d951Smrg add_shlibpath= 56661473d951Smrg add_dir= 56671473d951Smrg add= 56681473d951Smrg lib_linked=yes 56691473d951Smrg case $hardcode_action in 56701473d951Smrg immediate | unsupported) 56711473d951Smrg if test "$hardcode_direct" = no; then 56721473d951Smrg add="$dir/$linklib" 56731473d951Smrg case $host in 56741473d951Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 56751473d951Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 56761473d951Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 56771473d951Smrg *-*-unixware7*) add_dir="-L$dir" ;; 56781473d951Smrg *-*-darwin* ) 56791473d951Smrg # if the lib is a (non-dlopened) module then we can not 56801473d951Smrg # link against it, someone is ignoring the earlier warnings 56811473d951Smrg if /usr/bin/file -L $add 2> /dev/null | 56821473d951Smrg $GREP ": [^:]* bundle" >/dev/null ; then 56831473d951Smrg if test "X$dlopenmodule" != "X$lib"; then 56841473d951Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 56851473d951Smrg if test -z "$old_library" ; then 56861473d951Smrg $ECHO 56871473d951Smrg $ECHO "*** And there doesn't seem to be a static archive available" 56881473d951Smrg $ECHO "*** The link will probably fail, sorry" 56891473d951Smrg else 56901473d951Smrg add="$dir/$old_library" 56911473d951Smrg fi 56921473d951Smrg elif test -n "$old_library"; then 56931473d951Smrg add="$dir/$old_library" 56941473d951Smrg fi 56951473d951Smrg fi 56961473d951Smrg esac 56971473d951Smrg elif test "$hardcode_minus_L" = no; then 56981473d951Smrg case $host in 56991473d951Smrg *-*-sunos*) add_shlibpath="$dir" ;; 57001473d951Smrg esac 57011473d951Smrg add_dir="-L$dir" 57021473d951Smrg add="-l$name" 57031473d951Smrg elif test "$hardcode_shlibpath_var" = no; then 57041473d951Smrg add_shlibpath="$dir" 57051473d951Smrg add="-l$name" 57061473d951Smrg else 57071473d951Smrg lib_linked=no 57081473d951Smrg fi 57091473d951Smrg ;; 57101473d951Smrg relink) 57111473d951Smrg if test "$hardcode_direct" = yes && 57121473d951Smrg test "$hardcode_direct_absolute" = no; then 57131473d951Smrg add="$dir/$linklib" 57141473d951Smrg elif test "$hardcode_minus_L" = yes; then 57151473d951Smrg add_dir="-L$dir" 57161473d951Smrg # Try looking first in the location we're being installed to. 57171473d951Smrg if test -n "$inst_prefix_dir"; then 57181473d951Smrg case $libdir in 57191473d951Smrg [\\/]*) 57201473d951Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 57211473d951Smrg ;; 57221473d951Smrg esac 57231473d951Smrg fi 57241473d951Smrg add="-l$name" 57251473d951Smrg elif test "$hardcode_shlibpath_var" = yes; then 57261473d951Smrg add_shlibpath="$dir" 57271473d951Smrg add="-l$name" 57281473d951Smrg else 57291473d951Smrg lib_linked=no 57301473d951Smrg fi 57311473d951Smrg ;; 57321473d951Smrg *) lib_linked=no ;; 57331473d951Smrg esac 57341473d951Smrg 57351473d951Smrg if test "$lib_linked" != yes; then 57361473d951Smrg func_fatal_configuration "unsupported hardcode properties" 57371473d951Smrg fi 57381473d951Smrg 57391473d951Smrg if test -n "$add_shlibpath"; then 57401473d951Smrg case :$compile_shlibpath: in 57411473d951Smrg *":$add_shlibpath:"*) ;; 57421473d951Smrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 57431473d951Smrg esac 57441473d951Smrg fi 57451473d951Smrg if test "$linkmode" = prog; then 57461473d951Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 57471473d951Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 57481473d951Smrg else 57491473d951Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 57501473d951Smrg test -n "$add" && deplibs="$add $deplibs" 57511473d951Smrg if test "$hardcode_direct" != yes && 57521473d951Smrg test "$hardcode_minus_L" != yes && 57531473d951Smrg test "$hardcode_shlibpath_var" = yes; then 57541473d951Smrg case :$finalize_shlibpath: in 57551473d951Smrg *":$libdir:"*) ;; 57561473d951Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 57571473d951Smrg esac 57581473d951Smrg fi 57591473d951Smrg fi 57601473d951Smrg fi 57611473d951Smrg 57621473d951Smrg if test "$linkmode" = prog || test "$mode" = relink; then 57631473d951Smrg add_shlibpath= 57641473d951Smrg add_dir= 57651473d951Smrg add= 57661473d951Smrg # Finalize command for both is simple: just hardcode it. 57671473d951Smrg if test "$hardcode_direct" = yes && 57681473d951Smrg test "$hardcode_direct_absolute" = no; then 57691473d951Smrg add="$libdir/$linklib" 57701473d951Smrg elif test "$hardcode_minus_L" = yes; then 57711473d951Smrg add_dir="-L$libdir" 57721473d951Smrg add="-l$name" 57731473d951Smrg elif test "$hardcode_shlibpath_var" = yes; then 57741473d951Smrg case :$finalize_shlibpath: in 57751473d951Smrg *":$libdir:"*) ;; 57761473d951Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 57771473d951Smrg esac 57781473d951Smrg add="-l$name" 57791473d951Smrg elif test "$hardcode_automatic" = yes; then 57801473d951Smrg if test -n "$inst_prefix_dir" && 57811473d951Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 57821473d951Smrg add="$inst_prefix_dir$libdir/$linklib" 57831473d951Smrg else 57841473d951Smrg add="$libdir/$linklib" 57851473d951Smrg fi 57861473d951Smrg else 57871473d951Smrg # We cannot seem to hardcode it, guess we'll fake it. 57881473d951Smrg add_dir="-L$libdir" 57891473d951Smrg # Try looking first in the location we're being installed to. 57901473d951Smrg if test -n "$inst_prefix_dir"; then 57911473d951Smrg case $libdir in 57921473d951Smrg [\\/]*) 57931473d951Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 57941473d951Smrg ;; 57951473d951Smrg esac 57961473d951Smrg fi 57971473d951Smrg add="-l$name" 57981473d951Smrg fi 57991473d951Smrg 58001473d951Smrg if test "$linkmode" = prog; then 58011473d951Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 58021473d951Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 58031473d951Smrg else 58041473d951Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 58051473d951Smrg test -n "$add" && deplibs="$add $deplibs" 58061473d951Smrg fi 58071473d951Smrg fi 58081473d951Smrg elif test "$linkmode" = prog; then 58091473d951Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 58101473d951Smrg # is not unsupported. This is valid on all known static and 58111473d951Smrg # shared platforms. 58121473d951Smrg if test "$hardcode_direct" != unsupported; then 58131473d951Smrg test -n "$old_library" && linklib="$old_library" 58141473d951Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 58151473d951Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 58161473d951Smrg else 58171473d951Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 58181473d951Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 58191473d951Smrg fi 58201473d951Smrg elif test "$build_libtool_libs" = yes; then 58211473d951Smrg # Not a shared library 58221473d951Smrg if test "$deplibs_check_method" != pass_all; then 58231473d951Smrg # We're trying link a shared library against a static one 58241473d951Smrg # but the system doesn't support it. 58251473d951Smrg 58261473d951Smrg # Just print a warning and add the library to dependency_libs so 58271473d951Smrg # that the program can be linked against the static library. 58281473d951Smrg $ECHO 58291473d951Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 58301473d951Smrg $ECHO "*** I have the capability to make that library automatically link in when" 58311473d951Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 58321473d951Smrg $ECHO "*** shared version of the library, which you do not appear to have." 58331473d951Smrg if test "$module" = yes; then 58341473d951Smrg $ECHO "*** But as you try to build a module library, libtool will still create " 58351473d951Smrg $ECHO "*** a static module, that should work as long as the dlopening application" 58361473d951Smrg $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." 58371473d951Smrg if test -z "$global_symbol_pipe"; then 58381473d951Smrg $ECHO 58391473d951Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 58401473d951Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 58411473d951Smrg $ECHO "*** not find such a program. So, this module is probably useless." 58421473d951Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 58431473d951Smrg fi 58441473d951Smrg if test "$build_old_libs" = no; then 58451473d951Smrg build_libtool_libs=module 58461473d951Smrg build_old_libs=yes 58471473d951Smrg else 58481473d951Smrg build_libtool_libs=no 58491473d951Smrg fi 58501473d951Smrg fi 58511473d951Smrg else 58521473d951Smrg deplibs="$dir/$old_library $deplibs" 58531473d951Smrg link_static=yes 58541473d951Smrg fi 58551473d951Smrg fi # link shared/static library? 58561473d951Smrg 58571473d951Smrg if test "$linkmode" = lib; then 58581473d951Smrg if test -n "$dependency_libs" && 58591473d951Smrg { test "$hardcode_into_libs" != yes || 58601473d951Smrg test "$build_old_libs" = yes || 58611473d951Smrg test "$link_static" = yes; }; then 58621473d951Smrg # Extract -R from dependency_libs 58631473d951Smrg temp_deplibs= 58641473d951Smrg for libdir in $dependency_libs; do 58651473d951Smrg case $libdir in 58661473d951Smrg -R*) func_stripname '-R' '' "$libdir" 58671473d951Smrg temp_xrpath=$func_stripname_result 58681473d951Smrg case " $xrpath " in 58691473d951Smrg *" $temp_xrpath "*) ;; 58701473d951Smrg *) xrpath="$xrpath $temp_xrpath";; 58711473d951Smrg esac;; 58721473d951Smrg *) temp_deplibs="$temp_deplibs $libdir";; 58731473d951Smrg esac 58741473d951Smrg done 58751473d951Smrg dependency_libs="$temp_deplibs" 58761473d951Smrg fi 58771473d951Smrg 58781473d951Smrg newlib_search_path="$newlib_search_path $absdir" 58791473d951Smrg # Link against this library 58801473d951Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 58811473d951Smrg # ... and its dependency_libs 58821473d951Smrg tmp_libs= 58831473d951Smrg for deplib in $dependency_libs; do 58841473d951Smrg newdependency_libs="$deplib $newdependency_libs" 58851473d951Smrg if $opt_duplicate_deps ; then 58861473d951Smrg case "$tmp_libs " in 58871473d951Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 58881473d951Smrg esac 58891473d951Smrg fi 58901473d951Smrg tmp_libs="$tmp_libs $deplib" 58911473d951Smrg done 58921473d951Smrg 58931473d951Smrg if test "$link_all_deplibs" != no; then 58941473d951Smrg # Add the search paths of all dependency libraries 58951473d951Smrg for deplib in $dependency_libs; do 58961473d951Smrg case $deplib in 58971473d951Smrg -L*) path="$deplib" ;; 58981473d951Smrg *.la) 58991473d951Smrg func_dirname "$deplib" "" "." 59001473d951Smrg dir="$func_dirname_result" 59011473d951Smrg # We need an absolute path. 59021473d951Smrg case $dir in 59031473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 59041473d951Smrg *) 59051473d951Smrg absdir=`cd "$dir" && pwd` 59061473d951Smrg if test -z "$absdir"; then 59071473d951Smrg func_warning "cannot determine absolute directory name of \`$dir'" 59081473d951Smrg absdir="$dir" 59091473d951Smrg fi 59101473d951Smrg ;; 59111473d951Smrg esac 59121473d951Smrg if $GREP "^installed=no" $deplib > /dev/null; then 59131473d951Smrg case $host in 59141473d951Smrg *-*-darwin*) 59151473d951Smrg depdepl= 59161473d951Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 59171473d951Smrg if test -n "$deplibrary_names" ; then 59181473d951Smrg for tmp in $deplibrary_names ; do 59191473d951Smrg depdepl=$tmp 59201473d951Smrg done 59211473d951Smrg if test -f "$absdir/$objdir/$depdepl" ; then 59221473d951Smrg depdepl="$absdir/$objdir/$depdepl" 59231473d951Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 59241473d951Smrg if test -z "$darwin_install_name"; then 59251473d951Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 59261473d951Smrg fi 59271473d951Smrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 59281473d951Smrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 59291473d951Smrg path= 59301473d951Smrg fi 59311473d951Smrg fi 59321473d951Smrg ;; 59331473d951Smrg *) 59341473d951Smrg path="-L$absdir/$objdir" 59351473d951Smrg ;; 59361473d951Smrg esac 59371473d951Smrg else 59381473d951Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 59391473d951Smrg test -z "$libdir" && \ 59401473d951Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 59411473d951Smrg test "$absdir" != "$libdir" && \ 59421473d951Smrg func_warning "\`$deplib' seems to be moved" 59431473d951Smrg 59441473d951Smrg path="-L$absdir" 59451473d951Smrg fi 59461473d951Smrg ;; 59471473d951Smrg esac 59481473d951Smrg case " $deplibs " in 59491473d951Smrg *" $path "*) ;; 59501473d951Smrg *) deplibs="$path $deplibs" ;; 59511473d951Smrg esac 59521473d951Smrg done 59531473d951Smrg fi # link_all_deplibs != no 59541473d951Smrg fi # linkmode = lib 59551473d951Smrg done # for deplib in $libs 59561473d951Smrg if test "$pass" = link; then 59571473d951Smrg if test "$linkmode" = "prog"; then 59581473d951Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 59591473d951Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 59601473d951Smrg else 59611473d951Smrg compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 59621473d951Smrg fi 59631473d951Smrg fi 59641473d951Smrg dependency_libs="$newdependency_libs" 59651473d951Smrg if test "$pass" = dlpreopen; then 59661473d951Smrg # Link the dlpreopened libraries before other libraries 59671473d951Smrg for deplib in $save_deplibs; do 59681473d951Smrg deplibs="$deplib $deplibs" 59691473d951Smrg done 59701473d951Smrg fi 59711473d951Smrg if test "$pass" != dlopen; then 59721473d951Smrg if test "$pass" != conv; then 59731473d951Smrg # Make sure lib_search_path contains only unique directories. 59741473d951Smrg lib_search_path= 59751473d951Smrg for dir in $newlib_search_path; do 59761473d951Smrg case "$lib_search_path " in 59771473d951Smrg *" $dir "*) ;; 59781473d951Smrg *) lib_search_path="$lib_search_path $dir" ;; 59791473d951Smrg esac 59801473d951Smrg done 59811473d951Smrg newlib_search_path= 59821473d951Smrg fi 59831473d951Smrg 59841473d951Smrg if test "$linkmode,$pass" != "prog,link"; then 59851473d951Smrg vars="deplibs" 59861473d951Smrg else 59871473d951Smrg vars="compile_deplibs finalize_deplibs" 59881473d951Smrg fi 59891473d951Smrg for var in $vars dependency_libs; do 59901473d951Smrg # Add libraries to $var in reverse order 59911473d951Smrg eval tmp_libs=\"\$$var\" 59921473d951Smrg new_libs= 59931473d951Smrg for deplib in $tmp_libs; do 59941473d951Smrg # FIXME: Pedantically, this is the right thing to do, so 59951473d951Smrg # that some nasty dependency loop isn't accidentally 59961473d951Smrg # broken: 59971473d951Smrg #new_libs="$deplib $new_libs" 59981473d951Smrg # Pragmatically, this seems to cause very few problems in 59991473d951Smrg # practice: 60001473d951Smrg case $deplib in 60011473d951Smrg -L*) new_libs="$deplib $new_libs" ;; 60021473d951Smrg -R*) ;; 60031473d951Smrg *) 60041473d951Smrg # And here is the reason: when a library appears more 60051473d951Smrg # than once as an explicit dependence of a library, or 60061473d951Smrg # is implicitly linked in more than once by the 60071473d951Smrg # compiler, it is considered special, and multiple 60081473d951Smrg # occurrences thereof are not removed. Compare this 60091473d951Smrg # with having the same library being listed as a 60101473d951Smrg # dependency of multiple other libraries: in this case, 60111473d951Smrg # we know (pedantically, we assume) the library does not 60121473d951Smrg # need to be listed more than once, so we keep only the 60131473d951Smrg # last copy. This is not always right, but it is rare 60141473d951Smrg # enough that we require users that really mean to play 60151473d951Smrg # such unportable linking tricks to link the library 60161473d951Smrg # using -Wl,-lname, so that libtool does not consider it 60171473d951Smrg # for duplicate removal. 60181473d951Smrg case " $specialdeplibs " in 60191473d951Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 60201473d951Smrg *) 60211473d951Smrg case " $new_libs " in 60221473d951Smrg *" $deplib "*) ;; 60231473d951Smrg *) new_libs="$deplib $new_libs" ;; 60241473d951Smrg esac 60251473d951Smrg ;; 60261473d951Smrg esac 60271473d951Smrg ;; 60281473d951Smrg esac 60291473d951Smrg done 60301473d951Smrg tmp_libs= 60311473d951Smrg for deplib in $new_libs; do 60321473d951Smrg case $deplib in 60331473d951Smrg -L*) 60341473d951Smrg case " $tmp_libs " in 60351473d951Smrg *" $deplib "*) ;; 60361473d951Smrg *) tmp_libs="$tmp_libs $deplib" ;; 60371473d951Smrg esac 60381473d951Smrg ;; 60391473d951Smrg *) tmp_libs="$tmp_libs $deplib" ;; 60401473d951Smrg esac 60411473d951Smrg done 60421473d951Smrg eval $var=\"$tmp_libs\" 60431473d951Smrg done # for var 60441473d951Smrg fi 60451473d951Smrg # Last step: remove runtime libs from dependency_libs 60461473d951Smrg # (they stay in deplibs) 60471473d951Smrg tmp_libs= 60481473d951Smrg for i in $dependency_libs ; do 60491473d951Smrg case " $predeps $postdeps $compiler_lib_search_path " in 60501473d951Smrg *" $i "*) 60511473d951Smrg i="" 60521473d951Smrg ;; 60531473d951Smrg esac 60541473d951Smrg if test -n "$i" ; then 60551473d951Smrg tmp_libs="$tmp_libs $i" 60561473d951Smrg fi 60571473d951Smrg done 60581473d951Smrg dependency_libs=$tmp_libs 60591473d951Smrg done # for pass 60601473d951Smrg if test "$linkmode" = prog; then 60611473d951Smrg dlfiles="$newdlfiles" 60621473d951Smrg fi 60631473d951Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 60641473d951Smrg dlprefiles="$newdlprefiles" 60651473d951Smrg fi 60661473d951Smrg 60671473d951Smrg case $linkmode in 60681473d951Smrg oldlib) 60691473d951Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 60701473d951Smrg func_warning "\`-dlopen' is ignored for archives" 60711473d951Smrg fi 60721473d951Smrg 60731473d951Smrg case " $deplibs" in 60741473d951Smrg *\ -l* | *\ -L*) 60751473d951Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 60761473d951Smrg esac 60771473d951Smrg 60781473d951Smrg test -n "$rpath" && \ 60791473d951Smrg func_warning "\`-rpath' is ignored for archives" 60801473d951Smrg 60811473d951Smrg test -n "$xrpath" && \ 60821473d951Smrg func_warning "\`-R' is ignored for archives" 60831473d951Smrg 60841473d951Smrg test -n "$vinfo" && \ 60851473d951Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 60861473d951Smrg 60871473d951Smrg test -n "$release" && \ 60881473d951Smrg func_warning "\`-release' is ignored for archives" 60891473d951Smrg 60901473d951Smrg test -n "$export_symbols$export_symbols_regex" && \ 60911473d951Smrg func_warning "\`-export-symbols' is ignored for archives" 60921473d951Smrg 60931473d951Smrg # Now set the variables for building old libraries. 60941473d951Smrg build_libtool_libs=no 60951473d951Smrg oldlibs="$output" 60961473d951Smrg objs="$objs$old_deplibs" 60971473d951Smrg ;; 60981473d951Smrg 60991473d951Smrg lib) 61001473d951Smrg # Make sure we only generate libraries of the form `libNAME.la'. 61011473d951Smrg case $outputname in 61021473d951Smrg lib*) 61031473d951Smrg func_stripname 'lib' '.la' "$outputname" 61041473d951Smrg name=$func_stripname_result 61051473d951Smrg eval shared_ext=\"$shrext_cmds\" 61061473d951Smrg eval libname=\"$libname_spec\" 61071473d951Smrg ;; 61081473d951Smrg *) 61091473d951Smrg test "$module" = no && \ 61101473d951Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 61111473d951Smrg 61121473d951Smrg if test "$need_lib_prefix" != no; then 61131473d951Smrg # Add the "lib" prefix for modules if required 61141473d951Smrg func_stripname '' '.la' "$outputname" 61151473d951Smrg name=$func_stripname_result 61161473d951Smrg eval shared_ext=\"$shrext_cmds\" 61171473d951Smrg eval libname=\"$libname_spec\" 61181473d951Smrg else 61191473d951Smrg func_stripname '' '.la' "$outputname" 61201473d951Smrg libname=$func_stripname_result 61211473d951Smrg fi 61221473d951Smrg ;; 61231473d951Smrg esac 61241473d951Smrg 61251473d951Smrg if test -n "$objs"; then 61261473d951Smrg if test "$deplibs_check_method" != pass_all; then 61271473d951Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 61281473d951Smrg else 61291473d951Smrg $ECHO 61301473d951Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 61311473d951Smrg $ECHO "*** objects $objs is not portable!" 61321473d951Smrg libobjs="$libobjs $objs" 61331473d951Smrg fi 61341473d951Smrg fi 61351473d951Smrg 61361473d951Smrg test "$dlself" != no && \ 61371473d951Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 61381473d951Smrg 61391473d951Smrg set dummy $rpath 61401473d951Smrg shift 61411473d951Smrg test "$#" -gt 1 && \ 61421473d951Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 61431473d951Smrg 61441473d951Smrg install_libdir="$1" 61451473d951Smrg 61461473d951Smrg oldlibs= 61471473d951Smrg if test -z "$rpath"; then 61481473d951Smrg if test "$build_libtool_libs" = yes; then 61491473d951Smrg # Building a libtool convenience library. 61501473d951Smrg # Some compilers have problems with a `.al' extension so 61511473d951Smrg # convenience libraries should have the same extension an 61521473d951Smrg # archive normally would. 61531473d951Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 61541473d951Smrg build_libtool_libs=convenience 61551473d951Smrg build_old_libs=yes 61561473d951Smrg fi 61571473d951Smrg 61581473d951Smrg test -n "$vinfo" && \ 61591473d951Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 61601473d951Smrg 61611473d951Smrg test -n "$release" && \ 61621473d951Smrg func_warning "\`-release' is ignored for convenience libraries" 61631473d951Smrg else 61641473d951Smrg 61651473d951Smrg # Parse the version information argument. 61661473d951Smrg save_ifs="$IFS"; IFS=':' 61671473d951Smrg set dummy $vinfo 0 0 0 61681473d951Smrg shift 61691473d951Smrg IFS="$save_ifs" 61701473d951Smrg 61711473d951Smrg test -n "$7" && \ 61721473d951Smrg func_fatal_help "too many parameters to \`-version-info'" 61731473d951Smrg 61741473d951Smrg # convert absolute version numbers to libtool ages 61751473d951Smrg # this retains compatibility with .la files and attempts 61761473d951Smrg # to make the code below a bit more comprehensible 61771473d951Smrg 61781473d951Smrg case $vinfo_number in 61791473d951Smrg yes) 61801473d951Smrg number_major="$1" 61811473d951Smrg number_minor="$2" 61821473d951Smrg number_revision="$3" 61831473d951Smrg # 61841473d951Smrg # There are really only two kinds -- those that 61851473d951Smrg # use the current revision as the major version 61861473d951Smrg # and those that subtract age and use age as 61871473d951Smrg # a minor version. But, then there is irix 61881473d951Smrg # which has an extra 1 added just for fun 61891473d951Smrg # 61901473d951Smrg case $version_type in 61911473d951Smrg darwin|linux|osf|windows|none) 61921473d951Smrg func_arith $number_major + $number_minor 61931473d951Smrg current=$func_arith_result 61941473d951Smrg age="$number_minor" 61951473d951Smrg revision="$number_revision" 61961473d951Smrg ;; 61971473d951Smrg freebsd-aout|freebsd-elf|sunos) 61981473d951Smrg current="$number_major" 61991473d951Smrg revision="$number_minor" 62001473d951Smrg age="0" 62011473d951Smrg ;; 62021473d951Smrg irix|nonstopux) 62031473d951Smrg func_arith $number_major + $number_minor 62041473d951Smrg current=$func_arith_result 62051473d951Smrg age="$number_minor" 62061473d951Smrg revision="$number_minor" 62071473d951Smrg lt_irix_increment=no 62081473d951Smrg ;; 62091473d951Smrg esac 62101473d951Smrg ;; 62111473d951Smrg no) 62121473d951Smrg current="$1" 62131473d951Smrg revision="$2" 62141473d951Smrg age="$3" 62151473d951Smrg ;; 62161473d951Smrg esac 62171473d951Smrg 62181473d951Smrg # Check that each of the things are valid numbers. 62191473d951Smrg case $current in 62201473d951Smrg 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]) ;; 62211473d951Smrg *) 62221473d951Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 62231473d951Smrg func_fatal_error "\`$vinfo' is not valid version information" 62241473d951Smrg ;; 62251473d951Smrg esac 62261473d951Smrg 62271473d951Smrg case $revision in 62281473d951Smrg 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]) ;; 62291473d951Smrg *) 62301473d951Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 62311473d951Smrg func_fatal_error "\`$vinfo' is not valid version information" 62321473d951Smrg ;; 62331473d951Smrg esac 62341473d951Smrg 62351473d951Smrg case $age in 62361473d951Smrg 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]) ;; 62371473d951Smrg *) 62381473d951Smrg func_error "AGE \`$age' must be a nonnegative integer" 62391473d951Smrg func_fatal_error "\`$vinfo' is not valid version information" 62401473d951Smrg ;; 62411473d951Smrg esac 62421473d951Smrg 62431473d951Smrg if test "$age" -gt "$current"; then 62441473d951Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 62451473d951Smrg func_fatal_error "\`$vinfo' is not valid version information" 62461473d951Smrg fi 62471473d951Smrg 62481473d951Smrg # Calculate the version variables. 62491473d951Smrg major= 62501473d951Smrg versuffix= 62511473d951Smrg verstring= 62521473d951Smrg case $version_type in 62531473d951Smrg none) ;; 62541473d951Smrg 62551473d951Smrg darwin) 62561473d951Smrg # Like Linux, but with the current version available in 62571473d951Smrg # verstring for coding it into the library header 62581473d951Smrg func_arith $current - $age 62591473d951Smrg major=.$func_arith_result 62601473d951Smrg versuffix="$major.$age.$revision" 62611473d951Smrg # Darwin ld doesn't like 0 for these options... 62621473d951Smrg func_arith $current + 1 62631473d951Smrg minor_current=$func_arith_result 62641473d951Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 62651473d951Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 62661473d951Smrg ;; 62671473d951Smrg 62681473d951Smrg freebsd-aout) 62691473d951Smrg major=".$current" 62701473d951Smrg versuffix=".$current.$revision"; 62711473d951Smrg ;; 62721473d951Smrg 62731473d951Smrg freebsd-elf) 62741473d951Smrg major=".$current" 62751473d951Smrg versuffix=".$current" 62761473d951Smrg ;; 62771473d951Smrg 62781473d951Smrg irix | nonstopux) 62791473d951Smrg if test "X$lt_irix_increment" = "Xno"; then 62801473d951Smrg func_arith $current - $age 62811473d951Smrg else 62821473d951Smrg func_arith $current - $age + 1 62831473d951Smrg fi 62841473d951Smrg major=$func_arith_result 62851473d951Smrg 62861473d951Smrg case $version_type in 62871473d951Smrg nonstopux) verstring_prefix=nonstopux ;; 62881473d951Smrg *) verstring_prefix=sgi ;; 62891473d951Smrg esac 62901473d951Smrg verstring="$verstring_prefix$major.$revision" 62911473d951Smrg 62921473d951Smrg # Add in all the interfaces that we are compatible with. 62931473d951Smrg loop=$revision 62941473d951Smrg while test "$loop" -ne 0; do 62951473d951Smrg func_arith $revision - $loop 62961473d951Smrg iface=$func_arith_result 62971473d951Smrg func_arith $loop - 1 62981473d951Smrg loop=$func_arith_result 62991473d951Smrg verstring="$verstring_prefix$major.$iface:$verstring" 63001473d951Smrg done 63011473d951Smrg 63021473d951Smrg # Before this point, $major must not contain `.'. 63031473d951Smrg major=.$major 63041473d951Smrg versuffix="$major.$revision" 63051473d951Smrg ;; 63061473d951Smrg 63071473d951Smrg linux) 63081473d951Smrg func_arith $current - $age 63091473d951Smrg major=.$func_arith_result 63101473d951Smrg versuffix="$major.$age.$revision" 63111473d951Smrg ;; 63121473d951Smrg 63131473d951Smrg osf) 63141473d951Smrg func_arith $current - $age 63151473d951Smrg major=.$func_arith_result 63161473d951Smrg versuffix=".$current.$age.$revision" 63171473d951Smrg verstring="$current.$age.$revision" 63181473d951Smrg 63191473d951Smrg # Add in all the interfaces that we are compatible with. 63201473d951Smrg loop=$age 63211473d951Smrg while test "$loop" -ne 0; do 63221473d951Smrg func_arith $current - $loop 63231473d951Smrg iface=$func_arith_result 63241473d951Smrg func_arith $loop - 1 63251473d951Smrg loop=$func_arith_result 63261473d951Smrg verstring="$verstring:${iface}.0" 63271473d951Smrg done 63281473d951Smrg 63291473d951Smrg # Make executables depend on our current version. 63301473d951Smrg verstring="$verstring:${current}.0" 63311473d951Smrg ;; 63321473d951Smrg 63331473d951Smrg qnx) 63341473d951Smrg major=".$current" 63351473d951Smrg versuffix=".$current" 63361473d951Smrg ;; 63371473d951Smrg 63381473d951Smrg sunos) 63391473d951Smrg major=".$current" 63401473d951Smrg versuffix=".$current.$revision" 63411473d951Smrg ;; 63421473d951Smrg 63431473d951Smrg windows) 63441473d951Smrg # Use '-' rather than '.', since we only want one 63451473d951Smrg # extension on DOS 8.3 filesystems. 63461473d951Smrg func_arith $current - $age 63471473d951Smrg major=$func_arith_result 63481473d951Smrg versuffix="-$major" 63491473d951Smrg ;; 63501473d951Smrg 63511473d951Smrg *) 63521473d951Smrg func_fatal_configuration "unknown library version type \`$version_type'" 63531473d951Smrg ;; 63541473d951Smrg esac 63551473d951Smrg 63561473d951Smrg # Clear the version info if we defaulted, and they specified a release. 63571473d951Smrg if test -z "$vinfo" && test -n "$release"; then 63581473d951Smrg major= 63591473d951Smrg case $version_type in 63601473d951Smrg darwin) 63611473d951Smrg # we can't check for "0.0" in archive_cmds due to quoting 63621473d951Smrg # problems, so we reset it completely 63631473d951Smrg verstring= 63641473d951Smrg ;; 63651473d951Smrg *) 63661473d951Smrg verstring="0.0" 63671473d951Smrg ;; 63681473d951Smrg esac 63691473d951Smrg if test "$need_version" = no; then 63701473d951Smrg versuffix= 63711473d951Smrg else 63721473d951Smrg versuffix=".0.0" 63731473d951Smrg fi 63741473d951Smrg fi 63751473d951Smrg 63761473d951Smrg # Remove version info from name if versioning should be avoided 63771473d951Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 63781473d951Smrg major= 63791473d951Smrg versuffix= 63801473d951Smrg verstring="" 63811473d951Smrg fi 63821473d951Smrg 63831473d951Smrg # Check to see if the archive will have undefined symbols. 63841473d951Smrg if test "$allow_undefined" = yes; then 63851473d951Smrg if test "$allow_undefined_flag" = unsupported; then 63861473d951Smrg func_warning "undefined symbols not allowed in $host shared libraries" 63871473d951Smrg build_libtool_libs=no 63881473d951Smrg build_old_libs=yes 63891473d951Smrg fi 63901473d951Smrg else 63911473d951Smrg # Don't allow undefined symbols. 63921473d951Smrg allow_undefined_flag="$no_undefined_flag" 63931473d951Smrg fi 63941473d951Smrg 63951473d951Smrg fi 63961473d951Smrg 63971473d951Smrg func_generate_dlsyms "$libname" "$libname" "yes" 63981473d951Smrg libobjs="$libobjs $symfileobj" 63991473d951Smrg test "X$libobjs" = "X " && libobjs= 64001473d951Smrg 64011473d951Smrg if test "$mode" != relink; then 64021473d951Smrg # Remove our outputs, but don't remove object files since they 64031473d951Smrg # may have been created when compiling PIC objects. 64041473d951Smrg removelist= 64051473d951Smrg tempremovelist=`$ECHO "$output_objdir/*"` 64061473d951Smrg for p in $tempremovelist; do 64071473d951Smrg case $p in 64081473d951Smrg *.$objext | *.gcno) 64091473d951Smrg ;; 64101473d951Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 64111473d951Smrg if test "X$precious_files_regex" != "X"; then 64121473d951Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 64131473d951Smrg then 64141473d951Smrg continue 64151473d951Smrg fi 64161473d951Smrg fi 64171473d951Smrg removelist="$removelist $p" 64181473d951Smrg ;; 64191473d951Smrg *) ;; 64201473d951Smrg esac 64211473d951Smrg done 64221473d951Smrg test -n "$removelist" && \ 64231473d951Smrg func_show_eval "${RM}r \$removelist" 64241473d951Smrg fi 64251473d951Smrg 64261473d951Smrg # Now set the variables for building old libraries. 64271473d951Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 64281473d951Smrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 64291473d951Smrg 64301473d951Smrg # Transform .lo files to .o files. 64311473d951Smrg oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 64321473d951Smrg fi 64331473d951Smrg 64341473d951Smrg # Eliminate all temporary directories. 64351473d951Smrg #for path in $notinst_path; do 64361473d951Smrg # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` 64371473d951Smrg # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` 64381473d951Smrg # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` 64391473d951Smrg #done 64401473d951Smrg 64411473d951Smrg if test -n "$xrpath"; then 64421473d951Smrg # If the user specified any rpath flags, then add them. 64431473d951Smrg temp_xrpath= 64441473d951Smrg for libdir in $xrpath; do 64451473d951Smrg temp_xrpath="$temp_xrpath -R$libdir" 64461473d951Smrg case "$finalize_rpath " in 64471473d951Smrg *" $libdir "*) ;; 64481473d951Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 64491473d951Smrg esac 64501473d951Smrg done 64511473d951Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 64521473d951Smrg dependency_libs="$temp_xrpath $dependency_libs" 64531473d951Smrg fi 64541473d951Smrg fi 64551473d951Smrg 64561473d951Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 64571473d951Smrg old_dlfiles="$dlfiles" 64581473d951Smrg dlfiles= 64591473d951Smrg for lib in $old_dlfiles; do 64601473d951Smrg case " $dlprefiles $dlfiles " in 64611473d951Smrg *" $lib "*) ;; 64621473d951Smrg *) dlfiles="$dlfiles $lib" ;; 64631473d951Smrg esac 64641473d951Smrg done 64651473d951Smrg 64661473d951Smrg # Make sure dlprefiles contains only unique files 64671473d951Smrg old_dlprefiles="$dlprefiles" 64681473d951Smrg dlprefiles= 64691473d951Smrg for lib in $old_dlprefiles; do 64701473d951Smrg case "$dlprefiles " in 64711473d951Smrg *" $lib "*) ;; 64721473d951Smrg *) dlprefiles="$dlprefiles $lib" ;; 64731473d951Smrg esac 64741473d951Smrg done 64751473d951Smrg 64761473d951Smrg if test "$build_libtool_libs" = yes; then 64771473d951Smrg if test -n "$rpath"; then 64781473d951Smrg case $host in 64791473d951Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) 64801473d951Smrg # these systems don't actually have a c library (as such)! 64811473d951Smrg ;; 64821473d951Smrg *-*-rhapsody* | *-*-darwin1.[012]) 64831473d951Smrg # Rhapsody C library is in the System framework 64841473d951Smrg deplibs="$deplibs System.ltframework" 64851473d951Smrg ;; 64861473d951Smrg *-*-netbsd*) 64871473d951Smrg # Don't link with libc until the a.out ld.so is fixed. 64881473d951Smrg ;; 64891473d951Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 64901473d951Smrg # Do not include libc due to us having libc/libc_r. 64911473d951Smrg ;; 64921473d951Smrg *-*-sco3.2v5* | *-*-sco5v6*) 64931473d951Smrg # Causes problems with __ctype 64941473d951Smrg ;; 64951473d951Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 64961473d951Smrg # Compiler inserts libc in the correct place for threads to work 64971473d951Smrg ;; 64981473d951Smrg *) 64991473d951Smrg # Add libc to deplibs on all other systems if necessary. 65001473d951Smrg if test "$build_libtool_need_lc" = "yes"; then 65011473d951Smrg deplibs="$deplibs -lc" 65021473d951Smrg fi 65031473d951Smrg ;; 65041473d951Smrg esac 65051473d951Smrg fi 65061473d951Smrg 65071473d951Smrg # Transform deplibs into only deplibs that can be linked in shared. 65081473d951Smrg name_save=$name 65091473d951Smrg libname_save=$libname 65101473d951Smrg release_save=$release 65111473d951Smrg versuffix_save=$versuffix 65121473d951Smrg major_save=$major 65131473d951Smrg # I'm not sure if I'm treating the release correctly. I think 65141473d951Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 65151473d951Smrg # add it in twice. Is that correct? 65161473d951Smrg release="" 65171473d951Smrg versuffix="" 65181473d951Smrg major="" 65191473d951Smrg newdeplibs= 65201473d951Smrg droppeddeps=no 65211473d951Smrg case $deplibs_check_method in 65221473d951Smrg pass_all) 65231473d951Smrg # Don't check for shared/static. Everything works. 65241473d951Smrg # This might be a little naive. We might want to check 65251473d951Smrg # whether the library exists or not. But this is on 65261473d951Smrg # osf3 & osf4 and I'm not really sure... Just 65271473d951Smrg # implementing what was already the behavior. 65281473d951Smrg newdeplibs=$deplibs 65291473d951Smrg ;; 65301473d951Smrg test_compile) 65311473d951Smrg # This code stresses the "libraries are programs" paradigm to its 65321473d951Smrg # limits. Maybe even breaks it. We compile a program, linking it 65331473d951Smrg # against the deplibs as a proxy for the library. Then we can check 65341473d951Smrg # whether they linked in statically or dynamically with ldd. 65351473d951Smrg $opt_dry_run || $RM conftest.c 65361473d951Smrg cat > conftest.c <<EOF 65371473d951Smrg int main() { return 0; } 65381473d951SmrgEOF 65391473d951Smrg $opt_dry_run || $RM conftest 65401473d951Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 65411473d951Smrg ldd_output=`ldd conftest` 65421473d951Smrg for i in $deplibs; do 65431473d951Smrg case $i in 65441473d951Smrg -l*) 65451473d951Smrg func_stripname -l '' "$i" 65461473d951Smrg name=$func_stripname_result 65471473d951Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 65481473d951Smrg case " $predeps $postdeps " in 65491473d951Smrg *" $i "*) 65501473d951Smrg newdeplibs="$newdeplibs $i" 65511473d951Smrg i="" 65521473d951Smrg ;; 65531473d951Smrg esac 65541473d951Smrg fi 65551473d951Smrg if test -n "$i" ; then 65561473d951Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 65571473d951Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 65581473d951Smrg set dummy $deplib_matches; shift 65591473d951Smrg deplib_match=$1 65601473d951Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 65611473d951Smrg newdeplibs="$newdeplibs $i" 65621473d951Smrg else 65631473d951Smrg droppeddeps=yes 65641473d951Smrg $ECHO 65651473d951Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 65661473d951Smrg $ECHO "*** I have the capability to make that library automatically link in when" 65671473d951Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 65681473d951Smrg $ECHO "*** shared version of the library, which I believe you do not have" 65691473d951Smrg $ECHO "*** because a test_compile did reveal that the linker did not use it for" 65701473d951Smrg $ECHO "*** its dynamic dependency list that programs get resolved with at runtime." 65711473d951Smrg fi 65721473d951Smrg fi 65731473d951Smrg ;; 65741473d951Smrg *) 65751473d951Smrg newdeplibs="$newdeplibs $i" 65761473d951Smrg ;; 65771473d951Smrg esac 65781473d951Smrg done 65791473d951Smrg else 65801473d951Smrg # Error occurred in the first compile. Let's try to salvage 65811473d951Smrg # the situation: Compile a separate program for each library. 65821473d951Smrg for i in $deplibs; do 65831473d951Smrg case $i in 65841473d951Smrg -l*) 65851473d951Smrg func_stripname -l '' "$i" 65861473d951Smrg name=$func_stripname_result 65871473d951Smrg $opt_dry_run || $RM conftest 65881473d951Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 65891473d951Smrg ldd_output=`ldd conftest` 65901473d951Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 65911473d951Smrg case " $predeps $postdeps " in 65921473d951Smrg *" $i "*) 65931473d951Smrg newdeplibs="$newdeplibs $i" 65941473d951Smrg i="" 65951473d951Smrg ;; 65961473d951Smrg esac 65971473d951Smrg fi 65981473d951Smrg if test -n "$i" ; then 65991473d951Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 66001473d951Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 66011473d951Smrg set dummy $deplib_matches; shift 66021473d951Smrg deplib_match=$1 66031473d951Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 66041473d951Smrg newdeplibs="$newdeplibs $i" 66051473d951Smrg else 66061473d951Smrg droppeddeps=yes 66071473d951Smrg $ECHO 66081473d951Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 66091473d951Smrg $ECHO "*** I have the capability to make that library automatically link in when" 66101473d951Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 66111473d951Smrg $ECHO "*** shared version of the library, which you do not appear to have" 66121473d951Smrg $ECHO "*** because a test_compile did reveal that the linker did not use this one" 66131473d951Smrg $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime." 66141473d951Smrg fi 66151473d951Smrg fi 66161473d951Smrg else 66171473d951Smrg droppeddeps=yes 66181473d951Smrg $ECHO 66191473d951Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 66201473d951Smrg $ECHO "*** make it link in! You will probably need to install it or some" 66211473d951Smrg $ECHO "*** library that it depends on before this library will be fully" 66221473d951Smrg $ECHO "*** functional. Installing it before continuing would be even better." 66231473d951Smrg fi 66241473d951Smrg ;; 66251473d951Smrg *) 66261473d951Smrg newdeplibs="$newdeplibs $i" 66271473d951Smrg ;; 66281473d951Smrg esac 66291473d951Smrg done 66301473d951Smrg fi 66311473d951Smrg ;; 66321473d951Smrg file_magic*) 66331473d951Smrg set dummy $deplibs_check_method; shift 66341473d951Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 66351473d951Smrg for a_deplib in $deplibs; do 66361473d951Smrg case $a_deplib in 66371473d951Smrg -l*) 66381473d951Smrg func_stripname -l '' "$a_deplib" 66391473d951Smrg name=$func_stripname_result 66401473d951Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 66411473d951Smrg case " $predeps $postdeps " in 66421473d951Smrg *" $a_deplib "*) 66431473d951Smrg newdeplibs="$newdeplibs $a_deplib" 66441473d951Smrg a_deplib="" 66451473d951Smrg ;; 66461473d951Smrg esac 66471473d951Smrg fi 66481473d951Smrg if test -n "$a_deplib" ; then 66491473d951Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 66501473d951Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 66511473d951Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 66521473d951Smrg for potent_lib in $potential_libs; do 66531473d951Smrg # Follow soft links. 66541473d951Smrg if ls -lLd "$potent_lib" 2>/dev/null | 66551473d951Smrg $GREP " -> " >/dev/null; then 66561473d951Smrg continue 66571473d951Smrg fi 66581473d951Smrg # The statement above tries to avoid entering an 66591473d951Smrg # endless loop below, in case of cyclic links. 66601473d951Smrg # We might still enter an endless loop, since a link 66611473d951Smrg # loop can be closed while we follow links, 66621473d951Smrg # but so what? 66631473d951Smrg potlib="$potent_lib" 66641473d951Smrg while test -h "$potlib" 2>/dev/null; do 66651473d951Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 66661473d951Smrg case $potliblink in 66671473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 66681473d951Smrg *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 66691473d951Smrg esac 66701473d951Smrg done 66711473d951Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 66721473d951Smrg $SED -e 10q | 66731473d951Smrg $EGREP "$file_magic_regex" > /dev/null; then 66741473d951Smrg newdeplibs="$newdeplibs $a_deplib" 66751473d951Smrg a_deplib="" 66761473d951Smrg break 2 66771473d951Smrg fi 66781473d951Smrg done 66791473d951Smrg done 66801473d951Smrg fi 66811473d951Smrg if test -n "$a_deplib" ; then 66821473d951Smrg droppeddeps=yes 66831473d951Smrg $ECHO 66841473d951Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 66851473d951Smrg $ECHO "*** I have the capability to make that library automatically link in when" 66861473d951Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 66871473d951Smrg $ECHO "*** shared version of the library, which you do not appear to have" 66881473d951Smrg $ECHO "*** because I did check the linker path looking for a file starting" 66891473d951Smrg if test -z "$potlib" ; then 66901473d951Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 66911473d951Smrg else 66921473d951Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 66931473d951Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 66941473d951Smrg fi 66951473d951Smrg fi 66961473d951Smrg ;; 66971473d951Smrg *) 66981473d951Smrg # Add a -L argument. 66991473d951Smrg newdeplibs="$newdeplibs $a_deplib" 67001473d951Smrg ;; 67011473d951Smrg esac 67021473d951Smrg done # Gone through all deplibs. 67031473d951Smrg ;; 67041473d951Smrg match_pattern*) 67051473d951Smrg set dummy $deplibs_check_method; shift 67061473d951Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 67071473d951Smrg for a_deplib in $deplibs; do 67081473d951Smrg case $a_deplib in 67091473d951Smrg -l*) 67101473d951Smrg func_stripname -l '' "$a_deplib" 67111473d951Smrg name=$func_stripname_result 67121473d951Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 67131473d951Smrg case " $predeps $postdeps " in 67141473d951Smrg *" $a_deplib "*) 67151473d951Smrg newdeplibs="$newdeplibs $a_deplib" 67161473d951Smrg a_deplib="" 67171473d951Smrg ;; 67181473d951Smrg esac 67191473d951Smrg fi 67201473d951Smrg if test -n "$a_deplib" ; then 67211473d951Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 67221473d951Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 67231473d951Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 67241473d951Smrg for potent_lib in $potential_libs; do 67251473d951Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 67261473d951Smrg if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ 67271473d951Smrg $EGREP "$match_pattern_regex" > /dev/null; then 67281473d951Smrg newdeplibs="$newdeplibs $a_deplib" 67291473d951Smrg a_deplib="" 67301473d951Smrg break 2 67311473d951Smrg fi 67321473d951Smrg done 67331473d951Smrg done 67341473d951Smrg fi 67351473d951Smrg if test -n "$a_deplib" ; then 67361473d951Smrg droppeddeps=yes 67371473d951Smrg $ECHO 67381473d951Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 67391473d951Smrg $ECHO "*** I have the capability to make that library automatically link in when" 67401473d951Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 67411473d951Smrg $ECHO "*** shared version of the library, which you do not appear to have" 67421473d951Smrg $ECHO "*** because I did check the linker path looking for a file starting" 67431473d951Smrg if test -z "$potlib" ; then 67441473d951Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 67451473d951Smrg else 67461473d951Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 67471473d951Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 67481473d951Smrg fi 67491473d951Smrg fi 67501473d951Smrg ;; 67511473d951Smrg *) 67521473d951Smrg # Add a -L argument. 67531473d951Smrg newdeplibs="$newdeplibs $a_deplib" 67541473d951Smrg ;; 67551473d951Smrg esac 67561473d951Smrg done # Gone through all deplibs. 67571473d951Smrg ;; 67581473d951Smrg none | unknown | *) 67591473d951Smrg newdeplibs="" 67601473d951Smrg tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ 67611473d951Smrg -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` 67621473d951Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 67631473d951Smrg for i in $predeps $postdeps ; do 67641473d951Smrg # can't use Xsed below, because $i might contain '/' 67651473d951Smrg tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` 67661473d951Smrg done 67671473d951Smrg fi 67681473d951Smrg if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | 67691473d951Smrg $GREP . >/dev/null; then 67701473d951Smrg $ECHO 67711473d951Smrg if test "X$deplibs_check_method" = "Xnone"; then 67721473d951Smrg $ECHO "*** Warning: inter-library dependencies are not supported in this platform." 67731473d951Smrg else 67741473d951Smrg $ECHO "*** Warning: inter-library dependencies are not known to be supported." 67751473d951Smrg fi 67761473d951Smrg $ECHO "*** All declared inter-library dependencies are being dropped." 67771473d951Smrg droppeddeps=yes 67781473d951Smrg fi 67791473d951Smrg ;; 67801473d951Smrg esac 67811473d951Smrg versuffix=$versuffix_save 67821473d951Smrg major=$major_save 67831473d951Smrg release=$release_save 67841473d951Smrg libname=$libname_save 67851473d951Smrg name=$name_save 67861473d951Smrg 67871473d951Smrg case $host in 67881473d951Smrg *-*-rhapsody* | *-*-darwin1.[012]) 67891473d951Smrg # On Rhapsody replace the C library with the System framework 67901473d951Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 67911473d951Smrg ;; 67921473d951Smrg esac 67931473d951Smrg 67941473d951Smrg if test "$droppeddeps" = yes; then 67951473d951Smrg if test "$module" = yes; then 67961473d951Smrg $ECHO 67971473d951Smrg $ECHO "*** Warning: libtool could not satisfy all declared inter-library" 67981473d951Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 67991473d951Smrg $ECHO "*** a static module, that should work as long as the dlopening" 68001473d951Smrg $ECHO "*** application is linked with the -dlopen flag." 68011473d951Smrg if test -z "$global_symbol_pipe"; then 68021473d951Smrg $ECHO 68031473d951Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 68041473d951Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 68051473d951Smrg $ECHO "*** not find such a program. So, this module is probably useless." 68061473d951Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 68071473d951Smrg fi 68081473d951Smrg if test "$build_old_libs" = no; then 68091473d951Smrg oldlibs="$output_objdir/$libname.$libext" 68101473d951Smrg build_libtool_libs=module 68111473d951Smrg build_old_libs=yes 68121473d951Smrg else 68131473d951Smrg build_libtool_libs=no 68141473d951Smrg fi 68151473d951Smrg else 68161473d951Smrg $ECHO "*** The inter-library dependencies that have been dropped here will be" 68171473d951Smrg $ECHO "*** automatically added whenever a program is linked with this library" 68181473d951Smrg $ECHO "*** or is declared to -dlopen it." 68191473d951Smrg 68201473d951Smrg if test "$allow_undefined" = no; then 68211473d951Smrg $ECHO 68221473d951Smrg $ECHO "*** Since this library must not contain undefined symbols," 68231473d951Smrg $ECHO "*** because either the platform does not support them or" 68241473d951Smrg $ECHO "*** it was explicitly requested with -no-undefined," 68251473d951Smrg $ECHO "*** libtool will only create a static version of it." 68261473d951Smrg if test "$build_old_libs" = no; then 68271473d951Smrg oldlibs="$output_objdir/$libname.$libext" 68281473d951Smrg build_libtool_libs=module 68291473d951Smrg build_old_libs=yes 68301473d951Smrg else 68311473d951Smrg build_libtool_libs=no 68321473d951Smrg fi 68331473d951Smrg fi 68341473d951Smrg fi 68351473d951Smrg fi 68361473d951Smrg # Done checking deplibs! 68371473d951Smrg deplibs=$newdeplibs 68381473d951Smrg fi 68391473d951Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 68401473d951Smrg case $host in 68411473d951Smrg *-*-darwin*) 68421473d951Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 68431473d951Smrg new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 68441473d951Smrg deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 68451473d951Smrg ;; 68461473d951Smrg esac 68471473d951Smrg 68481473d951Smrg # move library search paths that coincide with paths to not yet 68491473d951Smrg # installed libraries to the beginning of the library search list 68501473d951Smrg new_libs= 68511473d951Smrg for path in $notinst_path; do 68521473d951Smrg case " $new_libs " in 68531473d951Smrg *" -L$path/$objdir "*) ;; 68541473d951Smrg *) 68551473d951Smrg case " $deplibs " in 68561473d951Smrg *" -L$path/$objdir "*) 68571473d951Smrg new_libs="$new_libs -L$path/$objdir" ;; 68581473d951Smrg esac 68591473d951Smrg ;; 68601473d951Smrg esac 68611473d951Smrg done 68621473d951Smrg for deplib in $deplibs; do 68631473d951Smrg case $deplib in 68641473d951Smrg -L*) 68651473d951Smrg case " $new_libs " in 68661473d951Smrg *" $deplib "*) ;; 68671473d951Smrg *) new_libs="$new_libs $deplib" ;; 68681473d951Smrg esac 68691473d951Smrg ;; 68701473d951Smrg *) new_libs="$new_libs $deplib" ;; 68711473d951Smrg esac 68721473d951Smrg done 68731473d951Smrg deplibs="$new_libs" 68741473d951Smrg 68751473d951Smrg # All the library-specific variables (install_libdir is set above). 68761473d951Smrg library_names= 68771473d951Smrg old_library= 68781473d951Smrg dlname= 68791473d951Smrg 68801473d951Smrg # Test again, we may have decided not to build it any more 68811473d951Smrg if test "$build_libtool_libs" = yes; then 68821473d951Smrg if test "$hardcode_into_libs" = yes; then 68831473d951Smrg # Hardcode the library paths 68841473d951Smrg hardcode_libdirs= 68851473d951Smrg dep_rpath= 68861473d951Smrg rpath="$finalize_rpath" 68871473d951Smrg test "$mode" != relink && rpath="$compile_rpath$rpath" 68881473d951Smrg for libdir in $rpath; do 68891473d951Smrg if test -n "$hardcode_libdir_flag_spec"; then 68901473d951Smrg if test -n "$hardcode_libdir_separator"; then 68911473d951Smrg if test -z "$hardcode_libdirs"; then 68921473d951Smrg hardcode_libdirs="$libdir" 68931473d951Smrg else 68941473d951Smrg # Just accumulate the unique libdirs. 68951473d951Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 68961473d951Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 68971473d951Smrg ;; 68981473d951Smrg *) 68991473d951Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 69001473d951Smrg ;; 69011473d951Smrg esac 69021473d951Smrg fi 69031473d951Smrg else 69041473d951Smrg eval flag=\"$hardcode_libdir_flag_spec\" 69051473d951Smrg dep_rpath="$dep_rpath $flag" 69061473d951Smrg fi 69071473d951Smrg elif test -n "$runpath_var"; then 69081473d951Smrg case "$perm_rpath " in 69091473d951Smrg *" $libdir "*) ;; 69101473d951Smrg *) perm_rpath="$perm_rpath $libdir" ;; 69111473d951Smrg esac 69121473d951Smrg fi 69131473d951Smrg done 69141473d951Smrg # Substitute the hardcoded libdirs into the rpath. 69151473d951Smrg if test -n "$hardcode_libdir_separator" && 69161473d951Smrg test -n "$hardcode_libdirs"; then 69171473d951Smrg libdir="$hardcode_libdirs" 69181473d951Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 69191473d951Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 69201473d951Smrg else 69211473d951Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 69221473d951Smrg fi 69231473d951Smrg fi 69241473d951Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 69251473d951Smrg # We should set the runpath_var. 69261473d951Smrg rpath= 69271473d951Smrg for dir in $perm_rpath; do 69281473d951Smrg rpath="$rpath$dir:" 69291473d951Smrg done 69301473d951Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 69311473d951Smrg fi 69321473d951Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 69331473d951Smrg fi 6934ab47cfaaSmrg 69351473d951Smrg shlibpath="$finalize_shlibpath" 69361473d951Smrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 69371473d951Smrg if test -n "$shlibpath"; then 69381473d951Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 69391473d951Smrg fi 6940ab47cfaaSmrg 69411473d951Smrg # Get the real and link names of the library. 69421473d951Smrg eval shared_ext=\"$shrext_cmds\" 69431473d951Smrg eval library_names=\"$library_names_spec\" 69441473d951Smrg set dummy $library_names 69451473d951Smrg shift 69461473d951Smrg realname="$1" 69471473d951Smrg shift 6948ab47cfaaSmrg 69491473d951Smrg if test -n "$soname_spec"; then 69501473d951Smrg eval soname=\"$soname_spec\" 69511473d951Smrg else 69521473d951Smrg soname="$realname" 69531473d951Smrg fi 69541473d951Smrg if test -z "$dlname"; then 69551473d951Smrg dlname=$soname 69561473d951Smrg fi 6957ab47cfaaSmrg 69581473d951Smrg lib="$output_objdir/$realname" 69591473d951Smrg linknames= 69601473d951Smrg for link 69611473d951Smrg do 69621473d951Smrg linknames="$linknames $link" 69631473d951Smrg done 6964ab47cfaaSmrg 69651473d951Smrg # Use standard objects if they are pic 69661473d951Smrg test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 69671473d951Smrg test "X$libobjs" = "X " && libobjs= 6968ab47cfaaSmrg 69691473d951Smrg delfiles= 69701473d951Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 69711473d951Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 69721473d951Smrg export_symbols="$output_objdir/$libname.uexp" 69731473d951Smrg delfiles="$delfiles $export_symbols" 69741473d951Smrg fi 6975ab47cfaaSmrg 69761473d951Smrg orig_export_symbols= 69771473d951Smrg case $host_os in 69781473d951Smrg cygwin* | mingw* | cegcc*) 69791473d951Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 69801473d951Smrg # exporting using user supplied symfile 69811473d951Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 69821473d951Smrg # and it's NOT already a .def file. Must figure out 69831473d951Smrg # which of the given symbols are data symbols and tag 69841473d951Smrg # them as such. So, trigger use of export_symbols_cmds. 69851473d951Smrg # export_symbols gets reassigned inside the "prepare 69861473d951Smrg # the list of exported symbols" if statement, so the 69871473d951Smrg # include_expsyms logic still works. 69881473d951Smrg orig_export_symbols="$export_symbols" 69891473d951Smrg export_symbols= 69901473d951Smrg always_export_symbols=yes 69911473d951Smrg fi 69921473d951Smrg fi 69931473d951Smrg ;; 69941473d951Smrg esac 6995ab47cfaaSmrg 69961473d951Smrg # Prepare the list of exported symbols 69971473d951Smrg if test -z "$export_symbols"; then 69981473d951Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 69991473d951Smrg func_verbose "generating symbol list for \`$libname.la'" 70001473d951Smrg export_symbols="$output_objdir/$libname.exp" 70011473d951Smrg $opt_dry_run || $RM $export_symbols 70021473d951Smrg cmds=$export_symbols_cmds 70031473d951Smrg save_ifs="$IFS"; IFS='~' 70041473d951Smrg for cmd in $cmds; do 70051473d951Smrg IFS="$save_ifs" 70061473d951Smrg eval cmd=\"$cmd\" 70071473d951Smrg func_len " $cmd" 70081473d951Smrg len=$func_len_result 70091473d951Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 70101473d951Smrg func_show_eval "$cmd" 'exit $?' 70111473d951Smrg skipped_export=false 70121473d951Smrg else 70131473d951Smrg # The command line is too long to execute in one step. 70141473d951Smrg func_verbose "using reloadable object file for export list..." 70151473d951Smrg skipped_export=: 70161473d951Smrg # Break out early, otherwise skipped_export may be 70171473d951Smrg # set to false by a later but shorter cmd. 70181473d951Smrg break 70191473d951Smrg fi 70201473d951Smrg done 70211473d951Smrg IFS="$save_ifs" 70221473d951Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 70231473d951Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 70241473d951Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 70251473d951Smrg fi 70261473d951Smrg fi 70271473d951Smrg fi 7028ab47cfaaSmrg 70291473d951Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 70301473d951Smrg tmp_export_symbols="$export_symbols" 70311473d951Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 70321473d951Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 70331473d951Smrg fi 7034ab47cfaaSmrg 70351473d951Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 70361473d951Smrg # The given exports_symbols file has to be filtered, so filter it. 70371473d951Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 70381473d951Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 70391473d951Smrg # 's' commands which not all seds can handle. GNU sed should be fine 70401473d951Smrg # though. Also, the filter scales superlinearly with the number of 70411473d951Smrg # global variables. join(1) would be nice here, but unfortunately 70421473d951Smrg # isn't a blessed tool. 70431473d951Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 70441473d951Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 70451473d951Smrg export_symbols=$output_objdir/$libname.def 70461473d951Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7047ab47cfaaSmrg fi 7048ab47cfaaSmrg 70491473d951Smrg tmp_deplibs= 70501473d951Smrg for test_deplib in $deplibs; do 70511473d951Smrg case " $convenience " in 70521473d951Smrg *" $test_deplib "*) ;; 70531473d951Smrg *) 70541473d951Smrg tmp_deplibs="$tmp_deplibs $test_deplib" 70551473d951Smrg ;; 70561473d951Smrg esac 70571473d951Smrg done 70581473d951Smrg deplibs="$tmp_deplibs" 7059ab47cfaaSmrg 70601473d951Smrg if test -n "$convenience"; then 70611473d951Smrg if test -n "$whole_archive_flag_spec" && 70621473d951Smrg test "$compiler_needs_object" = yes && 70631473d951Smrg test -z "$libobjs"; then 70641473d951Smrg # extract the archives, so we have objects to list. 70651473d951Smrg # TODO: could optimize this to just extract one archive. 70661473d951Smrg whole_archive_flag_spec= 70671473d951Smrg fi 70681473d951Smrg if test -n "$whole_archive_flag_spec"; then 70691473d951Smrg save_libobjs=$libobjs 70701473d951Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 70711473d951Smrg test "X$libobjs" = "X " && libobjs= 70721473d951Smrg else 70731473d951Smrg gentop="$output_objdir/${outputname}x" 70741473d951Smrg generated="$generated $gentop" 7075ab47cfaaSmrg 70761473d951Smrg func_extract_archives $gentop $convenience 70771473d951Smrg libobjs="$libobjs $func_extract_archives_result" 70781473d951Smrg test "X$libobjs" = "X " && libobjs= 70791473d951Smrg fi 70801473d951Smrg fi 7081ab47cfaaSmrg 70821473d951Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 70831473d951Smrg eval flag=\"$thread_safe_flag_spec\" 70841473d951Smrg linker_flags="$linker_flags $flag" 70851473d951Smrg fi 7086ab47cfaaSmrg 70871473d951Smrg # Make a backup of the uninstalled library when relinking 70881473d951Smrg if test "$mode" = relink; then 70891473d951Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 7090ab47cfaaSmrg fi 7091ab47cfaaSmrg 70921473d951Smrg # Do each of the archive commands. 70931473d951Smrg if test "$module" = yes && test -n "$module_cmds" ; then 70941473d951Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 70951473d951Smrg eval test_cmds=\"$module_expsym_cmds\" 70961473d951Smrg cmds=$module_expsym_cmds 70971473d951Smrg else 70981473d951Smrg eval test_cmds=\"$module_cmds\" 70991473d951Smrg cmds=$module_cmds 71001473d951Smrg fi 71011473d951Smrg else 71021473d951Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 71031473d951Smrg eval test_cmds=\"$archive_expsym_cmds\" 71041473d951Smrg cmds=$archive_expsym_cmds 71051473d951Smrg else 71061473d951Smrg eval test_cmds=\"$archive_cmds\" 71071473d951Smrg cmds=$archive_cmds 71081473d951Smrg fi 7109ab47cfaaSmrg fi 7110ab47cfaaSmrg 71111473d951Smrg if test "X$skipped_export" != "X:" && 71121473d951Smrg func_len " $test_cmds" && 71131473d951Smrg len=$func_len_result && 71141473d951Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 71151473d951Smrg : 71161473d951Smrg else 71171473d951Smrg # The command line is too long to link in one step, link piecewise 71181473d951Smrg # or, if using GNU ld and skipped_export is not :, use a linker 71191473d951Smrg # script. 7120ab47cfaaSmrg 71211473d951Smrg # Save the value of $output and $libobjs because we want to 71221473d951Smrg # use them later. If we have whole_archive_flag_spec, we 71231473d951Smrg # want to use save_libobjs as it was before 71241473d951Smrg # whole_archive_flag_spec was expanded, because we can't 71251473d951Smrg # assume the linker understands whole_archive_flag_spec. 71261473d951Smrg # This may have to be revisited, in case too many 71271473d951Smrg # convenience libraries get linked in and end up exceeding 71281473d951Smrg # the spec. 71291473d951Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 71301473d951Smrg save_libobjs=$libobjs 71311473d951Smrg fi 71321473d951Smrg save_output=$output 71331473d951Smrg output_la=`$ECHO "X$output" | $Xsed -e "$basename"` 7134ab47cfaaSmrg 71351473d951Smrg # Clear the reloadable object creation command queue and 71361473d951Smrg # initialize k to one. 71371473d951Smrg test_cmds= 71381473d951Smrg concat_cmds= 71391473d951Smrg objlist= 71401473d951Smrg last_robj= 71411473d951Smrg k=1 7142ab47cfaaSmrg 71431473d951Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 71441473d951Smrg output=${output_objdir}/${output_la}.lnkscript 71451473d951Smrg func_verbose "creating GNU ld script: $output" 71461473d951Smrg $ECHO 'INPUT (' > $output 71471473d951Smrg for obj in $save_libobjs 71481473d951Smrg do 71491473d951Smrg $ECHO "$obj" >> $output 71501473d951Smrg done 71511473d951Smrg $ECHO ')' >> $output 71521473d951Smrg delfiles="$delfiles $output" 71531473d951Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 71541473d951Smrg output=${output_objdir}/${output_la}.lnk 71551473d951Smrg func_verbose "creating linker input file list: $output" 71561473d951Smrg : > $output 71571473d951Smrg set x $save_libobjs 71581473d951Smrg shift 71591473d951Smrg firstobj= 71601473d951Smrg if test "$compiler_needs_object" = yes; then 71611473d951Smrg firstobj="$1 " 71621473d951Smrg shift 71631473d951Smrg fi 71641473d951Smrg for obj 71651473d951Smrg do 71661473d951Smrg $ECHO "$obj" >> $output 71671473d951Smrg done 71681473d951Smrg delfiles="$delfiles $output" 71691473d951Smrg output=$firstobj\"$file_list_spec$output\" 71701473d951Smrg else 71711473d951Smrg if test -n "$save_libobjs"; then 71721473d951Smrg func_verbose "creating reloadable object files..." 71731473d951Smrg output=$output_objdir/$output_la-${k}.$objext 71741473d951Smrg eval test_cmds=\"$reload_cmds\" 71751473d951Smrg func_len " $test_cmds" 71761473d951Smrg len0=$func_len_result 71771473d951Smrg len=$len0 71781473d951Smrg 71791473d951Smrg # Loop over the list of objects to be linked. 71801473d951Smrg for obj in $save_libobjs 71811473d951Smrg do 71821473d951Smrg func_len " $obj" 71831473d951Smrg func_arith $len + $func_len_result 71841473d951Smrg len=$func_arith_result 71851473d951Smrg if test "X$objlist" = X || 71861473d951Smrg test "$len" -lt "$max_cmd_len"; then 71871473d951Smrg func_append objlist " $obj" 71881473d951Smrg else 71891473d951Smrg # The command $test_cmds is almost too long, add a 71901473d951Smrg # command to the queue. 71911473d951Smrg if test "$k" -eq 1 ; then 71921473d951Smrg # The first file doesn't have a previous command to add. 71931473d951Smrg eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 71941473d951Smrg else 71951473d951Smrg # All subsequent reloadable object files will link in 71961473d951Smrg # the last one created. 71971473d951Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" 71981473d951Smrg fi 71991473d951Smrg last_robj=$output_objdir/$output_la-${k}.$objext 72001473d951Smrg func_arith $k + 1 72011473d951Smrg k=$func_arith_result 72021473d951Smrg output=$output_objdir/$output_la-${k}.$objext 72031473d951Smrg objlist=$obj 72041473d951Smrg func_len " $last_robj" 72051473d951Smrg func_arith $len0 + $func_len_result 72061473d951Smrg len=$func_arith_result 72071473d951Smrg fi 72081473d951Smrg done 72091473d951Smrg # Handle the remaining objects by creating one last 72101473d951Smrg # reloadable object file. All subsequent reloadable object 72111473d951Smrg # files will link in the last one created. 72121473d951Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 72131473d951Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 72141473d951Smrg if test -n "$last_robj"; then 72151473d951Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 72161473d951Smrg fi 72171473d951Smrg delfiles="$delfiles $output" 7218ab47cfaaSmrg 72191473d951Smrg else 72201473d951Smrg output= 72211473d951Smrg fi 72221473d951Smrg 72231473d951Smrg if ${skipped_export-false}; then 72241473d951Smrg func_verbose "generating symbol list for \`$libname.la'" 72251473d951Smrg export_symbols="$output_objdir/$libname.exp" 72261473d951Smrg $opt_dry_run || $RM $export_symbols 72271473d951Smrg libobjs=$output 72281473d951Smrg # Append the command to create the export file. 72291473d951Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 72301473d951Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 72311473d951Smrg if test -n "$last_robj"; then 72321473d951Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 72331473d951Smrg fi 72341473d951Smrg fi 7235ab47cfaaSmrg 72361473d951Smrg test -n "$save_libobjs" && 72371473d951Smrg func_verbose "creating a temporary reloadable object file: $output" 7238ab47cfaaSmrg 72391473d951Smrg # Loop through the commands generated above and execute them. 72401473d951Smrg save_ifs="$IFS"; IFS='~' 72411473d951Smrg for cmd in $concat_cmds; do 72421473d951Smrg IFS="$save_ifs" 72431473d951Smrg $opt_silent || { 72441473d951Smrg func_quote_for_expand "$cmd" 72451473d951Smrg eval "func_echo $func_quote_for_expand_result" 72461473d951Smrg } 72471473d951Smrg $opt_dry_run || eval "$cmd" || { 72481473d951Smrg lt_exit=$? 72491473d951Smrg 72501473d951Smrg # Restore the uninstalled library and exit 72511473d951Smrg if test "$mode" = relink; then 72521473d951Smrg ( cd "$output_objdir" && \ 72531473d951Smrg $RM "${realname}T" && \ 72541473d951Smrg $MV "${realname}U" "$realname" ) 72551473d951Smrg fi 7256ab47cfaaSmrg 72571473d951Smrg exit $lt_exit 72581473d951Smrg } 72591473d951Smrg done 72601473d951Smrg IFS="$save_ifs" 7261ab47cfaaSmrg 72621473d951Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 72631473d951Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 72641473d951Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7265ab47cfaaSmrg fi 7266ab47cfaaSmrg fi 7267ab47cfaaSmrg 72681473d951Smrg if ${skipped_export-false}; then 72691473d951Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 72701473d951Smrg tmp_export_symbols="$export_symbols" 72711473d951Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 72721473d951Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 72731473d951Smrg fi 7274ab47cfaaSmrg 72751473d951Smrg if test -n "$orig_export_symbols"; then 72761473d951Smrg # The given exports_symbols file has to be filtered, so filter it. 72771473d951Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 72781473d951Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 72791473d951Smrg # 's' commands which not all seds can handle. GNU sed should be fine 72801473d951Smrg # though. Also, the filter scales superlinearly with the number of 72811473d951Smrg # global variables. join(1) would be nice here, but unfortunately 72821473d951Smrg # isn't a blessed tool. 72831473d951Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 72841473d951Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 72851473d951Smrg export_symbols=$output_objdir/$libname.def 72861473d951Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 72871473d951Smrg fi 72881473d951Smrg fi 7289ab47cfaaSmrg 72901473d951Smrg libobjs=$output 72911473d951Smrg # Restore the value of output. 72921473d951Smrg output=$save_output 7293ab47cfaaSmrg 72941473d951Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 72951473d951Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 72961473d951Smrg test "X$libobjs" = "X " && libobjs= 72971473d951Smrg fi 72981473d951Smrg # Expand the library linking commands again to reset the 72991473d951Smrg # value of $libobjs for piecewise linking. 73001473d951Smrg 73011473d951Smrg # Do each of the archive commands. 73021473d951Smrg if test "$module" = yes && test -n "$module_cmds" ; then 73031473d951Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 73041473d951Smrg cmds=$module_expsym_cmds 7305ab47cfaaSmrg else 73061473d951Smrg cmds=$module_cmds 7307ab47cfaaSmrg fi 7308ab47cfaaSmrg else 73091473d951Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 73101473d951Smrg cmds=$archive_expsym_cmds 73111473d951Smrg else 73121473d951Smrg cmds=$archive_cmds 73131473d951Smrg fi 7314ab47cfaaSmrg fi 7315ab47cfaaSmrg fi 7316ab47cfaaSmrg 73171473d951Smrg if test -n "$delfiles"; then 73181473d951Smrg # Append the command to remove temporary files to $cmds. 73191473d951Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 73201473d951Smrg fi 7321ab47cfaaSmrg 73221473d951Smrg # Add any objects from preloaded convenience libraries 73231473d951Smrg if test -n "$dlprefiles"; then 73241473d951Smrg gentop="$output_objdir/${outputname}x" 73251473d951Smrg generated="$generated $gentop" 7326ab47cfaaSmrg 73271473d951Smrg func_extract_archives $gentop $dlprefiles 73281473d951Smrg libobjs="$libobjs $func_extract_archives_result" 73291473d951Smrg test "X$libobjs" = "X " && libobjs= 7330ab47cfaaSmrg fi 7331ab47cfaaSmrg 73321473d951Smrg save_ifs="$IFS"; IFS='~' 73331473d951Smrg for cmd in $cmds; do 73341473d951Smrg IFS="$save_ifs" 73351473d951Smrg eval cmd=\"$cmd\" 73361473d951Smrg $opt_silent || { 73371473d951Smrg func_quote_for_expand "$cmd" 73381473d951Smrg eval "func_echo $func_quote_for_expand_result" 73391473d951Smrg } 73401473d951Smrg $opt_dry_run || eval "$cmd" || { 73411473d951Smrg lt_exit=$? 7342ab47cfaaSmrg 73431473d951Smrg # Restore the uninstalled library and exit 73441473d951Smrg if test "$mode" = relink; then 73451473d951Smrg ( cd "$output_objdir" && \ 73461473d951Smrg $RM "${realname}T" && \ 73471473d951Smrg $MV "${realname}U" "$realname" ) 7348ab47cfaaSmrg fi 7349ab47cfaaSmrg 73501473d951Smrg exit $lt_exit 73511473d951Smrg } 73521473d951Smrg done 73531473d951Smrg IFS="$save_ifs" 7354ab47cfaaSmrg 73551473d951Smrg # Restore the uninstalled library and exit 73561473d951Smrg if test "$mode" = relink; then 73571473d951Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 7358ab47cfaaSmrg 73591473d951Smrg if test -n "$convenience"; then 73601473d951Smrg if test -z "$whole_archive_flag_spec"; then 73611473d951Smrg func_show_eval '${RM}r "$gentop"' 73621473d951Smrg fi 73631473d951Smrg fi 7364ab47cfaaSmrg 73651473d951Smrg exit $EXIT_SUCCESS 73661473d951Smrg fi 7367ab47cfaaSmrg 73681473d951Smrg # Create links to the real library. 73691473d951Smrg for linkname in $linknames; do 73701473d951Smrg if test "$realname" != "$linkname"; then 73711473d951Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 7372ab47cfaaSmrg fi 7373ab47cfaaSmrg done 7374ab47cfaaSmrg 73751473d951Smrg # If -module or -export-dynamic was specified, set the dlname. 73761473d951Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 73771473d951Smrg # On all known operating systems, these are identical. 73781473d951Smrg dlname="$soname" 73791473d951Smrg fi 73801473d951Smrg fi 7381ab47cfaaSmrg ;; 7382ab47cfaaSmrg 73831473d951Smrg obj) 73841473d951Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 73851473d951Smrg func_warning "\`-dlopen' is ignored for objects" 73861473d951Smrg fi 7387ab47cfaaSmrg 73881473d951Smrg case " $deplibs" in 73891473d951Smrg *\ -l* | *\ -L*) 73901473d951Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 7391ab47cfaaSmrg esac 7392ab47cfaaSmrg 73931473d951Smrg test -n "$rpath" && \ 73941473d951Smrg func_warning "\`-rpath' is ignored for objects" 7395ab47cfaaSmrg 73961473d951Smrg test -n "$xrpath" && \ 73971473d951Smrg func_warning "\`-R' is ignored for objects" 7398ab47cfaaSmrg 73991473d951Smrg test -n "$vinfo" && \ 74001473d951Smrg func_warning "\`-version-info' is ignored for objects" 74011473d951Smrg 74021473d951Smrg test -n "$release" && \ 74031473d951Smrg func_warning "\`-release' is ignored for objects" 74041473d951Smrg 74051473d951Smrg case $output in 74061473d951Smrg *.lo) 74071473d951Smrg test -n "$objs$old_deplibs" && \ 74081473d951Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 74091473d951Smrg 74101473d951Smrg libobj=$output 74111473d951Smrg func_lo2o "$libobj" 74121473d951Smrg obj=$func_lo2o_result 7413ab47cfaaSmrg ;; 7414ab47cfaaSmrg *) 74151473d951Smrg libobj= 74161473d951Smrg obj="$output" 7417ab47cfaaSmrg ;; 7418ab47cfaaSmrg esac 7419ab47cfaaSmrg 74201473d951Smrg # Delete the old objects. 74211473d951Smrg $opt_dry_run || $RM $obj $libobj 7422ab47cfaaSmrg 74231473d951Smrg # Objects from convenience libraries. This assumes 74241473d951Smrg # single-version convenience libraries. Whenever we create 74251473d951Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 74261473d951Smrg # the extraction. 74271473d951Smrg reload_conv_objs= 74281473d951Smrg gentop= 74291473d951Smrg # reload_cmds runs $LD directly, so let us get rid of 74301473d951Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 74311473d951Smrg # turning comma into space.. 74321473d951Smrg wl= 7433ab47cfaaSmrg 74341473d951Smrg if test -n "$convenience"; then 74351473d951Smrg if test -n "$whole_archive_flag_spec"; then 74361473d951Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 74371473d951Smrg reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 74381473d951Smrg else 74391473d951Smrg gentop="$output_objdir/${obj}x" 74401473d951Smrg generated="$generated $gentop" 7441ab47cfaaSmrg 74421473d951Smrg func_extract_archives $gentop $convenience 74431473d951Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 74441473d951Smrg fi 7445ab47cfaaSmrg fi 7446ab47cfaaSmrg 74471473d951Smrg # Create the old-style object. 74481473d951Smrg 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 7449ab47cfaaSmrg 74501473d951Smrg output="$obj" 74511473d951Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7452ab47cfaaSmrg 74531473d951Smrg # Exit if we aren't doing a library object file. 74541473d951Smrg if test -z "$libobj"; then 74551473d951Smrg if test -n "$gentop"; then 74561473d951Smrg func_show_eval '${RM}r "$gentop"' 74571473d951Smrg fi 74581473d951Smrg 74591473d951Smrg exit $EXIT_SUCCESS 7460ab47cfaaSmrg fi 74611473d951Smrg 74621473d951Smrg if test "$build_libtool_libs" != yes; then 74631473d951Smrg if test -n "$gentop"; then 74641473d951Smrg func_show_eval '${RM}r "$gentop"' 74651473d951Smrg fi 74661473d951Smrg 74671473d951Smrg # Create an invalid libtool object if no PIC, so that we don't 74681473d951Smrg # accidentally link it into a program. 74691473d951Smrg # $show "echo timestamp > $libobj" 74701473d951Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 74711473d951Smrg exit $EXIT_SUCCESS 74721473d951Smrg fi 74731473d951Smrg 74741473d951Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 74751473d951Smrg # Only do commands if we really have different PIC objects. 74761473d951Smrg reload_objs="$libobjs $reload_conv_objs" 74771473d951Smrg output="$libobj" 74781473d951Smrg func_execute_cmds "$reload_cmds" 'exit $?' 74791473d951Smrg fi 74801473d951Smrg 74811473d951Smrg if test -n "$gentop"; then 74821473d951Smrg func_show_eval '${RM}r "$gentop"' 74831473d951Smrg fi 74841473d951Smrg 74851473d951Smrg exit $EXIT_SUCCESS 7486ab47cfaaSmrg ;; 7487ab47cfaaSmrg 74881473d951Smrg prog) 74891473d951Smrg case $host in 74901473d951Smrg *cygwin*) func_stripname '' '.exe' "$output" 74911473d951Smrg output=$func_stripname_result.exe;; 74921473d951Smrg esac 74931473d951Smrg test -n "$vinfo" && \ 74941473d951Smrg func_warning "\`-version-info' is ignored for programs" 7495ab47cfaaSmrg 74961473d951Smrg test -n "$release" && \ 74971473d951Smrg func_warning "\`-release' is ignored for programs" 7498ab47cfaaSmrg 74991473d951Smrg test "$preload" = yes \ 75001473d951Smrg && test "$dlopen_support" = unknown \ 75011473d951Smrg && test "$dlopen_self" = unknown \ 75021473d951Smrg && test "$dlopen_self_static" = unknown && \ 75031473d951Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 75041473d951Smrg 75051473d951Smrg case $host in 75061473d951Smrg *-*-rhapsody* | *-*-darwin1.[012]) 75071473d951Smrg # On Rhapsody replace the C library is the System framework 75081473d951Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 75091473d951Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 7510ab47cfaaSmrg ;; 75111473d951Smrg esac 7512ab47cfaaSmrg 75131473d951Smrg case $host in 75141473d951Smrg *-*-darwin*) 75151473d951Smrg # Don't allow lazy linking, it breaks C++ global constructors 75161473d951Smrg # But is supposedly fixed on 10.4 or later (yay!). 75171473d951Smrg if test "$tagname" = CXX ; then 75181473d951Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 75191473d951Smrg 10.[0123]) 75201473d951Smrg compile_command="$compile_command ${wl}-bind_at_load" 75211473d951Smrg finalize_command="$finalize_command ${wl}-bind_at_load" 75221473d951Smrg ;; 75231473d951Smrg esac 7524ab47cfaaSmrg fi 75251473d951Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 75261473d951Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 75271473d951Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 75281473d951Smrg ;; 75291473d951Smrg esac 7530ab47cfaaSmrg 7531ab47cfaaSmrg 75321473d951Smrg # move library search paths that coincide with paths to not yet 75331473d951Smrg # installed libraries to the beginning of the library search list 75341473d951Smrg new_libs= 75351473d951Smrg for path in $notinst_path; do 75361473d951Smrg case " $new_libs " in 75371473d951Smrg *" -L$path/$objdir "*) ;; 75381473d951Smrg *) 75391473d951Smrg case " $compile_deplibs " in 75401473d951Smrg *" -L$path/$objdir "*) 75411473d951Smrg new_libs="$new_libs -L$path/$objdir" ;; 7542ab47cfaaSmrg esac 75431473d951Smrg ;; 75441473d951Smrg esac 75451473d951Smrg done 75461473d951Smrg for deplib in $compile_deplibs; do 75471473d951Smrg case $deplib in 75481473d951Smrg -L*) 75491473d951Smrg case " $new_libs " in 75501473d951Smrg *" $deplib "*) ;; 75511473d951Smrg *) new_libs="$new_libs $deplib" ;; 7552ab47cfaaSmrg esac 75531473d951Smrg ;; 75541473d951Smrg *) new_libs="$new_libs $deplib" ;; 75551473d951Smrg esac 75561473d951Smrg done 75571473d951Smrg compile_deplibs="$new_libs" 7558ab47cfaaSmrg 7559ab47cfaaSmrg 75601473d951Smrg compile_command="$compile_command $compile_deplibs" 75611473d951Smrg finalize_command="$finalize_command $finalize_deplibs" 7562ab47cfaaSmrg 75631473d951Smrg if test -n "$rpath$xrpath"; then 75641473d951Smrg # If the user specified any rpath flags, then add them. 75651473d951Smrg for libdir in $rpath $xrpath; do 75661473d951Smrg # This is the magic to use -rpath. 75671473d951Smrg case "$finalize_rpath " in 75681473d951Smrg *" $libdir "*) ;; 75691473d951Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 75701473d951Smrg esac 75711473d951Smrg done 75721473d951Smrg fi 7573ab47cfaaSmrg 75741473d951Smrg # Now hardcode the library paths 75751473d951Smrg rpath= 75761473d951Smrg hardcode_libdirs= 75771473d951Smrg for libdir in $compile_rpath $finalize_rpath; do 75781473d951Smrg if test -n "$hardcode_libdir_flag_spec"; then 75791473d951Smrg if test -n "$hardcode_libdir_separator"; then 75801473d951Smrg if test -z "$hardcode_libdirs"; then 75811473d951Smrg hardcode_libdirs="$libdir" 75821473d951Smrg else 75831473d951Smrg # Just accumulate the unique libdirs. 75841473d951Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 75851473d951Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 75861473d951Smrg ;; 75871473d951Smrg *) 75881473d951Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 75891473d951Smrg ;; 75901473d951Smrg esac 75911473d951Smrg fi 7592ab47cfaaSmrg else 75931473d951Smrg eval flag=\"$hardcode_libdir_flag_spec\" 75941473d951Smrg rpath="$rpath $flag" 7595ab47cfaaSmrg fi 75961473d951Smrg elif test -n "$runpath_var"; then 75971473d951Smrg case "$perm_rpath " in 75981473d951Smrg *" $libdir "*) ;; 75991473d951Smrg *) perm_rpath="$perm_rpath $libdir" ;; 76001473d951Smrg esac 76011473d951Smrg fi 76021473d951Smrg case $host in 76031473d951Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 76041473d951Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 76051473d951Smrg case :$dllsearchpath: in 76061473d951Smrg *":$libdir:"*) ;; 76071473d951Smrg ::) dllsearchpath=$libdir;; 76081473d951Smrg *) dllsearchpath="$dllsearchpath:$libdir";; 76091473d951Smrg esac 76101473d951Smrg case :$dllsearchpath: in 76111473d951Smrg *":$testbindir:"*) ;; 76121473d951Smrg ::) dllsearchpath=$testbindir;; 76131473d951Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 76141473d951Smrg esac 76151473d951Smrg ;; 76161473d951Smrg esac 76171473d951Smrg done 76181473d951Smrg # Substitute the hardcoded libdirs into the rpath. 76191473d951Smrg if test -n "$hardcode_libdir_separator" && 76201473d951Smrg test -n "$hardcode_libdirs"; then 76211473d951Smrg libdir="$hardcode_libdirs" 76221473d951Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 76231473d951Smrg fi 76241473d951Smrg compile_rpath="$rpath" 7625ab47cfaaSmrg 76261473d951Smrg rpath= 76271473d951Smrg hardcode_libdirs= 76281473d951Smrg for libdir in $finalize_rpath; do 76291473d951Smrg if test -n "$hardcode_libdir_flag_spec"; then 76301473d951Smrg if test -n "$hardcode_libdir_separator"; then 76311473d951Smrg if test -z "$hardcode_libdirs"; then 76321473d951Smrg hardcode_libdirs="$libdir" 76331473d951Smrg else 76341473d951Smrg # Just accumulate the unique libdirs. 76351473d951Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 76361473d951Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 76371473d951Smrg ;; 76381473d951Smrg *) 76391473d951Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 76401473d951Smrg ;; 76411473d951Smrg esac 76421473d951Smrg fi 7643ab47cfaaSmrg else 76441473d951Smrg eval flag=\"$hardcode_libdir_flag_spec\" 76451473d951Smrg rpath="$rpath $flag" 7646ab47cfaaSmrg fi 76471473d951Smrg elif test -n "$runpath_var"; then 76481473d951Smrg case "$finalize_perm_rpath " in 76491473d951Smrg *" $libdir "*) ;; 76501473d951Smrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 76511473d951Smrg esac 7652ab47cfaaSmrg fi 76531473d951Smrg done 76541473d951Smrg # Substitute the hardcoded libdirs into the rpath. 76551473d951Smrg if test -n "$hardcode_libdir_separator" && 76561473d951Smrg test -n "$hardcode_libdirs"; then 76571473d951Smrg libdir="$hardcode_libdirs" 76581473d951Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 76591473d951Smrg fi 76601473d951Smrg finalize_rpath="$rpath" 7661ab47cfaaSmrg 76621473d951Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 76631473d951Smrg # Transform all the library objects into standard objects. 76641473d951Smrg compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 76651473d951Smrg finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 76661473d951Smrg fi 7667ab47cfaaSmrg 76681473d951Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 7669ab47cfaaSmrg 76701473d951Smrg # template prelinking step 76711473d951Smrg if test -n "$prelink_cmds"; then 76721473d951Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 76731473d951Smrg fi 7674ab47cfaaSmrg 76751473d951Smrg wrappers_required=yes 76761473d951Smrg case $host in 76771473d951Smrg *cygwin* | *mingw* ) 76781473d951Smrg if test "$build_libtool_libs" != yes; then 76791473d951Smrg wrappers_required=no 76801473d951Smrg fi 76811473d951Smrg ;; 76821473d951Smrg *cegcc) 76831473d951Smrg # Disable wrappers for cegcc, we are cross compiling anyway. 76841473d951Smrg wrappers_required=no 76851473d951Smrg ;; 76861473d951Smrg *) 76871473d951Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 76881473d951Smrg wrappers_required=no 76891473d951Smrg fi 76901473d951Smrg ;; 76911473d951Smrg esac 76921473d951Smrg if test "$wrappers_required" = no; then 76931473d951Smrg # Replace the output file specification. 76941473d951Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 76951473d951Smrg link_command="$compile_command$compile_rpath" 7696ab47cfaaSmrg 76971473d951Smrg # We have no uninstalled library dependencies, so finalize right now. 76981473d951Smrg exit_status=0 76991473d951Smrg func_show_eval "$link_command" 'exit_status=$?' 7700ab47cfaaSmrg 77011473d951Smrg # Delete the generated files. 77021473d951Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 77031473d951Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 7704ab47cfaaSmrg fi 7705ab47cfaaSmrg 77061473d951Smrg exit $exit_status 77071473d951Smrg fi 7708ab47cfaaSmrg 77091473d951Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 77101473d951Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 77111473d951Smrg fi 77121473d951Smrg if test -n "$finalize_shlibpath"; then 77131473d951Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 77141473d951Smrg fi 7715ab47cfaaSmrg 77161473d951Smrg compile_var= 77171473d951Smrg finalize_var= 77181473d951Smrg if test -n "$runpath_var"; then 77191473d951Smrg if test -n "$perm_rpath"; then 77201473d951Smrg # We should set the runpath_var. 77211473d951Smrg rpath= 77221473d951Smrg for dir in $perm_rpath; do 77231473d951Smrg rpath="$rpath$dir:" 77241473d951Smrg done 77251473d951Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 7726ab47cfaaSmrg fi 77271473d951Smrg if test -n "$finalize_perm_rpath"; then 77281473d951Smrg # We should set the runpath_var. 77291473d951Smrg rpath= 77301473d951Smrg for dir in $finalize_perm_rpath; do 77311473d951Smrg rpath="$rpath$dir:" 77321473d951Smrg done 77331473d951Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 7734ab47cfaaSmrg fi 77351473d951Smrg fi 7736ab47cfaaSmrg 77371473d951Smrg if test "$no_install" = yes; then 77381473d951Smrg # We don't need to create a wrapper script. 77391473d951Smrg link_command="$compile_var$compile_command$compile_rpath" 77401473d951Smrg # Replace the output file specification. 77411473d951Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 77421473d951Smrg # Delete the old output file. 77431473d951Smrg $opt_dry_run || $RM $output 77441473d951Smrg # Link the executable and exit 77451473d951Smrg func_show_eval "$link_command" 'exit $?' 7746ab47cfaaSmrg exit $EXIT_SUCCESS 77471473d951Smrg fi 7748ab47cfaaSmrg 77491473d951Smrg if test "$hardcode_action" = relink; then 77501473d951Smrg # Fast installation is not supported 77511473d951Smrg link_command="$compile_var$compile_command$compile_rpath" 77521473d951Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 77531473d951Smrg 77541473d951Smrg func_warning "this platform does not like uninstalled shared libraries" 77551473d951Smrg func_warning "\`$output' will be relinked during installation" 77561473d951Smrg else 77571473d951Smrg if test "$fast_install" != no; then 77581473d951Smrg link_command="$finalize_var$compile_command$finalize_rpath" 77591473d951Smrg if test "$fast_install" = yes; then 77601473d951Smrg relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` 77611473d951Smrg else 77621473d951Smrg # fast_install is set to needless 77631473d951Smrg relink_command= 77641473d951Smrg fi 7765ab47cfaaSmrg else 77661473d951Smrg link_command="$compile_var$compile_command$compile_rpath" 77671473d951Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 7768ab47cfaaSmrg fi 77691473d951Smrg fi 7770ab47cfaaSmrg 77711473d951Smrg # Replace the output file specification. 77721473d951Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 7773ab47cfaaSmrg 77741473d951Smrg # Delete the old output files. 77751473d951Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 7776ab47cfaaSmrg 77771473d951Smrg func_show_eval "$link_command" 'exit $?' 7778ab47cfaaSmrg 77791473d951Smrg # Now create the wrapper script. 77801473d951Smrg func_verbose "creating $output" 7781ab47cfaaSmrg 77821473d951Smrg # Quote the relink command for shipping. 77831473d951Smrg if test -n "$relink_command"; then 77841473d951Smrg # Preserve any variables that may affect compiler behavior 77851473d951Smrg for var in $variables_saved_for_relink; do 77861473d951Smrg if eval test -z \"\${$var+set}\"; then 77871473d951Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 77881473d951Smrg elif eval var_value=\$$var; test -z "$var_value"; then 77891473d951Smrg relink_command="$var=; export $var; $relink_command" 7790ab47cfaaSmrg else 77911473d951Smrg func_quote_for_eval "$var_value" 77921473d951Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 7793ab47cfaaSmrg fi 77941473d951Smrg done 77951473d951Smrg relink_command="(cd `pwd`; $relink_command)" 77961473d951Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 77971473d951Smrg fi 7798ab47cfaaSmrg 77991473d951Smrg # Quote $ECHO for shipping. 78001473d951Smrg if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then 78011473d951Smrg case $progpath in 78021473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 78031473d951Smrg *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 78041473d951Smrg esac 78051473d951Smrg qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` 78061473d951Smrg else 78071473d951Smrg qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` 78081473d951Smrg fi 78091473d951Smrg 78101473d951Smrg # Only actually do things if not in dry run mode. 78111473d951Smrg $opt_dry_run || { 78121473d951Smrg # win32 will think the script is a binary if it has 78131473d951Smrg # a .exe suffix, so we strip it off here. 78141473d951Smrg case $output in 78151473d951Smrg *.exe) func_stripname '' '.exe' "$output" 78161473d951Smrg output=$func_stripname_result ;; 78171473d951Smrg esac 78181473d951Smrg # test for cygwin because mv fails w/o .exe extensions 78191473d951Smrg case $host in 78201473d951Smrg *cygwin*) 78211473d951Smrg exeext=.exe 78221473d951Smrg func_stripname '' '.exe' "$outputname" 78231473d951Smrg outputname=$func_stripname_result ;; 78241473d951Smrg *) exeext= ;; 7825ab47cfaaSmrg esac 78261473d951Smrg case $host in 78271473d951Smrg *cygwin* | *mingw* ) 78281473d951Smrg func_dirname_and_basename "$output" "" "." 78291473d951Smrg output_name=$func_basename_result 78301473d951Smrg output_path=$func_dirname_result 78311473d951Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 78321473d951Smrg cwrapper="$output_path/$output_name.exe" 78331473d951Smrg $RM $cwrappersource $cwrapper 78341473d951Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 78351473d951Smrg 78361473d951Smrg func_emit_cwrapperexe_src > $cwrappersource 78371473d951Smrg 78381473d951Smrg # The wrapper executable is built using the $host compiler, 78391473d951Smrg # because it contains $host paths and files. If cross- 78401473d951Smrg # compiling, it, like the target executable, must be 78411473d951Smrg # executed on the $host or under an emulation environment. 78421473d951Smrg $opt_dry_run || { 78431473d951Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 78441473d951Smrg $STRIP $cwrapper 78451473d951Smrg } 7846ab47cfaaSmrg 78471473d951Smrg # Now, create the wrapper script for func_source use: 78481473d951Smrg func_ltwrapper_scriptname $cwrapper 78491473d951Smrg $RM $func_ltwrapper_scriptname_result 78501473d951Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 78511473d951Smrg $opt_dry_run || { 78521473d951Smrg # note: this script will not be executed, so do not chmod. 78531473d951Smrg if test "x$build" = "x$host" ; then 78541473d951Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 78551473d951Smrg else 78561473d951Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 78571473d951Smrg fi 78581473d951Smrg } 78591473d951Smrg ;; 78601473d951Smrg * ) 78611473d951Smrg $RM $output 78621473d951Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 7863ab47cfaaSmrg 78641473d951Smrg func_emit_wrapper no > $output 78651473d951Smrg chmod +x $output 78661473d951Smrg ;; 78671473d951Smrg esac 78681473d951Smrg } 78691473d951Smrg exit $EXIT_SUCCESS 78701473d951Smrg ;; 78711473d951Smrg esac 7872ab47cfaaSmrg 78731473d951Smrg # See if we need to build an old-fashioned archive. 78741473d951Smrg for oldlib in $oldlibs; do 7875ab47cfaaSmrg 78761473d951Smrg if test "$build_libtool_libs" = convenience; then 78771473d951Smrg oldobjs="$libobjs_save $symfileobj" 78781473d951Smrg addlibs="$convenience" 78791473d951Smrg build_libtool_libs=no 78801473d951Smrg else 78811473d951Smrg if test "$build_libtool_libs" = module; then 78821473d951Smrg oldobjs="$libobjs_save" 78831473d951Smrg build_libtool_libs=no 78841473d951Smrg else 78851473d951Smrg oldobjs="$old_deplibs $non_pic_objects" 78861473d951Smrg if test "$preload" = yes && test -f "$symfileobj"; then 78871473d951Smrg oldobjs="$oldobjs $symfileobj" 78881473d951Smrg fi 78891473d951Smrg fi 78901473d951Smrg addlibs="$old_convenience" 7891ab47cfaaSmrg fi 7892ab47cfaaSmrg 78931473d951Smrg if test -n "$addlibs"; then 78941473d951Smrg gentop="$output_objdir/${outputname}x" 78951473d951Smrg generated="$generated $gentop" 7896ab47cfaaSmrg 78971473d951Smrg func_extract_archives $gentop $addlibs 78981473d951Smrg oldobjs="$oldobjs $func_extract_archives_result" 78991473d951Smrg fi 7900ab47cfaaSmrg 79011473d951Smrg # Do each command in the archive commands. 79021473d951Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 79031473d951Smrg cmds=$old_archive_from_new_cmds 79041473d951Smrg else 7905ab47cfaaSmrg 79061473d951Smrg # Add any objects from preloaded convenience libraries 79071473d951Smrg if test -n "$dlprefiles"; then 79081473d951Smrg gentop="$output_objdir/${outputname}x" 79091473d951Smrg generated="$generated $gentop" 7910ab47cfaaSmrg 79111473d951Smrg func_extract_archives $gentop $dlprefiles 79121473d951Smrg oldobjs="$oldobjs $func_extract_archives_result" 79131473d951Smrg fi 7914ab47cfaaSmrg 79151473d951Smrg # POSIX demands no paths to be encoded in archives. We have 79161473d951Smrg # to avoid creating archives with duplicate basenames if we 79171473d951Smrg # might have to extract them afterwards, e.g., when creating a 79181473d951Smrg # static archive out of a convenience library, or when linking 79191473d951Smrg # the entirety of a libtool archive into another (currently 79201473d951Smrg # not supported by libtool). 79211473d951Smrg if (for obj in $oldobjs 79221473d951Smrg do 79231473d951Smrg func_basename "$obj" 79241473d951Smrg $ECHO "$func_basename_result" 79251473d951Smrg done | sort | sort -uc >/dev/null 2>&1); then 79261473d951Smrg : 79271473d951Smrg else 79281473d951Smrg $ECHO "copying selected object files to avoid basename conflicts..." 79291473d951Smrg gentop="$output_objdir/${outputname}x" 79301473d951Smrg generated="$generated $gentop" 79311473d951Smrg func_mkdir_p "$gentop" 79321473d951Smrg save_oldobjs=$oldobjs 79331473d951Smrg oldobjs= 79341473d951Smrg counter=1 79351473d951Smrg for obj in $save_oldobjs 79361473d951Smrg do 79371473d951Smrg func_basename "$obj" 79381473d951Smrg objbase="$func_basename_result" 79391473d951Smrg case " $oldobjs " in 79401473d951Smrg " ") oldobjs=$obj ;; 79411473d951Smrg *[\ /]"$objbase "*) 79421473d951Smrg while :; do 79431473d951Smrg # Make sure we don't pick an alternate name that also 79441473d951Smrg # overlaps. 79451473d951Smrg newobj=lt$counter-$objbase 79461473d951Smrg func_arith $counter + 1 79471473d951Smrg counter=$func_arith_result 79481473d951Smrg case " $oldobjs " in 79491473d951Smrg *[\ /]"$newobj "*) ;; 79501473d951Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 79511473d951Smrg esac 79521473d951Smrg done 79531473d951Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 79541473d951Smrg oldobjs="$oldobjs $gentop/$newobj" 79551473d951Smrg ;; 79561473d951Smrg *) oldobjs="$oldobjs $obj" ;; 79571473d951Smrg esac 7958ab47cfaaSmrg done 7959ab47cfaaSmrg fi 79601473d951Smrg eval cmds=\"$old_archive_cmds\" 7961ab47cfaaSmrg 79621473d951Smrg func_len " $cmds" 79631473d951Smrg len=$func_len_result 79641473d951Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 79651473d951Smrg cmds=$old_archive_cmds 79661473d951Smrg else 79671473d951Smrg # the command line is too long to link in one step, link in parts 79681473d951Smrg func_verbose "using piecewise archive linking..." 79691473d951Smrg save_RANLIB=$RANLIB 79701473d951Smrg RANLIB=: 79711473d951Smrg objlist= 79721473d951Smrg concat_cmds= 79731473d951Smrg save_oldobjs=$oldobjs 79741473d951Smrg oldobjs= 79751473d951Smrg # Is there a better way of finding the last object in the list? 79761473d951Smrg for obj in $save_oldobjs 79771473d951Smrg do 79781473d951Smrg last_oldobj=$obj 79791473d951Smrg done 79801473d951Smrg eval test_cmds=\"$old_archive_cmds\" 79811473d951Smrg func_len " $test_cmds" 79821473d951Smrg len0=$func_len_result 79831473d951Smrg len=$len0 79841473d951Smrg for obj in $save_oldobjs 79851473d951Smrg do 79861473d951Smrg func_len " $obj" 79871473d951Smrg func_arith $len + $func_len_result 79881473d951Smrg len=$func_arith_result 79891473d951Smrg func_append objlist " $obj" 79901473d951Smrg if test "$len" -lt "$max_cmd_len"; then 79911473d951Smrg : 79921473d951Smrg else 79931473d951Smrg # the above command should be used before it gets too long 79941473d951Smrg oldobjs=$objlist 79951473d951Smrg if test "$obj" = "$last_oldobj" ; then 79961473d951Smrg RANLIB=$save_RANLIB 79971473d951Smrg fi 79981473d951Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 79991473d951Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 80001473d951Smrg objlist= 80011473d951Smrg len=$len0 80021473d951Smrg fi 80031473d951Smrg done 80041473d951Smrg RANLIB=$save_RANLIB 80051473d951Smrg oldobjs=$objlist 80061473d951Smrg if test "X$oldobjs" = "X" ; then 80071473d951Smrg eval cmds=\"\$concat_cmds\" 80081473d951Smrg else 80091473d951Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 80101473d951Smrg fi 80111473d951Smrg fi 80121473d951Smrg fi 80131473d951Smrg func_execute_cmds "$cmds" 'exit $?' 8014ab47cfaaSmrg done 8015ab47cfaaSmrg 80161473d951Smrg test -n "$generated" && \ 80171473d951Smrg func_show_eval "${RM}r$generated" 8018ab47cfaaSmrg 80191473d951Smrg # Now create the libtool archive. 80201473d951Smrg case $output in 80211473d951Smrg *.la) 80221473d951Smrg old_library= 80231473d951Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 80241473d951Smrg func_verbose "creating $output" 8025ab47cfaaSmrg 80261473d951Smrg # Preserve any variables that may affect compiler behavior 80271473d951Smrg for var in $variables_saved_for_relink; do 80281473d951Smrg if eval test -z \"\${$var+set}\"; then 80291473d951Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 80301473d951Smrg elif eval var_value=\$$var; test -z "$var_value"; then 80311473d951Smrg relink_command="$var=; export $var; $relink_command" 8032ab47cfaaSmrg else 80331473d951Smrg func_quote_for_eval "$var_value" 80341473d951Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8035ab47cfaaSmrg fi 80361473d951Smrg done 80371473d951Smrg # Quote the link command for shipping. 80381473d951Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 80391473d951Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 80401473d951Smrg if test "$hardcode_automatic" = yes ; then 80411473d951Smrg relink_command= 80421473d951Smrg fi 8043ab47cfaaSmrg 80441473d951Smrg # Only create the output if not a dry run. 80451473d951Smrg $opt_dry_run || { 80461473d951Smrg for installed in no yes; do 80471473d951Smrg if test "$installed" = yes; then 80481473d951Smrg if test -z "$install_libdir"; then 80491473d951Smrg break 80501473d951Smrg fi 80511473d951Smrg output="$output_objdir/$outputname"i 80521473d951Smrg # Replace all uninstalled libtool libraries with the installed ones 80531473d951Smrg newdependency_libs= 80541473d951Smrg for deplib in $dependency_libs; do 80551473d951Smrg case $deplib in 80561473d951Smrg *.la) 80571473d951Smrg func_basename "$deplib" 80581473d951Smrg name="$func_basename_result" 80591473d951Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 80601473d951Smrg test -z "$libdir" && \ 80611473d951Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 80621473d951Smrg newdependency_libs="$newdependency_libs $libdir/$name" 80631473d951Smrg ;; 80641473d951Smrg *) newdependency_libs="$newdependency_libs $deplib" ;; 80651473d951Smrg esac 80661473d951Smrg done 80671473d951Smrg dependency_libs="$newdependency_libs" 80681473d951Smrg newdlfiles= 80691473d951Smrg 80701473d951Smrg for lib in $dlfiles; do 80711473d951Smrg case $lib in 80721473d951Smrg *.la) 80731473d951Smrg func_basename "$lib" 80741473d951Smrg name="$func_basename_result" 80751473d951Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 80761473d951Smrg test -z "$libdir" && \ 80771473d951Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 80781473d951Smrg newdlfiles="$newdlfiles $libdir/$name" 80791473d951Smrg ;; 80801473d951Smrg *) newdlfiles="$newdlfiles $lib" ;; 80811473d951Smrg esac 80821473d951Smrg done 80831473d951Smrg dlfiles="$newdlfiles" 80841473d951Smrg newdlprefiles= 80851473d951Smrg for lib in $dlprefiles; do 80861473d951Smrg case $lib in 80871473d951Smrg *.la) 80881473d951Smrg # Only pass preopened files to the pseudo-archive (for 80891473d951Smrg # eventual linking with the app. that links it) if we 80901473d951Smrg # didn't already link the preopened objects directly into 80911473d951Smrg # the library: 80921473d951Smrg func_basename "$lib" 80931473d951Smrg name="$func_basename_result" 80941473d951Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 80951473d951Smrg test -z "$libdir" && \ 80961473d951Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 80971473d951Smrg newdlprefiles="$newdlprefiles $libdir/$name" 80981473d951Smrg ;; 80991473d951Smrg esac 81001473d951Smrg done 81011473d951Smrg dlprefiles="$newdlprefiles" 81021473d951Smrg else 81031473d951Smrg newdlfiles= 81041473d951Smrg for lib in $dlfiles; do 81051473d951Smrg case $lib in 81061473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 81071473d951Smrg *) abs=`pwd`"/$lib" ;; 81081473d951Smrg esac 81091473d951Smrg newdlfiles="$newdlfiles $abs" 81101473d951Smrg done 81111473d951Smrg dlfiles="$newdlfiles" 81121473d951Smrg newdlprefiles= 81131473d951Smrg for lib in $dlprefiles; do 81141473d951Smrg case $lib in 81151473d951Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 81161473d951Smrg *) abs=`pwd`"/$lib" ;; 81171473d951Smrg esac 81181473d951Smrg newdlprefiles="$newdlprefiles $abs" 81191473d951Smrg done 81201473d951Smrg dlprefiles="$newdlprefiles" 81211473d951Smrg fi 81221473d951Smrg $RM $output 81231473d951Smrg # place dlname in correct position for cygwin 81241473d951Smrg tdlname=$dlname 81251473d951Smrg case $host,$output,$installed,$module,$dlname in 81261473d951Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 81271473d951Smrg esac 81281473d951Smrg $ECHO > $output "\ 81291473d951Smrg# $outputname - a libtool library file 81301473d951Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 81311473d951Smrg# 81321473d951Smrg# Please DO NOT delete this file! 81331473d951Smrg# It is necessary for linking the library. 8134ab47cfaaSmrg 81351473d951Smrg# The name that we can dlopen(3). 81361473d951Smrgdlname='$tdlname' 8137ab47cfaaSmrg 81381473d951Smrg# Names of this library. 81391473d951Smrglibrary_names='$library_names' 8140ab47cfaaSmrg 81411473d951Smrg# The name of the static archive. 81421473d951Smrgold_library='$old_library' 8143ab47cfaaSmrg 81441473d951Smrg# Linker flags that can not go in dependency_libs. 81451473d951Smrginherited_linker_flags='$new_inherited_linker_flags' 8146ab47cfaaSmrg 81471473d951Smrg# Libraries that this one depends upon. 81481473d951Smrgdependency_libs='$dependency_libs' 8149ab47cfaaSmrg 81501473d951Smrg# Names of additional weak libraries provided by this library 81511473d951Smrgweak_library_names='$weak_libs' 8152ab47cfaaSmrg 81531473d951Smrg# Version information for $libname. 81541473d951Smrgcurrent=$current 81551473d951Smrgage=$age 81561473d951Smrgrevision=$revision 8157ab47cfaaSmrg 81581473d951Smrg# Is this an already installed library? 81591473d951Smrginstalled=$installed 8160ab47cfaaSmrg 81611473d951Smrg# Should we warn about portability when linking against -modules? 81621473d951Smrgshouldnotlink=$module 8163ab47cfaaSmrg 81641473d951Smrg# Files to dlopen/dlpreopen 81651473d951Smrgdlopen='$dlfiles' 81661473d951Smrgdlpreopen='$dlprefiles' 8167ab47cfaaSmrg 81681473d951Smrg# Directory that this library needs to be installed in: 81691473d951Smrglibdir='$install_libdir'" 81701473d951Smrg if test "$installed" = no && test "$need_relink" = yes; then 81711473d951Smrg $ECHO >> $output "\ 81721473d951Smrgrelink_command=\"$relink_command\"" 81731473d951Smrg fi 81741473d951Smrg done 81751473d951Smrg } 8176ab47cfaaSmrg 81771473d951Smrg # Do a symbolic link so that the libtool archive can be found in 81781473d951Smrg # LD_LIBRARY_PATH before the program is installed. 81791473d951Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 81801473d951Smrg ;; 81811473d951Smrg esac 81821473d951Smrg exit $EXIT_SUCCESS 81831473d951Smrg} 8184ab47cfaaSmrg 81851473d951Smrg{ test "$mode" = link || test "$mode" = relink; } && 81861473d951Smrg func_mode_link ${1+"$@"} 8187ab47cfaaSmrg 8188ab47cfaaSmrg 81891473d951Smrg# func_mode_uninstall arg... 81901473d951Smrgfunc_mode_uninstall () 81911473d951Smrg{ 81921473d951Smrg $opt_debug 81931473d951Smrg RM="$nonopt" 8194ab47cfaaSmrg files= 8195ab47cfaaSmrg rmforce= 8196ab47cfaaSmrg exit_status=0 8197ab47cfaaSmrg 8198ab47cfaaSmrg # This variable tells wrapper scripts just to set variables rather 8199ab47cfaaSmrg # than running their programs. 8200ab47cfaaSmrg libtool_install_magic="$magic" 8201ab47cfaaSmrg 8202ab47cfaaSmrg for arg 8203ab47cfaaSmrg do 8204ab47cfaaSmrg case $arg in 82051473d951Smrg -f) RM="$RM $arg"; rmforce=yes ;; 82061473d951Smrg -*) RM="$RM $arg" ;; 8207ab47cfaaSmrg *) files="$files $arg" ;; 8208ab47cfaaSmrg esac 8209ab47cfaaSmrg done 8210ab47cfaaSmrg 82111473d951Smrg test -z "$RM" && \ 82121473d951Smrg func_fatal_help "you must specify an RM program" 8213ab47cfaaSmrg 8214ab47cfaaSmrg rmdirs= 8215ab47cfaaSmrg 8216ab47cfaaSmrg origobjdir="$objdir" 8217ab47cfaaSmrg for file in $files; do 82181473d951Smrg func_dirname "$file" "" "." 82191473d951Smrg dir="$func_dirname_result" 82201473d951Smrg if test "X$dir" = X.; then 8221ab47cfaaSmrg objdir="$origobjdir" 8222ab47cfaaSmrg else 8223ab47cfaaSmrg objdir="$dir/$origobjdir" 8224ab47cfaaSmrg fi 82251473d951Smrg func_basename "$file" 82261473d951Smrg name="$func_basename_result" 8227ab47cfaaSmrg test "$mode" = uninstall && objdir="$dir" 8228ab47cfaaSmrg 8229ab47cfaaSmrg # Remember objdir for removal later, being careful to avoid duplicates 8230ab47cfaaSmrg if test "$mode" = clean; then 8231ab47cfaaSmrg case " $rmdirs " in 8232ab47cfaaSmrg *" $objdir "*) ;; 8233ab47cfaaSmrg *) rmdirs="$rmdirs $objdir" ;; 8234ab47cfaaSmrg esac 8235ab47cfaaSmrg fi 8236ab47cfaaSmrg 8237ab47cfaaSmrg # Don't error if the file doesn't exist and rm -f was used. 82381473d951Smrg if { test -L "$file"; } >/dev/null 2>&1 || 82391473d951Smrg { test -h "$file"; } >/dev/null 2>&1 || 82401473d951Smrg test -f "$file"; then 8241ab47cfaaSmrg : 8242ab47cfaaSmrg elif test -d "$file"; then 8243ab47cfaaSmrg exit_status=1 8244ab47cfaaSmrg continue 8245ab47cfaaSmrg elif test "$rmforce" = yes; then 8246ab47cfaaSmrg continue 8247ab47cfaaSmrg fi 8248ab47cfaaSmrg 8249ab47cfaaSmrg rmfiles="$file" 8250ab47cfaaSmrg 8251ab47cfaaSmrg case $name in 8252ab47cfaaSmrg *.la) 8253ab47cfaaSmrg # Possibly a libtool archive, so verify it. 82541473d951Smrg if func_lalib_p "$file"; then 82551473d951Smrg func_source $dir/$name 8256ab47cfaaSmrg 8257ab47cfaaSmrg # Delete the libtool libraries and symlinks. 8258ab47cfaaSmrg for n in $library_names; do 8259ab47cfaaSmrg rmfiles="$rmfiles $objdir/$n" 8260ab47cfaaSmrg done 8261ab47cfaaSmrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 8262ab47cfaaSmrg 8263ab47cfaaSmrg case "$mode" in 8264ab47cfaaSmrg clean) 8265ab47cfaaSmrg case " $library_names " in 8266ab47cfaaSmrg # " " in the beginning catches empty $dlname 8267ab47cfaaSmrg *" $dlname "*) ;; 8268ab47cfaaSmrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 8269ab47cfaaSmrg esac 82701473d951Smrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 8271ab47cfaaSmrg ;; 8272ab47cfaaSmrg uninstall) 8273ab47cfaaSmrg if test -n "$library_names"; then 8274ab47cfaaSmrg # Do each command in the postuninstall commands. 82751473d951Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8276ab47cfaaSmrg fi 8277ab47cfaaSmrg 8278ab47cfaaSmrg if test -n "$old_library"; then 8279ab47cfaaSmrg # Do each command in the old_postuninstall commands. 82801473d951Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8281ab47cfaaSmrg fi 8282ab47cfaaSmrg # FIXME: should reinstall the best remaining shared library. 8283ab47cfaaSmrg ;; 8284ab47cfaaSmrg esac 8285ab47cfaaSmrg fi 8286ab47cfaaSmrg ;; 8287ab47cfaaSmrg 8288ab47cfaaSmrg *.lo) 8289ab47cfaaSmrg # Possibly a libtool object, so verify it. 82901473d951Smrg if func_lalib_p "$file"; then 8291ab47cfaaSmrg 8292ab47cfaaSmrg # Read the .lo file 82931473d951Smrg func_source $dir/$name 8294ab47cfaaSmrg 8295ab47cfaaSmrg # Add PIC object to the list of files to remove. 82961473d951Smrg if test -n "$pic_object" && 82971473d951Smrg test "$pic_object" != none; then 8298ab47cfaaSmrg rmfiles="$rmfiles $dir/$pic_object" 8299ab47cfaaSmrg fi 8300ab47cfaaSmrg 8301ab47cfaaSmrg # Add non-PIC object to the list of files to remove. 83021473d951Smrg if test -n "$non_pic_object" && 83031473d951Smrg test "$non_pic_object" != none; then 8304ab47cfaaSmrg rmfiles="$rmfiles $dir/$non_pic_object" 8305ab47cfaaSmrg fi 8306ab47cfaaSmrg fi 8307ab47cfaaSmrg ;; 8308ab47cfaaSmrg 8309ab47cfaaSmrg *) 8310ab47cfaaSmrg if test "$mode" = clean ; then 8311ab47cfaaSmrg noexename=$name 8312ab47cfaaSmrg case $file in 8313ab47cfaaSmrg *.exe) 83141473d951Smrg func_stripname '' '.exe' "$file" 83151473d951Smrg file=$func_stripname_result 83161473d951Smrg func_stripname '' '.exe' "$name" 83171473d951Smrg noexename=$func_stripname_result 8318ab47cfaaSmrg # $file with .exe has already been added to rmfiles, 8319ab47cfaaSmrg # add $file without .exe 8320ab47cfaaSmrg rmfiles="$rmfiles $file" 8321ab47cfaaSmrg ;; 8322ab47cfaaSmrg esac 8323ab47cfaaSmrg # Do a test to see if this is a libtool program. 83241473d951Smrg if func_ltwrapper_p "$file"; then 83251473d951Smrg if func_ltwrapper_executable_p "$file"; then 83261473d951Smrg func_ltwrapper_scriptname "$file" 83271473d951Smrg relink_command= 83281473d951Smrg func_source $func_ltwrapper_scriptname_result 83291473d951Smrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 83301473d951Smrg else 83311473d951Smrg relink_command= 83321473d951Smrg func_source $dir/$noexename 83331473d951Smrg fi 8334ab47cfaaSmrg 8335ab47cfaaSmrg # note $name still contains .exe if it was in $file originally 8336ab47cfaaSmrg # as does the version of $file that was added into $rmfiles 8337ab47cfaaSmrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 8338ab47cfaaSmrg if test "$fast_install" = yes && test -n "$relink_command"; then 8339ab47cfaaSmrg rmfiles="$rmfiles $objdir/lt-$name" 8340ab47cfaaSmrg fi 8341ab47cfaaSmrg if test "X$noexename" != "X$name" ; then 8342ab47cfaaSmrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 8343ab47cfaaSmrg fi 8344ab47cfaaSmrg fi 8345ab47cfaaSmrg fi 8346ab47cfaaSmrg ;; 8347ab47cfaaSmrg esac 83481473d951Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 8349ab47cfaaSmrg done 8350ab47cfaaSmrg objdir="$origobjdir" 8351ab47cfaaSmrg 8352ab47cfaaSmrg # Try to remove the ${objdir}s in the directories where we deleted files 8353ab47cfaaSmrg for dir in $rmdirs; do 8354ab47cfaaSmrg if test -d "$dir"; then 83551473d951Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 8356ab47cfaaSmrg fi 8357ab47cfaaSmrg done 8358ab47cfaaSmrg 8359ab47cfaaSmrg exit $exit_status 83601473d951Smrg} 8361ab47cfaaSmrg 83621473d951Smrg{ test "$mode" = uninstall || test "$mode" = clean; } && 83631473d951Smrg func_mode_uninstall ${1+"$@"} 8364ab47cfaaSmrg 83651473d951Smrgtest -z "$mode" && { 83661473d951Smrg help="$generic_help" 83671473d951Smrg func_fatal_help "you must specify a MODE" 83681473d951Smrg} 83691473d951Smrg 83701473d951Smrgtest -z "$exec_cmd" && \ 83711473d951Smrg func_fatal_help "invalid operation mode \`$mode'" 8372ab47cfaaSmrg 8373ab47cfaaSmrgif test -n "$exec_cmd"; then 83741473d951Smrg eval exec "$exec_cmd" 8375ab47cfaaSmrg exit $EXIT_FAILURE 8376ab47cfaaSmrgfi 8377ab47cfaaSmrg 83781473d951Smrgexit $exit_status 8379ab47cfaaSmrg 8380ab47cfaaSmrg 8381ab47cfaaSmrg# The TAGs below are defined such that we never get into a situation 8382ab47cfaaSmrg# in which we disable both kinds of libraries. Given conflicting 8383ab47cfaaSmrg# choices, we go for a static library, that is the most portable, 8384ab47cfaaSmrg# since we can't tell whether shared libraries were disabled because 8385ab47cfaaSmrg# the user asked for that or because the platform doesn't support 8386ab47cfaaSmrg# them. This is particularly important on AIX, because we don't 8387ab47cfaaSmrg# support having both static and shared libraries enabled at the same 8388ab47cfaaSmrg# time on that platform, so we default to a shared-only configuration. 8389ab47cfaaSmrg# If a disable-shared tag is given, we'll fallback to a static-only 8390ab47cfaaSmrg# configuration. But we'll never go from static-only to shared-only. 8391ab47cfaaSmrg 8392ab47cfaaSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 83931473d951Smrgbuild_libtool_libs=no 83941473d951Smrgbuild_old_libs=yes 8395ab47cfaaSmrg# ### END LIBTOOL TAG CONFIG: disable-shared 8396ab47cfaaSmrg 8397ab47cfaaSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 83981473d951Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 8399ab47cfaaSmrg# ### END LIBTOOL TAG CONFIG: disable-static 8400ab47cfaaSmrg 8401ab47cfaaSmrg# Local Variables: 8402ab47cfaaSmrg# mode:shell-script 8403ab47cfaaSmrg# sh-indentation:2 8404ab47cfaaSmrg# End: 84051473d951Smrg# vi:sw=2 84061473d951Smrg 8407