ltmain.sh revision 49dc963f
149dc963fSmrg# Generated from ltmain.m4sh. 249dc963fSmrg 349dc963fSmrg# ltmain.sh (GNU libtool) 2.2.6b 449dc963fSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 549dc963fSmrg 649dc963fSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. 749dc963fSmrg# This is free software; see the source for copying conditions. There is NO 849dc963fSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 949dc963fSmrg 1049dc963fSmrg# GNU Libtool is free software; you can redistribute it and/or modify 114b0ead49Smrg# it under the terms of the GNU General Public License as published by 124b0ead49Smrg# the Free Software Foundation; either version 2 of the License, or 134b0ead49Smrg# (at your option) any later version. 144b0ead49Smrg# 1549dc963fSmrg# As a special exception to the GNU General Public License, 1649dc963fSmrg# if you distribute this file as part of a program or library that 1749dc963fSmrg# is built using GNU Libtool, you may include this file under the 1849dc963fSmrg# same distribution terms that you use for the rest of that program. 1949dc963fSmrg# 2049dc963fSmrg# GNU Libtool is distributed in the hope that it will be useful, but 214b0ead49Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 224b0ead49Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 234b0ead49Smrg# General Public License for more details. 244b0ead49Smrg# 254b0ead49Smrg# You should have received a copy of the GNU General Public License 2649dc963fSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 2749dc963fSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 2849dc963fSmrg# or obtained by writing to the Free Software Foundation, Inc., 2949dc963fSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 304b0ead49Smrg 3149dc963fSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 3249dc963fSmrg# 3349dc963fSmrg# Provide generalized library-building support services. 3449dc963fSmrg# 3549dc963fSmrg# --config show all configuration variables 3649dc963fSmrg# --debug enable verbose shell tracing 3749dc963fSmrg# -n, --dry-run display commands without modifying any files 3849dc963fSmrg# --features display basic configuration information and exit 3949dc963fSmrg# --mode=MODE use operation mode MODE 4049dc963fSmrg# --preserve-dup-deps don't remove duplicate dependency libraries 4149dc963fSmrg# --quiet, --silent don't print informational messages 4249dc963fSmrg# --tag=TAG use configuration variables from tag TAG 4349dc963fSmrg# -v, --verbose print informational messages (default) 4449dc963fSmrg# --version print version information 4549dc963fSmrg# -h, --help print short or long help message 4649dc963fSmrg# 4749dc963fSmrg# MODE must be one of the following: 4849dc963fSmrg# 4949dc963fSmrg# clean remove files from the build directory 5049dc963fSmrg# compile compile a source file into a libtool object 5149dc963fSmrg# execute automatically set library path, then run a program 5249dc963fSmrg# finish complete the installation of libtool libraries 5349dc963fSmrg# install install libraries or executables 5449dc963fSmrg# link create a library or an executable 5549dc963fSmrg# uninstall remove libraries from an installed directory 5649dc963fSmrg# 5749dc963fSmrg# MODE-ARGS vary depending on the MODE. 5849dc963fSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 5949dc963fSmrg# 6049dc963fSmrg# When reporting a bug, please describe a test case to reproduce it and 6149dc963fSmrg# include the following information: 6249dc963fSmrg# 6349dc963fSmrg# host-triplet: $host 6449dc963fSmrg# shell: $SHELL 6549dc963fSmrg# compiler: $LTCC 6649dc963fSmrg# compiler flags: $LTCFLAGS 6749dc963fSmrg# linker: $LD (gnu? $with_gnu_ld) 6849dc963fSmrg# $progname: (GNU libtool) 2.2.6b 6949dc963fSmrg# automake: $automake_version 7049dc963fSmrg# autoconf: $autoconf_version 7149dc963fSmrg# 7249dc963fSmrg# Report bugs to <bug-libtool@gnu.org>. 734b0ead49Smrg 744b0ead49SmrgPROGRAM=ltmain.sh 754b0ead49SmrgPACKAGE=libtool 7649dc963fSmrgVERSION=2.2.6b 7749dc963fSmrgTIMESTAMP="" 7849dc963fSmrgpackage_revision=1.3017 7952b01e16Smrg 8049dc963fSmrg# Be Bourne compatible 8152b01e16Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8252b01e16Smrg emulate sh 8352b01e16Smrg NULLCMD=: 8452b01e16Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 8552b01e16Smrg # is contrary to our usage. Disable this feature. 8652b01e16Smrg alias -g '${1+"$@"}'='"$@"' 874b0ead49Smrg setopt NO_GLOB_SUBST 8852b01e16Smrgelse 8952b01e16Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 904b0ead49Smrgfi 9152b01e16SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9252b01e16SmrgDUALCASE=1; export DUALCASE # for MKS sh 934b0ead49Smrg 9449dc963fSmrg# NLS nuisances: We save the old values to restore during execute mode. 954b0ead49Smrg# Only set LANG and LC_ALL to C if already set. 964b0ead49Smrg# These must not be set unconditionally because not all systems understand 974b0ead49Smrg# e.g. LANG=C (notably SCO). 9849dc963fSmrglt_user_locale= 9949dc963fSmrglt_safe_locale= 10052b01e16Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 10152b01e16Smrgdo 10252b01e16Smrg eval "if test \"\${$lt_var+set}\" = set; then 10349dc963fSmrg save_$lt_var=\$$lt_var 10449dc963fSmrg $lt_var=C 10552b01e16Smrg export $lt_var 10649dc963fSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 10749dc963fSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 10852b01e16Smrg fi" 10952b01e16Smrgdone 11052b01e16Smrg 11149dc963fSmrg$lt_unset CDPATH 11249dc963fSmrg 11349dc963fSmrg 11449dc963fSmrg 11549dc963fSmrg 11649dc963fSmrg 11749dc963fSmrg: ${CP="cp -f"} 11849dc963fSmrg: ${ECHO="echo"} 11949dc963fSmrg: ${EGREP="/bin/grep -E"} 12049dc963fSmrg: ${FGREP="/bin/grep -F"} 12149dc963fSmrg: ${GREP="/bin/grep"} 12249dc963fSmrg: ${LN_S="ln -s"} 12349dc963fSmrg: ${MAKE="make"} 12449dc963fSmrg: ${MKDIR="mkdir"} 12549dc963fSmrg: ${MV="mv -f"} 12649dc963fSmrg: ${RM="rm -f"} 12749dc963fSmrg: ${SED="/bin/sed"} 12849dc963fSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 12949dc963fSmrg: ${Xsed="$SED -e 1s/^X//"} 13049dc963fSmrg 13149dc963fSmrg# Global variables: 13249dc963fSmrgEXIT_SUCCESS=0 13349dc963fSmrgEXIT_FAILURE=1 13449dc963fSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 13549dc963fSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 13649dc963fSmrg 13749dc963fSmrgexit_status=$EXIT_SUCCESS 1384b0ead49Smrg 1394b0ead49Smrg# Make sure IFS has a sensible default 1404b0ead49Smrglt_nl=' 1414b0ead49Smrg' 1424b0ead49SmrgIFS=" $lt_nl" 1434b0ead49Smrg 14449dc963fSmrgdirname="s,/[^/]*$,," 14549dc963fSmrgbasename="s,^.*/,," 14649dc963fSmrg 14749dc963fSmrg# func_dirname_and_basename file append nondir_replacement 14849dc963fSmrg# perform func_basename and func_dirname in a single function 14949dc963fSmrg# call: 15049dc963fSmrg# dirname: Compute the dirname of FILE. If nonempty, 15149dc963fSmrg# add APPEND to the result, otherwise set result 15249dc963fSmrg# to NONDIR_REPLACEMENT. 15349dc963fSmrg# value returned in "$func_dirname_result" 15449dc963fSmrg# basename: Compute filename of FILE. 15549dc963fSmrg# value retuned in "$func_basename_result" 15649dc963fSmrg# Implementation must be kept synchronized with func_dirname 15749dc963fSmrg# and func_basename. For efficiency, we do not delegate to 15849dc963fSmrg# those functions but instead duplicate the functionality here. 15949dc963fSmrgfunc_dirname_and_basename () 16049dc963fSmrg{ 16149dc963fSmrg # Extract subdirectory from the argument. 16249dc963fSmrg func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` 16349dc963fSmrg if test "X$func_dirname_result" = "X${1}"; then 16449dc963fSmrg func_dirname_result="${3}" 16549dc963fSmrg else 16649dc963fSmrg func_dirname_result="$func_dirname_result${2}" 16749dc963fSmrg fi 16849dc963fSmrg func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` 16949dc963fSmrg} 1704b0ead49Smrg 17149dc963fSmrg# Generated shell functions inserted here. 17249dc963fSmrg 17349dc963fSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 17449dc963fSmrg# is ksh but when the shell is invoked as "sh" and the current value of 17549dc963fSmrg# the _XPG environment variable is not equal to 1 (one), the special 17649dc963fSmrg# positional parameter $0, within a function call, is the name of the 17749dc963fSmrg# function. 17849dc963fSmrgprogpath="$0" 17949dc963fSmrg 18049dc963fSmrg# The name of this program: 18149dc963fSmrg# In the unlikely event $progname began with a '-', it would play havoc with 18249dc963fSmrg# func_echo (imagine progname=-n), so we prepend ./ in that case: 18349dc963fSmrgfunc_dirname_and_basename "$progpath" 18449dc963fSmrgprogname=$func_basename_result 18549dc963fSmrgcase $progname in 18649dc963fSmrg -*) progname=./$progname ;; 18749dc963fSmrgesac 18849dc963fSmrg 18949dc963fSmrg# Make sure we have an absolute path for reexecution: 19049dc963fSmrgcase $progpath in 19149dc963fSmrg [\\/]*|[A-Za-z]:\\*) ;; 19249dc963fSmrg *[\\/]*) 19349dc963fSmrg progdir=$func_dirname_result 19449dc963fSmrg progdir=`cd "$progdir" && pwd` 19549dc963fSmrg progpath="$progdir/$progname" 19649dc963fSmrg ;; 19749dc963fSmrg *) 19849dc963fSmrg save_IFS="$IFS" 19949dc963fSmrg IFS=: 20049dc963fSmrg for progdir in $PATH; do 20149dc963fSmrg IFS="$save_IFS" 20249dc963fSmrg test -x "$progdir/$progname" && break 20349dc963fSmrg done 20449dc963fSmrg IFS="$save_IFS" 20549dc963fSmrg test -n "$progdir" || progdir=`pwd` 20649dc963fSmrg progpath="$progdir/$progname" 20749dc963fSmrg ;; 20849dc963fSmrgesac 20949dc963fSmrg 21049dc963fSmrg# Sed substitution that helps us do robust quoting. It backslashifies 21149dc963fSmrg# metacharacters that are still active within double-quoted strings. 21249dc963fSmrgXsed="${SED}"' -e 1s/^X//' 21349dc963fSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 21449dc963fSmrg 21549dc963fSmrg# Same as above, but do not quote variable references. 21649dc963fSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 21749dc963fSmrg 21849dc963fSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 21949dc963fSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 22049dc963fSmrg# in input to double_quote_subst, that '$' was protected from expansion. 22149dc963fSmrg# Since each input `\' is now two `\'s, look for any number of runs of 22249dc963fSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 22349dc963fSmrgbs='\\' 22449dc963fSmrgbs2='\\\\' 22549dc963fSmrgbs4='\\\\\\\\' 22649dc963fSmrgdollar='\$' 22749dc963fSmrgsed_double_backslash="\ 22849dc963fSmrg s/$bs4/&\\ 22949dc963fSmrg/g 23049dc963fSmrg s/^$bs2$dollar/$bs&/ 23149dc963fSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 23249dc963fSmrg s/\n//g" 23349dc963fSmrg 23449dc963fSmrg# Standard options: 23549dc963fSmrgopt_dry_run=false 23649dc963fSmrgopt_help=false 23749dc963fSmrgopt_quiet=false 23849dc963fSmrgopt_verbose=false 23949dc963fSmrgopt_warning=: 24049dc963fSmrg 24149dc963fSmrg# func_echo arg... 24249dc963fSmrg# Echo program name prefixed message, along with the current mode 24349dc963fSmrg# name if it has been set yet. 24449dc963fSmrgfunc_echo () 24549dc963fSmrg{ 24649dc963fSmrg $ECHO "$progname${mode+: }$mode: $*" 24749dc963fSmrg} 24849dc963fSmrg 24949dc963fSmrg# func_verbose arg... 25049dc963fSmrg# Echo program name prefixed message in verbose mode only. 25149dc963fSmrgfunc_verbose () 25249dc963fSmrg{ 25349dc963fSmrg $opt_verbose && func_echo ${1+"$@"} 25449dc963fSmrg 25549dc963fSmrg # A bug in bash halts the script if the last line of a function 25649dc963fSmrg # fails when set -e is in force, so we need another command to 25749dc963fSmrg # work around that: 25849dc963fSmrg : 25949dc963fSmrg} 26049dc963fSmrg 26149dc963fSmrg# func_error arg... 26249dc963fSmrg# Echo program name prefixed message to standard error. 26349dc963fSmrgfunc_error () 26449dc963fSmrg{ 26549dc963fSmrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 26649dc963fSmrg} 26749dc963fSmrg 26849dc963fSmrg# func_warning arg... 26949dc963fSmrg# Echo program name prefixed warning message to standard error. 27049dc963fSmrgfunc_warning () 27149dc963fSmrg{ 27249dc963fSmrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 27349dc963fSmrg 27449dc963fSmrg # bash bug again: 27549dc963fSmrg : 27649dc963fSmrg} 27749dc963fSmrg 27849dc963fSmrg# func_fatal_error arg... 27949dc963fSmrg# Echo program name prefixed message to standard error, and exit. 28049dc963fSmrgfunc_fatal_error () 28149dc963fSmrg{ 28249dc963fSmrg func_error ${1+"$@"} 28349dc963fSmrg exit $EXIT_FAILURE 28449dc963fSmrg} 28549dc963fSmrg 28649dc963fSmrg# func_fatal_help arg... 28749dc963fSmrg# Echo program name prefixed message to standard error, followed by 28849dc963fSmrg# a help hint, and exit. 28949dc963fSmrgfunc_fatal_help () 29049dc963fSmrg{ 29149dc963fSmrg func_error ${1+"$@"} 29249dc963fSmrg func_fatal_error "$help" 29349dc963fSmrg} 29449dc963fSmrghelp="Try \`$progname --help' for more information." ## default 29549dc963fSmrg 29649dc963fSmrg 29749dc963fSmrg# func_grep expression filename 29849dc963fSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 29949dc963fSmrgfunc_grep () 30049dc963fSmrg{ 30149dc963fSmrg $GREP "$1" "$2" >/dev/null 2>&1 30249dc963fSmrg} 30349dc963fSmrg 30449dc963fSmrg 30549dc963fSmrg# func_mkdir_p directory-path 30649dc963fSmrg# Make sure the entire path to DIRECTORY-PATH is available. 30749dc963fSmrgfunc_mkdir_p () 30849dc963fSmrg{ 30949dc963fSmrg my_directory_path="$1" 31049dc963fSmrg my_dir_list= 31149dc963fSmrg 31249dc963fSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 31349dc963fSmrg 31449dc963fSmrg # Protect directory names starting with `-' 31549dc963fSmrg case $my_directory_path in 31649dc963fSmrg -*) my_directory_path="./$my_directory_path" ;; 31749dc963fSmrg esac 31849dc963fSmrg 31949dc963fSmrg # While some portion of DIR does not yet exist... 32049dc963fSmrg while test ! -d "$my_directory_path"; do 32149dc963fSmrg # ...make a list in topmost first order. Use a colon delimited 32249dc963fSmrg # list incase some portion of path contains whitespace. 32349dc963fSmrg my_dir_list="$my_directory_path:$my_dir_list" 32449dc963fSmrg 32549dc963fSmrg # If the last portion added has no slash in it, the list is done 32649dc963fSmrg case $my_directory_path in */*) ;; *) break ;; esac 32749dc963fSmrg 32849dc963fSmrg # ...otherwise throw away the child directory and loop 32949dc963fSmrg my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` 33049dc963fSmrg done 33149dc963fSmrg my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` 33249dc963fSmrg 33349dc963fSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 33449dc963fSmrg for my_dir in $my_dir_list; do 33549dc963fSmrg IFS="$save_mkdir_p_IFS" 33649dc963fSmrg # mkdir can fail with a `File exist' error if two processes 33749dc963fSmrg # try to create one of the directories concurrently. Don't 33849dc963fSmrg # stop in that case! 33949dc963fSmrg $MKDIR "$my_dir" 2>/dev/null || : 34049dc963fSmrg done 34149dc963fSmrg IFS="$save_mkdir_p_IFS" 34249dc963fSmrg 34349dc963fSmrg # Bail out if we (or some other process) failed to create a directory. 34449dc963fSmrg test -d "$my_directory_path" || \ 34549dc963fSmrg func_fatal_error "Failed to create \`$1'" 34649dc963fSmrg fi 34749dc963fSmrg} 3484b0ead49Smrg 3494b0ead49Smrg 3504b0ead49Smrg# func_mktempdir [string] 3514b0ead49Smrg# Make a temporary directory that won't clash with other running 3524b0ead49Smrg# libtool processes, and avoids race conditions if possible. If 3534b0ead49Smrg# given, STRING is the basename for that directory. 3544b0ead49Smrgfunc_mktempdir () 3554b0ead49Smrg{ 3564b0ead49Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 3574b0ead49Smrg 35849dc963fSmrg if test "$opt_dry_run" = ":"; then 3594b0ead49Smrg # Return a directory name, but don't create it in dry-run mode 3604b0ead49Smrg my_tmpdir="${my_template}-$$" 3614b0ead49Smrg else 3624b0ead49Smrg 3634b0ead49Smrg # If mktemp works, use that first and foremost 3644b0ead49Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 3654b0ead49Smrg 3664b0ead49Smrg if test ! -d "$my_tmpdir"; then 36749dc963fSmrg # Failing that, at least try and use $RANDOM to avoid a race 36849dc963fSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 3694b0ead49Smrg 37049dc963fSmrg save_mktempdir_umask=`umask` 37149dc963fSmrg umask 0077 37249dc963fSmrg $MKDIR "$my_tmpdir" 37349dc963fSmrg umask $save_mktempdir_umask 3744b0ead49Smrg fi 3754b0ead49Smrg 3764b0ead49Smrg # If we're not in dry-run mode, bomb out on failure 37749dc963fSmrg test -d "$my_tmpdir" || \ 37849dc963fSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 3794b0ead49Smrg fi 3804b0ead49Smrg 38149dc963fSmrg $ECHO "X$my_tmpdir" | $Xsed 3824b0ead49Smrg} 3834b0ead49Smrg 3844b0ead49Smrg 38549dc963fSmrg# func_quote_for_eval arg 38649dc963fSmrg# Aesthetically quote ARG to be evaled later. 38749dc963fSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 38849dc963fSmrg# is double-quoted, suitable for a subsequent eval, whereas 38949dc963fSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 39049dc963fSmrg# which are still active within double quotes backslashified. 39149dc963fSmrgfunc_quote_for_eval () 3924b0ead49Smrg{ 39349dc963fSmrg case $1 in 39449dc963fSmrg *[\\\`\"\$]*) 39549dc963fSmrg func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; 39649dc963fSmrg *) 39749dc963fSmrg func_quote_for_eval_unquoted_result="$1" ;; 39849dc963fSmrg esac 39949dc963fSmrg 40049dc963fSmrg case $func_quote_for_eval_unquoted_result in 40149dc963fSmrg # Double-quote args containing shell metacharacters to delay 40249dc963fSmrg # word splitting, command substitution and and variable 40349dc963fSmrg # expansion for a subsequent eval. 40449dc963fSmrg # Many Bourne shells cannot handle close brackets correctly 40549dc963fSmrg # in scan sets, so we specify it separately. 40649dc963fSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 40749dc963fSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 40849dc963fSmrg ;; 40949dc963fSmrg *) 41049dc963fSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 4114b0ead49Smrg esac 4124b0ead49Smrg} 4134b0ead49Smrg 4144b0ead49Smrg 41549dc963fSmrg# func_quote_for_expand arg 41649dc963fSmrg# Aesthetically quote ARG to be evaled later; same as above, 41749dc963fSmrg# but do not quote variable references. 41849dc963fSmrgfunc_quote_for_expand () 4194b0ead49Smrg{ 42049dc963fSmrg case $1 in 42149dc963fSmrg *[\\\`\"]*) 42249dc963fSmrg my_arg=`$ECHO "X$1" | $Xsed \ 42349dc963fSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 4244b0ead49Smrg *) 42549dc963fSmrg my_arg="$1" ;; 42649dc963fSmrg esac 42749dc963fSmrg 42849dc963fSmrg case $my_arg in 42949dc963fSmrg # Double-quote args containing shell metacharacters to delay 43049dc963fSmrg # word splitting and command substitution for a subsequent eval. 43149dc963fSmrg # Many Bourne shells cannot handle close brackets correctly 43249dc963fSmrg # in scan sets, so we specify it separately. 43349dc963fSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 43449dc963fSmrg my_arg="\"$my_arg\"" 43549dc963fSmrg ;; 43649dc963fSmrg esac 43749dc963fSmrg 43849dc963fSmrg func_quote_for_expand_result="$my_arg" 4394b0ead49Smrg} 4404b0ead49Smrg 4414b0ead49Smrg 44249dc963fSmrg# func_show_eval cmd [fail_exp] 44349dc963fSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 44449dc963fSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 44549dc963fSmrg# is given, then evaluate it. 44649dc963fSmrgfunc_show_eval () 4474b0ead49Smrg{ 44849dc963fSmrg my_cmd="$1" 44949dc963fSmrg my_fail_exp="${2-:}" 4504b0ead49Smrg 45149dc963fSmrg ${opt_silent-false} || { 45249dc963fSmrg func_quote_for_expand "$my_cmd" 45349dc963fSmrg eval "func_echo $func_quote_for_expand_result" 45449dc963fSmrg } 45549dc963fSmrg 45649dc963fSmrg if ${opt_dry_run-false}; then :; else 45749dc963fSmrg eval "$my_cmd" 45849dc963fSmrg my_status=$? 45949dc963fSmrg if test "$my_status" -eq 0; then :; else 46049dc963fSmrg eval "(exit $my_status); $my_fail_exp" 46149dc963fSmrg fi 4624b0ead49Smrg fi 4634b0ead49Smrg} 4644b0ead49Smrg 46549dc963fSmrg 46649dc963fSmrg# func_show_eval_locale cmd [fail_exp] 46749dc963fSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 46849dc963fSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 46949dc963fSmrg# is given, then evaluate it. Use the saved locale for evaluation. 47049dc963fSmrgfunc_show_eval_locale () 4714b0ead49Smrg{ 47249dc963fSmrg my_cmd="$1" 47349dc963fSmrg my_fail_exp="${2-:}" 47449dc963fSmrg 47549dc963fSmrg ${opt_silent-false} || { 47649dc963fSmrg func_quote_for_expand "$my_cmd" 47749dc963fSmrg eval "func_echo $func_quote_for_expand_result" 47849dc963fSmrg } 47949dc963fSmrg 48049dc963fSmrg if ${opt_dry_run-false}; then :; else 48149dc963fSmrg eval "$lt_user_locale 48249dc963fSmrg $my_cmd" 48349dc963fSmrg my_status=$? 48449dc963fSmrg eval "$lt_safe_locale" 48549dc963fSmrg if test "$my_status" -eq 0; then :; else 48649dc963fSmrg eval "(exit $my_status); $my_fail_exp" 48749dc963fSmrg fi 4884b0ead49Smrg fi 48949dc963fSmrg} 4904b0ead49Smrg 4914b0ead49Smrg 49249dc963fSmrg 49349dc963fSmrg 49449dc963fSmrg 49549dc963fSmrg# func_version 49649dc963fSmrg# Echo version message to standard output and exit. 49749dc963fSmrgfunc_version () 49849dc963fSmrg{ 49949dc963fSmrg $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { 50049dc963fSmrg s/^# // 50149dc963fSmrg s/^# *$// 50249dc963fSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 50349dc963fSmrg p 50449dc963fSmrg }' < "$progpath" 50549dc963fSmrg exit $? 50649dc963fSmrg} 50749dc963fSmrg 50849dc963fSmrg# func_usage 50949dc963fSmrg# Echo short help message to standard output and exit. 51049dc963fSmrgfunc_usage () 51149dc963fSmrg{ 51249dc963fSmrg $SED -n '/^# Usage:/,/# -h/ { 51349dc963fSmrg s/^# // 51449dc963fSmrg s/^# *$// 51549dc963fSmrg s/\$progname/'$progname'/ 51649dc963fSmrg p 51749dc963fSmrg }' < "$progpath" 51849dc963fSmrg $ECHO 51949dc963fSmrg $ECHO "run \`$progname --help | more' for full usage" 52049dc963fSmrg exit $? 52149dc963fSmrg} 52249dc963fSmrg 52349dc963fSmrg# func_help 52449dc963fSmrg# Echo long help message to standard output and exit. 52549dc963fSmrgfunc_help () 52649dc963fSmrg{ 52749dc963fSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 52849dc963fSmrg s/^# // 52949dc963fSmrg s/^# *$// 53049dc963fSmrg s*\$progname*'$progname'* 53149dc963fSmrg s*\$host*'"$host"'* 53249dc963fSmrg s*\$SHELL*'"$SHELL"'* 53349dc963fSmrg s*\$LTCC*'"$LTCC"'* 53449dc963fSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 53549dc963fSmrg s*\$LD*'"$LD"'* 53649dc963fSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 53749dc963fSmrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 53849dc963fSmrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 53949dc963fSmrg p 54049dc963fSmrg }' < "$progpath" 54149dc963fSmrg exit $? 54249dc963fSmrg} 54349dc963fSmrg 54449dc963fSmrg# func_missing_arg argname 54549dc963fSmrg# Echo program name prefixed message to standard error and set global 54649dc963fSmrg# exit_cmd. 54749dc963fSmrgfunc_missing_arg () 54849dc963fSmrg{ 54949dc963fSmrg func_error "missing argument for $1" 55049dc963fSmrg exit_cmd=exit 5514b0ead49Smrg} 5524b0ead49Smrg 55349dc963fSmrgexit_cmd=: 5544b0ead49Smrg 5554b0ead49Smrg 55649dc963fSmrg 55749dc963fSmrg 55849dc963fSmrg 55949dc963fSmrg# Check that we have a working $ECHO. 56049dc963fSmrgif test "X$1" = X--no-reexec; then 56149dc963fSmrg # Discard the --no-reexec flag, and continue. 5624b0ead49Smrg shift 56349dc963fSmrgelif test "X$1" = X--fallback-echo; then 56449dc963fSmrg # Avoid inline document here, it may be left over 56549dc963fSmrg : 56649dc963fSmrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then 56749dc963fSmrg # Yippee, $ECHO works! 56849dc963fSmrg : 56949dc963fSmrgelse 57049dc963fSmrg # Restart under the correct shell, and then maybe $ECHO will work. 57149dc963fSmrg exec $SHELL "$progpath" --no-reexec ${1+"$@"} 57249dc963fSmrgfi 5734b0ead49Smrg 57449dc963fSmrgif test "X$1" = X--fallback-echo; then 57549dc963fSmrg # used as fallback echo 57649dc963fSmrg shift 57749dc963fSmrg cat <<EOF 57849dc963fSmrg$* 57949dc963fSmrgEOF 58049dc963fSmrg exit $EXIT_SUCCESS 58149dc963fSmrgfi 5824b0ead49Smrg 58349dc963fSmrgmagic="%%%MAGIC variable%%%" 58449dc963fSmrgmagic_exe="%%%MAGIC EXE variable%%%" 5854b0ead49Smrg 58649dc963fSmrg# Global variables. 58749dc963fSmrg# $mode is unset 58849dc963fSmrgnonopt= 58949dc963fSmrgexecute_dlfiles= 59049dc963fSmrgpreserve_args= 59149dc963fSmrglo2o="s/\\.lo\$/.${objext}/" 59249dc963fSmrgo2lo="s/\\.${objext}\$/.lo/" 59349dc963fSmrgextracted_archives= 59449dc963fSmrgextracted_serial=0 5954b0ead49Smrg 59649dc963fSmrgopt_dry_run=false 59749dc963fSmrgopt_duplicate_deps=false 59849dc963fSmrgopt_silent=false 59949dc963fSmrgopt_debug=: 6004b0ead49Smrg 60149dc963fSmrg# If this variable is set in any of the actions, the command in it 60249dc963fSmrg# will be execed at the end. This prevents here-documents from being 60349dc963fSmrg# left over by shells. 60449dc963fSmrgexec_cmd= 60549dc963fSmrg 60649dc963fSmrg# func_fatal_configuration arg... 60749dc963fSmrg# Echo program name prefixed message to standard error, followed by 60849dc963fSmrg# a configuration failure hint, and exit. 60949dc963fSmrgfunc_fatal_configuration () 61049dc963fSmrg{ 61149dc963fSmrg func_error ${1+"$@"} 61249dc963fSmrg func_error "See the $PACKAGE documentation for more information." 61349dc963fSmrg func_fatal_error "Fatal configuration error." 61449dc963fSmrg} 6154b0ead49Smrg 61652b01e16Smrg 61749dc963fSmrg# func_config 61849dc963fSmrg# Display the configuration for all the tags in this script. 61949dc963fSmrgfunc_config () 62049dc963fSmrg{ 62149dc963fSmrg re_begincf='^# ### BEGIN LIBTOOL' 62249dc963fSmrg re_endcf='^# ### END LIBTOOL' 62349dc963fSmrg 62449dc963fSmrg # Default configuration. 62549dc963fSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 6264b0ead49Smrg 6274b0ead49Smrg # Now print the configurations for the tags. 6284b0ead49Smrg for tagname in $taglist; do 62949dc963fSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 6304b0ead49Smrg done 6314b0ead49Smrg 63249dc963fSmrg exit $? 63349dc963fSmrg} 6344b0ead49Smrg 63549dc963fSmrg# func_features 63649dc963fSmrg# Display the features supported by this script. 63749dc963fSmrgfunc_features () 63849dc963fSmrg{ 63949dc963fSmrg $ECHO "host: $host" 6404b0ead49Smrg if test "$build_libtool_libs" = yes; then 64149dc963fSmrg $ECHO "enable shared libraries" 6424b0ead49Smrg else 64349dc963fSmrg $ECHO "disable shared libraries" 6444b0ead49Smrg fi 6454b0ead49Smrg if test "$build_old_libs" = yes; then 64649dc963fSmrg $ECHO "enable static libraries" 6474b0ead49Smrg else 64849dc963fSmrg $ECHO "disable static libraries" 6494b0ead49Smrg fi 65049dc963fSmrg 6514b0ead49Smrg exit $? 65249dc963fSmrg} 6534b0ead49Smrg 65449dc963fSmrg# func_enable_tag tagname 65549dc963fSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 65649dc963fSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 65749dc963fSmrg# variable here. 65849dc963fSmrgfunc_enable_tag () 65949dc963fSmrg{ 66049dc963fSmrg # Global variable: 66149dc963fSmrg tagname="$1" 6624b0ead49Smrg 66349dc963fSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 66449dc963fSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 66549dc963fSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 6664b0ead49Smrg 66749dc963fSmrg # Validate tagname. 66849dc963fSmrg case $tagname in 66949dc963fSmrg *[!-_A-Za-z0-9,/]*) 67049dc963fSmrg func_fatal_error "invalid tag name: $tagname" 67149dc963fSmrg ;; 67249dc963fSmrg esac 6734b0ead49Smrg 67449dc963fSmrg # Don't test for the "default" C tag, as we know it's 67549dc963fSmrg # there but not specially marked. 67649dc963fSmrg case $tagname in 67749dc963fSmrg CC) ;; 67849dc963fSmrg *) 67949dc963fSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 68049dc963fSmrg taglist="$taglist $tagname" 68149dc963fSmrg 68249dc963fSmrg # Evaluate the configuration. Be careful to quote the path 68349dc963fSmrg # and the sed script, to avoid splitting on whitespace, but 68449dc963fSmrg # also don't use non-portable quotes within backquotes within 68549dc963fSmrg # quotes we have to do it in 2 steps: 68649dc963fSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 68749dc963fSmrg eval "$extractedcf" 68849dc963fSmrg else 68949dc963fSmrg func_error "ignoring unknown tag $tagname" 69049dc963fSmrg fi 69149dc963fSmrg ;; 69249dc963fSmrg esac 69349dc963fSmrg} 69449dc963fSmrg 69549dc963fSmrg# Parse options once, thoroughly. This comes as soon as possible in 69649dc963fSmrg# the script to make things like `libtool --version' happen quickly. 69749dc963fSmrg{ 6984b0ead49Smrg 69949dc963fSmrg # Shorthand for --mode=foo, only valid as the first argument 70049dc963fSmrg case $1 in 70149dc963fSmrg clean|clea|cle|cl) 70249dc963fSmrg shift; set dummy --mode clean ${1+"$@"}; shift 7034b0ead49Smrg ;; 70449dc963fSmrg compile|compil|compi|comp|com|co|c) 70549dc963fSmrg shift; set dummy --mode compile ${1+"$@"}; shift 7064b0ead49Smrg ;; 70749dc963fSmrg execute|execut|execu|exec|exe|ex|e) 70849dc963fSmrg shift; set dummy --mode execute ${1+"$@"}; shift 7094b0ead49Smrg ;; 71049dc963fSmrg finish|finis|fini|fin|fi|f) 71149dc963fSmrg shift; set dummy --mode finish ${1+"$@"}; shift 7124b0ead49Smrg ;; 71349dc963fSmrg install|instal|insta|inst|ins|in|i) 71449dc963fSmrg shift; set dummy --mode install ${1+"$@"}; shift 71549dc963fSmrg ;; 71649dc963fSmrg link|lin|li|l) 71749dc963fSmrg shift; set dummy --mode link ${1+"$@"}; shift 71849dc963fSmrg ;; 71949dc963fSmrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 72049dc963fSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 7214b0ead49Smrg ;; 7224b0ead49Smrg esac 7234b0ead49Smrg 72449dc963fSmrg # Parse non-mode specific arguments: 72549dc963fSmrg while test "$#" -gt 0; do 72649dc963fSmrg opt="$1" 72749dc963fSmrg shift 7284b0ead49Smrg 72949dc963fSmrg case $opt in 73049dc963fSmrg --config) func_config ;; 7314b0ead49Smrg 73249dc963fSmrg --debug) preserve_args="$preserve_args $opt" 73349dc963fSmrg func_echo "enabling shell trace mode" 73449dc963fSmrg opt_debug='set -x' 73549dc963fSmrg $opt_debug 73649dc963fSmrg ;; 7374b0ead49Smrg 73849dc963fSmrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 73949dc963fSmrg execute_dlfiles="$execute_dlfiles $1" 74049dc963fSmrg shift 74149dc963fSmrg ;; 7424b0ead49Smrg 74349dc963fSmrg --dry-run | -n) opt_dry_run=: ;; 74449dc963fSmrg --features) func_features ;; 74549dc963fSmrg --finish) mode="finish" ;; 74649dc963fSmrg 74749dc963fSmrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 74849dc963fSmrg case $1 in 74949dc963fSmrg # Valid mode arguments: 75049dc963fSmrg clean) ;; 75149dc963fSmrg compile) ;; 75249dc963fSmrg execute) ;; 75349dc963fSmrg finish) ;; 75449dc963fSmrg install) ;; 75549dc963fSmrg link) ;; 75649dc963fSmrg relink) ;; 75749dc963fSmrg uninstall) ;; 75849dc963fSmrg 75949dc963fSmrg # Catch anything else as an error 76049dc963fSmrg *) func_error "invalid argument for $opt" 76149dc963fSmrg exit_cmd=exit 76249dc963fSmrg break 76349dc963fSmrg ;; 76449dc963fSmrg esac 76549dc963fSmrg 76649dc963fSmrg mode="$1" 76749dc963fSmrg shift 76849dc963fSmrg ;; 76949dc963fSmrg 77049dc963fSmrg --preserve-dup-deps) 77149dc963fSmrg opt_duplicate_deps=: ;; 77249dc963fSmrg 77349dc963fSmrg --quiet|--silent) preserve_args="$preserve_args $opt" 77449dc963fSmrg opt_silent=: 77549dc963fSmrg ;; 77649dc963fSmrg 77749dc963fSmrg --verbose| -v) preserve_args="$preserve_args $opt" 77849dc963fSmrg opt_silent=false 77949dc963fSmrg ;; 78049dc963fSmrg 78149dc963fSmrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 78249dc963fSmrg preserve_args="$preserve_args $opt $1" 78349dc963fSmrg func_enable_tag "$1" # tagname is set here 78449dc963fSmrg shift 78549dc963fSmrg ;; 78649dc963fSmrg 78749dc963fSmrg # Separate optargs to long options: 78849dc963fSmrg -dlopen=*|--mode=*|--tag=*) 78949dc963fSmrg func_opt_split "$opt" 79049dc963fSmrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 79149dc963fSmrg shift 79249dc963fSmrg ;; 79349dc963fSmrg 79449dc963fSmrg -\?|-h) func_usage ;; 79549dc963fSmrg --help) opt_help=: ;; 79649dc963fSmrg --version) func_version ;; 79749dc963fSmrg 79849dc963fSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 79949dc963fSmrg 80049dc963fSmrg *) nonopt="$opt" 80149dc963fSmrg break 80249dc963fSmrg ;; 80349dc963fSmrg esac 80449dc963fSmrg done 80549dc963fSmrg 80649dc963fSmrg 80749dc963fSmrg case $host in 80849dc963fSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 80949dc963fSmrg # don't eliminate duplications in $postdeps and $predeps 81049dc963fSmrg opt_duplicate_compiler_generated_deps=: 8114b0ead49Smrg ;; 8124b0ead49Smrg *) 81349dc963fSmrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 81449dc963fSmrg ;; 81549dc963fSmrg esac 8164b0ead49Smrg 81749dc963fSmrg # Having warned about all mis-specified options, bail out if 81849dc963fSmrg # anything was wrong. 81949dc963fSmrg $exit_cmd $EXIT_FAILURE 82049dc963fSmrg} 82149dc963fSmrg 82249dc963fSmrg# func_check_version_match 82349dc963fSmrg# Ensure that we are using m4 macros, and libtool script from the same 82449dc963fSmrg# release of libtool. 82549dc963fSmrgfunc_check_version_match () 82649dc963fSmrg{ 82749dc963fSmrg if test "$package_revision" != "$macro_revision"; then 82849dc963fSmrg if test "$VERSION" != "$macro_version"; then 82949dc963fSmrg if test -z "$macro_version"; then 83049dc963fSmrg cat >&2 <<_LT_EOF 83149dc963fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 83249dc963fSmrg$progname: definition of this LT_INIT comes from an older release. 83349dc963fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 83449dc963fSmrg$progname: and run autoconf again. 83549dc963fSmrg_LT_EOF 83649dc963fSmrg else 83749dc963fSmrg cat >&2 <<_LT_EOF 83849dc963fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 83949dc963fSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 84049dc963fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 84149dc963fSmrg$progname: and run autoconf again. 84249dc963fSmrg_LT_EOF 8434b0ead49Smrg fi 84449dc963fSmrg else 84549dc963fSmrg cat >&2 <<_LT_EOF 84649dc963fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 84749dc963fSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 84849dc963fSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 84949dc963fSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 85049dc963fSmrg_LT_EOF 85149dc963fSmrg fi 85249dc963fSmrg 85349dc963fSmrg exit $EXIT_MISMATCH 85449dc963fSmrg fi 85549dc963fSmrg} 85649dc963fSmrg 85749dc963fSmrg 85849dc963fSmrg## ----------- ## 85949dc963fSmrg## Main. ## 86049dc963fSmrg## ----------- ## 86149dc963fSmrg 86249dc963fSmrg$opt_help || { 86349dc963fSmrg # Sanity checks first: 86449dc963fSmrg func_check_version_match 86549dc963fSmrg 86649dc963fSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 86749dc963fSmrg func_fatal_configuration "not configured to build any kind of library" 8684b0ead49Smrg fi 8694b0ead49Smrg 87049dc963fSmrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 87149dc963fSmrg 87249dc963fSmrg 87349dc963fSmrg # Darwin sucks 87449dc963fSmrg eval std_shrext=\"$shrext_cmds\" 87549dc963fSmrg 87649dc963fSmrg 8774b0ead49Smrg # Only execute mode is allowed to have -dlopen flags. 8784b0ead49Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 87949dc963fSmrg func_error "unrecognized option \`-dlopen'" 88049dc963fSmrg $ECHO "$help" 1>&2 8814b0ead49Smrg exit $EXIT_FAILURE 8824b0ead49Smrg fi 8834b0ead49Smrg 8844b0ead49Smrg # Change the help message to a mode-specific one. 8854b0ead49Smrg generic_help="$help" 88649dc963fSmrg help="Try \`$progname --help --mode=$mode' for more information." 88749dc963fSmrg} 8884b0ead49Smrg 8894b0ead49Smrg 89049dc963fSmrg# func_lalib_p file 89149dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 89249dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 89349dc963fSmrg# determined imposters. 89449dc963fSmrgfunc_lalib_p () 89549dc963fSmrg{ 89649dc963fSmrg test -f "$1" && 89749dc963fSmrg $SED -e 4q "$1" 2>/dev/null \ 89849dc963fSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 89949dc963fSmrg} 9004b0ead49Smrg 90149dc963fSmrg# func_lalib_unsafe_p file 90249dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 90349dc963fSmrg# This function implements the same check as func_lalib_p without 90449dc963fSmrg# resorting to external programs. To this end, it redirects stdin and 90549dc963fSmrg# closes it afterwards, without saving the original file descriptor. 90649dc963fSmrg# As a safety measure, use it only where a negative result would be 90749dc963fSmrg# fatal anyway. Works if `file' does not exist. 90849dc963fSmrgfunc_lalib_unsafe_p () 90949dc963fSmrg{ 91049dc963fSmrg lalib_p=no 91149dc963fSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 91249dc963fSmrg for lalib_p_l in 1 2 3 4 91349dc963fSmrg do 91449dc963fSmrg read lalib_p_line 91549dc963fSmrg case "$lalib_p_line" in 91649dc963fSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 91749dc963fSmrg esac 91849dc963fSmrg done 91949dc963fSmrg exec 0<&5 5<&- 92049dc963fSmrg fi 92149dc963fSmrg test "$lalib_p" = yes 92249dc963fSmrg} 9234b0ead49Smrg 92449dc963fSmrg# func_ltwrapper_script_p file 92549dc963fSmrg# True iff FILE is a libtool wrapper script 92649dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 92749dc963fSmrg# determined imposters. 92849dc963fSmrgfunc_ltwrapper_script_p () 92949dc963fSmrg{ 93049dc963fSmrg func_lalib_p "$1" 93149dc963fSmrg} 9324b0ead49Smrg 93349dc963fSmrg# func_ltwrapper_executable_p file 93449dc963fSmrg# True iff FILE is a libtool wrapper executable 93549dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 93649dc963fSmrg# determined imposters. 93749dc963fSmrgfunc_ltwrapper_executable_p () 93849dc963fSmrg{ 93949dc963fSmrg func_ltwrapper_exec_suffix= 94049dc963fSmrg case $1 in 94149dc963fSmrg *.exe) ;; 94249dc963fSmrg *) func_ltwrapper_exec_suffix=.exe ;; 94349dc963fSmrg esac 94449dc963fSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 94549dc963fSmrg} 9464b0ead49Smrg 94749dc963fSmrg# func_ltwrapper_scriptname file 94849dc963fSmrg# Assumes file is an ltwrapper_executable 94949dc963fSmrg# uses $file to determine the appropriate filename for a 95049dc963fSmrg# temporary ltwrapper_script. 95149dc963fSmrgfunc_ltwrapper_scriptname () 95249dc963fSmrg{ 95349dc963fSmrg func_ltwrapper_scriptname_result="" 95449dc963fSmrg if func_ltwrapper_executable_p "$1"; then 95549dc963fSmrg func_dirname_and_basename "$1" "" "." 95649dc963fSmrg func_stripname '' '.exe' "$func_basename_result" 95749dc963fSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 95849dc963fSmrg fi 95949dc963fSmrg} 96049dc963fSmrg 96149dc963fSmrg# func_ltwrapper_p file 96249dc963fSmrg# True iff FILE is a libtool wrapper script or wrapper executable 96349dc963fSmrg# This function is only a basic sanity check; it will hardly flush out 96449dc963fSmrg# determined imposters. 96549dc963fSmrgfunc_ltwrapper_p () 96649dc963fSmrg{ 96749dc963fSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 96849dc963fSmrg} 96949dc963fSmrg 97049dc963fSmrg 97149dc963fSmrg# func_execute_cmds commands fail_cmd 97249dc963fSmrg# Execute tilde-delimited COMMANDS. 97349dc963fSmrg# If FAIL_CMD is given, eval that upon failure. 97449dc963fSmrg# FAIL_CMD may read-access the current command in variable CMD! 97549dc963fSmrgfunc_execute_cmds () 97649dc963fSmrg{ 97749dc963fSmrg $opt_debug 97849dc963fSmrg save_ifs=$IFS; IFS='~' 97949dc963fSmrg for cmd in $1; do 98049dc963fSmrg IFS=$save_ifs 98149dc963fSmrg eval cmd=\"$cmd\" 98249dc963fSmrg func_show_eval "$cmd" "${2-:}" 98349dc963fSmrg done 98449dc963fSmrg IFS=$save_ifs 98549dc963fSmrg} 98649dc963fSmrg 98749dc963fSmrg 98849dc963fSmrg# func_source file 98949dc963fSmrg# Source FILE, adding directory component if necessary. 99049dc963fSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 99149dc963fSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 99249dc963fSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 99349dc963fSmrg# `FILE.' does not work on cygwin managed mounts. 99449dc963fSmrgfunc_source () 99549dc963fSmrg{ 99649dc963fSmrg $opt_debug 99749dc963fSmrg case $1 in 99849dc963fSmrg */* | *\\*) . "$1" ;; 99949dc963fSmrg *) . "./$1" ;; 100049dc963fSmrg esac 100149dc963fSmrg} 100249dc963fSmrg 100349dc963fSmrg 100449dc963fSmrg# func_infer_tag arg 100549dc963fSmrg# Infer tagged configuration to use if any are available and 100649dc963fSmrg# if one wasn't chosen via the "--tag" command line option. 100749dc963fSmrg# Only attempt this if the compiler in the base compile 100849dc963fSmrg# command doesn't match the default compiler. 100949dc963fSmrg# arg is usually of the form 'gcc ...' 101049dc963fSmrgfunc_infer_tag () 101149dc963fSmrg{ 101249dc963fSmrg $opt_debug 101349dc963fSmrg if test -n "$available_tags" && test -z "$tagname"; then 101449dc963fSmrg CC_quoted= 101549dc963fSmrg for arg in $CC; do 101649dc963fSmrg func_quote_for_eval "$arg" 101749dc963fSmrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 101849dc963fSmrg done 101949dc963fSmrg case $@ in 102049dc963fSmrg # Blanks in the command may have been stripped by the calling shell, 102149dc963fSmrg # but not from the CC environment variable when configure was run. 102249dc963fSmrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; 102349dc963fSmrg # Blanks at the start of $base_compile will cause this to fail 102449dc963fSmrg # if we don't check for them as well. 102549dc963fSmrg *) 102649dc963fSmrg for z in $available_tags; do 102749dc963fSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 102849dc963fSmrg # Evaluate the configuration. 102949dc963fSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 103049dc963fSmrg CC_quoted= 103149dc963fSmrg for arg in $CC; do 103249dc963fSmrg # Double-quote args containing other shell metacharacters. 103349dc963fSmrg func_quote_for_eval "$arg" 103449dc963fSmrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 103549dc963fSmrg done 103649dc963fSmrg case "$@ " in 103749dc963fSmrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) 103849dc963fSmrg # The compiler in the base compile command matches 103949dc963fSmrg # the one in the tagged configuration. 104049dc963fSmrg # Assume this is the tagged configuration we want. 104149dc963fSmrg tagname=$z 104249dc963fSmrg break 104349dc963fSmrg ;; 104449dc963fSmrg esac 104549dc963fSmrg fi 104649dc963fSmrg done 104749dc963fSmrg # If $tagname still isn't set, then no tagged configuration 104849dc963fSmrg # was found and let the user know that the "--tag" command 104949dc963fSmrg # line option must be used. 105049dc963fSmrg if test -z "$tagname"; then 105149dc963fSmrg func_echo "unable to infer tagged configuration" 105249dc963fSmrg func_fatal_error "specify a tag with \`--tag'" 105349dc963fSmrg# else 105449dc963fSmrg# func_verbose "using $tagname tagged configuration" 105549dc963fSmrg fi 105649dc963fSmrg ;; 105749dc963fSmrg esac 105849dc963fSmrg fi 105949dc963fSmrg} 106049dc963fSmrg 106149dc963fSmrg 106249dc963fSmrg 106349dc963fSmrg# func_write_libtool_object output_name pic_name nonpic_name 106449dc963fSmrg# Create a libtool object file (analogous to a ".la" file), 106549dc963fSmrg# but don't create it if we're doing a dry run. 106649dc963fSmrgfunc_write_libtool_object () 106749dc963fSmrg{ 106849dc963fSmrg write_libobj=${1} 106949dc963fSmrg if test "$build_libtool_libs" = yes; then 107049dc963fSmrg write_lobj=\'${2}\' 107149dc963fSmrg else 107249dc963fSmrg write_lobj=none 107349dc963fSmrg fi 107449dc963fSmrg 107549dc963fSmrg if test "$build_old_libs" = yes; then 107649dc963fSmrg write_oldobj=\'${3}\' 107749dc963fSmrg else 107849dc963fSmrg write_oldobj=none 107949dc963fSmrg fi 108049dc963fSmrg 108149dc963fSmrg $opt_dry_run || { 108249dc963fSmrg cat >${write_libobj}T <<EOF 108349dc963fSmrg# $write_libobj - a libtool object file 108449dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 108549dc963fSmrg# 108649dc963fSmrg# Please DO NOT delete this file! 108749dc963fSmrg# It is necessary for linking the library. 108849dc963fSmrg 108949dc963fSmrg# Name of the PIC object. 109049dc963fSmrgpic_object=$write_lobj 109149dc963fSmrg 109249dc963fSmrg# Name of the non-PIC object 109349dc963fSmrgnon_pic_object=$write_oldobj 109449dc963fSmrg 109549dc963fSmrgEOF 109649dc963fSmrg $MV "${write_libobj}T" "${write_libobj}" 109749dc963fSmrg } 109849dc963fSmrg} 109949dc963fSmrg 110049dc963fSmrg# func_mode_compile arg... 110149dc963fSmrgfunc_mode_compile () 110249dc963fSmrg{ 110349dc963fSmrg $opt_debug 110449dc963fSmrg # Get the compilation command and the source file. 110549dc963fSmrg base_compile= 110649dc963fSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 110749dc963fSmrg suppress_opt=yes 110849dc963fSmrg suppress_output= 110949dc963fSmrg arg_mode=normal 111049dc963fSmrg libobj= 111149dc963fSmrg later= 111249dc963fSmrg pie_flag= 111349dc963fSmrg 111449dc963fSmrg for arg 111549dc963fSmrg do 111649dc963fSmrg case $arg_mode in 111749dc963fSmrg arg ) 111849dc963fSmrg # do not "continue". Instead, add this to base_compile 111949dc963fSmrg lastarg="$arg" 112049dc963fSmrg arg_mode=normal 112149dc963fSmrg ;; 112249dc963fSmrg 112349dc963fSmrg target ) 112449dc963fSmrg libobj="$arg" 112549dc963fSmrg arg_mode=normal 112649dc963fSmrg continue 112749dc963fSmrg ;; 112849dc963fSmrg 112949dc963fSmrg normal ) 113049dc963fSmrg # Accept any command-line options. 113149dc963fSmrg case $arg in 113249dc963fSmrg -o) 113349dc963fSmrg test -n "$libobj" && \ 113449dc963fSmrg func_fatal_error "you cannot specify \`-o' more than once" 113549dc963fSmrg arg_mode=target 113649dc963fSmrg continue 113749dc963fSmrg ;; 113849dc963fSmrg 113949dc963fSmrg -pie | -fpie | -fPIE) 114049dc963fSmrg pie_flag="$pie_flag $arg" 114149dc963fSmrg continue 114249dc963fSmrg ;; 114349dc963fSmrg 114449dc963fSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 114549dc963fSmrg later="$later $arg" 114649dc963fSmrg continue 114749dc963fSmrg ;; 114849dc963fSmrg 114949dc963fSmrg -no-suppress) 11504b0ead49Smrg suppress_opt=no 11514b0ead49Smrg continue 11524b0ead49Smrg ;; 11534b0ead49Smrg 11544b0ead49Smrg -Xcompiler) 11554b0ead49Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 11564b0ead49Smrg continue # The current "srcfile" will either be retained or 11574b0ead49Smrg ;; # replaced later. I would guess that would be a bug. 11584b0ead49Smrg 11594b0ead49Smrg -Wc,*) 116049dc963fSmrg func_stripname '-Wc,' '' "$arg" 116149dc963fSmrg args=$func_stripname_result 11624b0ead49Smrg lastarg= 11634b0ead49Smrg save_ifs="$IFS"; IFS=',' 116449dc963fSmrg for arg in $args; do 11654b0ead49Smrg IFS="$save_ifs" 116649dc963fSmrg func_quote_for_eval "$arg" 116749dc963fSmrg lastarg="$lastarg $func_quote_for_eval_result" 11684b0ead49Smrg done 11694b0ead49Smrg IFS="$save_ifs" 117049dc963fSmrg func_stripname ' ' '' "$lastarg" 117149dc963fSmrg lastarg=$func_stripname_result 11724b0ead49Smrg 11734b0ead49Smrg # Add the arguments to base_compile. 11744b0ead49Smrg base_compile="$base_compile $lastarg" 11754b0ead49Smrg continue 11764b0ead49Smrg ;; 11774b0ead49Smrg 117849dc963fSmrg *) 11794b0ead49Smrg # Accept the current argument as the source file. 11804b0ead49Smrg # The previous "srcfile" becomes the current argument. 11814b0ead49Smrg # 11824b0ead49Smrg lastarg="$srcfile" 11834b0ead49Smrg srcfile="$arg" 11844b0ead49Smrg ;; 11854b0ead49Smrg esac # case $arg 11864b0ead49Smrg ;; 11874b0ead49Smrg esac # case $arg_mode 11884b0ead49Smrg 11894b0ead49Smrg # Aesthetically quote the previous argument. 119049dc963fSmrg func_quote_for_eval "$lastarg" 119149dc963fSmrg base_compile="$base_compile $func_quote_for_eval_result" 11924b0ead49Smrg done # for arg 11934b0ead49Smrg 11944b0ead49Smrg case $arg_mode in 11954b0ead49Smrg arg) 119649dc963fSmrg func_fatal_error "you must specify an argument for -Xcompile" 11974b0ead49Smrg ;; 11984b0ead49Smrg target) 119949dc963fSmrg func_fatal_error "you must specify a target with \`-o'" 12004b0ead49Smrg ;; 12014b0ead49Smrg *) 12024b0ead49Smrg # Get the name of the library object. 120349dc963fSmrg test -z "$libobj" && { 120449dc963fSmrg func_basename "$srcfile" 120549dc963fSmrg libobj="$func_basename_result" 120649dc963fSmrg } 12074b0ead49Smrg ;; 12084b0ead49Smrg esac 12094b0ead49Smrg 12104b0ead49Smrg # Recognize several different file suffixes. 12114b0ead49Smrg # If the user specifies -o file.o, it is replaced with file.lo 12124b0ead49Smrg case $libobj in 121349dc963fSmrg *.[cCFSifmso] | \ 121449dc963fSmrg *.ada | *.adb | *.ads | *.asm | \ 121549dc963fSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 121649dc963fSmrg *.[fF][09]? | *.for | *.java | *.obj | *.sx) 121749dc963fSmrg func_xform "$libobj" 121849dc963fSmrg libobj=$func_xform_result 121949dc963fSmrg ;; 12204b0ead49Smrg esac 12214b0ead49Smrg 12224b0ead49Smrg case $libobj in 122349dc963fSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 12244b0ead49Smrg *) 122549dc963fSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 12264b0ead49Smrg ;; 12274b0ead49Smrg esac 12284b0ead49Smrg 12294b0ead49Smrg func_infer_tag $base_compile 12304b0ead49Smrg 12314b0ead49Smrg for arg in $later; do 12324b0ead49Smrg case $arg in 123349dc963fSmrg -shared) 123449dc963fSmrg test "$build_libtool_libs" != yes && \ 123549dc963fSmrg func_fatal_configuration "can not build a shared library" 123649dc963fSmrg build_old_libs=no 123749dc963fSmrg continue 123849dc963fSmrg ;; 123949dc963fSmrg 12404b0ead49Smrg -static) 124149dc963fSmrg build_libtool_libs=no 12424b0ead49Smrg build_old_libs=yes 12434b0ead49Smrg continue 12444b0ead49Smrg ;; 12454b0ead49Smrg 12464b0ead49Smrg -prefer-pic) 12474b0ead49Smrg pic_mode=yes 12484b0ead49Smrg continue 12494b0ead49Smrg ;; 12504b0ead49Smrg 12514b0ead49Smrg -prefer-non-pic) 12524b0ead49Smrg pic_mode=no 12534b0ead49Smrg continue 12544b0ead49Smrg ;; 12554b0ead49Smrg esac 12564b0ead49Smrg done 12574b0ead49Smrg 125849dc963fSmrg func_quote_for_eval "$libobj" 125949dc963fSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 126049dc963fSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 126149dc963fSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 126249dc963fSmrg func_dirname_and_basename "$obj" "/" "" 126349dc963fSmrg objname="$func_basename_result" 126449dc963fSmrg xdir="$func_dirname_result" 12654b0ead49Smrg lobj=${xdir}$objdir/$objname 12664b0ead49Smrg 126749dc963fSmrg test -z "$base_compile" && \ 126849dc963fSmrg func_fatal_help "you must specify a compilation command" 12694b0ead49Smrg 12704b0ead49Smrg # Delete any leftover library objects. 12714b0ead49Smrg if test "$build_old_libs" = yes; then 12724b0ead49Smrg removelist="$obj $lobj $libobj ${libobj}T" 12734b0ead49Smrg else 12744b0ead49Smrg removelist="$lobj $libobj ${libobj}T" 12754b0ead49Smrg fi 12764b0ead49Smrg 12774b0ead49Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 12784b0ead49Smrg case $host_os in 127949dc963fSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 12804b0ead49Smrg pic_mode=default 12814b0ead49Smrg ;; 12824b0ead49Smrg esac 12834b0ead49Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 12844b0ead49Smrg # non-PIC code in shared libraries is not supported 12854b0ead49Smrg pic_mode=default 12864b0ead49Smrg fi 12874b0ead49Smrg 12884b0ead49Smrg # Calculate the filename of the output object if compiler does 12894b0ead49Smrg # not support -o with -c 12904b0ead49Smrg if test "$compiler_c_o" = no; then 129149dc963fSmrg output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 12924b0ead49Smrg lockfile="$output_obj.lock" 12934b0ead49Smrg else 12944b0ead49Smrg output_obj= 12954b0ead49Smrg need_locks=no 12964b0ead49Smrg lockfile= 12974b0ead49Smrg fi 12984b0ead49Smrg 12994b0ead49Smrg # Lock this critical section if it is needed 13004b0ead49Smrg # We use this script file to make the link, it avoids creating a new file 13014b0ead49Smrg if test "$need_locks" = yes; then 130249dc963fSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 130349dc963fSmrg func_echo "Waiting for $lockfile to be removed" 13044b0ead49Smrg sleep 2 13054b0ead49Smrg done 13064b0ead49Smrg elif test "$need_locks" = warn; then 13074b0ead49Smrg if test -f "$lockfile"; then 130849dc963fSmrg $ECHO "\ 13094b0ead49Smrg*** ERROR, $lockfile exists and contains: 13104b0ead49Smrg`cat $lockfile 2>/dev/null` 13114b0ead49Smrg 13124b0ead49SmrgThis indicates that another process is trying to use the same 13134b0ead49Smrgtemporary object file, and libtool could not work around it because 13144b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 13154b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 13164b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 13174b0ead49Smrgcompiler." 13184b0ead49Smrg 131949dc963fSmrg $opt_dry_run || $RM $removelist 13204b0ead49Smrg exit $EXIT_FAILURE 13214b0ead49Smrg fi 132249dc963fSmrg removelist="$removelist $output_obj" 132349dc963fSmrg $ECHO "$srcfile" > "$lockfile" 13244b0ead49Smrg fi 13254b0ead49Smrg 132649dc963fSmrg $opt_dry_run || $RM $removelist 132749dc963fSmrg removelist="$removelist $lockfile" 132849dc963fSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 132949dc963fSmrg 13304b0ead49Smrg if test -n "$fix_srcfile_path"; then 13314b0ead49Smrg eval srcfile=\"$fix_srcfile_path\" 13324b0ead49Smrg fi 133349dc963fSmrg func_quote_for_eval "$srcfile" 133449dc963fSmrg qsrcfile=$func_quote_for_eval_result 13354b0ead49Smrg 13364b0ead49Smrg # Only build a PIC object if we are building libtool libraries. 13374b0ead49Smrg if test "$build_libtool_libs" = yes; then 13384b0ead49Smrg # Without this assignment, base_compile gets emptied. 13394b0ead49Smrg fbsd_hideous_sh_bug=$base_compile 13404b0ead49Smrg 13414b0ead49Smrg if test "$pic_mode" != no; then 13424b0ead49Smrg command="$base_compile $qsrcfile $pic_flag" 13434b0ead49Smrg else 13444b0ead49Smrg # Don't build PIC code 13454b0ead49Smrg command="$base_compile $qsrcfile" 13464b0ead49Smrg fi 13474b0ead49Smrg 134849dc963fSmrg func_mkdir_p "$xdir$objdir" 13494b0ead49Smrg 13504b0ead49Smrg if test -z "$output_obj"; then 13514b0ead49Smrg # Place PIC objects in $objdir 13524b0ead49Smrg command="$command -o $lobj" 13534b0ead49Smrg fi 13544b0ead49Smrg 135549dc963fSmrg func_show_eval_locale "$command" \ 135649dc963fSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 13574b0ead49Smrg 13584b0ead49Smrg if test "$need_locks" = warn && 13594b0ead49Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 136049dc963fSmrg $ECHO "\ 13614b0ead49Smrg*** ERROR, $lockfile contains: 13624b0ead49Smrg`cat $lockfile 2>/dev/null` 13634b0ead49Smrg 13644b0ead49Smrgbut it should contain: 13654b0ead49Smrg$srcfile 13664b0ead49Smrg 13674b0ead49SmrgThis indicates that another process is trying to use the same 13684b0ead49Smrgtemporary object file, and libtool could not work around it because 13694b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 13704b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 13714b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 13724b0ead49Smrgcompiler." 13734b0ead49Smrg 137449dc963fSmrg $opt_dry_run || $RM $removelist 13754b0ead49Smrg exit $EXIT_FAILURE 13764b0ead49Smrg fi 13774b0ead49Smrg 13784b0ead49Smrg # Just move the object if needed, then go on to compile the next one 13794b0ead49Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 138049dc963fSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 138149dc963fSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 13824b0ead49Smrg fi 13834b0ead49Smrg 13844b0ead49Smrg # Allow error messages only from the first compilation. 13854b0ead49Smrg if test "$suppress_opt" = yes; then 138649dc963fSmrg suppress_output=' >/dev/null 2>&1' 13874b0ead49Smrg fi 13884b0ead49Smrg fi 13894b0ead49Smrg 13904b0ead49Smrg # Only build a position-dependent object if we build old libraries. 13914b0ead49Smrg if test "$build_old_libs" = yes; then 13924b0ead49Smrg if test "$pic_mode" != yes; then 13934b0ead49Smrg # Don't build PIC code 139449dc963fSmrg command="$base_compile $qsrcfile$pie_flag" 13954b0ead49Smrg else 13964b0ead49Smrg command="$base_compile $qsrcfile $pic_flag" 13974b0ead49Smrg fi 13984b0ead49Smrg if test "$compiler_c_o" = yes; then 13994b0ead49Smrg command="$command -o $obj" 14004b0ead49Smrg fi 14014b0ead49Smrg 14024b0ead49Smrg # Suppress compiler output if we already did a PIC compilation. 14034b0ead49Smrg command="$command$suppress_output" 140449dc963fSmrg func_show_eval_locale "$command" \ 140549dc963fSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 14064b0ead49Smrg 14074b0ead49Smrg if test "$need_locks" = warn && 14084b0ead49Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 140949dc963fSmrg $ECHO "\ 14104b0ead49Smrg*** ERROR, $lockfile contains: 14114b0ead49Smrg`cat $lockfile 2>/dev/null` 14124b0ead49Smrg 14134b0ead49Smrgbut it should contain: 14144b0ead49Smrg$srcfile 14154b0ead49Smrg 14164b0ead49SmrgThis indicates that another process is trying to use the same 14174b0ead49Smrgtemporary object file, and libtool could not work around it because 14184b0ead49Smrgyour compiler does not support \`-c' and \`-o' together. If you 14194b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better 14204b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better 14214b0ead49Smrgcompiler." 14224b0ead49Smrg 142349dc963fSmrg $opt_dry_run || $RM $removelist 14244b0ead49Smrg exit $EXIT_FAILURE 14254b0ead49Smrg fi 14264b0ead49Smrg 14274b0ead49Smrg # Just move the object if needed 14284b0ead49Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 142949dc963fSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 143049dc963fSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 14314b0ead49Smrg fi 14324b0ead49Smrg fi 14334b0ead49Smrg 143449dc963fSmrg $opt_dry_run || { 143549dc963fSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 14364b0ead49Smrg 143749dc963fSmrg # Unlock the critical section if it was locked 143849dc963fSmrg if test "$need_locks" != no; then 143949dc963fSmrg removelist=$lockfile 144049dc963fSmrg $RM "$lockfile" 144149dc963fSmrg fi 144249dc963fSmrg } 14434b0ead49Smrg 14444b0ead49Smrg exit $EXIT_SUCCESS 144549dc963fSmrg} 14464b0ead49Smrg 144749dc963fSmrg$opt_help || { 144849dc963fSmrgtest "$mode" = compile && func_mode_compile ${1+"$@"} 144949dc963fSmrg} 14504b0ead49Smrg 145149dc963fSmrgfunc_mode_help () 145249dc963fSmrg{ 145349dc963fSmrg # We need to display help for each of the modes. 145449dc963fSmrg case $mode in 145549dc963fSmrg "") 145649dc963fSmrg # Generic help is extracted from the usage comments 145749dc963fSmrg # at the start of this file. 145849dc963fSmrg func_help 145949dc963fSmrg ;; 14604b0ead49Smrg 146149dc963fSmrg clean) 146249dc963fSmrg $ECHO \ 146349dc963fSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 14644b0ead49Smrg 146549dc963fSmrgRemove files from the build directory. 14664b0ead49Smrg 146749dc963fSmrgRM is the name of the program to use to delete files associated with each FILE 146849dc963fSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 146949dc963fSmrgto RM. 14704b0ead49Smrg 147149dc963fSmrgIf FILE is a libtool library, object or program, all the files associated 147249dc963fSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 147349dc963fSmrg ;; 14744b0ead49Smrg 147549dc963fSmrg compile) 147649dc963fSmrg $ECHO \ 147749dc963fSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 14784b0ead49Smrg 147949dc963fSmrgCompile a source file into a libtool library object. 14804b0ead49Smrg 148149dc963fSmrgThis mode accepts the following additional options: 14824b0ead49Smrg 148349dc963fSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 148449dc963fSmrg -no-suppress do not suppress compiler output for multiple passes 148549dc963fSmrg -prefer-pic try to building PIC objects only 148649dc963fSmrg -prefer-non-pic try to building non-PIC objects only 148749dc963fSmrg -shared do not build a \`.o' file suitable for static linking 148849dc963fSmrg -static only build a \`.o' file suitable for static linking 14894b0ead49Smrg 149049dc963fSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 149149dc963fSmrgfrom the given SOURCEFILE. 14924b0ead49Smrg 149349dc963fSmrgThe output file name is determined by removing the directory component from 149449dc963fSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 149549dc963fSmrglibrary object suffix, \`.lo'." 149649dc963fSmrg ;; 14974b0ead49Smrg 149849dc963fSmrg execute) 149949dc963fSmrg $ECHO \ 150049dc963fSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 15014b0ead49Smrg 150249dc963fSmrgAutomatically set library path, then run a program. 15034b0ead49Smrg 150449dc963fSmrgThis mode accepts the following additional options: 15054b0ead49Smrg 150649dc963fSmrg -dlopen FILE add the directory containing FILE to the library path 15074b0ead49Smrg 150849dc963fSmrgThis mode sets the library path environment variable according to \`-dlopen' 150949dc963fSmrgflags. 15104b0ead49Smrg 151149dc963fSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 151249dc963fSmrginto their corresponding uninstalled binary, and any of their required library 151349dc963fSmrgdirectories are added to the library path. 15144b0ead49Smrg 151549dc963fSmrgThen, COMMAND is executed, with ARGS as arguments." 151649dc963fSmrg ;; 15174b0ead49Smrg 151849dc963fSmrg finish) 151949dc963fSmrg $ECHO \ 152049dc963fSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 15214b0ead49Smrg 152249dc963fSmrgComplete the installation of libtool libraries. 15234b0ead49Smrg 152449dc963fSmrgEach LIBDIR is a directory that contains libtool libraries. 15254b0ead49Smrg 152649dc963fSmrgThe commands that this mode executes may require superuser privileges. Use 152749dc963fSmrgthe \`--dry-run' option if you just want to see what would be executed." 152849dc963fSmrg ;; 15294b0ead49Smrg 153049dc963fSmrg install) 153149dc963fSmrg $ECHO \ 153249dc963fSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 15334b0ead49Smrg 153449dc963fSmrgInstall executables or libraries. 15354b0ead49Smrg 153649dc963fSmrgINSTALL-COMMAND is the installation command. The first component should be 153749dc963fSmrgeither the \`install' or \`cp' program. 15384b0ead49Smrg 153949dc963fSmrgThe following components of INSTALL-COMMAND are treated specially: 15404b0ead49Smrg 154149dc963fSmrg -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation 15424b0ead49Smrg 154349dc963fSmrgThe rest of the components are interpreted as arguments to that command (only 154449dc963fSmrgBSD-compatible install options are recognized)." 154549dc963fSmrg ;; 15464b0ead49Smrg 154749dc963fSmrg link) 154849dc963fSmrg $ECHO \ 154949dc963fSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 15504b0ead49Smrg 155149dc963fSmrgLink object files or libraries together to form another library, or to 155249dc963fSmrgcreate an executable program. 15534b0ead49Smrg 155449dc963fSmrgLINK-COMMAND is a command using the C compiler that you would use to create 155549dc963fSmrga program from several object files. 15564b0ead49Smrg 155749dc963fSmrgThe following components of LINK-COMMAND are treated specially: 15584b0ead49Smrg 155949dc963fSmrg -all-static do not do any dynamic linking at all 156049dc963fSmrg -avoid-version do not add a version suffix if possible 156149dc963fSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 156249dc963fSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 156349dc963fSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 156449dc963fSmrg -export-symbols SYMFILE 156549dc963fSmrg try to export only the symbols listed in SYMFILE 156649dc963fSmrg -export-symbols-regex REGEX 156749dc963fSmrg try to export only the symbols matching REGEX 156849dc963fSmrg -LLIBDIR search LIBDIR for required installed libraries 156949dc963fSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 157049dc963fSmrg -module build a library that can dlopened 157149dc963fSmrg -no-fast-install disable the fast-install mode 157249dc963fSmrg -no-install link a not-installable executable 157349dc963fSmrg -no-undefined declare that a library does not refer to external symbols 157449dc963fSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 157549dc963fSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 157649dc963fSmrg -precious-files-regex REGEX 157749dc963fSmrg don't remove output files matching REGEX 157849dc963fSmrg -release RELEASE specify package release information 157949dc963fSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 158049dc963fSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 158149dc963fSmrg -shared only do dynamic linking of libtool libraries 158249dc963fSmrg -shrext SUFFIX override the standard shared library file extension 158349dc963fSmrg -static do not do any dynamic linking of uninstalled libtool libraries 158449dc963fSmrg -static-libtool-libs 158549dc963fSmrg do not do any dynamic linking of libtool libraries 158649dc963fSmrg -version-info CURRENT[:REVISION[:AGE]] 158749dc963fSmrg specify library version info [each variable defaults to 0] 158849dc963fSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 15894b0ead49Smrg 159049dc963fSmrgAll other options (arguments beginning with \`-') are ignored. 15914b0ead49Smrg 159249dc963fSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 159349dc963fSmrgtreated as uninstalled libtool libraries, other files are standard or library 159449dc963fSmrgobject files. 159552b01e16Smrg 159649dc963fSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 159749dc963fSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 159849dc963fSmrgrequired, except when creating a convenience library. 15994b0ead49Smrg 160049dc963fSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 160149dc963fSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 16024b0ead49Smrg 160349dc963fSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 160449dc963fSmrgis created, otherwise an executable program is created." 16054b0ead49Smrg ;; 16064b0ead49Smrg 160749dc963fSmrg uninstall) 160849dc963fSmrg $ECHO \ 160949dc963fSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 16104b0ead49Smrg 161149dc963fSmrgRemove libraries from an installation directory. 16124b0ead49Smrg 161349dc963fSmrgRM is the name of the program to use to delete files associated with each FILE 161449dc963fSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 161549dc963fSmrgto RM. 16164b0ead49Smrg 161749dc963fSmrgIf FILE is a libtool library, all the files associated with it are deleted. 161849dc963fSmrgOtherwise, only FILE itself is deleted using RM." 161949dc963fSmrg ;; 16204b0ead49Smrg 162149dc963fSmrg *) 162249dc963fSmrg func_fatal_help "invalid operation mode \`$mode'" 162349dc963fSmrg ;; 162449dc963fSmrg esac 16254b0ead49Smrg 162649dc963fSmrg $ECHO 162749dc963fSmrg $ECHO "Try \`$progname --help' for more information about other modes." 16284b0ead49Smrg 162949dc963fSmrg exit $? 163049dc963fSmrg} 16314b0ead49Smrg 163249dc963fSmrg # Now that we've collected a possible --mode arg, show help if necessary 163349dc963fSmrg $opt_help && func_mode_help 16344b0ead49Smrg 16354b0ead49Smrg 163649dc963fSmrg# func_mode_execute arg... 163749dc963fSmrgfunc_mode_execute () 163849dc963fSmrg{ 163949dc963fSmrg $opt_debug 164049dc963fSmrg # The first argument is the command name. 164149dc963fSmrg cmd="$nonopt" 164249dc963fSmrg test -z "$cmd" && \ 164349dc963fSmrg func_fatal_help "you must specify a COMMAND" 16444b0ead49Smrg 164549dc963fSmrg # Handle -dlopen flags immediately. 164649dc963fSmrg for file in $execute_dlfiles; do 164749dc963fSmrg test -f "$file" \ 164849dc963fSmrg || func_fatal_help "\`$file' is not a file" 16494b0ead49Smrg 165049dc963fSmrg dir= 165149dc963fSmrg case $file in 165249dc963fSmrg *.la) 165349dc963fSmrg # Check to see that this really is a libtool archive. 165449dc963fSmrg func_lalib_unsafe_p "$file" \ 165549dc963fSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 16564b0ead49Smrg 165749dc963fSmrg # Read the libtool library. 165849dc963fSmrg dlname= 165949dc963fSmrg library_names= 166049dc963fSmrg func_source "$file" 16614b0ead49Smrg 166249dc963fSmrg # Skip this library if it cannot be dlopened. 166349dc963fSmrg if test -z "$dlname"; then 166449dc963fSmrg # Warn if it was a shared library. 166549dc963fSmrg test -n "$library_names" && \ 166649dc963fSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 166749dc963fSmrg continue 166849dc963fSmrg fi 16694b0ead49Smrg 167049dc963fSmrg func_dirname "$file" "" "." 167149dc963fSmrg dir="$func_dirname_result" 16724b0ead49Smrg 167349dc963fSmrg if test -f "$dir/$objdir/$dlname"; then 167449dc963fSmrg dir="$dir/$objdir" 167549dc963fSmrg else 167649dc963fSmrg if test ! -f "$dir/$dlname"; then 167749dc963fSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 167849dc963fSmrg fi 167949dc963fSmrg fi 16804b0ead49Smrg ;; 16814b0ead49Smrg 168249dc963fSmrg *.lo) 168349dc963fSmrg # Just add the directory containing the .lo file. 168449dc963fSmrg func_dirname "$file" "" "." 168549dc963fSmrg dir="$func_dirname_result" 16864b0ead49Smrg ;; 16874b0ead49Smrg 168849dc963fSmrg *) 168949dc963fSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 16904b0ead49Smrg continue 16914b0ead49Smrg ;; 169249dc963fSmrg esac 16934b0ead49Smrg 169449dc963fSmrg # Get the absolute pathname. 169549dc963fSmrg absdir=`cd "$dir" && pwd` 169649dc963fSmrg test -n "$absdir" && dir="$absdir" 16974b0ead49Smrg 169849dc963fSmrg # Now add the directory to shlibpath_var. 169949dc963fSmrg if eval "test -z \"\$$shlibpath_var\""; then 170049dc963fSmrg eval "$shlibpath_var=\"\$dir\"" 170149dc963fSmrg else 170249dc963fSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 170349dc963fSmrg fi 170449dc963fSmrg done 17054b0ead49Smrg 170649dc963fSmrg # This variable tells wrapper scripts just to set shlibpath_var 170749dc963fSmrg # rather than running their programs. 170849dc963fSmrg libtool_execute_magic="$magic" 17094b0ead49Smrg 171049dc963fSmrg # Check if any of the arguments is a wrapper script. 171149dc963fSmrg args= 171249dc963fSmrg for file 171349dc963fSmrg do 171449dc963fSmrg case $file in 171549dc963fSmrg -*) ;; 171649dc963fSmrg *) 171749dc963fSmrg # Do a test to see if this is really a libtool program. 171849dc963fSmrg if func_ltwrapper_script_p "$file"; then 171949dc963fSmrg func_source "$file" 172049dc963fSmrg # Transform arg to wrapped name. 172149dc963fSmrg file="$progdir/$program" 172249dc963fSmrg elif func_ltwrapper_executable_p "$file"; then 172349dc963fSmrg func_ltwrapper_scriptname "$file" 172449dc963fSmrg func_source "$func_ltwrapper_scriptname_result" 172549dc963fSmrg # Transform arg to wrapped name. 172649dc963fSmrg file="$progdir/$program" 172749dc963fSmrg fi 172849dc963fSmrg ;; 172949dc963fSmrg esac 173049dc963fSmrg # Quote arguments (to preserve shell metacharacters). 173149dc963fSmrg func_quote_for_eval "$file" 173249dc963fSmrg args="$args $func_quote_for_eval_result" 173349dc963fSmrg done 17344b0ead49Smrg 173549dc963fSmrg if test "X$opt_dry_run" = Xfalse; then 173649dc963fSmrg if test -n "$shlibpath_var"; then 173749dc963fSmrg # Export the shlibpath_var. 173849dc963fSmrg eval "export $shlibpath_var" 173949dc963fSmrg fi 17404b0ead49Smrg 174149dc963fSmrg # Restore saved environment variables 174249dc963fSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 174349dc963fSmrg do 174449dc963fSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 174549dc963fSmrg $lt_var=\$save_$lt_var; export $lt_var 17464b0ead49Smrg else 174749dc963fSmrg $lt_unset $lt_var 174849dc963fSmrg fi" 174949dc963fSmrg done 17504b0ead49Smrg 175149dc963fSmrg # Now prepare to actually exec the command. 175249dc963fSmrg exec_cmd="\$cmd$args" 175349dc963fSmrg else 175449dc963fSmrg # Display what would be done. 175549dc963fSmrg if test -n "$shlibpath_var"; then 175649dc963fSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 175749dc963fSmrg $ECHO "export $shlibpath_var" 175849dc963fSmrg fi 175949dc963fSmrg $ECHO "$cmd$args" 176049dc963fSmrg exit $EXIT_SUCCESS 176149dc963fSmrg fi 176249dc963fSmrg} 17634b0ead49Smrg 176449dc963fSmrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 17654b0ead49Smrg 17664b0ead49Smrg 176749dc963fSmrg# func_mode_finish arg... 176849dc963fSmrgfunc_mode_finish () 176949dc963fSmrg{ 177049dc963fSmrg $opt_debug 177149dc963fSmrg libdirs="$nonopt" 177249dc963fSmrg admincmds= 17734b0ead49Smrg 177449dc963fSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 177549dc963fSmrg for dir 177649dc963fSmrg do 177749dc963fSmrg libdirs="$libdirs $dir" 177849dc963fSmrg done 17794b0ead49Smrg 178049dc963fSmrg for libdir in $libdirs; do 178149dc963fSmrg if test -n "$finish_cmds"; then 178249dc963fSmrg # Do each command in the finish commands. 178349dc963fSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 178449dc963fSmrg'"$cmd"'"' 17854b0ead49Smrg fi 178649dc963fSmrg if test -n "$finish_eval"; then 178749dc963fSmrg # Do the single finish_eval. 178849dc963fSmrg eval cmds=\"$finish_eval\" 178949dc963fSmrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 179049dc963fSmrg $cmds" 179149dc963fSmrg fi 179249dc963fSmrg done 179349dc963fSmrg fi 17944b0ead49Smrg 179549dc963fSmrg # Exit here if they wanted silent mode. 179649dc963fSmrg $opt_silent && exit $EXIT_SUCCESS 17974b0ead49Smrg 179849dc963fSmrg $ECHO "X----------------------------------------------------------------------" | $Xsed 179949dc963fSmrg $ECHO "Libraries have been installed in:" 180049dc963fSmrg for libdir in $libdirs; do 180149dc963fSmrg $ECHO " $libdir" 180249dc963fSmrg done 180349dc963fSmrg $ECHO 180449dc963fSmrg $ECHO "If you ever happen to want to link against installed libraries" 180549dc963fSmrg $ECHO "in a given directory, LIBDIR, you must either use libtool, and" 180649dc963fSmrg $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" 180749dc963fSmrg $ECHO "flag during linking and do at least one of the following:" 180849dc963fSmrg if test -n "$shlibpath_var"; then 180949dc963fSmrg $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" 181049dc963fSmrg $ECHO " during execution" 181149dc963fSmrg fi 181249dc963fSmrg if test -n "$runpath_var"; then 181349dc963fSmrg $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" 181449dc963fSmrg $ECHO " during linking" 181549dc963fSmrg fi 181649dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 181749dc963fSmrg libdir=LIBDIR 181849dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 181949dc963fSmrg 182049dc963fSmrg $ECHO " - use the \`$flag' linker flag" 182149dc963fSmrg fi 182249dc963fSmrg if test -n "$admincmds"; then 182349dc963fSmrg $ECHO " - have your system administrator run these commands:$admincmds" 182449dc963fSmrg fi 182549dc963fSmrg if test -f /etc/ld.so.conf; then 182649dc963fSmrg $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 182749dc963fSmrg fi 182849dc963fSmrg $ECHO 182949dc963fSmrg 183049dc963fSmrg $ECHO "See any operating system documentation about shared libraries for" 183149dc963fSmrg case $host in 183249dc963fSmrg solaris2.[6789]|solaris2.1[0-9]) 183349dc963fSmrg $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" 183449dc963fSmrg $ECHO "pages." 183549dc963fSmrg ;; 183649dc963fSmrg *) 183749dc963fSmrg $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." 183849dc963fSmrg ;; 183949dc963fSmrg esac 184049dc963fSmrg $ECHO "X----------------------------------------------------------------------" | $Xsed 184149dc963fSmrg exit $EXIT_SUCCESS 184249dc963fSmrg} 184349dc963fSmrg 184449dc963fSmrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 184549dc963fSmrg 184649dc963fSmrg 184749dc963fSmrg# func_mode_install arg... 184849dc963fSmrgfunc_mode_install () 184949dc963fSmrg{ 185049dc963fSmrg $opt_debug 185149dc963fSmrg # There may be an optional sh(1) argument at the beginning of 185249dc963fSmrg # install_prog (especially on Windows NT). 185349dc963fSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 185449dc963fSmrg # Allow the use of GNU shtool's install command. 185549dc963fSmrg $ECHO "X$nonopt" | $GREP shtool >/dev/null; then 185649dc963fSmrg # Aesthetically quote it. 185749dc963fSmrg func_quote_for_eval "$nonopt" 185849dc963fSmrg install_prog="$func_quote_for_eval_result " 185949dc963fSmrg arg=$1 186049dc963fSmrg shift 186149dc963fSmrg else 186249dc963fSmrg install_prog= 186349dc963fSmrg arg=$nonopt 186449dc963fSmrg fi 186549dc963fSmrg 186649dc963fSmrg # The real first argument should be the name of the installation program. 186749dc963fSmrg # Aesthetically quote it. 186849dc963fSmrg func_quote_for_eval "$arg" 186949dc963fSmrg install_prog="$install_prog$func_quote_for_eval_result" 187049dc963fSmrg 187149dc963fSmrg # We need to accept at least all the BSD install flags. 187249dc963fSmrg dest= 187349dc963fSmrg files= 187449dc963fSmrg opts= 187549dc963fSmrg prev= 187649dc963fSmrg install_type= 187749dc963fSmrg isdir=no 187849dc963fSmrg stripme= 187949dc963fSmrg for arg 188049dc963fSmrg do 188149dc963fSmrg if test -n "$dest"; then 188249dc963fSmrg files="$files $dest" 188349dc963fSmrg dest=$arg 188449dc963fSmrg continue 188549dc963fSmrg fi 188649dc963fSmrg 188749dc963fSmrg case $arg in 188849dc963fSmrg -d) isdir=yes ;; 188949dc963fSmrg -f) 189049dc963fSmrg case " $install_prog " in 189149dc963fSmrg *[\\\ /]cp\ *) ;; 189249dc963fSmrg *) prev=$arg ;; 189349dc963fSmrg esac 189449dc963fSmrg ;; 189549dc963fSmrg -g | -m | -o) 189649dc963fSmrg prev=$arg 189749dc963fSmrg ;; 189849dc963fSmrg -s) 189949dc963fSmrg stripme=" -s" 190049dc963fSmrg continue 190149dc963fSmrg ;; 190249dc963fSmrg -*) 190349dc963fSmrg ;; 190449dc963fSmrg *) 190549dc963fSmrg # If the previous option needed an argument, then skip it. 190649dc963fSmrg if test -n "$prev"; then 19074b0ead49Smrg prev= 19084b0ead49Smrg else 190949dc963fSmrg dest=$arg 191049dc963fSmrg continue 19114b0ead49Smrg fi 19124b0ead49Smrg ;; 191349dc963fSmrg esac 19144b0ead49Smrg 191549dc963fSmrg # Aesthetically quote the argument. 191649dc963fSmrg func_quote_for_eval "$arg" 191749dc963fSmrg install_prog="$install_prog $func_quote_for_eval_result" 191849dc963fSmrg done 19194b0ead49Smrg 192049dc963fSmrg test -z "$install_prog" && \ 192149dc963fSmrg func_fatal_help "you must specify an install program" 19224b0ead49Smrg 192349dc963fSmrg test -n "$prev" && \ 192449dc963fSmrg func_fatal_help "the \`$prev' option requires an argument" 19254b0ead49Smrg 192649dc963fSmrg if test -z "$files"; then 192749dc963fSmrg if test -z "$dest"; then 192849dc963fSmrg func_fatal_help "no file or destination specified" 192949dc963fSmrg else 193049dc963fSmrg func_fatal_help "you must specify a destination" 193149dc963fSmrg fi 19324b0ead49Smrg fi 19334b0ead49Smrg 193449dc963fSmrg # Strip any trailing slash from the destination. 193549dc963fSmrg func_stripname '' '/' "$dest" 193649dc963fSmrg dest=$func_stripname_result 19374b0ead49Smrg 193849dc963fSmrg # Check to see that the destination is a directory. 193949dc963fSmrg test -d "$dest" && isdir=yes 194049dc963fSmrg if test "$isdir" = yes; then 194149dc963fSmrg destdir="$dest" 194249dc963fSmrg destname= 19434b0ead49Smrg else 194449dc963fSmrg func_dirname_and_basename "$dest" "" "." 194549dc963fSmrg destdir="$func_dirname_result" 194649dc963fSmrg destname="$func_basename_result" 19474b0ead49Smrg 194849dc963fSmrg # Not a directory, so check to see that there is only one file specified. 194949dc963fSmrg set dummy $files; shift 195049dc963fSmrg test "$#" -gt 1 && \ 195149dc963fSmrg func_fatal_help "\`$dest' is not a directory" 19524b0ead49Smrg fi 195349dc963fSmrg case $destdir in 195449dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 19554b0ead49Smrg *) 195649dc963fSmrg for file in $files; do 195749dc963fSmrg case $file in 195849dc963fSmrg *.lo) ;; 195949dc963fSmrg *) 196049dc963fSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 196149dc963fSmrg ;; 196249dc963fSmrg esac 196349dc963fSmrg done 19644b0ead49Smrg ;; 19654b0ead49Smrg esac 19664b0ead49Smrg 196749dc963fSmrg # This variable tells wrapper scripts just to set variables rather 196849dc963fSmrg # than running their programs. 196949dc963fSmrg libtool_install_magic="$magic" 19704b0ead49Smrg 197149dc963fSmrg staticlibs= 197249dc963fSmrg future_libdirs= 197349dc963fSmrg current_libdirs= 197449dc963fSmrg for file in $files; do 19754b0ead49Smrg 197649dc963fSmrg # Do each installation. 197749dc963fSmrg case $file in 197849dc963fSmrg *.$libext) 197949dc963fSmrg # Do the static libraries later. 198049dc963fSmrg staticlibs="$staticlibs $file" 198149dc963fSmrg ;; 198249dc963fSmrg 198349dc963fSmrg *.la) 198449dc963fSmrg # Check to see that this really is a libtool archive. 198549dc963fSmrg func_lalib_unsafe_p "$file" \ 198649dc963fSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 198749dc963fSmrg 198849dc963fSmrg library_names= 198949dc963fSmrg old_library= 199049dc963fSmrg relink_command= 199149dc963fSmrg func_source "$file" 199249dc963fSmrg 199349dc963fSmrg # Add the libdir to current_libdirs if it is the destination. 199449dc963fSmrg if test "X$destdir" = "X$libdir"; then 199549dc963fSmrg case "$current_libdirs " in 199649dc963fSmrg *" $libdir "*) ;; 199749dc963fSmrg *) current_libdirs="$current_libdirs $libdir" ;; 19984b0ead49Smrg esac 199949dc963fSmrg else 200049dc963fSmrg # Note the libdir as a future libdir. 200149dc963fSmrg case "$future_libdirs " in 200249dc963fSmrg *" $libdir "*) ;; 200349dc963fSmrg *) future_libdirs="$future_libdirs $libdir" ;; 200449dc963fSmrg esac 200549dc963fSmrg fi 20064b0ead49Smrg 200749dc963fSmrg func_dirname "$file" "/" "" 200849dc963fSmrg dir="$func_dirname_result" 200949dc963fSmrg dir="$dir$objdir" 201049dc963fSmrg 201149dc963fSmrg if test -n "$relink_command"; then 201249dc963fSmrg # Determine the prefix the user has applied to our future dir. 201349dc963fSmrg inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` 201449dc963fSmrg 201549dc963fSmrg # Don't allow the user to place us outside of our expected 201649dc963fSmrg # location b/c this prevents finding dependent libraries that 201749dc963fSmrg # are installed to the same prefix. 201849dc963fSmrg # At present, this check doesn't affect windows .dll's that 201949dc963fSmrg # are installed into $libdir/../bin (currently, that works fine) 202049dc963fSmrg # but it's something to keep an eye on. 202149dc963fSmrg test "$inst_prefix_dir" = "$destdir" && \ 202249dc963fSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 202349dc963fSmrg 202449dc963fSmrg if test -n "$inst_prefix_dir"; then 202549dc963fSmrg # Stick the inst_prefix_dir data into the link command. 202649dc963fSmrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 202749dc963fSmrg else 202849dc963fSmrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` 202949dc963fSmrg fi 203049dc963fSmrg 203149dc963fSmrg func_warning "relinking \`$file'" 203249dc963fSmrg func_show_eval "$relink_command" \ 203349dc963fSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 203449dc963fSmrg fi 203549dc963fSmrg 203649dc963fSmrg # See the names of the shared library. 203749dc963fSmrg set dummy $library_names; shift 203849dc963fSmrg if test -n "$1"; then 203949dc963fSmrg realname="$1" 204049dc963fSmrg shift 204149dc963fSmrg 204249dc963fSmrg srcname="$realname" 204349dc963fSmrg test -n "$relink_command" && srcname="$realname"T 204449dc963fSmrg 204549dc963fSmrg # Install the shared library and build the symlinks. 204649dc963fSmrg func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 204749dc963fSmrg 'exit $?' 204849dc963fSmrg tstripme="$stripme" 204949dc963fSmrg case $host_os in 205049dc963fSmrg cygwin* | mingw* | pw32* | cegcc*) 205149dc963fSmrg case $realname in 205249dc963fSmrg *.dll.a) 205349dc963fSmrg tstripme="" 205449dc963fSmrg ;; 205549dc963fSmrg esac 20564b0ead49Smrg ;; 20574b0ead49Smrg esac 205849dc963fSmrg if test -n "$tstripme" && test -n "$striplib"; then 205949dc963fSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 20604b0ead49Smrg fi 206149dc963fSmrg 206249dc963fSmrg if test "$#" -gt 0; then 206349dc963fSmrg # Delete the old symlinks, and create new ones. 206449dc963fSmrg # Try `ln -sf' first, because the `ln' binary might depend on 206549dc963fSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 206649dc963fSmrg # so we also need to try rm && ln -s. 206749dc963fSmrg for linkname 206849dc963fSmrg do 206949dc963fSmrg test "$linkname" != "$realname" \ 207049dc963fSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 20714b0ead49Smrg done 20724b0ead49Smrg fi 20734b0ead49Smrg 207449dc963fSmrg # Do each command in the postinstall commands. 207549dc963fSmrg lib="$destdir/$realname" 207649dc963fSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 20774b0ead49Smrg fi 20784b0ead49Smrg 207949dc963fSmrg # Install the pseudo-library for information purposes. 208049dc963fSmrg func_basename "$file" 208149dc963fSmrg name="$func_basename_result" 208249dc963fSmrg instname="$dir/$name"i 208349dc963fSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 20844b0ead49Smrg 208549dc963fSmrg # Maybe install the static library, too. 208649dc963fSmrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 208749dc963fSmrg ;; 20884b0ead49Smrg 208949dc963fSmrg *.lo) 209049dc963fSmrg # Install (i.e. copy) a libtool object. 20914b0ead49Smrg 209249dc963fSmrg # Figure out destination file name, if it wasn't already specified. 209349dc963fSmrg if test -n "$destname"; then 209449dc963fSmrg destfile="$destdir/$destname" 209549dc963fSmrg else 209649dc963fSmrg func_basename "$file" 209749dc963fSmrg destfile="$func_basename_result" 209849dc963fSmrg destfile="$destdir/$destfile" 20994b0ead49Smrg fi 21004b0ead49Smrg 210149dc963fSmrg # Deduce the name of the destination old-style object file. 210249dc963fSmrg case $destfile in 210349dc963fSmrg *.lo) 210449dc963fSmrg func_lo2o "$destfile" 210549dc963fSmrg staticdest=$func_lo2o_result 210649dc963fSmrg ;; 210749dc963fSmrg *.$objext) 210849dc963fSmrg staticdest="$destfile" 210949dc963fSmrg destfile= 211049dc963fSmrg ;; 211149dc963fSmrg *) 211249dc963fSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 211349dc963fSmrg ;; 211449dc963fSmrg esac 21154b0ead49Smrg 211649dc963fSmrg # Install the libtool object if requested. 211749dc963fSmrg test -n "$destfile" && \ 211849dc963fSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 21194b0ead49Smrg 212049dc963fSmrg # Install the old object if enabled. 212149dc963fSmrg if test "$build_old_libs" = yes; then 212249dc963fSmrg # Deduce the name of the old-style object file. 212349dc963fSmrg func_lo2o "$file" 212449dc963fSmrg staticobj=$func_lo2o_result 212549dc963fSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 21264b0ead49Smrg fi 212749dc963fSmrg exit $EXIT_SUCCESS 212849dc963fSmrg ;; 21294b0ead49Smrg 213049dc963fSmrg *) 213149dc963fSmrg # Figure out destination file name, if it wasn't already specified. 213249dc963fSmrg if test -n "$destname"; then 213349dc963fSmrg destfile="$destdir/$destname" 213449dc963fSmrg else 213549dc963fSmrg func_basename "$file" 213649dc963fSmrg destfile="$func_basename_result" 213749dc963fSmrg destfile="$destdir/$destfile" 213849dc963fSmrg fi 21394b0ead49Smrg 214049dc963fSmrg # If the file is missing, and there is a .exe on the end, strip it 214149dc963fSmrg # because it is most likely a libtool script we actually want to 214249dc963fSmrg # install 214349dc963fSmrg stripped_ext="" 214449dc963fSmrg case $file in 214549dc963fSmrg *.exe) 214649dc963fSmrg if test ! -f "$file"; then 214749dc963fSmrg func_stripname '' '.exe' "$file" 214849dc963fSmrg file=$func_stripname_result 214949dc963fSmrg stripped_ext=".exe" 215049dc963fSmrg fi 215149dc963fSmrg ;; 215249dc963fSmrg esac 215349dc963fSmrg 215449dc963fSmrg # Do a test to see if this is really a libtool program. 215549dc963fSmrg case $host in 215649dc963fSmrg *cygwin* | *mingw*) 215749dc963fSmrg if func_ltwrapper_executable_p "$file"; then 215849dc963fSmrg func_ltwrapper_scriptname "$file" 215949dc963fSmrg wrapper=$func_ltwrapper_scriptname_result 216049dc963fSmrg else 216149dc963fSmrg func_stripname '' '.exe' "$file" 216249dc963fSmrg wrapper=$func_stripname_result 216349dc963fSmrg fi 216449dc963fSmrg ;; 21654b0ead49Smrg *) 216649dc963fSmrg wrapper=$file 216749dc963fSmrg ;; 216849dc963fSmrg esac 216949dc963fSmrg if func_ltwrapper_script_p "$wrapper"; then 217049dc963fSmrg notinst_deplibs= 217149dc963fSmrg relink_command= 217249dc963fSmrg 217349dc963fSmrg func_source "$wrapper" 217449dc963fSmrg 217549dc963fSmrg # Check the variables that should have been set. 217649dc963fSmrg test -z "$generated_by_libtool_version" && \ 217749dc963fSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 217849dc963fSmrg 217949dc963fSmrg finalize=yes 218049dc963fSmrg for lib in $notinst_deplibs; do 218149dc963fSmrg # Check to see that each library is installed. 218249dc963fSmrg libdir= 218349dc963fSmrg if test -f "$lib"; then 218449dc963fSmrg func_source "$lib" 218549dc963fSmrg fi 218649dc963fSmrg libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 218749dc963fSmrg if test -n "$libdir" && test ! -f "$libfile"; then 218849dc963fSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 218949dc963fSmrg finalize=no 219049dc963fSmrg fi 219149dc963fSmrg done 219249dc963fSmrg 219349dc963fSmrg relink_command= 219449dc963fSmrg func_source "$wrapper" 219549dc963fSmrg 219649dc963fSmrg outputname= 219749dc963fSmrg if test "$fast_install" = no && test -n "$relink_command"; then 219849dc963fSmrg $opt_dry_run || { 219949dc963fSmrg if test "$finalize" = yes; then 220049dc963fSmrg tmpdir=`func_mktempdir` 220149dc963fSmrg func_basename "$file$stripped_ext" 220249dc963fSmrg file="$func_basename_result" 220349dc963fSmrg outputname="$tmpdir/$file" 220449dc963fSmrg # Replace the output file specification. 220549dc963fSmrg relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` 220649dc963fSmrg 220749dc963fSmrg $opt_silent || { 220849dc963fSmrg func_quote_for_expand "$relink_command" 220949dc963fSmrg eval "func_echo $func_quote_for_expand_result" 221049dc963fSmrg } 221149dc963fSmrg if eval "$relink_command"; then : 221249dc963fSmrg else 221349dc963fSmrg func_error "error: relink \`$file' with the above command before installing it" 221449dc963fSmrg $opt_dry_run || ${RM}r "$tmpdir" 221549dc963fSmrg continue 221649dc963fSmrg fi 221749dc963fSmrg file="$outputname" 221849dc963fSmrg else 221949dc963fSmrg func_warning "cannot relink \`$file'" 222049dc963fSmrg fi 222149dc963fSmrg } 222249dc963fSmrg else 222349dc963fSmrg # Install the binary that we compiled earlier. 222449dc963fSmrg file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 22254b0ead49Smrg fi 222649dc963fSmrg fi 222749dc963fSmrg 222849dc963fSmrg # remove .exe since cygwin /usr/bin/install will append another 222949dc963fSmrg # one anyway 223049dc963fSmrg case $install_prog,$host in 223149dc963fSmrg */usr/bin/install*,*cygwin*) 223249dc963fSmrg case $file:$destfile in 223349dc963fSmrg *.exe:*.exe) 223449dc963fSmrg # this is ok 223549dc963fSmrg ;; 223649dc963fSmrg *.exe:*) 223749dc963fSmrg destfile=$destfile.exe 223849dc963fSmrg ;; 223949dc963fSmrg *:*.exe) 224049dc963fSmrg func_stripname '' '.exe' "$destfile" 224149dc963fSmrg destfile=$func_stripname_result 224249dc963fSmrg ;; 224349dc963fSmrg esac 22444b0ead49Smrg ;; 22454b0ead49Smrg esac 224649dc963fSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 224749dc963fSmrg $opt_dry_run || if test -n "$outputname"; then 224849dc963fSmrg ${RM}r "$tmpdir" 224949dc963fSmrg fi 225049dc963fSmrg ;; 225149dc963fSmrg esac 225249dc963fSmrg done 22534b0ead49Smrg 225449dc963fSmrg for file in $staticlibs; do 225549dc963fSmrg func_basename "$file" 225649dc963fSmrg name="$func_basename_result" 225749dc963fSmrg 225849dc963fSmrg # Set up the ranlib parameters. 225949dc963fSmrg oldlib="$destdir/$name" 226049dc963fSmrg 226149dc963fSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 226249dc963fSmrg 226349dc963fSmrg if test -n "$stripme" && test -n "$old_striplib"; then 226449dc963fSmrg func_show_eval "$old_striplib $oldlib" 'exit $?' 226549dc963fSmrg fi 226649dc963fSmrg 226749dc963fSmrg # Do each command in the postinstall commands. 226849dc963fSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 226949dc963fSmrg done 227049dc963fSmrg 227149dc963fSmrg test -n "$future_libdirs" && \ 227249dc963fSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 227349dc963fSmrg 227449dc963fSmrg if test -n "$current_libdirs"; then 227549dc963fSmrg # Maybe just do a dry run. 227649dc963fSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 227749dc963fSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 227849dc963fSmrg else 227949dc963fSmrg exit $EXIT_SUCCESS 228049dc963fSmrg fi 228149dc963fSmrg} 228249dc963fSmrg 228349dc963fSmrgtest "$mode" = install && func_mode_install ${1+"$@"} 228449dc963fSmrg 228549dc963fSmrg 228649dc963fSmrg# func_generate_dlsyms outputname originator pic_p 228749dc963fSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 228849dc963fSmrg# a dlpreopen symbol table. 228949dc963fSmrgfunc_generate_dlsyms () 229049dc963fSmrg{ 229149dc963fSmrg $opt_debug 229249dc963fSmrg my_outputname="$1" 229349dc963fSmrg my_originator="$2" 229449dc963fSmrg my_pic_p="${3-no}" 229549dc963fSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 229649dc963fSmrg my_dlsyms= 229749dc963fSmrg 229849dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 229949dc963fSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 230049dc963fSmrg my_dlsyms="${my_outputname}S.c" 230149dc963fSmrg else 230249dc963fSmrg func_error "not configured to extract global symbols from dlpreopened files" 230349dc963fSmrg fi 230449dc963fSmrg fi 230549dc963fSmrg 230649dc963fSmrg if test -n "$my_dlsyms"; then 230749dc963fSmrg case $my_dlsyms in 230849dc963fSmrg "") ;; 230949dc963fSmrg *.c) 231049dc963fSmrg # Discover the nlist of each of the dlfiles. 231149dc963fSmrg nlist="$output_objdir/${my_outputname}.nm" 231249dc963fSmrg 231349dc963fSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 231449dc963fSmrg 231549dc963fSmrg # Parse the name list into a source file. 231649dc963fSmrg func_verbose "creating $output_objdir/$my_dlsyms" 231749dc963fSmrg 231849dc963fSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 231949dc963fSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 232049dc963fSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 232149dc963fSmrg 232249dc963fSmrg#ifdef __cplusplus 232349dc963fSmrgextern \"C\" { 232449dc963fSmrg#endif 232549dc963fSmrg 232649dc963fSmrg/* External symbol declarations for the compiler. */\ 232749dc963fSmrg" 232849dc963fSmrg 232949dc963fSmrg if test "$dlself" = yes; then 233049dc963fSmrg func_verbose "generating symbol list for \`$output'" 233149dc963fSmrg 233249dc963fSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 233349dc963fSmrg 233449dc963fSmrg # Add our own program objects to the symbol list. 233549dc963fSmrg progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 233649dc963fSmrg for progfile in $progfiles; do 233749dc963fSmrg func_verbose "extracting global C symbols from \`$progfile'" 233849dc963fSmrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 233949dc963fSmrg done 234049dc963fSmrg 234149dc963fSmrg if test -n "$exclude_expsyms"; then 234249dc963fSmrg $opt_dry_run || { 234349dc963fSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 234449dc963fSmrg eval '$MV "$nlist"T "$nlist"' 234549dc963fSmrg } 23464b0ead49Smrg fi 234749dc963fSmrg 234849dc963fSmrg if test -n "$export_symbols_regex"; then 234949dc963fSmrg $opt_dry_run || { 235049dc963fSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 235149dc963fSmrg eval '$MV "$nlist"T "$nlist"' 235249dc963fSmrg } 235349dc963fSmrg fi 235449dc963fSmrg 235549dc963fSmrg # Prepare the list of exported symbols 235649dc963fSmrg if test -z "$export_symbols"; then 235749dc963fSmrg export_symbols="$output_objdir/$outputname.exp" 235849dc963fSmrg $opt_dry_run || { 235949dc963fSmrg $RM $export_symbols 236049dc963fSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 236149dc963fSmrg case $host in 236249dc963fSmrg *cygwin* | *mingw* | *cegcc* ) 236349dc963fSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 236449dc963fSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 236549dc963fSmrg ;; 236649dc963fSmrg esac 236749dc963fSmrg } 23684b0ead49Smrg else 236949dc963fSmrg $opt_dry_run || { 237049dc963fSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 237149dc963fSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 237249dc963fSmrg eval '$MV "$nlist"T "$nlist"' 237349dc963fSmrg case $host in 237449dc963fSmrg *cygwin | *mingw* | *cegcc* ) 237549dc963fSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 237649dc963fSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 237749dc963fSmrg ;; 237849dc963fSmrg esac 237949dc963fSmrg } 23804b0ead49Smrg fi 238149dc963fSmrg fi 23824b0ead49Smrg 238349dc963fSmrg for dlprefile in $dlprefiles; do 238449dc963fSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 238549dc963fSmrg func_basename "$dlprefile" 238649dc963fSmrg name="$func_basename_result" 238749dc963fSmrg $opt_dry_run || { 238849dc963fSmrg eval '$ECHO ": $name " >> "$nlist"' 238949dc963fSmrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 239049dc963fSmrg } 239149dc963fSmrg done 239249dc963fSmrg 239349dc963fSmrg $opt_dry_run || { 239449dc963fSmrg # Make sure we have at least an empty file. 239549dc963fSmrg test -f "$nlist" || : > "$nlist" 239649dc963fSmrg 239749dc963fSmrg if test -n "$exclude_expsyms"; then 239849dc963fSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 239949dc963fSmrg $MV "$nlist"T "$nlist" 24004b0ead49Smrg fi 240149dc963fSmrg 240249dc963fSmrg # Try sorting and uniquifying the output. 240349dc963fSmrg if $GREP -v "^: " < "$nlist" | 240449dc963fSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 240549dc963fSmrg sort -k 3 240649dc963fSmrg else 240749dc963fSmrg sort +2 240849dc963fSmrg fi | 240949dc963fSmrg uniq > "$nlist"S; then 241049dc963fSmrg : 24114b0ead49Smrg else 241249dc963fSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 24134b0ead49Smrg fi 24144b0ead49Smrg 241549dc963fSmrg if test -f "$nlist"S; then 241649dc963fSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 24174b0ead49Smrg else 241849dc963fSmrg $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" 24194b0ead49Smrg fi 24204b0ead49Smrg 242149dc963fSmrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 24224b0ead49Smrg 242349dc963fSmrg/* The mapping between symbol names and symbols. */ 242449dc963fSmrgtypedef struct { 242549dc963fSmrg const char *name; 242649dc963fSmrg void *address; 242749dc963fSmrg} lt_dlsymlist; 242849dc963fSmrg" 242949dc963fSmrg case $host in 243049dc963fSmrg *cygwin* | *mingw* | *cegcc* ) 243149dc963fSmrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 243249dc963fSmrg/* DATA imports from DLLs on WIN32 con't be const, because 243349dc963fSmrg runtime relocations are performed -- see ld's documentation 243449dc963fSmrg on pseudo-relocs. */" 243549dc963fSmrg lt_dlsym_const= ;; 243649dc963fSmrg *osf5*) 243749dc963fSmrg echo >> "$output_objdir/$my_dlsyms" "\ 243849dc963fSmrg/* This system does not cope well with relocations in const data */" 243949dc963fSmrg lt_dlsym_const= ;; 244049dc963fSmrg *) 244149dc963fSmrg lt_dlsym_const=const ;; 244249dc963fSmrg esac 24434b0ead49Smrg 244449dc963fSmrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 244549dc963fSmrgextern $lt_dlsym_const lt_dlsymlist 244649dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 244749dc963fSmrg$lt_dlsym_const lt_dlsymlist 244849dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 244949dc963fSmrg{\ 245049dc963fSmrg { \"$my_originator\", (void *) 0 }," 24514b0ead49Smrg 245249dc963fSmrg case $need_lib_prefix in 245349dc963fSmrg no) 245449dc963fSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 245549dc963fSmrg ;; 245649dc963fSmrg *) 245749dc963fSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 245849dc963fSmrg ;; 245949dc963fSmrg esac 246049dc963fSmrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 246149dc963fSmrg {0, (void *) 0} 246249dc963fSmrg}; 24634b0ead49Smrg 246449dc963fSmrg/* This works around a problem in FreeBSD linker */ 246549dc963fSmrg#ifdef FREEBSD_WORKAROUND 246649dc963fSmrgstatic const void *lt_preloaded_setup() { 246749dc963fSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 246849dc963fSmrg} 246949dc963fSmrg#endif 247049dc963fSmrg 247149dc963fSmrg#ifdef __cplusplus 247249dc963fSmrg} 247349dc963fSmrg#endif\ 247449dc963fSmrg" 247549dc963fSmrg } # !$opt_dry_run 247649dc963fSmrg 247749dc963fSmrg pic_flag_for_symtable= 247849dc963fSmrg case "$compile_command " in 247949dc963fSmrg *" -static "*) ;; 248049dc963fSmrg *) 248149dc963fSmrg case $host in 248249dc963fSmrg # compiling the symbol table file with pic_flag works around 248349dc963fSmrg # a FreeBSD bug that causes programs to crash when -lm is 248449dc963fSmrg # linked before any other PIC object. But we must not use 248549dc963fSmrg # pic_flag when linking with -static. The problem exists in 248649dc963fSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 248749dc963fSmrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 248849dc963fSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 248949dc963fSmrg *-*-hpux*) 249049dc963fSmrg pic_flag_for_symtable=" $pic_flag" ;; 249149dc963fSmrg *) 249249dc963fSmrg if test "X$my_pic_p" != Xno; then 249349dc963fSmrg pic_flag_for_symtable=" $pic_flag" 24944b0ead49Smrg fi 249549dc963fSmrg ;; 249649dc963fSmrg esac 249749dc963fSmrg ;; 249849dc963fSmrg esac 249949dc963fSmrg symtab_cflags= 250049dc963fSmrg for arg in $LTCFLAGS; do 250149dc963fSmrg case $arg in 250249dc963fSmrg -pie | -fpie | -fPIE) ;; 250349dc963fSmrg *) symtab_cflags="$symtab_cflags $arg" ;; 250449dc963fSmrg esac 250549dc963fSmrg done 25064b0ead49Smrg 250749dc963fSmrg # Now compile the dynamic symbol file. 250849dc963fSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 25094b0ead49Smrg 251049dc963fSmrg # Clean up the generated files. 251149dc963fSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 25124b0ead49Smrg 251349dc963fSmrg # Transform the symbol file into the correct name. 251449dc963fSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 251549dc963fSmrg case $host in 251649dc963fSmrg *cygwin* | *mingw* | *cegcc* ) 251749dc963fSmrg if test -f "$output_objdir/$my_outputname.def"; then 251849dc963fSmrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 251949dc963fSmrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 252049dc963fSmrg else 252149dc963fSmrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252249dc963fSmrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 25234b0ead49Smrg fi 252449dc963fSmrg ;; 252549dc963fSmrg *) 252649dc963fSmrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252749dc963fSmrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252849dc963fSmrg ;; 252949dc963fSmrg esac 253049dc963fSmrg ;; 253149dc963fSmrg *) 253249dc963fSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 253349dc963fSmrg ;; 253449dc963fSmrg esac 253549dc963fSmrg else 253649dc963fSmrg # We keep going just in case the user didn't refer to 253749dc963fSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 253849dc963fSmrg # really was required. 25394b0ead49Smrg 254049dc963fSmrg # Nullify the symbol file. 254149dc963fSmrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` 254249dc963fSmrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` 254349dc963fSmrg fi 254449dc963fSmrg} 25454b0ead49Smrg 254649dc963fSmrg# func_win32_libid arg 254749dc963fSmrg# return the library type of file 'arg' 254849dc963fSmrg# 254949dc963fSmrg# Need a lot of goo to handle *both* DLLs and import libs 255049dc963fSmrg# Has to be a shell function in order to 'eat' the argument 255149dc963fSmrg# that is supplied when $file_magic_command is called. 255249dc963fSmrgfunc_win32_libid () 255349dc963fSmrg{ 255449dc963fSmrg $opt_debug 255549dc963fSmrg win32_libid_type="unknown" 255649dc963fSmrg win32_fileres=`file -L $1 2>/dev/null` 255749dc963fSmrg case $win32_fileres in 255849dc963fSmrg *ar\ archive\ import\ library*) # definitely import 255949dc963fSmrg win32_libid_type="x86 archive import" 256049dc963fSmrg ;; 256149dc963fSmrg *ar\ archive*) # could be an import, or static 256249dc963fSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 256349dc963fSmrg $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 256449dc963fSmrg win32_nmres=`eval $NM -f posix -A $1 | 256549dc963fSmrg $SED -n -e ' 256649dc963fSmrg 1,100{ 256749dc963fSmrg / I /{ 256849dc963fSmrg s,.*,import, 256949dc963fSmrg p 257049dc963fSmrg q 257149dc963fSmrg } 257249dc963fSmrg }'` 257349dc963fSmrg case $win32_nmres in 257449dc963fSmrg import*) win32_libid_type="x86 archive import";; 257549dc963fSmrg *) win32_libid_type="x86 archive static";; 257649dc963fSmrg esac 257749dc963fSmrg fi 257849dc963fSmrg ;; 257949dc963fSmrg *DLL*) 258049dc963fSmrg win32_libid_type="x86 DLL" 258149dc963fSmrg ;; 258249dc963fSmrg *executable*) # but shell scripts are "executable" too... 258349dc963fSmrg case $win32_fileres in 258449dc963fSmrg *MS\ Windows\ PE\ Intel*) 258549dc963fSmrg win32_libid_type="x86 DLL" 258649dc963fSmrg ;; 258749dc963fSmrg esac 258849dc963fSmrg ;; 258949dc963fSmrg esac 259049dc963fSmrg $ECHO "$win32_libid_type" 259149dc963fSmrg} 25924b0ead49Smrg 25934b0ead49Smrg 25944b0ead49Smrg 259549dc963fSmrg# func_extract_an_archive dir oldlib 259649dc963fSmrgfunc_extract_an_archive () 259749dc963fSmrg{ 259849dc963fSmrg $opt_debug 259949dc963fSmrg f_ex_an_ar_dir="$1"; shift 260049dc963fSmrg f_ex_an_ar_oldlib="$1" 260149dc963fSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 260249dc963fSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 260349dc963fSmrg : 260449dc963fSmrg else 260549dc963fSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 260649dc963fSmrg fi 260749dc963fSmrg} 26084b0ead49Smrg 26094b0ead49Smrg 261049dc963fSmrg# func_extract_archives gentop oldlib ... 261149dc963fSmrgfunc_extract_archives () 261249dc963fSmrg{ 261349dc963fSmrg $opt_debug 261449dc963fSmrg my_gentop="$1"; shift 261549dc963fSmrg my_oldlibs=${1+"$@"} 261649dc963fSmrg my_oldobjs="" 261749dc963fSmrg my_xlib="" 261849dc963fSmrg my_xabs="" 261949dc963fSmrg my_xdir="" 26204b0ead49Smrg 262149dc963fSmrg for my_xlib in $my_oldlibs; do 262249dc963fSmrg # Extract the objects. 262349dc963fSmrg case $my_xlib in 262449dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 262549dc963fSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 262649dc963fSmrg esac 262749dc963fSmrg func_basename "$my_xlib" 262849dc963fSmrg my_xlib="$func_basename_result" 262949dc963fSmrg my_xlib_u=$my_xlib 263049dc963fSmrg while :; do 263149dc963fSmrg case " $extracted_archives " in 263249dc963fSmrg *" $my_xlib_u "*) 263349dc963fSmrg func_arith $extracted_serial + 1 263449dc963fSmrg extracted_serial=$func_arith_result 263549dc963fSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 263649dc963fSmrg *) break ;; 263749dc963fSmrg esac 263849dc963fSmrg done 263949dc963fSmrg extracted_archives="$extracted_archives $my_xlib_u" 264049dc963fSmrg my_xdir="$my_gentop/$my_xlib_u" 26414b0ead49Smrg 264249dc963fSmrg func_mkdir_p "$my_xdir" 26434b0ead49Smrg 264449dc963fSmrg case $host in 264549dc963fSmrg *-darwin*) 264649dc963fSmrg func_verbose "Extracting $my_xabs" 264749dc963fSmrg # Do not bother doing anything if just a dry run 264849dc963fSmrg $opt_dry_run || { 264949dc963fSmrg darwin_orig_dir=`pwd` 265049dc963fSmrg cd $my_xdir || exit $? 265149dc963fSmrg darwin_archive=$my_xabs 265249dc963fSmrg darwin_curdir=`pwd` 265349dc963fSmrg darwin_base_archive=`basename "$darwin_archive"` 265449dc963fSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 265549dc963fSmrg if test -n "$darwin_arches"; then 265649dc963fSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 265749dc963fSmrg darwin_arch= 265849dc963fSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 265949dc963fSmrg for darwin_arch in $darwin_arches ; do 266049dc963fSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 266149dc963fSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 266249dc963fSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 266349dc963fSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 266449dc963fSmrg cd "$darwin_curdir" 266549dc963fSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 266649dc963fSmrg done # $darwin_arches 266749dc963fSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 266849dc963fSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 266949dc963fSmrg darwin_file= 267049dc963fSmrg darwin_files= 267149dc963fSmrg for darwin_file in $darwin_filelist; do 267249dc963fSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 267349dc963fSmrg $LIPO -create -output "$darwin_file" $darwin_files 267449dc963fSmrg done # $darwin_filelist 267549dc963fSmrg $RM -rf unfat-$$ 267649dc963fSmrg cd "$darwin_orig_dir" 26774b0ead49Smrg else 267849dc963fSmrg cd $darwin_orig_dir 267949dc963fSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 268049dc963fSmrg fi # $darwin_arches 268149dc963fSmrg } # !$opt_dry_run 268249dc963fSmrg ;; 268349dc963fSmrg *) 268449dc963fSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 268549dc963fSmrg ;; 268649dc963fSmrg esac 268749dc963fSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 268849dc963fSmrg done 26894b0ead49Smrg 269049dc963fSmrg func_extract_archives_result="$my_oldobjs" 269149dc963fSmrg} 26924b0ead49Smrg 26934b0ead49Smrg 26944b0ead49Smrg 269549dc963fSmrg# func_emit_wrapper_part1 [arg=no] 269649dc963fSmrg# 269749dc963fSmrg# Emit the first part of a libtool wrapper script on stdout. 269849dc963fSmrg# For more information, see the description associated with 269949dc963fSmrg# func_emit_wrapper(), below. 270049dc963fSmrgfunc_emit_wrapper_part1 () 270149dc963fSmrg{ 270249dc963fSmrg func_emit_wrapper_part1_arg1=no 270349dc963fSmrg if test -n "$1" ; then 270449dc963fSmrg func_emit_wrapper_part1_arg1=$1 27054b0ead49Smrg fi 27064b0ead49Smrg 270749dc963fSmrg $ECHO "\ 270849dc963fSmrg#! $SHELL 27094b0ead49Smrg 271049dc963fSmrg# $output - temporary wrapper script for $objdir/$outputname 271149dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 271249dc963fSmrg# 271349dc963fSmrg# The $output program cannot be directly executed until all the libtool 271449dc963fSmrg# libraries that it depends on are installed. 271549dc963fSmrg# 271649dc963fSmrg# This wrapper script should never be moved out of the build directory. 271749dc963fSmrg# If it is, it will not operate correctly. 27184b0ead49Smrg 271949dc963fSmrg# Sed substitution that helps us do robust quoting. It backslashifies 272049dc963fSmrg# metacharacters that are still active within double-quoted strings. 272149dc963fSmrgXsed='${SED} -e 1s/^X//' 272249dc963fSmrgsed_quote_subst='$sed_quote_subst' 27234b0ead49Smrg 272449dc963fSmrg# Be Bourne compatible 272549dc963fSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 272649dc963fSmrg emulate sh 272749dc963fSmrg NULLCMD=: 272849dc963fSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 272949dc963fSmrg # is contrary to our usage. Disable this feature. 273049dc963fSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 273149dc963fSmrg setopt NO_GLOB_SUBST 273249dc963fSmrgelse 273349dc963fSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 273449dc963fSmrgfi 273549dc963fSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 273649dc963fSmrgDUALCASE=1; export DUALCASE # for MKS sh 27374b0ead49Smrg 273849dc963fSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 273949dc963fSmrg# if CDPATH is set. 274049dc963fSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 27414b0ead49Smrg 274249dc963fSmrgrelink_command=\"$relink_command\" 27434b0ead49Smrg 274449dc963fSmrg# This environment variable determines our operation mode. 274549dc963fSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 274649dc963fSmrg # install mode needs the following variables: 274749dc963fSmrg generated_by_libtool_version='$macro_version' 274849dc963fSmrg notinst_deplibs='$notinst_deplibs' 274949dc963fSmrgelse 275049dc963fSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 275149dc963fSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 275249dc963fSmrg ECHO=\"$qecho\" 275349dc963fSmrg file=\"\$0\" 275449dc963fSmrg # Make sure echo works. 275549dc963fSmrg if test \"X\$1\" = X--no-reexec; then 275649dc963fSmrg # Discard the --no-reexec flag, and continue. 275749dc963fSmrg shift 275849dc963fSmrg elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then 275949dc963fSmrg # Yippee, \$ECHO works! 276049dc963fSmrg : 276149dc963fSmrg else 276249dc963fSmrg # Restart under the correct shell, and then maybe \$ECHO will work. 276349dc963fSmrg exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 276449dc963fSmrg fi 276549dc963fSmrg fi\ 276649dc963fSmrg" 276749dc963fSmrg $ECHO "\ 27684b0ead49Smrg 276949dc963fSmrg # Find the directory that this script lives in. 277049dc963fSmrg thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 277149dc963fSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 27724b0ead49Smrg 277349dc963fSmrg # Follow symbolic links until we get to the real thisdir. 277449dc963fSmrg file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 277549dc963fSmrg while test -n \"\$file\"; do 277649dc963fSmrg destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 27774b0ead49Smrg 277849dc963fSmrg # If there was a directory component, then change thisdir. 277949dc963fSmrg if test \"x\$destdir\" != \"x\$file\"; then 278049dc963fSmrg case \"\$destdir\" in 278149dc963fSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 278249dc963fSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 27834b0ead49Smrg esac 278449dc963fSmrg fi 27854b0ead49Smrg 278649dc963fSmrg file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 278749dc963fSmrg file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 278849dc963fSmrg done 278949dc963fSmrg" 279049dc963fSmrg} 279149dc963fSmrg# end: func_emit_wrapper_part1 279249dc963fSmrg 279349dc963fSmrg# func_emit_wrapper_part2 [arg=no] 279449dc963fSmrg# 279549dc963fSmrg# Emit the second part of a libtool wrapper script on stdout. 279649dc963fSmrg# For more information, see the description associated with 279749dc963fSmrg# func_emit_wrapper(), below. 279849dc963fSmrgfunc_emit_wrapper_part2 () 279949dc963fSmrg{ 280049dc963fSmrg func_emit_wrapper_part2_arg1=no 280149dc963fSmrg if test -n "$1" ; then 280249dc963fSmrg func_emit_wrapper_part2_arg1=$1 28034b0ead49Smrg fi 28044b0ead49Smrg 280549dc963fSmrg $ECHO "\ 28064b0ead49Smrg 280749dc963fSmrg # Usually 'no', except on cygwin/mingw when embedded into 280849dc963fSmrg # the cwrapper. 280949dc963fSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 281049dc963fSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 281149dc963fSmrg # special case for '.' 281249dc963fSmrg if test \"\$thisdir\" = \".\"; then 281349dc963fSmrg thisdir=\`pwd\` 281449dc963fSmrg fi 281549dc963fSmrg # remove .libs from thisdir 281649dc963fSmrg case \"\$thisdir\" in 281749dc963fSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; 281849dc963fSmrg $objdir ) thisdir=. ;; 281949dc963fSmrg esac 282049dc963fSmrg fi 282149dc963fSmrg 282249dc963fSmrg # Try to get the absolute directory name. 282349dc963fSmrg absdir=\`cd \"\$thisdir\" && pwd\` 282449dc963fSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 282549dc963fSmrg" 282649dc963fSmrg 282749dc963fSmrg if test "$fast_install" = yes; then 282849dc963fSmrg $ECHO "\ 282949dc963fSmrg program=lt-'$outputname'$exeext 283049dc963fSmrg progdir=\"\$thisdir/$objdir\" 283149dc963fSmrg 283249dc963fSmrg if test ! -f \"\$progdir/\$program\" || 283349dc963fSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 283449dc963fSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 283549dc963fSmrg 283649dc963fSmrg file=\"\$\$-\$program\" 283749dc963fSmrg 283849dc963fSmrg if test ! -d \"\$progdir\"; then 283949dc963fSmrg $MKDIR \"\$progdir\" 284049dc963fSmrg else 284149dc963fSmrg $RM \"\$progdir/\$file\" 284249dc963fSmrg fi" 284349dc963fSmrg 284449dc963fSmrg $ECHO "\ 284549dc963fSmrg 284649dc963fSmrg # relink executable if necessary 284749dc963fSmrg if test -n \"\$relink_command\"; then 284849dc963fSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 284949dc963fSmrg else 285049dc963fSmrg $ECHO \"\$relink_command_output\" >&2 285149dc963fSmrg $RM \"\$progdir/\$file\" 285249dc963fSmrg exit 1 28534b0ead49Smrg fi 285449dc963fSmrg fi 28554b0ead49Smrg 285649dc963fSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 285749dc963fSmrg { $RM \"\$progdir/\$program\"; 285849dc963fSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 285949dc963fSmrg $RM \"\$progdir/\$file\" 286049dc963fSmrg fi" 286149dc963fSmrg else 286249dc963fSmrg $ECHO "\ 286349dc963fSmrg program='$outputname' 286449dc963fSmrg progdir=\"\$thisdir/$objdir\" 286549dc963fSmrg" 28664b0ead49Smrg fi 28674b0ead49Smrg 286849dc963fSmrg $ECHO "\ 28694b0ead49Smrg 287049dc963fSmrg if test -f \"\$progdir/\$program\"; then" 28714b0ead49Smrg 287249dc963fSmrg # Export our shlibpath_var if we have one. 287349dc963fSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 287449dc963fSmrg $ECHO "\ 287549dc963fSmrg # Add our own library path to $shlibpath_var 287649dc963fSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 287749dc963fSmrg 287849dc963fSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 287949dc963fSmrg # The second colon is a workaround for a bug in BeOS R4 sed 288049dc963fSmrg $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 28814b0ead49Smrg 288249dc963fSmrg export $shlibpath_var 288349dc963fSmrg" 28844b0ead49Smrg fi 28854b0ead49Smrg 288649dc963fSmrg # fixup the dll searchpath if we need to. 288749dc963fSmrg if test -n "$dllsearchpath"; then 288849dc963fSmrg $ECHO "\ 288949dc963fSmrg # Add the dll search path components to the executable PATH 289049dc963fSmrg PATH=$dllsearchpath:\$PATH 289149dc963fSmrg" 289249dc963fSmrg fi 28934b0ead49Smrg 289449dc963fSmrg $ECHO "\ 289549dc963fSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 289649dc963fSmrg # Run the actual program with our arguments. 289749dc963fSmrg" 289849dc963fSmrg case $host in 289949dc963fSmrg # Backslashes separate directories on plain windows 290049dc963fSmrg *-*-mingw | *-*-os2* | *-cegcc*) 290149dc963fSmrg $ECHO "\ 290249dc963fSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 290349dc963fSmrg" 29044b0ead49Smrg ;; 29054b0ead49Smrg 29064b0ead49Smrg *) 290749dc963fSmrg $ECHO "\ 290849dc963fSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 290949dc963fSmrg" 29104b0ead49Smrg ;; 29114b0ead49Smrg esac 291249dc963fSmrg $ECHO "\ 291349dc963fSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 291449dc963fSmrg exit 1 291549dc963fSmrg fi 291649dc963fSmrg else 291749dc963fSmrg # The program doesn't exist. 291849dc963fSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 291949dc963fSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 292049dc963fSmrg $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 292149dc963fSmrg exit 1 292249dc963fSmrg fi 292349dc963fSmrgfi\ 292449dc963fSmrg" 292549dc963fSmrg} 292649dc963fSmrg# end: func_emit_wrapper_part2 29274b0ead49Smrg 29284b0ead49Smrg 292949dc963fSmrg# func_emit_wrapper [arg=no] 293049dc963fSmrg# 293149dc963fSmrg# Emit a libtool wrapper script on stdout. 293249dc963fSmrg# Don't directly open a file because we may want to 293349dc963fSmrg# incorporate the script contents within a cygwin/mingw 293449dc963fSmrg# wrapper executable. Must ONLY be called from within 293549dc963fSmrg# func_mode_link because it depends on a number of variables 293649dc963fSmrg# set therein. 293749dc963fSmrg# 293849dc963fSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 293949dc963fSmrg# variable will take. If 'yes', then the emitted script 294049dc963fSmrg# will assume that the directory in which it is stored is 294149dc963fSmrg# the $objdir directory. This is a cygwin/mingw-specific 294249dc963fSmrg# behavior. 294349dc963fSmrgfunc_emit_wrapper () 294449dc963fSmrg{ 294549dc963fSmrg func_emit_wrapper_arg1=no 294649dc963fSmrg if test -n "$1" ; then 294749dc963fSmrg func_emit_wrapper_arg1=$1 29484b0ead49Smrg fi 29494b0ead49Smrg 295049dc963fSmrg # split this up so that func_emit_cwrapperexe_src 295149dc963fSmrg # can call each part independently. 295249dc963fSmrg func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" 295349dc963fSmrg func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" 295449dc963fSmrg} 29554b0ead49Smrg 29564b0ead49Smrg 295749dc963fSmrg# func_to_host_path arg 295849dc963fSmrg# 295949dc963fSmrg# Convert paths to host format when used with build tools. 296049dc963fSmrg# Intended for use with "native" mingw (where libtool itself 296149dc963fSmrg# is running under the msys shell), or in the following cross- 296249dc963fSmrg# build environments: 296349dc963fSmrg# $build $host 296449dc963fSmrg# mingw (msys) mingw [e.g. native] 296549dc963fSmrg# cygwin mingw 296649dc963fSmrg# *nix + wine mingw 296749dc963fSmrg# where wine is equipped with the `winepath' executable. 296849dc963fSmrg# In the native mingw case, the (msys) shell automatically 296949dc963fSmrg# converts paths for any non-msys applications it launches, 297049dc963fSmrg# but that facility isn't available from inside the cwrapper. 297149dc963fSmrg# Similar accommodations are necessary for $host mingw and 297249dc963fSmrg# $build cygwin. Calling this function does no harm for other 297349dc963fSmrg# $host/$build combinations not listed above. 297449dc963fSmrg# 297549dc963fSmrg# ARG is the path (on $build) that should be converted to 297649dc963fSmrg# the proper representation for $host. The result is stored 297749dc963fSmrg# in $func_to_host_path_result. 297849dc963fSmrgfunc_to_host_path () 297949dc963fSmrg{ 298049dc963fSmrg func_to_host_path_result="$1" 298149dc963fSmrg if test -n "$1" ; then 298249dc963fSmrg case $host in 298349dc963fSmrg *mingw* ) 298449dc963fSmrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 298549dc963fSmrg case $build in 298649dc963fSmrg *mingw* ) # actually, msys 298749dc963fSmrg # awkward: cmd appends spaces to result 298849dc963fSmrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 298949dc963fSmrg func_to_host_path_tmp1=`( cmd //c echo "$1" |\ 299049dc963fSmrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 299149dc963fSmrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 299249dc963fSmrg $SED -e "$lt_sed_naive_backslashify"` 299349dc963fSmrg ;; 299449dc963fSmrg *cygwin* ) 299549dc963fSmrg func_to_host_path_tmp1=`cygpath -w "$1"` 299649dc963fSmrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 299749dc963fSmrg $SED -e "$lt_sed_naive_backslashify"` 299849dc963fSmrg ;; 299949dc963fSmrg * ) 300049dc963fSmrg # Unfortunately, winepath does not exit with a non-zero 300149dc963fSmrg # error code, so we are forced to check the contents of 300249dc963fSmrg # stdout. On the other hand, if the command is not 300349dc963fSmrg # found, the shell will set an exit code of 127 and print 300449dc963fSmrg # *an error message* to stdout. So we must check for both 300549dc963fSmrg # error code of zero AND non-empty stdout, which explains 300649dc963fSmrg # the odd construction: 300749dc963fSmrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 300849dc963fSmrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 300949dc963fSmrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 301049dc963fSmrg $SED -e "$lt_sed_naive_backslashify"` 301149dc963fSmrg else 301249dc963fSmrg # Allow warning below. 301349dc963fSmrg func_to_host_path_result="" 301449dc963fSmrg fi 301549dc963fSmrg ;; 301649dc963fSmrg esac 301749dc963fSmrg if test -z "$func_to_host_path_result" ; then 301849dc963fSmrg func_error "Could not determine host path corresponding to" 301949dc963fSmrg func_error " '$1'" 302049dc963fSmrg func_error "Continuing, but uninstalled executables may not work." 302149dc963fSmrg # Fallback: 302249dc963fSmrg func_to_host_path_result="$1" 302349dc963fSmrg fi 302449dc963fSmrg ;; 302549dc963fSmrg esac 302649dc963fSmrg fi 302749dc963fSmrg} 302849dc963fSmrg# end: func_to_host_path 30294b0ead49Smrg 303049dc963fSmrg# func_to_host_pathlist arg 303149dc963fSmrg# 303249dc963fSmrg# Convert pathlists to host format when used with build tools. 303349dc963fSmrg# See func_to_host_path(), above. This function supports the 303449dc963fSmrg# following $build/$host combinations (but does no harm for 303549dc963fSmrg# combinations not listed here): 303649dc963fSmrg# $build $host 303749dc963fSmrg# mingw (msys) mingw [e.g. native] 303849dc963fSmrg# cygwin mingw 303949dc963fSmrg# *nix + wine mingw 304049dc963fSmrg# 304149dc963fSmrg# Path separators are also converted from $build format to 304249dc963fSmrg# $host format. If ARG begins or ends with a path separator 304349dc963fSmrg# character, it is preserved (but converted to $host format) 304449dc963fSmrg# on output. 304549dc963fSmrg# 304649dc963fSmrg# ARG is a pathlist (on $build) that should be converted to 304749dc963fSmrg# the proper representation on $host. The result is stored 304849dc963fSmrg# in $func_to_host_pathlist_result. 304949dc963fSmrgfunc_to_host_pathlist () 305049dc963fSmrg{ 305149dc963fSmrg func_to_host_pathlist_result="$1" 305249dc963fSmrg if test -n "$1" ; then 305349dc963fSmrg case $host in 305449dc963fSmrg *mingw* ) 305549dc963fSmrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 305649dc963fSmrg # Remove leading and trailing path separator characters from 305749dc963fSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 305849dc963fSmrg # into '.;' and ';.', and winepath ignores them completely. 305949dc963fSmrg func_to_host_pathlist_tmp2="$1" 306049dc963fSmrg # Once set for this call, this variable should not be 306149dc963fSmrg # reassigned. It is used in tha fallback case. 306249dc963fSmrg func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ 306349dc963fSmrg $SED -e 's|^:*||' -e 's|:*$||'` 306449dc963fSmrg case $build in 306549dc963fSmrg *mingw* ) # Actually, msys. 306649dc963fSmrg # Awkward: cmd appends spaces to result. 306749dc963fSmrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 306849dc963fSmrg func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ 306949dc963fSmrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 307049dc963fSmrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 307149dc963fSmrg $SED -e "$lt_sed_naive_backslashify"` 307249dc963fSmrg ;; 307349dc963fSmrg *cygwin* ) 307449dc963fSmrg func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` 307549dc963fSmrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 307649dc963fSmrg $SED -e "$lt_sed_naive_backslashify"` 307749dc963fSmrg ;; 307849dc963fSmrg * ) 307949dc963fSmrg # unfortunately, winepath doesn't convert pathlists 308049dc963fSmrg func_to_host_pathlist_result="" 308149dc963fSmrg func_to_host_pathlist_oldIFS=$IFS 308249dc963fSmrg IFS=: 308349dc963fSmrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 308449dc963fSmrg IFS=$func_to_host_pathlist_oldIFS 308549dc963fSmrg if test -n "$func_to_host_pathlist_f" ; then 308649dc963fSmrg func_to_host_path "$func_to_host_pathlist_f" 308749dc963fSmrg if test -n "$func_to_host_path_result" ; then 308849dc963fSmrg if test -z "$func_to_host_pathlist_result" ; then 308949dc963fSmrg func_to_host_pathlist_result="$func_to_host_path_result" 309049dc963fSmrg else 309149dc963fSmrg func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" 309249dc963fSmrg fi 309349dc963fSmrg fi 309449dc963fSmrg fi 309549dc963fSmrg IFS=: 309649dc963fSmrg done 309749dc963fSmrg IFS=$func_to_host_pathlist_oldIFS 309849dc963fSmrg ;; 309949dc963fSmrg esac 310049dc963fSmrg if test -z "$func_to_host_pathlist_result" ; then 310149dc963fSmrg func_error "Could not determine the host path(s) corresponding to" 310249dc963fSmrg func_error " '$1'" 310349dc963fSmrg func_error "Continuing, but uninstalled executables may not work." 310449dc963fSmrg # Fallback. This may break if $1 contains DOS-style drive 310549dc963fSmrg # specifications. The fix is not to complicate the expression 310649dc963fSmrg # below, but for the user to provide a working wine installation 310749dc963fSmrg # with winepath so that path translation in the cross-to-mingw 310849dc963fSmrg # case works properly. 310949dc963fSmrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 311049dc963fSmrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 311149dc963fSmrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 311249dc963fSmrg fi 311349dc963fSmrg # Now, add the leading and trailing path separators back 311449dc963fSmrg case "$1" in 311549dc963fSmrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 311649dc963fSmrg ;; 311749dc963fSmrg esac 311849dc963fSmrg case "$1" in 311949dc963fSmrg *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" 312049dc963fSmrg ;; 312149dc963fSmrg esac 312249dc963fSmrg ;; 312349dc963fSmrg esac 312449dc963fSmrg fi 312549dc963fSmrg} 312649dc963fSmrg# end: func_to_host_pathlist 31274b0ead49Smrg 312849dc963fSmrg# func_emit_cwrapperexe_src 312949dc963fSmrg# emit the source code for a wrapper executable on stdout 313049dc963fSmrg# Must ONLY be called from within func_mode_link because 313149dc963fSmrg# it depends on a number of variable set therein. 313249dc963fSmrgfunc_emit_cwrapperexe_src () 313349dc963fSmrg{ 313449dc963fSmrg cat <<EOF 31354b0ead49Smrg 313649dc963fSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 313749dc963fSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 31384b0ead49Smrg 313949dc963fSmrg The $output program cannot be directly executed until all the libtool 314049dc963fSmrg libraries that it depends on are installed. 31414b0ead49Smrg 314249dc963fSmrg This wrapper executable should never be moved out of the build directory. 314349dc963fSmrg If it is, it will not operate correctly. 31444b0ead49Smrg 314549dc963fSmrg Currently, it simply execs the wrapper *script* "$SHELL $output", 314649dc963fSmrg but could eventually absorb all of the scripts functionality and 314749dc963fSmrg exec $objdir/$outputname directly. 314849dc963fSmrg*/ 314949dc963fSmrgEOF 315049dc963fSmrg cat <<"EOF" 315149dc963fSmrg#include <stdio.h> 315249dc963fSmrg#include <stdlib.h> 315349dc963fSmrg#ifdef _MSC_VER 315449dc963fSmrg# include <direct.h> 315549dc963fSmrg# include <process.h> 315649dc963fSmrg# include <io.h> 315749dc963fSmrg# define setmode _setmode 315849dc963fSmrg#else 315949dc963fSmrg# include <unistd.h> 316049dc963fSmrg# include <stdint.h> 316149dc963fSmrg# ifdef __CYGWIN__ 316249dc963fSmrg# include <io.h> 316349dc963fSmrg# define HAVE_SETENV 316449dc963fSmrg# ifdef __STRICT_ANSI__ 316549dc963fSmrgchar *realpath (const char *, char *); 316649dc963fSmrgint putenv (char *); 316749dc963fSmrgint setenv (const char *, const char *, int); 316849dc963fSmrg# endif 316949dc963fSmrg# endif 317049dc963fSmrg#endif 317149dc963fSmrg#include <malloc.h> 317249dc963fSmrg#include <stdarg.h> 317349dc963fSmrg#include <assert.h> 317449dc963fSmrg#include <string.h> 317549dc963fSmrg#include <ctype.h> 317649dc963fSmrg#include <errno.h> 317749dc963fSmrg#include <fcntl.h> 317849dc963fSmrg#include <sys/stat.h> 31794b0ead49Smrg 318049dc963fSmrg#if defined(PATH_MAX) 318149dc963fSmrg# define LT_PATHMAX PATH_MAX 318249dc963fSmrg#elif defined(MAXPATHLEN) 318349dc963fSmrg# define LT_PATHMAX MAXPATHLEN 318449dc963fSmrg#else 318549dc963fSmrg# define LT_PATHMAX 1024 318649dc963fSmrg#endif 31874b0ead49Smrg 318849dc963fSmrg#ifndef S_IXOTH 318949dc963fSmrg# define S_IXOTH 0 319049dc963fSmrg#endif 319149dc963fSmrg#ifndef S_IXGRP 319249dc963fSmrg# define S_IXGRP 0 319349dc963fSmrg#endif 31944b0ead49Smrg 319549dc963fSmrg#ifdef _MSC_VER 319649dc963fSmrg# define S_IXUSR _S_IEXEC 319749dc963fSmrg# define stat _stat 319849dc963fSmrg# ifndef _INTPTR_T_DEFINED 319949dc963fSmrg# define intptr_t int 320049dc963fSmrg# endif 320149dc963fSmrg#endif 32024b0ead49Smrg 320349dc963fSmrg#ifndef DIR_SEPARATOR 320449dc963fSmrg# define DIR_SEPARATOR '/' 320549dc963fSmrg# define PATH_SEPARATOR ':' 320649dc963fSmrg#endif 32074b0ead49Smrg 320849dc963fSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 320949dc963fSmrg defined (__OS2__) 321049dc963fSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 321149dc963fSmrg# define FOPEN_WB "wb" 321249dc963fSmrg# ifndef DIR_SEPARATOR_2 321349dc963fSmrg# define DIR_SEPARATOR_2 '\\' 321449dc963fSmrg# endif 321549dc963fSmrg# ifndef PATH_SEPARATOR_2 321649dc963fSmrg# define PATH_SEPARATOR_2 ';' 321749dc963fSmrg# endif 321849dc963fSmrg#endif 32194b0ead49Smrg 322049dc963fSmrg#ifndef DIR_SEPARATOR_2 322149dc963fSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 322249dc963fSmrg#else /* DIR_SEPARATOR_2 */ 322349dc963fSmrg# define IS_DIR_SEPARATOR(ch) \ 322449dc963fSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 322549dc963fSmrg#endif /* DIR_SEPARATOR_2 */ 32264b0ead49Smrg 322749dc963fSmrg#ifndef PATH_SEPARATOR_2 322849dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 322949dc963fSmrg#else /* PATH_SEPARATOR_2 */ 323049dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 323149dc963fSmrg#endif /* PATH_SEPARATOR_2 */ 32324b0ead49Smrg 323349dc963fSmrg#ifdef __CYGWIN__ 323449dc963fSmrg# define FOPEN_WB "wb" 323549dc963fSmrg#endif 32364b0ead49Smrg 323749dc963fSmrg#ifndef FOPEN_WB 323849dc963fSmrg# define FOPEN_WB "w" 323949dc963fSmrg#endif 324049dc963fSmrg#ifndef _O_BINARY 324149dc963fSmrg# define _O_BINARY 0 324249dc963fSmrg#endif 32434b0ead49Smrg 324449dc963fSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 324549dc963fSmrg#define XFREE(stale) do { \ 324649dc963fSmrg if (stale) { free ((void *) stale); stale = 0; } \ 324749dc963fSmrg} while (0) 32484b0ead49Smrg 324949dc963fSmrg#undef LTWRAPPER_DEBUGPRINTF 325049dc963fSmrg#if defined DEBUGWRAPPER 325149dc963fSmrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args 325249dc963fSmrgstatic void 325349dc963fSmrgltwrapper_debugprintf (const char *fmt, ...) 325449dc963fSmrg{ 325549dc963fSmrg va_list args; 325649dc963fSmrg va_start (args, fmt); 325749dc963fSmrg (void) vfprintf (stderr, fmt, args); 325849dc963fSmrg va_end (args); 325949dc963fSmrg} 326049dc963fSmrg#else 326149dc963fSmrg# define LTWRAPPER_DEBUGPRINTF(args) 326249dc963fSmrg#endif 32634b0ead49Smrg 326449dc963fSmrgconst char *program_name = NULL; 32654b0ead49Smrg 326649dc963fSmrgvoid *xmalloc (size_t num); 326749dc963fSmrgchar *xstrdup (const char *string); 326849dc963fSmrgconst char *base_name (const char *name); 326949dc963fSmrgchar *find_executable (const char *wrapper); 327049dc963fSmrgchar *chase_symlinks (const char *pathspec); 327149dc963fSmrgint make_executable (const char *path); 327249dc963fSmrgint check_executable (const char *path); 327349dc963fSmrgchar *strendzap (char *str, const char *pat); 327449dc963fSmrgvoid lt_fatal (const char *message, ...); 327549dc963fSmrgvoid lt_setenv (const char *name, const char *value); 327649dc963fSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 327749dc963fSmrgvoid lt_opt_process_env_set (const char *arg); 327849dc963fSmrgvoid lt_opt_process_env_prepend (const char *arg); 327949dc963fSmrgvoid lt_opt_process_env_append (const char *arg); 328049dc963fSmrgint lt_split_name_value (const char *arg, char** name, char** value); 328149dc963fSmrgvoid lt_update_exe_path (const char *name, const char *value); 328249dc963fSmrgvoid lt_update_lib_path (const char *name, const char *value); 328349dc963fSmrg 328449dc963fSmrgstatic const char *script_text_part1 = 328549dc963fSmrgEOF 32864b0ead49Smrg 328749dc963fSmrg func_emit_wrapper_part1 yes | 328849dc963fSmrg $SED -e 's/\([\\"]\)/\\\1/g' \ 328949dc963fSmrg -e 's/^/ "/' -e 's/$/\\n"/' 329049dc963fSmrg echo ";" 329149dc963fSmrg cat <<EOF 32924b0ead49Smrg 329349dc963fSmrgstatic const char *script_text_part2 = 329449dc963fSmrgEOF 329549dc963fSmrg func_emit_wrapper_part2 yes | 329649dc963fSmrg $SED -e 's/\([\\"]\)/\\\1/g' \ 329749dc963fSmrg -e 's/^/ "/' -e 's/$/\\n"/' 329849dc963fSmrg echo ";" 329949dc963fSmrg 330049dc963fSmrg cat <<EOF 330149dc963fSmrgconst char * MAGIC_EXE = "$magic_exe"; 330249dc963fSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 330349dc963fSmrgEOF 33044b0ead49Smrg 330549dc963fSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 330649dc963fSmrg func_to_host_pathlist "$temp_rpath" 330749dc963fSmrg cat <<EOF 330849dc963fSmrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 330949dc963fSmrgEOF 331049dc963fSmrg else 331149dc963fSmrg cat <<"EOF" 331249dc963fSmrgconst char * LIB_PATH_VALUE = ""; 331349dc963fSmrgEOF 33144b0ead49Smrg fi 33154b0ead49Smrg 331649dc963fSmrg if test -n "$dllsearchpath"; then 331749dc963fSmrg func_to_host_pathlist "$dllsearchpath:" 331849dc963fSmrg cat <<EOF 331949dc963fSmrgconst char * EXE_PATH_VARNAME = "PATH"; 332049dc963fSmrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 33214b0ead49SmrgEOF 33224b0ead49Smrg else 332349dc963fSmrg cat <<"EOF" 332449dc963fSmrgconst char * EXE_PATH_VARNAME = ""; 332549dc963fSmrgconst char * EXE_PATH_VALUE = ""; 332649dc963fSmrgEOF 33274b0ead49Smrg fi 332849dc963fSmrg 332949dc963fSmrg if test "$fast_install" = yes; then 333049dc963fSmrg cat <<EOF 333149dc963fSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 333249dc963fSmrgEOF 33334b0ead49Smrg else 333449dc963fSmrg cat <<EOF 333549dc963fSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 333649dc963fSmrgEOF 33374b0ead49Smrg fi 33384b0ead49Smrg 33394b0ead49Smrg 334049dc963fSmrg cat <<"EOF" 33414b0ead49Smrg 334249dc963fSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 334349dc963fSmrg#define LTWRAPPER_OPTION_PREFIX_LENGTH 5 33444b0ead49Smrg 334549dc963fSmrgstatic const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH; 334649dc963fSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 33474b0ead49Smrg 334849dc963fSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 33494b0ead49Smrg 335049dc963fSmrgstatic const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7; 335149dc963fSmrgstatic const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set"; 335249dc963fSmrg /* argument is putenv-style "foo=bar", value of foo is set to bar */ 33534b0ead49Smrg 335449dc963fSmrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11; 335549dc963fSmrgstatic const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend"; 335649dc963fSmrg /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */ 33574b0ead49Smrg 335849dc963fSmrgstatic const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10; 335949dc963fSmrgstatic const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append"; 336049dc963fSmrg /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */ 33614b0ead49Smrg 336249dc963fSmrgint 336349dc963fSmrgmain (int argc, char *argv[]) 336449dc963fSmrg{ 336549dc963fSmrg char **newargz; 336649dc963fSmrg int newargc; 336749dc963fSmrg char *tmp_pathspec; 336849dc963fSmrg char *actual_cwrapper_path; 336949dc963fSmrg char *actual_cwrapper_name; 337049dc963fSmrg char *target_name; 337149dc963fSmrg char *lt_argv_zero; 337249dc963fSmrg intptr_t rval = 127; 33734b0ead49Smrg 337449dc963fSmrg int i; 33754b0ead49Smrg 337649dc963fSmrg program_name = (char *) xstrdup (base_name (argv[0])); 337749dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0])); 337849dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name)); 33794b0ead49Smrg 338049dc963fSmrg /* very simple arg parsing; don't want to rely on getopt */ 338149dc963fSmrg for (i = 1; i < argc; i++) 338249dc963fSmrg { 338349dc963fSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 338449dc963fSmrg { 338549dc963fSmrgEOF 338649dc963fSmrg case "$host" in 338749dc963fSmrg *mingw* | *cygwin* ) 338849dc963fSmrg # make stdout use "unix" line endings 338949dc963fSmrg echo " setmode(1,_O_BINARY);" 339049dc963fSmrg ;; 339149dc963fSmrg esac 33924b0ead49Smrg 339349dc963fSmrg cat <<"EOF" 339449dc963fSmrg printf ("%s", script_text_part1); 339549dc963fSmrg printf ("%s", script_text_part2); 339649dc963fSmrg return 0; 339749dc963fSmrg } 339849dc963fSmrg } 33994b0ead49Smrg 340049dc963fSmrg newargz = XMALLOC (char *, argc + 1); 340149dc963fSmrg tmp_pathspec = find_executable (argv[0]); 340249dc963fSmrg if (tmp_pathspec == NULL) 340349dc963fSmrg lt_fatal ("Couldn't find %s", argv[0]); 340449dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", 340549dc963fSmrg tmp_pathspec)); 340649dc963fSmrg 340749dc963fSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 340849dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", 340949dc963fSmrg actual_cwrapper_path)); 341049dc963fSmrg XFREE (tmp_pathspec); 341149dc963fSmrg 341249dc963fSmrg actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); 341349dc963fSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 341449dc963fSmrg 341549dc963fSmrg /* wrapper name transforms */ 341649dc963fSmrg strendzap (actual_cwrapper_name, ".exe"); 341749dc963fSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 341849dc963fSmrg XFREE (actual_cwrapper_name); 341949dc963fSmrg actual_cwrapper_name = tmp_pathspec; 342049dc963fSmrg tmp_pathspec = 0; 342149dc963fSmrg 342249dc963fSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 342349dc963fSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 342449dc963fSmrg strendzap (target_name, ".exe"); 342549dc963fSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 342649dc963fSmrg XFREE (target_name); 342749dc963fSmrg target_name = tmp_pathspec; 342849dc963fSmrg tmp_pathspec = 0; 342949dc963fSmrg 343049dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", 343149dc963fSmrg target_name)); 343249dc963fSmrgEOF 34334b0ead49Smrg 343449dc963fSmrg cat <<EOF 343549dc963fSmrg newargz[0] = 343649dc963fSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 343749dc963fSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 343849dc963fSmrg strcpy (newargz[0], actual_cwrapper_path); 343949dc963fSmrg strcat (newargz[0], "$objdir"); 344049dc963fSmrg strcat (newargz[0], "/"); 344149dc963fSmrgEOF 34424b0ead49Smrg 344349dc963fSmrg cat <<"EOF" 344449dc963fSmrg /* stop here, and copy so we don't have to do this twice */ 344549dc963fSmrg tmp_pathspec = xstrdup (newargz[0]); 34464b0ead49Smrg 344749dc963fSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 344849dc963fSmrg strcat (newargz[0], actual_cwrapper_name); 34494b0ead49Smrg 345049dc963fSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 345149dc963fSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 345249dc963fSmrg XFREE (tmp_pathspec); 345349dc963fSmrg tmp_pathspec = NULL; 345449dc963fSmrgEOF 34554b0ead49Smrg 345649dc963fSmrg case $host_os in 345749dc963fSmrg mingw*) 345849dc963fSmrg cat <<"EOF" 345949dc963fSmrg { 346049dc963fSmrg char* p; 346149dc963fSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 346249dc963fSmrg { 346349dc963fSmrg *p = '/'; 346449dc963fSmrg } 346549dc963fSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 346649dc963fSmrg { 346749dc963fSmrg *p = '/'; 346849dc963fSmrg } 346949dc963fSmrg } 347049dc963fSmrgEOF 347149dc963fSmrg ;; 347249dc963fSmrg esac 34734b0ead49Smrg 347449dc963fSmrg cat <<"EOF" 347549dc963fSmrg XFREE (target_name); 347649dc963fSmrg XFREE (actual_cwrapper_path); 347749dc963fSmrg XFREE (actual_cwrapper_name); 34784b0ead49Smrg 347949dc963fSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 348049dc963fSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 348149dc963fSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 348249dc963fSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 34834b0ead49Smrg 348449dc963fSmrg newargc=0; 348549dc963fSmrg for (i = 1; i < argc; i++) 348649dc963fSmrg { 348749dc963fSmrg if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) 348849dc963fSmrg { 348949dc963fSmrg if (argv[i][env_set_opt_len] == '=') 349049dc963fSmrg { 349149dc963fSmrg const char *p = argv[i] + env_set_opt_len + 1; 349249dc963fSmrg lt_opt_process_env_set (p); 349349dc963fSmrg } 349449dc963fSmrg else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) 349549dc963fSmrg { 349649dc963fSmrg lt_opt_process_env_set (argv[++i]); /* don't copy */ 349749dc963fSmrg } 349849dc963fSmrg else 349949dc963fSmrg lt_fatal ("%s missing required argument", env_set_opt); 350049dc963fSmrg continue; 350149dc963fSmrg } 350249dc963fSmrg if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) 350349dc963fSmrg { 350449dc963fSmrg if (argv[i][env_prepend_opt_len] == '=') 350549dc963fSmrg { 350649dc963fSmrg const char *p = argv[i] + env_prepend_opt_len + 1; 350749dc963fSmrg lt_opt_process_env_prepend (p); 350849dc963fSmrg } 350949dc963fSmrg else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) 351049dc963fSmrg { 351149dc963fSmrg lt_opt_process_env_prepend (argv[++i]); /* don't copy */ 351249dc963fSmrg } 351349dc963fSmrg else 351449dc963fSmrg lt_fatal ("%s missing required argument", env_prepend_opt); 351549dc963fSmrg continue; 351649dc963fSmrg } 351749dc963fSmrg if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) 351849dc963fSmrg { 351949dc963fSmrg if (argv[i][env_append_opt_len] == '=') 352049dc963fSmrg { 352149dc963fSmrg const char *p = argv[i] + env_append_opt_len + 1; 352249dc963fSmrg lt_opt_process_env_append (p); 352349dc963fSmrg } 352449dc963fSmrg else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) 352549dc963fSmrg { 352649dc963fSmrg lt_opt_process_env_append (argv[++i]); /* don't copy */ 352749dc963fSmrg } 352849dc963fSmrg else 352949dc963fSmrg lt_fatal ("%s missing required argument", env_append_opt); 353049dc963fSmrg continue; 353149dc963fSmrg } 353249dc963fSmrg if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) 353349dc963fSmrg { 353449dc963fSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 353549dc963fSmrg namespace, but it is not one of the ones we know about and 353649dc963fSmrg have already dealt with, above (inluding dump-script), then 353749dc963fSmrg report an error. Otherwise, targets might begin to believe 353849dc963fSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 353949dc963fSmrg namespace. The first time any user complains about this, we'll 354049dc963fSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 354149dc963fSmrg or a configure.ac-settable value. 354249dc963fSmrg */ 354349dc963fSmrg lt_fatal ("Unrecognized option in %s namespace: '%s'", 354449dc963fSmrg ltwrapper_option_prefix, argv[i]); 354549dc963fSmrg } 354649dc963fSmrg /* otherwise ... */ 354749dc963fSmrg newargz[++newargc] = xstrdup (argv[i]); 354849dc963fSmrg } 354949dc963fSmrg newargz[++newargc] = NULL; 35504b0ead49Smrg 355149dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>"))); 355249dc963fSmrg for (i = 0; i < newargc; i++) 355349dc963fSmrg { 355449dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>"))); 355549dc963fSmrg } 35564b0ead49Smrg 355749dc963fSmrgEOF 35584b0ead49Smrg 355949dc963fSmrg case $host_os in 356049dc963fSmrg mingw*) 356149dc963fSmrg cat <<"EOF" 356249dc963fSmrg /* execv doesn't actually work on mingw as expected on unix */ 356349dc963fSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 356449dc963fSmrg if (rval == -1) 356549dc963fSmrg { 356649dc963fSmrg /* failed to start process */ 356749dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); 356849dc963fSmrg return 127; 356949dc963fSmrg } 357049dc963fSmrg return rval; 357149dc963fSmrgEOF 357249dc963fSmrg ;; 357349dc963fSmrg *) 357449dc963fSmrg cat <<"EOF" 357549dc963fSmrg execv (lt_argv_zero, newargz); 357649dc963fSmrg return rval; /* =127, but avoids unused variable warning */ 357749dc963fSmrgEOF 357849dc963fSmrg ;; 357949dc963fSmrg esac 35804b0ead49Smrg 358149dc963fSmrg cat <<"EOF" 358249dc963fSmrg} 35834b0ead49Smrg 358449dc963fSmrgvoid * 358549dc963fSmrgxmalloc (size_t num) 358649dc963fSmrg{ 358749dc963fSmrg void *p = (void *) malloc (num); 358849dc963fSmrg if (!p) 358949dc963fSmrg lt_fatal ("Memory exhausted"); 35904b0ead49Smrg 359149dc963fSmrg return p; 359249dc963fSmrg} 35934b0ead49Smrg 359449dc963fSmrgchar * 359549dc963fSmrgxstrdup (const char *string) 359649dc963fSmrg{ 359749dc963fSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 359849dc963fSmrg string) : NULL; 359949dc963fSmrg} 36004b0ead49Smrg 360149dc963fSmrgconst char * 360249dc963fSmrgbase_name (const char *name) 360349dc963fSmrg{ 360449dc963fSmrg const char *base; 36054b0ead49Smrg 360649dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 360749dc963fSmrg /* Skip over the disk name in MSDOS pathnames. */ 360849dc963fSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 360949dc963fSmrg name += 2; 361049dc963fSmrg#endif 36114b0ead49Smrg 361249dc963fSmrg for (base = name; *name; name++) 361349dc963fSmrg if (IS_DIR_SEPARATOR (*name)) 361449dc963fSmrg base = name + 1; 361549dc963fSmrg return base; 361649dc963fSmrg} 36174b0ead49Smrg 361849dc963fSmrgint 361949dc963fSmrgcheck_executable (const char *path) 362049dc963fSmrg{ 362149dc963fSmrg struct stat st; 36224b0ead49Smrg 362349dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", 362449dc963fSmrg path ? (*path ? path : "EMPTY!") : "NULL!")); 362549dc963fSmrg if ((!path) || (!*path)) 362649dc963fSmrg return 0; 36274b0ead49Smrg 362849dc963fSmrg if ((stat (path, &st) >= 0) 362949dc963fSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 363049dc963fSmrg return 1; 363149dc963fSmrg else 363249dc963fSmrg return 0; 363349dc963fSmrg} 36344b0ead49Smrg 363549dc963fSmrgint 363649dc963fSmrgmake_executable (const char *path) 363749dc963fSmrg{ 363849dc963fSmrg int rval = 0; 363949dc963fSmrg struct stat st; 36404b0ead49Smrg 364149dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", 364249dc963fSmrg path ? (*path ? path : "EMPTY!") : "NULL!")); 364349dc963fSmrg if ((!path) || (!*path)) 364449dc963fSmrg return 0; 36454b0ead49Smrg 364649dc963fSmrg if (stat (path, &st) >= 0) 364749dc963fSmrg { 364849dc963fSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 364949dc963fSmrg } 365049dc963fSmrg return rval; 365149dc963fSmrg} 36524b0ead49Smrg 365349dc963fSmrg/* Searches for the full path of the wrapper. Returns 365449dc963fSmrg newly allocated full path name if found, NULL otherwise 365549dc963fSmrg Does not chase symlinks, even on platforms that support them. 365649dc963fSmrg*/ 365749dc963fSmrgchar * 365849dc963fSmrgfind_executable (const char *wrapper) 365949dc963fSmrg{ 366049dc963fSmrg int has_slash = 0; 366149dc963fSmrg const char *p; 366249dc963fSmrg const char *p_next; 366349dc963fSmrg /* static buffer for getcwd */ 366449dc963fSmrg char tmp[LT_PATHMAX + 1]; 366549dc963fSmrg int tmp_len; 366649dc963fSmrg char *concat_name; 36674b0ead49Smrg 366849dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", 366949dc963fSmrg wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 36704b0ead49Smrg 367149dc963fSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 367249dc963fSmrg return NULL; 36734b0ead49Smrg 367449dc963fSmrg /* Absolute path? */ 367549dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 367649dc963fSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 367749dc963fSmrg { 367849dc963fSmrg concat_name = xstrdup (wrapper); 367949dc963fSmrg if (check_executable (concat_name)) 368049dc963fSmrg return concat_name; 368149dc963fSmrg XFREE (concat_name); 368249dc963fSmrg } 368349dc963fSmrg else 368449dc963fSmrg { 368549dc963fSmrg#endif 368649dc963fSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 368749dc963fSmrg { 368849dc963fSmrg concat_name = xstrdup (wrapper); 368949dc963fSmrg if (check_executable (concat_name)) 369049dc963fSmrg return concat_name; 369149dc963fSmrg XFREE (concat_name); 369249dc963fSmrg } 369349dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 369449dc963fSmrg } 369549dc963fSmrg#endif 36964b0ead49Smrg 369749dc963fSmrg for (p = wrapper; *p; p++) 369849dc963fSmrg if (*p == '/') 369949dc963fSmrg { 370049dc963fSmrg has_slash = 1; 370149dc963fSmrg break; 370249dc963fSmrg } 370349dc963fSmrg if (!has_slash) 370449dc963fSmrg { 370549dc963fSmrg /* no slashes; search PATH */ 370649dc963fSmrg const char *path = getenv ("PATH"); 370749dc963fSmrg if (path != NULL) 370849dc963fSmrg { 370949dc963fSmrg for (p = path; *p; p = p_next) 371049dc963fSmrg { 371149dc963fSmrg const char *q; 371249dc963fSmrg size_t p_len; 371349dc963fSmrg for (q = p; *q; q++) 371449dc963fSmrg if (IS_PATH_SEPARATOR (*q)) 371549dc963fSmrg break; 371649dc963fSmrg p_len = q - p; 371749dc963fSmrg p_next = (*q == '\0' ? q : q + 1); 371849dc963fSmrg if (p_len == 0) 371949dc963fSmrg { 372049dc963fSmrg /* empty path: current directory */ 372149dc963fSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 372249dc963fSmrg lt_fatal ("getcwd failed"); 372349dc963fSmrg tmp_len = strlen (tmp); 372449dc963fSmrg concat_name = 372549dc963fSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 372649dc963fSmrg memcpy (concat_name, tmp, tmp_len); 372749dc963fSmrg concat_name[tmp_len] = '/'; 372849dc963fSmrg strcpy (concat_name + tmp_len + 1, wrapper); 372949dc963fSmrg } 373049dc963fSmrg else 373149dc963fSmrg { 373249dc963fSmrg concat_name = 373349dc963fSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 373449dc963fSmrg memcpy (concat_name, p, p_len); 373549dc963fSmrg concat_name[p_len] = '/'; 373649dc963fSmrg strcpy (concat_name + p_len + 1, wrapper); 373749dc963fSmrg } 373849dc963fSmrg if (check_executable (concat_name)) 373949dc963fSmrg return concat_name; 374049dc963fSmrg XFREE (concat_name); 374149dc963fSmrg } 374249dc963fSmrg } 374349dc963fSmrg /* not found in PATH; assume curdir */ 374449dc963fSmrg } 374549dc963fSmrg /* Relative path | not found in path: prepend cwd */ 374649dc963fSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 374749dc963fSmrg lt_fatal ("getcwd failed"); 374849dc963fSmrg tmp_len = strlen (tmp); 374949dc963fSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 375049dc963fSmrg memcpy (concat_name, tmp, tmp_len); 375149dc963fSmrg concat_name[tmp_len] = '/'; 375249dc963fSmrg strcpy (concat_name + tmp_len + 1, wrapper); 37534b0ead49Smrg 375449dc963fSmrg if (check_executable (concat_name)) 375549dc963fSmrg return concat_name; 375649dc963fSmrg XFREE (concat_name); 375749dc963fSmrg return NULL; 375849dc963fSmrg} 37594b0ead49Smrg 376049dc963fSmrgchar * 376149dc963fSmrgchase_symlinks (const char *pathspec) 376249dc963fSmrg{ 376349dc963fSmrg#ifndef S_ISLNK 376449dc963fSmrg return xstrdup (pathspec); 376549dc963fSmrg#else 376649dc963fSmrg char buf[LT_PATHMAX]; 376749dc963fSmrg struct stat s; 376849dc963fSmrg char *tmp_pathspec = xstrdup (pathspec); 376949dc963fSmrg char *p; 377049dc963fSmrg int has_symlinks = 0; 377149dc963fSmrg while (strlen (tmp_pathspec) && !has_symlinks) 377249dc963fSmrg { 377349dc963fSmrg LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", 377449dc963fSmrg tmp_pathspec)); 377549dc963fSmrg if (lstat (tmp_pathspec, &s) == 0) 377649dc963fSmrg { 377749dc963fSmrg if (S_ISLNK (s.st_mode) != 0) 377849dc963fSmrg { 377949dc963fSmrg has_symlinks = 1; 378049dc963fSmrg break; 378149dc963fSmrg } 37824b0ead49Smrg 378349dc963fSmrg /* search backwards for last DIR_SEPARATOR */ 378449dc963fSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 378549dc963fSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 378649dc963fSmrg p--; 378749dc963fSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 378849dc963fSmrg { 378949dc963fSmrg /* no more DIR_SEPARATORS left */ 379049dc963fSmrg break; 379149dc963fSmrg } 379249dc963fSmrg *p = '\0'; 379349dc963fSmrg } 379449dc963fSmrg else 379549dc963fSmrg { 379649dc963fSmrg char *errstr = strerror (errno); 379749dc963fSmrg lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); 379849dc963fSmrg } 379949dc963fSmrg } 380049dc963fSmrg XFREE (tmp_pathspec); 38014b0ead49Smrg 380249dc963fSmrg if (!has_symlinks) 380349dc963fSmrg { 380449dc963fSmrg return xstrdup (pathspec); 380549dc963fSmrg } 38064b0ead49Smrg 380749dc963fSmrg tmp_pathspec = realpath (pathspec, buf); 380849dc963fSmrg if (tmp_pathspec == 0) 380949dc963fSmrg { 381049dc963fSmrg lt_fatal ("Could not follow symlinks for %s", pathspec); 381149dc963fSmrg } 381249dc963fSmrg return xstrdup (tmp_pathspec); 381349dc963fSmrg#endif 381449dc963fSmrg} 38154b0ead49Smrg 381649dc963fSmrgchar * 381749dc963fSmrgstrendzap (char *str, const char *pat) 381849dc963fSmrg{ 381949dc963fSmrg size_t len, patlen; 38204b0ead49Smrg 382149dc963fSmrg assert (str != NULL); 382249dc963fSmrg assert (pat != NULL); 38234b0ead49Smrg 382449dc963fSmrg len = strlen (str); 382549dc963fSmrg patlen = strlen (pat); 38264b0ead49Smrg 382749dc963fSmrg if (patlen <= len) 382849dc963fSmrg { 382949dc963fSmrg str += len - patlen; 383049dc963fSmrg if (strcmp (str, pat) == 0) 383149dc963fSmrg *str = '\0'; 383249dc963fSmrg } 383349dc963fSmrg return str; 383449dc963fSmrg} 38354b0ead49Smrg 383649dc963fSmrgstatic void 383749dc963fSmrglt_error_core (int exit_status, const char *mode, 383849dc963fSmrg const char *message, va_list ap) 383949dc963fSmrg{ 384049dc963fSmrg fprintf (stderr, "%s: %s: ", program_name, mode); 384149dc963fSmrg vfprintf (stderr, message, ap); 384249dc963fSmrg fprintf (stderr, ".\n"); 38434b0ead49Smrg 384449dc963fSmrg if (exit_status >= 0) 384549dc963fSmrg exit (exit_status); 384649dc963fSmrg} 38474b0ead49Smrg 384849dc963fSmrgvoid 384949dc963fSmrglt_fatal (const char *message, ...) 385049dc963fSmrg{ 385149dc963fSmrg va_list ap; 385249dc963fSmrg va_start (ap, message); 385349dc963fSmrg lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 385449dc963fSmrg va_end (ap); 385549dc963fSmrg} 38564b0ead49Smrg 385749dc963fSmrgvoid 385849dc963fSmrglt_setenv (const char *name, const char *value) 385949dc963fSmrg{ 386049dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", 386149dc963fSmrg (name ? name : "<NULL>"), 386249dc963fSmrg (value ? value : "<NULL>"))); 386349dc963fSmrg { 386449dc963fSmrg#ifdef HAVE_SETENV 386549dc963fSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 386649dc963fSmrg char *str = xstrdup (value); 386749dc963fSmrg setenv (name, str, 1); 386849dc963fSmrg#else 386949dc963fSmrg int len = strlen (name) + 1 + strlen (value) + 1; 387049dc963fSmrg char *str = XMALLOC (char, len); 387149dc963fSmrg sprintf (str, "%s=%s", name, value); 387249dc963fSmrg if (putenv (str) != EXIT_SUCCESS) 387349dc963fSmrg { 387449dc963fSmrg XFREE (str); 387549dc963fSmrg } 387649dc963fSmrg#endif 387749dc963fSmrg } 387849dc963fSmrg} 38794b0ead49Smrg 388049dc963fSmrgchar * 388149dc963fSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 388249dc963fSmrg{ 388349dc963fSmrg char *new_value; 388449dc963fSmrg if (orig_value && *orig_value) 388549dc963fSmrg { 388649dc963fSmrg int orig_value_len = strlen (orig_value); 388749dc963fSmrg int add_len = strlen (add); 388849dc963fSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 388949dc963fSmrg if (to_end) 389049dc963fSmrg { 389149dc963fSmrg strcpy (new_value, orig_value); 389249dc963fSmrg strcpy (new_value + orig_value_len, add); 389349dc963fSmrg } 389449dc963fSmrg else 389549dc963fSmrg { 389649dc963fSmrg strcpy (new_value, add); 389749dc963fSmrg strcpy (new_value + add_len, orig_value); 389849dc963fSmrg } 389949dc963fSmrg } 390049dc963fSmrg else 390149dc963fSmrg { 390249dc963fSmrg new_value = xstrdup (add); 390349dc963fSmrg } 390449dc963fSmrg return new_value; 390549dc963fSmrg} 39064b0ead49Smrg 390749dc963fSmrgint 390849dc963fSmrglt_split_name_value (const char *arg, char** name, char** value) 390949dc963fSmrg{ 391049dc963fSmrg const char *p; 391149dc963fSmrg int len; 391249dc963fSmrg if (!arg || !*arg) 391349dc963fSmrg return 1; 39144b0ead49Smrg 391549dc963fSmrg p = strchr (arg, (int)'='); 39164b0ead49Smrg 391749dc963fSmrg if (!p) 391849dc963fSmrg return 1; 39194b0ead49Smrg 392049dc963fSmrg *value = xstrdup (++p); 39214b0ead49Smrg 392249dc963fSmrg len = strlen (arg) - strlen (*value); 392349dc963fSmrg *name = XMALLOC (char, len); 392449dc963fSmrg strncpy (*name, arg, len-1); 392549dc963fSmrg (*name)[len - 1] = '\0'; 39264b0ead49Smrg 392749dc963fSmrg return 0; 392849dc963fSmrg} 39294b0ead49Smrg 393049dc963fSmrgvoid 393149dc963fSmrglt_opt_process_env_set (const char *arg) 393249dc963fSmrg{ 393349dc963fSmrg char *name = NULL; 393449dc963fSmrg char *value = NULL; 39354b0ead49Smrg 393649dc963fSmrg if (lt_split_name_value (arg, &name, &value) != 0) 393749dc963fSmrg { 393849dc963fSmrg XFREE (name); 393949dc963fSmrg XFREE (value); 394049dc963fSmrg lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); 394149dc963fSmrg } 39424b0ead49Smrg 394349dc963fSmrg lt_setenv (name, value); 394449dc963fSmrg XFREE (name); 394549dc963fSmrg XFREE (value); 394649dc963fSmrg} 39474b0ead49Smrg 394849dc963fSmrgvoid 394949dc963fSmrglt_opt_process_env_prepend (const char *arg) 395049dc963fSmrg{ 395149dc963fSmrg char *name = NULL; 395249dc963fSmrg char *value = NULL; 395349dc963fSmrg char *new_value = NULL; 39544b0ead49Smrg 395549dc963fSmrg if (lt_split_name_value (arg, &name, &value) != 0) 395649dc963fSmrg { 395749dc963fSmrg XFREE (name); 395849dc963fSmrg XFREE (value); 395949dc963fSmrg lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); 396049dc963fSmrg } 39614b0ead49Smrg 396249dc963fSmrg new_value = lt_extend_str (getenv (name), value, 0); 396349dc963fSmrg lt_setenv (name, new_value); 396449dc963fSmrg XFREE (new_value); 396549dc963fSmrg XFREE (name); 396649dc963fSmrg XFREE (value); 396749dc963fSmrg} 39684b0ead49Smrg 396949dc963fSmrgvoid 397049dc963fSmrglt_opt_process_env_append (const char *arg) 397149dc963fSmrg{ 397249dc963fSmrg char *name = NULL; 397349dc963fSmrg char *value = NULL; 397449dc963fSmrg char *new_value = NULL; 39754b0ead49Smrg 397649dc963fSmrg if (lt_split_name_value (arg, &name, &value) != 0) 397749dc963fSmrg { 397849dc963fSmrg XFREE (name); 397949dc963fSmrg XFREE (value); 398049dc963fSmrg lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); 398149dc963fSmrg } 39824b0ead49Smrg 398349dc963fSmrg new_value = lt_extend_str (getenv (name), value, 1); 398449dc963fSmrg lt_setenv (name, new_value); 398549dc963fSmrg XFREE (new_value); 398649dc963fSmrg XFREE (name); 398749dc963fSmrg XFREE (value); 398849dc963fSmrg} 39894b0ead49Smrg 399049dc963fSmrgvoid 399149dc963fSmrglt_update_exe_path (const char *name, const char *value) 399249dc963fSmrg{ 399349dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 399449dc963fSmrg (name ? name : "<NULL>"), 399549dc963fSmrg (value ? value : "<NULL>"))); 39964b0ead49Smrg 399749dc963fSmrg if (name && *name && value && *value) 399849dc963fSmrg { 399949dc963fSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 400049dc963fSmrg /* some systems can't cope with a ':'-terminated path #' */ 400149dc963fSmrg int len = strlen (new_value); 400249dc963fSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 400349dc963fSmrg { 400449dc963fSmrg new_value[len-1] = '\0'; 400549dc963fSmrg } 400649dc963fSmrg lt_setenv (name, new_value); 400749dc963fSmrg XFREE (new_value); 400849dc963fSmrg } 400949dc963fSmrg} 40104b0ead49Smrg 401149dc963fSmrgvoid 401249dc963fSmrglt_update_lib_path (const char *name, const char *value) 401349dc963fSmrg{ 401449dc963fSmrg LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 401549dc963fSmrg (name ? name : "<NULL>"), 401649dc963fSmrg (value ? value : "<NULL>"))); 40174b0ead49Smrg 401849dc963fSmrg if (name && *name && value && *value) 401949dc963fSmrg { 402049dc963fSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 402149dc963fSmrg lt_setenv (name, new_value); 402249dc963fSmrg XFREE (new_value); 402349dc963fSmrg } 402449dc963fSmrg} 40254b0ead49Smrg 40264b0ead49Smrg 402749dc963fSmrgEOF 402849dc963fSmrg} 402949dc963fSmrg# end: func_emit_cwrapperexe_src 40304b0ead49Smrg 403149dc963fSmrg# func_mode_link arg... 403249dc963fSmrgfunc_mode_link () 403349dc963fSmrg{ 403449dc963fSmrg $opt_debug 403549dc963fSmrg case $host in 403649dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 403749dc963fSmrg # It is impossible to link a dll without this setting, and 403849dc963fSmrg # we shouldn't force the makefile maintainer to figure out 403949dc963fSmrg # which system we are compiling for in order to pass an extra 404049dc963fSmrg # flag for every libtool invocation. 404149dc963fSmrg # allow_undefined=no 40424b0ead49Smrg 404349dc963fSmrg # FIXME: Unfortunately, there are problems with the above when trying 404449dc963fSmrg # to make a dll which has undefined symbols, in which case not 404549dc963fSmrg # even a static library is built. For now, we need to specify 404649dc963fSmrg # -no-undefined on the libtool link line when we can be certain 404749dc963fSmrg # that all symbols are satisfied, otherwise we get a static library. 404849dc963fSmrg allow_undefined=yes 404949dc963fSmrg ;; 405049dc963fSmrg *) 405149dc963fSmrg allow_undefined=yes 405249dc963fSmrg ;; 405349dc963fSmrg esac 405449dc963fSmrg libtool_args=$nonopt 405549dc963fSmrg base_compile="$nonopt $@" 405649dc963fSmrg compile_command=$nonopt 405749dc963fSmrg finalize_command=$nonopt 40584b0ead49Smrg 405949dc963fSmrg compile_rpath= 406049dc963fSmrg finalize_rpath= 406149dc963fSmrg compile_shlibpath= 406249dc963fSmrg finalize_shlibpath= 406349dc963fSmrg convenience= 406449dc963fSmrg old_convenience= 406549dc963fSmrg deplibs= 406649dc963fSmrg old_deplibs= 406749dc963fSmrg compiler_flags= 406849dc963fSmrg linker_flags= 406949dc963fSmrg dllsearchpath= 407049dc963fSmrg lib_search_path=`pwd` 407149dc963fSmrg inst_prefix_dir= 407249dc963fSmrg new_inherited_linker_flags= 40734b0ead49Smrg 407449dc963fSmrg avoid_version=no 407549dc963fSmrg dlfiles= 407649dc963fSmrg dlprefiles= 407749dc963fSmrg dlself=no 407849dc963fSmrg export_dynamic=no 407949dc963fSmrg export_symbols= 408049dc963fSmrg export_symbols_regex= 408149dc963fSmrg generated= 408249dc963fSmrg libobjs= 408349dc963fSmrg ltlibs= 408449dc963fSmrg module=no 408549dc963fSmrg no_install=no 408649dc963fSmrg objs= 408749dc963fSmrg non_pic_objects= 408849dc963fSmrg precious_files_regex= 408949dc963fSmrg prefer_static_libs=no 409049dc963fSmrg preload=no 409149dc963fSmrg prev= 409249dc963fSmrg prevarg= 409349dc963fSmrg release= 409449dc963fSmrg rpath= 409549dc963fSmrg xrpath= 409649dc963fSmrg perm_rpath= 409749dc963fSmrg temp_rpath= 409849dc963fSmrg thread_safe=no 409949dc963fSmrg vinfo= 410049dc963fSmrg vinfo_number=no 410149dc963fSmrg weak_libs= 410249dc963fSmrg single_module="${wl}-single_module" 410349dc963fSmrg func_infer_tag $base_compile 410449dc963fSmrg 410549dc963fSmrg # We need to know -static, to get the right output filenames. 410649dc963fSmrg for arg 410749dc963fSmrg do 410849dc963fSmrg case $arg in 410949dc963fSmrg -shared) 411049dc963fSmrg test "$build_libtool_libs" != yes && \ 411149dc963fSmrg func_fatal_configuration "can not build a shared library" 411249dc963fSmrg build_old_libs=no 411349dc963fSmrg break 411449dc963fSmrg ;; 411549dc963fSmrg -all-static | -static | -static-libtool-libs) 411649dc963fSmrg case $arg in 411749dc963fSmrg -all-static) 411849dc963fSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 411949dc963fSmrg func_warning "complete static linking is impossible in this configuration" 412049dc963fSmrg fi 412149dc963fSmrg if test -n "$link_static_flag"; then 412249dc963fSmrg dlopen_self=$dlopen_self_static 412349dc963fSmrg fi 412449dc963fSmrg prefer_static_libs=yes 412549dc963fSmrg ;; 412649dc963fSmrg -static) 412749dc963fSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 412849dc963fSmrg dlopen_self=$dlopen_self_static 412949dc963fSmrg fi 413049dc963fSmrg prefer_static_libs=built 413149dc963fSmrg ;; 413249dc963fSmrg -static-libtool-libs) 413349dc963fSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 413449dc963fSmrg dlopen_self=$dlopen_self_static 41354b0ead49Smrg fi 413649dc963fSmrg prefer_static_libs=yes 413749dc963fSmrg ;; 413849dc963fSmrg esac 413949dc963fSmrg build_libtool_libs=no 414049dc963fSmrg build_old_libs=yes 414149dc963fSmrg break 414249dc963fSmrg ;; 414349dc963fSmrg esac 414449dc963fSmrg done 41454b0ead49Smrg 414649dc963fSmrg # See if our shared archives depend on static archives. 414749dc963fSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 41484b0ead49Smrg 414949dc963fSmrg # Go through the arguments, transforming them on the way. 415049dc963fSmrg while test "$#" -gt 0; do 415149dc963fSmrg arg="$1" 415249dc963fSmrg shift 415349dc963fSmrg func_quote_for_eval "$arg" 415449dc963fSmrg qarg=$func_quote_for_eval_unquoted_result 415549dc963fSmrg func_append libtool_args " $func_quote_for_eval_result" 41564b0ead49Smrg 415749dc963fSmrg # If the previous option needs an argument, assign it. 415849dc963fSmrg if test -n "$prev"; then 415949dc963fSmrg case $prev in 416049dc963fSmrg output) 416149dc963fSmrg func_append compile_command " @OUTPUT@" 416249dc963fSmrg func_append finalize_command " @OUTPUT@" 416349dc963fSmrg ;; 416449dc963fSmrg esac 41654b0ead49Smrg 416649dc963fSmrg case $prev in 416749dc963fSmrg dlfiles|dlprefiles) 416849dc963fSmrg if test "$preload" = no; then 416949dc963fSmrg # Add the symbol object into the linking commands. 417049dc963fSmrg func_append compile_command " @SYMFILE@" 417149dc963fSmrg func_append finalize_command " @SYMFILE@" 417249dc963fSmrg preload=yes 417349dc963fSmrg fi 417449dc963fSmrg case $arg in 417549dc963fSmrg *.la | *.lo) ;; # We handle these cases below. 417649dc963fSmrg force) 417749dc963fSmrg if test "$dlself" = no; then 417849dc963fSmrg dlself=needless 417949dc963fSmrg export_dynamic=yes 418049dc963fSmrg fi 418149dc963fSmrg prev= 418249dc963fSmrg continue 418349dc963fSmrg ;; 418449dc963fSmrg self) 418549dc963fSmrg if test "$prev" = dlprefiles; then 418649dc963fSmrg dlself=yes 418749dc963fSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 418849dc963fSmrg dlself=yes 41894b0ead49Smrg else 419049dc963fSmrg dlself=needless 419149dc963fSmrg export_dynamic=yes 41924b0ead49Smrg fi 419349dc963fSmrg prev= 419449dc963fSmrg continue 419549dc963fSmrg ;; 419649dc963fSmrg *) 419749dc963fSmrg if test "$prev" = dlfiles; then 419849dc963fSmrg dlfiles="$dlfiles $arg" 41994b0ead49Smrg else 420049dc963fSmrg dlprefiles="$dlprefiles $arg" 42014b0ead49Smrg fi 420249dc963fSmrg prev= 420349dc963fSmrg continue 420449dc963fSmrg ;; 420549dc963fSmrg esac 420649dc963fSmrg ;; 420749dc963fSmrg expsyms) 420849dc963fSmrg export_symbols="$arg" 420949dc963fSmrg test -f "$arg" \ 421049dc963fSmrg || func_fatal_error "symbol file \`$arg' does not exist" 421149dc963fSmrg prev= 421249dc963fSmrg continue 421349dc963fSmrg ;; 421449dc963fSmrg expsyms_regex) 421549dc963fSmrg export_symbols_regex="$arg" 421649dc963fSmrg prev= 421749dc963fSmrg continue 421849dc963fSmrg ;; 421949dc963fSmrg framework) 42204b0ead49Smrg case $host in 422149dc963fSmrg *-*-darwin*) 422249dc963fSmrg case "$deplibs " in 422349dc963fSmrg *" $qarg.ltframework "*) ;; 422449dc963fSmrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 422549dc963fSmrg ;; 422649dc963fSmrg esac 422749dc963fSmrg ;; 42284b0ead49Smrg esac 422949dc963fSmrg prev= 423049dc963fSmrg continue 42314b0ead49Smrg ;; 423249dc963fSmrg inst_prefix) 423349dc963fSmrg inst_prefix_dir="$arg" 423449dc963fSmrg prev= 423549dc963fSmrg continue 42364b0ead49Smrg ;; 423749dc963fSmrg objectlist) 423849dc963fSmrg if test -f "$arg"; then 423949dc963fSmrg save_arg=$arg 424049dc963fSmrg moreargs= 424149dc963fSmrg for fil in `cat "$save_arg"` 424249dc963fSmrg do 424349dc963fSmrg# moreargs="$moreargs $fil" 424449dc963fSmrg arg=$fil 424549dc963fSmrg # A libtool-controlled object. 42464b0ead49Smrg 424749dc963fSmrg # Check to see that this really is a libtool object. 424849dc963fSmrg if func_lalib_unsafe_p "$arg"; then 424949dc963fSmrg pic_object= 425049dc963fSmrg non_pic_object= 42514b0ead49Smrg 425249dc963fSmrg # Read the .lo file 425349dc963fSmrg func_source "$arg" 42544b0ead49Smrg 425549dc963fSmrg if test -z "$pic_object" || 425649dc963fSmrg test -z "$non_pic_object" || 425749dc963fSmrg test "$pic_object" = none && 425849dc963fSmrg test "$non_pic_object" = none; then 425949dc963fSmrg func_fatal_error "cannot find name of object for \`$arg'" 426049dc963fSmrg fi 42614b0ead49Smrg 426249dc963fSmrg # Extract subdirectory from the argument. 426349dc963fSmrg func_dirname "$arg" "/" "" 426449dc963fSmrg xdir="$func_dirname_result" 42654b0ead49Smrg 426649dc963fSmrg if test "$pic_object" != none; then 426749dc963fSmrg # Prepend the subdirectory the object is found in. 426849dc963fSmrg pic_object="$xdir$pic_object" 42694b0ead49Smrg 427049dc963fSmrg if test "$prev" = dlfiles; then 427149dc963fSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 427249dc963fSmrg dlfiles="$dlfiles $pic_object" 427349dc963fSmrg prev= 427449dc963fSmrg continue 427549dc963fSmrg else 427649dc963fSmrg # If libtool objects are unsupported, then we need to preload. 427749dc963fSmrg prev=dlprefiles 427849dc963fSmrg fi 427949dc963fSmrg fi 42804b0ead49Smrg 428149dc963fSmrg # CHECK ME: I think I busted this. -Ossama 428249dc963fSmrg if test "$prev" = dlprefiles; then 428349dc963fSmrg # Preload the old-style object. 428449dc963fSmrg dlprefiles="$dlprefiles $pic_object" 428549dc963fSmrg prev= 428649dc963fSmrg fi 42874b0ead49Smrg 428849dc963fSmrg # A PIC object. 428949dc963fSmrg func_append libobjs " $pic_object" 429049dc963fSmrg arg="$pic_object" 429149dc963fSmrg fi 42924b0ead49Smrg 429349dc963fSmrg # Non-PIC object. 429449dc963fSmrg if test "$non_pic_object" != none; then 429549dc963fSmrg # Prepend the subdirectory the object is found in. 429649dc963fSmrg non_pic_object="$xdir$non_pic_object" 42974b0ead49Smrg 429849dc963fSmrg # A standard non-PIC object 429949dc963fSmrg func_append non_pic_objects " $non_pic_object" 430049dc963fSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 430149dc963fSmrg arg="$non_pic_object" 430249dc963fSmrg fi 430349dc963fSmrg else 430449dc963fSmrg # If the PIC object exists, use it instead. 430549dc963fSmrg # $xdir was prepended to $pic_object above. 430649dc963fSmrg non_pic_object="$pic_object" 430749dc963fSmrg func_append non_pic_objects " $non_pic_object" 430849dc963fSmrg fi 430949dc963fSmrg else 431049dc963fSmrg # Only an error if not doing a dry-run. 431149dc963fSmrg if $opt_dry_run; then 431249dc963fSmrg # Extract subdirectory from the argument. 431349dc963fSmrg func_dirname "$arg" "/" "" 431449dc963fSmrg xdir="$func_dirname_result" 431549dc963fSmrg 431649dc963fSmrg func_lo2o "$arg" 431749dc963fSmrg pic_object=$xdir$objdir/$func_lo2o_result 431849dc963fSmrg non_pic_object=$xdir$func_lo2o_result 431949dc963fSmrg func_append libobjs " $pic_object" 432049dc963fSmrg func_append non_pic_objects " $non_pic_object" 432149dc963fSmrg else 432249dc963fSmrg func_fatal_error "\`$arg' is not a valid libtool object" 432349dc963fSmrg fi 432449dc963fSmrg fi 432549dc963fSmrg done 43264b0ead49Smrg else 432749dc963fSmrg func_fatal_error "link input file \`$arg' does not exist" 43284b0ead49Smrg fi 432949dc963fSmrg arg=$save_arg 433049dc963fSmrg prev= 433149dc963fSmrg continue 433249dc963fSmrg ;; 433349dc963fSmrg precious_regex) 433449dc963fSmrg precious_files_regex="$arg" 433549dc963fSmrg prev= 433649dc963fSmrg continue 433749dc963fSmrg ;; 433849dc963fSmrg release) 433949dc963fSmrg release="-$arg" 434049dc963fSmrg prev= 434149dc963fSmrg continue 434249dc963fSmrg ;; 434349dc963fSmrg rpath | xrpath) 434449dc963fSmrg # We need an absolute path. 434549dc963fSmrg case $arg in 434649dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 434749dc963fSmrg *) 434849dc963fSmrg func_fatal_error "only absolute run-paths are allowed" 434949dc963fSmrg ;; 435049dc963fSmrg esac 435149dc963fSmrg if test "$prev" = rpath; then 435249dc963fSmrg case "$rpath " in 435349dc963fSmrg *" $arg "*) ;; 435449dc963fSmrg *) rpath="$rpath $arg" ;; 435549dc963fSmrg esac 43564b0ead49Smrg else 435749dc963fSmrg case "$xrpath " in 435849dc963fSmrg *" $arg "*) ;; 435949dc963fSmrg *) xrpath="$xrpath $arg" ;; 436049dc963fSmrg esac 43614b0ead49Smrg fi 436249dc963fSmrg prev= 436349dc963fSmrg continue 436449dc963fSmrg ;; 436549dc963fSmrg shrext) 436649dc963fSmrg shrext_cmds="$arg" 436749dc963fSmrg prev= 436849dc963fSmrg continue 436949dc963fSmrg ;; 437049dc963fSmrg weak) 437149dc963fSmrg weak_libs="$weak_libs $arg" 437249dc963fSmrg prev= 437349dc963fSmrg continue 437449dc963fSmrg ;; 437549dc963fSmrg xcclinker) 437649dc963fSmrg linker_flags="$linker_flags $qarg" 437749dc963fSmrg compiler_flags="$compiler_flags $qarg" 437849dc963fSmrg prev= 437949dc963fSmrg func_append compile_command " $qarg" 438049dc963fSmrg func_append finalize_command " $qarg" 438149dc963fSmrg continue 438249dc963fSmrg ;; 438349dc963fSmrg xcompiler) 438449dc963fSmrg compiler_flags="$compiler_flags $qarg" 438549dc963fSmrg prev= 438649dc963fSmrg func_append compile_command " $qarg" 438749dc963fSmrg func_append finalize_command " $qarg" 438849dc963fSmrg continue 438949dc963fSmrg ;; 439049dc963fSmrg xlinker) 439149dc963fSmrg linker_flags="$linker_flags $qarg" 439249dc963fSmrg compiler_flags="$compiler_flags $wl$qarg" 439349dc963fSmrg prev= 439449dc963fSmrg func_append compile_command " $wl$qarg" 439549dc963fSmrg func_append finalize_command " $wl$qarg" 439649dc963fSmrg continue 439749dc963fSmrg ;; 439849dc963fSmrg *) 439949dc963fSmrg eval "$prev=\"\$arg\"" 440049dc963fSmrg prev= 440149dc963fSmrg continue 440249dc963fSmrg ;; 44034b0ead49Smrg esac 440449dc963fSmrg fi # test -n "$prev" 44054b0ead49Smrg 440649dc963fSmrg prevarg="$arg" 44074b0ead49Smrg 440849dc963fSmrg case $arg in 440949dc963fSmrg -all-static) 441049dc963fSmrg if test -n "$link_static_flag"; then 441149dc963fSmrg # See comment for -static flag below, for more details. 441249dc963fSmrg func_append compile_command " $link_static_flag" 441349dc963fSmrg func_append finalize_command " $link_static_flag" 441449dc963fSmrg fi 441549dc963fSmrg continue 441649dc963fSmrg ;; 44174b0ead49Smrg 441849dc963fSmrg -allow-undefined) 441949dc963fSmrg # FIXME: remove this flag sometime in the future. 442049dc963fSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 442149dc963fSmrg ;; 44224b0ead49Smrg 442349dc963fSmrg -avoid-version) 442449dc963fSmrg avoid_version=yes 442549dc963fSmrg continue 442649dc963fSmrg ;; 44274b0ead49Smrg 442849dc963fSmrg -dlopen) 442949dc963fSmrg prev=dlfiles 443049dc963fSmrg continue 443149dc963fSmrg ;; 44324b0ead49Smrg 443349dc963fSmrg -dlpreopen) 443449dc963fSmrg prev=dlprefiles 443549dc963fSmrg continue 443649dc963fSmrg ;; 44374b0ead49Smrg 443849dc963fSmrg -export-dynamic) 443949dc963fSmrg export_dynamic=yes 444049dc963fSmrg continue 444149dc963fSmrg ;; 44424b0ead49Smrg 444349dc963fSmrg -export-symbols | -export-symbols-regex) 444449dc963fSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 444549dc963fSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 444649dc963fSmrg fi 444749dc963fSmrg if test "X$arg" = "X-export-symbols"; then 444849dc963fSmrg prev=expsyms 444949dc963fSmrg else 445049dc963fSmrg prev=expsyms_regex 445149dc963fSmrg fi 445249dc963fSmrg continue 445349dc963fSmrg ;; 44544b0ead49Smrg 445549dc963fSmrg -framework) 445649dc963fSmrg prev=framework 445749dc963fSmrg continue 445849dc963fSmrg ;; 44594b0ead49Smrg 446049dc963fSmrg -inst-prefix-dir) 446149dc963fSmrg prev=inst_prefix 446249dc963fSmrg continue 446349dc963fSmrg ;; 44644b0ead49Smrg 446549dc963fSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 446649dc963fSmrg # so, if we see these flags be careful not to treat them like -L 446749dc963fSmrg -L[A-Z][A-Z]*:*) 446849dc963fSmrg case $with_gcc/$host in 446949dc963fSmrg no/*-*-irix* | /*-*-irix*) 447049dc963fSmrg func_append compile_command " $arg" 447149dc963fSmrg func_append finalize_command " $arg" 447249dc963fSmrg ;; 447349dc963fSmrg esac 447449dc963fSmrg continue 447549dc963fSmrg ;; 44764b0ead49Smrg 447749dc963fSmrg -L*) 447849dc963fSmrg func_stripname '-L' '' "$arg" 447949dc963fSmrg dir=$func_stripname_result 448049dc963fSmrg if test -z "$dir"; then 448149dc963fSmrg if test "$#" -gt 0; then 448249dc963fSmrg func_fatal_error "require no space between \`-L' and \`$1'" 448349dc963fSmrg else 448449dc963fSmrg func_fatal_error "need path for \`-L' option" 448549dc963fSmrg fi 448649dc963fSmrg fi 448749dc963fSmrg # We need an absolute path. 448849dc963fSmrg case $dir in 448949dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 449049dc963fSmrg *) 449149dc963fSmrg absdir=`cd "$dir" && pwd` 449249dc963fSmrg test -z "$absdir" && \ 449349dc963fSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 449449dc963fSmrg dir="$absdir" 449549dc963fSmrg ;; 449649dc963fSmrg esac 449749dc963fSmrg case "$deplibs " in 449849dc963fSmrg *" -L$dir "*) ;; 449949dc963fSmrg *) 450049dc963fSmrg deplibs="$deplibs -L$dir" 450149dc963fSmrg lib_search_path="$lib_search_path $dir" 450249dc963fSmrg ;; 450349dc963fSmrg esac 450449dc963fSmrg case $host in 450549dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 450649dc963fSmrg testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` 450749dc963fSmrg case :$dllsearchpath: in 450849dc963fSmrg *":$dir:"*) ;; 450949dc963fSmrg ::) dllsearchpath=$dir;; 451049dc963fSmrg *) dllsearchpath="$dllsearchpath:$dir";; 451149dc963fSmrg esac 451249dc963fSmrg case :$dllsearchpath: in 451349dc963fSmrg *":$testbindir:"*) ;; 451449dc963fSmrg ::) dllsearchpath=$testbindir;; 451549dc963fSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 451649dc963fSmrg esac 451749dc963fSmrg ;; 451849dc963fSmrg esac 451949dc963fSmrg continue 452049dc963fSmrg ;; 45214b0ead49Smrg 452249dc963fSmrg -l*) 452349dc963fSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 452449dc963fSmrg case $host in 452549dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) 452649dc963fSmrg # These systems don't actually have a C or math library (as such) 452749dc963fSmrg continue 452849dc963fSmrg ;; 452949dc963fSmrg *-*-os2*) 453049dc963fSmrg # These systems don't actually have a C library (as such) 453149dc963fSmrg test "X$arg" = "X-lc" && continue 453249dc963fSmrg ;; 453349dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 453449dc963fSmrg # Do not include libc due to us having libc/libc_r. 453549dc963fSmrg test "X$arg" = "X-lc" && continue 453649dc963fSmrg ;; 453749dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 453849dc963fSmrg # Rhapsody C and math libraries are in the System framework 453949dc963fSmrg deplibs="$deplibs System.ltframework" 454049dc963fSmrg continue 454149dc963fSmrg ;; 454249dc963fSmrg *-*-sco3.2v5* | *-*-sco5v6*) 454349dc963fSmrg # Causes problems with __ctype 454449dc963fSmrg test "X$arg" = "X-lc" && continue 454549dc963fSmrg ;; 454649dc963fSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 454749dc963fSmrg # Compiler inserts libc in the correct place for threads to work 454849dc963fSmrg test "X$arg" = "X-lc" && continue 454949dc963fSmrg ;; 455049dc963fSmrg esac 455149dc963fSmrg elif test "X$arg" = "X-lc_r"; then 455249dc963fSmrg case $host in 455349dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 455449dc963fSmrg # Do not include libc_r directly, use -pthread flag. 455549dc963fSmrg continue 455649dc963fSmrg ;; 455749dc963fSmrg esac 455849dc963fSmrg fi 455949dc963fSmrg deplibs="$deplibs $arg" 456049dc963fSmrg continue 456149dc963fSmrg ;; 45624b0ead49Smrg 456349dc963fSmrg -module) 456449dc963fSmrg module=yes 456549dc963fSmrg continue 456649dc963fSmrg ;; 45674b0ead49Smrg 456849dc963fSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 456949dc963fSmrg # classes, name mangling, and exception handling. 457049dc963fSmrg # Darwin uses the -arch flag to determine output architecture. 457149dc963fSmrg -model|-arch|-isysroot) 457249dc963fSmrg compiler_flags="$compiler_flags $arg" 457349dc963fSmrg func_append compile_command " $arg" 457449dc963fSmrg func_append finalize_command " $arg" 457549dc963fSmrg prev=xcompiler 457649dc963fSmrg continue 457749dc963fSmrg ;; 45784b0ead49Smrg 457949dc963fSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 458049dc963fSmrg compiler_flags="$compiler_flags $arg" 458149dc963fSmrg func_append compile_command " $arg" 458249dc963fSmrg func_append finalize_command " $arg" 458349dc963fSmrg case "$new_inherited_linker_flags " in 458449dc963fSmrg *" $arg "*) ;; 458549dc963fSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 458649dc963fSmrg esac 458749dc963fSmrg continue 458849dc963fSmrg ;; 45894b0ead49Smrg 459049dc963fSmrg -multi_module) 459149dc963fSmrg single_module="${wl}-multi_module" 459249dc963fSmrg continue 459349dc963fSmrg ;; 45944b0ead49Smrg 459549dc963fSmrg -no-fast-install) 459649dc963fSmrg fast_install=no 459749dc963fSmrg continue 459849dc963fSmrg ;; 45994b0ead49Smrg 460049dc963fSmrg -no-install) 460149dc963fSmrg case $host in 460249dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 460349dc963fSmrg # The PATH hackery in wrapper scripts is required on Windows 460449dc963fSmrg # and Darwin in order for the loader to find any dlls it needs. 460549dc963fSmrg func_warning "\`-no-install' is ignored for $host" 460649dc963fSmrg func_warning "assuming \`-no-fast-install' instead" 460749dc963fSmrg fast_install=no 460849dc963fSmrg ;; 460949dc963fSmrg *) no_install=yes ;; 461049dc963fSmrg esac 461149dc963fSmrg continue 461249dc963fSmrg ;; 46134b0ead49Smrg 461449dc963fSmrg -no-undefined) 461549dc963fSmrg allow_undefined=no 461649dc963fSmrg continue 461749dc963fSmrg ;; 46184b0ead49Smrg 461949dc963fSmrg -objectlist) 462049dc963fSmrg prev=objectlist 462149dc963fSmrg continue 462249dc963fSmrg ;; 46234b0ead49Smrg 462449dc963fSmrg -o) prev=output ;; 46254b0ead49Smrg 462649dc963fSmrg -precious-files-regex) 462749dc963fSmrg prev=precious_regex 462849dc963fSmrg continue 462949dc963fSmrg ;; 46304b0ead49Smrg 463149dc963fSmrg -release) 463249dc963fSmrg prev=release 463349dc963fSmrg continue 463449dc963fSmrg ;; 46354b0ead49Smrg 463649dc963fSmrg -rpath) 463749dc963fSmrg prev=rpath 463849dc963fSmrg continue 463949dc963fSmrg ;; 46404b0ead49Smrg 464149dc963fSmrg -R) 464249dc963fSmrg prev=xrpath 464349dc963fSmrg continue 464449dc963fSmrg ;; 46454b0ead49Smrg 464649dc963fSmrg -R*) 464749dc963fSmrg func_stripname '-R' '' "$arg" 464849dc963fSmrg dir=$func_stripname_result 464949dc963fSmrg # We need an absolute path. 465049dc963fSmrg case $dir in 465149dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 465249dc963fSmrg *) 465349dc963fSmrg func_fatal_error "only absolute run-paths are allowed" 465449dc963fSmrg ;; 465549dc963fSmrg esac 465649dc963fSmrg case "$xrpath " in 465749dc963fSmrg *" $dir "*) ;; 465849dc963fSmrg *) xrpath="$xrpath $dir" ;; 465949dc963fSmrg esac 466049dc963fSmrg continue 466149dc963fSmrg ;; 46624b0ead49Smrg 466349dc963fSmrg -shared) 466449dc963fSmrg # The effects of -shared are defined in a previous loop. 466549dc963fSmrg continue 466649dc963fSmrg ;; 46674b0ead49Smrg 466849dc963fSmrg -shrext) 466949dc963fSmrg prev=shrext 467049dc963fSmrg continue 467149dc963fSmrg ;; 46724b0ead49Smrg 467349dc963fSmrg -static | -static-libtool-libs) 467449dc963fSmrg # The effects of -static are defined in a previous loop. 467549dc963fSmrg # We used to do the same as -all-static on platforms that 467649dc963fSmrg # didn't have a PIC flag, but the assumption that the effects 467749dc963fSmrg # would be equivalent was wrong. It would break on at least 467849dc963fSmrg # Digital Unix and AIX. 467949dc963fSmrg continue 468049dc963fSmrg ;; 46814b0ead49Smrg 468249dc963fSmrg -thread-safe) 468349dc963fSmrg thread_safe=yes 468449dc963fSmrg continue 468549dc963fSmrg ;; 46864b0ead49Smrg 468749dc963fSmrg -version-info) 468849dc963fSmrg prev=vinfo 468949dc963fSmrg continue 469049dc963fSmrg ;; 46914b0ead49Smrg 469249dc963fSmrg -version-number) 469349dc963fSmrg prev=vinfo 469449dc963fSmrg vinfo_number=yes 469549dc963fSmrg continue 469649dc963fSmrg ;; 46974b0ead49Smrg 469849dc963fSmrg -weak) 469949dc963fSmrg prev=weak 470049dc963fSmrg continue 470149dc963fSmrg ;; 47024b0ead49Smrg 470349dc963fSmrg -Wc,*) 470449dc963fSmrg func_stripname '-Wc,' '' "$arg" 470549dc963fSmrg args=$func_stripname_result 470649dc963fSmrg arg= 470749dc963fSmrg save_ifs="$IFS"; IFS=',' 470849dc963fSmrg for flag in $args; do 470949dc963fSmrg IFS="$save_ifs" 471049dc963fSmrg func_quote_for_eval "$flag" 471149dc963fSmrg arg="$arg $wl$func_quote_for_eval_result" 471249dc963fSmrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 471349dc963fSmrg done 471449dc963fSmrg IFS="$save_ifs" 471549dc963fSmrg func_stripname ' ' '' "$arg" 471649dc963fSmrg arg=$func_stripname_result 471749dc963fSmrg ;; 47184b0ead49Smrg 471949dc963fSmrg -Wl,*) 472049dc963fSmrg func_stripname '-Wl,' '' "$arg" 472149dc963fSmrg args=$func_stripname_result 472249dc963fSmrg arg= 472349dc963fSmrg save_ifs="$IFS"; IFS=',' 472449dc963fSmrg for flag in $args; do 472549dc963fSmrg IFS="$save_ifs" 472649dc963fSmrg func_quote_for_eval "$flag" 472749dc963fSmrg arg="$arg $wl$func_quote_for_eval_result" 472849dc963fSmrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 472949dc963fSmrg linker_flags="$linker_flags $func_quote_for_eval_result" 473049dc963fSmrg done 473149dc963fSmrg IFS="$save_ifs" 473249dc963fSmrg func_stripname ' ' '' "$arg" 473349dc963fSmrg arg=$func_stripname_result 473449dc963fSmrg ;; 47354b0ead49Smrg 473649dc963fSmrg -Xcompiler) 473749dc963fSmrg prev=xcompiler 473849dc963fSmrg continue 473949dc963fSmrg ;; 47404b0ead49Smrg 474149dc963fSmrg -Xlinker) 474249dc963fSmrg prev=xlinker 474349dc963fSmrg continue 474449dc963fSmrg ;; 47454b0ead49Smrg 474649dc963fSmrg -XCClinker) 474749dc963fSmrg prev=xcclinker 474849dc963fSmrg continue 474949dc963fSmrg ;; 47504b0ead49Smrg 475149dc963fSmrg # -msg_* for osf cc 475249dc963fSmrg -msg_*) 475349dc963fSmrg func_quote_for_eval "$arg" 475449dc963fSmrg arg="$func_quote_for_eval_result" 475549dc963fSmrg ;; 47564b0ead49Smrg 475749dc963fSmrg # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 475849dc963fSmrg # -r[0-9][0-9]* specifies the processor on the SGI compiler 475949dc963fSmrg # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 476049dc963fSmrg # +DA*, +DD* enable 64-bit mode on the HP compiler 476149dc963fSmrg # -q* pass through compiler args for the IBM compiler 476249dc963fSmrg # -m*, -t[45]*, -txscale* pass through architecture-specific 476349dc963fSmrg # compiler args for GCC 476449dc963fSmrg # -F/path gives path to uninstalled frameworks, gcc on darwin 476549dc963fSmrg # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 476649dc963fSmrg # @file GCC response files 476749dc963fSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 476849dc963fSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 476949dc963fSmrg func_quote_for_eval "$arg" 477049dc963fSmrg arg="$func_quote_for_eval_result" 477149dc963fSmrg func_append compile_command " $arg" 477249dc963fSmrg func_append finalize_command " $arg" 477349dc963fSmrg compiler_flags="$compiler_flags $arg" 477449dc963fSmrg continue 477549dc963fSmrg ;; 47764b0ead49Smrg 477749dc963fSmrg # Some other compiler flag. 477849dc963fSmrg -* | +*) 477949dc963fSmrg func_quote_for_eval "$arg" 478049dc963fSmrg arg="$func_quote_for_eval_result" 478149dc963fSmrg ;; 47824b0ead49Smrg 478349dc963fSmrg *.$objext) 478449dc963fSmrg # A standard object. 478549dc963fSmrg objs="$objs $arg" 478649dc963fSmrg ;; 47874b0ead49Smrg 478849dc963fSmrg *.lo) 478949dc963fSmrg # A libtool-controlled object. 47904b0ead49Smrg 479149dc963fSmrg # Check to see that this really is a libtool object. 479249dc963fSmrg if func_lalib_unsafe_p "$arg"; then 479349dc963fSmrg pic_object= 479449dc963fSmrg non_pic_object= 47954b0ead49Smrg 479649dc963fSmrg # Read the .lo file 479749dc963fSmrg func_source "$arg" 47984b0ead49Smrg 479949dc963fSmrg if test -z "$pic_object" || 480049dc963fSmrg test -z "$non_pic_object" || 480149dc963fSmrg test "$pic_object" = none && 480249dc963fSmrg test "$non_pic_object" = none; then 480349dc963fSmrg func_fatal_error "cannot find name of object for \`$arg'" 480449dc963fSmrg fi 48054b0ead49Smrg 480649dc963fSmrg # Extract subdirectory from the argument. 480749dc963fSmrg func_dirname "$arg" "/" "" 480849dc963fSmrg xdir="$func_dirname_result" 480952b01e16Smrg 481049dc963fSmrg if test "$pic_object" != none; then 481149dc963fSmrg # Prepend the subdirectory the object is found in. 481249dc963fSmrg pic_object="$xdir$pic_object" 48134b0ead49Smrg 481449dc963fSmrg if test "$prev" = dlfiles; then 481549dc963fSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 481649dc963fSmrg dlfiles="$dlfiles $pic_object" 481749dc963fSmrg prev= 481849dc963fSmrg continue 481949dc963fSmrg else 482049dc963fSmrg # If libtool objects are unsupported, then we need to preload. 482149dc963fSmrg prev=dlprefiles 482249dc963fSmrg fi 482349dc963fSmrg fi 48244b0ead49Smrg 482549dc963fSmrg # CHECK ME: I think I busted this. -Ossama 482649dc963fSmrg if test "$prev" = dlprefiles; then 482749dc963fSmrg # Preload the old-style object. 482849dc963fSmrg dlprefiles="$dlprefiles $pic_object" 482949dc963fSmrg prev= 483049dc963fSmrg fi 48314b0ead49Smrg 483249dc963fSmrg # A PIC object. 483349dc963fSmrg func_append libobjs " $pic_object" 483449dc963fSmrg arg="$pic_object" 483549dc963fSmrg fi 48364b0ead49Smrg 483749dc963fSmrg # Non-PIC object. 483849dc963fSmrg if test "$non_pic_object" != none; then 483949dc963fSmrg # Prepend the subdirectory the object is found in. 484049dc963fSmrg non_pic_object="$xdir$non_pic_object" 48414b0ead49Smrg 484249dc963fSmrg # A standard non-PIC object 484349dc963fSmrg func_append non_pic_objects " $non_pic_object" 484449dc963fSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 484549dc963fSmrg arg="$non_pic_object" 484649dc963fSmrg fi 484749dc963fSmrg else 484849dc963fSmrg # If the PIC object exists, use it instead. 484949dc963fSmrg # $xdir was prepended to $pic_object above. 485049dc963fSmrg non_pic_object="$pic_object" 485149dc963fSmrg func_append non_pic_objects " $non_pic_object" 485249dc963fSmrg fi 485349dc963fSmrg else 485449dc963fSmrg # Only an error if not doing a dry-run. 485549dc963fSmrg if $opt_dry_run; then 485649dc963fSmrg # Extract subdirectory from the argument. 485749dc963fSmrg func_dirname "$arg" "/" "" 485849dc963fSmrg xdir="$func_dirname_result" 485949dc963fSmrg 486049dc963fSmrg func_lo2o "$arg" 486149dc963fSmrg pic_object=$xdir$objdir/$func_lo2o_result 486249dc963fSmrg non_pic_object=$xdir$func_lo2o_result 486349dc963fSmrg func_append libobjs " $pic_object" 486449dc963fSmrg func_append non_pic_objects " $non_pic_object" 486549dc963fSmrg else 486649dc963fSmrg func_fatal_error "\`$arg' is not a valid libtool object" 486749dc963fSmrg fi 486849dc963fSmrg fi 486949dc963fSmrg ;; 48704b0ead49Smrg 487149dc963fSmrg *.$libext) 487249dc963fSmrg # An archive. 487349dc963fSmrg deplibs="$deplibs $arg" 487449dc963fSmrg old_deplibs="$old_deplibs $arg" 487549dc963fSmrg continue 487649dc963fSmrg ;; 487749dc963fSmrg 487849dc963fSmrg *.la) 487949dc963fSmrg # A libtool-controlled library. 488049dc963fSmrg 488149dc963fSmrg if test "$prev" = dlfiles; then 488249dc963fSmrg # This library was specified with -dlopen. 488349dc963fSmrg dlfiles="$dlfiles $arg" 488449dc963fSmrg prev= 488549dc963fSmrg elif test "$prev" = dlprefiles; then 488649dc963fSmrg # The library was specified with -dlpreopen. 488749dc963fSmrg dlprefiles="$dlprefiles $arg" 488849dc963fSmrg prev= 488949dc963fSmrg else 489049dc963fSmrg deplibs="$deplibs $arg" 489149dc963fSmrg fi 489249dc963fSmrg continue 489349dc963fSmrg ;; 489449dc963fSmrg 489549dc963fSmrg # Some other compiler argument. 489649dc963fSmrg *) 489749dc963fSmrg # Unknown arguments in both finalize_command and compile_command need 489849dc963fSmrg # to be aesthetically quoted because they are evaled later. 489949dc963fSmrg func_quote_for_eval "$arg" 490049dc963fSmrg arg="$func_quote_for_eval_result" 490149dc963fSmrg ;; 490249dc963fSmrg esac # arg 490349dc963fSmrg 490449dc963fSmrg # Now actually substitute the argument into the commands. 490549dc963fSmrg if test -n "$arg"; then 490649dc963fSmrg func_append compile_command " $arg" 490749dc963fSmrg func_append finalize_command " $arg" 490849dc963fSmrg fi 490949dc963fSmrg done # argument parsing loop 491049dc963fSmrg 491149dc963fSmrg test -n "$prev" && \ 491249dc963fSmrg func_fatal_help "the \`$prevarg' option requires an argument" 491349dc963fSmrg 491449dc963fSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 491549dc963fSmrg eval arg=\"$export_dynamic_flag_spec\" 491649dc963fSmrg func_append compile_command " $arg" 491749dc963fSmrg func_append finalize_command " $arg" 491849dc963fSmrg fi 491949dc963fSmrg 492049dc963fSmrg oldlibs= 492149dc963fSmrg # calculate the name of the file, without its directory 492249dc963fSmrg func_basename "$output" 492349dc963fSmrg outputname="$func_basename_result" 492449dc963fSmrg libobjs_save="$libobjs" 492549dc963fSmrg 492649dc963fSmrg if test -n "$shlibpath_var"; then 492749dc963fSmrg # get the directories listed in $shlibpath_var 492849dc963fSmrg eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 492949dc963fSmrg else 493049dc963fSmrg shlib_search_path= 493149dc963fSmrg fi 493249dc963fSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 493349dc963fSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 493449dc963fSmrg 493549dc963fSmrg func_dirname "$output" "/" "" 493649dc963fSmrg output_objdir="$func_dirname_result$objdir" 493749dc963fSmrg # Create the object directory. 493849dc963fSmrg func_mkdir_p "$output_objdir" 493949dc963fSmrg 494049dc963fSmrg # Determine the type of output 494149dc963fSmrg case $output in 494249dc963fSmrg "") 494349dc963fSmrg func_fatal_help "you must specify an output file" 494449dc963fSmrg ;; 494549dc963fSmrg *.$libext) linkmode=oldlib ;; 494649dc963fSmrg *.lo | *.$objext) linkmode=obj ;; 494749dc963fSmrg *.la) linkmode=lib ;; 494849dc963fSmrg *) linkmode=prog ;; # Anything else should be a program. 494949dc963fSmrg esac 495049dc963fSmrg 495149dc963fSmrg specialdeplibs= 495249dc963fSmrg 495349dc963fSmrg libs= 495449dc963fSmrg # Find all interdependent deplibs by searching for libraries 495549dc963fSmrg # that are linked more than once (e.g. -la -lb -la) 495649dc963fSmrg for deplib in $deplibs; do 495749dc963fSmrg if $opt_duplicate_deps ; then 495849dc963fSmrg case "$libs " in 495949dc963fSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 496049dc963fSmrg esac 496149dc963fSmrg fi 496249dc963fSmrg libs="$libs $deplib" 496349dc963fSmrg done 496449dc963fSmrg 496549dc963fSmrg if test "$linkmode" = lib; then 496649dc963fSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 496749dc963fSmrg 496849dc963fSmrg # Compute libraries that are listed more than once in $predeps 496949dc963fSmrg # $postdeps and mark them as special (i.e., whose duplicates are 497049dc963fSmrg # not to be eliminated). 497149dc963fSmrg pre_post_deps= 497249dc963fSmrg if $opt_duplicate_compiler_generated_deps; then 497349dc963fSmrg for pre_post_dep in $predeps $postdeps; do 497449dc963fSmrg case "$pre_post_deps " in 497549dc963fSmrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 497649dc963fSmrg esac 497749dc963fSmrg pre_post_deps="$pre_post_deps $pre_post_dep" 497849dc963fSmrg done 497949dc963fSmrg fi 498049dc963fSmrg pre_post_deps= 498149dc963fSmrg fi 498249dc963fSmrg 498349dc963fSmrg deplibs= 498449dc963fSmrg newdependency_libs= 498549dc963fSmrg newlib_search_path= 498649dc963fSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 498749dc963fSmrg notinst_deplibs= # not-installed libtool libraries 498849dc963fSmrg notinst_path= # paths that contain not-installed libtool libraries 498949dc963fSmrg 499049dc963fSmrg case $linkmode in 499149dc963fSmrg lib) 499249dc963fSmrg passes="conv dlpreopen link" 499349dc963fSmrg for file in $dlfiles $dlprefiles; do 499449dc963fSmrg case $file in 499549dc963fSmrg *.la) ;; 499649dc963fSmrg *) 499749dc963fSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 499849dc963fSmrg ;; 499949dc963fSmrg esac 500049dc963fSmrg done 500149dc963fSmrg ;; 500249dc963fSmrg prog) 500349dc963fSmrg compile_deplibs= 500449dc963fSmrg finalize_deplibs= 500549dc963fSmrg alldeplibs=no 500649dc963fSmrg newdlfiles= 500749dc963fSmrg newdlprefiles= 500849dc963fSmrg passes="conv scan dlopen dlpreopen link" 500949dc963fSmrg ;; 501049dc963fSmrg *) passes="conv" 501149dc963fSmrg ;; 501249dc963fSmrg esac 501349dc963fSmrg 501449dc963fSmrg for pass in $passes; do 501549dc963fSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 501649dc963fSmrg # so that -L comes before libs that need it for instance... 501749dc963fSmrg if test "$linkmode,$pass" = "lib,link"; then 501849dc963fSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 501949dc963fSmrg ## order, and fix it there properly 502049dc963fSmrg tmp_deplibs= 502149dc963fSmrg for deplib in $deplibs; do 502249dc963fSmrg tmp_deplibs="$deplib $tmp_deplibs" 502349dc963fSmrg done 502449dc963fSmrg deplibs="$tmp_deplibs" 502549dc963fSmrg fi 502649dc963fSmrg 502749dc963fSmrg if test "$linkmode,$pass" = "lib,link" || 502849dc963fSmrg test "$linkmode,$pass" = "prog,scan"; then 502949dc963fSmrg libs="$deplibs" 503049dc963fSmrg deplibs= 503149dc963fSmrg fi 503249dc963fSmrg if test "$linkmode" = prog; then 503349dc963fSmrg case $pass in 503449dc963fSmrg dlopen) libs="$dlfiles" ;; 503549dc963fSmrg dlpreopen) libs="$dlprefiles" ;; 503649dc963fSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 503749dc963fSmrg esac 503849dc963fSmrg fi 503949dc963fSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 504049dc963fSmrg # Collect and forward deplibs of preopened libtool libs 504149dc963fSmrg for lib in $dlprefiles; do 504249dc963fSmrg # Ignore non-libtool-libs 504349dc963fSmrg dependency_libs= 504449dc963fSmrg case $lib in 504549dc963fSmrg *.la) func_source "$lib" ;; 504649dc963fSmrg esac 504749dc963fSmrg 504849dc963fSmrg # Collect preopened libtool deplibs, except any this library 504949dc963fSmrg # has declared as weak libs 505049dc963fSmrg for deplib in $dependency_libs; do 505149dc963fSmrg deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` 505249dc963fSmrg case " $weak_libs " in 505349dc963fSmrg *" $deplib_base "*) ;; 505449dc963fSmrg *) deplibs="$deplibs $deplib" ;; 505549dc963fSmrg esac 505649dc963fSmrg done 505749dc963fSmrg done 505849dc963fSmrg libs="$dlprefiles" 505949dc963fSmrg fi 506049dc963fSmrg if test "$pass" = dlopen; then 506149dc963fSmrg # Collect dlpreopened libraries 506249dc963fSmrg save_deplibs="$deplibs" 506349dc963fSmrg deplibs= 506449dc963fSmrg fi 506549dc963fSmrg 506649dc963fSmrg for deplib in $libs; do 506749dc963fSmrg lib= 506849dc963fSmrg found=no 506949dc963fSmrg case $deplib in 507049dc963fSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 507149dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 507249dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 507349dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 507449dc963fSmrg else 507549dc963fSmrg compiler_flags="$compiler_flags $deplib" 507649dc963fSmrg if test "$linkmode" = lib ; then 507749dc963fSmrg case "$new_inherited_linker_flags " in 507849dc963fSmrg *" $deplib "*) ;; 507949dc963fSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 508049dc963fSmrg esac 508149dc963fSmrg fi 508249dc963fSmrg fi 508349dc963fSmrg continue 508449dc963fSmrg ;; 508549dc963fSmrg -l*) 508649dc963fSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 508749dc963fSmrg func_warning "\`-l' is ignored for archives/objects" 508849dc963fSmrg continue 508949dc963fSmrg fi 509049dc963fSmrg func_stripname '-l' '' "$deplib" 509149dc963fSmrg name=$func_stripname_result 509249dc963fSmrg if test "$linkmode" = lib; then 509349dc963fSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 509449dc963fSmrg else 509549dc963fSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 509649dc963fSmrg fi 509749dc963fSmrg for searchdir in $searchdirs; do 509849dc963fSmrg for search_ext in .la $std_shrext .so .a; do 509949dc963fSmrg # Search the libtool library 510049dc963fSmrg lib="$searchdir/lib${name}${search_ext}" 510149dc963fSmrg if test -f "$lib"; then 510249dc963fSmrg if test "$search_ext" = ".la"; then 510349dc963fSmrg found=yes 510449dc963fSmrg else 510549dc963fSmrg found=no 510649dc963fSmrg fi 510749dc963fSmrg break 2 510849dc963fSmrg fi 510949dc963fSmrg done 511049dc963fSmrg done 511149dc963fSmrg if test "$found" != yes; then 511249dc963fSmrg # deplib doesn't seem to be a libtool library 511349dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 511449dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 511549dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 511649dc963fSmrg else 511749dc963fSmrg deplibs="$deplib $deplibs" 511849dc963fSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 511949dc963fSmrg fi 512049dc963fSmrg continue 512149dc963fSmrg else # deplib is a libtool library 512249dc963fSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 512349dc963fSmrg # We need to do some special things here, and not later. 512449dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 512549dc963fSmrg case " $predeps $postdeps " in 512649dc963fSmrg *" $deplib "*) 512749dc963fSmrg if func_lalib_p "$lib"; then 512849dc963fSmrg library_names= 512949dc963fSmrg old_library= 513049dc963fSmrg func_source "$lib" 513149dc963fSmrg for l in $old_library $library_names; do 513249dc963fSmrg ll="$l" 513349dc963fSmrg done 513449dc963fSmrg if test "X$ll" = "X$old_library" ; then # only static version available 513549dc963fSmrg found=no 513649dc963fSmrg func_dirname "$lib" "" "." 513749dc963fSmrg ladir="$func_dirname_result" 513849dc963fSmrg lib=$ladir/$old_library 513949dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 514049dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 514149dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 514249dc963fSmrg else 514349dc963fSmrg deplibs="$deplib $deplibs" 514449dc963fSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 514549dc963fSmrg fi 514649dc963fSmrg continue 514749dc963fSmrg fi 514849dc963fSmrg fi 514949dc963fSmrg ;; 515049dc963fSmrg *) ;; 515149dc963fSmrg esac 515249dc963fSmrg fi 515349dc963fSmrg fi 515449dc963fSmrg ;; # -l 515549dc963fSmrg *.ltframework) 515649dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 515749dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 515849dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 515949dc963fSmrg else 516049dc963fSmrg deplibs="$deplib $deplibs" 516149dc963fSmrg if test "$linkmode" = lib ; then 516249dc963fSmrg case "$new_inherited_linker_flags " in 516349dc963fSmrg *" $deplib "*) ;; 516449dc963fSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 516549dc963fSmrg esac 516649dc963fSmrg fi 516749dc963fSmrg fi 516849dc963fSmrg continue 516949dc963fSmrg ;; 517049dc963fSmrg -L*) 517149dc963fSmrg case $linkmode in 517249dc963fSmrg lib) 517349dc963fSmrg deplibs="$deplib $deplibs" 517449dc963fSmrg test "$pass" = conv && continue 517549dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 517649dc963fSmrg func_stripname '-L' '' "$deplib" 517749dc963fSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 517849dc963fSmrg ;; 517949dc963fSmrg prog) 518049dc963fSmrg if test "$pass" = conv; then 518149dc963fSmrg deplibs="$deplib $deplibs" 518249dc963fSmrg continue 518349dc963fSmrg fi 518449dc963fSmrg if test "$pass" = scan; then 518549dc963fSmrg deplibs="$deplib $deplibs" 518649dc963fSmrg else 518749dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 518849dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 518949dc963fSmrg fi 519049dc963fSmrg func_stripname '-L' '' "$deplib" 519149dc963fSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 519249dc963fSmrg ;; 519349dc963fSmrg *) 519449dc963fSmrg func_warning "\`-L' is ignored for archives/objects" 519549dc963fSmrg ;; 519649dc963fSmrg esac # linkmode 519749dc963fSmrg continue 519849dc963fSmrg ;; # -L 519949dc963fSmrg -R*) 520049dc963fSmrg if test "$pass" = link; then 520149dc963fSmrg func_stripname '-R' '' "$deplib" 520249dc963fSmrg dir=$func_stripname_result 520349dc963fSmrg # Make sure the xrpath contains only unique directories. 520449dc963fSmrg case "$xrpath " in 520549dc963fSmrg *" $dir "*) ;; 520649dc963fSmrg *) xrpath="$xrpath $dir" ;; 520749dc963fSmrg esac 520849dc963fSmrg fi 520949dc963fSmrg deplibs="$deplib $deplibs" 521049dc963fSmrg continue 521149dc963fSmrg ;; 521249dc963fSmrg *.la) lib="$deplib" ;; 521349dc963fSmrg *.$libext) 521449dc963fSmrg if test "$pass" = conv; then 521549dc963fSmrg deplibs="$deplib $deplibs" 521649dc963fSmrg continue 521749dc963fSmrg fi 521849dc963fSmrg case $linkmode in 521949dc963fSmrg lib) 522049dc963fSmrg # Linking convenience modules into shared libraries is allowed, 522149dc963fSmrg # but linking other static libraries is non-portable. 522249dc963fSmrg case " $dlpreconveniencelibs " in 522349dc963fSmrg *" $deplib "*) ;; 522449dc963fSmrg *) 522549dc963fSmrg valid_a_lib=no 522649dc963fSmrg case $deplibs_check_method in 522749dc963fSmrg match_pattern*) 522849dc963fSmrg set dummy $deplibs_check_method; shift 522949dc963fSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 523049dc963fSmrg if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ 523149dc963fSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 523249dc963fSmrg valid_a_lib=yes 523349dc963fSmrg fi 523449dc963fSmrg ;; 523549dc963fSmrg pass_all) 523649dc963fSmrg valid_a_lib=yes 523749dc963fSmrg ;; 523849dc963fSmrg esac 523949dc963fSmrg if test "$valid_a_lib" != yes; then 524049dc963fSmrg $ECHO 524149dc963fSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 524249dc963fSmrg $ECHO "*** I have the capability to make that library automatically link in when" 524349dc963fSmrg $ECHO "*** you link to this library. But I can only do this if you have a" 524449dc963fSmrg $ECHO "*** shared version of the library, which you do not appear to have" 524549dc963fSmrg $ECHO "*** because the file extensions .$libext of this argument makes me believe" 524649dc963fSmrg $ECHO "*** that it is just a static archive that I should not use here." 524749dc963fSmrg else 524849dc963fSmrg $ECHO 524949dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the" 525049dc963fSmrg $ECHO "*** static library $deplib is not portable!" 525149dc963fSmrg deplibs="$deplib $deplibs" 525249dc963fSmrg fi 525349dc963fSmrg ;; 525449dc963fSmrg esac 525549dc963fSmrg continue 525649dc963fSmrg ;; 525749dc963fSmrg prog) 525849dc963fSmrg if test "$pass" != link; then 525949dc963fSmrg deplibs="$deplib $deplibs" 526049dc963fSmrg else 526149dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 526249dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 526349dc963fSmrg fi 526449dc963fSmrg continue 526549dc963fSmrg ;; 526649dc963fSmrg esac # linkmode 526749dc963fSmrg ;; # *.$libext 526849dc963fSmrg *.lo | *.$objext) 526949dc963fSmrg if test "$pass" = conv; then 527049dc963fSmrg deplibs="$deplib $deplibs" 527149dc963fSmrg elif test "$linkmode" = prog; then 527249dc963fSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 527349dc963fSmrg # If there is no dlopen support or we're linking statically, 527449dc963fSmrg # we need to preload. 527549dc963fSmrg newdlprefiles="$newdlprefiles $deplib" 527649dc963fSmrg compile_deplibs="$deplib $compile_deplibs" 527749dc963fSmrg finalize_deplibs="$deplib $finalize_deplibs" 527849dc963fSmrg else 527949dc963fSmrg newdlfiles="$newdlfiles $deplib" 528049dc963fSmrg fi 528149dc963fSmrg fi 528249dc963fSmrg continue 528349dc963fSmrg ;; 528449dc963fSmrg %DEPLIBS%) 528549dc963fSmrg alldeplibs=yes 528649dc963fSmrg continue 528749dc963fSmrg ;; 528849dc963fSmrg esac # case $deplib 528949dc963fSmrg 529049dc963fSmrg if test "$found" = yes || test -f "$lib"; then : 529149dc963fSmrg else 529249dc963fSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 529349dc963fSmrg fi 529449dc963fSmrg 529549dc963fSmrg # Check to see that this really is a libtool archive. 529649dc963fSmrg func_lalib_unsafe_p "$lib" \ 529749dc963fSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 529849dc963fSmrg 529949dc963fSmrg func_dirname "$lib" "" "." 530049dc963fSmrg ladir="$func_dirname_result" 530149dc963fSmrg 530249dc963fSmrg dlname= 530349dc963fSmrg dlopen= 530449dc963fSmrg dlpreopen= 530549dc963fSmrg libdir= 530649dc963fSmrg library_names= 530749dc963fSmrg old_library= 530849dc963fSmrg inherited_linker_flags= 530949dc963fSmrg # If the library was installed with an old release of libtool, 531049dc963fSmrg # it will not redefine variables installed, or shouldnotlink 531149dc963fSmrg installed=yes 531249dc963fSmrg shouldnotlink=no 531349dc963fSmrg avoidtemprpath= 531449dc963fSmrg 531549dc963fSmrg 531649dc963fSmrg # Read the .la file 531749dc963fSmrg func_source "$lib" 531849dc963fSmrg 531949dc963fSmrg # Convert "-framework foo" to "foo.ltframework" 532049dc963fSmrg if test -n "$inherited_linker_flags"; then 532149dc963fSmrg tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` 532249dc963fSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 532349dc963fSmrg case " $new_inherited_linker_flags " in 532449dc963fSmrg *" $tmp_inherited_linker_flag "*) ;; 532549dc963fSmrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 532649dc963fSmrg esac 532749dc963fSmrg done 532849dc963fSmrg fi 532949dc963fSmrg dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 533049dc963fSmrg if test "$linkmode,$pass" = "lib,link" || 533149dc963fSmrg test "$linkmode,$pass" = "prog,scan" || 533249dc963fSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 533349dc963fSmrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 533449dc963fSmrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 533549dc963fSmrg fi 533649dc963fSmrg 533749dc963fSmrg if test "$pass" = conv; then 533849dc963fSmrg # Only check for convenience libraries 533949dc963fSmrg deplibs="$lib $deplibs" 534049dc963fSmrg if test -z "$libdir"; then 534149dc963fSmrg if test -z "$old_library"; then 534249dc963fSmrg func_fatal_error "cannot find name of link library for \`$lib'" 534349dc963fSmrg fi 534449dc963fSmrg # It is a libtool convenience library, so add in its objects. 534549dc963fSmrg convenience="$convenience $ladir/$objdir/$old_library" 534649dc963fSmrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 534749dc963fSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 534849dc963fSmrg func_fatal_error "\`$lib' is not a convenience library" 534949dc963fSmrg fi 535049dc963fSmrg tmp_libs= 535149dc963fSmrg for deplib in $dependency_libs; do 535249dc963fSmrg deplibs="$deplib $deplibs" 535349dc963fSmrg if $opt_duplicate_deps ; then 535449dc963fSmrg case "$tmp_libs " in 535549dc963fSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 535649dc963fSmrg esac 535749dc963fSmrg fi 535849dc963fSmrg tmp_libs="$tmp_libs $deplib" 535949dc963fSmrg done 536049dc963fSmrg continue 536149dc963fSmrg fi # $pass = conv 536249dc963fSmrg 536349dc963fSmrg 536449dc963fSmrg # Get the name of the library we link against. 536549dc963fSmrg linklib= 536649dc963fSmrg for l in $old_library $library_names; do 536749dc963fSmrg linklib="$l" 536849dc963fSmrg done 536949dc963fSmrg if test -z "$linklib"; then 537049dc963fSmrg func_fatal_error "cannot find name of link library for \`$lib'" 537149dc963fSmrg fi 537249dc963fSmrg 537349dc963fSmrg # This library was specified with -dlopen. 537449dc963fSmrg if test "$pass" = dlopen; then 537549dc963fSmrg if test -z "$libdir"; then 537649dc963fSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 537749dc963fSmrg fi 537849dc963fSmrg if test -z "$dlname" || 537949dc963fSmrg test "$dlopen_support" != yes || 538049dc963fSmrg test "$build_libtool_libs" = no; then 538149dc963fSmrg # If there is no dlname, no dlopen support or we're linking 538249dc963fSmrg # statically, we need to preload. We also need to preload any 538349dc963fSmrg # dependent libraries so libltdl's deplib preloader doesn't 538449dc963fSmrg # bomb out in the load deplibs phase. 538549dc963fSmrg dlprefiles="$dlprefiles $lib $dependency_libs" 538649dc963fSmrg else 538749dc963fSmrg newdlfiles="$newdlfiles $lib" 538849dc963fSmrg fi 538949dc963fSmrg continue 539049dc963fSmrg fi # $pass = dlopen 539149dc963fSmrg 539249dc963fSmrg # We need an absolute path. 539349dc963fSmrg case $ladir in 539449dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 539549dc963fSmrg *) 539649dc963fSmrg abs_ladir=`cd "$ladir" && pwd` 539749dc963fSmrg if test -z "$abs_ladir"; then 539849dc963fSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 539949dc963fSmrg func_warning "passing it literally to the linker, although it might fail" 540049dc963fSmrg abs_ladir="$ladir" 540149dc963fSmrg fi 540249dc963fSmrg ;; 540349dc963fSmrg esac 540449dc963fSmrg func_basename "$lib" 540549dc963fSmrg laname="$func_basename_result" 540649dc963fSmrg 540749dc963fSmrg # Find the relevant object directory and library name. 540849dc963fSmrg if test "X$installed" = Xyes; then 540949dc963fSmrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 541049dc963fSmrg func_warning "library \`$lib' was moved." 541149dc963fSmrg dir="$ladir" 541249dc963fSmrg absdir="$abs_ladir" 541349dc963fSmrg libdir="$abs_ladir" 541449dc963fSmrg else 541549dc963fSmrg dir="$libdir" 541649dc963fSmrg absdir="$libdir" 541749dc963fSmrg fi 541849dc963fSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 541949dc963fSmrg else 542049dc963fSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 542149dc963fSmrg dir="$ladir" 542249dc963fSmrg absdir="$abs_ladir" 542349dc963fSmrg # Remove this search path later 542449dc963fSmrg notinst_path="$notinst_path $abs_ladir" 542549dc963fSmrg else 542649dc963fSmrg dir="$ladir/$objdir" 542749dc963fSmrg absdir="$abs_ladir/$objdir" 542849dc963fSmrg # Remove this search path later 542949dc963fSmrg notinst_path="$notinst_path $abs_ladir" 543049dc963fSmrg fi 543149dc963fSmrg fi # $installed = yes 543249dc963fSmrg func_stripname 'lib' '.la' "$laname" 543349dc963fSmrg name=$func_stripname_result 543449dc963fSmrg 543549dc963fSmrg # This library was specified with -dlpreopen. 543649dc963fSmrg if test "$pass" = dlpreopen; then 543749dc963fSmrg if test -z "$libdir" && test "$linkmode" = prog; then 543849dc963fSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 543949dc963fSmrg fi 544049dc963fSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 544149dc963fSmrg # are required to link). 544249dc963fSmrg if test -n "$old_library"; then 544349dc963fSmrg newdlprefiles="$newdlprefiles $dir/$old_library" 544449dc963fSmrg # Keep a list of preopened convenience libraries to check 544549dc963fSmrg # that they are being used correctly in the link pass. 544649dc963fSmrg test -z "$libdir" && \ 544749dc963fSmrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 544849dc963fSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 544949dc963fSmrg elif test -n "$dlname"; then 545049dc963fSmrg newdlprefiles="$newdlprefiles $dir/$dlname" 545149dc963fSmrg else 545249dc963fSmrg newdlprefiles="$newdlprefiles $dir/$linklib" 545349dc963fSmrg fi 545449dc963fSmrg fi # $pass = dlpreopen 545549dc963fSmrg 545649dc963fSmrg if test -z "$libdir"; then 545749dc963fSmrg # Link the convenience library 545849dc963fSmrg if test "$linkmode" = lib; then 545949dc963fSmrg deplibs="$dir/$old_library $deplibs" 546049dc963fSmrg elif test "$linkmode,$pass" = "prog,link"; then 546149dc963fSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 546249dc963fSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 546349dc963fSmrg else 546449dc963fSmrg deplibs="$lib $deplibs" # used for prog,scan pass 546549dc963fSmrg fi 546649dc963fSmrg continue 546749dc963fSmrg fi 546849dc963fSmrg 546949dc963fSmrg 547049dc963fSmrg if test "$linkmode" = prog && test "$pass" != link; then 547149dc963fSmrg newlib_search_path="$newlib_search_path $ladir" 547249dc963fSmrg deplibs="$lib $deplibs" 547349dc963fSmrg 547449dc963fSmrg linkalldeplibs=no 547549dc963fSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 547649dc963fSmrg test "$build_libtool_libs" = no; then 547749dc963fSmrg linkalldeplibs=yes 547849dc963fSmrg fi 547949dc963fSmrg 548049dc963fSmrg tmp_libs= 548149dc963fSmrg for deplib in $dependency_libs; do 548249dc963fSmrg case $deplib in 548349dc963fSmrg -L*) func_stripname '-L' '' "$deplib" 548449dc963fSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 548549dc963fSmrg ;; 548649dc963fSmrg esac 548749dc963fSmrg # Need to link against all dependency_libs? 548849dc963fSmrg if test "$linkalldeplibs" = yes; then 548949dc963fSmrg deplibs="$deplib $deplibs" 549049dc963fSmrg else 549149dc963fSmrg # Need to hardcode shared library paths 549249dc963fSmrg # or/and link against static libraries 549349dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 549449dc963fSmrg fi 549549dc963fSmrg if $opt_duplicate_deps ; then 549649dc963fSmrg case "$tmp_libs " in 549749dc963fSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 549849dc963fSmrg esac 549949dc963fSmrg fi 550049dc963fSmrg tmp_libs="$tmp_libs $deplib" 550149dc963fSmrg done # for deplib 550249dc963fSmrg continue 550349dc963fSmrg fi # $linkmode = prog... 550449dc963fSmrg 550549dc963fSmrg if test "$linkmode,$pass" = "prog,link"; then 550649dc963fSmrg if test -n "$library_names" && 550749dc963fSmrg { { test "$prefer_static_libs" = no || 550849dc963fSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 550949dc963fSmrg test -z "$old_library"; }; then 551049dc963fSmrg # We need to hardcode the library path 551149dc963fSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 551249dc963fSmrg # Make sure the rpath contains only unique directories. 551349dc963fSmrg case "$temp_rpath:" in 551449dc963fSmrg *"$absdir:"*) ;; 551549dc963fSmrg *) temp_rpath="$temp_rpath$absdir:" ;; 551649dc963fSmrg esac 551749dc963fSmrg fi 551849dc963fSmrg 551949dc963fSmrg # Hardcode the library path. 552049dc963fSmrg # Skip directories that are in the system default run-time 552149dc963fSmrg # search path. 552249dc963fSmrg case " $sys_lib_dlsearch_path " in 552349dc963fSmrg *" $absdir "*) ;; 552449dc963fSmrg *) 552549dc963fSmrg case "$compile_rpath " in 552649dc963fSmrg *" $absdir "*) ;; 552749dc963fSmrg *) compile_rpath="$compile_rpath $absdir" 552849dc963fSmrg esac 552949dc963fSmrg ;; 553049dc963fSmrg esac 553149dc963fSmrg case " $sys_lib_dlsearch_path " in 553249dc963fSmrg *" $libdir "*) ;; 553349dc963fSmrg *) 553449dc963fSmrg case "$finalize_rpath " in 553549dc963fSmrg *" $libdir "*) ;; 553649dc963fSmrg *) finalize_rpath="$finalize_rpath $libdir" 553749dc963fSmrg esac 553849dc963fSmrg ;; 553949dc963fSmrg esac 554049dc963fSmrg fi # $linkmode,$pass = prog,link... 554149dc963fSmrg 554249dc963fSmrg if test "$alldeplibs" = yes && 554349dc963fSmrg { test "$deplibs_check_method" = pass_all || 554449dc963fSmrg { test "$build_libtool_libs" = yes && 554549dc963fSmrg test -n "$library_names"; }; }; then 554649dc963fSmrg # We only need to search for static libraries 554749dc963fSmrg continue 554849dc963fSmrg fi 554949dc963fSmrg fi 555049dc963fSmrg 555149dc963fSmrg link_static=no # Whether the deplib will be linked statically 555249dc963fSmrg use_static_libs=$prefer_static_libs 555349dc963fSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 555449dc963fSmrg use_static_libs=no 555549dc963fSmrg fi 555649dc963fSmrg if test -n "$library_names" && 555749dc963fSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 555849dc963fSmrg case $host in 555949dc963fSmrg *cygwin* | *mingw* | *cegcc*) 556049dc963fSmrg # No point in relinking DLLs because paths are not encoded 556149dc963fSmrg notinst_deplibs="$notinst_deplibs $lib" 556249dc963fSmrg need_relink=no 556349dc963fSmrg ;; 556449dc963fSmrg *) 556549dc963fSmrg if test "$installed" = no; then 556649dc963fSmrg notinst_deplibs="$notinst_deplibs $lib" 556749dc963fSmrg need_relink=yes 556849dc963fSmrg fi 556949dc963fSmrg ;; 557049dc963fSmrg esac 557149dc963fSmrg # This is a shared library 557249dc963fSmrg 557349dc963fSmrg # Warn about portability, can't link against -module's on some 557449dc963fSmrg # systems (darwin). Don't bleat about dlopened modules though! 557549dc963fSmrg dlopenmodule="" 557649dc963fSmrg for dlpremoduletest in $dlprefiles; do 557749dc963fSmrg if test "X$dlpremoduletest" = "X$lib"; then 557849dc963fSmrg dlopenmodule="$dlpremoduletest" 557949dc963fSmrg break 558049dc963fSmrg fi 558149dc963fSmrg done 558249dc963fSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 558349dc963fSmrg $ECHO 558449dc963fSmrg if test "$linkmode" = prog; then 558549dc963fSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 558649dc963fSmrg else 558749dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 558849dc963fSmrg fi 558949dc963fSmrg $ECHO "*** $linklib is not portable!" 559049dc963fSmrg fi 559149dc963fSmrg if test "$linkmode" = lib && 559249dc963fSmrg test "$hardcode_into_libs" = yes; then 559349dc963fSmrg # Hardcode the library path. 559449dc963fSmrg # Skip directories that are in the system default run-time 559549dc963fSmrg # search path. 559649dc963fSmrg case " $sys_lib_dlsearch_path " in 559749dc963fSmrg *" $absdir "*) ;; 559849dc963fSmrg *) 559949dc963fSmrg case "$compile_rpath " in 560049dc963fSmrg *" $absdir "*) ;; 560149dc963fSmrg *) compile_rpath="$compile_rpath $absdir" 560249dc963fSmrg esac 560349dc963fSmrg ;; 560449dc963fSmrg esac 560549dc963fSmrg case " $sys_lib_dlsearch_path " in 560649dc963fSmrg *" $libdir "*) ;; 560749dc963fSmrg *) 560849dc963fSmrg case "$finalize_rpath " in 560949dc963fSmrg *" $libdir "*) ;; 561049dc963fSmrg *) finalize_rpath="$finalize_rpath $libdir" 561149dc963fSmrg esac 561249dc963fSmrg ;; 561349dc963fSmrg esac 561449dc963fSmrg fi 561549dc963fSmrg 561649dc963fSmrg if test -n "$old_archive_from_expsyms_cmds"; then 561749dc963fSmrg # figure out the soname 561849dc963fSmrg set dummy $library_names 561949dc963fSmrg shift 562049dc963fSmrg realname="$1" 562149dc963fSmrg shift 562249dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 562349dc963fSmrg # use dlname if we got it. it's perfectly good, no? 562449dc963fSmrg if test -n "$dlname"; then 562549dc963fSmrg soname="$dlname" 562649dc963fSmrg elif test -n "$soname_spec"; then 562749dc963fSmrg # bleh windows 562849dc963fSmrg case $host in 562949dc963fSmrg *cygwin* | mingw* | *cegcc*) 563049dc963fSmrg func_arith $current - $age 563149dc963fSmrg major=$func_arith_result 563249dc963fSmrg versuffix="-$major" 563349dc963fSmrg ;; 563449dc963fSmrg esac 563549dc963fSmrg eval soname=\"$soname_spec\" 563649dc963fSmrg else 563749dc963fSmrg soname="$realname" 563849dc963fSmrg fi 563949dc963fSmrg 564049dc963fSmrg # Make a new name for the extract_expsyms_cmds to use 564149dc963fSmrg soroot="$soname" 564249dc963fSmrg func_basename "$soroot" 564349dc963fSmrg soname="$func_basename_result" 564449dc963fSmrg func_stripname 'lib' '.dll' "$soname" 564549dc963fSmrg newlib=libimp-$func_stripname_result.a 564649dc963fSmrg 564749dc963fSmrg # If the library has no export list, then create one now 564849dc963fSmrg if test -f "$output_objdir/$soname-def"; then : 564949dc963fSmrg else 565049dc963fSmrg func_verbose "extracting exported symbol list from \`$soname'" 565149dc963fSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 565249dc963fSmrg fi 565349dc963fSmrg 565449dc963fSmrg # Create $newlib 565549dc963fSmrg if test -f "$output_objdir/$newlib"; then :; else 565649dc963fSmrg func_verbose "generating import library for \`$soname'" 565749dc963fSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 565849dc963fSmrg fi 565949dc963fSmrg # make sure the library variables are pointing to the new library 566049dc963fSmrg dir=$output_objdir 566149dc963fSmrg linklib=$newlib 566249dc963fSmrg fi # test -n "$old_archive_from_expsyms_cmds" 566349dc963fSmrg 566449dc963fSmrg if test "$linkmode" = prog || test "$mode" != relink; then 566549dc963fSmrg add_shlibpath= 566649dc963fSmrg add_dir= 566749dc963fSmrg add= 566849dc963fSmrg lib_linked=yes 566949dc963fSmrg case $hardcode_action in 567049dc963fSmrg immediate | unsupported) 567149dc963fSmrg if test "$hardcode_direct" = no; then 567249dc963fSmrg add="$dir/$linklib" 567349dc963fSmrg case $host in 567449dc963fSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 567549dc963fSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 567649dc963fSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 567749dc963fSmrg *-*-unixware7*) add_dir="-L$dir" ;; 567849dc963fSmrg *-*-darwin* ) 567949dc963fSmrg # if the lib is a (non-dlopened) module then we can not 568049dc963fSmrg # link against it, someone is ignoring the earlier warnings 568149dc963fSmrg if /usr/bin/file -L $add 2> /dev/null | 568249dc963fSmrg $GREP ": [^:]* bundle" >/dev/null ; then 568349dc963fSmrg if test "X$dlopenmodule" != "X$lib"; then 568449dc963fSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 568549dc963fSmrg if test -z "$old_library" ; then 568649dc963fSmrg $ECHO 568749dc963fSmrg $ECHO "*** And there doesn't seem to be a static archive available" 568849dc963fSmrg $ECHO "*** The link will probably fail, sorry" 568949dc963fSmrg else 569049dc963fSmrg add="$dir/$old_library" 569149dc963fSmrg fi 569249dc963fSmrg elif test -n "$old_library"; then 569349dc963fSmrg add="$dir/$old_library" 569449dc963fSmrg fi 569549dc963fSmrg fi 569649dc963fSmrg esac 569749dc963fSmrg elif test "$hardcode_minus_L" = no; then 569849dc963fSmrg case $host in 569949dc963fSmrg *-*-sunos*) add_shlibpath="$dir" ;; 570049dc963fSmrg esac 570149dc963fSmrg add_dir="-L$dir" 570249dc963fSmrg add="-l$name" 570349dc963fSmrg elif test "$hardcode_shlibpath_var" = no; then 570449dc963fSmrg add_shlibpath="$dir" 570549dc963fSmrg add="-l$name" 570649dc963fSmrg else 570749dc963fSmrg lib_linked=no 570849dc963fSmrg fi 570949dc963fSmrg ;; 571049dc963fSmrg relink) 571149dc963fSmrg if test "$hardcode_direct" = yes && 571249dc963fSmrg test "$hardcode_direct_absolute" = no; then 571349dc963fSmrg add="$dir/$linklib" 571449dc963fSmrg elif test "$hardcode_minus_L" = yes; then 571549dc963fSmrg add_dir="-L$dir" 571649dc963fSmrg # Try looking first in the location we're being installed to. 571749dc963fSmrg if test -n "$inst_prefix_dir"; then 571849dc963fSmrg case $libdir in 571949dc963fSmrg [\\/]*) 572049dc963fSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 572149dc963fSmrg ;; 572249dc963fSmrg esac 572349dc963fSmrg fi 572449dc963fSmrg add="-l$name" 572549dc963fSmrg elif test "$hardcode_shlibpath_var" = yes; then 572649dc963fSmrg add_shlibpath="$dir" 572749dc963fSmrg add="-l$name" 572849dc963fSmrg else 572949dc963fSmrg lib_linked=no 573049dc963fSmrg fi 573149dc963fSmrg ;; 573249dc963fSmrg *) lib_linked=no ;; 573349dc963fSmrg esac 573449dc963fSmrg 573549dc963fSmrg if test "$lib_linked" != yes; then 573649dc963fSmrg func_fatal_configuration "unsupported hardcode properties" 573749dc963fSmrg fi 573849dc963fSmrg 573949dc963fSmrg if test -n "$add_shlibpath"; then 574049dc963fSmrg case :$compile_shlibpath: in 574149dc963fSmrg *":$add_shlibpath:"*) ;; 574249dc963fSmrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 574349dc963fSmrg esac 574449dc963fSmrg fi 574549dc963fSmrg if test "$linkmode" = prog; then 574649dc963fSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 574749dc963fSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 574849dc963fSmrg else 574949dc963fSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 575049dc963fSmrg test -n "$add" && deplibs="$add $deplibs" 575149dc963fSmrg if test "$hardcode_direct" != yes && 575249dc963fSmrg test "$hardcode_minus_L" != yes && 575349dc963fSmrg test "$hardcode_shlibpath_var" = yes; then 575449dc963fSmrg case :$finalize_shlibpath: in 575549dc963fSmrg *":$libdir:"*) ;; 575649dc963fSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 575749dc963fSmrg esac 575849dc963fSmrg fi 575949dc963fSmrg fi 576049dc963fSmrg fi 576149dc963fSmrg 576249dc963fSmrg if test "$linkmode" = prog || test "$mode" = relink; then 576349dc963fSmrg add_shlibpath= 576449dc963fSmrg add_dir= 576549dc963fSmrg add= 576649dc963fSmrg # Finalize command for both is simple: just hardcode it. 576749dc963fSmrg if test "$hardcode_direct" = yes && 576849dc963fSmrg test "$hardcode_direct_absolute" = no; then 576949dc963fSmrg add="$libdir/$linklib" 577049dc963fSmrg elif test "$hardcode_minus_L" = yes; then 577149dc963fSmrg add_dir="-L$libdir" 577249dc963fSmrg add="-l$name" 577349dc963fSmrg elif test "$hardcode_shlibpath_var" = yes; then 577449dc963fSmrg case :$finalize_shlibpath: in 577549dc963fSmrg *":$libdir:"*) ;; 577649dc963fSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 577749dc963fSmrg esac 577849dc963fSmrg add="-l$name" 577949dc963fSmrg elif test "$hardcode_automatic" = yes; then 578049dc963fSmrg if test -n "$inst_prefix_dir" && 578149dc963fSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 578249dc963fSmrg add="$inst_prefix_dir$libdir/$linklib" 578349dc963fSmrg else 578449dc963fSmrg add="$libdir/$linklib" 578549dc963fSmrg fi 578649dc963fSmrg else 578749dc963fSmrg # We cannot seem to hardcode it, guess we'll fake it. 578849dc963fSmrg add_dir="-L$libdir" 578949dc963fSmrg # Try looking first in the location we're being installed to. 579049dc963fSmrg if test -n "$inst_prefix_dir"; then 579149dc963fSmrg case $libdir in 579249dc963fSmrg [\\/]*) 579349dc963fSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 579449dc963fSmrg ;; 579549dc963fSmrg esac 579649dc963fSmrg fi 579749dc963fSmrg add="-l$name" 579849dc963fSmrg fi 579949dc963fSmrg 580049dc963fSmrg if test "$linkmode" = prog; then 580149dc963fSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 580249dc963fSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 580349dc963fSmrg else 580449dc963fSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 580549dc963fSmrg test -n "$add" && deplibs="$add $deplibs" 580649dc963fSmrg fi 580749dc963fSmrg fi 580849dc963fSmrg elif test "$linkmode" = prog; then 580949dc963fSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 581049dc963fSmrg # is not unsupported. This is valid on all known static and 581149dc963fSmrg # shared platforms. 581249dc963fSmrg if test "$hardcode_direct" != unsupported; then 581349dc963fSmrg test -n "$old_library" && linklib="$old_library" 581449dc963fSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 581549dc963fSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 581649dc963fSmrg else 581749dc963fSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 581849dc963fSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 581949dc963fSmrg fi 582049dc963fSmrg elif test "$build_libtool_libs" = yes; then 582149dc963fSmrg # Not a shared library 582249dc963fSmrg if test "$deplibs_check_method" != pass_all; then 582349dc963fSmrg # We're trying link a shared library against a static one 582449dc963fSmrg # but the system doesn't support it. 582549dc963fSmrg 582649dc963fSmrg # Just print a warning and add the library to dependency_libs so 582749dc963fSmrg # that the program can be linked against the static library. 582849dc963fSmrg $ECHO 582949dc963fSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 583049dc963fSmrg $ECHO "*** I have the capability to make that library automatically link in when" 583149dc963fSmrg $ECHO "*** you link to this library. But I can only do this if you have a" 583249dc963fSmrg $ECHO "*** shared version of the library, which you do not appear to have." 583349dc963fSmrg if test "$module" = yes; then 583449dc963fSmrg $ECHO "*** But as you try to build a module library, libtool will still create " 583549dc963fSmrg $ECHO "*** a static module, that should work as long as the dlopening application" 583649dc963fSmrg $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." 583749dc963fSmrg if test -z "$global_symbol_pipe"; then 583849dc963fSmrg $ECHO 583949dc963fSmrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 584049dc963fSmrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 584149dc963fSmrg $ECHO "*** not find such a program. So, this module is probably useless." 584249dc963fSmrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 584349dc963fSmrg fi 584449dc963fSmrg if test "$build_old_libs" = no; then 584549dc963fSmrg build_libtool_libs=module 584649dc963fSmrg build_old_libs=yes 584749dc963fSmrg else 584849dc963fSmrg build_libtool_libs=no 584949dc963fSmrg fi 585049dc963fSmrg fi 585149dc963fSmrg else 585249dc963fSmrg deplibs="$dir/$old_library $deplibs" 585349dc963fSmrg link_static=yes 585449dc963fSmrg fi 585549dc963fSmrg fi # link shared/static library? 585649dc963fSmrg 585749dc963fSmrg if test "$linkmode" = lib; then 585849dc963fSmrg if test -n "$dependency_libs" && 585949dc963fSmrg { test "$hardcode_into_libs" != yes || 586049dc963fSmrg test "$build_old_libs" = yes || 586149dc963fSmrg test "$link_static" = yes; }; then 586249dc963fSmrg # Extract -R from dependency_libs 586349dc963fSmrg temp_deplibs= 586449dc963fSmrg for libdir in $dependency_libs; do 586549dc963fSmrg case $libdir in 586649dc963fSmrg -R*) func_stripname '-R' '' "$libdir" 586749dc963fSmrg temp_xrpath=$func_stripname_result 586849dc963fSmrg case " $xrpath " in 586949dc963fSmrg *" $temp_xrpath "*) ;; 587049dc963fSmrg *) xrpath="$xrpath $temp_xrpath";; 587149dc963fSmrg esac;; 587249dc963fSmrg *) temp_deplibs="$temp_deplibs $libdir";; 587349dc963fSmrg esac 587449dc963fSmrg done 587549dc963fSmrg dependency_libs="$temp_deplibs" 587649dc963fSmrg fi 587749dc963fSmrg 587849dc963fSmrg newlib_search_path="$newlib_search_path $absdir" 587949dc963fSmrg # Link against this library 588049dc963fSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 588149dc963fSmrg # ... and its dependency_libs 588249dc963fSmrg tmp_libs= 588349dc963fSmrg for deplib in $dependency_libs; do 588449dc963fSmrg newdependency_libs="$deplib $newdependency_libs" 588549dc963fSmrg if $opt_duplicate_deps ; then 588649dc963fSmrg case "$tmp_libs " in 588749dc963fSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 588849dc963fSmrg esac 588949dc963fSmrg fi 589049dc963fSmrg tmp_libs="$tmp_libs $deplib" 589149dc963fSmrg done 589249dc963fSmrg 589349dc963fSmrg if test "$link_all_deplibs" != no; then 589449dc963fSmrg # Add the search paths of all dependency libraries 589549dc963fSmrg for deplib in $dependency_libs; do 589649dc963fSmrg case $deplib in 589749dc963fSmrg -L*) path="$deplib" ;; 589849dc963fSmrg *.la) 589949dc963fSmrg func_dirname "$deplib" "" "." 590049dc963fSmrg dir="$func_dirname_result" 590149dc963fSmrg # We need an absolute path. 590249dc963fSmrg case $dir in 590349dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 590449dc963fSmrg *) 590549dc963fSmrg absdir=`cd "$dir" && pwd` 590649dc963fSmrg if test -z "$absdir"; then 590749dc963fSmrg func_warning "cannot determine absolute directory name of \`$dir'" 590849dc963fSmrg absdir="$dir" 590949dc963fSmrg fi 591049dc963fSmrg ;; 591149dc963fSmrg esac 591249dc963fSmrg if $GREP "^installed=no" $deplib > /dev/null; then 591349dc963fSmrg case $host in 591449dc963fSmrg *-*-darwin*) 591549dc963fSmrg depdepl= 591649dc963fSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 591749dc963fSmrg if test -n "$deplibrary_names" ; then 591849dc963fSmrg for tmp in $deplibrary_names ; do 591949dc963fSmrg depdepl=$tmp 592049dc963fSmrg done 592149dc963fSmrg if test -f "$absdir/$objdir/$depdepl" ; then 592249dc963fSmrg depdepl="$absdir/$objdir/$depdepl" 592349dc963fSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 592449dc963fSmrg if test -z "$darwin_install_name"; then 592549dc963fSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 592649dc963fSmrg fi 592749dc963fSmrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 592849dc963fSmrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 592949dc963fSmrg path= 593049dc963fSmrg fi 593149dc963fSmrg fi 593249dc963fSmrg ;; 593349dc963fSmrg *) 593449dc963fSmrg path="-L$absdir/$objdir" 593549dc963fSmrg ;; 593649dc963fSmrg esac 593749dc963fSmrg else 593849dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 593949dc963fSmrg test -z "$libdir" && \ 594049dc963fSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 594149dc963fSmrg test "$absdir" != "$libdir" && \ 594249dc963fSmrg func_warning "\`$deplib' seems to be moved" 594349dc963fSmrg 594449dc963fSmrg path="-L$absdir" 594549dc963fSmrg fi 594649dc963fSmrg ;; 594749dc963fSmrg esac 594849dc963fSmrg case " $deplibs " in 594949dc963fSmrg *" $path "*) ;; 595049dc963fSmrg *) deplibs="$path $deplibs" ;; 595149dc963fSmrg esac 595249dc963fSmrg done 595349dc963fSmrg fi # link_all_deplibs != no 595449dc963fSmrg fi # linkmode = lib 595549dc963fSmrg done # for deplib in $libs 595649dc963fSmrg if test "$pass" = link; then 595749dc963fSmrg if test "$linkmode" = "prog"; then 595849dc963fSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 595949dc963fSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 596049dc963fSmrg else 596149dc963fSmrg compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 596249dc963fSmrg fi 596349dc963fSmrg fi 596449dc963fSmrg dependency_libs="$newdependency_libs" 596549dc963fSmrg if test "$pass" = dlpreopen; then 596649dc963fSmrg # Link the dlpreopened libraries before other libraries 596749dc963fSmrg for deplib in $save_deplibs; do 596849dc963fSmrg deplibs="$deplib $deplibs" 596949dc963fSmrg done 597049dc963fSmrg fi 597149dc963fSmrg if test "$pass" != dlopen; then 597249dc963fSmrg if test "$pass" != conv; then 597349dc963fSmrg # Make sure lib_search_path contains only unique directories. 597449dc963fSmrg lib_search_path= 597549dc963fSmrg for dir in $newlib_search_path; do 597649dc963fSmrg case "$lib_search_path " in 597749dc963fSmrg *" $dir "*) ;; 597849dc963fSmrg *) lib_search_path="$lib_search_path $dir" ;; 597949dc963fSmrg esac 598049dc963fSmrg done 598149dc963fSmrg newlib_search_path= 598249dc963fSmrg fi 598349dc963fSmrg 598449dc963fSmrg if test "$linkmode,$pass" != "prog,link"; then 598549dc963fSmrg vars="deplibs" 598649dc963fSmrg else 598749dc963fSmrg vars="compile_deplibs finalize_deplibs" 598849dc963fSmrg fi 598949dc963fSmrg for var in $vars dependency_libs; do 599049dc963fSmrg # Add libraries to $var in reverse order 599149dc963fSmrg eval tmp_libs=\"\$$var\" 599249dc963fSmrg new_libs= 599349dc963fSmrg for deplib in $tmp_libs; do 599449dc963fSmrg # FIXME: Pedantically, this is the right thing to do, so 599549dc963fSmrg # that some nasty dependency loop isn't accidentally 599649dc963fSmrg # broken: 599749dc963fSmrg #new_libs="$deplib $new_libs" 599849dc963fSmrg # Pragmatically, this seems to cause very few problems in 599949dc963fSmrg # practice: 600049dc963fSmrg case $deplib in 600149dc963fSmrg -L*) new_libs="$deplib $new_libs" ;; 600249dc963fSmrg -R*) ;; 600349dc963fSmrg *) 600449dc963fSmrg # And here is the reason: when a library appears more 600549dc963fSmrg # than once as an explicit dependence of a library, or 600649dc963fSmrg # is implicitly linked in more than once by the 600749dc963fSmrg # compiler, it is considered special, and multiple 600849dc963fSmrg # occurrences thereof are not removed. Compare this 600949dc963fSmrg # with having the same library being listed as a 601049dc963fSmrg # dependency of multiple other libraries: in this case, 601149dc963fSmrg # we know (pedantically, we assume) the library does not 601249dc963fSmrg # need to be listed more than once, so we keep only the 601349dc963fSmrg # last copy. This is not always right, but it is rare 601449dc963fSmrg # enough that we require users that really mean to play 601549dc963fSmrg # such unportable linking tricks to link the library 601649dc963fSmrg # using -Wl,-lname, so that libtool does not consider it 601749dc963fSmrg # for duplicate removal. 601849dc963fSmrg case " $specialdeplibs " in 601949dc963fSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 602049dc963fSmrg *) 602149dc963fSmrg case " $new_libs " in 602249dc963fSmrg *" $deplib "*) ;; 602349dc963fSmrg *) new_libs="$deplib $new_libs" ;; 602449dc963fSmrg esac 602549dc963fSmrg ;; 602649dc963fSmrg esac 602749dc963fSmrg ;; 602849dc963fSmrg esac 602949dc963fSmrg done 603049dc963fSmrg tmp_libs= 603149dc963fSmrg for deplib in $new_libs; do 603249dc963fSmrg case $deplib in 603349dc963fSmrg -L*) 603449dc963fSmrg case " $tmp_libs " in 603549dc963fSmrg *" $deplib "*) ;; 603649dc963fSmrg *) tmp_libs="$tmp_libs $deplib" ;; 603749dc963fSmrg esac 603849dc963fSmrg ;; 603949dc963fSmrg *) tmp_libs="$tmp_libs $deplib" ;; 604049dc963fSmrg esac 604149dc963fSmrg done 604249dc963fSmrg eval $var=\"$tmp_libs\" 604349dc963fSmrg done # for var 604449dc963fSmrg fi 604549dc963fSmrg # Last step: remove runtime libs from dependency_libs 604649dc963fSmrg # (they stay in deplibs) 604749dc963fSmrg tmp_libs= 604849dc963fSmrg for i in $dependency_libs ; do 604949dc963fSmrg case " $predeps $postdeps $compiler_lib_search_path " in 605049dc963fSmrg *" $i "*) 605149dc963fSmrg i="" 605249dc963fSmrg ;; 605349dc963fSmrg esac 605449dc963fSmrg if test -n "$i" ; then 605549dc963fSmrg tmp_libs="$tmp_libs $i" 605649dc963fSmrg fi 605749dc963fSmrg done 605849dc963fSmrg dependency_libs=$tmp_libs 605949dc963fSmrg done # for pass 606049dc963fSmrg if test "$linkmode" = prog; then 606149dc963fSmrg dlfiles="$newdlfiles" 606249dc963fSmrg fi 606349dc963fSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 606449dc963fSmrg dlprefiles="$newdlprefiles" 606549dc963fSmrg fi 606649dc963fSmrg 606749dc963fSmrg case $linkmode in 606849dc963fSmrg oldlib) 606949dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 607049dc963fSmrg func_warning "\`-dlopen' is ignored for archives" 607149dc963fSmrg fi 607249dc963fSmrg 607349dc963fSmrg case " $deplibs" in 607449dc963fSmrg *\ -l* | *\ -L*) 607549dc963fSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 607649dc963fSmrg esac 607749dc963fSmrg 607849dc963fSmrg test -n "$rpath" && \ 607949dc963fSmrg func_warning "\`-rpath' is ignored for archives" 608049dc963fSmrg 608149dc963fSmrg test -n "$xrpath" && \ 608249dc963fSmrg func_warning "\`-R' is ignored for archives" 608349dc963fSmrg 608449dc963fSmrg test -n "$vinfo" && \ 608549dc963fSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 608649dc963fSmrg 608749dc963fSmrg test -n "$release" && \ 608849dc963fSmrg func_warning "\`-release' is ignored for archives" 608949dc963fSmrg 609049dc963fSmrg test -n "$export_symbols$export_symbols_regex" && \ 609149dc963fSmrg func_warning "\`-export-symbols' is ignored for archives" 609249dc963fSmrg 609349dc963fSmrg # Now set the variables for building old libraries. 609449dc963fSmrg build_libtool_libs=no 609549dc963fSmrg oldlibs="$output" 609649dc963fSmrg objs="$objs$old_deplibs" 609749dc963fSmrg ;; 609849dc963fSmrg 609949dc963fSmrg lib) 610049dc963fSmrg # Make sure we only generate libraries of the form `libNAME.la'. 610149dc963fSmrg case $outputname in 610249dc963fSmrg lib*) 610349dc963fSmrg func_stripname 'lib' '.la' "$outputname" 610449dc963fSmrg name=$func_stripname_result 610549dc963fSmrg eval shared_ext=\"$shrext_cmds\" 610649dc963fSmrg eval libname=\"$libname_spec\" 610749dc963fSmrg ;; 610849dc963fSmrg *) 610949dc963fSmrg test "$module" = no && \ 611049dc963fSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 611149dc963fSmrg 611249dc963fSmrg if test "$need_lib_prefix" != no; then 611349dc963fSmrg # Add the "lib" prefix for modules if required 611449dc963fSmrg func_stripname '' '.la' "$outputname" 611549dc963fSmrg name=$func_stripname_result 611649dc963fSmrg eval shared_ext=\"$shrext_cmds\" 611749dc963fSmrg eval libname=\"$libname_spec\" 611849dc963fSmrg else 611949dc963fSmrg func_stripname '' '.la' "$outputname" 612049dc963fSmrg libname=$func_stripname_result 612149dc963fSmrg fi 612249dc963fSmrg ;; 612349dc963fSmrg esac 612449dc963fSmrg 612549dc963fSmrg if test -n "$objs"; then 612649dc963fSmrg if test "$deplibs_check_method" != pass_all; then 612749dc963fSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 612849dc963fSmrg else 612949dc963fSmrg $ECHO 613049dc963fSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 613149dc963fSmrg $ECHO "*** objects $objs is not portable!" 613249dc963fSmrg libobjs="$libobjs $objs" 613349dc963fSmrg fi 613449dc963fSmrg fi 613549dc963fSmrg 613649dc963fSmrg test "$dlself" != no && \ 613749dc963fSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 613849dc963fSmrg 613949dc963fSmrg set dummy $rpath 614049dc963fSmrg shift 614149dc963fSmrg test "$#" -gt 1 && \ 614249dc963fSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 614349dc963fSmrg 614449dc963fSmrg install_libdir="$1" 614549dc963fSmrg 614649dc963fSmrg oldlibs= 614749dc963fSmrg if test -z "$rpath"; then 614849dc963fSmrg if test "$build_libtool_libs" = yes; then 614949dc963fSmrg # Building a libtool convenience library. 615049dc963fSmrg # Some compilers have problems with a `.al' extension so 615149dc963fSmrg # convenience libraries should have the same extension an 615249dc963fSmrg # archive normally would. 615349dc963fSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 615449dc963fSmrg build_libtool_libs=convenience 615549dc963fSmrg build_old_libs=yes 615649dc963fSmrg fi 615749dc963fSmrg 615849dc963fSmrg test -n "$vinfo" && \ 615949dc963fSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 616049dc963fSmrg 616149dc963fSmrg test -n "$release" && \ 616249dc963fSmrg func_warning "\`-release' is ignored for convenience libraries" 616349dc963fSmrg else 616449dc963fSmrg 616549dc963fSmrg # Parse the version information argument. 616649dc963fSmrg save_ifs="$IFS"; IFS=':' 616749dc963fSmrg set dummy $vinfo 0 0 0 616849dc963fSmrg shift 616949dc963fSmrg IFS="$save_ifs" 617049dc963fSmrg 617149dc963fSmrg test -n "$7" && \ 617249dc963fSmrg func_fatal_help "too many parameters to \`-version-info'" 617349dc963fSmrg 617449dc963fSmrg # convert absolute version numbers to libtool ages 617549dc963fSmrg # this retains compatibility with .la files and attempts 617649dc963fSmrg # to make the code below a bit more comprehensible 617749dc963fSmrg 617849dc963fSmrg case $vinfo_number in 617949dc963fSmrg yes) 618049dc963fSmrg number_major="$1" 618149dc963fSmrg number_minor="$2" 618249dc963fSmrg number_revision="$3" 618349dc963fSmrg # 618449dc963fSmrg # There are really only two kinds -- those that 618549dc963fSmrg # use the current revision as the major version 618649dc963fSmrg # and those that subtract age and use age as 618749dc963fSmrg # a minor version. But, then there is irix 618849dc963fSmrg # which has an extra 1 added just for fun 618949dc963fSmrg # 619049dc963fSmrg case $version_type in 619149dc963fSmrg darwin|linux|osf|windows|none) 619249dc963fSmrg func_arith $number_major + $number_minor 619349dc963fSmrg current=$func_arith_result 619449dc963fSmrg age="$number_minor" 619549dc963fSmrg revision="$number_revision" 619649dc963fSmrg ;; 619749dc963fSmrg freebsd-aout|freebsd-elf|sunos) 619849dc963fSmrg current="$number_major" 619949dc963fSmrg revision="$number_minor" 620049dc963fSmrg age="0" 620149dc963fSmrg ;; 620249dc963fSmrg irix|nonstopux) 620349dc963fSmrg func_arith $number_major + $number_minor 620449dc963fSmrg current=$func_arith_result 620549dc963fSmrg age="$number_minor" 620649dc963fSmrg revision="$number_minor" 620749dc963fSmrg lt_irix_increment=no 620849dc963fSmrg ;; 620949dc963fSmrg esac 621049dc963fSmrg ;; 621149dc963fSmrg no) 621249dc963fSmrg current="$1" 621349dc963fSmrg revision="$2" 621449dc963fSmrg age="$3" 621549dc963fSmrg ;; 621649dc963fSmrg esac 621749dc963fSmrg 621849dc963fSmrg # Check that each of the things are valid numbers. 621949dc963fSmrg case $current in 622049dc963fSmrg 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]) ;; 622149dc963fSmrg *) 622249dc963fSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 622349dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 622449dc963fSmrg ;; 622549dc963fSmrg esac 622649dc963fSmrg 622749dc963fSmrg case $revision in 622849dc963fSmrg 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]) ;; 622949dc963fSmrg *) 623049dc963fSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 623149dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 623249dc963fSmrg ;; 623349dc963fSmrg esac 623449dc963fSmrg 623549dc963fSmrg case $age in 623649dc963fSmrg 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]) ;; 623749dc963fSmrg *) 623849dc963fSmrg func_error "AGE \`$age' must be a nonnegative integer" 623949dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 624049dc963fSmrg ;; 624149dc963fSmrg esac 624249dc963fSmrg 624349dc963fSmrg if test "$age" -gt "$current"; then 624449dc963fSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 624549dc963fSmrg func_fatal_error "\`$vinfo' is not valid version information" 624649dc963fSmrg fi 624749dc963fSmrg 624849dc963fSmrg # Calculate the version variables. 624949dc963fSmrg major= 625049dc963fSmrg versuffix= 625149dc963fSmrg verstring= 625249dc963fSmrg case $version_type in 625349dc963fSmrg none) ;; 625449dc963fSmrg 625549dc963fSmrg darwin) 625649dc963fSmrg # Like Linux, but with the current version available in 625749dc963fSmrg # verstring for coding it into the library header 625849dc963fSmrg func_arith $current - $age 625949dc963fSmrg major=.$func_arith_result 626049dc963fSmrg versuffix="$major.$age.$revision" 626149dc963fSmrg # Darwin ld doesn't like 0 for these options... 626249dc963fSmrg func_arith $current + 1 626349dc963fSmrg minor_current=$func_arith_result 626449dc963fSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 626549dc963fSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 626649dc963fSmrg ;; 626749dc963fSmrg 626849dc963fSmrg freebsd-aout) 626949dc963fSmrg major=".$current" 627049dc963fSmrg versuffix=".$current.$revision"; 627149dc963fSmrg ;; 627249dc963fSmrg 627349dc963fSmrg freebsd-elf) 627449dc963fSmrg major=".$current" 627549dc963fSmrg versuffix=".$current" 627649dc963fSmrg ;; 627749dc963fSmrg 627849dc963fSmrg irix | nonstopux) 627949dc963fSmrg if test "X$lt_irix_increment" = "Xno"; then 628049dc963fSmrg func_arith $current - $age 628149dc963fSmrg else 628249dc963fSmrg func_arith $current - $age + 1 628349dc963fSmrg fi 628449dc963fSmrg major=$func_arith_result 628549dc963fSmrg 628649dc963fSmrg case $version_type in 628749dc963fSmrg nonstopux) verstring_prefix=nonstopux ;; 628849dc963fSmrg *) verstring_prefix=sgi ;; 628949dc963fSmrg esac 629049dc963fSmrg verstring="$verstring_prefix$major.$revision" 629149dc963fSmrg 629249dc963fSmrg # Add in all the interfaces that we are compatible with. 629349dc963fSmrg loop=$revision 629449dc963fSmrg while test "$loop" -ne 0; do 629549dc963fSmrg func_arith $revision - $loop 629649dc963fSmrg iface=$func_arith_result 629749dc963fSmrg func_arith $loop - 1 629849dc963fSmrg loop=$func_arith_result 629949dc963fSmrg verstring="$verstring_prefix$major.$iface:$verstring" 630049dc963fSmrg done 630149dc963fSmrg 630249dc963fSmrg # Before this point, $major must not contain `.'. 630349dc963fSmrg major=.$major 630449dc963fSmrg versuffix="$major.$revision" 630549dc963fSmrg ;; 630649dc963fSmrg 630749dc963fSmrg linux) 630849dc963fSmrg func_arith $current - $age 630949dc963fSmrg major=.$func_arith_result 631049dc963fSmrg versuffix="$major.$age.$revision" 631149dc963fSmrg ;; 631249dc963fSmrg 631349dc963fSmrg osf) 631449dc963fSmrg func_arith $current - $age 631549dc963fSmrg major=.$func_arith_result 631649dc963fSmrg versuffix=".$current.$age.$revision" 631749dc963fSmrg verstring="$current.$age.$revision" 631849dc963fSmrg 631949dc963fSmrg # Add in all the interfaces that we are compatible with. 632049dc963fSmrg loop=$age 632149dc963fSmrg while test "$loop" -ne 0; do 632249dc963fSmrg func_arith $current - $loop 632349dc963fSmrg iface=$func_arith_result 632449dc963fSmrg func_arith $loop - 1 632549dc963fSmrg loop=$func_arith_result 632649dc963fSmrg verstring="$verstring:${iface}.0" 632749dc963fSmrg done 632849dc963fSmrg 632949dc963fSmrg # Make executables depend on our current version. 633049dc963fSmrg verstring="$verstring:${current}.0" 633149dc963fSmrg ;; 633249dc963fSmrg 633349dc963fSmrg qnx) 633449dc963fSmrg major=".$current" 633549dc963fSmrg versuffix=".$current" 633649dc963fSmrg ;; 633749dc963fSmrg 633849dc963fSmrg sunos) 633949dc963fSmrg major=".$current" 634049dc963fSmrg versuffix=".$current.$revision" 634149dc963fSmrg ;; 634249dc963fSmrg 634349dc963fSmrg windows) 634449dc963fSmrg # Use '-' rather than '.', since we only want one 634549dc963fSmrg # extension on DOS 8.3 filesystems. 634649dc963fSmrg func_arith $current - $age 634749dc963fSmrg major=$func_arith_result 634849dc963fSmrg versuffix="-$major" 634949dc963fSmrg ;; 635049dc963fSmrg 635149dc963fSmrg *) 635249dc963fSmrg func_fatal_configuration "unknown library version type \`$version_type'" 635349dc963fSmrg ;; 635449dc963fSmrg esac 635549dc963fSmrg 635649dc963fSmrg # Clear the version info if we defaulted, and they specified a release. 635749dc963fSmrg if test -z "$vinfo" && test -n "$release"; then 635849dc963fSmrg major= 635949dc963fSmrg case $version_type in 636049dc963fSmrg darwin) 636149dc963fSmrg # we can't check for "0.0" in archive_cmds due to quoting 636249dc963fSmrg # problems, so we reset it completely 636349dc963fSmrg verstring= 636449dc963fSmrg ;; 636549dc963fSmrg *) 636649dc963fSmrg verstring="0.0" 636749dc963fSmrg ;; 636849dc963fSmrg esac 636949dc963fSmrg if test "$need_version" = no; then 637049dc963fSmrg versuffix= 637149dc963fSmrg else 637249dc963fSmrg versuffix=".0.0" 637349dc963fSmrg fi 637449dc963fSmrg fi 637549dc963fSmrg 637649dc963fSmrg # Remove version info from name if versioning should be avoided 637749dc963fSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 637849dc963fSmrg major= 637949dc963fSmrg versuffix= 638049dc963fSmrg verstring="" 638149dc963fSmrg fi 638249dc963fSmrg 638349dc963fSmrg # Check to see if the archive will have undefined symbols. 638449dc963fSmrg if test "$allow_undefined" = yes; then 638549dc963fSmrg if test "$allow_undefined_flag" = unsupported; then 638649dc963fSmrg func_warning "undefined symbols not allowed in $host shared libraries" 638749dc963fSmrg build_libtool_libs=no 638849dc963fSmrg build_old_libs=yes 638949dc963fSmrg fi 639049dc963fSmrg else 639149dc963fSmrg # Don't allow undefined symbols. 639249dc963fSmrg allow_undefined_flag="$no_undefined_flag" 639349dc963fSmrg fi 639449dc963fSmrg 639549dc963fSmrg fi 639649dc963fSmrg 639749dc963fSmrg func_generate_dlsyms "$libname" "$libname" "yes" 639849dc963fSmrg libobjs="$libobjs $symfileobj" 639949dc963fSmrg test "X$libobjs" = "X " && libobjs= 640049dc963fSmrg 640149dc963fSmrg if test "$mode" != relink; then 640249dc963fSmrg # Remove our outputs, but don't remove object files since they 640349dc963fSmrg # may have been created when compiling PIC objects. 640449dc963fSmrg removelist= 640549dc963fSmrg tempremovelist=`$ECHO "$output_objdir/*"` 640649dc963fSmrg for p in $tempremovelist; do 640749dc963fSmrg case $p in 640849dc963fSmrg *.$objext | *.gcno) 640949dc963fSmrg ;; 641049dc963fSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 641149dc963fSmrg if test "X$precious_files_regex" != "X"; then 641249dc963fSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 641349dc963fSmrg then 641449dc963fSmrg continue 641549dc963fSmrg fi 641649dc963fSmrg fi 641749dc963fSmrg removelist="$removelist $p" 641849dc963fSmrg ;; 641949dc963fSmrg *) ;; 642049dc963fSmrg esac 642149dc963fSmrg done 642249dc963fSmrg test -n "$removelist" && \ 642349dc963fSmrg func_show_eval "${RM}r \$removelist" 642449dc963fSmrg fi 642549dc963fSmrg 642649dc963fSmrg # Now set the variables for building old libraries. 642749dc963fSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 642849dc963fSmrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 642949dc963fSmrg 643049dc963fSmrg # Transform .lo files to .o files. 643149dc963fSmrg oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 643249dc963fSmrg fi 643349dc963fSmrg 643449dc963fSmrg # Eliminate all temporary directories. 643549dc963fSmrg #for path in $notinst_path; do 643649dc963fSmrg # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` 643749dc963fSmrg # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` 643849dc963fSmrg # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` 643949dc963fSmrg #done 644049dc963fSmrg 644149dc963fSmrg if test -n "$xrpath"; then 644249dc963fSmrg # If the user specified any rpath flags, then add them. 644349dc963fSmrg temp_xrpath= 644449dc963fSmrg for libdir in $xrpath; do 644549dc963fSmrg temp_xrpath="$temp_xrpath -R$libdir" 644649dc963fSmrg case "$finalize_rpath " in 644749dc963fSmrg *" $libdir "*) ;; 644849dc963fSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 644949dc963fSmrg esac 645049dc963fSmrg done 645149dc963fSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 645249dc963fSmrg dependency_libs="$temp_xrpath $dependency_libs" 645349dc963fSmrg fi 645449dc963fSmrg fi 645549dc963fSmrg 645649dc963fSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 645749dc963fSmrg old_dlfiles="$dlfiles" 645849dc963fSmrg dlfiles= 645949dc963fSmrg for lib in $old_dlfiles; do 646049dc963fSmrg case " $dlprefiles $dlfiles " in 646149dc963fSmrg *" $lib "*) ;; 646249dc963fSmrg *) dlfiles="$dlfiles $lib" ;; 646349dc963fSmrg esac 646449dc963fSmrg done 646549dc963fSmrg 646649dc963fSmrg # Make sure dlprefiles contains only unique files 646749dc963fSmrg old_dlprefiles="$dlprefiles" 646849dc963fSmrg dlprefiles= 646949dc963fSmrg for lib in $old_dlprefiles; do 647049dc963fSmrg case "$dlprefiles " in 647149dc963fSmrg *" $lib "*) ;; 647249dc963fSmrg *) dlprefiles="$dlprefiles $lib" ;; 647349dc963fSmrg esac 647449dc963fSmrg done 647549dc963fSmrg 647649dc963fSmrg if test "$build_libtool_libs" = yes; then 647749dc963fSmrg if test -n "$rpath"; then 647849dc963fSmrg case $host in 647949dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) 648049dc963fSmrg # these systems don't actually have a c library (as such)! 648149dc963fSmrg ;; 648249dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 648349dc963fSmrg # Rhapsody C library is in the System framework 648449dc963fSmrg deplibs="$deplibs System.ltframework" 648549dc963fSmrg ;; 648649dc963fSmrg *-*-netbsd*) 648749dc963fSmrg # Don't link with libc until the a.out ld.so is fixed. 648849dc963fSmrg ;; 648949dc963fSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 649049dc963fSmrg # Do not include libc due to us having libc/libc_r. 649149dc963fSmrg ;; 649249dc963fSmrg *-*-sco3.2v5* | *-*-sco5v6*) 649349dc963fSmrg # Causes problems with __ctype 649449dc963fSmrg ;; 649549dc963fSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 649649dc963fSmrg # Compiler inserts libc in the correct place for threads to work 649749dc963fSmrg ;; 649849dc963fSmrg *) 649949dc963fSmrg # Add libc to deplibs on all other systems if necessary. 650049dc963fSmrg if test "$build_libtool_need_lc" = "yes"; then 650149dc963fSmrg deplibs="$deplibs -lc" 650249dc963fSmrg fi 650349dc963fSmrg ;; 650449dc963fSmrg esac 650549dc963fSmrg fi 650649dc963fSmrg 650749dc963fSmrg # Transform deplibs into only deplibs that can be linked in shared. 650849dc963fSmrg name_save=$name 650949dc963fSmrg libname_save=$libname 651049dc963fSmrg release_save=$release 651149dc963fSmrg versuffix_save=$versuffix 651249dc963fSmrg major_save=$major 651349dc963fSmrg # I'm not sure if I'm treating the release correctly. I think 651449dc963fSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 651549dc963fSmrg # add it in twice. Is that correct? 651649dc963fSmrg release="" 651749dc963fSmrg versuffix="" 651849dc963fSmrg major="" 651949dc963fSmrg newdeplibs= 652049dc963fSmrg droppeddeps=no 652149dc963fSmrg case $deplibs_check_method in 652249dc963fSmrg pass_all) 652349dc963fSmrg # Don't check for shared/static. Everything works. 652449dc963fSmrg # This might be a little naive. We might want to check 652549dc963fSmrg # whether the library exists or not. But this is on 652649dc963fSmrg # osf3 & osf4 and I'm not really sure... Just 652749dc963fSmrg # implementing what was already the behavior. 652849dc963fSmrg newdeplibs=$deplibs 652949dc963fSmrg ;; 653049dc963fSmrg test_compile) 653149dc963fSmrg # This code stresses the "libraries are programs" paradigm to its 653249dc963fSmrg # limits. Maybe even breaks it. We compile a program, linking it 653349dc963fSmrg # against the deplibs as a proxy for the library. Then we can check 653449dc963fSmrg # whether they linked in statically or dynamically with ldd. 653549dc963fSmrg $opt_dry_run || $RM conftest.c 653649dc963fSmrg cat > conftest.c <<EOF 653749dc963fSmrg int main() { return 0; } 653849dc963fSmrgEOF 653949dc963fSmrg $opt_dry_run || $RM conftest 654049dc963fSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 654149dc963fSmrg ldd_output=`ldd conftest` 654249dc963fSmrg for i in $deplibs; do 654349dc963fSmrg case $i in 654449dc963fSmrg -l*) 654549dc963fSmrg func_stripname -l '' "$i" 654649dc963fSmrg name=$func_stripname_result 654749dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 654849dc963fSmrg case " $predeps $postdeps " in 654949dc963fSmrg *" $i "*) 655049dc963fSmrg newdeplibs="$newdeplibs $i" 655149dc963fSmrg i="" 655249dc963fSmrg ;; 655349dc963fSmrg esac 655449dc963fSmrg fi 655549dc963fSmrg if test -n "$i" ; then 655649dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 655749dc963fSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 655849dc963fSmrg set dummy $deplib_matches; shift 655949dc963fSmrg deplib_match=$1 656049dc963fSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 656149dc963fSmrg newdeplibs="$newdeplibs $i" 656249dc963fSmrg else 656349dc963fSmrg droppeddeps=yes 656449dc963fSmrg $ECHO 656549dc963fSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 656649dc963fSmrg $ECHO "*** I have the capability to make that library automatically link in when" 656749dc963fSmrg $ECHO "*** you link to this library. But I can only do this if you have a" 656849dc963fSmrg $ECHO "*** shared version of the library, which I believe you do not have" 656949dc963fSmrg $ECHO "*** because a test_compile did reveal that the linker did not use it for" 657049dc963fSmrg $ECHO "*** its dynamic dependency list that programs get resolved with at runtime." 657149dc963fSmrg fi 657249dc963fSmrg fi 657349dc963fSmrg ;; 657449dc963fSmrg *) 657549dc963fSmrg newdeplibs="$newdeplibs $i" 657649dc963fSmrg ;; 657749dc963fSmrg esac 657849dc963fSmrg done 657949dc963fSmrg else 658049dc963fSmrg # Error occurred in the first compile. Let's try to salvage 658149dc963fSmrg # the situation: Compile a separate program for each library. 658249dc963fSmrg for i in $deplibs; do 658349dc963fSmrg case $i in 658449dc963fSmrg -l*) 658549dc963fSmrg func_stripname -l '' "$i" 658649dc963fSmrg name=$func_stripname_result 658749dc963fSmrg $opt_dry_run || $RM conftest 658849dc963fSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 658949dc963fSmrg ldd_output=`ldd conftest` 659049dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 659149dc963fSmrg case " $predeps $postdeps " in 659249dc963fSmrg *" $i "*) 659349dc963fSmrg newdeplibs="$newdeplibs $i" 659449dc963fSmrg i="" 659549dc963fSmrg ;; 659649dc963fSmrg esac 659749dc963fSmrg fi 659849dc963fSmrg if test -n "$i" ; then 659949dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 660049dc963fSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 660149dc963fSmrg set dummy $deplib_matches; shift 660249dc963fSmrg deplib_match=$1 660349dc963fSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 660449dc963fSmrg newdeplibs="$newdeplibs $i" 660549dc963fSmrg else 660649dc963fSmrg droppeddeps=yes 660749dc963fSmrg $ECHO 660849dc963fSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 660949dc963fSmrg $ECHO "*** I have the capability to make that library automatically link in when" 661049dc963fSmrg $ECHO "*** you link to this library. But I can only do this if you have a" 661149dc963fSmrg $ECHO "*** shared version of the library, which you do not appear to have" 661249dc963fSmrg $ECHO "*** because a test_compile did reveal that the linker did not use this one" 661349dc963fSmrg $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime." 661449dc963fSmrg fi 661549dc963fSmrg fi 661649dc963fSmrg else 661749dc963fSmrg droppeddeps=yes 661849dc963fSmrg $ECHO 661949dc963fSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 662049dc963fSmrg $ECHO "*** make it link in! You will probably need to install it or some" 662149dc963fSmrg $ECHO "*** library that it depends on before this library will be fully" 662249dc963fSmrg $ECHO "*** functional. Installing it before continuing would be even better." 662349dc963fSmrg fi 662449dc963fSmrg ;; 662549dc963fSmrg *) 662649dc963fSmrg newdeplibs="$newdeplibs $i" 662749dc963fSmrg ;; 662849dc963fSmrg esac 662949dc963fSmrg done 663049dc963fSmrg fi 663149dc963fSmrg ;; 663249dc963fSmrg file_magic*) 663349dc963fSmrg set dummy $deplibs_check_method; shift 663449dc963fSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 663549dc963fSmrg for a_deplib in $deplibs; do 663649dc963fSmrg case $a_deplib in 663749dc963fSmrg -l*) 663849dc963fSmrg func_stripname -l '' "$a_deplib" 663949dc963fSmrg name=$func_stripname_result 664049dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 664149dc963fSmrg case " $predeps $postdeps " in 664249dc963fSmrg *" $a_deplib "*) 664349dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 664449dc963fSmrg a_deplib="" 664549dc963fSmrg ;; 664649dc963fSmrg esac 664749dc963fSmrg fi 664849dc963fSmrg if test -n "$a_deplib" ; then 664949dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 665049dc963fSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 665149dc963fSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 665249dc963fSmrg for potent_lib in $potential_libs; do 665349dc963fSmrg # Follow soft links. 665449dc963fSmrg if ls -lLd "$potent_lib" 2>/dev/null | 665549dc963fSmrg $GREP " -> " >/dev/null; then 665649dc963fSmrg continue 665749dc963fSmrg fi 665849dc963fSmrg # The statement above tries to avoid entering an 665949dc963fSmrg # endless loop below, in case of cyclic links. 666049dc963fSmrg # We might still enter an endless loop, since a link 666149dc963fSmrg # loop can be closed while we follow links, 666249dc963fSmrg # but so what? 666349dc963fSmrg potlib="$potent_lib" 666449dc963fSmrg while test -h "$potlib" 2>/dev/null; do 666549dc963fSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 666649dc963fSmrg case $potliblink in 666749dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 666849dc963fSmrg *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 666949dc963fSmrg esac 667049dc963fSmrg done 667149dc963fSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 667249dc963fSmrg $SED -e 10q | 667349dc963fSmrg $EGREP "$file_magic_regex" > /dev/null; then 667449dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 667549dc963fSmrg a_deplib="" 667649dc963fSmrg break 2 667749dc963fSmrg fi 667849dc963fSmrg done 667949dc963fSmrg done 668049dc963fSmrg fi 668149dc963fSmrg if test -n "$a_deplib" ; then 668249dc963fSmrg droppeddeps=yes 668349dc963fSmrg $ECHO 668449dc963fSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 668549dc963fSmrg $ECHO "*** I have the capability to make that library automatically link in when" 668649dc963fSmrg $ECHO "*** you link to this library. But I can only do this if you have a" 668749dc963fSmrg $ECHO "*** shared version of the library, which you do not appear to have" 668849dc963fSmrg $ECHO "*** because I did check the linker path looking for a file starting" 668949dc963fSmrg if test -z "$potlib" ; then 669049dc963fSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 669149dc963fSmrg else 669249dc963fSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 669349dc963fSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 669449dc963fSmrg fi 669549dc963fSmrg fi 669649dc963fSmrg ;; 669749dc963fSmrg *) 669849dc963fSmrg # Add a -L argument. 669949dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 670049dc963fSmrg ;; 670149dc963fSmrg esac 670249dc963fSmrg done # Gone through all deplibs. 670349dc963fSmrg ;; 670449dc963fSmrg match_pattern*) 670549dc963fSmrg set dummy $deplibs_check_method; shift 670649dc963fSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 670749dc963fSmrg for a_deplib in $deplibs; do 670849dc963fSmrg case $a_deplib in 670949dc963fSmrg -l*) 671049dc963fSmrg func_stripname -l '' "$a_deplib" 671149dc963fSmrg name=$func_stripname_result 671249dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 671349dc963fSmrg case " $predeps $postdeps " in 671449dc963fSmrg *" $a_deplib "*) 671549dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 671649dc963fSmrg a_deplib="" 671749dc963fSmrg ;; 671849dc963fSmrg esac 671949dc963fSmrg fi 672049dc963fSmrg if test -n "$a_deplib" ; then 672149dc963fSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 672249dc963fSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 672349dc963fSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 672449dc963fSmrg for potent_lib in $potential_libs; do 672549dc963fSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 672649dc963fSmrg if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ 672749dc963fSmrg $EGREP "$match_pattern_regex" > /dev/null; then 672849dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 672949dc963fSmrg a_deplib="" 673049dc963fSmrg break 2 673149dc963fSmrg fi 673249dc963fSmrg done 673349dc963fSmrg done 673449dc963fSmrg fi 673549dc963fSmrg if test -n "$a_deplib" ; then 673649dc963fSmrg droppeddeps=yes 673749dc963fSmrg $ECHO 673849dc963fSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 673949dc963fSmrg $ECHO "*** I have the capability to make that library automatically link in when" 674049dc963fSmrg $ECHO "*** you link to this library. But I can only do this if you have a" 674149dc963fSmrg $ECHO "*** shared version of the library, which you do not appear to have" 674249dc963fSmrg $ECHO "*** because I did check the linker path looking for a file starting" 674349dc963fSmrg if test -z "$potlib" ; then 674449dc963fSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 674549dc963fSmrg else 674649dc963fSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 674749dc963fSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 674849dc963fSmrg fi 674949dc963fSmrg fi 675049dc963fSmrg ;; 675149dc963fSmrg *) 675249dc963fSmrg # Add a -L argument. 675349dc963fSmrg newdeplibs="$newdeplibs $a_deplib" 675449dc963fSmrg ;; 675549dc963fSmrg esac 675649dc963fSmrg done # Gone through all deplibs. 675749dc963fSmrg ;; 675849dc963fSmrg none | unknown | *) 675949dc963fSmrg newdeplibs="" 676049dc963fSmrg tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ 676149dc963fSmrg -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` 676249dc963fSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 676349dc963fSmrg for i in $predeps $postdeps ; do 676449dc963fSmrg # can't use Xsed below, because $i might contain '/' 676549dc963fSmrg tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` 676649dc963fSmrg done 676749dc963fSmrg fi 676849dc963fSmrg if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | 676949dc963fSmrg $GREP . >/dev/null; then 677049dc963fSmrg $ECHO 677149dc963fSmrg if test "X$deplibs_check_method" = "Xnone"; then 677249dc963fSmrg $ECHO "*** Warning: inter-library dependencies are not supported in this platform." 677349dc963fSmrg else 677449dc963fSmrg $ECHO "*** Warning: inter-library dependencies are not known to be supported." 677549dc963fSmrg fi 677649dc963fSmrg $ECHO "*** All declared inter-library dependencies are being dropped." 677749dc963fSmrg droppeddeps=yes 677849dc963fSmrg fi 677949dc963fSmrg ;; 678049dc963fSmrg esac 678149dc963fSmrg versuffix=$versuffix_save 678249dc963fSmrg major=$major_save 678349dc963fSmrg release=$release_save 678449dc963fSmrg libname=$libname_save 678549dc963fSmrg name=$name_save 678649dc963fSmrg 678749dc963fSmrg case $host in 678849dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 678949dc963fSmrg # On Rhapsody replace the C library with the System framework 679049dc963fSmrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 679149dc963fSmrg ;; 679249dc963fSmrg esac 679349dc963fSmrg 679449dc963fSmrg if test "$droppeddeps" = yes; then 679549dc963fSmrg if test "$module" = yes; then 679649dc963fSmrg $ECHO 679749dc963fSmrg $ECHO "*** Warning: libtool could not satisfy all declared inter-library" 679849dc963fSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 679949dc963fSmrg $ECHO "*** a static module, that should work as long as the dlopening" 680049dc963fSmrg $ECHO "*** application is linked with the -dlopen flag." 680149dc963fSmrg if test -z "$global_symbol_pipe"; then 680249dc963fSmrg $ECHO 680349dc963fSmrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 680449dc963fSmrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 680549dc963fSmrg $ECHO "*** not find such a program. So, this module is probably useless." 680649dc963fSmrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 680749dc963fSmrg fi 680849dc963fSmrg if test "$build_old_libs" = no; then 680949dc963fSmrg oldlibs="$output_objdir/$libname.$libext" 681049dc963fSmrg build_libtool_libs=module 681149dc963fSmrg build_old_libs=yes 681249dc963fSmrg else 681349dc963fSmrg build_libtool_libs=no 681449dc963fSmrg fi 681549dc963fSmrg else 681649dc963fSmrg $ECHO "*** The inter-library dependencies that have been dropped here will be" 681749dc963fSmrg $ECHO "*** automatically added whenever a program is linked with this library" 681849dc963fSmrg $ECHO "*** or is declared to -dlopen it." 681949dc963fSmrg 682049dc963fSmrg if test "$allow_undefined" = no; then 682149dc963fSmrg $ECHO 682249dc963fSmrg $ECHO "*** Since this library must not contain undefined symbols," 682349dc963fSmrg $ECHO "*** because either the platform does not support them or" 682449dc963fSmrg $ECHO "*** it was explicitly requested with -no-undefined," 682549dc963fSmrg $ECHO "*** libtool will only create a static version of it." 682649dc963fSmrg if test "$build_old_libs" = no; then 682749dc963fSmrg oldlibs="$output_objdir/$libname.$libext" 682849dc963fSmrg build_libtool_libs=module 682949dc963fSmrg build_old_libs=yes 683049dc963fSmrg else 683149dc963fSmrg build_libtool_libs=no 683249dc963fSmrg fi 683349dc963fSmrg fi 683449dc963fSmrg fi 683549dc963fSmrg fi 683649dc963fSmrg # Done checking deplibs! 683749dc963fSmrg deplibs=$newdeplibs 683849dc963fSmrg fi 683949dc963fSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 684049dc963fSmrg case $host in 684149dc963fSmrg *-*-darwin*) 684249dc963fSmrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684349dc963fSmrg new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684449dc963fSmrg deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684549dc963fSmrg ;; 684649dc963fSmrg esac 684749dc963fSmrg 684849dc963fSmrg # move library search paths that coincide with paths to not yet 684949dc963fSmrg # installed libraries to the beginning of the library search list 685049dc963fSmrg new_libs= 685149dc963fSmrg for path in $notinst_path; do 685249dc963fSmrg case " $new_libs " in 685349dc963fSmrg *" -L$path/$objdir "*) ;; 685449dc963fSmrg *) 685549dc963fSmrg case " $deplibs " in 685649dc963fSmrg *" -L$path/$objdir "*) 685749dc963fSmrg new_libs="$new_libs -L$path/$objdir" ;; 685849dc963fSmrg esac 685949dc963fSmrg ;; 686049dc963fSmrg esac 686149dc963fSmrg done 686249dc963fSmrg for deplib in $deplibs; do 686349dc963fSmrg case $deplib in 686449dc963fSmrg -L*) 686549dc963fSmrg case " $new_libs " in 686649dc963fSmrg *" $deplib "*) ;; 686749dc963fSmrg *) new_libs="$new_libs $deplib" ;; 686849dc963fSmrg esac 686949dc963fSmrg ;; 687049dc963fSmrg *) new_libs="$new_libs $deplib" ;; 687149dc963fSmrg esac 687249dc963fSmrg done 687349dc963fSmrg deplibs="$new_libs" 687449dc963fSmrg 687549dc963fSmrg # All the library-specific variables (install_libdir is set above). 687649dc963fSmrg library_names= 687749dc963fSmrg old_library= 687849dc963fSmrg dlname= 687949dc963fSmrg 688049dc963fSmrg # Test again, we may have decided not to build it any more 688149dc963fSmrg if test "$build_libtool_libs" = yes; then 688249dc963fSmrg if test "$hardcode_into_libs" = yes; then 688349dc963fSmrg # Hardcode the library paths 688449dc963fSmrg hardcode_libdirs= 688549dc963fSmrg dep_rpath= 688649dc963fSmrg rpath="$finalize_rpath" 688749dc963fSmrg test "$mode" != relink && rpath="$compile_rpath$rpath" 688849dc963fSmrg for libdir in $rpath; do 688949dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 689049dc963fSmrg if test -n "$hardcode_libdir_separator"; then 689149dc963fSmrg if test -z "$hardcode_libdirs"; then 689249dc963fSmrg hardcode_libdirs="$libdir" 689349dc963fSmrg else 689449dc963fSmrg # Just accumulate the unique libdirs. 689549dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 689649dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 689749dc963fSmrg ;; 689849dc963fSmrg *) 689949dc963fSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 690049dc963fSmrg ;; 690149dc963fSmrg esac 690249dc963fSmrg fi 690349dc963fSmrg else 690449dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 690549dc963fSmrg dep_rpath="$dep_rpath $flag" 690649dc963fSmrg fi 690749dc963fSmrg elif test -n "$runpath_var"; then 690849dc963fSmrg case "$perm_rpath " in 690949dc963fSmrg *" $libdir "*) ;; 691049dc963fSmrg *) perm_rpath="$perm_rpath $libdir" ;; 691149dc963fSmrg esac 691249dc963fSmrg fi 691349dc963fSmrg done 691449dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 691549dc963fSmrg if test -n "$hardcode_libdir_separator" && 691649dc963fSmrg test -n "$hardcode_libdirs"; then 691749dc963fSmrg libdir="$hardcode_libdirs" 691849dc963fSmrg if test -n "$hardcode_libdir_flag_spec_ld"; then 691949dc963fSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 692049dc963fSmrg else 692149dc963fSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 692249dc963fSmrg fi 692349dc963fSmrg fi 692449dc963fSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 692549dc963fSmrg # We should set the runpath_var. 692649dc963fSmrg rpath= 692749dc963fSmrg for dir in $perm_rpath; do 692849dc963fSmrg rpath="$rpath$dir:" 692949dc963fSmrg done 693049dc963fSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 693149dc963fSmrg fi 693249dc963fSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 693349dc963fSmrg fi 69344b0ead49Smrg 693549dc963fSmrg shlibpath="$finalize_shlibpath" 693649dc963fSmrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 693749dc963fSmrg if test -n "$shlibpath"; then 693849dc963fSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 693949dc963fSmrg fi 69404b0ead49Smrg 694149dc963fSmrg # Get the real and link names of the library. 694249dc963fSmrg eval shared_ext=\"$shrext_cmds\" 694349dc963fSmrg eval library_names=\"$library_names_spec\" 694449dc963fSmrg set dummy $library_names 694549dc963fSmrg shift 694649dc963fSmrg realname="$1" 694749dc963fSmrg shift 69484b0ead49Smrg 694949dc963fSmrg if test -n "$soname_spec"; then 695049dc963fSmrg eval soname=\"$soname_spec\" 695149dc963fSmrg else 695249dc963fSmrg soname="$realname" 695349dc963fSmrg fi 695449dc963fSmrg if test -z "$dlname"; then 695549dc963fSmrg dlname=$soname 695649dc963fSmrg fi 69574b0ead49Smrg 695849dc963fSmrg lib="$output_objdir/$realname" 695949dc963fSmrg linknames= 696049dc963fSmrg for link 696149dc963fSmrg do 696249dc963fSmrg linknames="$linknames $link" 696349dc963fSmrg done 69644b0ead49Smrg 696549dc963fSmrg # Use standard objects if they are pic 696649dc963fSmrg test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 696749dc963fSmrg test "X$libobjs" = "X " && libobjs= 69684b0ead49Smrg 696949dc963fSmrg delfiles= 697049dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 697149dc963fSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 697249dc963fSmrg export_symbols="$output_objdir/$libname.uexp" 697349dc963fSmrg delfiles="$delfiles $export_symbols" 697449dc963fSmrg fi 69754b0ead49Smrg 697649dc963fSmrg orig_export_symbols= 697749dc963fSmrg case $host_os in 697849dc963fSmrg cygwin* | mingw* | cegcc*) 697949dc963fSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 698049dc963fSmrg # exporting using user supplied symfile 698149dc963fSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 698249dc963fSmrg # and it's NOT already a .def file. Must figure out 698349dc963fSmrg # which of the given symbols are data symbols and tag 698449dc963fSmrg # them as such. So, trigger use of export_symbols_cmds. 698549dc963fSmrg # export_symbols gets reassigned inside the "prepare 698649dc963fSmrg # the list of exported symbols" if statement, so the 698749dc963fSmrg # include_expsyms logic still works. 698849dc963fSmrg orig_export_symbols="$export_symbols" 698949dc963fSmrg export_symbols= 699049dc963fSmrg always_export_symbols=yes 699149dc963fSmrg fi 699249dc963fSmrg fi 699349dc963fSmrg ;; 699449dc963fSmrg esac 69954b0ead49Smrg 699649dc963fSmrg # Prepare the list of exported symbols 699749dc963fSmrg if test -z "$export_symbols"; then 699849dc963fSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 699949dc963fSmrg func_verbose "generating symbol list for \`$libname.la'" 700049dc963fSmrg export_symbols="$output_objdir/$libname.exp" 700149dc963fSmrg $opt_dry_run || $RM $export_symbols 700249dc963fSmrg cmds=$export_symbols_cmds 700349dc963fSmrg save_ifs="$IFS"; IFS='~' 700449dc963fSmrg for cmd in $cmds; do 700549dc963fSmrg IFS="$save_ifs" 700649dc963fSmrg eval cmd=\"$cmd\" 700749dc963fSmrg func_len " $cmd" 700849dc963fSmrg len=$func_len_result 700949dc963fSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 701049dc963fSmrg func_show_eval "$cmd" 'exit $?' 701149dc963fSmrg skipped_export=false 701249dc963fSmrg else 701349dc963fSmrg # The command line is too long to execute in one step. 701449dc963fSmrg func_verbose "using reloadable object file for export list..." 701549dc963fSmrg skipped_export=: 701649dc963fSmrg # Break out early, otherwise skipped_export may be 701749dc963fSmrg # set to false by a later but shorter cmd. 701849dc963fSmrg break 701949dc963fSmrg fi 702049dc963fSmrg done 702149dc963fSmrg IFS="$save_ifs" 702249dc963fSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 702349dc963fSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 702449dc963fSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 702549dc963fSmrg fi 702649dc963fSmrg fi 70274b0ead49Smrg fi 70284b0ead49Smrg 702949dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 703049dc963fSmrg tmp_export_symbols="$export_symbols" 703149dc963fSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 703249dc963fSmrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 703349dc963fSmrg fi 70344b0ead49Smrg 703549dc963fSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 703649dc963fSmrg # The given exports_symbols file has to be filtered, so filter it. 703749dc963fSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 703849dc963fSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 703949dc963fSmrg # 's' commands which not all seds can handle. GNU sed should be fine 704049dc963fSmrg # though. Also, the filter scales superlinearly with the number of 704149dc963fSmrg # global variables. join(1) would be nice here, but unfortunately 704249dc963fSmrg # isn't a blessed tool. 704349dc963fSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 704449dc963fSmrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 704549dc963fSmrg export_symbols=$output_objdir/$libname.def 704649dc963fSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 704749dc963fSmrg fi 70484b0ead49Smrg 704949dc963fSmrg tmp_deplibs= 705049dc963fSmrg for test_deplib in $deplibs; do 705149dc963fSmrg case " $convenience " in 705249dc963fSmrg *" $test_deplib "*) ;; 705349dc963fSmrg *) 705449dc963fSmrg tmp_deplibs="$tmp_deplibs $test_deplib" 705549dc963fSmrg ;; 705649dc963fSmrg esac 705749dc963fSmrg done 705849dc963fSmrg deplibs="$tmp_deplibs" 70594b0ead49Smrg 706049dc963fSmrg if test -n "$convenience"; then 706149dc963fSmrg if test -n "$whole_archive_flag_spec" && 706249dc963fSmrg test "$compiler_needs_object" = yes && 706349dc963fSmrg test -z "$libobjs"; then 706449dc963fSmrg # extract the archives, so we have objects to list. 706549dc963fSmrg # TODO: could optimize this to just extract one archive. 706649dc963fSmrg whole_archive_flag_spec= 706749dc963fSmrg fi 706849dc963fSmrg if test -n "$whole_archive_flag_spec"; then 706949dc963fSmrg save_libobjs=$libobjs 707049dc963fSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 707149dc963fSmrg test "X$libobjs" = "X " && libobjs= 707249dc963fSmrg else 707349dc963fSmrg gentop="$output_objdir/${outputname}x" 707449dc963fSmrg generated="$generated $gentop" 70754b0ead49Smrg 707649dc963fSmrg func_extract_archives $gentop $convenience 707749dc963fSmrg libobjs="$libobjs $func_extract_archives_result" 707849dc963fSmrg test "X$libobjs" = "X " && libobjs= 707949dc963fSmrg fi 70804b0ead49Smrg fi 70814b0ead49Smrg 708249dc963fSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 708349dc963fSmrg eval flag=\"$thread_safe_flag_spec\" 708449dc963fSmrg linker_flags="$linker_flags $flag" 70854b0ead49Smrg fi 70864b0ead49Smrg 708749dc963fSmrg # Make a backup of the uninstalled library when relinking 708849dc963fSmrg if test "$mode" = relink; then 708949dc963fSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 709049dc963fSmrg fi 70914b0ead49Smrg 709249dc963fSmrg # Do each of the archive commands. 709349dc963fSmrg if test "$module" = yes && test -n "$module_cmds" ; then 709449dc963fSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 709549dc963fSmrg eval test_cmds=\"$module_expsym_cmds\" 709649dc963fSmrg cmds=$module_expsym_cmds 709749dc963fSmrg else 709849dc963fSmrg eval test_cmds=\"$module_cmds\" 709949dc963fSmrg cmds=$module_cmds 710049dc963fSmrg fi 71014b0ead49Smrg else 710249dc963fSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 710349dc963fSmrg eval test_cmds=\"$archive_expsym_cmds\" 710449dc963fSmrg cmds=$archive_expsym_cmds 710549dc963fSmrg else 710649dc963fSmrg eval test_cmds=\"$archive_cmds\" 710749dc963fSmrg cmds=$archive_cmds 710849dc963fSmrg fi 71094b0ead49Smrg fi 71104b0ead49Smrg 711149dc963fSmrg if test "X$skipped_export" != "X:" && 711249dc963fSmrg func_len " $test_cmds" && 711349dc963fSmrg len=$func_len_result && 711449dc963fSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 711549dc963fSmrg : 711649dc963fSmrg else 711749dc963fSmrg # The command line is too long to link in one step, link piecewise 711849dc963fSmrg # or, if using GNU ld and skipped_export is not :, use a linker 711949dc963fSmrg # script. 71204b0ead49Smrg 712149dc963fSmrg # Save the value of $output and $libobjs because we want to 712249dc963fSmrg # use them later. If we have whole_archive_flag_spec, we 712349dc963fSmrg # want to use save_libobjs as it was before 712449dc963fSmrg # whole_archive_flag_spec was expanded, because we can't 712549dc963fSmrg # assume the linker understands whole_archive_flag_spec. 712649dc963fSmrg # This may have to be revisited, in case too many 712749dc963fSmrg # convenience libraries get linked in and end up exceeding 712849dc963fSmrg # the spec. 712949dc963fSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 713049dc963fSmrg save_libobjs=$libobjs 713149dc963fSmrg fi 713249dc963fSmrg save_output=$output 713349dc963fSmrg output_la=`$ECHO "X$output" | $Xsed -e "$basename"` 71344b0ead49Smrg 713549dc963fSmrg # Clear the reloadable object creation command queue and 713649dc963fSmrg # initialize k to one. 713749dc963fSmrg test_cmds= 713849dc963fSmrg concat_cmds= 713949dc963fSmrg objlist= 714049dc963fSmrg last_robj= 714149dc963fSmrg k=1 714249dc963fSmrg 714349dc963fSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 714449dc963fSmrg output=${output_objdir}/${output_la}.lnkscript 714549dc963fSmrg func_verbose "creating GNU ld script: $output" 714649dc963fSmrg $ECHO 'INPUT (' > $output 714749dc963fSmrg for obj in $save_libobjs 71484b0ead49Smrg do 714949dc963fSmrg $ECHO "$obj" >> $output 715049dc963fSmrg done 715149dc963fSmrg $ECHO ')' >> $output 715249dc963fSmrg delfiles="$delfiles $output" 715349dc963fSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 715449dc963fSmrg output=${output_objdir}/${output_la}.lnk 715549dc963fSmrg func_verbose "creating linker input file list: $output" 715649dc963fSmrg : > $output 715749dc963fSmrg set x $save_libobjs 715849dc963fSmrg shift 715949dc963fSmrg firstobj= 716049dc963fSmrg if test "$compiler_needs_object" = yes; then 716149dc963fSmrg firstobj="$1 " 716249dc963fSmrg shift 716349dc963fSmrg fi 716449dc963fSmrg for obj 716549dc963fSmrg do 716649dc963fSmrg $ECHO "$obj" >> $output 716749dc963fSmrg done 716849dc963fSmrg delfiles="$delfiles $output" 716949dc963fSmrg output=$firstobj\"$file_list_spec$output\" 717049dc963fSmrg else 717149dc963fSmrg if test -n "$save_libobjs"; then 717249dc963fSmrg func_verbose "creating reloadable object files..." 717349dc963fSmrg output=$output_objdir/$output_la-${k}.$objext 717449dc963fSmrg eval test_cmds=\"$reload_cmds\" 717549dc963fSmrg func_len " $test_cmds" 717649dc963fSmrg len0=$func_len_result 717749dc963fSmrg len=$len0 717849dc963fSmrg 717949dc963fSmrg # Loop over the list of objects to be linked. 718049dc963fSmrg for obj in $save_libobjs 718149dc963fSmrg do 718249dc963fSmrg func_len " $obj" 718349dc963fSmrg func_arith $len + $func_len_result 718449dc963fSmrg len=$func_arith_result 718549dc963fSmrg if test "X$objlist" = X || 718649dc963fSmrg test "$len" -lt "$max_cmd_len"; then 718749dc963fSmrg func_append objlist " $obj" 718849dc963fSmrg else 718949dc963fSmrg # The command $test_cmds is almost too long, add a 719049dc963fSmrg # command to the queue. 719149dc963fSmrg if test "$k" -eq 1 ; then 719249dc963fSmrg # The first file doesn't have a previous command to add. 719349dc963fSmrg eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 719449dc963fSmrg else 719549dc963fSmrg # All subsequent reloadable object files will link in 719649dc963fSmrg # the last one created. 719749dc963fSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" 719849dc963fSmrg fi 719949dc963fSmrg last_robj=$output_objdir/$output_la-${k}.$objext 720049dc963fSmrg func_arith $k + 1 720149dc963fSmrg k=$func_arith_result 720249dc963fSmrg output=$output_objdir/$output_la-${k}.$objext 720349dc963fSmrg objlist=$obj 720449dc963fSmrg func_len " $last_robj" 720549dc963fSmrg func_arith $len0 + $func_len_result 720649dc963fSmrg len=$func_arith_result 720749dc963fSmrg fi 720849dc963fSmrg done 720949dc963fSmrg # Handle the remaining objects by creating one last 721049dc963fSmrg # reloadable object file. All subsequent reloadable object 721149dc963fSmrg # files will link in the last one created. 721249dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 721349dc963fSmrg eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 721449dc963fSmrg if test -n "$last_robj"; then 721549dc963fSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 721649dc963fSmrg fi 721749dc963fSmrg delfiles="$delfiles $output" 72184b0ead49Smrg 721949dc963fSmrg else 722049dc963fSmrg output= 722149dc963fSmrg fi 72224b0ead49Smrg 722349dc963fSmrg if ${skipped_export-false}; then 722449dc963fSmrg func_verbose "generating symbol list for \`$libname.la'" 722549dc963fSmrg export_symbols="$output_objdir/$libname.exp" 722649dc963fSmrg $opt_dry_run || $RM $export_symbols 722749dc963fSmrg libobjs=$output 722849dc963fSmrg # Append the command to create the export file. 722949dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 723049dc963fSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 723149dc963fSmrg if test -n "$last_robj"; then 723249dc963fSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 723349dc963fSmrg fi 72344b0ead49Smrg fi 72354b0ead49Smrg 723649dc963fSmrg test -n "$save_libobjs" && 723749dc963fSmrg func_verbose "creating a temporary reloadable object file: $output" 72384b0ead49Smrg 723949dc963fSmrg # Loop through the commands generated above and execute them. 724049dc963fSmrg save_ifs="$IFS"; IFS='~' 724149dc963fSmrg for cmd in $concat_cmds; do 724249dc963fSmrg IFS="$save_ifs" 724349dc963fSmrg $opt_silent || { 724449dc963fSmrg func_quote_for_expand "$cmd" 724549dc963fSmrg eval "func_echo $func_quote_for_expand_result" 724649dc963fSmrg } 724749dc963fSmrg $opt_dry_run || eval "$cmd" || { 724849dc963fSmrg lt_exit=$? 724949dc963fSmrg 725049dc963fSmrg # Restore the uninstalled library and exit 725149dc963fSmrg if test "$mode" = relink; then 725249dc963fSmrg ( cd "$output_objdir" && \ 725349dc963fSmrg $RM "${realname}T" && \ 725449dc963fSmrg $MV "${realname}U" "$realname" ) 725549dc963fSmrg fi 72564b0ead49Smrg 725749dc963fSmrg exit $lt_exit 725849dc963fSmrg } 725949dc963fSmrg done 726049dc963fSmrg IFS="$save_ifs" 72614b0ead49Smrg 726249dc963fSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 726349dc963fSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 726449dc963fSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 72654b0ead49Smrg fi 72664b0ead49Smrg fi 72674b0ead49Smrg 726849dc963fSmrg if ${skipped_export-false}; then 726949dc963fSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 727049dc963fSmrg tmp_export_symbols="$export_symbols" 727149dc963fSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 727249dc963fSmrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 727349dc963fSmrg fi 72744b0ead49Smrg 727549dc963fSmrg if test -n "$orig_export_symbols"; then 727649dc963fSmrg # The given exports_symbols file has to be filtered, so filter it. 727749dc963fSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 727849dc963fSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 727949dc963fSmrg # 's' commands which not all seds can handle. GNU sed should be fine 728049dc963fSmrg # though. Also, the filter scales superlinearly with the number of 728149dc963fSmrg # global variables. join(1) would be nice here, but unfortunately 728249dc963fSmrg # isn't a blessed tool. 728349dc963fSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 728449dc963fSmrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 728549dc963fSmrg export_symbols=$output_objdir/$libname.def 728649dc963fSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 728749dc963fSmrg fi 728849dc963fSmrg fi 72894b0ead49Smrg 729049dc963fSmrg libobjs=$output 729149dc963fSmrg # Restore the value of output. 729249dc963fSmrg output=$save_output 72934b0ead49Smrg 729449dc963fSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 729549dc963fSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 729649dc963fSmrg test "X$libobjs" = "X " && libobjs= 729749dc963fSmrg fi 729849dc963fSmrg # Expand the library linking commands again to reset the 729949dc963fSmrg # value of $libobjs for piecewise linking. 73004b0ead49Smrg 730149dc963fSmrg # Do each of the archive commands. 730249dc963fSmrg if test "$module" = yes && test -n "$module_cmds" ; then 730349dc963fSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 730449dc963fSmrg cmds=$module_expsym_cmds 730549dc963fSmrg else 730649dc963fSmrg cmds=$module_cmds 73074b0ead49Smrg fi 73084b0ead49Smrg else 730949dc963fSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 731049dc963fSmrg cmds=$archive_expsym_cmds 731149dc963fSmrg else 731249dc963fSmrg cmds=$archive_cmds 731349dc963fSmrg fi 73144b0ead49Smrg fi 731549dc963fSmrg fi 73164b0ead49Smrg 731749dc963fSmrg if test -n "$delfiles"; then 731849dc963fSmrg # Append the command to remove temporary files to $cmds. 731949dc963fSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 732049dc963fSmrg fi 73214b0ead49Smrg 732249dc963fSmrg # Add any objects from preloaded convenience libraries 732349dc963fSmrg if test -n "$dlprefiles"; then 732449dc963fSmrg gentop="$output_objdir/${outputname}x" 732549dc963fSmrg generated="$generated $gentop" 73264b0ead49Smrg 732749dc963fSmrg func_extract_archives $gentop $dlprefiles 732849dc963fSmrg libobjs="$libobjs $func_extract_archives_result" 732949dc963fSmrg test "X$libobjs" = "X " && libobjs= 733049dc963fSmrg fi 73314b0ead49Smrg 733249dc963fSmrg save_ifs="$IFS"; IFS='~' 733349dc963fSmrg for cmd in $cmds; do 733449dc963fSmrg IFS="$save_ifs" 733549dc963fSmrg eval cmd=\"$cmd\" 733649dc963fSmrg $opt_silent || { 733749dc963fSmrg func_quote_for_expand "$cmd" 733849dc963fSmrg eval "func_echo $func_quote_for_expand_result" 733949dc963fSmrg } 734049dc963fSmrg $opt_dry_run || eval "$cmd" || { 734149dc963fSmrg lt_exit=$? 73424b0ead49Smrg 734349dc963fSmrg # Restore the uninstalled library and exit 734449dc963fSmrg if test "$mode" = relink; then 734549dc963fSmrg ( cd "$output_objdir" && \ 734649dc963fSmrg $RM "${realname}T" && \ 734749dc963fSmrg $MV "${realname}U" "$realname" ) 734849dc963fSmrg fi 73494b0ead49Smrg 735049dc963fSmrg exit $lt_exit 735149dc963fSmrg } 735249dc963fSmrg done 735349dc963fSmrg IFS="$save_ifs" 73544b0ead49Smrg 735549dc963fSmrg # Restore the uninstalled library and exit 735649dc963fSmrg if test "$mode" = relink; then 735749dc963fSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 73584b0ead49Smrg 735949dc963fSmrg if test -n "$convenience"; then 736049dc963fSmrg if test -z "$whole_archive_flag_spec"; then 736149dc963fSmrg func_show_eval '${RM}r "$gentop"' 736249dc963fSmrg fi 736349dc963fSmrg fi 73644b0ead49Smrg 736549dc963fSmrg exit $EXIT_SUCCESS 736649dc963fSmrg fi 736749dc963fSmrg 736849dc963fSmrg # Create links to the real library. 736949dc963fSmrg for linkname in $linknames; do 737049dc963fSmrg if test "$realname" != "$linkname"; then 737149dc963fSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 73724b0ead49Smrg fi 73734b0ead49Smrg done 73744b0ead49Smrg 737549dc963fSmrg # If -module or -export-dynamic was specified, set the dlname. 737649dc963fSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 737749dc963fSmrg # On all known operating systems, these are identical. 737849dc963fSmrg dlname="$soname" 737949dc963fSmrg fi 738049dc963fSmrg fi 73814b0ead49Smrg ;; 73824b0ead49Smrg 738349dc963fSmrg obj) 738449dc963fSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 738549dc963fSmrg func_warning "\`-dlopen' is ignored for objects" 738649dc963fSmrg fi 73874b0ead49Smrg 738849dc963fSmrg case " $deplibs" in 738949dc963fSmrg *\ -l* | *\ -L*) 739049dc963fSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 73914b0ead49Smrg esac 73924b0ead49Smrg 739349dc963fSmrg test -n "$rpath" && \ 739449dc963fSmrg func_warning "\`-rpath' is ignored for objects" 739549dc963fSmrg 739649dc963fSmrg test -n "$xrpath" && \ 739749dc963fSmrg func_warning "\`-R' is ignored for objects" 73984b0ead49Smrg 739949dc963fSmrg test -n "$vinfo" && \ 740049dc963fSmrg func_warning "\`-version-info' is ignored for objects" 74014b0ead49Smrg 740249dc963fSmrg test -n "$release" && \ 740349dc963fSmrg func_warning "\`-release' is ignored for objects" 740449dc963fSmrg 740549dc963fSmrg case $output in 740649dc963fSmrg *.lo) 740749dc963fSmrg test -n "$objs$old_deplibs" && \ 740849dc963fSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 740949dc963fSmrg 741049dc963fSmrg libobj=$output 741149dc963fSmrg func_lo2o "$libobj" 741249dc963fSmrg obj=$func_lo2o_result 74134b0ead49Smrg ;; 74144b0ead49Smrg *) 741549dc963fSmrg libobj= 741649dc963fSmrg obj="$output" 74174b0ead49Smrg ;; 74184b0ead49Smrg esac 74194b0ead49Smrg 742049dc963fSmrg # Delete the old objects. 742149dc963fSmrg $opt_dry_run || $RM $obj $libobj 74224b0ead49Smrg 742349dc963fSmrg # Objects from convenience libraries. This assumes 742449dc963fSmrg # single-version convenience libraries. Whenever we create 742549dc963fSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 742649dc963fSmrg # the extraction. 742749dc963fSmrg reload_conv_objs= 742849dc963fSmrg gentop= 742949dc963fSmrg # reload_cmds runs $LD directly, so let us get rid of 743049dc963fSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 743149dc963fSmrg # turning comma into space.. 743249dc963fSmrg wl= 74334b0ead49Smrg 743449dc963fSmrg if test -n "$convenience"; then 743549dc963fSmrg if test -n "$whole_archive_flag_spec"; then 743649dc963fSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 743749dc963fSmrg reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 743849dc963fSmrg else 743949dc963fSmrg gentop="$output_objdir/${obj}x" 744049dc963fSmrg generated="$generated $gentop" 74414b0ead49Smrg 744249dc963fSmrg func_extract_archives $gentop $convenience 744349dc963fSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 744449dc963fSmrg fi 74454b0ead49Smrg fi 74464b0ead49Smrg 744749dc963fSmrg # Create the old-style object. 744849dc963fSmrg 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 74494b0ead49Smrg 745049dc963fSmrg output="$obj" 745149dc963fSmrg func_execute_cmds "$reload_cmds" 'exit $?' 74524b0ead49Smrg 745349dc963fSmrg # Exit if we aren't doing a library object file. 745449dc963fSmrg if test -z "$libobj"; then 745549dc963fSmrg if test -n "$gentop"; then 745649dc963fSmrg func_show_eval '${RM}r "$gentop"' 745749dc963fSmrg fi 745849dc963fSmrg 745949dc963fSmrg exit $EXIT_SUCCESS 74604b0ead49Smrg fi 746149dc963fSmrg 746249dc963fSmrg if test "$build_libtool_libs" != yes; then 746349dc963fSmrg if test -n "$gentop"; then 746449dc963fSmrg func_show_eval '${RM}r "$gentop"' 746549dc963fSmrg fi 746649dc963fSmrg 746749dc963fSmrg # Create an invalid libtool object if no PIC, so that we don't 746849dc963fSmrg # accidentally link it into a program. 746949dc963fSmrg # $show "echo timestamp > $libobj" 747049dc963fSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 747149dc963fSmrg exit $EXIT_SUCCESS 747249dc963fSmrg fi 747349dc963fSmrg 747449dc963fSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 747549dc963fSmrg # Only do commands if we really have different PIC objects. 747649dc963fSmrg reload_objs="$libobjs $reload_conv_objs" 747749dc963fSmrg output="$libobj" 747849dc963fSmrg func_execute_cmds "$reload_cmds" 'exit $?' 747949dc963fSmrg fi 748049dc963fSmrg 748149dc963fSmrg if test -n "$gentop"; then 748249dc963fSmrg func_show_eval '${RM}r "$gentop"' 748349dc963fSmrg fi 748449dc963fSmrg 748549dc963fSmrg exit $EXIT_SUCCESS 74864b0ead49Smrg ;; 74874b0ead49Smrg 748849dc963fSmrg prog) 748949dc963fSmrg case $host in 749049dc963fSmrg *cygwin*) func_stripname '' '.exe' "$output" 749149dc963fSmrg output=$func_stripname_result.exe;; 749249dc963fSmrg esac 749349dc963fSmrg test -n "$vinfo" && \ 749449dc963fSmrg func_warning "\`-version-info' is ignored for programs" 74954b0ead49Smrg 749649dc963fSmrg test -n "$release" && \ 749749dc963fSmrg func_warning "\`-release' is ignored for programs" 74984b0ead49Smrg 749949dc963fSmrg test "$preload" = yes \ 750049dc963fSmrg && test "$dlopen_support" = unknown \ 750149dc963fSmrg && test "$dlopen_self" = unknown \ 750249dc963fSmrg && test "$dlopen_self_static" = unknown && \ 750349dc963fSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 750449dc963fSmrg 750549dc963fSmrg case $host in 750649dc963fSmrg *-*-rhapsody* | *-*-darwin1.[012]) 750749dc963fSmrg # On Rhapsody replace the C library is the System framework 750849dc963fSmrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 750949dc963fSmrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 75104b0ead49Smrg ;; 751149dc963fSmrg esac 75124b0ead49Smrg 751349dc963fSmrg case $host in 751449dc963fSmrg *-*-darwin*) 751549dc963fSmrg # Don't allow lazy linking, it breaks C++ global constructors 751649dc963fSmrg # But is supposedly fixed on 10.4 or later (yay!). 751749dc963fSmrg if test "$tagname" = CXX ; then 751849dc963fSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 751949dc963fSmrg 10.[0123]) 752049dc963fSmrg compile_command="$compile_command ${wl}-bind_at_load" 752149dc963fSmrg finalize_command="$finalize_command ${wl}-bind_at_load" 752249dc963fSmrg ;; 752349dc963fSmrg esac 75244b0ead49Smrg fi 752549dc963fSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 752649dc963fSmrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 752749dc963fSmrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 752849dc963fSmrg ;; 752949dc963fSmrg esac 75304b0ead49Smrg 75314b0ead49Smrg 753249dc963fSmrg # move library search paths that coincide with paths to not yet 753349dc963fSmrg # installed libraries to the beginning of the library search list 753449dc963fSmrg new_libs= 753549dc963fSmrg for path in $notinst_path; do 753649dc963fSmrg case " $new_libs " in 753749dc963fSmrg *" -L$path/$objdir "*) ;; 753849dc963fSmrg *) 753949dc963fSmrg case " $compile_deplibs " in 754049dc963fSmrg *" -L$path/$objdir "*) 754149dc963fSmrg new_libs="$new_libs -L$path/$objdir" ;; 75424b0ead49Smrg esac 754349dc963fSmrg ;; 754449dc963fSmrg esac 754549dc963fSmrg done 754649dc963fSmrg for deplib in $compile_deplibs; do 754749dc963fSmrg case $deplib in 754849dc963fSmrg -L*) 754949dc963fSmrg case " $new_libs " in 755049dc963fSmrg *" $deplib "*) ;; 755149dc963fSmrg *) new_libs="$new_libs $deplib" ;; 75524b0ead49Smrg esac 755349dc963fSmrg ;; 755449dc963fSmrg *) new_libs="$new_libs $deplib" ;; 755549dc963fSmrg esac 755649dc963fSmrg done 755749dc963fSmrg compile_deplibs="$new_libs" 75584b0ead49Smrg 75594b0ead49Smrg 756049dc963fSmrg compile_command="$compile_command $compile_deplibs" 756149dc963fSmrg finalize_command="$finalize_command $finalize_deplibs" 75624b0ead49Smrg 756349dc963fSmrg if test -n "$rpath$xrpath"; then 756449dc963fSmrg # If the user specified any rpath flags, then add them. 756549dc963fSmrg for libdir in $rpath $xrpath; do 756649dc963fSmrg # This is the magic to use -rpath. 756749dc963fSmrg case "$finalize_rpath " in 756849dc963fSmrg *" $libdir "*) ;; 756949dc963fSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 757049dc963fSmrg esac 757149dc963fSmrg done 757249dc963fSmrg fi 75734b0ead49Smrg 757449dc963fSmrg # Now hardcode the library paths 757549dc963fSmrg rpath= 757649dc963fSmrg hardcode_libdirs= 757749dc963fSmrg for libdir in $compile_rpath $finalize_rpath; do 757849dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 757949dc963fSmrg if test -n "$hardcode_libdir_separator"; then 758049dc963fSmrg if test -z "$hardcode_libdirs"; then 758149dc963fSmrg hardcode_libdirs="$libdir" 758249dc963fSmrg else 758349dc963fSmrg # Just accumulate the unique libdirs. 758449dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 758549dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 758649dc963fSmrg ;; 758749dc963fSmrg *) 758849dc963fSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 758949dc963fSmrg ;; 759049dc963fSmrg esac 759149dc963fSmrg fi 75924b0ead49Smrg else 759349dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 759449dc963fSmrg rpath="$rpath $flag" 75954b0ead49Smrg fi 759649dc963fSmrg elif test -n "$runpath_var"; then 759749dc963fSmrg case "$perm_rpath " in 759849dc963fSmrg *" $libdir "*) ;; 759949dc963fSmrg *) perm_rpath="$perm_rpath $libdir" ;; 760049dc963fSmrg esac 760149dc963fSmrg fi 760249dc963fSmrg case $host in 760349dc963fSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 760449dc963fSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 760549dc963fSmrg case :$dllsearchpath: in 760649dc963fSmrg *":$libdir:"*) ;; 760749dc963fSmrg ::) dllsearchpath=$libdir;; 760849dc963fSmrg *) dllsearchpath="$dllsearchpath:$libdir";; 760949dc963fSmrg esac 761049dc963fSmrg case :$dllsearchpath: in 761149dc963fSmrg *":$testbindir:"*) ;; 761249dc963fSmrg ::) dllsearchpath=$testbindir;; 761349dc963fSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 761449dc963fSmrg esac 761549dc963fSmrg ;; 761649dc963fSmrg esac 761749dc963fSmrg done 761849dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 761949dc963fSmrg if test -n "$hardcode_libdir_separator" && 762049dc963fSmrg test -n "$hardcode_libdirs"; then 762149dc963fSmrg libdir="$hardcode_libdirs" 762249dc963fSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 762349dc963fSmrg fi 762449dc963fSmrg compile_rpath="$rpath" 76254b0ead49Smrg 762649dc963fSmrg rpath= 762749dc963fSmrg hardcode_libdirs= 762849dc963fSmrg for libdir in $finalize_rpath; do 762949dc963fSmrg if test -n "$hardcode_libdir_flag_spec"; then 763049dc963fSmrg if test -n "$hardcode_libdir_separator"; then 763149dc963fSmrg if test -z "$hardcode_libdirs"; then 763249dc963fSmrg hardcode_libdirs="$libdir" 763349dc963fSmrg else 763449dc963fSmrg # Just accumulate the unique libdirs. 763549dc963fSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 763649dc963fSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 763749dc963fSmrg ;; 763849dc963fSmrg *) 763949dc963fSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 764049dc963fSmrg ;; 764149dc963fSmrg esac 764249dc963fSmrg fi 76434b0ead49Smrg else 764449dc963fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 764549dc963fSmrg rpath="$rpath $flag" 76464b0ead49Smrg fi 764749dc963fSmrg elif test -n "$runpath_var"; then 764849dc963fSmrg case "$finalize_perm_rpath " in 764949dc963fSmrg *" $libdir "*) ;; 765049dc963fSmrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 765149dc963fSmrg esac 76524b0ead49Smrg fi 765349dc963fSmrg done 765449dc963fSmrg # Substitute the hardcoded libdirs into the rpath. 765549dc963fSmrg if test -n "$hardcode_libdir_separator" && 765649dc963fSmrg test -n "$hardcode_libdirs"; then 765749dc963fSmrg libdir="$hardcode_libdirs" 765849dc963fSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 765949dc963fSmrg fi 766049dc963fSmrg finalize_rpath="$rpath" 76614b0ead49Smrg 766249dc963fSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 766349dc963fSmrg # Transform all the library objects into standard objects. 766449dc963fSmrg compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 766549dc963fSmrg finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 766649dc963fSmrg fi 76674b0ead49Smrg 766849dc963fSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 76694b0ead49Smrg 767049dc963fSmrg # template prelinking step 767149dc963fSmrg if test -n "$prelink_cmds"; then 767249dc963fSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 767349dc963fSmrg fi 76744b0ead49Smrg 767549dc963fSmrg wrappers_required=yes 767649dc963fSmrg case $host in 767749dc963fSmrg *cygwin* | *mingw* ) 767849dc963fSmrg if test "$build_libtool_libs" != yes; then 767949dc963fSmrg wrappers_required=no 768049dc963fSmrg fi 768149dc963fSmrg ;; 768249dc963fSmrg *cegcc) 768349dc963fSmrg # Disable wrappers for cegcc, we are cross compiling anyway. 768449dc963fSmrg wrappers_required=no 768549dc963fSmrg ;; 768649dc963fSmrg *) 768749dc963fSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 768849dc963fSmrg wrappers_required=no 768949dc963fSmrg fi 769049dc963fSmrg ;; 769149dc963fSmrg esac 769249dc963fSmrg if test "$wrappers_required" = no; then 769349dc963fSmrg # Replace the output file specification. 769449dc963fSmrg compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 769549dc963fSmrg link_command="$compile_command$compile_rpath" 76964b0ead49Smrg 769749dc963fSmrg # We have no uninstalled library dependencies, so finalize right now. 769849dc963fSmrg exit_status=0 769949dc963fSmrg func_show_eval "$link_command" 'exit_status=$?' 77004b0ead49Smrg 770149dc963fSmrg # Delete the generated files. 770249dc963fSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 770349dc963fSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 77044b0ead49Smrg fi 77054b0ead49Smrg 770649dc963fSmrg exit $exit_status 770749dc963fSmrg fi 77084b0ead49Smrg 770949dc963fSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 771049dc963fSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 771149dc963fSmrg fi 771249dc963fSmrg if test -n "$finalize_shlibpath"; then 771349dc963fSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 771449dc963fSmrg fi 77154b0ead49Smrg 771649dc963fSmrg compile_var= 771749dc963fSmrg finalize_var= 771849dc963fSmrg if test -n "$runpath_var"; then 771949dc963fSmrg if test -n "$perm_rpath"; then 772049dc963fSmrg # We should set the runpath_var. 772149dc963fSmrg rpath= 772249dc963fSmrg for dir in $perm_rpath; do 772349dc963fSmrg rpath="$rpath$dir:" 772449dc963fSmrg done 772549dc963fSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 77264b0ead49Smrg fi 772749dc963fSmrg if test -n "$finalize_perm_rpath"; then 772849dc963fSmrg # We should set the runpath_var. 772949dc963fSmrg rpath= 773049dc963fSmrg for dir in $finalize_perm_rpath; do 773149dc963fSmrg rpath="$rpath$dir:" 773249dc963fSmrg done 773349dc963fSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 77344b0ead49Smrg fi 773549dc963fSmrg fi 77364b0ead49Smrg 773749dc963fSmrg if test "$no_install" = yes; then 773849dc963fSmrg # We don't need to create a wrapper script. 773949dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 774049dc963fSmrg # Replace the output file specification. 774149dc963fSmrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 774249dc963fSmrg # Delete the old output file. 774349dc963fSmrg $opt_dry_run || $RM $output 774449dc963fSmrg # Link the executable and exit 774549dc963fSmrg func_show_eval "$link_command" 'exit $?' 77464b0ead49Smrg exit $EXIT_SUCCESS 774749dc963fSmrg fi 77484b0ead49Smrg 774949dc963fSmrg if test "$hardcode_action" = relink; then 775049dc963fSmrg # Fast installation is not supported 775149dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 775249dc963fSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 775349dc963fSmrg 775449dc963fSmrg func_warning "this platform does not like uninstalled shared libraries" 775549dc963fSmrg func_warning "\`$output' will be relinked during installation" 775649dc963fSmrg else 775749dc963fSmrg if test "$fast_install" != no; then 775849dc963fSmrg link_command="$finalize_var$compile_command$finalize_rpath" 775949dc963fSmrg if test "$fast_install" = yes; then 776049dc963fSmrg relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` 776149dc963fSmrg else 776249dc963fSmrg # fast_install is set to needless 776349dc963fSmrg relink_command= 776449dc963fSmrg fi 77654b0ead49Smrg else 776649dc963fSmrg link_command="$compile_var$compile_command$compile_rpath" 776749dc963fSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 77684b0ead49Smrg fi 776949dc963fSmrg fi 77704b0ead49Smrg 777149dc963fSmrg # Replace the output file specification. 777249dc963fSmrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 77734b0ead49Smrg 777449dc963fSmrg # Delete the old output files. 777549dc963fSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 77764b0ead49Smrg 777749dc963fSmrg func_show_eval "$link_command" 'exit $?' 77784b0ead49Smrg 777949dc963fSmrg # Now create the wrapper script. 778049dc963fSmrg func_verbose "creating $output" 77814b0ead49Smrg 778249dc963fSmrg # Quote the relink command for shipping. 778349dc963fSmrg if test -n "$relink_command"; then 778449dc963fSmrg # Preserve any variables that may affect compiler behavior 778549dc963fSmrg for var in $variables_saved_for_relink; do 778649dc963fSmrg if eval test -z \"\${$var+set}\"; then 778749dc963fSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 778849dc963fSmrg elif eval var_value=\$$var; test -z "$var_value"; then 778949dc963fSmrg relink_command="$var=; export $var; $relink_command" 77904b0ead49Smrg else 779149dc963fSmrg func_quote_for_eval "$var_value" 779249dc963fSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 77934b0ead49Smrg fi 779449dc963fSmrg done 779549dc963fSmrg relink_command="(cd `pwd`; $relink_command)" 779649dc963fSmrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 779749dc963fSmrg fi 77984b0ead49Smrg 779949dc963fSmrg # Quote $ECHO for shipping. 780049dc963fSmrg if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then 780149dc963fSmrg case $progpath in 780249dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 780349dc963fSmrg *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 780449dc963fSmrg esac 780549dc963fSmrg qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` 780649dc963fSmrg else 780749dc963fSmrg qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` 780849dc963fSmrg fi 780949dc963fSmrg 781049dc963fSmrg # Only actually do things if not in dry run mode. 781149dc963fSmrg $opt_dry_run || { 781249dc963fSmrg # win32 will think the script is a binary if it has 781349dc963fSmrg # a .exe suffix, so we strip it off here. 781449dc963fSmrg case $output in 781549dc963fSmrg *.exe) func_stripname '' '.exe' "$output" 781649dc963fSmrg output=$func_stripname_result ;; 781749dc963fSmrg esac 781849dc963fSmrg # test for cygwin because mv fails w/o .exe extensions 781949dc963fSmrg case $host in 782049dc963fSmrg *cygwin*) 782149dc963fSmrg exeext=.exe 782249dc963fSmrg func_stripname '' '.exe' "$outputname" 782349dc963fSmrg outputname=$func_stripname_result ;; 782449dc963fSmrg *) exeext= ;; 78254b0ead49Smrg esac 782649dc963fSmrg case $host in 782749dc963fSmrg *cygwin* | *mingw* ) 782849dc963fSmrg func_dirname_and_basename "$output" "" "." 782949dc963fSmrg output_name=$func_basename_result 783049dc963fSmrg output_path=$func_dirname_result 783149dc963fSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 783249dc963fSmrg cwrapper="$output_path/$output_name.exe" 783349dc963fSmrg $RM $cwrappersource $cwrapper 783449dc963fSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 783549dc963fSmrg 783649dc963fSmrg func_emit_cwrapperexe_src > $cwrappersource 783749dc963fSmrg 783849dc963fSmrg # The wrapper executable is built using the $host compiler, 783949dc963fSmrg # because it contains $host paths and files. If cross- 784049dc963fSmrg # compiling, it, like the target executable, must be 784149dc963fSmrg # executed on the $host or under an emulation environment. 784249dc963fSmrg $opt_dry_run || { 784349dc963fSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 784449dc963fSmrg $STRIP $cwrapper 784549dc963fSmrg } 78464b0ead49Smrg 784749dc963fSmrg # Now, create the wrapper script for func_source use: 784849dc963fSmrg func_ltwrapper_scriptname $cwrapper 784949dc963fSmrg $RM $func_ltwrapper_scriptname_result 785049dc963fSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 785149dc963fSmrg $opt_dry_run || { 785249dc963fSmrg # note: this script will not be executed, so do not chmod. 785349dc963fSmrg if test "x$build" = "x$host" ; then 785449dc963fSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 785549dc963fSmrg else 785649dc963fSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 785749dc963fSmrg fi 785849dc963fSmrg } 785949dc963fSmrg ;; 786049dc963fSmrg * ) 786149dc963fSmrg $RM $output 786249dc963fSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 78634b0ead49Smrg 786449dc963fSmrg func_emit_wrapper no > $output 786549dc963fSmrg chmod +x $output 786649dc963fSmrg ;; 786749dc963fSmrg esac 786849dc963fSmrg } 786949dc963fSmrg exit $EXIT_SUCCESS 787049dc963fSmrg ;; 787149dc963fSmrg esac 78724b0ead49Smrg 787349dc963fSmrg # See if we need to build an old-fashioned archive. 787449dc963fSmrg for oldlib in $oldlibs; do 78754b0ead49Smrg 787649dc963fSmrg if test "$build_libtool_libs" = convenience; then 787749dc963fSmrg oldobjs="$libobjs_save $symfileobj" 787849dc963fSmrg addlibs="$convenience" 787949dc963fSmrg build_libtool_libs=no 788049dc963fSmrg else 788149dc963fSmrg if test "$build_libtool_libs" = module; then 788249dc963fSmrg oldobjs="$libobjs_save" 788349dc963fSmrg build_libtool_libs=no 788449dc963fSmrg else 788549dc963fSmrg oldobjs="$old_deplibs $non_pic_objects" 788649dc963fSmrg if test "$preload" = yes && test -f "$symfileobj"; then 788749dc963fSmrg oldobjs="$oldobjs $symfileobj" 788849dc963fSmrg fi 788949dc963fSmrg fi 789049dc963fSmrg addlibs="$old_convenience" 78914b0ead49Smrg fi 78924b0ead49Smrg 789349dc963fSmrg if test -n "$addlibs"; then 789449dc963fSmrg gentop="$output_objdir/${outputname}x" 789549dc963fSmrg generated="$generated $gentop" 78964b0ead49Smrg 789749dc963fSmrg func_extract_archives $gentop $addlibs 789849dc963fSmrg oldobjs="$oldobjs $func_extract_archives_result" 789949dc963fSmrg fi 79004b0ead49Smrg 790149dc963fSmrg # Do each command in the archive commands. 790249dc963fSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 790349dc963fSmrg cmds=$old_archive_from_new_cmds 790449dc963fSmrg else 79054b0ead49Smrg 790649dc963fSmrg # Add any objects from preloaded convenience libraries 790749dc963fSmrg if test -n "$dlprefiles"; then 790849dc963fSmrg gentop="$output_objdir/${outputname}x" 790949dc963fSmrg generated="$generated $gentop" 79104b0ead49Smrg 791149dc963fSmrg func_extract_archives $gentop $dlprefiles 791249dc963fSmrg oldobjs="$oldobjs $func_extract_archives_result" 791349dc963fSmrg fi 79144b0ead49Smrg 791549dc963fSmrg # POSIX demands no paths to be encoded in archives. We have 791649dc963fSmrg # to avoid creating archives with duplicate basenames if we 791749dc963fSmrg # might have to extract them afterwards, e.g., when creating a 791849dc963fSmrg # static archive out of a convenience library, or when linking 791949dc963fSmrg # the entirety of a libtool archive into another (currently 792049dc963fSmrg # not supported by libtool). 792149dc963fSmrg if (for obj in $oldobjs 792249dc963fSmrg do 792349dc963fSmrg func_basename "$obj" 792449dc963fSmrg $ECHO "$func_basename_result" 792549dc963fSmrg done | sort | sort -uc >/dev/null 2>&1); then 792649dc963fSmrg : 792749dc963fSmrg else 792849dc963fSmrg $ECHO "copying selected object files to avoid basename conflicts..." 792949dc963fSmrg gentop="$output_objdir/${outputname}x" 793049dc963fSmrg generated="$generated $gentop" 793149dc963fSmrg func_mkdir_p "$gentop" 793249dc963fSmrg save_oldobjs=$oldobjs 793349dc963fSmrg oldobjs= 793449dc963fSmrg counter=1 793549dc963fSmrg for obj in $save_oldobjs 793649dc963fSmrg do 793749dc963fSmrg func_basename "$obj" 793849dc963fSmrg objbase="$func_basename_result" 793949dc963fSmrg case " $oldobjs " in 794049dc963fSmrg " ") oldobjs=$obj ;; 794149dc963fSmrg *[\ /]"$objbase "*) 794249dc963fSmrg while :; do 794349dc963fSmrg # Make sure we don't pick an alternate name that also 794449dc963fSmrg # overlaps. 794549dc963fSmrg newobj=lt$counter-$objbase 794649dc963fSmrg func_arith $counter + 1 794749dc963fSmrg counter=$func_arith_result 794849dc963fSmrg case " $oldobjs " in 794949dc963fSmrg *[\ /]"$newobj "*) ;; 795049dc963fSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 795149dc963fSmrg esac 795249dc963fSmrg done 795349dc963fSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 795449dc963fSmrg oldobjs="$oldobjs $gentop/$newobj" 795549dc963fSmrg ;; 795649dc963fSmrg *) oldobjs="$oldobjs $obj" ;; 795749dc963fSmrg esac 79584b0ead49Smrg done 79594b0ead49Smrg fi 796049dc963fSmrg eval cmds=\"$old_archive_cmds\" 79614b0ead49Smrg 796249dc963fSmrg func_len " $cmds" 796349dc963fSmrg len=$func_len_result 796449dc963fSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 796549dc963fSmrg cmds=$old_archive_cmds 796649dc963fSmrg else 796749dc963fSmrg # the command line is too long to link in one step, link in parts 796849dc963fSmrg func_verbose "using piecewise archive linking..." 796949dc963fSmrg save_RANLIB=$RANLIB 797049dc963fSmrg RANLIB=: 797149dc963fSmrg objlist= 797249dc963fSmrg concat_cmds= 797349dc963fSmrg save_oldobjs=$oldobjs 797449dc963fSmrg oldobjs= 797549dc963fSmrg # Is there a better way of finding the last object in the list? 797649dc963fSmrg for obj in $save_oldobjs 797749dc963fSmrg do 797849dc963fSmrg last_oldobj=$obj 797949dc963fSmrg done 798049dc963fSmrg eval test_cmds=\"$old_archive_cmds\" 798149dc963fSmrg func_len " $test_cmds" 798249dc963fSmrg len0=$func_len_result 798349dc963fSmrg len=$len0 798449dc963fSmrg for obj in $save_oldobjs 798549dc963fSmrg do 798649dc963fSmrg func_len " $obj" 798749dc963fSmrg func_arith $len + $func_len_result 798849dc963fSmrg len=$func_arith_result 798949dc963fSmrg func_append objlist " $obj" 799049dc963fSmrg if test "$len" -lt "$max_cmd_len"; then 799149dc963fSmrg : 799249dc963fSmrg else 799349dc963fSmrg # the above command should be used before it gets too long 799449dc963fSmrg oldobjs=$objlist 799549dc963fSmrg if test "$obj" = "$last_oldobj" ; then 799649dc963fSmrg RANLIB=$save_RANLIB 799749dc963fSmrg fi 799849dc963fSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 799949dc963fSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 800049dc963fSmrg objlist= 800149dc963fSmrg len=$len0 800249dc963fSmrg fi 800349dc963fSmrg done 800449dc963fSmrg RANLIB=$save_RANLIB 800549dc963fSmrg oldobjs=$objlist 800649dc963fSmrg if test "X$oldobjs" = "X" ; then 800749dc963fSmrg eval cmds=\"\$concat_cmds\" 800849dc963fSmrg else 800949dc963fSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 801049dc963fSmrg fi 801149dc963fSmrg fi 801249dc963fSmrg fi 801349dc963fSmrg func_execute_cmds "$cmds" 'exit $?' 80144b0ead49Smrg done 80154b0ead49Smrg 801649dc963fSmrg test -n "$generated" && \ 801749dc963fSmrg func_show_eval "${RM}r$generated" 80184b0ead49Smrg 801949dc963fSmrg # Now create the libtool archive. 802049dc963fSmrg case $output in 802149dc963fSmrg *.la) 802249dc963fSmrg old_library= 802349dc963fSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 802449dc963fSmrg func_verbose "creating $output" 80254b0ead49Smrg 802649dc963fSmrg # Preserve any variables that may affect compiler behavior 802749dc963fSmrg for var in $variables_saved_for_relink; do 802849dc963fSmrg if eval test -z \"\${$var+set}\"; then 802949dc963fSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 803049dc963fSmrg elif eval var_value=\$$var; test -z "$var_value"; then 803149dc963fSmrg relink_command="$var=; export $var; $relink_command" 80324b0ead49Smrg else 803349dc963fSmrg func_quote_for_eval "$var_value" 803449dc963fSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 80354b0ead49Smrg fi 803649dc963fSmrg done 803749dc963fSmrg # Quote the link command for shipping. 803849dc963fSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 803949dc963fSmrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 804049dc963fSmrg if test "$hardcode_automatic" = yes ; then 804149dc963fSmrg relink_command= 804249dc963fSmrg fi 80434b0ead49Smrg 804449dc963fSmrg # Only create the output if not a dry run. 804549dc963fSmrg $opt_dry_run || { 804649dc963fSmrg for installed in no yes; do 804749dc963fSmrg if test "$installed" = yes; then 804849dc963fSmrg if test -z "$install_libdir"; then 804949dc963fSmrg break 805049dc963fSmrg fi 805149dc963fSmrg output="$output_objdir/$outputname"i 805249dc963fSmrg # Replace all uninstalled libtool libraries with the installed ones 805349dc963fSmrg newdependency_libs= 805449dc963fSmrg for deplib in $dependency_libs; do 805549dc963fSmrg case $deplib in 805649dc963fSmrg *.la) 805749dc963fSmrg func_basename "$deplib" 805849dc963fSmrg name="$func_basename_result" 805949dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 806049dc963fSmrg test -z "$libdir" && \ 806149dc963fSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 806249dc963fSmrg newdependency_libs="$newdependency_libs $libdir/$name" 806349dc963fSmrg ;; 806449dc963fSmrg *) newdependency_libs="$newdependency_libs $deplib" ;; 806549dc963fSmrg esac 806649dc963fSmrg done 806749dc963fSmrg dependency_libs="$newdependency_libs" 806849dc963fSmrg newdlfiles= 806949dc963fSmrg 807049dc963fSmrg for lib in $dlfiles; do 807149dc963fSmrg case $lib in 807249dc963fSmrg *.la) 807349dc963fSmrg func_basename "$lib" 807449dc963fSmrg name="$func_basename_result" 807549dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 807649dc963fSmrg test -z "$libdir" && \ 807749dc963fSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 807849dc963fSmrg newdlfiles="$newdlfiles $libdir/$name" 807949dc963fSmrg ;; 808049dc963fSmrg *) newdlfiles="$newdlfiles $lib" ;; 808149dc963fSmrg esac 808249dc963fSmrg done 808349dc963fSmrg dlfiles="$newdlfiles" 808449dc963fSmrg newdlprefiles= 808549dc963fSmrg for lib in $dlprefiles; do 808649dc963fSmrg case $lib in 808749dc963fSmrg *.la) 808849dc963fSmrg # Only pass preopened files to the pseudo-archive (for 808949dc963fSmrg # eventual linking with the app. that links it) if we 809049dc963fSmrg # didn't already link the preopened objects directly into 809149dc963fSmrg # the library: 809249dc963fSmrg func_basename "$lib" 809349dc963fSmrg name="$func_basename_result" 809449dc963fSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 809549dc963fSmrg test -z "$libdir" && \ 809649dc963fSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 809749dc963fSmrg newdlprefiles="$newdlprefiles $libdir/$name" 809849dc963fSmrg ;; 809949dc963fSmrg esac 810049dc963fSmrg done 810149dc963fSmrg dlprefiles="$newdlprefiles" 810249dc963fSmrg else 810349dc963fSmrg newdlfiles= 810449dc963fSmrg for lib in $dlfiles; do 810549dc963fSmrg case $lib in 810649dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 810749dc963fSmrg *) abs=`pwd`"/$lib" ;; 810849dc963fSmrg esac 810949dc963fSmrg newdlfiles="$newdlfiles $abs" 811049dc963fSmrg done 811149dc963fSmrg dlfiles="$newdlfiles" 811249dc963fSmrg newdlprefiles= 811349dc963fSmrg for lib in $dlprefiles; do 811449dc963fSmrg case $lib in 811549dc963fSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 811649dc963fSmrg *) abs=`pwd`"/$lib" ;; 811749dc963fSmrg esac 811849dc963fSmrg newdlprefiles="$newdlprefiles $abs" 811949dc963fSmrg done 812049dc963fSmrg dlprefiles="$newdlprefiles" 812149dc963fSmrg fi 812249dc963fSmrg $RM $output 812349dc963fSmrg # place dlname in correct position for cygwin 812449dc963fSmrg tdlname=$dlname 812549dc963fSmrg case $host,$output,$installed,$module,$dlname in 812649dc963fSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 812749dc963fSmrg esac 812849dc963fSmrg $ECHO > $output "\ 812949dc963fSmrg# $outputname - a libtool library file 813049dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 813149dc963fSmrg# 813249dc963fSmrg# Please DO NOT delete this file! 813349dc963fSmrg# It is necessary for linking the library. 81344b0ead49Smrg 813549dc963fSmrg# The name that we can dlopen(3). 813649dc963fSmrgdlname='$tdlname' 81374b0ead49Smrg 813849dc963fSmrg# Names of this library. 813949dc963fSmrglibrary_names='$library_names' 81404b0ead49Smrg 814149dc963fSmrg# The name of the static archive. 814249dc963fSmrgold_library='$old_library' 81434b0ead49Smrg 814449dc963fSmrg# Linker flags that can not go in dependency_libs. 814549dc963fSmrginherited_linker_flags='$new_inherited_linker_flags' 81464b0ead49Smrg 814749dc963fSmrg# Libraries that this one depends upon. 814849dc963fSmrgdependency_libs='$dependency_libs' 81494b0ead49Smrg 815049dc963fSmrg# Names of additional weak libraries provided by this library 815149dc963fSmrgweak_library_names='$weak_libs' 81524b0ead49Smrg 815349dc963fSmrg# Version information for $libname. 815449dc963fSmrgcurrent=$current 815549dc963fSmrgage=$age 815649dc963fSmrgrevision=$revision 81574b0ead49Smrg 815849dc963fSmrg# Is this an already installed library? 815949dc963fSmrginstalled=$installed 81604b0ead49Smrg 816149dc963fSmrg# Should we warn about portability when linking against -modules? 816249dc963fSmrgshouldnotlink=$module 81634b0ead49Smrg 816449dc963fSmrg# Files to dlopen/dlpreopen 816549dc963fSmrgdlopen='$dlfiles' 816649dc963fSmrgdlpreopen='$dlprefiles' 81674b0ead49Smrg 816849dc963fSmrg# Directory that this library needs to be installed in: 816949dc963fSmrglibdir='$install_libdir'" 817049dc963fSmrg if test "$installed" = no && test "$need_relink" = yes; then 817149dc963fSmrg $ECHO >> $output "\ 817249dc963fSmrgrelink_command=\"$relink_command\"" 817349dc963fSmrg fi 817449dc963fSmrg done 817549dc963fSmrg } 81764b0ead49Smrg 817749dc963fSmrg # Do a symbolic link so that the libtool archive can be found in 817849dc963fSmrg # LD_LIBRARY_PATH before the program is installed. 817949dc963fSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 818049dc963fSmrg ;; 818149dc963fSmrg esac 818249dc963fSmrg exit $EXIT_SUCCESS 818349dc963fSmrg} 81844b0ead49Smrg 818549dc963fSmrg{ test "$mode" = link || test "$mode" = relink; } && 818649dc963fSmrg func_mode_link ${1+"$@"} 81874b0ead49Smrg 81884b0ead49Smrg 818949dc963fSmrg# func_mode_uninstall arg... 819049dc963fSmrgfunc_mode_uninstall () 819149dc963fSmrg{ 819249dc963fSmrg $opt_debug 819349dc963fSmrg RM="$nonopt" 81944b0ead49Smrg files= 81954b0ead49Smrg rmforce= 81964b0ead49Smrg exit_status=0 81974b0ead49Smrg 81984b0ead49Smrg # This variable tells wrapper scripts just to set variables rather 81994b0ead49Smrg # than running their programs. 82004b0ead49Smrg libtool_install_magic="$magic" 82014b0ead49Smrg 82024b0ead49Smrg for arg 82034b0ead49Smrg do 82044b0ead49Smrg case $arg in 820549dc963fSmrg -f) RM="$RM $arg"; rmforce=yes ;; 820649dc963fSmrg -*) RM="$RM $arg" ;; 82074b0ead49Smrg *) files="$files $arg" ;; 82084b0ead49Smrg esac 82094b0ead49Smrg done 82104b0ead49Smrg 821149dc963fSmrg test -z "$RM" && \ 821249dc963fSmrg func_fatal_help "you must specify an RM program" 82134b0ead49Smrg 82144b0ead49Smrg rmdirs= 82154b0ead49Smrg 82164b0ead49Smrg origobjdir="$objdir" 82174b0ead49Smrg for file in $files; do 821849dc963fSmrg func_dirname "$file" "" "." 821949dc963fSmrg dir="$func_dirname_result" 822049dc963fSmrg if test "X$dir" = X.; then 82214b0ead49Smrg objdir="$origobjdir" 82224b0ead49Smrg else 82234b0ead49Smrg objdir="$dir/$origobjdir" 82244b0ead49Smrg fi 822549dc963fSmrg func_basename "$file" 822649dc963fSmrg name="$func_basename_result" 82274b0ead49Smrg test "$mode" = uninstall && objdir="$dir" 82284b0ead49Smrg 82294b0ead49Smrg # Remember objdir for removal later, being careful to avoid duplicates 82304b0ead49Smrg if test "$mode" = clean; then 82314b0ead49Smrg case " $rmdirs " in 82324b0ead49Smrg *" $objdir "*) ;; 82334b0ead49Smrg *) rmdirs="$rmdirs $objdir" ;; 82344b0ead49Smrg esac 82354b0ead49Smrg fi 82364b0ead49Smrg 82374b0ead49Smrg # Don't error if the file doesn't exist and rm -f was used. 823849dc963fSmrg if { test -L "$file"; } >/dev/null 2>&1 || 823949dc963fSmrg { test -h "$file"; } >/dev/null 2>&1 || 824049dc963fSmrg test -f "$file"; then 82414b0ead49Smrg : 82424b0ead49Smrg elif test -d "$file"; then 82434b0ead49Smrg exit_status=1 82444b0ead49Smrg continue 82454b0ead49Smrg elif test "$rmforce" = yes; then 82464b0ead49Smrg continue 82474b0ead49Smrg fi 82484b0ead49Smrg 82494b0ead49Smrg rmfiles="$file" 82504b0ead49Smrg 82514b0ead49Smrg case $name in 82524b0ead49Smrg *.la) 82534b0ead49Smrg # Possibly a libtool archive, so verify it. 825449dc963fSmrg if func_lalib_p "$file"; then 825549dc963fSmrg func_source $dir/$name 82564b0ead49Smrg 82574b0ead49Smrg # Delete the libtool libraries and symlinks. 82584b0ead49Smrg for n in $library_names; do 82594b0ead49Smrg rmfiles="$rmfiles $objdir/$n" 82604b0ead49Smrg done 82614b0ead49Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 82624b0ead49Smrg 82634b0ead49Smrg case "$mode" in 82644b0ead49Smrg clean) 82654b0ead49Smrg case " $library_names " in 82664b0ead49Smrg # " " in the beginning catches empty $dlname 82674b0ead49Smrg *" $dlname "*) ;; 82684b0ead49Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 82694b0ead49Smrg esac 827049dc963fSmrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 82714b0ead49Smrg ;; 82724b0ead49Smrg uninstall) 82734b0ead49Smrg if test -n "$library_names"; then 82744b0ead49Smrg # Do each command in the postuninstall commands. 827549dc963fSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 82764b0ead49Smrg fi 82774b0ead49Smrg 82784b0ead49Smrg if test -n "$old_library"; then 82794b0ead49Smrg # Do each command in the old_postuninstall commands. 828049dc963fSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 82814b0ead49Smrg fi 82824b0ead49Smrg # FIXME: should reinstall the best remaining shared library. 82834b0ead49Smrg ;; 82844b0ead49Smrg esac 82854b0ead49Smrg fi 82864b0ead49Smrg ;; 82874b0ead49Smrg 82884b0ead49Smrg *.lo) 82894b0ead49Smrg # Possibly a libtool object, so verify it. 829049dc963fSmrg if func_lalib_p "$file"; then 82914b0ead49Smrg 82924b0ead49Smrg # Read the .lo file 829349dc963fSmrg func_source $dir/$name 82944b0ead49Smrg 82954b0ead49Smrg # Add PIC object to the list of files to remove. 829649dc963fSmrg if test -n "$pic_object" && 829749dc963fSmrg test "$pic_object" != none; then 82984b0ead49Smrg rmfiles="$rmfiles $dir/$pic_object" 82994b0ead49Smrg fi 83004b0ead49Smrg 83014b0ead49Smrg # Add non-PIC object to the list of files to remove. 830249dc963fSmrg if test -n "$non_pic_object" && 830349dc963fSmrg test "$non_pic_object" != none; then 83044b0ead49Smrg rmfiles="$rmfiles $dir/$non_pic_object" 83054b0ead49Smrg fi 83064b0ead49Smrg fi 83074b0ead49Smrg ;; 83084b0ead49Smrg 83094b0ead49Smrg *) 83104b0ead49Smrg if test "$mode" = clean ; then 83114b0ead49Smrg noexename=$name 83124b0ead49Smrg case $file in 83134b0ead49Smrg *.exe) 831449dc963fSmrg func_stripname '' '.exe' "$file" 831549dc963fSmrg file=$func_stripname_result 831649dc963fSmrg func_stripname '' '.exe' "$name" 831749dc963fSmrg noexename=$func_stripname_result 83184b0ead49Smrg # $file with .exe has already been added to rmfiles, 83194b0ead49Smrg # add $file without .exe 83204b0ead49Smrg rmfiles="$rmfiles $file" 83214b0ead49Smrg ;; 83224b0ead49Smrg esac 83234b0ead49Smrg # Do a test to see if this is a libtool program. 832449dc963fSmrg if func_ltwrapper_p "$file"; then 832549dc963fSmrg if func_ltwrapper_executable_p "$file"; then 832649dc963fSmrg func_ltwrapper_scriptname "$file" 832749dc963fSmrg relink_command= 832849dc963fSmrg func_source $func_ltwrapper_scriptname_result 832949dc963fSmrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 833049dc963fSmrg else 833149dc963fSmrg relink_command= 833249dc963fSmrg func_source $dir/$noexename 833349dc963fSmrg fi 83344b0ead49Smrg 83354b0ead49Smrg # note $name still contains .exe if it was in $file originally 83364b0ead49Smrg # as does the version of $file that was added into $rmfiles 83374b0ead49Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 83384b0ead49Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 83394b0ead49Smrg rmfiles="$rmfiles $objdir/lt-$name" 83404b0ead49Smrg fi 83414b0ead49Smrg if test "X$noexename" != "X$name" ; then 83424b0ead49Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 83434b0ead49Smrg fi 83444b0ead49Smrg fi 83454b0ead49Smrg fi 83464b0ead49Smrg ;; 83474b0ead49Smrg esac 834849dc963fSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 83494b0ead49Smrg done 83504b0ead49Smrg objdir="$origobjdir" 83514b0ead49Smrg 83524b0ead49Smrg # Try to remove the ${objdir}s in the directories where we deleted files 83534b0ead49Smrg for dir in $rmdirs; do 83544b0ead49Smrg if test -d "$dir"; then 835549dc963fSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 83564b0ead49Smrg fi 83574b0ead49Smrg done 83584b0ead49Smrg 83594b0ead49Smrg exit $exit_status 836049dc963fSmrg} 83614b0ead49Smrg 836249dc963fSmrg{ test "$mode" = uninstall || test "$mode" = clean; } && 836349dc963fSmrg func_mode_uninstall ${1+"$@"} 83644b0ead49Smrg 836549dc963fSmrgtest -z "$mode" && { 836649dc963fSmrg help="$generic_help" 836749dc963fSmrg func_fatal_help "you must specify a MODE" 836849dc963fSmrg} 836949dc963fSmrg 837049dc963fSmrgtest -z "$exec_cmd" && \ 837149dc963fSmrg func_fatal_help "invalid operation mode \`$mode'" 83724b0ead49Smrg 83734b0ead49Smrgif test -n "$exec_cmd"; then 837449dc963fSmrg eval exec "$exec_cmd" 83754b0ead49Smrg exit $EXIT_FAILURE 83764b0ead49Smrgfi 83774b0ead49Smrg 837849dc963fSmrgexit $exit_status 83794b0ead49Smrg 83804b0ead49Smrg 83814b0ead49Smrg# The TAGs below are defined such that we never get into a situation 83824b0ead49Smrg# in which we disable both kinds of libraries. Given conflicting 83834b0ead49Smrg# choices, we go for a static library, that is the most portable, 83844b0ead49Smrg# since we can't tell whether shared libraries were disabled because 83854b0ead49Smrg# the user asked for that or because the platform doesn't support 83864b0ead49Smrg# them. This is particularly important on AIX, because we don't 83874b0ead49Smrg# support having both static and shared libraries enabled at the same 83884b0ead49Smrg# time on that platform, so we default to a shared-only configuration. 83894b0ead49Smrg# If a disable-shared tag is given, we'll fallback to a static-only 83904b0ead49Smrg# configuration. But we'll never go from static-only to shared-only. 83914b0ead49Smrg 83924b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 839349dc963fSmrgbuild_libtool_libs=no 839449dc963fSmrgbuild_old_libs=yes 83954b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 83964b0ead49Smrg 83974b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 839849dc963fSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 83994b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-static 84004b0ead49Smrg 84014b0ead49Smrg# Local Variables: 84024b0ead49Smrg# mode:shell-script 84034b0ead49Smrg# sh-indentation:2 84044b0ead49Smrg# End: 840549dc963fSmrg# vi:sw=2 840649dc963fSmrg 8407