ltmain.sh revision 86dafe34
186dafe34Smrg# Generated from ltmain.m4sh. 286dafe34Smrg 386dafe34Smrg# ltmain.sh (GNU libtool) 2.2.6 486dafe34Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 586dafe34Smrg 686dafe34Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. 786dafe34Smrg# This is free software; see the source for copying conditions. There is NO 886dafe34Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 986dafe34Smrg 1086dafe34Smrg# GNU Libtool is free software; you can redistribute it and/or modify 1176888252Smrg# it under the terms of the GNU General Public License as published by 1276888252Smrg# the Free Software Foundation; either version 2 of the License, or 1376888252Smrg# (at your option) any later version. 1476888252Smrg# 1586dafe34Smrg# As a special exception to the GNU General Public License, 1686dafe34Smrg# if you distribute this file as part of a program or library that 1786dafe34Smrg# is built using GNU Libtool, you may include this file under the 1886dafe34Smrg# same distribution terms that you use for the rest of that program. 1986dafe34Smrg# 2086dafe34Smrg# GNU Libtool is distributed in the hope that it will be useful, but 2176888252Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 2276888252Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 2376888252Smrg# General Public License for more details. 2476888252Smrg# 2576888252Smrg# You should have received a copy of the GNU General Public License 2686dafe34Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 2786dafe34Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 2886dafe34Smrg# or obtained by writing to the Free Software Foundation, Inc., 2986dafe34Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 3086dafe34Smrg 3186dafe34Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 3286dafe34Smrg# 3386dafe34Smrg# Provide generalized library-building support services. 3476888252Smrg# 3586dafe34Smrg# --config show all configuration variables 3686dafe34Smrg# --debug enable verbose shell tracing 3786dafe34Smrg# -n, --dry-run display commands without modifying any files 3886dafe34Smrg# --features display basic configuration information and exit 3986dafe34Smrg# --mode=MODE use operation mode MODE 4086dafe34Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 4186dafe34Smrg# --quiet, --silent don't print informational messages 4286dafe34Smrg# --tag=TAG use configuration variables from tag TAG 4386dafe34Smrg# -v, --verbose print informational messages (default) 4486dafe34Smrg# --version print version information 4586dafe34Smrg# -h, --help print short or long help message 4686dafe34Smrg# 4786dafe34Smrg# MODE must be one of the following: 4886dafe34Smrg# 4986dafe34Smrg# clean remove files from the build directory 5086dafe34Smrg# compile compile a source file into a libtool object 5186dafe34Smrg# execute automatically set library path, then run a program 5286dafe34Smrg# finish complete the installation of libtool libraries 5386dafe34Smrg# install install libraries or executables 5486dafe34Smrg# link create a library or an executable 5586dafe34Smrg# uninstall remove libraries from an installed directory 5686dafe34Smrg# 5786dafe34Smrg# MODE-ARGS vary depending on the MODE. 5886dafe34Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 5986dafe34Smrg# 6086dafe34Smrg# When reporting a bug, please describe a test case to reproduce it and 6186dafe34Smrg# include the following information: 6286dafe34Smrg# 6386dafe34Smrg# host-triplet: $host 6486dafe34Smrg# shell: $SHELL 6586dafe34Smrg# compiler: $LTCC 6686dafe34Smrg# compiler flags: $LTCFLAGS 6786dafe34Smrg# linker: $LD (gnu? $with_gnu_ld) 6886dafe34Smrg# $progname: (GNU libtool) 2.2.6 6986dafe34Smrg# automake: $automake_version 7086dafe34Smrg# autoconf: $autoconf_version 7186dafe34Smrg# 7286dafe34Smrg# Report bugs to <bug-libtool@gnu.org>. 7386dafe34Smrg 7486dafe34SmrgPROGRAM=ltmain.sh 7586dafe34SmrgPACKAGE=libtool 7686dafe34SmrgVERSION=2.2.6 7786dafe34SmrgTIMESTAMP="" 7886dafe34Smrgpackage_revision=1.3012 7986dafe34Smrg 8086dafe34Smrg# Be Bourne compatible 8186dafe34Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 8286dafe34Smrg emulate sh 8386dafe34Smrg NULLCMD=: 8486dafe34Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 8586dafe34Smrg # is contrary to our usage. Disable this feature. 8686dafe34Smrg alias -g '${1+"$@"}'='"$@"' 8786dafe34Smrg setopt NO_GLOB_SUBST 8886dafe34Smrgelse 8986dafe34Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 9086dafe34Smrgfi 9186dafe34SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 9286dafe34SmrgDUALCASE=1; export DUALCASE # for MKS sh 9386dafe34Smrg 9486dafe34Smrg# NLS nuisances: We save the old values to restore during execute mode. 9586dafe34Smrg# Only set LANG and LC_ALL to C if already set. 9686dafe34Smrg# These must not be set unconditionally because not all systems understand 9786dafe34Smrg# e.g. LANG=C (notably SCO). 9886dafe34Smrglt_user_locale= 9986dafe34Smrglt_safe_locale= 10086dafe34Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 10186dafe34Smrgdo 10286dafe34Smrg eval "if test \"\${$lt_var+set}\" = set; then 10386dafe34Smrg save_$lt_var=\$$lt_var 10486dafe34Smrg $lt_var=C 10586dafe34Smrg export $lt_var 10686dafe34Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 10786dafe34Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 10886dafe34Smrg fi" 10986dafe34Smrgdone 11086dafe34Smrg 11186dafe34Smrg$lt_unset CDPATH 11286dafe34Smrg 11386dafe34Smrg 11486dafe34Smrg 11586dafe34Smrg 11686dafe34Smrg 11786dafe34Smrg: ${CP="cp -f"} 11886dafe34Smrg: ${ECHO="echo"} 11986dafe34Smrg: ${EGREP="/bin/grep -E"} 12086dafe34Smrg: ${FGREP="/bin/grep -F"} 12186dafe34Smrg: ${GREP="/bin/grep"} 12286dafe34Smrg: ${LN_S="ln -s"} 12386dafe34Smrg: ${MAKE="make"} 12486dafe34Smrg: ${MKDIR="mkdir"} 12586dafe34Smrg: ${MV="mv -f"} 12686dafe34Smrg: ${RM="rm -f"} 12786dafe34Smrg: ${SED="/bin/sed"} 12886dafe34Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 12986dafe34Smrg: ${Xsed="$SED -e 1s/^X//"} 13076888252Smrg 13186dafe34Smrg# Global variables: 13286dafe34SmrgEXIT_SUCCESS=0 13386dafe34SmrgEXIT_FAILURE=1 13486dafe34SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 13586dafe34SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 13686dafe34Smrg 13786dafe34Smrgexit_status=$EXIT_SUCCESS 13886dafe34Smrg 13986dafe34Smrg# Make sure IFS has a sensible default 14086dafe34Smrglt_nl=' 14186dafe34Smrg' 14286dafe34SmrgIFS=" $lt_nl" 14386dafe34Smrg 14486dafe34Smrgdirname="s,/[^/]*$,," 14586dafe34Smrgbasename="s,^.*/,," 14686dafe34Smrg 14786dafe34Smrg# func_dirname_and_basename file append nondir_replacement 14886dafe34Smrg# perform func_basename and func_dirname in a single function 14986dafe34Smrg# call: 15086dafe34Smrg# dirname: Compute the dirname of FILE. If nonempty, 15186dafe34Smrg# add APPEND to the result, otherwise set result 15286dafe34Smrg# to NONDIR_REPLACEMENT. 15386dafe34Smrg# value returned in "$func_dirname_result" 15486dafe34Smrg# basename: Compute filename of FILE. 15586dafe34Smrg# value retuned in "$func_basename_result" 15686dafe34Smrg# Implementation must be kept synchronized with func_dirname 15786dafe34Smrg# and func_basename. For efficiency, we do not delegate to 15886dafe34Smrg# those functions but instead duplicate the functionality here. 15986dafe34Smrgfunc_dirname_and_basename () 16086dafe34Smrg{ 16186dafe34Smrg # Extract subdirectory from the argument. 16286dafe34Smrg func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` 16386dafe34Smrg if test "X$func_dirname_result" = "X${1}"; then 16486dafe34Smrg func_dirname_result="${3}" 16586dafe34Smrg else 16686dafe34Smrg func_dirname_result="$func_dirname_result${2}" 16786dafe34Smrg fi 16886dafe34Smrg func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` 16986dafe34Smrg} 17086dafe34Smrg 17186dafe34Smrg# Generated shell functions inserted here. 17276888252Smrg 17376888252Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 17476888252Smrg# is ksh but when the shell is invoked as "sh" and the current value of 17576888252Smrg# the _XPG environment variable is not equal to 1 (one), the special 17676888252Smrg# positional parameter $0, within a function call, is the name of the 17776888252Smrg# function. 17876888252Smrgprogpath="$0" 17976888252Smrg 18076888252Smrg# The name of this program: 18186dafe34Smrg# In the unlikely event $progname began with a '-', it would play havoc with 18286dafe34Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case: 18386dafe34Smrgfunc_dirname_and_basename "$progpath" 18486dafe34Smrgprogname=$func_basename_result 18586dafe34Smrgcase $progname in 18686dafe34Smrg -*) progname=./$progname ;; 18786dafe34Smrgesac 18876888252Smrg 18986dafe34Smrg# Make sure we have an absolute path for reexecution: 19086dafe34Smrgcase $progpath in 19186dafe34Smrg [\\/]*|[A-Za-z]:\\*) ;; 19286dafe34Smrg *[\\/]*) 19386dafe34Smrg progdir=$func_dirname_result 19486dafe34Smrg progdir=`cd "$progdir" && pwd` 19586dafe34Smrg progpath="$progdir/$progname" 19686dafe34Smrg ;; 19786dafe34Smrg *) 19886dafe34Smrg save_IFS="$IFS" 19986dafe34Smrg IFS=: 20086dafe34Smrg for progdir in $PATH; do 20186dafe34Smrg IFS="$save_IFS" 20286dafe34Smrg test -x "$progdir/$progname" && break 20386dafe34Smrg done 20486dafe34Smrg IFS="$save_IFS" 20586dafe34Smrg test -n "$progdir" || progdir=`pwd` 20686dafe34Smrg progpath="$progdir/$progname" 20786dafe34Smrg ;; 20886dafe34Smrgesac 20976888252Smrg 21086dafe34Smrg# Sed substitution that helps us do robust quoting. It backslashifies 21186dafe34Smrg# metacharacters that are still active within double-quoted strings. 21286dafe34SmrgXsed="${SED}"' -e 1s/^X//' 21386dafe34Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 21486dafe34Smrg 21586dafe34Smrg# Same as above, but do not quote variable references. 21686dafe34Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 21786dafe34Smrg 21886dafe34Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 21986dafe34Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 22086dafe34Smrg# in input to double_quote_subst, that '$' was protected from expansion. 22186dafe34Smrg# Since each input `\' is now two `\'s, look for any number of runs of 22286dafe34Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 22386dafe34Smrgbs='\\' 22486dafe34Smrgbs2='\\\\' 22586dafe34Smrgbs4='\\\\\\\\' 22686dafe34Smrgdollar='\$' 22786dafe34Smrgsed_double_backslash="\ 22886dafe34Smrg s/$bs4/&\\ 22986dafe34Smrg/g 23086dafe34Smrg s/^$bs2$dollar/$bs&/ 23186dafe34Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 23286dafe34Smrg s/\n//g" 23386dafe34Smrg 23486dafe34Smrg# Standard options: 23586dafe34Smrgopt_dry_run=false 23686dafe34Smrgopt_help=false 23786dafe34Smrgopt_quiet=false 23886dafe34Smrgopt_verbose=false 23986dafe34Smrgopt_warning=: 24086dafe34Smrg 24186dafe34Smrg# func_echo arg... 24286dafe34Smrg# Echo program name prefixed message, along with the current mode 24386dafe34Smrg# name if it has been set yet. 24486dafe34Smrgfunc_echo () 24586dafe34Smrg{ 24686dafe34Smrg $ECHO "$progname${mode+: }$mode: $*" 24786dafe34Smrg} 24876888252Smrg 24986dafe34Smrg# func_verbose arg... 25086dafe34Smrg# Echo program name prefixed message in verbose mode only. 25186dafe34Smrgfunc_verbose () 25286dafe34Smrg{ 25386dafe34Smrg $opt_verbose && func_echo ${1+"$@"} 25476888252Smrg 25586dafe34Smrg # A bug in bash halts the script if the last line of a function 25686dafe34Smrg # fails when set -e is in force, so we need another command to 25786dafe34Smrg # work around that: 25886dafe34Smrg : 25986dafe34Smrg} 26076888252Smrg 26186dafe34Smrg# func_error arg... 26286dafe34Smrg# Echo program name prefixed message to standard error. 26386dafe34Smrgfunc_error () 26486dafe34Smrg{ 26586dafe34Smrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 26686dafe34Smrg} 26776888252Smrg 26886dafe34Smrg# func_warning arg... 26986dafe34Smrg# Echo program name prefixed warning message to standard error. 27086dafe34Smrgfunc_warning () 27186dafe34Smrg{ 27286dafe34Smrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 27376888252Smrg 27486dafe34Smrg # bash bug again: 27586dafe34Smrg : 27686dafe34Smrg} 27776888252Smrg 27886dafe34Smrg# func_fatal_error arg... 27986dafe34Smrg# Echo program name prefixed message to standard error, and exit. 28086dafe34Smrgfunc_fatal_error () 28186dafe34Smrg{ 28286dafe34Smrg func_error ${1+"$@"} 28386dafe34Smrg exit $EXIT_FAILURE 28486dafe34Smrg} 28576888252Smrg 28686dafe34Smrg# func_fatal_help arg... 28786dafe34Smrg# Echo program name prefixed message to standard error, followed by 28886dafe34Smrg# a help hint, and exit. 28986dafe34Smrgfunc_fatal_help () 29086dafe34Smrg{ 29186dafe34Smrg func_error ${1+"$@"} 29286dafe34Smrg func_fatal_error "$help" 29386dafe34Smrg} 29486dafe34Smrghelp="Try \`$progname --help' for more information." ## default 29576888252Smrg 29676888252Smrg 29786dafe34Smrg# func_grep expression filename 29886dafe34Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 29986dafe34Smrgfunc_grep () 30086dafe34Smrg{ 30186dafe34Smrg $GREP "$1" "$2" >/dev/null 2>&1 30286dafe34Smrg} 30386dafe34Smrg 30486dafe34Smrg 30586dafe34Smrg# func_mkdir_p directory-path 30686dafe34Smrg# Make sure the entire path to DIRECTORY-PATH is available. 30786dafe34Smrgfunc_mkdir_p () 30886dafe34Smrg{ 30986dafe34Smrg my_directory_path="$1" 31086dafe34Smrg my_dir_list= 31186dafe34Smrg 31286dafe34Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 31386dafe34Smrg 31486dafe34Smrg # Protect directory names starting with `-' 31586dafe34Smrg case $my_directory_path in 31686dafe34Smrg -*) my_directory_path="./$my_directory_path" ;; 31786dafe34Smrg esac 31886dafe34Smrg 31986dafe34Smrg # While some portion of DIR does not yet exist... 32086dafe34Smrg while test ! -d "$my_directory_path"; do 32186dafe34Smrg # ...make a list in topmost first order. Use a colon delimited 32286dafe34Smrg # list incase some portion of path contains whitespace. 32386dafe34Smrg my_dir_list="$my_directory_path:$my_dir_list" 32486dafe34Smrg 32586dafe34Smrg # If the last portion added has no slash in it, the list is done 32686dafe34Smrg case $my_directory_path in */*) ;; *) break ;; esac 32786dafe34Smrg 32886dafe34Smrg # ...otherwise throw away the child directory and loop 32986dafe34Smrg my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` 33086dafe34Smrg done 33186dafe34Smrg my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` 33286dafe34Smrg 33386dafe34Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 33486dafe34Smrg for my_dir in $my_dir_list; do 33586dafe34Smrg IFS="$save_mkdir_p_IFS" 33686dafe34Smrg # mkdir can fail with a `File exist' error if two processes 33786dafe34Smrg # try to create one of the directories concurrently. Don't 33886dafe34Smrg # stop in that case! 33986dafe34Smrg $MKDIR "$my_dir" 2>/dev/null || : 34086dafe34Smrg done 34186dafe34Smrg IFS="$save_mkdir_p_IFS" 34286dafe34Smrg 34386dafe34Smrg # Bail out if we (or some other process) failed to create a directory. 34486dafe34Smrg test -d "$my_directory_path" || \ 34586dafe34Smrg func_fatal_error "Failed to create \`$1'" 34686dafe34Smrg fi 34786dafe34Smrg} 34876888252Smrg 34976888252Smrg 35076888252Smrg# func_mktempdir [string] 35176888252Smrg# Make a temporary directory that won't clash with other running 35276888252Smrg# libtool processes, and avoids race conditions if possible. If 35376888252Smrg# given, STRING is the basename for that directory. 35476888252Smrgfunc_mktempdir () 35576888252Smrg{ 35676888252Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 35776888252Smrg 35886dafe34Smrg if test "$opt_dry_run" = ":"; then 35976888252Smrg # Return a directory name, but don't create it in dry-run mode 36076888252Smrg my_tmpdir="${my_template}-$$" 36176888252Smrg else 36276888252Smrg 36376888252Smrg # If mktemp works, use that first and foremost 36476888252Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 36576888252Smrg 36676888252Smrg if test ! -d "$my_tmpdir"; then 36786dafe34Smrg # Failing that, at least try and use $RANDOM to avoid a race 36886dafe34Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 36976888252Smrg 37086dafe34Smrg save_mktempdir_umask=`umask` 37186dafe34Smrg umask 0077 37286dafe34Smrg $MKDIR "$my_tmpdir" 37386dafe34Smrg umask $save_mktempdir_umask 37476888252Smrg fi 37576888252Smrg 37676888252Smrg # If we're not in dry-run mode, bomb out on failure 37786dafe34Smrg test -d "$my_tmpdir" || \ 37886dafe34Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 37976888252Smrg fi 38076888252Smrg 38186dafe34Smrg $ECHO "X$my_tmpdir" | $Xsed 38276888252Smrg} 38376888252Smrg 38476888252Smrg 38586dafe34Smrg# func_quote_for_eval arg 38686dafe34Smrg# Aesthetically quote ARG to be evaled later. 38786dafe34Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 38886dafe34Smrg# is double-quoted, suitable for a subsequent eval, whereas 38986dafe34Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 39086dafe34Smrg# which are still active within double quotes backslashified. 39186dafe34Smrgfunc_quote_for_eval () 39276888252Smrg{ 39386dafe34Smrg case $1 in 39486dafe34Smrg *[\\\`\"\$]*) 39586dafe34Smrg func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; 39686dafe34Smrg *) 39786dafe34Smrg func_quote_for_eval_unquoted_result="$1" ;; 39886dafe34Smrg esac 39986dafe34Smrg 40086dafe34Smrg case $func_quote_for_eval_unquoted_result in 40186dafe34Smrg # Double-quote args containing shell metacharacters to delay 40286dafe34Smrg # word splitting, command substitution and and variable 40386dafe34Smrg # expansion for a subsequent eval. 40486dafe34Smrg # Many Bourne shells cannot handle close brackets correctly 40586dafe34Smrg # in scan sets, so we specify it separately. 40686dafe34Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 40786dafe34Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 40886dafe34Smrg ;; 40986dafe34Smrg *) 41086dafe34Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 41176888252Smrg esac 41276888252Smrg} 41376888252Smrg 41476888252Smrg 41586dafe34Smrg# func_quote_for_expand arg 41686dafe34Smrg# Aesthetically quote ARG to be evaled later; same as above, 41786dafe34Smrg# but do not quote variable references. 41886dafe34Smrgfunc_quote_for_expand () 41976888252Smrg{ 42086dafe34Smrg case $1 in 42186dafe34Smrg *[\\\`\"]*) 42286dafe34Smrg my_arg=`$ECHO "X$1" | $Xsed \ 42386dafe34Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 42476888252Smrg *) 42586dafe34Smrg my_arg="$1" ;; 42686dafe34Smrg esac 42786dafe34Smrg 42886dafe34Smrg case $my_arg in 42986dafe34Smrg # Double-quote args containing shell metacharacters to delay 43086dafe34Smrg # word splitting and command substitution for a subsequent eval. 43186dafe34Smrg # Many Bourne shells cannot handle close brackets correctly 43286dafe34Smrg # in scan sets, so we specify it separately. 43386dafe34Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 43486dafe34Smrg my_arg="\"$my_arg\"" 43586dafe34Smrg ;; 43686dafe34Smrg esac 43786dafe34Smrg 43886dafe34Smrg func_quote_for_expand_result="$my_arg" 43976888252Smrg} 44076888252Smrg 44176888252Smrg 44286dafe34Smrg# func_show_eval cmd [fail_exp] 44386dafe34Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 44486dafe34Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 44586dafe34Smrg# is given, then evaluate it. 44686dafe34Smrgfunc_show_eval () 44776888252Smrg{ 44886dafe34Smrg my_cmd="$1" 44986dafe34Smrg my_fail_exp="${2-:}" 45076888252Smrg 45186dafe34Smrg ${opt_silent-false} || { 45286dafe34Smrg func_quote_for_expand "$my_cmd" 45386dafe34Smrg eval "func_echo $func_quote_for_expand_result" 45486dafe34Smrg } 45586dafe34Smrg 45686dafe34Smrg if ${opt_dry_run-false}; then :; else 45786dafe34Smrg eval "$my_cmd" 45886dafe34Smrg my_status=$? 45986dafe34Smrg if test "$my_status" -eq 0; then :; else 46086dafe34Smrg eval "(exit $my_status); $my_fail_exp" 46186dafe34Smrg fi 46276888252Smrg fi 46376888252Smrg} 46476888252Smrg 46586dafe34Smrg 46686dafe34Smrg# func_show_eval_locale cmd [fail_exp] 46786dafe34Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 46886dafe34Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 46986dafe34Smrg# is given, then evaluate it. Use the saved locale for evaluation. 47086dafe34Smrgfunc_show_eval_locale () 47176888252Smrg{ 47286dafe34Smrg my_cmd="$1" 47386dafe34Smrg my_fail_exp="${2-:}" 47476888252Smrg 47586dafe34Smrg ${opt_silent-false} || { 47686dafe34Smrg func_quote_for_expand "$my_cmd" 47786dafe34Smrg eval "func_echo $func_quote_for_expand_result" 47886dafe34Smrg } 47986dafe34Smrg 48086dafe34Smrg if ${opt_dry_run-false}; then :; else 48186dafe34Smrg eval "$lt_user_locale 48286dafe34Smrg $my_cmd" 48386dafe34Smrg my_status=$? 48486dafe34Smrg eval "$lt_safe_locale" 48586dafe34Smrg if test "$my_status" -eq 0; then :; else 48686dafe34Smrg eval "(exit $my_status); $my_fail_exp" 48776888252Smrg fi 48886dafe34Smrg fi 48976888252Smrg} 49076888252Smrg 49176888252Smrg 49276888252Smrg 49386dafe34Smrg 49486dafe34Smrg 49586dafe34Smrg# func_version 49686dafe34Smrg# Echo version message to standard output and exit. 49786dafe34Smrgfunc_version () 49886dafe34Smrg{ 49986dafe34Smrg $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { 50086dafe34Smrg s/^# // 50186dafe34Smrg s/^# *$// 50286dafe34Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 50386dafe34Smrg p 50486dafe34Smrg }' < "$progpath" 50586dafe34Smrg exit $? 50686dafe34Smrg} 50786dafe34Smrg 50886dafe34Smrg# func_usage 50986dafe34Smrg# Echo short help message to standard output and exit. 51086dafe34Smrgfunc_usage () 51186dafe34Smrg{ 51286dafe34Smrg $SED -n '/^# Usage:/,/# -h/ { 51386dafe34Smrg s/^# // 51486dafe34Smrg s/^# *$// 51586dafe34Smrg s/\$progname/'$progname'/ 51686dafe34Smrg p 51786dafe34Smrg }' < "$progpath" 51886dafe34Smrg $ECHO 51986dafe34Smrg $ECHO "run \`$progname --help | more' for full usage" 52086dafe34Smrg exit $? 52186dafe34Smrg} 52286dafe34Smrg 52386dafe34Smrg# func_help 52486dafe34Smrg# Echo long help message to standard output and exit. 52586dafe34Smrgfunc_help () 52686dafe34Smrg{ 52786dafe34Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 52886dafe34Smrg s/^# // 52986dafe34Smrg s/^# *$// 53086dafe34Smrg s*\$progname*'$progname'* 53186dafe34Smrg s*\$host*'"$host"'* 53286dafe34Smrg s*\$SHELL*'"$SHELL"'* 53386dafe34Smrg s*\$LTCC*'"$LTCC"'* 53486dafe34Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 53586dafe34Smrg s*\$LD*'"$LD"'* 53686dafe34Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 53786dafe34Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 53886dafe34Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 53986dafe34Smrg p 54086dafe34Smrg }' < "$progpath" 54186dafe34Smrg exit $? 54286dafe34Smrg} 54386dafe34Smrg 54486dafe34Smrg# func_missing_arg argname 54586dafe34Smrg# Echo program name prefixed message to standard error and set global 54686dafe34Smrg# exit_cmd. 54786dafe34Smrgfunc_missing_arg () 54886dafe34Smrg{ 54986dafe34Smrg func_error "missing argument for $1" 55086dafe34Smrg exit_cmd=exit 55186dafe34Smrg} 55286dafe34Smrg 55386dafe34Smrgexit_cmd=: 55486dafe34Smrg 55586dafe34Smrg 55686dafe34Smrg 55786dafe34Smrg 55886dafe34Smrg 55986dafe34Smrg# Check that we have a working $ECHO. 56086dafe34Smrgif test "X$1" = X--no-reexec; then 56186dafe34Smrg # Discard the --no-reexec flag, and continue. 56276888252Smrg shift 56386dafe34Smrgelif test "X$1" = X--fallback-echo; then 56486dafe34Smrg # Avoid inline document here, it may be left over 56586dafe34Smrg : 56686dafe34Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then 56786dafe34Smrg # Yippee, $ECHO works! 56886dafe34Smrg : 56986dafe34Smrgelse 57086dafe34Smrg # Restart under the correct shell, and then maybe $ECHO will work. 57186dafe34Smrg exec $SHELL "$progpath" --no-reexec ${1+"$@"} 57286dafe34Smrgfi 57376888252Smrg 57486dafe34Smrgif test "X$1" = X--fallback-echo; then 57586dafe34Smrg # used as fallback echo 57686dafe34Smrg shift 57786dafe34Smrg cat <<EOF 57886dafe34Smrg$* 57986dafe34SmrgEOF 58086dafe34Smrg exit $EXIT_SUCCESS 58186dafe34Smrgfi 58276888252Smrg 58386dafe34Smrgmagic="%%%MAGIC variable%%%" 58486dafe34Smrgmagic_exe="%%%MAGIC EXE variable%%%" 58576888252Smrg 58686dafe34Smrg# Global variables. 58786dafe34Smrg# $mode is unset 58886dafe34Smrgnonopt= 58986dafe34Smrgexecute_dlfiles= 59086dafe34Smrgpreserve_args= 59186dafe34Smrglo2o="s/\\.lo\$/.${objext}/" 59286dafe34Smrgo2lo="s/\\.${objext}\$/.lo/" 59386dafe34Smrgextracted_archives= 59486dafe34Smrgextracted_serial=0 59576888252Smrg 59686dafe34Smrgopt_dry_run=false 59786dafe34Smrgopt_duplicate_deps=false 59886dafe34Smrgopt_silent=false 59986dafe34Smrgopt_debug=: 60076888252Smrg 60186dafe34Smrg# If this variable is set in any of the actions, the command in it 60286dafe34Smrg# will be execed at the end. This prevents here-documents from being 60386dafe34Smrg# left over by shells. 60486dafe34Smrgexec_cmd= 60576888252Smrg 60686dafe34Smrg# func_fatal_configuration arg... 60786dafe34Smrg# Echo program name prefixed message to standard error, followed by 60886dafe34Smrg# a configuration failure hint, and exit. 60986dafe34Smrgfunc_fatal_configuration () 61086dafe34Smrg{ 61186dafe34Smrg func_error ${1+"$@"} 61286dafe34Smrg func_error "See the $PACKAGE documentation for more information." 61386dafe34Smrg func_fatal_error "Fatal configuration error." 61486dafe34Smrg} 61586dafe34Smrg 61686dafe34Smrg 61786dafe34Smrg# func_config 61886dafe34Smrg# Display the configuration for all the tags in this script. 61986dafe34Smrgfunc_config () 62086dafe34Smrg{ 62186dafe34Smrg re_begincf='^# ### BEGIN LIBTOOL' 62286dafe34Smrg re_endcf='^# ### END LIBTOOL' 62386dafe34Smrg 62486dafe34Smrg # Default configuration. 62586dafe34Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 62676888252Smrg 62776888252Smrg # Now print the configurations for the tags. 62876888252Smrg for tagname in $taglist; do 62986dafe34Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 63076888252Smrg done 63176888252Smrg 63286dafe34Smrg exit $? 63386dafe34Smrg} 63476888252Smrg 63586dafe34Smrg# func_features 63686dafe34Smrg# Display the features supported by this script. 63786dafe34Smrgfunc_features () 63886dafe34Smrg{ 63986dafe34Smrg $ECHO "host: $host" 64076888252Smrg if test "$build_libtool_libs" = yes; then 64186dafe34Smrg $ECHO "enable shared libraries" 64276888252Smrg else 64386dafe34Smrg $ECHO "disable shared libraries" 64476888252Smrg fi 64576888252Smrg if test "$build_old_libs" = yes; then 64686dafe34Smrg $ECHO "enable static libraries" 64776888252Smrg else 64886dafe34Smrg $ECHO "disable static libraries" 64976888252Smrg fi 65086dafe34Smrg 65176888252Smrg exit $? 65286dafe34Smrg} 65386dafe34Smrg 65486dafe34Smrg# func_enable_tag tagname 65586dafe34Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 65686dafe34Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 65786dafe34Smrg# variable here. 65886dafe34Smrgfunc_enable_tag () 65986dafe34Smrg{ 66086dafe34Smrg # Global variable: 66186dafe34Smrg tagname="$1" 66276888252Smrg 66386dafe34Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 66486dafe34Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 66586dafe34Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 66676888252Smrg 66786dafe34Smrg # Validate tagname. 66886dafe34Smrg case $tagname in 66986dafe34Smrg *[!-_A-Za-z0-9,/]*) 67086dafe34Smrg func_fatal_error "invalid tag name: $tagname" 67186dafe34Smrg ;; 67286dafe34Smrg esac 67376888252Smrg 67486dafe34Smrg # Don't test for the "default" C tag, as we know it's 67586dafe34Smrg # there but not specially marked. 67686dafe34Smrg case $tagname in 67786dafe34Smrg CC) ;; 67886dafe34Smrg *) 67986dafe34Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 68086dafe34Smrg taglist="$taglist $tagname" 68186dafe34Smrg 68286dafe34Smrg # Evaluate the configuration. Be careful to quote the path 68386dafe34Smrg # and the sed script, to avoid splitting on whitespace, but 68486dafe34Smrg # also don't use non-portable quotes within backquotes within 68586dafe34Smrg # quotes we have to do it in 2 steps: 68686dafe34Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 68786dafe34Smrg eval "$extractedcf" 68886dafe34Smrg else 68986dafe34Smrg func_error "ignoring unknown tag $tagname" 69086dafe34Smrg fi 69186dafe34Smrg ;; 69286dafe34Smrg esac 69386dafe34Smrg} 69476888252Smrg 69586dafe34Smrg# Parse options once, thoroughly. This comes as soon as possible in 69686dafe34Smrg# the script to make things like `libtool --version' happen quickly. 69786dafe34Smrg{ 69876888252Smrg 69986dafe34Smrg # Shorthand for --mode=foo, only valid as the first argument 70086dafe34Smrg case $1 in 70186dafe34Smrg clean|clea|cle|cl) 70286dafe34Smrg shift; set dummy --mode clean ${1+"$@"}; shift 70376888252Smrg ;; 70486dafe34Smrg compile|compil|compi|comp|com|co|c) 70586dafe34Smrg shift; set dummy --mode compile ${1+"$@"}; shift 70676888252Smrg ;; 70786dafe34Smrg execute|execut|execu|exec|exe|ex|e) 70886dafe34Smrg shift; set dummy --mode execute ${1+"$@"}; shift 70976888252Smrg ;; 71086dafe34Smrg finish|finis|fini|fin|fi|f) 71186dafe34Smrg shift; set dummy --mode finish ${1+"$@"}; shift 71276888252Smrg ;; 71386dafe34Smrg install|instal|insta|inst|ins|in|i) 71486dafe34Smrg shift; set dummy --mode install ${1+"$@"}; shift 71586dafe34Smrg ;; 71686dafe34Smrg link|lin|li|l) 71786dafe34Smrg shift; set dummy --mode link ${1+"$@"}; shift 71886dafe34Smrg ;; 71986dafe34Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 72086dafe34Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 72176888252Smrg ;; 72276888252Smrg esac 72376888252Smrg 72486dafe34Smrg # Parse non-mode specific arguments: 72586dafe34Smrg while test "$#" -gt 0; do 72686dafe34Smrg opt="$1" 72786dafe34Smrg shift 72876888252Smrg 72986dafe34Smrg case $opt in 73086dafe34Smrg --config) func_config ;; 73176888252Smrg 73286dafe34Smrg --debug) preserve_args="$preserve_args $opt" 73386dafe34Smrg func_echo "enabling shell trace mode" 73486dafe34Smrg opt_debug='set -x' 73586dafe34Smrg $opt_debug 73686dafe34Smrg ;; 73776888252Smrg 73886dafe34Smrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 73986dafe34Smrg execute_dlfiles="$execute_dlfiles $1" 74086dafe34Smrg shift 74186dafe34Smrg ;; 74276888252Smrg 74386dafe34Smrg --dry-run | -n) opt_dry_run=: ;; 74486dafe34Smrg --features) func_features ;; 74586dafe34Smrg --finish) mode="finish" ;; 74686dafe34Smrg 74786dafe34Smrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 74886dafe34Smrg case $1 in 74986dafe34Smrg # Valid mode arguments: 75086dafe34Smrg clean) ;; 75186dafe34Smrg compile) ;; 75286dafe34Smrg execute) ;; 75386dafe34Smrg finish) ;; 75486dafe34Smrg install) ;; 75586dafe34Smrg link) ;; 75686dafe34Smrg relink) ;; 75786dafe34Smrg uninstall) ;; 75886dafe34Smrg 75986dafe34Smrg # Catch anything else as an error 76086dafe34Smrg *) func_error "invalid argument for $opt" 76186dafe34Smrg exit_cmd=exit 76286dafe34Smrg break 76386dafe34Smrg ;; 76486dafe34Smrg esac 76586dafe34Smrg 76686dafe34Smrg mode="$1" 76786dafe34Smrg shift 76886dafe34Smrg ;; 76986dafe34Smrg 77086dafe34Smrg --preserve-dup-deps) 77186dafe34Smrg opt_duplicate_deps=: ;; 77286dafe34Smrg 77386dafe34Smrg --quiet|--silent) preserve_args="$preserve_args $opt" 77486dafe34Smrg opt_silent=: 77586dafe34Smrg ;; 77686dafe34Smrg 77786dafe34Smrg --verbose| -v) preserve_args="$preserve_args $opt" 77886dafe34Smrg opt_silent=false 77986dafe34Smrg ;; 78086dafe34Smrg 78186dafe34Smrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 78286dafe34Smrg preserve_args="$preserve_args $opt $1" 78386dafe34Smrg func_enable_tag "$1" # tagname is set here 78486dafe34Smrg shift 78586dafe34Smrg ;; 78686dafe34Smrg 78786dafe34Smrg # Separate optargs to long options: 78886dafe34Smrg -dlopen=*|--mode=*|--tag=*) 78986dafe34Smrg func_opt_split "$opt" 79086dafe34Smrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 79186dafe34Smrg shift 79286dafe34Smrg ;; 79386dafe34Smrg 79486dafe34Smrg -\?|-h) func_usage ;; 79586dafe34Smrg --help) opt_help=: ;; 79686dafe34Smrg --version) func_version ;; 79786dafe34Smrg 79886dafe34Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 79986dafe34Smrg 80086dafe34Smrg *) nonopt="$opt" 80186dafe34Smrg break 80286dafe34Smrg ;; 80386dafe34Smrg esac 80486dafe34Smrg done 80586dafe34Smrg 80686dafe34Smrg 80786dafe34Smrg case $host in 80886dafe34Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 80986dafe34Smrg # don't eliminate duplications in $postdeps and $predeps 81086dafe34Smrg opt_duplicate_compiler_generated_deps=: 81176888252Smrg ;; 81276888252Smrg *) 81386dafe34Smrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 81486dafe34Smrg ;; 81586dafe34Smrg esac 81676888252Smrg 81786dafe34Smrg # Having warned about all mis-specified options, bail out if 81886dafe34Smrg # anything was wrong. 81986dafe34Smrg $exit_cmd $EXIT_FAILURE 82086dafe34Smrg} 82186dafe34Smrg 82286dafe34Smrg# func_check_version_match 82386dafe34Smrg# Ensure that we are using m4 macros, and libtool script from the same 82486dafe34Smrg# release of libtool. 82586dafe34Smrgfunc_check_version_match () 82686dafe34Smrg{ 82786dafe34Smrg if test "$package_revision" != "$macro_revision"; then 82886dafe34Smrg if test "$VERSION" != "$macro_version"; then 82986dafe34Smrg if test -z "$macro_version"; then 83086dafe34Smrg cat >&2 <<_LT_EOF 83186dafe34Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 83286dafe34Smrg$progname: definition of this LT_INIT comes from an older release. 83386dafe34Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 83486dafe34Smrg$progname: and run autoconf again. 83586dafe34Smrg_LT_EOF 83686dafe34Smrg else 83786dafe34Smrg cat >&2 <<_LT_EOF 83886dafe34Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 83986dafe34Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 84086dafe34Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 84186dafe34Smrg$progname: and run autoconf again. 84286dafe34Smrg_LT_EOF 84376888252Smrg fi 84486dafe34Smrg else 84586dafe34Smrg cat >&2 <<_LT_EOF 84686dafe34Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 84786dafe34Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 84886dafe34Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 84986dafe34Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 85086dafe34Smrg_LT_EOF 85186dafe34Smrg fi 85286dafe34Smrg 85386dafe34Smrg exit $EXIT_MISMATCH 85486dafe34Smrg fi 85586dafe34Smrg} 85686dafe34Smrg 85786dafe34Smrg 85886dafe34Smrg## ----------- ## 85986dafe34Smrg## Main. ## 86086dafe34Smrg## ----------- ## 86186dafe34Smrg 86286dafe34Smrg$opt_help || { 86386dafe34Smrg # Sanity checks first: 86486dafe34Smrg func_check_version_match 86586dafe34Smrg 86686dafe34Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 86786dafe34Smrg func_fatal_configuration "not configured to build any kind of library" 86876888252Smrg fi 86976888252Smrg 87086dafe34Smrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 87186dafe34Smrg 87286dafe34Smrg 87386dafe34Smrg # Darwin sucks 87486dafe34Smrg eval std_shrext=\"$shrext_cmds\" 87586dafe34Smrg 87686dafe34Smrg 87776888252Smrg # Only execute mode is allowed to have -dlopen flags. 87876888252Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 87986dafe34Smrg func_error "unrecognized option \`-dlopen'" 88086dafe34Smrg $ECHO "$help" 1>&2 88176888252Smrg exit $EXIT_FAILURE 88276888252Smrg fi 88376888252Smrg 88476888252Smrg # Change the help message to a mode-specific one. 88576888252Smrg generic_help="$help" 88686dafe34Smrg help="Try \`$progname --help --mode=$mode' for more information." 88786dafe34Smrg} 88876888252Smrg 88976888252Smrg 89086dafe34Smrg# func_lalib_p file 89186dafe34Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 89286dafe34Smrg# This function is only a basic sanity check; it will hardly flush out 89386dafe34Smrg# determined imposters. 89486dafe34Smrgfunc_lalib_p () 89586dafe34Smrg{ 89686dafe34Smrg test -f "$1" && 89786dafe34Smrg $SED -e 4q "$1" 2>/dev/null \ 89886dafe34Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 89986dafe34Smrg} 90076888252Smrg 90186dafe34Smrg# func_lalib_unsafe_p file 90286dafe34Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 90386dafe34Smrg# This function implements the same check as func_lalib_p without 90486dafe34Smrg# resorting to external programs. To this end, it redirects stdin and 90586dafe34Smrg# closes it afterwards, without saving the original file descriptor. 90686dafe34Smrg# As a safety measure, use it only where a negative result would be 90786dafe34Smrg# fatal anyway. Works if `file' does not exist. 90886dafe34Smrgfunc_lalib_unsafe_p () 90986dafe34Smrg{ 91086dafe34Smrg lalib_p=no 91186dafe34Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 91286dafe34Smrg for lalib_p_l in 1 2 3 4 91386dafe34Smrg do 91486dafe34Smrg read lalib_p_line 91586dafe34Smrg case "$lalib_p_line" in 91686dafe34Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 91786dafe34Smrg esac 91886dafe34Smrg done 91986dafe34Smrg exec 0<&5 5<&- 92086dafe34Smrg fi 92186dafe34Smrg test "$lalib_p" = yes 92286dafe34Smrg} 92376888252Smrg 92486dafe34Smrg# func_ltwrapper_script_p file 92586dafe34Smrg# True iff FILE is a libtool wrapper script 92686dafe34Smrg# This function is only a basic sanity check; it will hardly flush out 92786dafe34Smrg# determined imposters. 92886dafe34Smrgfunc_ltwrapper_script_p () 92986dafe34Smrg{ 93086dafe34Smrg func_lalib_p "$1" 93186dafe34Smrg} 93276888252Smrg 93386dafe34Smrg# func_ltwrapper_executable_p file 93486dafe34Smrg# True iff FILE is a libtool wrapper executable 93586dafe34Smrg# This function is only a basic sanity check; it will hardly flush out 93686dafe34Smrg# determined imposters. 93786dafe34Smrgfunc_ltwrapper_executable_p () 93886dafe34Smrg{ 93986dafe34Smrg func_ltwrapper_exec_suffix= 94086dafe34Smrg case $1 in 94186dafe34Smrg *.exe) ;; 94286dafe34Smrg *) func_ltwrapper_exec_suffix=.exe ;; 94386dafe34Smrg esac 94486dafe34Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 94586dafe34Smrg} 94676888252Smrg 94786dafe34Smrg# func_ltwrapper_scriptname file 94886dafe34Smrg# Assumes file is an ltwrapper_executable 94986dafe34Smrg# uses $file to determine the appropriate filename for a 95086dafe34Smrg# temporary ltwrapper_script. 95186dafe34Smrgfunc_ltwrapper_scriptname () 95286dafe34Smrg{ 95386dafe34Smrg func_ltwrapper_scriptname_result="" 95486dafe34Smrg if func_ltwrapper_executable_p "$1"; then 95586dafe34Smrg func_dirname_and_basename "$1" "" "." 95686dafe34Smrg func_stripname '' '.exe' "$func_basename_result" 95786dafe34Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 95886dafe34Smrg fi 95986dafe34Smrg} 96076888252Smrg 96186dafe34Smrg# func_ltwrapper_p file 96286dafe34Smrg# True iff FILE is a libtool wrapper script or wrapper executable 96386dafe34Smrg# This function is only a basic sanity check; it will hardly flush out 96486dafe34Smrg# determined imposters. 96586dafe34Smrgfunc_ltwrapper_p () 96686dafe34Smrg{ 96786dafe34Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 96886dafe34Smrg} 96976888252Smrg 97076888252Smrg 97186dafe34Smrg# func_execute_cmds commands fail_cmd 97286dafe34Smrg# Execute tilde-delimited COMMANDS. 97386dafe34Smrg# If FAIL_CMD is given, eval that upon failure. 97486dafe34Smrg# FAIL_CMD may read-access the current command in variable CMD! 97586dafe34Smrgfunc_execute_cmds () 97686dafe34Smrg{ 97786dafe34Smrg $opt_debug 97886dafe34Smrg save_ifs=$IFS; IFS='~' 97986dafe34Smrg for cmd in $1; do 98086dafe34Smrg IFS=$save_ifs 98186dafe34Smrg eval cmd=\"$cmd\" 98286dafe34Smrg func_show_eval "$cmd" "${2-:}" 98386dafe34Smrg done 98486dafe34Smrg IFS=$save_ifs 98586dafe34Smrg} 98686dafe34Smrg 98786dafe34Smrg 98886dafe34Smrg# func_source file 98986dafe34Smrg# Source FILE, adding directory component if necessary. 99086dafe34Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 99186dafe34Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 99286dafe34Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 99386dafe34Smrg# `FILE.' does not work on cygwin managed mounts. 99486dafe34Smrgfunc_source () 99586dafe34Smrg{ 99686dafe34Smrg $opt_debug 99786dafe34Smrg case $1 in 99886dafe34Smrg */* | *\\*) . "$1" ;; 99986dafe34Smrg *) . "./$1" ;; 100086dafe34Smrg esac 100186dafe34Smrg} 100286dafe34Smrg 100386dafe34Smrg 100486dafe34Smrg# func_infer_tag arg 100586dafe34Smrg# Infer tagged configuration to use if any are available and 100686dafe34Smrg# if one wasn't chosen via the "--tag" command line option. 100786dafe34Smrg# Only attempt this if the compiler in the base compile 100886dafe34Smrg# command doesn't match the default compiler. 100986dafe34Smrg# arg is usually of the form 'gcc ...' 101086dafe34Smrgfunc_infer_tag () 101186dafe34Smrg{ 101286dafe34Smrg $opt_debug 101386dafe34Smrg if test -n "$available_tags" && test -z "$tagname"; then 101486dafe34Smrg CC_quoted= 101586dafe34Smrg for arg in $CC; do 101686dafe34Smrg func_quote_for_eval "$arg" 101786dafe34Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 101886dafe34Smrg done 101986dafe34Smrg case $@ in 102086dafe34Smrg # Blanks in the command may have been stripped by the calling shell, 102186dafe34Smrg # but not from the CC environment variable when configure was run. 102286dafe34Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; 102386dafe34Smrg # Blanks at the start of $base_compile will cause this to fail 102486dafe34Smrg # if we don't check for them as well. 102586dafe34Smrg *) 102686dafe34Smrg for z in $available_tags; do 102786dafe34Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 102886dafe34Smrg # Evaluate the configuration. 102986dafe34Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 103086dafe34Smrg CC_quoted= 103186dafe34Smrg for arg in $CC; do 103286dafe34Smrg # Double-quote args containing other shell metacharacters. 103386dafe34Smrg func_quote_for_eval "$arg" 103486dafe34Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 103586dafe34Smrg done 103686dafe34Smrg case "$@ " in 103786dafe34Smrg " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) 103886dafe34Smrg # The compiler in the base compile command matches 103986dafe34Smrg # the one in the tagged configuration. 104086dafe34Smrg # Assume this is the tagged configuration we want. 104186dafe34Smrg tagname=$z 104286dafe34Smrg break 104386dafe34Smrg ;; 104476888252Smrg esac 104586dafe34Smrg fi 104686dafe34Smrg done 104786dafe34Smrg # If $tagname still isn't set, then no tagged configuration 104886dafe34Smrg # was found and let the user know that the "--tag" command 104986dafe34Smrg # line option must be used. 105086dafe34Smrg if test -z "$tagname"; then 105186dafe34Smrg func_echo "unable to infer tagged configuration" 105286dafe34Smrg func_fatal_error "specify a tag with \`--tag'" 105386dafe34Smrg# else 105486dafe34Smrg# func_verbose "using $tagname tagged configuration" 105586dafe34Smrg fi 105686dafe34Smrg ;; 105786dafe34Smrg esac 105886dafe34Smrg fi 105986dafe34Smrg} 106086dafe34Smrg 106186dafe34Smrg 106286dafe34Smrg 106386dafe34Smrg# func_write_libtool_object output_name pic_name nonpic_name 106486dafe34Smrg# Create a libtool object file (analogous to a ".la" file), 106586dafe34Smrg# but don't create it if we're doing a dry run. 106686dafe34Smrgfunc_write_libtool_object () 106786dafe34Smrg{ 106886dafe34Smrg write_libobj=${1} 106986dafe34Smrg if test "$build_libtool_libs" = yes; then 107086dafe34Smrg write_lobj=\'${2}\' 107186dafe34Smrg else 107286dafe34Smrg write_lobj=none 107386dafe34Smrg fi 107486dafe34Smrg 107586dafe34Smrg if test "$build_old_libs" = yes; then 107686dafe34Smrg write_oldobj=\'${3}\' 107786dafe34Smrg else 107886dafe34Smrg write_oldobj=none 107986dafe34Smrg fi 108086dafe34Smrg 108186dafe34Smrg $opt_dry_run || { 108286dafe34Smrg cat >${write_libobj}T <<EOF 108386dafe34Smrg# $write_libobj - a libtool object file 108486dafe34Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 108586dafe34Smrg# 108686dafe34Smrg# Please DO NOT delete this file! 108786dafe34Smrg# It is necessary for linking the library. 108886dafe34Smrg 108986dafe34Smrg# Name of the PIC object. 109086dafe34Smrgpic_object=$write_lobj 109186dafe34Smrg 109286dafe34Smrg# Name of the non-PIC object 109386dafe34Smrgnon_pic_object=$write_oldobj 109486dafe34Smrg 109586dafe34SmrgEOF 109686dafe34Smrg $MV "${write_libobj}T" "${write_libobj}" 109786dafe34Smrg } 109886dafe34Smrg} 109986dafe34Smrg 110086dafe34Smrg# func_mode_compile arg... 110186dafe34Smrgfunc_mode_compile () 110286dafe34Smrg{ 110386dafe34Smrg $opt_debug 110486dafe34Smrg # Get the compilation command and the source file. 110586dafe34Smrg base_compile= 110686dafe34Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 110786dafe34Smrg suppress_opt=yes 110886dafe34Smrg suppress_output= 110986dafe34Smrg arg_mode=normal 111086dafe34Smrg libobj= 111186dafe34Smrg later= 111286dafe34Smrg pie_flag= 111386dafe34Smrg 111486dafe34Smrg for arg 111586dafe34Smrg do 111686dafe34Smrg case $arg_mode in 111786dafe34Smrg arg ) 111886dafe34Smrg # do not "continue". Instead, add this to base_compile 111986dafe34Smrg lastarg="$arg" 112086dafe34Smrg arg_mode=normal 112186dafe34Smrg ;; 112286dafe34Smrg 112386dafe34Smrg target ) 112486dafe34Smrg libobj="$arg" 112586dafe34Smrg arg_mode=normal 112686dafe34Smrg continue 112786dafe34Smrg ;; 112886dafe34Smrg 112986dafe34Smrg normal ) 113086dafe34Smrg # Accept any command-line options. 113186dafe34Smrg case $arg in 113286dafe34Smrg -o) 113386dafe34Smrg test -n "$libobj" && \ 113486dafe34Smrg func_fatal_error "you cannot specify \`-o' more than once" 113586dafe34Smrg arg_mode=target 113686dafe34Smrg continue 113786dafe34Smrg ;; 113886dafe34Smrg 113986dafe34Smrg -pie | -fpie | -fPIE) 114086dafe34Smrg pie_flag="$pie_flag $arg" 114186dafe34Smrg continue 114286dafe34Smrg ;; 114386dafe34Smrg 114486dafe34Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 114586dafe34Smrg later="$later $arg" 114686dafe34Smrg continue 114786dafe34Smrg ;; 114886dafe34Smrg 114986dafe34Smrg -no-suppress) 115086dafe34Smrg suppress_opt=no 115186dafe34Smrg continue 115286dafe34Smrg ;; 115386dafe34Smrg 115486dafe34Smrg -Xcompiler) 115586dafe34Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 115686dafe34Smrg continue # The current "srcfile" will either be retained or 115786dafe34Smrg ;; # replaced later. I would guess that would be a bug. 115886dafe34Smrg 115986dafe34Smrg -Wc,*) 116086dafe34Smrg func_stripname '-Wc,' '' "$arg" 116186dafe34Smrg args=$func_stripname_result 116286dafe34Smrg lastarg= 116386dafe34Smrg save_ifs="$IFS"; IFS=',' 116486dafe34Smrg for arg in $args; do 116586dafe34Smrg IFS="$save_ifs" 116686dafe34Smrg func_quote_for_eval "$arg" 116786dafe34Smrg lastarg="$lastarg $func_quote_for_eval_result" 116876888252Smrg done 116976888252Smrg IFS="$save_ifs" 117086dafe34Smrg func_stripname ' ' '' "$lastarg" 117186dafe34Smrg lastarg=$func_stripname_result 117276888252Smrg 117376888252Smrg # Add the arguments to base_compile. 117476888252Smrg base_compile="$base_compile $lastarg" 117576888252Smrg continue 117676888252Smrg ;; 117776888252Smrg 117886dafe34Smrg *) 117976888252Smrg # Accept the current argument as the source file. 118076888252Smrg # The previous "srcfile" becomes the current argument. 118176888252Smrg # 118276888252Smrg lastarg="$srcfile" 118376888252Smrg srcfile="$arg" 118476888252Smrg ;; 118576888252Smrg esac # case $arg 118676888252Smrg ;; 118776888252Smrg esac # case $arg_mode 118876888252Smrg 118976888252Smrg # Aesthetically quote the previous argument. 119086dafe34Smrg func_quote_for_eval "$lastarg" 119186dafe34Smrg base_compile="$base_compile $func_quote_for_eval_result" 119276888252Smrg done # for arg 119376888252Smrg 119476888252Smrg case $arg_mode in 119576888252Smrg arg) 119686dafe34Smrg func_fatal_error "you must specify an argument for -Xcompile" 119776888252Smrg ;; 119876888252Smrg target) 119986dafe34Smrg func_fatal_error "you must specify a target with \`-o'" 120076888252Smrg ;; 120176888252Smrg *) 120276888252Smrg # Get the name of the library object. 120386dafe34Smrg test -z "$libobj" && { 120486dafe34Smrg func_basename "$srcfile" 120586dafe34Smrg libobj="$func_basename_result" 120686dafe34Smrg } 120776888252Smrg ;; 120876888252Smrg esac 120976888252Smrg 121076888252Smrg # Recognize several different file suffixes. 121176888252Smrg # If the user specifies -o file.o, it is replaced with file.lo 121276888252Smrg case $libobj in 121386dafe34Smrg *.[cCFSifmso] | \ 121486dafe34Smrg *.ada | *.adb | *.ads | *.asm | \ 121586dafe34Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 121686dafe34Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx) 121786dafe34Smrg func_xform "$libobj" 121886dafe34Smrg libobj=$func_xform_result 121986dafe34Smrg ;; 122076888252Smrg esac 122176888252Smrg 122276888252Smrg case $libobj in 122386dafe34Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 122476888252Smrg *) 122586dafe34Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 122676888252Smrg ;; 122776888252Smrg esac 122876888252Smrg 122976888252Smrg func_infer_tag $base_compile 123076888252Smrg 123176888252Smrg for arg in $later; do 123276888252Smrg case $arg in 123386dafe34Smrg -shared) 123486dafe34Smrg test "$build_libtool_libs" != yes && \ 123586dafe34Smrg func_fatal_configuration "can not build a shared library" 123686dafe34Smrg build_old_libs=no 123786dafe34Smrg continue 123886dafe34Smrg ;; 123986dafe34Smrg 124076888252Smrg -static) 124186dafe34Smrg build_libtool_libs=no 124276888252Smrg build_old_libs=yes 124376888252Smrg continue 124476888252Smrg ;; 124576888252Smrg 124676888252Smrg -prefer-pic) 124776888252Smrg pic_mode=yes 124876888252Smrg continue 124976888252Smrg ;; 125076888252Smrg 125176888252Smrg -prefer-non-pic) 125276888252Smrg pic_mode=no 125376888252Smrg continue 125476888252Smrg ;; 125576888252Smrg esac 125676888252Smrg done 125776888252Smrg 125886dafe34Smrg func_quote_for_eval "$libobj" 125986dafe34Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 126086dafe34Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 126186dafe34Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 126286dafe34Smrg func_dirname_and_basename "$obj" "/" "" 126386dafe34Smrg objname="$func_basename_result" 126486dafe34Smrg xdir="$func_dirname_result" 126576888252Smrg lobj=${xdir}$objdir/$objname 126676888252Smrg 126786dafe34Smrg test -z "$base_compile" && \ 126886dafe34Smrg func_fatal_help "you must specify a compilation command" 126976888252Smrg 127076888252Smrg # Delete any leftover library objects. 127176888252Smrg if test "$build_old_libs" = yes; then 127276888252Smrg removelist="$obj $lobj $libobj ${libobj}T" 127376888252Smrg else 127476888252Smrg removelist="$lobj $libobj ${libobj}T" 127576888252Smrg fi 127676888252Smrg 127776888252Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 127876888252Smrg case $host_os in 127986dafe34Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 128076888252Smrg pic_mode=default 128176888252Smrg ;; 128276888252Smrg esac 128376888252Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 128476888252Smrg # non-PIC code in shared libraries is not supported 128576888252Smrg pic_mode=default 128676888252Smrg fi 128776888252Smrg 128876888252Smrg # Calculate the filename of the output object if compiler does 128976888252Smrg # not support -o with -c 129076888252Smrg if test "$compiler_c_o" = no; then 129186dafe34Smrg output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 129276888252Smrg lockfile="$output_obj.lock" 129376888252Smrg else 129476888252Smrg output_obj= 129576888252Smrg need_locks=no 129676888252Smrg lockfile= 129776888252Smrg fi 129876888252Smrg 129976888252Smrg # Lock this critical section if it is needed 130076888252Smrg # We use this script file to make the link, it avoids creating a new file 130176888252Smrg if test "$need_locks" = yes; then 130286dafe34Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 130386dafe34Smrg func_echo "Waiting for $lockfile to be removed" 130476888252Smrg sleep 2 130576888252Smrg done 130676888252Smrg elif test "$need_locks" = warn; then 130776888252Smrg if test -f "$lockfile"; then 130886dafe34Smrg $ECHO "\ 130976888252Smrg*** ERROR, $lockfile exists and contains: 131076888252Smrg`cat $lockfile 2>/dev/null` 131176888252Smrg 131276888252SmrgThis indicates that another process is trying to use the same 131376888252Smrgtemporary object file, and libtool could not work around it because 131476888252Smrgyour compiler does not support \`-c' and \`-o' together. If you 131576888252Smrgrepeat this compilation, it may succeed, by chance, but you had better 131676888252Smrgavoid parallel builds (make -j) in this platform, or get a better 131776888252Smrgcompiler." 131876888252Smrg 131986dafe34Smrg $opt_dry_run || $RM $removelist 132076888252Smrg exit $EXIT_FAILURE 132176888252Smrg fi 132286dafe34Smrg removelist="$removelist $output_obj" 132386dafe34Smrg $ECHO "$srcfile" > "$lockfile" 132476888252Smrg fi 132576888252Smrg 132686dafe34Smrg $opt_dry_run || $RM $removelist 132786dafe34Smrg removelist="$removelist $lockfile" 132886dafe34Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 132986dafe34Smrg 133076888252Smrg if test -n "$fix_srcfile_path"; then 133176888252Smrg eval srcfile=\"$fix_srcfile_path\" 133276888252Smrg fi 133386dafe34Smrg func_quote_for_eval "$srcfile" 133486dafe34Smrg qsrcfile=$func_quote_for_eval_result 133576888252Smrg 133676888252Smrg # Only build a PIC object if we are building libtool libraries. 133776888252Smrg if test "$build_libtool_libs" = yes; then 133876888252Smrg # Without this assignment, base_compile gets emptied. 133976888252Smrg fbsd_hideous_sh_bug=$base_compile 134076888252Smrg 134176888252Smrg if test "$pic_mode" != no; then 134276888252Smrg command="$base_compile $qsrcfile $pic_flag" 134376888252Smrg else 134476888252Smrg # Don't build PIC code 134576888252Smrg command="$base_compile $qsrcfile" 134676888252Smrg fi 134776888252Smrg 134886dafe34Smrg func_mkdir_p "$xdir$objdir" 134976888252Smrg 135076888252Smrg if test -z "$output_obj"; then 135176888252Smrg # Place PIC objects in $objdir 135276888252Smrg command="$command -o $lobj" 135376888252Smrg fi 135476888252Smrg 135586dafe34Smrg func_show_eval_locale "$command" \ 135686dafe34Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 135776888252Smrg 135876888252Smrg if test "$need_locks" = warn && 135976888252Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 136086dafe34Smrg $ECHO "\ 136176888252Smrg*** ERROR, $lockfile contains: 136276888252Smrg`cat $lockfile 2>/dev/null` 136376888252Smrg 136476888252Smrgbut it should contain: 136576888252Smrg$srcfile 136676888252Smrg 136776888252SmrgThis indicates that another process is trying to use the same 136876888252Smrgtemporary object file, and libtool could not work around it because 136976888252Smrgyour compiler does not support \`-c' and \`-o' together. If you 137076888252Smrgrepeat this compilation, it may succeed, by chance, but you had better 137176888252Smrgavoid parallel builds (make -j) in this platform, or get a better 137276888252Smrgcompiler." 137376888252Smrg 137486dafe34Smrg $opt_dry_run || $RM $removelist 137576888252Smrg exit $EXIT_FAILURE 137676888252Smrg fi 137776888252Smrg 137876888252Smrg # Just move the object if needed, then go on to compile the next one 137976888252Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 138086dafe34Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 138186dafe34Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 138276888252Smrg fi 138376888252Smrg 138476888252Smrg # Allow error messages only from the first compilation. 138576888252Smrg if test "$suppress_opt" = yes; then 138686dafe34Smrg suppress_output=' >/dev/null 2>&1' 138776888252Smrg fi 138876888252Smrg fi 138976888252Smrg 139076888252Smrg # Only build a position-dependent object if we build old libraries. 139176888252Smrg if test "$build_old_libs" = yes; then 139276888252Smrg if test "$pic_mode" != yes; then 139376888252Smrg # Don't build PIC code 139486dafe34Smrg command="$base_compile $qsrcfile$pie_flag" 139576888252Smrg else 139676888252Smrg command="$base_compile $qsrcfile $pic_flag" 139776888252Smrg fi 139876888252Smrg if test "$compiler_c_o" = yes; then 139976888252Smrg command="$command -o $obj" 140076888252Smrg fi 140176888252Smrg 140276888252Smrg # Suppress compiler output if we already did a PIC compilation. 140376888252Smrg command="$command$suppress_output" 140486dafe34Smrg func_show_eval_locale "$command" \ 140586dafe34Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 140676888252Smrg 140776888252Smrg if test "$need_locks" = warn && 140876888252Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 140986dafe34Smrg $ECHO "\ 141076888252Smrg*** ERROR, $lockfile contains: 141176888252Smrg`cat $lockfile 2>/dev/null` 141276888252Smrg 141376888252Smrgbut it should contain: 141476888252Smrg$srcfile 141576888252Smrg 141676888252SmrgThis indicates that another process is trying to use the same 141776888252Smrgtemporary object file, and libtool could not work around it because 141876888252Smrgyour compiler does not support \`-c' and \`-o' together. If you 141976888252Smrgrepeat this compilation, it may succeed, by chance, but you had better 142076888252Smrgavoid parallel builds (make -j) in this platform, or get a better 142176888252Smrgcompiler." 142276888252Smrg 142386dafe34Smrg $opt_dry_run || $RM $removelist 142476888252Smrg exit $EXIT_FAILURE 142576888252Smrg fi 142676888252Smrg 142776888252Smrg # Just move the object if needed 142876888252Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 142986dafe34Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 143086dafe34Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 143176888252Smrg fi 143276888252Smrg fi 143376888252Smrg 143486dafe34Smrg $opt_dry_run || { 143586dafe34Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 143676888252Smrg 143786dafe34Smrg # Unlock the critical section if it was locked 143886dafe34Smrg if test "$need_locks" != no; then 143986dafe34Smrg removelist=$lockfile 144086dafe34Smrg $RM "$lockfile" 144186dafe34Smrg fi 144286dafe34Smrg } 144376888252Smrg 144476888252Smrg exit $EXIT_SUCCESS 144586dafe34Smrg} 144676888252Smrg 144786dafe34Smrg$opt_help || { 144886dafe34Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"} 144986dafe34Smrg} 145076888252Smrg 145186dafe34Smrgfunc_mode_help () 145286dafe34Smrg{ 145386dafe34Smrg # We need to display help for each of the modes. 145486dafe34Smrg case $mode in 145586dafe34Smrg "") 145686dafe34Smrg # Generic help is extracted from the usage comments 145786dafe34Smrg # at the start of this file. 145886dafe34Smrg func_help 145986dafe34Smrg ;; 146076888252Smrg 146186dafe34Smrg clean) 146286dafe34Smrg $ECHO \ 146386dafe34Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 146476888252Smrg 146586dafe34SmrgRemove files from the build directory. 146676888252Smrg 146786dafe34SmrgRM is the name of the program to use to delete files associated with each FILE 146886dafe34Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 146986dafe34Smrgto RM. 147076888252Smrg 147186dafe34SmrgIf FILE is a libtool library, object or program, all the files associated 147286dafe34Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 147386dafe34Smrg ;; 147476888252Smrg 147586dafe34Smrg compile) 147686dafe34Smrg $ECHO \ 147786dafe34Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 147876888252Smrg 147986dafe34SmrgCompile a source file into a libtool library object. 148076888252Smrg 148186dafe34SmrgThis mode accepts the following additional options: 148276888252Smrg 148386dafe34Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 148486dafe34Smrg -no-suppress do not suppress compiler output for multiple passes 148586dafe34Smrg -prefer-pic try to building PIC objects only 148686dafe34Smrg -prefer-non-pic try to building non-PIC objects only 148786dafe34Smrg -shared do not build a \`.o' file suitable for static linking 148886dafe34Smrg -static only build a \`.o' file suitable for static linking 148976888252Smrg 149086dafe34SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 149186dafe34Smrgfrom the given SOURCEFILE. 149276888252Smrg 149386dafe34SmrgThe output file name is determined by removing the directory component from 149486dafe34SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 149586dafe34Smrglibrary object suffix, \`.lo'." 149686dafe34Smrg ;; 149776888252Smrg 149886dafe34Smrg execute) 149986dafe34Smrg $ECHO \ 150086dafe34Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 150176888252Smrg 150286dafe34SmrgAutomatically set library path, then run a program. 150376888252Smrg 150486dafe34SmrgThis mode accepts the following additional options: 150576888252Smrg 150686dafe34Smrg -dlopen FILE add the directory containing FILE to the library path 150776888252Smrg 150886dafe34SmrgThis mode sets the library path environment variable according to \`-dlopen' 150986dafe34Smrgflags. 151076888252Smrg 151186dafe34SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 151286dafe34Smrginto their corresponding uninstalled binary, and any of their required library 151386dafe34Smrgdirectories are added to the library path. 151476888252Smrg 151586dafe34SmrgThen, COMMAND is executed, with ARGS as arguments." 151686dafe34Smrg ;; 151776888252Smrg 151886dafe34Smrg finish) 151986dafe34Smrg $ECHO \ 152086dafe34Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 152176888252Smrg 152286dafe34SmrgComplete the installation of libtool libraries. 152376888252Smrg 152486dafe34SmrgEach LIBDIR is a directory that contains libtool libraries. 152576888252Smrg 152686dafe34SmrgThe commands that this mode executes may require superuser privileges. Use 152786dafe34Smrgthe \`--dry-run' option if you just want to see what would be executed." 152886dafe34Smrg ;; 152976888252Smrg 153086dafe34Smrg install) 153186dafe34Smrg $ECHO \ 153286dafe34Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 153376888252Smrg 153486dafe34SmrgInstall executables or libraries. 153576888252Smrg 153686dafe34SmrgINSTALL-COMMAND is the installation command. The first component should be 153786dafe34Smrgeither the \`install' or \`cp' program. 153876888252Smrg 153986dafe34SmrgThe following components of INSTALL-COMMAND are treated specially: 154076888252Smrg 154186dafe34Smrg -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation 154276888252Smrg 154386dafe34SmrgThe rest of the components are interpreted as arguments to that command (only 154486dafe34SmrgBSD-compatible install options are recognized)." 154586dafe34Smrg ;; 154676888252Smrg 154786dafe34Smrg link) 154886dafe34Smrg $ECHO \ 154986dafe34Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 155076888252Smrg 155186dafe34SmrgLink object files or libraries together to form another library, or to 155286dafe34Smrgcreate an executable program. 155376888252Smrg 155486dafe34SmrgLINK-COMMAND is a command using the C compiler that you would use to create 155586dafe34Smrga program from several object files. 155676888252Smrg 155786dafe34SmrgThe following components of LINK-COMMAND are treated specially: 155876888252Smrg 155986dafe34Smrg -all-static do not do any dynamic linking at all 156086dafe34Smrg -avoid-version do not add a version suffix if possible 156186dafe34Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 156286dafe34Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 156386dafe34Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 156486dafe34Smrg -export-symbols SYMFILE 156586dafe34Smrg try to export only the symbols listed in SYMFILE 156686dafe34Smrg -export-symbols-regex REGEX 156786dafe34Smrg try to export only the symbols matching REGEX 156886dafe34Smrg -LLIBDIR search LIBDIR for required installed libraries 156986dafe34Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 157086dafe34Smrg -module build a library that can dlopened 157186dafe34Smrg -no-fast-install disable the fast-install mode 157286dafe34Smrg -no-install link a not-installable executable 157386dafe34Smrg -no-undefined declare that a library does not refer to external symbols 157486dafe34Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 157586dafe34Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 157686dafe34Smrg -precious-files-regex REGEX 157786dafe34Smrg don't remove output files matching REGEX 157886dafe34Smrg -release RELEASE specify package release information 157986dafe34Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 158086dafe34Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 158186dafe34Smrg -shared only do dynamic linking of libtool libraries 158286dafe34Smrg -shrext SUFFIX override the standard shared library file extension 158386dafe34Smrg -static do not do any dynamic linking of uninstalled libtool libraries 158486dafe34Smrg -static-libtool-libs 158586dafe34Smrg do not do any dynamic linking of libtool libraries 158686dafe34Smrg -version-info CURRENT[:REVISION[:AGE]] 158786dafe34Smrg specify library version info [each variable defaults to 0] 158886dafe34Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 158976888252Smrg 159086dafe34SmrgAll other options (arguments beginning with \`-') are ignored. 159176888252Smrg 159286dafe34SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 159386dafe34Smrgtreated as uninstalled libtool libraries, other files are standard or library 159486dafe34Smrgobject files. 159576888252Smrg 159686dafe34SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 159786dafe34Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 159886dafe34Smrgrequired, except when creating a convenience library. 159976888252Smrg 160086dafe34SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 160186dafe34Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 160276888252Smrg 160386dafe34SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 160486dafe34Smrgis created, otherwise an executable program is created." 160576888252Smrg ;; 160676888252Smrg 160786dafe34Smrg uninstall) 160886dafe34Smrg $ECHO \ 160986dafe34Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 161076888252Smrg 161186dafe34SmrgRemove libraries from an installation directory. 161276888252Smrg 161386dafe34SmrgRM is the name of the program to use to delete files associated with each FILE 161486dafe34Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 161586dafe34Smrgto RM. 161676888252Smrg 161786dafe34SmrgIf FILE is a libtool library, all the files associated with it are deleted. 161886dafe34SmrgOtherwise, only FILE itself is deleted using RM." 161986dafe34Smrg ;; 162076888252Smrg 162186dafe34Smrg *) 162286dafe34Smrg func_fatal_help "invalid operation mode \`$mode'" 162386dafe34Smrg ;; 162486dafe34Smrg esac 162576888252Smrg 162686dafe34Smrg $ECHO 162786dafe34Smrg $ECHO "Try \`$progname --help' for more information about other modes." 162876888252Smrg 162986dafe34Smrg exit $? 163086dafe34Smrg} 163176888252Smrg 163286dafe34Smrg # Now that we've collected a possible --mode arg, show help if necessary 163386dafe34Smrg $opt_help && func_mode_help 163476888252Smrg 163576888252Smrg 163686dafe34Smrg# func_mode_execute arg... 163786dafe34Smrgfunc_mode_execute () 163886dafe34Smrg{ 163986dafe34Smrg $opt_debug 164086dafe34Smrg # The first argument is the command name. 164186dafe34Smrg cmd="$nonopt" 164286dafe34Smrg test -z "$cmd" && \ 164386dafe34Smrg func_fatal_help "you must specify a COMMAND" 164476888252Smrg 164586dafe34Smrg # Handle -dlopen flags immediately. 164686dafe34Smrg for file in $execute_dlfiles; do 164786dafe34Smrg test -f "$file" \ 164886dafe34Smrg || func_fatal_help "\`$file' is not a file" 164976888252Smrg 165086dafe34Smrg dir= 165186dafe34Smrg case $file in 165286dafe34Smrg *.la) 165386dafe34Smrg # Check to see that this really is a libtool archive. 165486dafe34Smrg func_lalib_unsafe_p "$file" \ 165586dafe34Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 165676888252Smrg 165786dafe34Smrg # Read the libtool library. 165886dafe34Smrg dlname= 165986dafe34Smrg library_names= 166086dafe34Smrg func_source "$file" 166176888252Smrg 166286dafe34Smrg # Skip this library if it cannot be dlopened. 166386dafe34Smrg if test -z "$dlname"; then 166486dafe34Smrg # Warn if it was a shared library. 166586dafe34Smrg test -n "$library_names" && \ 166686dafe34Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 166786dafe34Smrg continue 166886dafe34Smrg fi 166976888252Smrg 167086dafe34Smrg func_dirname "$file" "" "." 167186dafe34Smrg dir="$func_dirname_result" 167276888252Smrg 167386dafe34Smrg if test -f "$dir/$objdir/$dlname"; then 167486dafe34Smrg dir="$dir/$objdir" 167586dafe34Smrg else 167686dafe34Smrg if test ! -f "$dir/$dlname"; then 167786dafe34Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 167886dafe34Smrg fi 167986dafe34Smrg fi 168076888252Smrg ;; 168176888252Smrg 168286dafe34Smrg *.lo) 168386dafe34Smrg # Just add the directory containing the .lo file. 168486dafe34Smrg func_dirname "$file" "" "." 168586dafe34Smrg dir="$func_dirname_result" 168676888252Smrg ;; 168776888252Smrg 168886dafe34Smrg *) 168986dafe34Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 169076888252Smrg continue 169176888252Smrg ;; 169286dafe34Smrg esac 169376888252Smrg 169486dafe34Smrg # Get the absolute pathname. 169586dafe34Smrg absdir=`cd "$dir" && pwd` 169686dafe34Smrg test -n "$absdir" && dir="$absdir" 169776888252Smrg 169886dafe34Smrg # Now add the directory to shlibpath_var. 169986dafe34Smrg if eval "test -z \"\$$shlibpath_var\""; then 170086dafe34Smrg eval "$shlibpath_var=\"\$dir\"" 170186dafe34Smrg else 170286dafe34Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 170386dafe34Smrg fi 170486dafe34Smrg done 170576888252Smrg 170686dafe34Smrg # This variable tells wrapper scripts just to set shlibpath_var 170786dafe34Smrg # rather than running their programs. 170886dafe34Smrg libtool_execute_magic="$magic" 170976888252Smrg 171086dafe34Smrg # Check if any of the arguments is a wrapper script. 171186dafe34Smrg args= 171286dafe34Smrg for file 171386dafe34Smrg do 171486dafe34Smrg case $file in 171586dafe34Smrg -*) ;; 171686dafe34Smrg *) 171786dafe34Smrg # Do a test to see if this is really a libtool program. 171886dafe34Smrg if func_ltwrapper_script_p "$file"; then 171986dafe34Smrg func_source "$file" 172086dafe34Smrg # Transform arg to wrapped name. 172186dafe34Smrg file="$progdir/$program" 172286dafe34Smrg elif func_ltwrapper_executable_p "$file"; then 172386dafe34Smrg func_ltwrapper_scriptname "$file" 172486dafe34Smrg func_source "$func_ltwrapper_scriptname_result" 172586dafe34Smrg # Transform arg to wrapped name. 172686dafe34Smrg file="$progdir/$program" 172786dafe34Smrg fi 172886dafe34Smrg ;; 172986dafe34Smrg esac 173086dafe34Smrg # Quote arguments (to preserve shell metacharacters). 173186dafe34Smrg func_quote_for_eval "$file" 173286dafe34Smrg args="$args $func_quote_for_eval_result" 173386dafe34Smrg done 173476888252Smrg 173586dafe34Smrg if test "X$opt_dry_run" = Xfalse; then 173686dafe34Smrg if test -n "$shlibpath_var"; then 173786dafe34Smrg # Export the shlibpath_var. 173886dafe34Smrg eval "export $shlibpath_var" 173986dafe34Smrg fi 174076888252Smrg 174186dafe34Smrg # Restore saved environment variables 174286dafe34Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 174386dafe34Smrg do 174486dafe34Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 174586dafe34Smrg $lt_var=\$save_$lt_var; export $lt_var 174686dafe34Smrg else 174786dafe34Smrg $lt_unset $lt_var 174886dafe34Smrg fi" 174986dafe34Smrg done 175076888252Smrg 175186dafe34Smrg # Now prepare to actually exec the command. 175286dafe34Smrg exec_cmd="\$cmd$args" 175386dafe34Smrg else 175486dafe34Smrg # Display what would be done. 175586dafe34Smrg if test -n "$shlibpath_var"; then 175686dafe34Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 175786dafe34Smrg $ECHO "export $shlibpath_var" 175886dafe34Smrg fi 175986dafe34Smrg $ECHO "$cmd$args" 176086dafe34Smrg exit $EXIT_SUCCESS 176186dafe34Smrg fi 176286dafe34Smrg} 176376888252Smrg 176486dafe34Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 176576888252Smrg 176676888252Smrg 176786dafe34Smrg# func_mode_finish arg... 176886dafe34Smrgfunc_mode_finish () 176986dafe34Smrg{ 177086dafe34Smrg $opt_debug 177186dafe34Smrg libdirs="$nonopt" 177286dafe34Smrg admincmds= 177376888252Smrg 177486dafe34Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 177586dafe34Smrg for dir 177686dafe34Smrg do 177786dafe34Smrg libdirs="$libdirs $dir" 177886dafe34Smrg done 177976888252Smrg 178086dafe34Smrg for libdir in $libdirs; do 178186dafe34Smrg if test -n "$finish_cmds"; then 178286dafe34Smrg # Do each command in the finish commands. 178386dafe34Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 178486dafe34Smrg'"$cmd"'"' 178586dafe34Smrg fi 178686dafe34Smrg if test -n "$finish_eval"; then 178786dafe34Smrg # Do the single finish_eval. 178886dafe34Smrg eval cmds=\"$finish_eval\" 178986dafe34Smrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 179086dafe34Smrg $cmds" 179186dafe34Smrg fi 179286dafe34Smrg done 179386dafe34Smrg fi 179476888252Smrg 179586dafe34Smrg # Exit here if they wanted silent mode. 179686dafe34Smrg $opt_silent && exit $EXIT_SUCCESS 179776888252Smrg 179886dafe34Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 179986dafe34Smrg $ECHO "Libraries have been installed in:" 180086dafe34Smrg for libdir in $libdirs; do 180186dafe34Smrg $ECHO " $libdir" 180286dafe34Smrg done 180386dafe34Smrg $ECHO 180486dafe34Smrg $ECHO "If you ever happen to want to link against installed libraries" 180586dafe34Smrg $ECHO "in a given directory, LIBDIR, you must either use libtool, and" 180686dafe34Smrg $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" 180786dafe34Smrg $ECHO "flag during linking and do at least one of the following:" 180886dafe34Smrg if test -n "$shlibpath_var"; then 180986dafe34Smrg $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" 181086dafe34Smrg $ECHO " during execution" 181186dafe34Smrg fi 181286dafe34Smrg if test -n "$runpath_var"; then 181386dafe34Smrg $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" 181486dafe34Smrg $ECHO " during linking" 181586dafe34Smrg fi 181686dafe34Smrg if test -n "$hardcode_libdir_flag_spec"; then 181786dafe34Smrg libdir=LIBDIR 181886dafe34Smrg eval flag=\"$hardcode_libdir_flag_spec\" 181976888252Smrg 182086dafe34Smrg $ECHO " - use the \`$flag' linker flag" 182186dafe34Smrg fi 182286dafe34Smrg if test -n "$admincmds"; then 182386dafe34Smrg $ECHO " - have your system administrator run these commands:$admincmds" 182486dafe34Smrg fi 182586dafe34Smrg if test -f /etc/ld.so.conf; then 182686dafe34Smrg $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 182786dafe34Smrg fi 182886dafe34Smrg $ECHO 182976888252Smrg 183086dafe34Smrg $ECHO "See any operating system documentation about shared libraries for" 183186dafe34Smrg case $host in 183286dafe34Smrg solaris2.[6789]|solaris2.1[0-9]) 183386dafe34Smrg $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" 183486dafe34Smrg $ECHO "pages." 183576888252Smrg ;; 183686dafe34Smrg *) 183786dafe34Smrg $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." 183886dafe34Smrg ;; 183986dafe34Smrg esac 184086dafe34Smrg $ECHO "X----------------------------------------------------------------------" | $Xsed 184186dafe34Smrg exit $EXIT_SUCCESS 184286dafe34Smrg} 184376888252Smrg 184486dafe34Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 184576888252Smrg 184676888252Smrg 184786dafe34Smrg# func_mode_install arg... 184886dafe34Smrgfunc_mode_install () 184986dafe34Smrg{ 185086dafe34Smrg $opt_debug 185186dafe34Smrg # There may be an optional sh(1) argument at the beginning of 185286dafe34Smrg # install_prog (especially on Windows NT). 185386dafe34Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 185486dafe34Smrg # Allow the use of GNU shtool's install command. 185586dafe34Smrg $ECHO "X$nonopt" | $GREP shtool >/dev/null; then 185686dafe34Smrg # Aesthetically quote it. 185786dafe34Smrg func_quote_for_eval "$nonopt" 185886dafe34Smrg install_prog="$func_quote_for_eval_result " 185986dafe34Smrg arg=$1 186086dafe34Smrg shift 186186dafe34Smrg else 186286dafe34Smrg install_prog= 186386dafe34Smrg arg=$nonopt 186486dafe34Smrg fi 186576888252Smrg 186686dafe34Smrg # The real first argument should be the name of the installation program. 186786dafe34Smrg # Aesthetically quote it. 186886dafe34Smrg func_quote_for_eval "$arg" 186986dafe34Smrg install_prog="$install_prog$func_quote_for_eval_result" 187086dafe34Smrg 187186dafe34Smrg # We need to accept at least all the BSD install flags. 187286dafe34Smrg dest= 187386dafe34Smrg files= 187486dafe34Smrg opts= 187586dafe34Smrg prev= 187686dafe34Smrg install_type= 187786dafe34Smrg isdir=no 187886dafe34Smrg stripme= 187986dafe34Smrg for arg 188086dafe34Smrg do 188186dafe34Smrg if test -n "$dest"; then 188286dafe34Smrg files="$files $dest" 188386dafe34Smrg dest=$arg 188486dafe34Smrg continue 188576888252Smrg fi 188676888252Smrg 188786dafe34Smrg case $arg in 188886dafe34Smrg -d) isdir=yes ;; 188986dafe34Smrg -f) 189086dafe34Smrg case " $install_prog " in 189186dafe34Smrg *[\\\ /]cp\ *) ;; 189286dafe34Smrg *) prev=$arg ;; 189386dafe34Smrg esac 189486dafe34Smrg ;; 189586dafe34Smrg -g | -m | -o) 189686dafe34Smrg prev=$arg 189786dafe34Smrg ;; 189886dafe34Smrg -s) 189986dafe34Smrg stripme=" -s" 190086dafe34Smrg continue 190186dafe34Smrg ;; 190286dafe34Smrg -*) 190386dafe34Smrg ;; 190486dafe34Smrg *) 190586dafe34Smrg # If the previous option needed an argument, then skip it. 190686dafe34Smrg if test -n "$prev"; then 190786dafe34Smrg prev= 190886dafe34Smrg else 190986dafe34Smrg dest=$arg 191086dafe34Smrg continue 191186dafe34Smrg fi 191286dafe34Smrg ;; 191386dafe34Smrg esac 191476888252Smrg 191586dafe34Smrg # Aesthetically quote the argument. 191686dafe34Smrg func_quote_for_eval "$arg" 191786dafe34Smrg install_prog="$install_prog $func_quote_for_eval_result" 191886dafe34Smrg done 191976888252Smrg 192086dafe34Smrg test -z "$install_prog" && \ 192186dafe34Smrg func_fatal_help "you must specify an install program" 192276888252Smrg 192386dafe34Smrg test -n "$prev" && \ 192486dafe34Smrg func_fatal_help "the \`$prev' option requires an argument" 192576888252Smrg 192686dafe34Smrg if test -z "$files"; then 192786dafe34Smrg if test -z "$dest"; then 192886dafe34Smrg func_fatal_help "no file or destination specified" 192986dafe34Smrg else 193086dafe34Smrg func_fatal_help "you must specify a destination" 193176888252Smrg fi 193276888252Smrg fi 193376888252Smrg 193486dafe34Smrg # Strip any trailing slash from the destination. 193586dafe34Smrg func_stripname '' '/' "$dest" 193686dafe34Smrg dest=$func_stripname_result 193776888252Smrg 193886dafe34Smrg # Check to see that the destination is a directory. 193986dafe34Smrg test -d "$dest" && isdir=yes 194086dafe34Smrg if test "$isdir" = yes; then 194186dafe34Smrg destdir="$dest" 194286dafe34Smrg destname= 194386dafe34Smrg else 194486dafe34Smrg func_dirname_and_basename "$dest" "" "." 194586dafe34Smrg destdir="$func_dirname_result" 194686dafe34Smrg destname="$func_basename_result" 194786dafe34Smrg 194886dafe34Smrg # Not a directory, so check to see that there is only one file specified. 194986dafe34Smrg set dummy $files; shift 195086dafe34Smrg test "$#" -gt 1 && \ 195186dafe34Smrg func_fatal_help "\`$dest' is not a directory" 195286dafe34Smrg fi 195386dafe34Smrg case $destdir in 195486dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 195576888252Smrg *) 195686dafe34Smrg for file in $files; do 195786dafe34Smrg case $file in 195886dafe34Smrg *.lo) ;; 195986dafe34Smrg *) 196086dafe34Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 196186dafe34Smrg ;; 196286dafe34Smrg esac 196386dafe34Smrg done 196476888252Smrg ;; 196576888252Smrg esac 196676888252Smrg 196786dafe34Smrg # This variable tells wrapper scripts just to set variables rather 196886dafe34Smrg # than running their programs. 196986dafe34Smrg libtool_install_magic="$magic" 197076888252Smrg 197186dafe34Smrg staticlibs= 197286dafe34Smrg future_libdirs= 197386dafe34Smrg current_libdirs= 197486dafe34Smrg for file in $files; do 197576888252Smrg 197686dafe34Smrg # Do each installation. 197786dafe34Smrg case $file in 197886dafe34Smrg *.$libext) 197986dafe34Smrg # Do the static libraries later. 198086dafe34Smrg staticlibs="$staticlibs $file" 198186dafe34Smrg ;; 198286dafe34Smrg 198386dafe34Smrg *.la) 198486dafe34Smrg # Check to see that this really is a libtool archive. 198586dafe34Smrg func_lalib_unsafe_p "$file" \ 198686dafe34Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 198786dafe34Smrg 198886dafe34Smrg library_names= 198986dafe34Smrg old_library= 199086dafe34Smrg relink_command= 199186dafe34Smrg func_source "$file" 199286dafe34Smrg 199386dafe34Smrg # Add the libdir to current_libdirs if it is the destination. 199486dafe34Smrg if test "X$destdir" = "X$libdir"; then 199586dafe34Smrg case "$current_libdirs " in 199686dafe34Smrg *" $libdir "*) ;; 199786dafe34Smrg *) current_libdirs="$current_libdirs $libdir" ;; 199876888252Smrg esac 199986dafe34Smrg else 200086dafe34Smrg # Note the libdir as a future libdir. 200186dafe34Smrg case "$future_libdirs " in 200286dafe34Smrg *" $libdir "*) ;; 200386dafe34Smrg *) future_libdirs="$future_libdirs $libdir" ;; 200486dafe34Smrg esac 200586dafe34Smrg fi 200676888252Smrg 200786dafe34Smrg func_dirname "$file" "/" "" 200886dafe34Smrg dir="$func_dirname_result" 200986dafe34Smrg dir="$dir$objdir" 201086dafe34Smrg 201186dafe34Smrg if test -n "$relink_command"; then 201286dafe34Smrg # Determine the prefix the user has applied to our future dir. 201386dafe34Smrg inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` 201486dafe34Smrg 201586dafe34Smrg # Don't allow the user to place us outside of our expected 201686dafe34Smrg # location b/c this prevents finding dependent libraries that 201786dafe34Smrg # are installed to the same prefix. 201886dafe34Smrg # At present, this check doesn't affect windows .dll's that 201986dafe34Smrg # are installed into $libdir/../bin (currently, that works fine) 202086dafe34Smrg # but it's something to keep an eye on. 202186dafe34Smrg test "$inst_prefix_dir" = "$destdir" && \ 202286dafe34Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 202386dafe34Smrg 202486dafe34Smrg if test -n "$inst_prefix_dir"; then 202586dafe34Smrg # Stick the inst_prefix_dir data into the link command. 202686dafe34Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 202786dafe34Smrg else 202886dafe34Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` 202986dafe34Smrg fi 203086dafe34Smrg 203186dafe34Smrg func_warning "relinking \`$file'" 203286dafe34Smrg func_show_eval "$relink_command" \ 203386dafe34Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 203486dafe34Smrg fi 203586dafe34Smrg 203686dafe34Smrg # See the names of the shared library. 203786dafe34Smrg set dummy $library_names; shift 203886dafe34Smrg if test -n "$1"; then 203986dafe34Smrg realname="$1" 204086dafe34Smrg shift 204186dafe34Smrg 204286dafe34Smrg srcname="$realname" 204386dafe34Smrg test -n "$relink_command" && srcname="$realname"T 204486dafe34Smrg 204586dafe34Smrg # Install the shared library and build the symlinks. 204686dafe34Smrg func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 204786dafe34Smrg 'exit $?' 204886dafe34Smrg tstripme="$stripme" 204986dafe34Smrg case $host_os in 205086dafe34Smrg cygwin* | mingw* | pw32* | cegcc*) 205186dafe34Smrg case $realname in 205286dafe34Smrg *.dll.a) 205386dafe34Smrg tstripme="" 205486dafe34Smrg ;; 205586dafe34Smrg esac 205676888252Smrg ;; 205776888252Smrg esac 205886dafe34Smrg if test -n "$tstripme" && test -n "$striplib"; then 205986dafe34Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 206076888252Smrg fi 206186dafe34Smrg 206286dafe34Smrg if test "$#" -gt 0; then 206386dafe34Smrg # Delete the old symlinks, and create new ones. 206486dafe34Smrg # Try `ln -sf' first, because the `ln' binary might depend on 206586dafe34Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 206686dafe34Smrg # so we also need to try rm && ln -s. 206786dafe34Smrg for linkname 206886dafe34Smrg do 206986dafe34Smrg test "$linkname" != "$realname" \ 207086dafe34Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 207176888252Smrg done 207276888252Smrg fi 207376888252Smrg 207486dafe34Smrg # Do each command in the postinstall commands. 207586dafe34Smrg lib="$destdir/$realname" 207686dafe34Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 207776888252Smrg fi 207876888252Smrg 207986dafe34Smrg # Install the pseudo-library for information purposes. 208086dafe34Smrg func_basename "$file" 208186dafe34Smrg name="$func_basename_result" 208286dafe34Smrg instname="$dir/$name"i 208386dafe34Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 208476888252Smrg 208586dafe34Smrg # Maybe install the static library, too. 208686dafe34Smrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 208786dafe34Smrg ;; 208876888252Smrg 208986dafe34Smrg *.lo) 209086dafe34Smrg # Install (i.e. copy) a libtool object. 209176888252Smrg 209286dafe34Smrg # Figure out destination file name, if it wasn't already specified. 209386dafe34Smrg if test -n "$destname"; then 209486dafe34Smrg destfile="$destdir/$destname" 209586dafe34Smrg else 209686dafe34Smrg func_basename "$file" 209786dafe34Smrg destfile="$func_basename_result" 209886dafe34Smrg destfile="$destdir/$destfile" 209986dafe34Smrg fi 210086dafe34Smrg 210186dafe34Smrg # Deduce the name of the destination old-style object file. 210286dafe34Smrg case $destfile in 210386dafe34Smrg *.lo) 210486dafe34Smrg func_lo2o "$destfile" 210586dafe34Smrg staticdest=$func_lo2o_result 210686dafe34Smrg ;; 210786dafe34Smrg *.$objext) 210886dafe34Smrg staticdest="$destfile" 210986dafe34Smrg destfile= 211086dafe34Smrg ;; 211186dafe34Smrg *) 211286dafe34Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 211386dafe34Smrg ;; 211476888252Smrg esac 211576888252Smrg 211686dafe34Smrg # Install the libtool object if requested. 211786dafe34Smrg test -n "$destfile" && \ 211886dafe34Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 211986dafe34Smrg 212086dafe34Smrg # Install the old object if enabled. 212186dafe34Smrg if test "$build_old_libs" = yes; then 212286dafe34Smrg # Deduce the name of the old-style object file. 212386dafe34Smrg func_lo2o "$file" 212486dafe34Smrg staticobj=$func_lo2o_result 212586dafe34Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 212676888252Smrg fi 212786dafe34Smrg exit $EXIT_SUCCESS 212886dafe34Smrg ;; 212976888252Smrg 213086dafe34Smrg *) 213186dafe34Smrg # Figure out destination file name, if it wasn't already specified. 213286dafe34Smrg if test -n "$destname"; then 213386dafe34Smrg destfile="$destdir/$destname" 213486dafe34Smrg else 213586dafe34Smrg func_basename "$file" 213686dafe34Smrg destfile="$func_basename_result" 213786dafe34Smrg destfile="$destdir/$destfile" 213886dafe34Smrg fi 213986dafe34Smrg 214086dafe34Smrg # If the file is missing, and there is a .exe on the end, strip it 214186dafe34Smrg # because it is most likely a libtool script we actually want to 214286dafe34Smrg # install 214386dafe34Smrg stripped_ext="" 214486dafe34Smrg case $file in 214586dafe34Smrg *.exe) 214686dafe34Smrg if test ! -f "$file"; then 214786dafe34Smrg func_stripname '' '.exe' "$file" 214886dafe34Smrg file=$func_stripname_result 214986dafe34Smrg stripped_ext=".exe" 215076888252Smrg fi 215186dafe34Smrg ;; 215286dafe34Smrg esac 215376888252Smrg 215486dafe34Smrg # Do a test to see if this is really a libtool program. 215586dafe34Smrg case $host in 215686dafe34Smrg *cygwin* | *mingw*) 215786dafe34Smrg if func_ltwrapper_executable_p "$file"; then 215886dafe34Smrg func_ltwrapper_scriptname "$file" 215986dafe34Smrg wrapper=$func_ltwrapper_scriptname_result 216086dafe34Smrg else 216186dafe34Smrg func_stripname '' '.exe' "$file" 216286dafe34Smrg wrapper=$func_stripname_result 216386dafe34Smrg fi 216486dafe34Smrg ;; 216586dafe34Smrg *) 216686dafe34Smrg wrapper=$file 216786dafe34Smrg ;; 216886dafe34Smrg esac 216986dafe34Smrg if func_ltwrapper_script_p "$wrapper"; then 217086dafe34Smrg notinst_deplibs= 217186dafe34Smrg relink_command= 217276888252Smrg 217386dafe34Smrg func_source "$wrapper" 217476888252Smrg 217586dafe34Smrg # Check the variables that should have been set. 217686dafe34Smrg test -z "$generated_by_libtool_version" && \ 217786dafe34Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 217886dafe34Smrg 217986dafe34Smrg finalize=yes 218086dafe34Smrg for lib in $notinst_deplibs; do 218186dafe34Smrg # Check to see that each library is installed. 218286dafe34Smrg libdir= 218386dafe34Smrg if test -f "$lib"; then 218486dafe34Smrg func_source "$lib" 218586dafe34Smrg fi 218686dafe34Smrg libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 218786dafe34Smrg if test -n "$libdir" && test ! -f "$libfile"; then 218886dafe34Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 218986dafe34Smrg finalize=no 219086dafe34Smrg fi 219186dafe34Smrg done 219286dafe34Smrg 219386dafe34Smrg relink_command= 219486dafe34Smrg func_source "$wrapper" 219586dafe34Smrg 219686dafe34Smrg outputname= 219786dafe34Smrg if test "$fast_install" = no && test -n "$relink_command"; then 219886dafe34Smrg $opt_dry_run || { 219986dafe34Smrg if test "$finalize" = yes; then 220086dafe34Smrg tmpdir=`func_mktempdir` 220186dafe34Smrg func_basename "$file$stripped_ext" 220286dafe34Smrg file="$func_basename_result" 220386dafe34Smrg outputname="$tmpdir/$file" 220486dafe34Smrg # Replace the output file specification. 220586dafe34Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` 220686dafe34Smrg 220786dafe34Smrg $opt_silent || { 220886dafe34Smrg func_quote_for_expand "$relink_command" 220986dafe34Smrg eval "func_echo $func_quote_for_expand_result" 221086dafe34Smrg } 221186dafe34Smrg if eval "$relink_command"; then : 221286dafe34Smrg else 221386dafe34Smrg func_error "error: relink \`$file' with the above command before installing it" 221486dafe34Smrg $opt_dry_run || ${RM}r "$tmpdir" 221586dafe34Smrg continue 221686dafe34Smrg fi 221786dafe34Smrg file="$outputname" 221886dafe34Smrg else 221986dafe34Smrg func_warning "cannot relink \`$file'" 222086dafe34Smrg fi 222186dafe34Smrg } 222276888252Smrg else 222386dafe34Smrg # Install the binary that we compiled earlier. 222486dafe34Smrg file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 222576888252Smrg fi 222686dafe34Smrg fi 222776888252Smrg 222886dafe34Smrg # remove .exe since cygwin /usr/bin/install will append another 222986dafe34Smrg # one anyway 223086dafe34Smrg case $install_prog,$host in 223186dafe34Smrg */usr/bin/install*,*cygwin*) 223286dafe34Smrg case $file:$destfile in 223386dafe34Smrg *.exe:*.exe) 223486dafe34Smrg # this is ok 223586dafe34Smrg ;; 223686dafe34Smrg *.exe:*) 223786dafe34Smrg destfile=$destfile.exe 223886dafe34Smrg ;; 223986dafe34Smrg *:*.exe) 224086dafe34Smrg func_stripname '' '.exe' "$destfile" 224186dafe34Smrg destfile=$func_stripname_result 224286dafe34Smrg ;; 224386dafe34Smrg esac 224476888252Smrg ;; 224576888252Smrg esac 224686dafe34Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 224786dafe34Smrg $opt_dry_run || if test -n "$outputname"; then 224886dafe34Smrg ${RM}r "$tmpdir" 224986dafe34Smrg fi 225086dafe34Smrg ;; 225186dafe34Smrg esac 225286dafe34Smrg done 225376888252Smrg 225486dafe34Smrg for file in $staticlibs; do 225586dafe34Smrg func_basename "$file" 225686dafe34Smrg name="$func_basename_result" 225776888252Smrg 225886dafe34Smrg # Set up the ranlib parameters. 225986dafe34Smrg oldlib="$destdir/$name" 226076888252Smrg 226186dafe34Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 226276888252Smrg 226386dafe34Smrg if test -n "$stripme" && test -n "$old_striplib"; then 226486dafe34Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 226586dafe34Smrg fi 226676888252Smrg 226786dafe34Smrg # Do each command in the postinstall commands. 226886dafe34Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 226986dafe34Smrg done 227076888252Smrg 227186dafe34Smrg test -n "$future_libdirs" && \ 227286dafe34Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 227376888252Smrg 227486dafe34Smrg if test -n "$current_libdirs"; then 227586dafe34Smrg # Maybe just do a dry run. 227686dafe34Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 227786dafe34Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 227886dafe34Smrg else 227986dafe34Smrg exit $EXIT_SUCCESS 228086dafe34Smrg fi 228186dafe34Smrg} 228276888252Smrg 228386dafe34Smrgtest "$mode" = install && func_mode_install ${1+"$@"} 228476888252Smrg 228576888252Smrg 228686dafe34Smrg# func_generate_dlsyms outputname originator pic_p 228786dafe34Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 228886dafe34Smrg# a dlpreopen symbol table. 228986dafe34Smrgfunc_generate_dlsyms () 229086dafe34Smrg{ 229186dafe34Smrg $opt_debug 229286dafe34Smrg my_outputname="$1" 229386dafe34Smrg my_originator="$2" 229486dafe34Smrg my_pic_p="${3-no}" 229586dafe34Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 229686dafe34Smrg my_dlsyms= 229786dafe34Smrg 229886dafe34Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 229986dafe34Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 230086dafe34Smrg my_dlsyms="${my_outputname}S.c" 230186dafe34Smrg else 230286dafe34Smrg func_error "not configured to extract global symbols from dlpreopened files" 230386dafe34Smrg fi 230486dafe34Smrg fi 230576888252Smrg 230686dafe34Smrg if test -n "$my_dlsyms"; then 230786dafe34Smrg case $my_dlsyms in 230886dafe34Smrg "") ;; 230986dafe34Smrg *.c) 231086dafe34Smrg # Discover the nlist of each of the dlfiles. 231186dafe34Smrg nlist="$output_objdir/${my_outputname}.nm" 231286dafe34Smrg 231386dafe34Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 231486dafe34Smrg 231586dafe34Smrg # Parse the name list into a source file. 231686dafe34Smrg func_verbose "creating $output_objdir/$my_dlsyms" 231786dafe34Smrg 231886dafe34Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 231986dafe34Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 232086dafe34Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 232186dafe34Smrg 232286dafe34Smrg#ifdef __cplusplus 232386dafe34Smrgextern \"C\" { 232486dafe34Smrg#endif 232586dafe34Smrg 232686dafe34Smrg/* External symbol declarations for the compiler. */\ 232786dafe34Smrg" 232886dafe34Smrg 232986dafe34Smrg if test "$dlself" = yes; then 233086dafe34Smrg func_verbose "generating symbol list for \`$output'" 233186dafe34Smrg 233286dafe34Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 233386dafe34Smrg 233486dafe34Smrg # Add our own program objects to the symbol list. 233586dafe34Smrg progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 233686dafe34Smrg for progfile in $progfiles; do 233786dafe34Smrg func_verbose "extracting global C symbols from \`$progfile'" 233886dafe34Smrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 233986dafe34Smrg done 234086dafe34Smrg 234186dafe34Smrg if test -n "$exclude_expsyms"; then 234286dafe34Smrg $opt_dry_run || { 234386dafe34Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 234486dafe34Smrg eval '$MV "$nlist"T "$nlist"' 234586dafe34Smrg } 234676888252Smrg fi 234776888252Smrg 234886dafe34Smrg if test -n "$export_symbols_regex"; then 234986dafe34Smrg $opt_dry_run || { 235086dafe34Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 235186dafe34Smrg eval '$MV "$nlist"T "$nlist"' 235286dafe34Smrg } 235376888252Smrg fi 235486dafe34Smrg 235586dafe34Smrg # Prepare the list of exported symbols 235686dafe34Smrg if test -z "$export_symbols"; then 235786dafe34Smrg export_symbols="$output_objdir/$outputname.exp" 235886dafe34Smrg $opt_dry_run || { 235986dafe34Smrg $RM $export_symbols 236086dafe34Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 236186dafe34Smrg case $host in 236286dafe34Smrg *cygwin* | *mingw* | *cegcc* ) 236386dafe34Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 236486dafe34Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 236586dafe34Smrg ;; 236676888252Smrg esac 236786dafe34Smrg } 236886dafe34Smrg else 236986dafe34Smrg $opt_dry_run || { 237086dafe34Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 237186dafe34Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 237286dafe34Smrg eval '$MV "$nlist"T "$nlist"' 237386dafe34Smrg case $host in 237486dafe34Smrg *cygwin | *mingw* | *cegcc* ) 237586dafe34Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 237686dafe34Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 237786dafe34Smrg ;; 237876888252Smrg esac 237986dafe34Smrg } 238076888252Smrg fi 238186dafe34Smrg fi 238276888252Smrg 238386dafe34Smrg for dlprefile in $dlprefiles; do 238486dafe34Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 238586dafe34Smrg func_basename "$dlprefile" 238686dafe34Smrg name="$func_basename_result" 238786dafe34Smrg $opt_dry_run || { 238886dafe34Smrg eval '$ECHO ": $name " >> "$nlist"' 238986dafe34Smrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 239086dafe34Smrg } 239186dafe34Smrg done 239276888252Smrg 239386dafe34Smrg $opt_dry_run || { 239486dafe34Smrg # Make sure we have at least an empty file. 239586dafe34Smrg test -f "$nlist" || : > "$nlist" 239676888252Smrg 239786dafe34Smrg if test -n "$exclude_expsyms"; then 239886dafe34Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 239986dafe34Smrg $MV "$nlist"T "$nlist" 240076888252Smrg fi 240176888252Smrg 240286dafe34Smrg # Try sorting and uniquifying the output. 240386dafe34Smrg if $GREP -v "^: " < "$nlist" | 240486dafe34Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 240586dafe34Smrg sort -k 3 240676888252Smrg else 240786dafe34Smrg sort +2 240886dafe34Smrg fi | 240986dafe34Smrg uniq > "$nlist"S; then 241086dafe34Smrg : 241176888252Smrg else 241286dafe34Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 241376888252Smrg fi 241476888252Smrg 241586dafe34Smrg if test -f "$nlist"S; then 241686dafe34Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 241776888252Smrg else 241886dafe34Smrg $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" 241976888252Smrg fi 242076888252Smrg 242186dafe34Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 242276888252Smrg 242386dafe34Smrg/* The mapping between symbol names and symbols. */ 242486dafe34Smrgtypedef struct { 242586dafe34Smrg const char *name; 242686dafe34Smrg void *address; 242786dafe34Smrg} lt_dlsymlist; 242886dafe34Smrg" 242986dafe34Smrg case $host in 243086dafe34Smrg *cygwin* | *mingw* | *cegcc* ) 243186dafe34Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 243286dafe34Smrg/* DATA imports from DLLs on WIN32 con't be const, because 243386dafe34Smrg runtime relocations are performed -- see ld's documentation 243486dafe34Smrg on pseudo-relocs. */" 243586dafe34Smrg lt_dlsym_const= ;; 243686dafe34Smrg *osf5*) 243786dafe34Smrg echo >> "$output_objdir/$my_dlsyms" "\ 243886dafe34Smrg/* This system does not cope well with relocations in const data */" 243986dafe34Smrg lt_dlsym_const= ;; 244086dafe34Smrg *) 244186dafe34Smrg lt_dlsym_const=const ;; 244286dafe34Smrg esac 244386dafe34Smrg 244486dafe34Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 244586dafe34Smrgextern $lt_dlsym_const lt_dlsymlist 244686dafe34Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 244786dafe34Smrg$lt_dlsym_const lt_dlsymlist 244886dafe34Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 244986dafe34Smrg{\ 245086dafe34Smrg { \"$my_originator\", (void *) 0 }," 245186dafe34Smrg 245286dafe34Smrg case $need_lib_prefix in 245386dafe34Smrg no) 245486dafe34Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 245586dafe34Smrg ;; 245686dafe34Smrg *) 245786dafe34Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 245886dafe34Smrg ;; 245986dafe34Smrg esac 246086dafe34Smrg $ECHO >> "$output_objdir/$my_dlsyms" "\ 246186dafe34Smrg {0, (void *) 0} 246286dafe34Smrg}; 246386dafe34Smrg 246486dafe34Smrg/* This works around a problem in FreeBSD linker */ 246586dafe34Smrg#ifdef FREEBSD_WORKAROUND 246686dafe34Smrgstatic const void *lt_preloaded_setup() { 246786dafe34Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 246886dafe34Smrg} 246986dafe34Smrg#endif 247086dafe34Smrg 247186dafe34Smrg#ifdef __cplusplus 247286dafe34Smrg} 247386dafe34Smrg#endif\ 247486dafe34Smrg" 247586dafe34Smrg } # !$opt_dry_run 247686dafe34Smrg 247786dafe34Smrg pic_flag_for_symtable= 247886dafe34Smrg case "$compile_command " in 247986dafe34Smrg *" -static "*) ;; 248086dafe34Smrg *) 248186dafe34Smrg case $host in 248286dafe34Smrg # compiling the symbol table file with pic_flag works around 248386dafe34Smrg # a FreeBSD bug that causes programs to crash when -lm is 248486dafe34Smrg # linked before any other PIC object. But we must not use 248586dafe34Smrg # pic_flag when linking with -static. The problem exists in 248686dafe34Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 248786dafe34Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 248886dafe34Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 248986dafe34Smrg *-*-hpux*) 249086dafe34Smrg pic_flag_for_symtable=" $pic_flag" ;; 249186dafe34Smrg *) 249286dafe34Smrg if test "X$my_pic_p" != Xno; then 249386dafe34Smrg pic_flag_for_symtable=" $pic_flag" 249476888252Smrg fi 249586dafe34Smrg ;; 249686dafe34Smrg esac 249786dafe34Smrg ;; 249886dafe34Smrg esac 249986dafe34Smrg symtab_cflags= 250086dafe34Smrg for arg in $LTCFLAGS; do 250186dafe34Smrg case $arg in 250286dafe34Smrg -pie | -fpie | -fPIE) ;; 250386dafe34Smrg *) symtab_cflags="$symtab_cflags $arg" ;; 250486dafe34Smrg esac 250586dafe34Smrg done 250676888252Smrg 250786dafe34Smrg # Now compile the dynamic symbol file. 250886dafe34Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 250976888252Smrg 251086dafe34Smrg # Clean up the generated files. 251186dafe34Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 251286dafe34Smrg 251386dafe34Smrg # Transform the symbol file into the correct name. 251486dafe34Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 251586dafe34Smrg case $host in 251686dafe34Smrg *cygwin* | *mingw* | *cegcc* ) 251786dafe34Smrg if test -f "$output_objdir/$my_outputname.def"; then 251886dafe34Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 251986dafe34Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 252086dafe34Smrg else 252186dafe34Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252286dafe34Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252386dafe34Smrg fi 252486dafe34Smrg ;; 252586dafe34Smrg *) 252686dafe34Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252786dafe34Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` 252876888252Smrg ;; 252976888252Smrg esac 253086dafe34Smrg ;; 253186dafe34Smrg *) 253286dafe34Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 253386dafe34Smrg ;; 253486dafe34Smrg esac 253586dafe34Smrg else 253686dafe34Smrg # We keep going just in case the user didn't refer to 253786dafe34Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 253886dafe34Smrg # really was required. 253986dafe34Smrg 254086dafe34Smrg # Nullify the symbol file. 254186dafe34Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` 254286dafe34Smrg finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` 254376888252Smrg fi 254486dafe34Smrg} 254576888252Smrg 254686dafe34Smrg# func_win32_libid arg 254786dafe34Smrg# return the library type of file 'arg' 254886dafe34Smrg# 254986dafe34Smrg# Need a lot of goo to handle *both* DLLs and import libs 255086dafe34Smrg# Has to be a shell function in order to 'eat' the argument 255186dafe34Smrg# that is supplied when $file_magic_command is called. 255286dafe34Smrgfunc_win32_libid () 255386dafe34Smrg{ 255486dafe34Smrg $opt_debug 255586dafe34Smrg win32_libid_type="unknown" 255686dafe34Smrg win32_fileres=`file -L $1 2>/dev/null` 255786dafe34Smrg case $win32_fileres in 255886dafe34Smrg *ar\ archive\ import\ library*) # definitely import 255986dafe34Smrg win32_libid_type="x86 archive import" 256086dafe34Smrg ;; 256186dafe34Smrg *ar\ archive*) # could be an import, or static 256286dafe34Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 256386dafe34Smrg $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 256486dafe34Smrg win32_nmres=`eval $NM -f posix -A $1 | 256586dafe34Smrg $SED -n -e ' 256686dafe34Smrg 1,100{ 256786dafe34Smrg / I /{ 256886dafe34Smrg s,.*,import, 256986dafe34Smrg p 257086dafe34Smrg q 257186dafe34Smrg } 257286dafe34Smrg }'` 257386dafe34Smrg case $win32_nmres in 257486dafe34Smrg import*) win32_libid_type="x86 archive import";; 257586dafe34Smrg *) win32_libid_type="x86 archive static";; 257686dafe34Smrg esac 257786dafe34Smrg fi 257886dafe34Smrg ;; 257986dafe34Smrg *DLL*) 258086dafe34Smrg win32_libid_type="x86 DLL" 258186dafe34Smrg ;; 258286dafe34Smrg *executable*) # but shell scripts are "executable" too... 258386dafe34Smrg case $win32_fileres in 258486dafe34Smrg *MS\ Windows\ PE\ Intel*) 258586dafe34Smrg win32_libid_type="x86 DLL" 258686dafe34Smrg ;; 258786dafe34Smrg esac 258886dafe34Smrg ;; 258986dafe34Smrg esac 259086dafe34Smrg $ECHO "$win32_libid_type" 259186dafe34Smrg} 259276888252Smrg 259376888252Smrg 259476888252Smrg 259586dafe34Smrg# func_extract_an_archive dir oldlib 259686dafe34Smrgfunc_extract_an_archive () 259786dafe34Smrg{ 259886dafe34Smrg $opt_debug 259986dafe34Smrg f_ex_an_ar_dir="$1"; shift 260086dafe34Smrg f_ex_an_ar_oldlib="$1" 260186dafe34Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' 260286dafe34Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 260386dafe34Smrg : 260486dafe34Smrg else 260586dafe34Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 260686dafe34Smrg fi 260786dafe34Smrg} 260876888252Smrg 260976888252Smrg 261086dafe34Smrg# func_extract_archives gentop oldlib ... 261186dafe34Smrgfunc_extract_archives () 261286dafe34Smrg{ 261386dafe34Smrg $opt_debug 261486dafe34Smrg my_gentop="$1"; shift 261586dafe34Smrg my_oldlibs=${1+"$@"} 261686dafe34Smrg my_oldobjs="" 261786dafe34Smrg my_xlib="" 261886dafe34Smrg my_xabs="" 261986dafe34Smrg my_xdir="" 262076888252Smrg 262186dafe34Smrg for my_xlib in $my_oldlibs; do 262286dafe34Smrg # Extract the objects. 262386dafe34Smrg case $my_xlib in 262486dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 262586dafe34Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 262686dafe34Smrg esac 262786dafe34Smrg func_basename "$my_xlib" 262886dafe34Smrg my_xlib="$func_basename_result" 262986dafe34Smrg my_xlib_u=$my_xlib 263086dafe34Smrg while :; do 263186dafe34Smrg case " $extracted_archives " in 263286dafe34Smrg *" $my_xlib_u "*) 263386dafe34Smrg func_arith $extracted_serial + 1 263486dafe34Smrg extracted_serial=$func_arith_result 263586dafe34Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 263686dafe34Smrg *) break ;; 263786dafe34Smrg esac 263886dafe34Smrg done 263986dafe34Smrg extracted_archives="$extracted_archives $my_xlib_u" 264086dafe34Smrg my_xdir="$my_gentop/$my_xlib_u" 264176888252Smrg 264286dafe34Smrg func_mkdir_p "$my_xdir" 264376888252Smrg 264486dafe34Smrg case $host in 264586dafe34Smrg *-darwin*) 264686dafe34Smrg func_verbose "Extracting $my_xabs" 264786dafe34Smrg # Do not bother doing anything if just a dry run 264886dafe34Smrg $opt_dry_run || { 264986dafe34Smrg darwin_orig_dir=`pwd` 265086dafe34Smrg cd $my_xdir || exit $? 265186dafe34Smrg darwin_archive=$my_xabs 265286dafe34Smrg darwin_curdir=`pwd` 265386dafe34Smrg darwin_base_archive=`basename "$darwin_archive"` 265486dafe34Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 265586dafe34Smrg if test -n "$darwin_arches"; then 265686dafe34Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 265786dafe34Smrg darwin_arch= 265886dafe34Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 265986dafe34Smrg for darwin_arch in $darwin_arches ; do 266086dafe34Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 266186dafe34Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 266286dafe34Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 266386dafe34Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 266486dafe34Smrg cd "$darwin_curdir" 266586dafe34Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 266686dafe34Smrg done # $darwin_arches 266786dafe34Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 266886dafe34Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 266986dafe34Smrg darwin_file= 267086dafe34Smrg darwin_files= 267186dafe34Smrg for darwin_file in $darwin_filelist; do 267286dafe34Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 267386dafe34Smrg $LIPO -create -output "$darwin_file" $darwin_files 267486dafe34Smrg done # $darwin_filelist 267586dafe34Smrg $RM -rf unfat-$$ 267686dafe34Smrg cd "$darwin_orig_dir" 267786dafe34Smrg else 267886dafe34Smrg cd $darwin_orig_dir 267986dafe34Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 268086dafe34Smrg fi # $darwin_arches 268186dafe34Smrg } # !$opt_dry_run 268286dafe34Smrg ;; 268386dafe34Smrg *) 268486dafe34Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 268586dafe34Smrg ;; 268676888252Smrg esac 268786dafe34Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 268886dafe34Smrg done 268976888252Smrg 269086dafe34Smrg func_extract_archives_result="$my_oldobjs" 269186dafe34Smrg} 269276888252Smrg 269376888252Smrg 269476888252Smrg 269586dafe34Smrg# func_emit_wrapper_part1 [arg=no] 269686dafe34Smrg# 269786dafe34Smrg# Emit the first part of a libtool wrapper script on stdout. 269886dafe34Smrg# For more information, see the description associated with 269986dafe34Smrg# func_emit_wrapper(), below. 270086dafe34Smrgfunc_emit_wrapper_part1 () 270186dafe34Smrg{ 270286dafe34Smrg func_emit_wrapper_part1_arg1=no 270386dafe34Smrg if test -n "$1" ; then 270486dafe34Smrg func_emit_wrapper_part1_arg1=$1 270576888252Smrg fi 270676888252Smrg 270786dafe34Smrg $ECHO "\ 270886dafe34Smrg#! $SHELL 270976888252Smrg 271086dafe34Smrg# $output - temporary wrapper script for $objdir/$outputname 271186dafe34Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 271286dafe34Smrg# 271386dafe34Smrg# The $output program cannot be directly executed until all the libtool 271486dafe34Smrg# libraries that it depends on are installed. 271586dafe34Smrg# 271686dafe34Smrg# This wrapper script should never be moved out of the build directory. 271786dafe34Smrg# If it is, it will not operate correctly. 271876888252Smrg 271986dafe34Smrg# Sed substitution that helps us do robust quoting. It backslashifies 272086dafe34Smrg# metacharacters that are still active within double-quoted strings. 272186dafe34SmrgXsed='${SED} -e 1s/^X//' 272286dafe34Smrgsed_quote_subst='$sed_quote_subst' 272376888252Smrg 272486dafe34Smrg# Be Bourne compatible 272586dafe34Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 272686dafe34Smrg emulate sh 272786dafe34Smrg NULLCMD=: 272886dafe34Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 272986dafe34Smrg # is contrary to our usage. Disable this feature. 273086dafe34Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 273186dafe34Smrg setopt NO_GLOB_SUBST 273286dafe34Smrgelse 273386dafe34Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 273486dafe34Smrgfi 273586dafe34SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 273686dafe34SmrgDUALCASE=1; export DUALCASE # for MKS sh 273776888252Smrg 273886dafe34Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 273986dafe34Smrg# if CDPATH is set. 274086dafe34Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 274176888252Smrg 274286dafe34Smrgrelink_command=\"$relink_command\" 274376888252Smrg 274486dafe34Smrg# This environment variable determines our operation mode. 274586dafe34Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 274686dafe34Smrg # install mode needs the following variables: 274786dafe34Smrg generated_by_libtool_version='$macro_version' 274886dafe34Smrg notinst_deplibs='$notinst_deplibs' 274986dafe34Smrgelse 275086dafe34Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 275186dafe34Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 275286dafe34Smrg ECHO=\"$qecho\" 275386dafe34Smrg file=\"\$0\" 275486dafe34Smrg # Make sure echo works. 275586dafe34Smrg if test \"X\$1\" = X--no-reexec; then 275686dafe34Smrg # Discard the --no-reexec flag, and continue. 275786dafe34Smrg shift 275886dafe34Smrg elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then 275986dafe34Smrg # Yippee, \$ECHO works! 276086dafe34Smrg : 276186dafe34Smrg else 276286dafe34Smrg # Restart under the correct shell, and then maybe \$ECHO will work. 276386dafe34Smrg exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 276486dafe34Smrg fi 276586dafe34Smrg fi\ 276686dafe34Smrg" 276786dafe34Smrg $ECHO "\ 276876888252Smrg 276986dafe34Smrg # Find the directory that this script lives in. 277086dafe34Smrg thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 277186dafe34Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 277276888252Smrg 277386dafe34Smrg # Follow symbolic links until we get to the real thisdir. 277486dafe34Smrg file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 277586dafe34Smrg while test -n \"\$file\"; do 277686dafe34Smrg destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 277776888252Smrg 277886dafe34Smrg # If there was a directory component, then change thisdir. 277986dafe34Smrg if test \"x\$destdir\" != \"x\$file\"; then 278086dafe34Smrg case \"\$destdir\" in 278186dafe34Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 278286dafe34Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 278386dafe34Smrg esac 278486dafe34Smrg fi 278576888252Smrg 278686dafe34Smrg file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 278786dafe34Smrg file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 278886dafe34Smrg done 278986dafe34Smrg" 279086dafe34Smrg} 279186dafe34Smrg# end: func_emit_wrapper_part1 279276888252Smrg 279386dafe34Smrg# func_emit_wrapper_part2 [arg=no] 279486dafe34Smrg# 279586dafe34Smrg# Emit the second part of a libtool wrapper script on stdout. 279686dafe34Smrg# For more information, see the description associated with 279786dafe34Smrg# func_emit_wrapper(), below. 279886dafe34Smrgfunc_emit_wrapper_part2 () 279986dafe34Smrg{ 280086dafe34Smrg func_emit_wrapper_part2_arg1=no 280186dafe34Smrg if test -n "$1" ; then 280286dafe34Smrg func_emit_wrapper_part2_arg1=$1 280386dafe34Smrg fi 280476888252Smrg 280586dafe34Smrg $ECHO "\ 280676888252Smrg 280786dafe34Smrg # Usually 'no', except on cygwin/mingw when embedded into 280886dafe34Smrg # the cwrapper. 280986dafe34Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 281086dafe34Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 281186dafe34Smrg # special case for '.' 281286dafe34Smrg if test \"\$thisdir\" = \".\"; then 281386dafe34Smrg thisdir=\`pwd\` 281486dafe34Smrg fi 281586dafe34Smrg # remove .libs from thisdir 281686dafe34Smrg case \"\$thisdir\" in 281786dafe34Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; 281886dafe34Smrg $objdir ) thisdir=. ;; 281986dafe34Smrg esac 282086dafe34Smrg fi 282176888252Smrg 282286dafe34Smrg # Try to get the absolute directory name. 282386dafe34Smrg absdir=\`cd \"\$thisdir\" && pwd\` 282486dafe34Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 282586dafe34Smrg" 282676888252Smrg 282786dafe34Smrg if test "$fast_install" = yes; then 282886dafe34Smrg $ECHO "\ 282986dafe34Smrg program=lt-'$outputname'$exeext 283086dafe34Smrg progdir=\"\$thisdir/$objdir\" 283176888252Smrg 283286dafe34Smrg if test ! -f \"\$progdir/\$program\" || 283386dafe34Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 283486dafe34Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 283576888252Smrg 283686dafe34Smrg file=\"\$\$-\$program\" 283776888252Smrg 283886dafe34Smrg if test ! -d \"\$progdir\"; then 283986dafe34Smrg $MKDIR \"\$progdir\" 284086dafe34Smrg else 284186dafe34Smrg $RM \"\$progdir/\$file\" 284286dafe34Smrg fi" 284376888252Smrg 284486dafe34Smrg $ECHO "\ 284576888252Smrg 284686dafe34Smrg # relink executable if necessary 284786dafe34Smrg if test -n \"\$relink_command\"; then 284886dafe34Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 284986dafe34Smrg else 285086dafe34Smrg $ECHO \"\$relink_command_output\" >&2 285186dafe34Smrg $RM \"\$progdir/\$file\" 285286dafe34Smrg exit 1 285386dafe34Smrg fi 285486dafe34Smrg fi 285576888252Smrg 285686dafe34Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 285786dafe34Smrg { $RM \"\$progdir/\$program\"; 285886dafe34Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 285986dafe34Smrg $RM \"\$progdir/\$file\" 286086dafe34Smrg fi" 286186dafe34Smrg else 286286dafe34Smrg $ECHO "\ 286386dafe34Smrg program='$outputname' 286486dafe34Smrg progdir=\"\$thisdir/$objdir\" 286586dafe34Smrg" 286686dafe34Smrg fi 286776888252Smrg 286886dafe34Smrg $ECHO "\ 286976888252Smrg 287086dafe34Smrg if test -f \"\$progdir/\$program\"; then" 287176888252Smrg 287286dafe34Smrg # Export our shlibpath_var if we have one. 287386dafe34Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 287486dafe34Smrg $ECHO "\ 287586dafe34Smrg # Add our own library path to $shlibpath_var 287686dafe34Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 287776888252Smrg 287886dafe34Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 287986dafe34Smrg # The second colon is a workaround for a bug in BeOS R4 sed 288086dafe34Smrg $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 288176888252Smrg 288286dafe34Smrg export $shlibpath_var 288386dafe34Smrg" 288476888252Smrg fi 288576888252Smrg 288686dafe34Smrg # fixup the dll searchpath if we need to. 288786dafe34Smrg if test -n "$dllsearchpath"; then 288886dafe34Smrg $ECHO "\ 288986dafe34Smrg # Add the dll search path components to the executable PATH 289086dafe34Smrg PATH=$dllsearchpath:\$PATH 289186dafe34Smrg" 289276888252Smrg fi 289376888252Smrg 289486dafe34Smrg $ECHO "\ 289586dafe34Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 289686dafe34Smrg # Run the actual program with our arguments. 289786dafe34Smrg" 289886dafe34Smrg case $host in 289986dafe34Smrg # Backslashes separate directories on plain windows 290086dafe34Smrg *-*-mingw | *-*-os2* | *-cegcc*) 290186dafe34Smrg $ECHO "\ 290286dafe34Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 290386dafe34Smrg" 290486dafe34Smrg ;; 290586dafe34Smrg 290686dafe34Smrg *) 290786dafe34Smrg $ECHO "\ 290886dafe34Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 290986dafe34Smrg" 291086dafe34Smrg ;; 291186dafe34Smrg esac 291286dafe34Smrg $ECHO "\ 291386dafe34Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 291486dafe34Smrg exit 1 291586dafe34Smrg fi 291686dafe34Smrg else 291786dafe34Smrg # The program doesn't exist. 291886dafe34Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 291986dafe34Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 292086dafe34Smrg $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 292186dafe34Smrg exit 1 292286dafe34Smrg fi 292386dafe34Smrgfi\ 292486dafe34Smrg" 292586dafe34Smrg} 292686dafe34Smrg# end: func_emit_wrapper_part2 292786dafe34Smrg 292886dafe34Smrg 292986dafe34Smrg# func_emit_wrapper [arg=no] 293086dafe34Smrg# 293186dafe34Smrg# Emit a libtool wrapper script on stdout. 293286dafe34Smrg# Don't directly open a file because we may want to 293386dafe34Smrg# incorporate the script contents within a cygwin/mingw 293486dafe34Smrg# wrapper executable. Must ONLY be called from within 293586dafe34Smrg# func_mode_link because it depends on a number of variables 293686dafe34Smrg# set therein. 293786dafe34Smrg# 293886dafe34Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 293986dafe34Smrg# variable will take. If 'yes', then the emitted script 294086dafe34Smrg# will assume that the directory in which it is stored is 294186dafe34Smrg# the $objdir directory. This is a cygwin/mingw-specific 294286dafe34Smrg# behavior. 294386dafe34Smrgfunc_emit_wrapper () 294486dafe34Smrg{ 294586dafe34Smrg func_emit_wrapper_arg1=no 294686dafe34Smrg if test -n "$1" ; then 294786dafe34Smrg func_emit_wrapper_arg1=$1 294876888252Smrg fi 294976888252Smrg 295086dafe34Smrg # split this up so that func_emit_cwrapperexe_src 295186dafe34Smrg # can call each part independently. 295286dafe34Smrg func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" 295386dafe34Smrg func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" 295486dafe34Smrg} 295576888252Smrg 295676888252Smrg 295786dafe34Smrg# func_to_host_path arg 295886dafe34Smrg# 295986dafe34Smrg# Convert paths to host format when used with build tools. 296086dafe34Smrg# Intended for use with "native" mingw (where libtool itself 296186dafe34Smrg# is running under the msys shell), or in the following cross- 296286dafe34Smrg# build environments: 296386dafe34Smrg# $build $host 296486dafe34Smrg# mingw (msys) mingw [e.g. native] 296586dafe34Smrg# cygwin mingw 296686dafe34Smrg# *nix + wine mingw 296786dafe34Smrg# where wine is equipped with the `winepath' executable. 296886dafe34Smrg# In the native mingw case, the (msys) shell automatically 296986dafe34Smrg# converts paths for any non-msys applications it launches, 297086dafe34Smrg# but that facility isn't available from inside the cwrapper. 297186dafe34Smrg# Similar accommodations are necessary for $host mingw and 297286dafe34Smrg# $build cygwin. Calling this function does no harm for other 297386dafe34Smrg# $host/$build combinations not listed above. 297486dafe34Smrg# 297586dafe34Smrg# ARG is the path (on $build) that should be converted to 297686dafe34Smrg# the proper representation for $host. The result is stored 297786dafe34Smrg# in $func_to_host_path_result. 297886dafe34Smrgfunc_to_host_path () 297986dafe34Smrg{ 298086dafe34Smrg func_to_host_path_result="$1" 298186dafe34Smrg if test -n "$1" ; then 298286dafe34Smrg case $host in 298386dafe34Smrg *mingw* ) 298486dafe34Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 298586dafe34Smrg case $build in 298686dafe34Smrg *mingw* ) # actually, msys 298786dafe34Smrg # awkward: cmd appends spaces to result 298886dafe34Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 298986dafe34Smrg func_to_host_path_tmp1=`( cmd //c echo "$1" |\ 299086dafe34Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 299186dafe34Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 299286dafe34Smrg $SED -e "$lt_sed_naive_backslashify"` 299386dafe34Smrg ;; 299486dafe34Smrg *cygwin* ) 299586dafe34Smrg func_to_host_path_tmp1=`cygpath -w "$1"` 299686dafe34Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 299786dafe34Smrg $SED -e "$lt_sed_naive_backslashify"` 299886dafe34Smrg ;; 299986dafe34Smrg * ) 300086dafe34Smrg # Unfortunately, winepath does not exit with a non-zero 300186dafe34Smrg # error code, so we are forced to check the contents of 300286dafe34Smrg # stdout. On the other hand, if the command is not 300386dafe34Smrg # found, the shell will set an exit code of 127 and print 300486dafe34Smrg # *an error message* to stdout. So we must check for both 300586dafe34Smrg # error code of zero AND non-empty stdout, which explains 300686dafe34Smrg # the odd construction: 300786dafe34Smrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 300886dafe34Smrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 300986dafe34Smrg func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ 301086dafe34Smrg $SED -e "$lt_sed_naive_backslashify"` 301186dafe34Smrg else 301286dafe34Smrg # Allow warning below. 301386dafe34Smrg func_to_host_path_result="" 301486dafe34Smrg fi 301586dafe34Smrg ;; 301686dafe34Smrg esac 301786dafe34Smrg if test -z "$func_to_host_path_result" ; then 301886dafe34Smrg func_error "Could not determine host path corresponding to" 301986dafe34Smrg func_error " '$1'" 302086dafe34Smrg func_error "Continuing, but uninstalled executables may not work." 302186dafe34Smrg # Fallback: 302286dafe34Smrg func_to_host_path_result="$1" 302386dafe34Smrg fi 302486dafe34Smrg ;; 302586dafe34Smrg esac 302686dafe34Smrg fi 302786dafe34Smrg} 302886dafe34Smrg# end: func_to_host_path 302976888252Smrg 303086dafe34Smrg# func_to_host_pathlist arg 303186dafe34Smrg# 303286dafe34Smrg# Convert pathlists to host format when used with build tools. 303386dafe34Smrg# See func_to_host_path(), above. This function supports the 303486dafe34Smrg# following $build/$host combinations (but does no harm for 303586dafe34Smrg# combinations not listed here): 303686dafe34Smrg# $build $host 303786dafe34Smrg# mingw (msys) mingw [e.g. native] 303886dafe34Smrg# cygwin mingw 303986dafe34Smrg# *nix + wine mingw 304086dafe34Smrg# 304186dafe34Smrg# Path separators are also converted from $build format to 304286dafe34Smrg# $host format. If ARG begins or ends with a path separator 304386dafe34Smrg# character, it is preserved (but converted to $host format) 304486dafe34Smrg# on output. 304586dafe34Smrg# 304686dafe34Smrg# ARG is a pathlist (on $build) that should be converted to 304786dafe34Smrg# the proper representation on $host. The result is stored 304886dafe34Smrg# in $func_to_host_pathlist_result. 304986dafe34Smrgfunc_to_host_pathlist () 305086dafe34Smrg{ 305186dafe34Smrg func_to_host_pathlist_result="$1" 305286dafe34Smrg if test -n "$1" ; then 305386dafe34Smrg case $host in 305486dafe34Smrg *mingw* ) 305586dafe34Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 305686dafe34Smrg # Remove leading and trailing path separator characters from 305786dafe34Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 305886dafe34Smrg # into '.;' and ';.', and winepath ignores them completely. 305986dafe34Smrg func_to_host_pathlist_tmp2="$1" 306086dafe34Smrg # Once set for this call, this variable should not be 306186dafe34Smrg # reassigned. It is used in tha fallback case. 306286dafe34Smrg func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ 306386dafe34Smrg $SED -e 's|^:*||' -e 's|:*$||'` 306486dafe34Smrg case $build in 306586dafe34Smrg *mingw* ) # Actually, msys. 306686dafe34Smrg # Awkward: cmd appends spaces to result. 306786dafe34Smrg lt_sed_strip_trailing_spaces="s/[ ]*\$//" 306886dafe34Smrg func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ 306986dafe34Smrg $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` 307086dafe34Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 307186dafe34Smrg $SED -e "$lt_sed_naive_backslashify"` 307286dafe34Smrg ;; 307386dafe34Smrg *cygwin* ) 307486dafe34Smrg func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` 307586dafe34Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ 307686dafe34Smrg $SED -e "$lt_sed_naive_backslashify"` 307786dafe34Smrg ;; 307886dafe34Smrg * ) 307986dafe34Smrg # unfortunately, winepath doesn't convert pathlists 308086dafe34Smrg func_to_host_pathlist_result="" 308186dafe34Smrg func_to_host_pathlist_oldIFS=$IFS 308286dafe34Smrg IFS=: 308386dafe34Smrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 308486dafe34Smrg IFS=$func_to_host_pathlist_oldIFS 308586dafe34Smrg if test -n "$func_to_host_pathlist_f" ; then 308686dafe34Smrg func_to_host_path "$func_to_host_pathlist_f" 308786dafe34Smrg if test -n "$func_to_host_path_result" ; then 308886dafe34Smrg if test -z "$func_to_host_pathlist_result" ; then 308986dafe34Smrg func_to_host_pathlist_result="$func_to_host_path_result" 309086dafe34Smrg else 309186dafe34Smrg func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" 309286dafe34Smrg fi 309386dafe34Smrg fi 309486dafe34Smrg fi 309586dafe34Smrg IFS=: 309686dafe34Smrg done 309786dafe34Smrg IFS=$func_to_host_pathlist_oldIFS 309886dafe34Smrg ;; 309986dafe34Smrg esac 310086dafe34Smrg if test -z "$func_to_host_pathlist_result" ; then 310186dafe34Smrg func_error "Could not determine the host path(s) corresponding to" 310286dafe34Smrg func_error " '$1'" 310386dafe34Smrg func_error "Continuing, but uninstalled executables may not work." 310486dafe34Smrg # Fallback. This may break if $1 contains DOS-style drive 310586dafe34Smrg # specifications. The fix is not to complicate the expression 310686dafe34Smrg # below, but for the user to provide a working wine installation 310786dafe34Smrg # with winepath so that path translation in the cross-to-mingw 310886dafe34Smrg # case works properly. 310986dafe34Smrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 311086dafe34Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 311186dafe34Smrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 311286dafe34Smrg fi 311386dafe34Smrg # Now, add the leading and trailing path separators back 311486dafe34Smrg case "$1" in 311586dafe34Smrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 311686dafe34Smrg ;; 311786dafe34Smrg esac 311886dafe34Smrg case "$1" in 311986dafe34Smrg *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" 312086dafe34Smrg ;; 312186dafe34Smrg esac 312286dafe34Smrg ;; 312386dafe34Smrg esac 312486dafe34Smrg fi 312586dafe34Smrg} 312686dafe34Smrg# end: func_to_host_pathlist 312776888252Smrg 312886dafe34Smrg# func_emit_cwrapperexe_src 312986dafe34Smrg# emit the source code for a wrapper executable on stdout 313086dafe34Smrg# Must ONLY be called from within func_mode_link because 313186dafe34Smrg# it depends on a number of variable set therein. 313286dafe34Smrgfunc_emit_cwrapperexe_src () 313386dafe34Smrg{ 313486dafe34Smrg cat <<EOF 313576888252Smrg 313686dafe34Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 313786dafe34Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 313876888252Smrg 313986dafe34Smrg The $output program cannot be directly executed until all the libtool 314086dafe34Smrg libraries that it depends on are installed. 314176888252Smrg 314286dafe34Smrg This wrapper executable should never be moved out of the build directory. 314386dafe34Smrg If it is, it will not operate correctly. 314486dafe34Smrg 314586dafe34Smrg Currently, it simply execs the wrapper *script* "$SHELL $output", 314686dafe34Smrg but could eventually absorb all of the scripts functionality and 314786dafe34Smrg exec $objdir/$outputname directly. 314886dafe34Smrg*/ 314986dafe34SmrgEOF 315086dafe34Smrg cat <<"EOF" 315186dafe34Smrg#include <stdio.h> 315286dafe34Smrg#include <stdlib.h> 315386dafe34Smrg#ifdef _MSC_VER 315486dafe34Smrg# include <direct.h> 315586dafe34Smrg# include <process.h> 315686dafe34Smrg# include <io.h> 315786dafe34Smrg# define setmode _setmode 315886dafe34Smrg#else 315986dafe34Smrg# include <unistd.h> 316086dafe34Smrg# include <stdint.h> 316186dafe34Smrg# ifdef __CYGWIN__ 316286dafe34Smrg# include <io.h> 316386dafe34Smrg# define HAVE_SETENV 316486dafe34Smrg# ifdef __STRICT_ANSI__ 316586dafe34Smrgchar *realpath (const char *, char *); 316686dafe34Smrgint putenv (char *); 316786dafe34Smrgint setenv (const char *, const char *, int); 316886dafe34Smrg# endif 316986dafe34Smrg# endif 317086dafe34Smrg#endif 317186dafe34Smrg#include <malloc.h> 317286dafe34Smrg#include <stdarg.h> 317386dafe34Smrg#include <assert.h> 317486dafe34Smrg#include <string.h> 317586dafe34Smrg#include <ctype.h> 317686dafe34Smrg#include <errno.h> 317786dafe34Smrg#include <fcntl.h> 317886dafe34Smrg#include <sys/stat.h> 317986dafe34Smrg 318086dafe34Smrg#if defined(PATH_MAX) 318186dafe34Smrg# define LT_PATHMAX PATH_MAX 318286dafe34Smrg#elif defined(MAXPATHLEN) 318386dafe34Smrg# define LT_PATHMAX MAXPATHLEN 318486dafe34Smrg#else 318586dafe34Smrg# define LT_PATHMAX 1024 318686dafe34Smrg#endif 318786dafe34Smrg 318886dafe34Smrg#ifndef S_IXOTH 318986dafe34Smrg# define S_IXOTH 0 319086dafe34Smrg#endif 319186dafe34Smrg#ifndef S_IXGRP 319286dafe34Smrg# define S_IXGRP 0 319386dafe34Smrg#endif 319486dafe34Smrg 319586dafe34Smrg#ifdef _MSC_VER 319686dafe34Smrg# define S_IXUSR _S_IEXEC 319786dafe34Smrg# define stat _stat 319886dafe34Smrg# ifndef _INTPTR_T_DEFINED 319986dafe34Smrg# define intptr_t int 320086dafe34Smrg# endif 320186dafe34Smrg#endif 320286dafe34Smrg 320386dafe34Smrg#ifndef DIR_SEPARATOR 320486dafe34Smrg# define DIR_SEPARATOR '/' 320586dafe34Smrg# define PATH_SEPARATOR ':' 320686dafe34Smrg#endif 320786dafe34Smrg 320886dafe34Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 320986dafe34Smrg defined (__OS2__) 321086dafe34Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 321186dafe34Smrg# define FOPEN_WB "wb" 321286dafe34Smrg# ifndef DIR_SEPARATOR_2 321386dafe34Smrg# define DIR_SEPARATOR_2 '\\' 321486dafe34Smrg# endif 321586dafe34Smrg# ifndef PATH_SEPARATOR_2 321686dafe34Smrg# define PATH_SEPARATOR_2 ';' 321786dafe34Smrg# endif 321886dafe34Smrg#endif 321986dafe34Smrg 322086dafe34Smrg#ifndef DIR_SEPARATOR_2 322186dafe34Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 322286dafe34Smrg#else /* DIR_SEPARATOR_2 */ 322386dafe34Smrg# define IS_DIR_SEPARATOR(ch) \ 322486dafe34Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 322586dafe34Smrg#endif /* DIR_SEPARATOR_2 */ 322686dafe34Smrg 322786dafe34Smrg#ifndef PATH_SEPARATOR_2 322886dafe34Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 322986dafe34Smrg#else /* PATH_SEPARATOR_2 */ 323086dafe34Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 323186dafe34Smrg#endif /* PATH_SEPARATOR_2 */ 323286dafe34Smrg 323386dafe34Smrg#ifdef __CYGWIN__ 323486dafe34Smrg# define FOPEN_WB "wb" 323586dafe34Smrg#endif 323686dafe34Smrg 323786dafe34Smrg#ifndef FOPEN_WB 323886dafe34Smrg# define FOPEN_WB "w" 323986dafe34Smrg#endif 324086dafe34Smrg#ifndef _O_BINARY 324186dafe34Smrg# define _O_BINARY 0 324286dafe34Smrg#endif 324386dafe34Smrg 324486dafe34Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 324586dafe34Smrg#define XFREE(stale) do { \ 324686dafe34Smrg if (stale) { free ((void *) stale); stale = 0; } \ 324786dafe34Smrg} while (0) 324886dafe34Smrg 324986dafe34Smrg#undef LTWRAPPER_DEBUGPRINTF 325086dafe34Smrg#if defined DEBUGWRAPPER 325186dafe34Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args 325286dafe34Smrgstatic void 325386dafe34Smrgltwrapper_debugprintf (const char *fmt, ...) 325486dafe34Smrg{ 325586dafe34Smrg va_list args; 325686dafe34Smrg va_start (args, fmt); 325786dafe34Smrg (void) vfprintf (stderr, fmt, args); 325886dafe34Smrg va_end (args); 325986dafe34Smrg} 326086dafe34Smrg#else 326186dafe34Smrg# define LTWRAPPER_DEBUGPRINTF(args) 326286dafe34Smrg#endif 326386dafe34Smrg 326486dafe34Smrgconst char *program_name = NULL; 326586dafe34Smrg 326686dafe34Smrgvoid *xmalloc (size_t num); 326786dafe34Smrgchar *xstrdup (const char *string); 326886dafe34Smrgconst char *base_name (const char *name); 326986dafe34Smrgchar *find_executable (const char *wrapper); 327086dafe34Smrgchar *chase_symlinks (const char *pathspec); 327186dafe34Smrgint make_executable (const char *path); 327286dafe34Smrgint check_executable (const char *path); 327386dafe34Smrgchar *strendzap (char *str, const char *pat); 327486dafe34Smrgvoid lt_fatal (const char *message, ...); 327586dafe34Smrgvoid lt_setenv (const char *name, const char *value); 327686dafe34Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 327786dafe34Smrgvoid lt_opt_process_env_set (const char *arg); 327886dafe34Smrgvoid lt_opt_process_env_prepend (const char *arg); 327986dafe34Smrgvoid lt_opt_process_env_append (const char *arg); 328086dafe34Smrgint lt_split_name_value (const char *arg, char** name, char** value); 328186dafe34Smrgvoid lt_update_exe_path (const char *name, const char *value); 328286dafe34Smrgvoid lt_update_lib_path (const char *name, const char *value); 328386dafe34Smrg 328486dafe34Smrgstatic const char *script_text_part1 = 328586dafe34SmrgEOF 328686dafe34Smrg 328786dafe34Smrg func_emit_wrapper_part1 yes | 328886dafe34Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 328986dafe34Smrg -e 's/^/ "/' -e 's/$/\\n"/' 329086dafe34Smrg echo ";" 329186dafe34Smrg cat <<EOF 329286dafe34Smrg 329386dafe34Smrgstatic const char *script_text_part2 = 329486dafe34SmrgEOF 329586dafe34Smrg func_emit_wrapper_part2 yes | 329686dafe34Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 329786dafe34Smrg -e 's/^/ "/' -e 's/$/\\n"/' 329886dafe34Smrg echo ";" 329986dafe34Smrg 330086dafe34Smrg cat <<EOF 330186dafe34Smrgconst char * MAGIC_EXE = "$magic_exe"; 330286dafe34Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 330386dafe34SmrgEOF 330486dafe34Smrg 330586dafe34Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 330686dafe34Smrg func_to_host_pathlist "$temp_rpath" 330786dafe34Smrg cat <<EOF 330886dafe34Smrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 330976888252SmrgEOF 331076888252Smrg else 331186dafe34Smrg cat <<"EOF" 331286dafe34Smrgconst char * LIB_PATH_VALUE = ""; 331386dafe34SmrgEOF 331476888252Smrg fi 331586dafe34Smrg 331686dafe34Smrg if test -n "$dllsearchpath"; then 331786dafe34Smrg func_to_host_pathlist "$dllsearchpath:" 331886dafe34Smrg cat <<EOF 331986dafe34Smrgconst char * EXE_PATH_VARNAME = "PATH"; 332086dafe34Smrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 332186dafe34SmrgEOF 332276888252Smrg else 332386dafe34Smrg cat <<"EOF" 332486dafe34Smrgconst char * EXE_PATH_VARNAME = ""; 332586dafe34Smrgconst char * EXE_PATH_VALUE = ""; 332686dafe34SmrgEOF 332776888252Smrg fi 332886dafe34Smrg 332986dafe34Smrg if test "$fast_install" = yes; then 333086dafe34Smrg cat <<EOF 333186dafe34Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 333286dafe34SmrgEOF 333376888252Smrg else 333486dafe34Smrg cat <<EOF 333586dafe34Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 333686dafe34SmrgEOF 333776888252Smrg fi 333876888252Smrg 333976888252Smrg 334086dafe34Smrg cat <<"EOF" 334176888252Smrg 334286dafe34Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 334386dafe34Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH 5 334476888252Smrg 334586dafe34Smrgstatic const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH; 334686dafe34Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 334776888252Smrg 334886dafe34Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 334976888252Smrg 335086dafe34Smrgstatic const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7; 335186dafe34Smrgstatic const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set"; 335286dafe34Smrg /* argument is putenv-style "foo=bar", value of foo is set to bar */ 335376888252Smrg 335486dafe34Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11; 335586dafe34Smrgstatic const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend"; 335686dafe34Smrg /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */ 335776888252Smrg 335886dafe34Smrgstatic const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10; 335986dafe34Smrgstatic const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append"; 336086dafe34Smrg /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */ 336176888252Smrg 336286dafe34Smrgint 336386dafe34Smrgmain (int argc, char *argv[]) 336486dafe34Smrg{ 336586dafe34Smrg char **newargz; 336686dafe34Smrg int newargc; 336786dafe34Smrg char *tmp_pathspec; 336886dafe34Smrg char *actual_cwrapper_path; 336986dafe34Smrg char *actual_cwrapper_name; 337086dafe34Smrg char *target_name; 337186dafe34Smrg char *lt_argv_zero; 337286dafe34Smrg intptr_t rval = 127; 337376888252Smrg 337486dafe34Smrg int i; 337576888252Smrg 337686dafe34Smrg program_name = (char *) xstrdup (base_name (argv[0])); 337786dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0])); 337886dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name)); 337976888252Smrg 338086dafe34Smrg /* very simple arg parsing; don't want to rely on getopt */ 338186dafe34Smrg for (i = 1; i < argc; i++) 338286dafe34Smrg { 338386dafe34Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 338486dafe34Smrg { 338586dafe34SmrgEOF 338686dafe34Smrg case "$host" in 338786dafe34Smrg *mingw* | *cygwin* ) 338886dafe34Smrg # make stdout use "unix" line endings 338986dafe34Smrg echo " setmode(1,_O_BINARY);" 339086dafe34Smrg ;; 339186dafe34Smrg esac 339276888252Smrg 339386dafe34Smrg cat <<"EOF" 339486dafe34Smrg printf ("%s", script_text_part1); 339586dafe34Smrg printf ("%s", script_text_part2); 339686dafe34Smrg return 0; 339786dafe34Smrg } 339886dafe34Smrg } 339976888252Smrg 340086dafe34Smrg newargz = XMALLOC (char *, argc + 1); 340186dafe34Smrg tmp_pathspec = find_executable (argv[0]); 340286dafe34Smrg if (tmp_pathspec == NULL) 340386dafe34Smrg lt_fatal ("Couldn't find %s", argv[0]); 340486dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", 340586dafe34Smrg tmp_pathspec)); 340686dafe34Smrg 340786dafe34Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 340886dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", 340986dafe34Smrg actual_cwrapper_path)); 341086dafe34Smrg XFREE (tmp_pathspec); 341186dafe34Smrg 341286dafe34Smrg actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); 341386dafe34Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 341486dafe34Smrg 341586dafe34Smrg /* wrapper name transforms */ 341686dafe34Smrg strendzap (actual_cwrapper_name, ".exe"); 341786dafe34Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 341886dafe34Smrg XFREE (actual_cwrapper_name); 341986dafe34Smrg actual_cwrapper_name = tmp_pathspec; 342086dafe34Smrg tmp_pathspec = 0; 342186dafe34Smrg 342286dafe34Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 342386dafe34Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 342486dafe34Smrg strendzap (target_name, ".exe"); 342586dafe34Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 342686dafe34Smrg XFREE (target_name); 342786dafe34Smrg target_name = tmp_pathspec; 342886dafe34Smrg tmp_pathspec = 0; 342986dafe34Smrg 343086dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", 343186dafe34Smrg target_name)); 343286dafe34SmrgEOF 343376888252Smrg 343486dafe34Smrg cat <<EOF 343586dafe34Smrg newargz[0] = 343686dafe34Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 343786dafe34Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 343886dafe34Smrg strcpy (newargz[0], actual_cwrapper_path); 343986dafe34Smrg strcat (newargz[0], "$objdir"); 344086dafe34Smrg strcat (newargz[0], "/"); 344186dafe34SmrgEOF 344276888252Smrg 344386dafe34Smrg cat <<"EOF" 344486dafe34Smrg /* stop here, and copy so we don't have to do this twice */ 344586dafe34Smrg tmp_pathspec = xstrdup (newargz[0]); 344676888252Smrg 344786dafe34Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 344886dafe34Smrg strcat (newargz[0], actual_cwrapper_name); 344976888252Smrg 345086dafe34Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 345186dafe34Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 345286dafe34Smrg XFREE (tmp_pathspec); 345386dafe34Smrg tmp_pathspec = NULL; 345486dafe34SmrgEOF 345576888252Smrg 345686dafe34Smrg case $host_os in 345786dafe34Smrg mingw*) 345886dafe34Smrg cat <<"EOF" 345986dafe34Smrg { 346086dafe34Smrg char* p; 346186dafe34Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 346286dafe34Smrg { 346386dafe34Smrg *p = '/'; 346486dafe34Smrg } 346586dafe34Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 346686dafe34Smrg { 346786dafe34Smrg *p = '/'; 346886dafe34Smrg } 346986dafe34Smrg } 347086dafe34SmrgEOF 347186dafe34Smrg ;; 347286dafe34Smrg esac 347376888252Smrg 347486dafe34Smrg cat <<"EOF" 347586dafe34Smrg XFREE (target_name); 347686dafe34Smrg XFREE (actual_cwrapper_path); 347786dafe34Smrg XFREE (actual_cwrapper_name); 347876888252Smrg 347986dafe34Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 348086dafe34Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 348186dafe34Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 348286dafe34Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 348376888252Smrg 348486dafe34Smrg newargc=0; 348586dafe34Smrg for (i = 1; i < argc; i++) 348686dafe34Smrg { 348786dafe34Smrg if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) 348886dafe34Smrg { 348986dafe34Smrg if (argv[i][env_set_opt_len] == '=') 349086dafe34Smrg { 349186dafe34Smrg const char *p = argv[i] + env_set_opt_len + 1; 349286dafe34Smrg lt_opt_process_env_set (p); 349386dafe34Smrg } 349486dafe34Smrg else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) 349586dafe34Smrg { 349686dafe34Smrg lt_opt_process_env_set (argv[++i]); /* don't copy */ 349786dafe34Smrg } 349886dafe34Smrg else 349986dafe34Smrg lt_fatal ("%s missing required argument", env_set_opt); 350086dafe34Smrg continue; 350186dafe34Smrg } 350286dafe34Smrg if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) 350386dafe34Smrg { 350486dafe34Smrg if (argv[i][env_prepend_opt_len] == '=') 350586dafe34Smrg { 350686dafe34Smrg const char *p = argv[i] + env_prepend_opt_len + 1; 350786dafe34Smrg lt_opt_process_env_prepend (p); 350886dafe34Smrg } 350986dafe34Smrg else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) 351086dafe34Smrg { 351186dafe34Smrg lt_opt_process_env_prepend (argv[++i]); /* don't copy */ 351286dafe34Smrg } 351386dafe34Smrg else 351486dafe34Smrg lt_fatal ("%s missing required argument", env_prepend_opt); 351586dafe34Smrg continue; 351686dafe34Smrg } 351786dafe34Smrg if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) 351886dafe34Smrg { 351986dafe34Smrg if (argv[i][env_append_opt_len] == '=') 352086dafe34Smrg { 352186dafe34Smrg const char *p = argv[i] + env_append_opt_len + 1; 352286dafe34Smrg lt_opt_process_env_append (p); 352386dafe34Smrg } 352486dafe34Smrg else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) 352586dafe34Smrg { 352686dafe34Smrg lt_opt_process_env_append (argv[++i]); /* don't copy */ 352786dafe34Smrg } 352886dafe34Smrg else 352986dafe34Smrg lt_fatal ("%s missing required argument", env_append_opt); 353086dafe34Smrg continue; 353186dafe34Smrg } 353286dafe34Smrg if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) 353386dafe34Smrg { 353486dafe34Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 353586dafe34Smrg namespace, but it is not one of the ones we know about and 353686dafe34Smrg have already dealt with, above (inluding dump-script), then 353786dafe34Smrg report an error. Otherwise, targets might begin to believe 353886dafe34Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 353986dafe34Smrg namespace. The first time any user complains about this, we'll 354086dafe34Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 354186dafe34Smrg or a configure.ac-settable value. 354286dafe34Smrg */ 354386dafe34Smrg lt_fatal ("Unrecognized option in %s namespace: '%s'", 354486dafe34Smrg ltwrapper_option_prefix, argv[i]); 354586dafe34Smrg } 354686dafe34Smrg /* otherwise ... */ 354786dafe34Smrg newargz[++newargc] = xstrdup (argv[i]); 354886dafe34Smrg } 354986dafe34Smrg newargz[++newargc] = NULL; 355076888252Smrg 355186dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>"))); 355286dafe34Smrg for (i = 0; i < newargc; i++) 355386dafe34Smrg { 355486dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>"))); 355586dafe34Smrg } 355676888252Smrg 355786dafe34SmrgEOF 355876888252Smrg 355986dafe34Smrg case $host_os in 356086dafe34Smrg mingw*) 356186dafe34Smrg cat <<"EOF" 356286dafe34Smrg /* execv doesn't actually work on mingw as expected on unix */ 356386dafe34Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 356486dafe34Smrg if (rval == -1) 356586dafe34Smrg { 356686dafe34Smrg /* failed to start process */ 356786dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); 356886dafe34Smrg return 127; 356986dafe34Smrg } 357086dafe34Smrg return rval; 357186dafe34SmrgEOF 357286dafe34Smrg ;; 357386dafe34Smrg *) 357486dafe34Smrg cat <<"EOF" 357586dafe34Smrg execv (lt_argv_zero, newargz); 357686dafe34Smrg return rval; /* =127, but avoids unused variable warning */ 357786dafe34SmrgEOF 357886dafe34Smrg ;; 357986dafe34Smrg esac 358076888252Smrg 358186dafe34Smrg cat <<"EOF" 358286dafe34Smrg} 358376888252Smrg 358486dafe34Smrgvoid * 358586dafe34Smrgxmalloc (size_t num) 358686dafe34Smrg{ 358786dafe34Smrg void *p = (void *) malloc (num); 358886dafe34Smrg if (!p) 358986dafe34Smrg lt_fatal ("Memory exhausted"); 359076888252Smrg 359186dafe34Smrg return p; 359286dafe34Smrg} 359376888252Smrg 359486dafe34Smrgchar * 359586dafe34Smrgxstrdup (const char *string) 359686dafe34Smrg{ 359786dafe34Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 359886dafe34Smrg string) : NULL; 359986dafe34Smrg} 360076888252Smrg 360186dafe34Smrgconst char * 360286dafe34Smrgbase_name (const char *name) 360386dafe34Smrg{ 360486dafe34Smrg const char *base; 360576888252Smrg 360686dafe34Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 360786dafe34Smrg /* Skip over the disk name in MSDOS pathnames. */ 360886dafe34Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 360986dafe34Smrg name += 2; 361086dafe34Smrg#endif 361176888252Smrg 361286dafe34Smrg for (base = name; *name; name++) 361386dafe34Smrg if (IS_DIR_SEPARATOR (*name)) 361486dafe34Smrg base = name + 1; 361586dafe34Smrg return base; 361686dafe34Smrg} 361776888252Smrg 361886dafe34Smrgint 361986dafe34Smrgcheck_executable (const char *path) 362086dafe34Smrg{ 362186dafe34Smrg struct stat st; 362276888252Smrg 362386dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", 362486dafe34Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 362586dafe34Smrg if ((!path) || (!*path)) 362686dafe34Smrg return 0; 362776888252Smrg 362886dafe34Smrg if ((stat (path, &st) >= 0) 362986dafe34Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 363086dafe34Smrg return 1; 363186dafe34Smrg else 363286dafe34Smrg return 0; 363386dafe34Smrg} 363476888252Smrg 363586dafe34Smrgint 363686dafe34Smrgmake_executable (const char *path) 363786dafe34Smrg{ 363886dafe34Smrg int rval = 0; 363986dafe34Smrg struct stat st; 364076888252Smrg 364186dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", 364286dafe34Smrg path ? (*path ? path : "EMPTY!") : "NULL!")); 364386dafe34Smrg if ((!path) || (!*path)) 364486dafe34Smrg return 0; 364576888252Smrg 364686dafe34Smrg if (stat (path, &st) >= 0) 364786dafe34Smrg { 364886dafe34Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 364986dafe34Smrg } 365086dafe34Smrg return rval; 365186dafe34Smrg} 365276888252Smrg 365386dafe34Smrg/* Searches for the full path of the wrapper. Returns 365486dafe34Smrg newly allocated full path name if found, NULL otherwise 365586dafe34Smrg Does not chase symlinks, even on platforms that support them. 365686dafe34Smrg*/ 365786dafe34Smrgchar * 365886dafe34Smrgfind_executable (const char *wrapper) 365986dafe34Smrg{ 366086dafe34Smrg int has_slash = 0; 366186dafe34Smrg const char *p; 366286dafe34Smrg const char *p_next; 366386dafe34Smrg /* static buffer for getcwd */ 366486dafe34Smrg char tmp[LT_PATHMAX + 1]; 366586dafe34Smrg int tmp_len; 366686dafe34Smrg char *concat_name; 366776888252Smrg 366886dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", 366986dafe34Smrg wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); 367076888252Smrg 367186dafe34Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 367286dafe34Smrg return NULL; 367376888252Smrg 367486dafe34Smrg /* Absolute path? */ 367586dafe34Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 367686dafe34Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 367786dafe34Smrg { 367886dafe34Smrg concat_name = xstrdup (wrapper); 367986dafe34Smrg if (check_executable (concat_name)) 368086dafe34Smrg return concat_name; 368186dafe34Smrg XFREE (concat_name); 368286dafe34Smrg } 368386dafe34Smrg else 368486dafe34Smrg { 368586dafe34Smrg#endif 368686dafe34Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 368786dafe34Smrg { 368886dafe34Smrg concat_name = xstrdup (wrapper); 368986dafe34Smrg if (check_executable (concat_name)) 369086dafe34Smrg return concat_name; 369186dafe34Smrg XFREE (concat_name); 369286dafe34Smrg } 369386dafe34Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 369486dafe34Smrg } 369586dafe34Smrg#endif 369676888252Smrg 369786dafe34Smrg for (p = wrapper; *p; p++) 369886dafe34Smrg if (*p == '/') 369986dafe34Smrg { 370086dafe34Smrg has_slash = 1; 370186dafe34Smrg break; 370286dafe34Smrg } 370386dafe34Smrg if (!has_slash) 370486dafe34Smrg { 370586dafe34Smrg /* no slashes; search PATH */ 370686dafe34Smrg const char *path = getenv ("PATH"); 370786dafe34Smrg if (path != NULL) 370886dafe34Smrg { 370986dafe34Smrg for (p = path; *p; p = p_next) 371086dafe34Smrg { 371186dafe34Smrg const char *q; 371286dafe34Smrg size_t p_len; 371386dafe34Smrg for (q = p; *q; q++) 371486dafe34Smrg if (IS_PATH_SEPARATOR (*q)) 371586dafe34Smrg break; 371686dafe34Smrg p_len = q - p; 371786dafe34Smrg p_next = (*q == '\0' ? q : q + 1); 371886dafe34Smrg if (p_len == 0) 371986dafe34Smrg { 372086dafe34Smrg /* empty path: current directory */ 372186dafe34Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 372286dafe34Smrg lt_fatal ("getcwd failed"); 372386dafe34Smrg tmp_len = strlen (tmp); 372486dafe34Smrg concat_name = 372586dafe34Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 372686dafe34Smrg memcpy (concat_name, tmp, tmp_len); 372786dafe34Smrg concat_name[tmp_len] = '/'; 372886dafe34Smrg strcpy (concat_name + tmp_len + 1, wrapper); 372986dafe34Smrg } 373086dafe34Smrg else 373186dafe34Smrg { 373286dafe34Smrg concat_name = 373386dafe34Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 373486dafe34Smrg memcpy (concat_name, p, p_len); 373586dafe34Smrg concat_name[p_len] = '/'; 373686dafe34Smrg strcpy (concat_name + p_len + 1, wrapper); 373786dafe34Smrg } 373886dafe34Smrg if (check_executable (concat_name)) 373986dafe34Smrg return concat_name; 374086dafe34Smrg XFREE (concat_name); 374186dafe34Smrg } 374286dafe34Smrg } 374386dafe34Smrg /* not found in PATH; assume curdir */ 374486dafe34Smrg } 374586dafe34Smrg /* Relative path | not found in path: prepend cwd */ 374686dafe34Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 374786dafe34Smrg lt_fatal ("getcwd failed"); 374886dafe34Smrg tmp_len = strlen (tmp); 374986dafe34Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 375086dafe34Smrg memcpy (concat_name, tmp, tmp_len); 375186dafe34Smrg concat_name[tmp_len] = '/'; 375286dafe34Smrg strcpy (concat_name + tmp_len + 1, wrapper); 375376888252Smrg 375486dafe34Smrg if (check_executable (concat_name)) 375586dafe34Smrg return concat_name; 375686dafe34Smrg XFREE (concat_name); 375786dafe34Smrg return NULL; 375886dafe34Smrg} 375976888252Smrg 376086dafe34Smrgchar * 376186dafe34Smrgchase_symlinks (const char *pathspec) 376286dafe34Smrg{ 376386dafe34Smrg#ifndef S_ISLNK 376486dafe34Smrg return xstrdup (pathspec); 376586dafe34Smrg#else 376686dafe34Smrg char buf[LT_PATHMAX]; 376786dafe34Smrg struct stat s; 376886dafe34Smrg char *tmp_pathspec = xstrdup (pathspec); 376986dafe34Smrg char *p; 377086dafe34Smrg int has_symlinks = 0; 377186dafe34Smrg while (strlen (tmp_pathspec) && !has_symlinks) 377286dafe34Smrg { 377386dafe34Smrg LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", 377486dafe34Smrg tmp_pathspec)); 377586dafe34Smrg if (lstat (tmp_pathspec, &s) == 0) 377686dafe34Smrg { 377786dafe34Smrg if (S_ISLNK (s.st_mode) != 0) 377886dafe34Smrg { 377986dafe34Smrg has_symlinks = 1; 378086dafe34Smrg break; 378186dafe34Smrg } 378276888252Smrg 378386dafe34Smrg /* search backwards for last DIR_SEPARATOR */ 378486dafe34Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 378586dafe34Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 378686dafe34Smrg p--; 378786dafe34Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 378886dafe34Smrg { 378986dafe34Smrg /* no more DIR_SEPARATORS left */ 379086dafe34Smrg break; 379186dafe34Smrg } 379286dafe34Smrg *p = '\0'; 379386dafe34Smrg } 379486dafe34Smrg else 379586dafe34Smrg { 379686dafe34Smrg char *errstr = strerror (errno); 379786dafe34Smrg lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); 379886dafe34Smrg } 379986dafe34Smrg } 380086dafe34Smrg XFREE (tmp_pathspec); 380176888252Smrg 380286dafe34Smrg if (!has_symlinks) 380386dafe34Smrg { 380486dafe34Smrg return xstrdup (pathspec); 380586dafe34Smrg } 380676888252Smrg 380786dafe34Smrg tmp_pathspec = realpath (pathspec, buf); 380886dafe34Smrg if (tmp_pathspec == 0) 380986dafe34Smrg { 381086dafe34Smrg lt_fatal ("Could not follow symlinks for %s", pathspec); 381186dafe34Smrg } 381286dafe34Smrg return xstrdup (tmp_pathspec); 381386dafe34Smrg#endif 381486dafe34Smrg} 381576888252Smrg 381686dafe34Smrgchar * 381786dafe34Smrgstrendzap (char *str, const char *pat) 381886dafe34Smrg{ 381986dafe34Smrg size_t len, patlen; 382076888252Smrg 382186dafe34Smrg assert (str != NULL); 382286dafe34Smrg assert (pat != NULL); 382376888252Smrg 382486dafe34Smrg len = strlen (str); 382586dafe34Smrg patlen = strlen (pat); 382676888252Smrg 382786dafe34Smrg if (patlen <= len) 382886dafe34Smrg { 382986dafe34Smrg str += len - patlen; 383086dafe34Smrg if (strcmp (str, pat) == 0) 383186dafe34Smrg *str = '\0'; 383286dafe34Smrg } 383386dafe34Smrg return str; 383486dafe34Smrg} 383576888252Smrg 383686dafe34Smrgstatic void 383786dafe34Smrglt_error_core (int exit_status, const char *mode, 383886dafe34Smrg const char *message, va_list ap) 383986dafe34Smrg{ 384086dafe34Smrg fprintf (stderr, "%s: %s: ", program_name, mode); 384186dafe34Smrg vfprintf (stderr, message, ap); 384286dafe34Smrg fprintf (stderr, ".\n"); 384376888252Smrg 384486dafe34Smrg if (exit_status >= 0) 384586dafe34Smrg exit (exit_status); 384686dafe34Smrg} 384776888252Smrg 384886dafe34Smrgvoid 384986dafe34Smrglt_fatal (const char *message, ...) 385086dafe34Smrg{ 385186dafe34Smrg va_list ap; 385286dafe34Smrg va_start (ap, message); 385386dafe34Smrg lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 385486dafe34Smrg va_end (ap); 385586dafe34Smrg} 385676888252Smrg 385786dafe34Smrgvoid 385886dafe34Smrglt_setenv (const char *name, const char *value) 385986dafe34Smrg{ 386086dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", 386186dafe34Smrg (name ? name : "<NULL>"), 386286dafe34Smrg (value ? value : "<NULL>"))); 386386dafe34Smrg { 386486dafe34Smrg#ifdef HAVE_SETENV 386586dafe34Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 386686dafe34Smrg char *str = xstrdup (value); 386786dafe34Smrg setenv (name, str, 1); 386886dafe34Smrg#else 386986dafe34Smrg int len = strlen (name) + 1 + strlen (value) + 1; 387086dafe34Smrg char *str = XMALLOC (char, len); 387186dafe34Smrg sprintf (str, "%s=%s", name, value); 387286dafe34Smrg if (putenv (str) != EXIT_SUCCESS) 387386dafe34Smrg { 387486dafe34Smrg XFREE (str); 387586dafe34Smrg } 387686dafe34Smrg#endif 387786dafe34Smrg } 387886dafe34Smrg} 387976888252Smrg 388086dafe34Smrgchar * 388186dafe34Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 388286dafe34Smrg{ 388386dafe34Smrg char *new_value; 388486dafe34Smrg if (orig_value && *orig_value) 388586dafe34Smrg { 388686dafe34Smrg int orig_value_len = strlen (orig_value); 388786dafe34Smrg int add_len = strlen (add); 388886dafe34Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 388986dafe34Smrg if (to_end) 389086dafe34Smrg { 389186dafe34Smrg strcpy (new_value, orig_value); 389286dafe34Smrg strcpy (new_value + orig_value_len, add); 389386dafe34Smrg } 389486dafe34Smrg else 389586dafe34Smrg { 389686dafe34Smrg strcpy (new_value, add); 389786dafe34Smrg strcpy (new_value + add_len, orig_value); 389886dafe34Smrg } 389986dafe34Smrg } 390086dafe34Smrg else 390186dafe34Smrg { 390286dafe34Smrg new_value = xstrdup (add); 390386dafe34Smrg } 390486dafe34Smrg return new_value; 390586dafe34Smrg} 390676888252Smrg 390786dafe34Smrgint 390886dafe34Smrglt_split_name_value (const char *arg, char** name, char** value) 390986dafe34Smrg{ 391086dafe34Smrg const char *p; 391186dafe34Smrg int len; 391286dafe34Smrg if (!arg || !*arg) 391386dafe34Smrg return 1; 391476888252Smrg 391586dafe34Smrg p = strchr (arg, (int)'='); 391676888252Smrg 391786dafe34Smrg if (!p) 391886dafe34Smrg return 1; 391976888252Smrg 392086dafe34Smrg *value = xstrdup (++p); 392176888252Smrg 392286dafe34Smrg len = strlen (arg) - strlen (*value); 392386dafe34Smrg *name = XMALLOC (char, len); 392486dafe34Smrg strncpy (*name, arg, len-1); 392586dafe34Smrg (*name)[len - 1] = '\0'; 392676888252Smrg 392786dafe34Smrg return 0; 392886dafe34Smrg} 392976888252Smrg 393086dafe34Smrgvoid 393186dafe34Smrglt_opt_process_env_set (const char *arg) 393286dafe34Smrg{ 393386dafe34Smrg char *name = NULL; 393486dafe34Smrg char *value = NULL; 393576888252Smrg 393686dafe34Smrg if (lt_split_name_value (arg, &name, &value) != 0) 393786dafe34Smrg { 393886dafe34Smrg XFREE (name); 393986dafe34Smrg XFREE (value); 394086dafe34Smrg lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); 394186dafe34Smrg } 394276888252Smrg 394386dafe34Smrg lt_setenv (name, value); 394486dafe34Smrg XFREE (name); 394586dafe34Smrg XFREE (value); 394686dafe34Smrg} 394776888252Smrg 394886dafe34Smrgvoid 394986dafe34Smrglt_opt_process_env_prepend (const char *arg) 395086dafe34Smrg{ 395186dafe34Smrg char *name = NULL; 395286dafe34Smrg char *value = NULL; 395386dafe34Smrg char *new_value = NULL; 395476888252Smrg 395586dafe34Smrg if (lt_split_name_value (arg, &name, &value) != 0) 395686dafe34Smrg { 395786dafe34Smrg XFREE (name); 395886dafe34Smrg XFREE (value); 395986dafe34Smrg lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); 396086dafe34Smrg } 396176888252Smrg 396286dafe34Smrg new_value = lt_extend_str (getenv (name), value, 0); 396386dafe34Smrg lt_setenv (name, new_value); 396486dafe34Smrg XFREE (new_value); 396586dafe34Smrg XFREE (name); 396686dafe34Smrg XFREE (value); 396786dafe34Smrg} 396876888252Smrg 396986dafe34Smrgvoid 397086dafe34Smrglt_opt_process_env_append (const char *arg) 397186dafe34Smrg{ 397286dafe34Smrg char *name = NULL; 397386dafe34Smrg char *value = NULL; 397486dafe34Smrg char *new_value = NULL; 397576888252Smrg 397686dafe34Smrg if (lt_split_name_value (arg, &name, &value) != 0) 397786dafe34Smrg { 397886dafe34Smrg XFREE (name); 397986dafe34Smrg XFREE (value); 398086dafe34Smrg lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); 398186dafe34Smrg } 398276888252Smrg 398386dafe34Smrg new_value = lt_extend_str (getenv (name), value, 1); 398486dafe34Smrg lt_setenv (name, new_value); 398586dafe34Smrg XFREE (new_value); 398686dafe34Smrg XFREE (name); 398786dafe34Smrg XFREE (value); 398886dafe34Smrg} 398976888252Smrg 399086dafe34Smrgvoid 399186dafe34Smrglt_update_exe_path (const char *name, const char *value) 399286dafe34Smrg{ 399386dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 399486dafe34Smrg (name ? name : "<NULL>"), 399586dafe34Smrg (value ? value : "<NULL>"))); 399676888252Smrg 399786dafe34Smrg if (name && *name && value && *value) 399886dafe34Smrg { 399986dafe34Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 400086dafe34Smrg /* some systems can't cope with a ':'-terminated path #' */ 400186dafe34Smrg int len = strlen (new_value); 400286dafe34Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 400386dafe34Smrg { 400486dafe34Smrg new_value[len-1] = '\0'; 400586dafe34Smrg } 400686dafe34Smrg lt_setenv (name, new_value); 400786dafe34Smrg XFREE (new_value); 400886dafe34Smrg } 400986dafe34Smrg} 401076888252Smrg 401186dafe34Smrgvoid 401286dafe34Smrglt_update_lib_path (const char *name, const char *value) 401386dafe34Smrg{ 401486dafe34Smrg LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 401586dafe34Smrg (name ? name : "<NULL>"), 401686dafe34Smrg (value ? value : "<NULL>"))); 401776888252Smrg 401886dafe34Smrg if (name && *name && value && *value) 401986dafe34Smrg { 402086dafe34Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 402186dafe34Smrg lt_setenv (name, new_value); 402286dafe34Smrg XFREE (new_value); 402386dafe34Smrg } 402486dafe34Smrg} 402576888252Smrg 402676888252Smrg 402786dafe34SmrgEOF 402886dafe34Smrg} 402986dafe34Smrg# end: func_emit_cwrapperexe_src 403076888252Smrg 403186dafe34Smrg# func_mode_link arg... 403286dafe34Smrgfunc_mode_link () 403386dafe34Smrg{ 403486dafe34Smrg $opt_debug 403586dafe34Smrg case $host in 403686dafe34Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 403786dafe34Smrg # It is impossible to link a dll without this setting, and 403886dafe34Smrg # we shouldn't force the makefile maintainer to figure out 403986dafe34Smrg # which system we are compiling for in order to pass an extra 404086dafe34Smrg # flag for every libtool invocation. 404186dafe34Smrg # allow_undefined=no 404276888252Smrg 404386dafe34Smrg # FIXME: Unfortunately, there are problems with the above when trying 404486dafe34Smrg # to make a dll which has undefined symbols, in which case not 404586dafe34Smrg # even a static library is built. For now, we need to specify 404686dafe34Smrg # -no-undefined on the libtool link line when we can be certain 404786dafe34Smrg # that all symbols are satisfied, otherwise we get a static library. 404886dafe34Smrg allow_undefined=yes 404986dafe34Smrg ;; 405086dafe34Smrg *) 405186dafe34Smrg allow_undefined=yes 405286dafe34Smrg ;; 405386dafe34Smrg esac 405486dafe34Smrg libtool_args=$nonopt 405586dafe34Smrg base_compile="$nonopt $@" 405686dafe34Smrg compile_command=$nonopt 405786dafe34Smrg finalize_command=$nonopt 405876888252Smrg 405986dafe34Smrg compile_rpath= 406086dafe34Smrg finalize_rpath= 406186dafe34Smrg compile_shlibpath= 406286dafe34Smrg finalize_shlibpath= 406386dafe34Smrg convenience= 406486dafe34Smrg old_convenience= 406586dafe34Smrg deplibs= 406686dafe34Smrg old_deplibs= 406786dafe34Smrg compiler_flags= 406886dafe34Smrg linker_flags= 406986dafe34Smrg dllsearchpath= 407086dafe34Smrg lib_search_path=`pwd` 407186dafe34Smrg inst_prefix_dir= 407286dafe34Smrg new_inherited_linker_flags= 407376888252Smrg 407486dafe34Smrg avoid_version=no 407586dafe34Smrg dlfiles= 407686dafe34Smrg dlprefiles= 407786dafe34Smrg dlself=no 407886dafe34Smrg export_dynamic=no 407986dafe34Smrg export_symbols= 408086dafe34Smrg export_symbols_regex= 408186dafe34Smrg generated= 408286dafe34Smrg libobjs= 408386dafe34Smrg ltlibs= 408486dafe34Smrg module=no 408586dafe34Smrg no_install=no 408686dafe34Smrg objs= 408786dafe34Smrg non_pic_objects= 408886dafe34Smrg precious_files_regex= 408986dafe34Smrg prefer_static_libs=no 409086dafe34Smrg preload=no 409186dafe34Smrg prev= 409286dafe34Smrg prevarg= 409386dafe34Smrg release= 409486dafe34Smrg rpath= 409586dafe34Smrg xrpath= 409686dafe34Smrg perm_rpath= 409786dafe34Smrg temp_rpath= 409886dafe34Smrg thread_safe=no 409986dafe34Smrg vinfo= 410086dafe34Smrg vinfo_number=no 410186dafe34Smrg weak_libs= 410286dafe34Smrg single_module="${wl}-single_module" 410386dafe34Smrg func_infer_tag $base_compile 410476888252Smrg 410586dafe34Smrg # We need to know -static, to get the right output filenames. 410686dafe34Smrg for arg 410786dafe34Smrg do 410886dafe34Smrg case $arg in 410986dafe34Smrg -shared) 411086dafe34Smrg test "$build_libtool_libs" != yes && \ 411186dafe34Smrg func_fatal_configuration "can not build a shared library" 411286dafe34Smrg build_old_libs=no 411386dafe34Smrg break 411486dafe34Smrg ;; 411586dafe34Smrg -all-static | -static | -static-libtool-libs) 411686dafe34Smrg case $arg in 411786dafe34Smrg -all-static) 411886dafe34Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 411986dafe34Smrg func_warning "complete static linking is impossible in this configuration" 412076888252Smrg fi 412186dafe34Smrg if test -n "$link_static_flag"; then 412286dafe34Smrg dlopen_self=$dlopen_self_static 412376888252Smrg fi 412486dafe34Smrg prefer_static_libs=yes 412576888252Smrg ;; 412686dafe34Smrg -static) 412786dafe34Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 412886dafe34Smrg dlopen_self=$dlopen_self_static 412986dafe34Smrg fi 413086dafe34Smrg prefer_static_libs=built 413186dafe34Smrg ;; 413286dafe34Smrg -static-libtool-libs) 413386dafe34Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 413486dafe34Smrg dlopen_self=$dlopen_self_static 413586dafe34Smrg fi 413686dafe34Smrg prefer_static_libs=yes 413776888252Smrg ;; 413876888252Smrg esac 413986dafe34Smrg build_libtool_libs=no 414086dafe34Smrg build_old_libs=yes 414186dafe34Smrg break 414286dafe34Smrg ;; 414386dafe34Smrg esac 414486dafe34Smrg done 414576888252Smrg 414686dafe34Smrg # See if our shared archives depend on static archives. 414786dafe34Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 414876888252Smrg 414986dafe34Smrg # Go through the arguments, transforming them on the way. 415086dafe34Smrg while test "$#" -gt 0; do 415186dafe34Smrg arg="$1" 415286dafe34Smrg shift 415386dafe34Smrg func_quote_for_eval "$arg" 415486dafe34Smrg qarg=$func_quote_for_eval_unquoted_result 415586dafe34Smrg func_append libtool_args " $func_quote_for_eval_result" 415676888252Smrg 415786dafe34Smrg # If the previous option needs an argument, assign it. 415886dafe34Smrg if test -n "$prev"; then 415986dafe34Smrg case $prev in 416086dafe34Smrg output) 416186dafe34Smrg func_append compile_command " @OUTPUT@" 416286dafe34Smrg func_append finalize_command " @OUTPUT@" 416386dafe34Smrg ;; 416486dafe34Smrg esac 416576888252Smrg 416686dafe34Smrg case $prev in 416786dafe34Smrg dlfiles|dlprefiles) 416886dafe34Smrg if test "$preload" = no; then 416986dafe34Smrg # Add the symbol object into the linking commands. 417086dafe34Smrg func_append compile_command " @SYMFILE@" 417186dafe34Smrg func_append finalize_command " @SYMFILE@" 417286dafe34Smrg preload=yes 417386dafe34Smrg fi 417486dafe34Smrg case $arg in 417586dafe34Smrg *.la | *.lo) ;; # We handle these cases below. 417686dafe34Smrg force) 417786dafe34Smrg if test "$dlself" = no; then 417886dafe34Smrg dlself=needless 417986dafe34Smrg export_dynamic=yes 418086dafe34Smrg fi 418186dafe34Smrg prev= 418286dafe34Smrg continue 418386dafe34Smrg ;; 418486dafe34Smrg self) 418586dafe34Smrg if test "$prev" = dlprefiles; then 418686dafe34Smrg dlself=yes 418786dafe34Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 418886dafe34Smrg dlself=yes 418986dafe34Smrg else 419086dafe34Smrg dlself=needless 419186dafe34Smrg export_dynamic=yes 419286dafe34Smrg fi 419386dafe34Smrg prev= 419486dafe34Smrg continue 419576888252Smrg ;; 419676888252Smrg *) 419786dafe34Smrg if test "$prev" = dlfiles; then 419886dafe34Smrg dlfiles="$dlfiles $arg" 419986dafe34Smrg else 420086dafe34Smrg dlprefiles="$dlprefiles $arg" 420186dafe34Smrg fi 420286dafe34Smrg prev= 420386dafe34Smrg continue 420476888252Smrg ;; 420576888252Smrg esac 420686dafe34Smrg ;; 420786dafe34Smrg expsyms) 420886dafe34Smrg export_symbols="$arg" 420986dafe34Smrg test -f "$arg" \ 421086dafe34Smrg || func_fatal_error "symbol file \`$arg' does not exist" 421186dafe34Smrg prev= 421286dafe34Smrg continue 421386dafe34Smrg ;; 421486dafe34Smrg expsyms_regex) 421586dafe34Smrg export_symbols_regex="$arg" 421686dafe34Smrg prev= 421786dafe34Smrg continue 421886dafe34Smrg ;; 421986dafe34Smrg framework) 422086dafe34Smrg case $host in 422186dafe34Smrg *-*-darwin*) 422286dafe34Smrg case "$deplibs " in 422386dafe34Smrg *" $qarg.ltframework "*) ;; 422486dafe34Smrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 422586dafe34Smrg ;; 422686dafe34Smrg esac 422786dafe34Smrg ;; 422886dafe34Smrg esac 422986dafe34Smrg prev= 423086dafe34Smrg continue 423186dafe34Smrg ;; 423286dafe34Smrg inst_prefix) 423386dafe34Smrg inst_prefix_dir="$arg" 423486dafe34Smrg prev= 423586dafe34Smrg continue 423686dafe34Smrg ;; 423786dafe34Smrg objectlist) 423886dafe34Smrg if test -f "$arg"; then 423986dafe34Smrg save_arg=$arg 424086dafe34Smrg moreargs= 424186dafe34Smrg for fil in `cat "$save_arg"` 424286dafe34Smrg do 424386dafe34Smrg# moreargs="$moreargs $fil" 424486dafe34Smrg arg=$fil 424586dafe34Smrg # A libtool-controlled object. 424676888252Smrg 424786dafe34Smrg # Check to see that this really is a libtool object. 424886dafe34Smrg if func_lalib_unsafe_p "$arg"; then 424986dafe34Smrg pic_object= 425086dafe34Smrg non_pic_object= 425176888252Smrg 425286dafe34Smrg # Read the .lo file 425386dafe34Smrg func_source "$arg" 425476888252Smrg 425586dafe34Smrg if test -z "$pic_object" || 425686dafe34Smrg test -z "$non_pic_object" || 425786dafe34Smrg test "$pic_object" = none && 425886dafe34Smrg test "$non_pic_object" = none; then 425986dafe34Smrg func_fatal_error "cannot find name of object for \`$arg'" 426086dafe34Smrg fi 426176888252Smrg 426286dafe34Smrg # Extract subdirectory from the argument. 426386dafe34Smrg func_dirname "$arg" "/" "" 426486dafe34Smrg xdir="$func_dirname_result" 426576888252Smrg 426686dafe34Smrg if test "$pic_object" != none; then 426786dafe34Smrg # Prepend the subdirectory the object is found in. 426886dafe34Smrg pic_object="$xdir$pic_object" 426976888252Smrg 427086dafe34Smrg if test "$prev" = dlfiles; then 427186dafe34Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 427286dafe34Smrg dlfiles="$dlfiles $pic_object" 427386dafe34Smrg prev= 427486dafe34Smrg continue 427586dafe34Smrg else 427686dafe34Smrg # If libtool objects are unsupported, then we need to preload. 427786dafe34Smrg prev=dlprefiles 427886dafe34Smrg fi 427986dafe34Smrg fi 428076888252Smrg 428186dafe34Smrg # CHECK ME: I think I busted this. -Ossama 428286dafe34Smrg if test "$prev" = dlprefiles; then 428386dafe34Smrg # Preload the old-style object. 428486dafe34Smrg dlprefiles="$dlprefiles $pic_object" 428586dafe34Smrg prev= 428686dafe34Smrg fi 428776888252Smrg 428886dafe34Smrg # A PIC object. 428986dafe34Smrg func_append libobjs " $pic_object" 429086dafe34Smrg arg="$pic_object" 429186dafe34Smrg fi 429276888252Smrg 429386dafe34Smrg # Non-PIC object. 429486dafe34Smrg if test "$non_pic_object" != none; then 429586dafe34Smrg # Prepend the subdirectory the object is found in. 429686dafe34Smrg non_pic_object="$xdir$non_pic_object" 429776888252Smrg 429886dafe34Smrg # A standard non-PIC object 429986dafe34Smrg func_append non_pic_objects " $non_pic_object" 430086dafe34Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 430186dafe34Smrg arg="$non_pic_object" 430286dafe34Smrg fi 430386dafe34Smrg else 430486dafe34Smrg # If the PIC object exists, use it instead. 430586dafe34Smrg # $xdir was prepended to $pic_object above. 430686dafe34Smrg non_pic_object="$pic_object" 430786dafe34Smrg func_append non_pic_objects " $non_pic_object" 430886dafe34Smrg fi 430986dafe34Smrg else 431086dafe34Smrg # Only an error if not doing a dry-run. 431186dafe34Smrg if $opt_dry_run; then 431286dafe34Smrg # Extract subdirectory from the argument. 431386dafe34Smrg func_dirname "$arg" "/" "" 431486dafe34Smrg xdir="$func_dirname_result" 431586dafe34Smrg 431686dafe34Smrg func_lo2o "$arg" 431786dafe34Smrg pic_object=$xdir$objdir/$func_lo2o_result 431886dafe34Smrg non_pic_object=$xdir$func_lo2o_result 431986dafe34Smrg func_append libobjs " $pic_object" 432086dafe34Smrg func_append non_pic_objects " $non_pic_object" 432186dafe34Smrg else 432286dafe34Smrg func_fatal_error "\`$arg' is not a valid libtool object" 432386dafe34Smrg fi 432486dafe34Smrg fi 432586dafe34Smrg done 432686dafe34Smrg else 432786dafe34Smrg func_fatal_error "link input file \`$arg' does not exist" 432886dafe34Smrg fi 432986dafe34Smrg arg=$save_arg 433086dafe34Smrg prev= 433186dafe34Smrg continue 433286dafe34Smrg ;; 433386dafe34Smrg precious_regex) 433486dafe34Smrg precious_files_regex="$arg" 433586dafe34Smrg prev= 433686dafe34Smrg continue 433786dafe34Smrg ;; 433886dafe34Smrg release) 433986dafe34Smrg release="-$arg" 434086dafe34Smrg prev= 434186dafe34Smrg continue 434286dafe34Smrg ;; 434386dafe34Smrg rpath | xrpath) 434486dafe34Smrg # We need an absolute path. 434586dafe34Smrg case $arg in 434686dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 434786dafe34Smrg *) 434886dafe34Smrg func_fatal_error "only absolute run-paths are allowed" 434986dafe34Smrg ;; 435086dafe34Smrg esac 435186dafe34Smrg if test "$prev" = rpath; then 435286dafe34Smrg case "$rpath " in 435386dafe34Smrg *" $arg "*) ;; 435486dafe34Smrg *) rpath="$rpath $arg" ;; 435586dafe34Smrg esac 435686dafe34Smrg else 435786dafe34Smrg case "$xrpath " in 435886dafe34Smrg *" $arg "*) ;; 435986dafe34Smrg *) xrpath="$xrpath $arg" ;; 436086dafe34Smrg esac 436186dafe34Smrg fi 436286dafe34Smrg prev= 436386dafe34Smrg continue 436486dafe34Smrg ;; 436586dafe34Smrg shrext) 436686dafe34Smrg shrext_cmds="$arg" 436786dafe34Smrg prev= 436886dafe34Smrg continue 436986dafe34Smrg ;; 437086dafe34Smrg weak) 437186dafe34Smrg weak_libs="$weak_libs $arg" 437286dafe34Smrg prev= 437386dafe34Smrg continue 437486dafe34Smrg ;; 437586dafe34Smrg xcclinker) 437686dafe34Smrg linker_flags="$linker_flags $qarg" 437786dafe34Smrg compiler_flags="$compiler_flags $qarg" 437886dafe34Smrg prev= 437986dafe34Smrg func_append compile_command " $qarg" 438086dafe34Smrg func_append finalize_command " $qarg" 438186dafe34Smrg continue 438286dafe34Smrg ;; 438386dafe34Smrg xcompiler) 438486dafe34Smrg compiler_flags="$compiler_flags $qarg" 438586dafe34Smrg prev= 438686dafe34Smrg func_append compile_command " $qarg" 438786dafe34Smrg func_append finalize_command " $qarg" 438886dafe34Smrg continue 438986dafe34Smrg ;; 439086dafe34Smrg xlinker) 439186dafe34Smrg linker_flags="$linker_flags $qarg" 439286dafe34Smrg compiler_flags="$compiler_flags $wl$qarg" 439386dafe34Smrg prev= 439486dafe34Smrg func_append compile_command " $wl$qarg" 439586dafe34Smrg func_append finalize_command " $wl$qarg" 439686dafe34Smrg continue 439786dafe34Smrg ;; 439886dafe34Smrg *) 439986dafe34Smrg eval "$prev=\"\$arg\"" 440086dafe34Smrg prev= 440186dafe34Smrg continue 440286dafe34Smrg ;; 440376888252Smrg esac 440486dafe34Smrg fi # test -n "$prev" 440576888252Smrg 440686dafe34Smrg prevarg="$arg" 440776888252Smrg 440886dafe34Smrg case $arg in 440986dafe34Smrg -all-static) 441086dafe34Smrg if test -n "$link_static_flag"; then 441186dafe34Smrg # See comment for -static flag below, for more details. 441286dafe34Smrg func_append compile_command " $link_static_flag" 441386dafe34Smrg func_append finalize_command " $link_static_flag" 441486dafe34Smrg fi 441586dafe34Smrg continue 441686dafe34Smrg ;; 441776888252Smrg 441886dafe34Smrg -allow-undefined) 441986dafe34Smrg # FIXME: remove this flag sometime in the future. 442086dafe34Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 442186dafe34Smrg ;; 442276888252Smrg 442386dafe34Smrg -avoid-version) 442486dafe34Smrg avoid_version=yes 442586dafe34Smrg continue 442686dafe34Smrg ;; 442776888252Smrg 442886dafe34Smrg -dlopen) 442986dafe34Smrg prev=dlfiles 443086dafe34Smrg continue 443186dafe34Smrg ;; 443276888252Smrg 443386dafe34Smrg -dlpreopen) 443486dafe34Smrg prev=dlprefiles 443586dafe34Smrg continue 443686dafe34Smrg ;; 443776888252Smrg 443886dafe34Smrg -export-dynamic) 443986dafe34Smrg export_dynamic=yes 444086dafe34Smrg continue 444186dafe34Smrg ;; 444276888252Smrg 444386dafe34Smrg -export-symbols | -export-symbols-regex) 444486dafe34Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 444586dafe34Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 444686dafe34Smrg fi 444786dafe34Smrg if test "X$arg" = "X-export-symbols"; then 444886dafe34Smrg prev=expsyms 444986dafe34Smrg else 445086dafe34Smrg prev=expsyms_regex 445186dafe34Smrg fi 445286dafe34Smrg continue 445386dafe34Smrg ;; 445476888252Smrg 445586dafe34Smrg -framework) 445686dafe34Smrg prev=framework 445786dafe34Smrg continue 445886dafe34Smrg ;; 445976888252Smrg 446086dafe34Smrg -inst-prefix-dir) 446186dafe34Smrg prev=inst_prefix 446286dafe34Smrg continue 446386dafe34Smrg ;; 446476888252Smrg 446586dafe34Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 446686dafe34Smrg # so, if we see these flags be careful not to treat them like -L 446786dafe34Smrg -L[A-Z][A-Z]*:*) 446886dafe34Smrg case $with_gcc/$host in 446986dafe34Smrg no/*-*-irix* | /*-*-irix*) 447086dafe34Smrg func_append compile_command " $arg" 447186dafe34Smrg func_append finalize_command " $arg" 447286dafe34Smrg ;; 447386dafe34Smrg esac 447486dafe34Smrg continue 447586dafe34Smrg ;; 447676888252Smrg 447786dafe34Smrg -L*) 447886dafe34Smrg func_stripname '-L' '' "$arg" 447986dafe34Smrg dir=$func_stripname_result 448086dafe34Smrg if test -z "$dir"; then 448186dafe34Smrg if test "$#" -gt 0; then 448286dafe34Smrg func_fatal_error "require no space between \`-L' and \`$1'" 448386dafe34Smrg else 448486dafe34Smrg func_fatal_error "need path for \`-L' option" 448586dafe34Smrg fi 448686dafe34Smrg fi 448786dafe34Smrg # We need an absolute path. 448886dafe34Smrg case $dir in 448986dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 449086dafe34Smrg *) 449186dafe34Smrg absdir=`cd "$dir" && pwd` 449286dafe34Smrg test -z "$absdir" && \ 449386dafe34Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 449486dafe34Smrg dir="$absdir" 449586dafe34Smrg ;; 449686dafe34Smrg esac 449786dafe34Smrg case "$deplibs " in 449886dafe34Smrg *" -L$dir "*) ;; 449986dafe34Smrg *) 450086dafe34Smrg deplibs="$deplibs -L$dir" 450186dafe34Smrg lib_search_path="$lib_search_path $dir" 450286dafe34Smrg ;; 450386dafe34Smrg esac 450486dafe34Smrg case $host in 450586dafe34Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 450686dafe34Smrg testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` 450786dafe34Smrg case :$dllsearchpath: in 450886dafe34Smrg *":$dir:"*) ;; 450986dafe34Smrg ::) dllsearchpath=$dir;; 451086dafe34Smrg *) dllsearchpath="$dllsearchpath:$dir";; 451186dafe34Smrg esac 451286dafe34Smrg case :$dllsearchpath: in 451386dafe34Smrg *":$testbindir:"*) ;; 451486dafe34Smrg ::) dllsearchpath=$testbindir;; 451586dafe34Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 451686dafe34Smrg esac 451786dafe34Smrg ;; 451886dafe34Smrg esac 451986dafe34Smrg continue 452086dafe34Smrg ;; 452176888252Smrg 452286dafe34Smrg -l*) 452386dafe34Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 452486dafe34Smrg case $host in 452586dafe34Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) 452686dafe34Smrg # These systems don't actually have a C or math library (as such) 452786dafe34Smrg continue 452886dafe34Smrg ;; 452986dafe34Smrg *-*-os2*) 453086dafe34Smrg # These systems don't actually have a C library (as such) 453186dafe34Smrg test "X$arg" = "X-lc" && continue 453286dafe34Smrg ;; 453386dafe34Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 453486dafe34Smrg # Do not include libc due to us having libc/libc_r. 453586dafe34Smrg test "X$arg" = "X-lc" && continue 453686dafe34Smrg ;; 453786dafe34Smrg *-*-rhapsody* | *-*-darwin1.[012]) 453886dafe34Smrg # Rhapsody C and math libraries are in the System framework 453986dafe34Smrg deplibs="$deplibs System.ltframework" 454086dafe34Smrg continue 454186dafe34Smrg ;; 454286dafe34Smrg *-*-sco3.2v5* | *-*-sco5v6*) 454386dafe34Smrg # Causes problems with __ctype 454486dafe34Smrg test "X$arg" = "X-lc" && continue 454586dafe34Smrg ;; 454686dafe34Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 454786dafe34Smrg # Compiler inserts libc in the correct place for threads to work 454886dafe34Smrg test "X$arg" = "X-lc" && continue 454986dafe34Smrg ;; 455086dafe34Smrg esac 455186dafe34Smrg elif test "X$arg" = "X-lc_r"; then 455286dafe34Smrg case $host in 455386dafe34Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 455486dafe34Smrg # Do not include libc_r directly, use -pthread flag. 455586dafe34Smrg continue 455686dafe34Smrg ;; 455786dafe34Smrg esac 455886dafe34Smrg fi 455986dafe34Smrg deplibs="$deplibs $arg" 456086dafe34Smrg continue 456186dafe34Smrg ;; 456276888252Smrg 456386dafe34Smrg -module) 456486dafe34Smrg module=yes 456586dafe34Smrg continue 456686dafe34Smrg ;; 456776888252Smrg 456886dafe34Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 456986dafe34Smrg # classes, name mangling, and exception handling. 457086dafe34Smrg # Darwin uses the -arch flag to determine output architecture. 457186dafe34Smrg -model|-arch|-isysroot) 457286dafe34Smrg compiler_flags="$compiler_flags $arg" 457386dafe34Smrg func_append compile_command " $arg" 457486dafe34Smrg func_append finalize_command " $arg" 457586dafe34Smrg prev=xcompiler 457686dafe34Smrg continue 457786dafe34Smrg ;; 457876888252Smrg 457986dafe34Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 458086dafe34Smrg compiler_flags="$compiler_flags $arg" 458186dafe34Smrg func_append compile_command " $arg" 458286dafe34Smrg func_append finalize_command " $arg" 458386dafe34Smrg case "$new_inherited_linker_flags " in 458486dafe34Smrg *" $arg "*) ;; 458586dafe34Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 458686dafe34Smrg esac 458786dafe34Smrg continue 458886dafe34Smrg ;; 458976888252Smrg 459086dafe34Smrg -multi_module) 459186dafe34Smrg single_module="${wl}-multi_module" 459286dafe34Smrg continue 459386dafe34Smrg ;; 459476888252Smrg 459586dafe34Smrg -no-fast-install) 459686dafe34Smrg fast_install=no 459786dafe34Smrg continue 459886dafe34Smrg ;; 459976888252Smrg 460086dafe34Smrg -no-install) 460186dafe34Smrg case $host in 460286dafe34Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 460386dafe34Smrg # The PATH hackery in wrapper scripts is required on Windows 460486dafe34Smrg # and Darwin in order for the loader to find any dlls it needs. 460586dafe34Smrg func_warning "\`-no-install' is ignored for $host" 460686dafe34Smrg func_warning "assuming \`-no-fast-install' instead" 460786dafe34Smrg fast_install=no 460886dafe34Smrg ;; 460986dafe34Smrg *) no_install=yes ;; 461086dafe34Smrg esac 461186dafe34Smrg continue 461286dafe34Smrg ;; 461376888252Smrg 461486dafe34Smrg -no-undefined) 461586dafe34Smrg allow_undefined=no 461686dafe34Smrg continue 461786dafe34Smrg ;; 461876888252Smrg 461986dafe34Smrg -objectlist) 462086dafe34Smrg prev=objectlist 462186dafe34Smrg continue 462286dafe34Smrg ;; 462376888252Smrg 462486dafe34Smrg -o) prev=output ;; 462576888252Smrg 462686dafe34Smrg -precious-files-regex) 462786dafe34Smrg prev=precious_regex 462886dafe34Smrg continue 462986dafe34Smrg ;; 463076888252Smrg 463186dafe34Smrg -release) 463286dafe34Smrg prev=release 463386dafe34Smrg continue 463486dafe34Smrg ;; 463576888252Smrg 463686dafe34Smrg -rpath) 463786dafe34Smrg prev=rpath 463886dafe34Smrg continue 463986dafe34Smrg ;; 464076888252Smrg 464186dafe34Smrg -R) 464286dafe34Smrg prev=xrpath 464386dafe34Smrg continue 464486dafe34Smrg ;; 464576888252Smrg 464686dafe34Smrg -R*) 464786dafe34Smrg func_stripname '-R' '' "$arg" 464886dafe34Smrg dir=$func_stripname_result 464986dafe34Smrg # We need an absolute path. 465086dafe34Smrg case $dir in 465186dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 465286dafe34Smrg *) 465386dafe34Smrg func_fatal_error "only absolute run-paths are allowed" 465486dafe34Smrg ;; 465586dafe34Smrg esac 465686dafe34Smrg case "$xrpath " in 465786dafe34Smrg *" $dir "*) ;; 465886dafe34Smrg *) xrpath="$xrpath $dir" ;; 465986dafe34Smrg esac 466086dafe34Smrg continue 466186dafe34Smrg ;; 466276888252Smrg 466386dafe34Smrg -shared) 466486dafe34Smrg # The effects of -shared are defined in a previous loop. 466586dafe34Smrg continue 466686dafe34Smrg ;; 466776888252Smrg 466886dafe34Smrg -shrext) 466986dafe34Smrg prev=shrext 467086dafe34Smrg continue 467186dafe34Smrg ;; 467276888252Smrg 467386dafe34Smrg -static | -static-libtool-libs) 467486dafe34Smrg # The effects of -static are defined in a previous loop. 467586dafe34Smrg # We used to do the same as -all-static on platforms that 467686dafe34Smrg # didn't have a PIC flag, but the assumption that the effects 467786dafe34Smrg # would be equivalent was wrong. It would break on at least 467886dafe34Smrg # Digital Unix and AIX. 467986dafe34Smrg continue 468086dafe34Smrg ;; 468176888252Smrg 468286dafe34Smrg -thread-safe) 468386dafe34Smrg thread_safe=yes 468486dafe34Smrg continue 468586dafe34Smrg ;; 468676888252Smrg 468786dafe34Smrg -version-info) 468886dafe34Smrg prev=vinfo 468986dafe34Smrg continue 469086dafe34Smrg ;; 469176888252Smrg 469286dafe34Smrg -version-number) 469386dafe34Smrg prev=vinfo 469486dafe34Smrg vinfo_number=yes 469586dafe34Smrg continue 469686dafe34Smrg ;; 469776888252Smrg 469886dafe34Smrg -weak) 469986dafe34Smrg prev=weak 470086dafe34Smrg continue 470186dafe34Smrg ;; 470276888252Smrg 470386dafe34Smrg -Wc,*) 470486dafe34Smrg func_stripname '-Wc,' '' "$arg" 470586dafe34Smrg args=$func_stripname_result 470686dafe34Smrg arg= 470786dafe34Smrg save_ifs="$IFS"; IFS=',' 470886dafe34Smrg for flag in $args; do 470986dafe34Smrg IFS="$save_ifs" 471086dafe34Smrg func_quote_for_eval "$flag" 471186dafe34Smrg arg="$arg $wl$func_quote_for_eval_result" 471286dafe34Smrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 471386dafe34Smrg done 471486dafe34Smrg IFS="$save_ifs" 471586dafe34Smrg func_stripname ' ' '' "$arg" 471686dafe34Smrg arg=$func_stripname_result 471786dafe34Smrg ;; 471876888252Smrg 471986dafe34Smrg -Wl,*) 472086dafe34Smrg func_stripname '-Wl,' '' "$arg" 472186dafe34Smrg args=$func_stripname_result 472286dafe34Smrg arg= 472386dafe34Smrg save_ifs="$IFS"; IFS=',' 472486dafe34Smrg for flag in $args; do 472586dafe34Smrg IFS="$save_ifs" 472686dafe34Smrg func_quote_for_eval "$flag" 472786dafe34Smrg arg="$arg $wl$func_quote_for_eval_result" 472886dafe34Smrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 472986dafe34Smrg linker_flags="$linker_flags $func_quote_for_eval_result" 473086dafe34Smrg done 473186dafe34Smrg IFS="$save_ifs" 473286dafe34Smrg func_stripname ' ' '' "$arg" 473386dafe34Smrg arg=$func_stripname_result 473486dafe34Smrg ;; 473576888252Smrg 473686dafe34Smrg -Xcompiler) 473786dafe34Smrg prev=xcompiler 473886dafe34Smrg continue 473986dafe34Smrg ;; 474076888252Smrg 474186dafe34Smrg -Xlinker) 474286dafe34Smrg prev=xlinker 474386dafe34Smrg continue 474486dafe34Smrg ;; 474576888252Smrg 474686dafe34Smrg -XCClinker) 474786dafe34Smrg prev=xcclinker 474886dafe34Smrg continue 474986dafe34Smrg ;; 475076888252Smrg 475186dafe34Smrg # -msg_* for osf cc 475286dafe34Smrg -msg_*) 475386dafe34Smrg func_quote_for_eval "$arg" 475486dafe34Smrg arg="$func_quote_for_eval_result" 475586dafe34Smrg ;; 475676888252Smrg 475786dafe34Smrg # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 475886dafe34Smrg # -r[0-9][0-9]* specifies the processor on the SGI compiler 475986dafe34Smrg # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 476086dafe34Smrg # +DA*, +DD* enable 64-bit mode on the HP compiler 476186dafe34Smrg # -q* pass through compiler args for the IBM compiler 476286dafe34Smrg # -m*, -t[45]*, -txscale* pass through architecture-specific 476386dafe34Smrg # compiler args for GCC 476486dafe34Smrg # -F/path gives path to uninstalled frameworks, gcc on darwin 476586dafe34Smrg # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 476686dafe34Smrg # @file GCC response files 476786dafe34Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 476886dafe34Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 476986dafe34Smrg func_quote_for_eval "$arg" 477086dafe34Smrg arg="$func_quote_for_eval_result" 477186dafe34Smrg func_append compile_command " $arg" 477286dafe34Smrg func_append finalize_command " $arg" 477386dafe34Smrg compiler_flags="$compiler_flags $arg" 477486dafe34Smrg continue 477586dafe34Smrg ;; 477676888252Smrg 477786dafe34Smrg # Some other compiler flag. 477886dafe34Smrg -* | +*) 477986dafe34Smrg func_quote_for_eval "$arg" 478086dafe34Smrg arg="$func_quote_for_eval_result" 478186dafe34Smrg ;; 478276888252Smrg 478386dafe34Smrg *.$objext) 478486dafe34Smrg # A standard object. 478586dafe34Smrg objs="$objs $arg" 478686dafe34Smrg ;; 478786dafe34Smrg 478886dafe34Smrg *.lo) 478986dafe34Smrg # A libtool-controlled object. 479086dafe34Smrg 479186dafe34Smrg # Check to see that this really is a libtool object. 479286dafe34Smrg if func_lalib_unsafe_p "$arg"; then 479386dafe34Smrg pic_object= 479486dafe34Smrg non_pic_object= 479586dafe34Smrg 479686dafe34Smrg # Read the .lo file 479786dafe34Smrg func_source "$arg" 479886dafe34Smrg 479986dafe34Smrg if test -z "$pic_object" || 480086dafe34Smrg test -z "$non_pic_object" || 480186dafe34Smrg test "$pic_object" = none && 480286dafe34Smrg test "$non_pic_object" = none; then 480386dafe34Smrg func_fatal_error "cannot find name of object for \`$arg'" 480486dafe34Smrg fi 480586dafe34Smrg 480686dafe34Smrg # Extract subdirectory from the argument. 480786dafe34Smrg func_dirname "$arg" "/" "" 480886dafe34Smrg xdir="$func_dirname_result" 480986dafe34Smrg 481086dafe34Smrg if test "$pic_object" != none; then 481186dafe34Smrg # Prepend the subdirectory the object is found in. 481286dafe34Smrg pic_object="$xdir$pic_object" 481386dafe34Smrg 481486dafe34Smrg if test "$prev" = dlfiles; then 481586dafe34Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 481686dafe34Smrg dlfiles="$dlfiles $pic_object" 481786dafe34Smrg prev= 481886dafe34Smrg continue 481986dafe34Smrg else 482086dafe34Smrg # If libtool objects are unsupported, then we need to preload. 482186dafe34Smrg prev=dlprefiles 482286dafe34Smrg fi 482386dafe34Smrg fi 482486dafe34Smrg 482586dafe34Smrg # CHECK ME: I think I busted this. -Ossama 482686dafe34Smrg if test "$prev" = dlprefiles; then 482786dafe34Smrg # Preload the old-style object. 482886dafe34Smrg dlprefiles="$dlprefiles $pic_object" 482986dafe34Smrg prev= 483086dafe34Smrg fi 483186dafe34Smrg 483286dafe34Smrg # A PIC object. 483386dafe34Smrg func_append libobjs " $pic_object" 483486dafe34Smrg arg="$pic_object" 483586dafe34Smrg fi 483686dafe34Smrg 483786dafe34Smrg # Non-PIC object. 483886dafe34Smrg if test "$non_pic_object" != none; then 483986dafe34Smrg # Prepend the subdirectory the object is found in. 484086dafe34Smrg non_pic_object="$xdir$non_pic_object" 484186dafe34Smrg 484286dafe34Smrg # A standard non-PIC object 484386dafe34Smrg func_append non_pic_objects " $non_pic_object" 484486dafe34Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 484586dafe34Smrg arg="$non_pic_object" 484686dafe34Smrg fi 484786dafe34Smrg else 484886dafe34Smrg # If the PIC object exists, use it instead. 484986dafe34Smrg # $xdir was prepended to $pic_object above. 485086dafe34Smrg non_pic_object="$pic_object" 485186dafe34Smrg func_append non_pic_objects " $non_pic_object" 485286dafe34Smrg fi 485386dafe34Smrg else 485486dafe34Smrg # Only an error if not doing a dry-run. 485586dafe34Smrg if $opt_dry_run; then 485686dafe34Smrg # Extract subdirectory from the argument. 485786dafe34Smrg func_dirname "$arg" "/" "" 485886dafe34Smrg xdir="$func_dirname_result" 485986dafe34Smrg 486086dafe34Smrg func_lo2o "$arg" 486186dafe34Smrg pic_object=$xdir$objdir/$func_lo2o_result 486286dafe34Smrg non_pic_object=$xdir$func_lo2o_result 486386dafe34Smrg func_append libobjs " $pic_object" 486486dafe34Smrg func_append non_pic_objects " $non_pic_object" 486586dafe34Smrg else 486686dafe34Smrg func_fatal_error "\`$arg' is not a valid libtool object" 486786dafe34Smrg fi 486886dafe34Smrg fi 486986dafe34Smrg ;; 487086dafe34Smrg 487186dafe34Smrg *.$libext) 487286dafe34Smrg # An archive. 487386dafe34Smrg deplibs="$deplibs $arg" 487486dafe34Smrg old_deplibs="$old_deplibs $arg" 487586dafe34Smrg continue 487686dafe34Smrg ;; 487786dafe34Smrg 487886dafe34Smrg *.la) 487986dafe34Smrg # A libtool-controlled library. 488086dafe34Smrg 488186dafe34Smrg if test "$prev" = dlfiles; then 488286dafe34Smrg # This library was specified with -dlopen. 488386dafe34Smrg dlfiles="$dlfiles $arg" 488486dafe34Smrg prev= 488586dafe34Smrg elif test "$prev" = dlprefiles; then 488686dafe34Smrg # The library was specified with -dlpreopen. 488786dafe34Smrg dlprefiles="$dlprefiles $arg" 488886dafe34Smrg prev= 488986dafe34Smrg else 489086dafe34Smrg deplibs="$deplibs $arg" 489186dafe34Smrg fi 489286dafe34Smrg continue 489386dafe34Smrg ;; 489486dafe34Smrg 489586dafe34Smrg # Some other compiler argument. 489686dafe34Smrg *) 489786dafe34Smrg # Unknown arguments in both finalize_command and compile_command need 489886dafe34Smrg # to be aesthetically quoted because they are evaled later. 489986dafe34Smrg func_quote_for_eval "$arg" 490086dafe34Smrg arg="$func_quote_for_eval_result" 490186dafe34Smrg ;; 490286dafe34Smrg esac # arg 490386dafe34Smrg 490486dafe34Smrg # Now actually substitute the argument into the commands. 490586dafe34Smrg if test -n "$arg"; then 490686dafe34Smrg func_append compile_command " $arg" 490786dafe34Smrg func_append finalize_command " $arg" 490886dafe34Smrg fi 490986dafe34Smrg done # argument parsing loop 491086dafe34Smrg 491186dafe34Smrg test -n "$prev" && \ 491286dafe34Smrg func_fatal_help "the \`$prevarg' option requires an argument" 491386dafe34Smrg 491486dafe34Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 491586dafe34Smrg eval arg=\"$export_dynamic_flag_spec\" 491686dafe34Smrg func_append compile_command " $arg" 491786dafe34Smrg func_append finalize_command " $arg" 491886dafe34Smrg fi 491986dafe34Smrg 492086dafe34Smrg oldlibs= 492186dafe34Smrg # calculate the name of the file, without its directory 492286dafe34Smrg func_basename "$output" 492386dafe34Smrg outputname="$func_basename_result" 492486dafe34Smrg libobjs_save="$libobjs" 492586dafe34Smrg 492686dafe34Smrg if test -n "$shlibpath_var"; then 492786dafe34Smrg # get the directories listed in $shlibpath_var 492886dafe34Smrg eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 492976888252Smrg else 493086dafe34Smrg shlib_search_path= 493176888252Smrg fi 493286dafe34Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 493386dafe34Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 493476888252Smrg 493586dafe34Smrg func_dirname "$output" "/" "" 493686dafe34Smrg output_objdir="$func_dirname_result$objdir" 493786dafe34Smrg # Create the object directory. 493886dafe34Smrg func_mkdir_p "$output_objdir" 493976888252Smrg 494086dafe34Smrg # Determine the type of output 494186dafe34Smrg case $output in 494286dafe34Smrg "") 494386dafe34Smrg func_fatal_help "you must specify an output file" 494486dafe34Smrg ;; 494586dafe34Smrg *.$libext) linkmode=oldlib ;; 494686dafe34Smrg *.lo | *.$objext) linkmode=obj ;; 494786dafe34Smrg *.la) linkmode=lib ;; 494886dafe34Smrg *) linkmode=prog ;; # Anything else should be a program. 494986dafe34Smrg esac 495086dafe34Smrg 495186dafe34Smrg specialdeplibs= 495286dafe34Smrg 495386dafe34Smrg libs= 495486dafe34Smrg # Find all interdependent deplibs by searching for libraries 495586dafe34Smrg # that are linked more than once (e.g. -la -lb -la) 495686dafe34Smrg for deplib in $deplibs; do 495786dafe34Smrg if $opt_duplicate_deps ; then 495886dafe34Smrg case "$libs " in 495986dafe34Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 496086dafe34Smrg esac 496186dafe34Smrg fi 496286dafe34Smrg libs="$libs $deplib" 496386dafe34Smrg done 496486dafe34Smrg 496586dafe34Smrg if test "$linkmode" = lib; then 496686dafe34Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 496786dafe34Smrg 496886dafe34Smrg # Compute libraries that are listed more than once in $predeps 496986dafe34Smrg # $postdeps and mark them as special (i.e., whose duplicates are 497086dafe34Smrg # not to be eliminated). 497186dafe34Smrg pre_post_deps= 497286dafe34Smrg if $opt_duplicate_compiler_generated_deps; then 497386dafe34Smrg for pre_post_dep in $predeps $postdeps; do 497486dafe34Smrg case "$pre_post_deps " in 497586dafe34Smrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 497686dafe34Smrg esac 497786dafe34Smrg pre_post_deps="$pre_post_deps $pre_post_dep" 497886dafe34Smrg done 497986dafe34Smrg fi 498086dafe34Smrg pre_post_deps= 498186dafe34Smrg fi 498286dafe34Smrg 498386dafe34Smrg deplibs= 498486dafe34Smrg newdependency_libs= 498586dafe34Smrg newlib_search_path= 498686dafe34Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 498786dafe34Smrg notinst_deplibs= # not-installed libtool libraries 498886dafe34Smrg notinst_path= # paths that contain not-installed libtool libraries 498986dafe34Smrg 499086dafe34Smrg case $linkmode in 499186dafe34Smrg lib) 499286dafe34Smrg passes="conv dlpreopen link" 499386dafe34Smrg for file in $dlfiles $dlprefiles; do 499486dafe34Smrg case $file in 499586dafe34Smrg *.la) ;; 499686dafe34Smrg *) 499786dafe34Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 499886dafe34Smrg ;; 499986dafe34Smrg esac 500086dafe34Smrg done 500186dafe34Smrg ;; 500286dafe34Smrg prog) 500386dafe34Smrg compile_deplibs= 500486dafe34Smrg finalize_deplibs= 500586dafe34Smrg alldeplibs=no 500686dafe34Smrg newdlfiles= 500786dafe34Smrg newdlprefiles= 500886dafe34Smrg passes="conv scan dlopen dlpreopen link" 500986dafe34Smrg ;; 501086dafe34Smrg *) passes="conv" 501186dafe34Smrg ;; 501286dafe34Smrg esac 501386dafe34Smrg 501486dafe34Smrg for pass in $passes; do 501586dafe34Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 501686dafe34Smrg # so that -L comes before libs that need it for instance... 501786dafe34Smrg if test "$linkmode,$pass" = "lib,link"; then 501886dafe34Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 501986dafe34Smrg ## order, and fix it there properly 502086dafe34Smrg tmp_deplibs= 502186dafe34Smrg for deplib in $deplibs; do 502286dafe34Smrg tmp_deplibs="$deplib $tmp_deplibs" 502386dafe34Smrg done 502486dafe34Smrg deplibs="$tmp_deplibs" 502586dafe34Smrg fi 502686dafe34Smrg 502786dafe34Smrg if test "$linkmode,$pass" = "lib,link" || 502886dafe34Smrg test "$linkmode,$pass" = "prog,scan"; then 502986dafe34Smrg libs="$deplibs" 503086dafe34Smrg deplibs= 503186dafe34Smrg fi 503286dafe34Smrg if test "$linkmode" = prog; then 503386dafe34Smrg case $pass in 503486dafe34Smrg dlopen) libs="$dlfiles" ;; 503586dafe34Smrg dlpreopen) libs="$dlprefiles" ;; 503686dafe34Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 503786dafe34Smrg esac 503886dafe34Smrg fi 503986dafe34Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 504086dafe34Smrg # Collect and forward deplibs of preopened libtool libs 504186dafe34Smrg for lib in $dlprefiles; do 504286dafe34Smrg # Ignore non-libtool-libs 504386dafe34Smrg dependency_libs= 504486dafe34Smrg case $lib in 504586dafe34Smrg *.la) func_source "$lib" ;; 504686dafe34Smrg esac 504786dafe34Smrg 504886dafe34Smrg # Collect preopened libtool deplibs, except any this library 504986dafe34Smrg # has declared as weak libs 505086dafe34Smrg for deplib in $dependency_libs; do 505186dafe34Smrg deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` 505286dafe34Smrg case " $weak_libs " in 505386dafe34Smrg *" $deplib_base "*) ;; 505486dafe34Smrg *) deplibs="$deplibs $deplib" ;; 505586dafe34Smrg esac 505686dafe34Smrg done 505786dafe34Smrg done 505886dafe34Smrg libs="$dlprefiles" 505986dafe34Smrg fi 506086dafe34Smrg if test "$pass" = dlopen; then 506186dafe34Smrg # Collect dlpreopened libraries 506286dafe34Smrg save_deplibs="$deplibs" 506386dafe34Smrg deplibs= 506486dafe34Smrg fi 506586dafe34Smrg 506686dafe34Smrg for deplib in $libs; do 506786dafe34Smrg lib= 506886dafe34Smrg found=no 506986dafe34Smrg case $deplib in 507086dafe34Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 507186dafe34Smrg if test "$linkmode,$pass" = "prog,link"; then 507286dafe34Smrg compile_deplibs="$deplib $compile_deplibs" 507386dafe34Smrg finalize_deplibs="$deplib $finalize_deplibs" 507486dafe34Smrg else 507586dafe34Smrg compiler_flags="$compiler_flags $deplib" 507686dafe34Smrg if test "$linkmode" = lib ; then 507786dafe34Smrg case "$new_inherited_linker_flags " in 507886dafe34Smrg *" $deplib "*) ;; 507986dafe34Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 508086dafe34Smrg esac 508186dafe34Smrg fi 508286dafe34Smrg fi 508386dafe34Smrg continue 508486dafe34Smrg ;; 508586dafe34Smrg -l*) 508686dafe34Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 508786dafe34Smrg func_warning "\`-l' is ignored for archives/objects" 508886dafe34Smrg continue 508986dafe34Smrg fi 509086dafe34Smrg func_stripname '-l' '' "$deplib" 509186dafe34Smrg name=$func_stripname_result 509286dafe34Smrg if test "$linkmode" = lib; then 509386dafe34Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 509486dafe34Smrg else 509586dafe34Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 509686dafe34Smrg fi 509786dafe34Smrg for searchdir in $searchdirs; do 509886dafe34Smrg for search_ext in .la $std_shrext .so .a; do 509986dafe34Smrg # Search the libtool library 510086dafe34Smrg lib="$searchdir/lib${name}${search_ext}" 510186dafe34Smrg if test -f "$lib"; then 510286dafe34Smrg if test "$search_ext" = ".la"; then 510386dafe34Smrg found=yes 510486dafe34Smrg else 510586dafe34Smrg found=no 510686dafe34Smrg fi 510786dafe34Smrg break 2 510886dafe34Smrg fi 510986dafe34Smrg done 511086dafe34Smrg done 511186dafe34Smrg if test "$found" != yes; then 511286dafe34Smrg # deplib doesn't seem to be a libtool library 511386dafe34Smrg if test "$linkmode,$pass" = "prog,link"; then 511486dafe34Smrg compile_deplibs="$deplib $compile_deplibs" 511586dafe34Smrg finalize_deplibs="$deplib $finalize_deplibs" 511686dafe34Smrg else 511786dafe34Smrg deplibs="$deplib $deplibs" 511886dafe34Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 511986dafe34Smrg fi 512086dafe34Smrg continue 512186dafe34Smrg else # deplib is a libtool library 512286dafe34Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 512386dafe34Smrg # We need to do some special things here, and not later. 512486dafe34Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 512586dafe34Smrg case " $predeps $postdeps " in 512686dafe34Smrg *" $deplib "*) 512786dafe34Smrg if func_lalib_p "$lib"; then 512886dafe34Smrg library_names= 512986dafe34Smrg old_library= 513086dafe34Smrg func_source "$lib" 513186dafe34Smrg for l in $old_library $library_names; do 513286dafe34Smrg ll="$l" 513386dafe34Smrg done 513486dafe34Smrg if test "X$ll" = "X$old_library" ; then # only static version available 513586dafe34Smrg found=no 513686dafe34Smrg func_dirname "$lib" "" "." 513786dafe34Smrg ladir="$func_dirname_result" 513886dafe34Smrg lib=$ladir/$old_library 513986dafe34Smrg if test "$linkmode,$pass" = "prog,link"; then 514086dafe34Smrg compile_deplibs="$deplib $compile_deplibs" 514186dafe34Smrg finalize_deplibs="$deplib $finalize_deplibs" 514286dafe34Smrg else 514386dafe34Smrg deplibs="$deplib $deplibs" 514486dafe34Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 514586dafe34Smrg fi 514686dafe34Smrg continue 514786dafe34Smrg fi 514886dafe34Smrg fi 514986dafe34Smrg ;; 515086dafe34Smrg *) ;; 515186dafe34Smrg esac 515286dafe34Smrg fi 515386dafe34Smrg fi 515486dafe34Smrg ;; # -l 515586dafe34Smrg *.ltframework) 515686dafe34Smrg if test "$linkmode,$pass" = "prog,link"; then 515786dafe34Smrg compile_deplibs="$deplib $compile_deplibs" 515886dafe34Smrg finalize_deplibs="$deplib $finalize_deplibs" 515986dafe34Smrg else 516086dafe34Smrg deplibs="$deplib $deplibs" 516186dafe34Smrg if test "$linkmode" = lib ; then 516286dafe34Smrg case "$new_inherited_linker_flags " in 516386dafe34Smrg *" $deplib "*) ;; 516486dafe34Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 516586dafe34Smrg esac 516686dafe34Smrg fi 516786dafe34Smrg fi 516886dafe34Smrg continue 516986dafe34Smrg ;; 517086dafe34Smrg -L*) 517186dafe34Smrg case $linkmode in 517286dafe34Smrg lib) 517386dafe34Smrg deplibs="$deplib $deplibs" 517486dafe34Smrg test "$pass" = conv && continue 517586dafe34Smrg newdependency_libs="$deplib $newdependency_libs" 517686dafe34Smrg func_stripname '-L' '' "$deplib" 517786dafe34Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 517886dafe34Smrg ;; 517986dafe34Smrg prog) 518086dafe34Smrg if test "$pass" = conv; then 518186dafe34Smrg deplibs="$deplib $deplibs" 518286dafe34Smrg continue 518386dafe34Smrg fi 518486dafe34Smrg if test "$pass" = scan; then 518586dafe34Smrg deplibs="$deplib $deplibs" 518686dafe34Smrg else 518786dafe34Smrg compile_deplibs="$deplib $compile_deplibs" 518886dafe34Smrg finalize_deplibs="$deplib $finalize_deplibs" 518986dafe34Smrg fi 519086dafe34Smrg func_stripname '-L' '' "$deplib" 519186dafe34Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 519286dafe34Smrg ;; 519386dafe34Smrg *) 519486dafe34Smrg func_warning "\`-L' is ignored for archives/objects" 519586dafe34Smrg ;; 519686dafe34Smrg esac # linkmode 519786dafe34Smrg continue 519886dafe34Smrg ;; # -L 519986dafe34Smrg -R*) 520086dafe34Smrg if test "$pass" = link; then 520186dafe34Smrg func_stripname '-R' '' "$deplib" 520286dafe34Smrg dir=$func_stripname_result 520386dafe34Smrg # Make sure the xrpath contains only unique directories. 520486dafe34Smrg case "$xrpath " in 520586dafe34Smrg *" $dir "*) ;; 520686dafe34Smrg *) xrpath="$xrpath $dir" ;; 520786dafe34Smrg esac 520886dafe34Smrg fi 520986dafe34Smrg deplibs="$deplib $deplibs" 521086dafe34Smrg continue 521186dafe34Smrg ;; 521286dafe34Smrg *.la) lib="$deplib" ;; 521386dafe34Smrg *.$libext) 521486dafe34Smrg if test "$pass" = conv; then 521586dafe34Smrg deplibs="$deplib $deplibs" 521686dafe34Smrg continue 521786dafe34Smrg fi 521886dafe34Smrg case $linkmode in 521986dafe34Smrg lib) 522086dafe34Smrg # Linking convenience modules into shared libraries is allowed, 522186dafe34Smrg # but linking other static libraries is non-portable. 522286dafe34Smrg case " $dlpreconveniencelibs " in 522386dafe34Smrg *" $deplib "*) ;; 522486dafe34Smrg *) 522586dafe34Smrg valid_a_lib=no 522686dafe34Smrg case $deplibs_check_method in 522786dafe34Smrg match_pattern*) 522886dafe34Smrg set dummy $deplibs_check_method; shift 522986dafe34Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 523086dafe34Smrg if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ 523186dafe34Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 523286dafe34Smrg valid_a_lib=yes 523386dafe34Smrg fi 523486dafe34Smrg ;; 523586dafe34Smrg pass_all) 523686dafe34Smrg valid_a_lib=yes 523786dafe34Smrg ;; 523886dafe34Smrg esac 523986dafe34Smrg if test "$valid_a_lib" != yes; then 524086dafe34Smrg $ECHO 524186dafe34Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 524286dafe34Smrg $ECHO "*** I have the capability to make that library automatically link in when" 524386dafe34Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 524486dafe34Smrg $ECHO "*** shared version of the library, which you do not appear to have" 524586dafe34Smrg $ECHO "*** because the file extensions .$libext of this argument makes me believe" 524686dafe34Smrg $ECHO "*** that it is just a static archive that I should not use here." 524786dafe34Smrg else 524886dafe34Smrg $ECHO 524986dafe34Smrg $ECHO "*** Warning: Linking the shared library $output against the" 525086dafe34Smrg $ECHO "*** static library $deplib is not portable!" 525186dafe34Smrg deplibs="$deplib $deplibs" 525286dafe34Smrg fi 525386dafe34Smrg ;; 525486dafe34Smrg esac 525586dafe34Smrg continue 525686dafe34Smrg ;; 525786dafe34Smrg prog) 525886dafe34Smrg if test "$pass" != link; then 525986dafe34Smrg deplibs="$deplib $deplibs" 526086dafe34Smrg else 526186dafe34Smrg compile_deplibs="$deplib $compile_deplibs" 526286dafe34Smrg finalize_deplibs="$deplib $finalize_deplibs" 526386dafe34Smrg fi 526486dafe34Smrg continue 526586dafe34Smrg ;; 526686dafe34Smrg esac # linkmode 526786dafe34Smrg ;; # *.$libext 526886dafe34Smrg *.lo | *.$objext) 526986dafe34Smrg if test "$pass" = conv; then 527086dafe34Smrg deplibs="$deplib $deplibs" 527186dafe34Smrg elif test "$linkmode" = prog; then 527286dafe34Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 527386dafe34Smrg # If there is no dlopen support or we're linking statically, 527486dafe34Smrg # we need to preload. 527586dafe34Smrg newdlprefiles="$newdlprefiles $deplib" 527686dafe34Smrg compile_deplibs="$deplib $compile_deplibs" 527786dafe34Smrg finalize_deplibs="$deplib $finalize_deplibs" 527886dafe34Smrg else 527986dafe34Smrg newdlfiles="$newdlfiles $deplib" 528086dafe34Smrg fi 528186dafe34Smrg fi 528286dafe34Smrg continue 528386dafe34Smrg ;; 528486dafe34Smrg %DEPLIBS%) 528586dafe34Smrg alldeplibs=yes 528686dafe34Smrg continue 528786dafe34Smrg ;; 528886dafe34Smrg esac # case $deplib 528986dafe34Smrg 529086dafe34Smrg if test "$found" = yes || test -f "$lib"; then : 529186dafe34Smrg else 529286dafe34Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 529386dafe34Smrg fi 529486dafe34Smrg 529586dafe34Smrg # Check to see that this really is a libtool archive. 529686dafe34Smrg func_lalib_unsafe_p "$lib" \ 529786dafe34Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 529886dafe34Smrg 529986dafe34Smrg func_dirname "$lib" "" "." 530086dafe34Smrg ladir="$func_dirname_result" 530186dafe34Smrg 530286dafe34Smrg dlname= 530386dafe34Smrg dlopen= 530486dafe34Smrg dlpreopen= 530586dafe34Smrg libdir= 530686dafe34Smrg library_names= 530786dafe34Smrg old_library= 530886dafe34Smrg inherited_linker_flags= 530986dafe34Smrg # If the library was installed with an old release of libtool, 531086dafe34Smrg # it will not redefine variables installed, or shouldnotlink 531186dafe34Smrg installed=yes 531286dafe34Smrg shouldnotlink=no 531386dafe34Smrg avoidtemprpath= 531486dafe34Smrg 531586dafe34Smrg 531686dafe34Smrg # Read the .la file 531786dafe34Smrg func_source "$lib" 531886dafe34Smrg 531986dafe34Smrg # Convert "-framework foo" to "foo.ltframework" 532086dafe34Smrg if test -n "$inherited_linker_flags"; then 532186dafe34Smrg tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` 532286dafe34Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 532386dafe34Smrg case " $new_inherited_linker_flags " in 532486dafe34Smrg *" $tmp_inherited_linker_flag "*) ;; 532586dafe34Smrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 532686dafe34Smrg esac 532786dafe34Smrg done 532886dafe34Smrg fi 532986dafe34Smrg dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 533086dafe34Smrg if test "$linkmode,$pass" = "lib,link" || 533186dafe34Smrg test "$linkmode,$pass" = "prog,scan" || 533286dafe34Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 533386dafe34Smrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 533486dafe34Smrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 533586dafe34Smrg fi 533686dafe34Smrg 533786dafe34Smrg if test "$pass" = conv; then 533886dafe34Smrg # Only check for convenience libraries 533986dafe34Smrg deplibs="$lib $deplibs" 534086dafe34Smrg if test -z "$libdir"; then 534186dafe34Smrg if test -z "$old_library"; then 534286dafe34Smrg func_fatal_error "cannot find name of link library for \`$lib'" 534386dafe34Smrg fi 534486dafe34Smrg # It is a libtool convenience library, so add in its objects. 534586dafe34Smrg convenience="$convenience $ladir/$objdir/$old_library" 534686dafe34Smrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 534786dafe34Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 534886dafe34Smrg func_fatal_error "\`$lib' is not a convenience library" 534986dafe34Smrg fi 535086dafe34Smrg tmp_libs= 535186dafe34Smrg for deplib in $dependency_libs; do 535286dafe34Smrg deplibs="$deplib $deplibs" 535386dafe34Smrg if $opt_duplicate_deps ; then 535486dafe34Smrg case "$tmp_libs " in 535586dafe34Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 535686dafe34Smrg esac 535786dafe34Smrg fi 535886dafe34Smrg tmp_libs="$tmp_libs $deplib" 535986dafe34Smrg done 536086dafe34Smrg continue 536186dafe34Smrg fi # $pass = conv 536286dafe34Smrg 536386dafe34Smrg 536486dafe34Smrg # Get the name of the library we link against. 536586dafe34Smrg linklib= 536686dafe34Smrg for l in $old_library $library_names; do 536786dafe34Smrg linklib="$l" 536886dafe34Smrg done 536986dafe34Smrg if test -z "$linklib"; then 537086dafe34Smrg func_fatal_error "cannot find name of link library for \`$lib'" 537186dafe34Smrg fi 537286dafe34Smrg 537386dafe34Smrg # This library was specified with -dlopen. 537486dafe34Smrg if test "$pass" = dlopen; then 537586dafe34Smrg if test -z "$libdir"; then 537686dafe34Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 537786dafe34Smrg fi 537886dafe34Smrg if test -z "$dlname" || 537986dafe34Smrg test "$dlopen_support" != yes || 538086dafe34Smrg test "$build_libtool_libs" = no; then 538186dafe34Smrg # If there is no dlname, no dlopen support or we're linking 538286dafe34Smrg # statically, we need to preload. We also need to preload any 538386dafe34Smrg # dependent libraries so libltdl's deplib preloader doesn't 538486dafe34Smrg # bomb out in the load deplibs phase. 538586dafe34Smrg dlprefiles="$dlprefiles $lib $dependency_libs" 538686dafe34Smrg else 538786dafe34Smrg newdlfiles="$newdlfiles $lib" 538886dafe34Smrg fi 538986dafe34Smrg continue 539086dafe34Smrg fi # $pass = dlopen 539186dafe34Smrg 539286dafe34Smrg # We need an absolute path. 539386dafe34Smrg case $ladir in 539486dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 539586dafe34Smrg *) 539686dafe34Smrg abs_ladir=`cd "$ladir" && pwd` 539786dafe34Smrg if test -z "$abs_ladir"; then 539886dafe34Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 539986dafe34Smrg func_warning "passing it literally to the linker, although it might fail" 540086dafe34Smrg abs_ladir="$ladir" 540186dafe34Smrg fi 540286dafe34Smrg ;; 540386dafe34Smrg esac 540486dafe34Smrg func_basename "$lib" 540586dafe34Smrg laname="$func_basename_result" 540686dafe34Smrg 540786dafe34Smrg # Find the relevant object directory and library name. 540886dafe34Smrg if test "X$installed" = Xyes; then 540986dafe34Smrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 541086dafe34Smrg func_warning "library \`$lib' was moved." 541186dafe34Smrg dir="$ladir" 541286dafe34Smrg absdir="$abs_ladir" 541386dafe34Smrg libdir="$abs_ladir" 541486dafe34Smrg else 541586dafe34Smrg dir="$libdir" 541686dafe34Smrg absdir="$libdir" 541786dafe34Smrg fi 541886dafe34Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 541986dafe34Smrg else 542086dafe34Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 542186dafe34Smrg dir="$ladir" 542286dafe34Smrg absdir="$abs_ladir" 542386dafe34Smrg # Remove this search path later 542486dafe34Smrg notinst_path="$notinst_path $abs_ladir" 542586dafe34Smrg else 542686dafe34Smrg dir="$ladir/$objdir" 542786dafe34Smrg absdir="$abs_ladir/$objdir" 542886dafe34Smrg # Remove this search path later 542986dafe34Smrg notinst_path="$notinst_path $abs_ladir" 543086dafe34Smrg fi 543186dafe34Smrg fi # $installed = yes 543286dafe34Smrg func_stripname 'lib' '.la' "$laname" 543386dafe34Smrg name=$func_stripname_result 543486dafe34Smrg 543586dafe34Smrg # This library was specified with -dlpreopen. 543686dafe34Smrg if test "$pass" = dlpreopen; then 543786dafe34Smrg if test -z "$libdir" && test "$linkmode" = prog; then 543886dafe34Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 543986dafe34Smrg fi 544086dafe34Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 544186dafe34Smrg # are required to link). 544286dafe34Smrg if test -n "$old_library"; then 544386dafe34Smrg newdlprefiles="$newdlprefiles $dir/$old_library" 544486dafe34Smrg # Keep a list of preopened convenience libraries to check 544586dafe34Smrg # that they are being used correctly in the link pass. 544686dafe34Smrg test -z "$libdir" && \ 544786dafe34Smrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 544886dafe34Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 544986dafe34Smrg elif test -n "$dlname"; then 545086dafe34Smrg newdlprefiles="$newdlprefiles $dir/$dlname" 545186dafe34Smrg else 545286dafe34Smrg newdlprefiles="$newdlprefiles $dir/$linklib" 545386dafe34Smrg fi 545486dafe34Smrg fi # $pass = dlpreopen 545586dafe34Smrg 545686dafe34Smrg if test -z "$libdir"; then 545786dafe34Smrg # Link the convenience library 545886dafe34Smrg if test "$linkmode" = lib; then 545986dafe34Smrg deplibs="$dir/$old_library $deplibs" 546086dafe34Smrg elif test "$linkmode,$pass" = "prog,link"; then 546186dafe34Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 546286dafe34Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 546386dafe34Smrg else 546486dafe34Smrg deplibs="$lib $deplibs" # used for prog,scan pass 546586dafe34Smrg fi 546686dafe34Smrg continue 546786dafe34Smrg fi 546886dafe34Smrg 546986dafe34Smrg 547086dafe34Smrg if test "$linkmode" = prog && test "$pass" != link; then 547186dafe34Smrg newlib_search_path="$newlib_search_path $ladir" 547286dafe34Smrg deplibs="$lib $deplibs" 547386dafe34Smrg 547486dafe34Smrg linkalldeplibs=no 547586dafe34Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 547686dafe34Smrg test "$build_libtool_libs" = no; then 547786dafe34Smrg linkalldeplibs=yes 547886dafe34Smrg fi 547986dafe34Smrg 548086dafe34Smrg tmp_libs= 548186dafe34Smrg for deplib in $dependency_libs; do 548286dafe34Smrg case $deplib in 548386dafe34Smrg -L*) func_stripname '-L' '' "$deplib" 548486dafe34Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 548586dafe34Smrg ;; 548686dafe34Smrg esac 548786dafe34Smrg # Need to link against all dependency_libs? 548886dafe34Smrg if test "$linkalldeplibs" = yes; then 548986dafe34Smrg deplibs="$deplib $deplibs" 549086dafe34Smrg else 549186dafe34Smrg # Need to hardcode shared library paths 549286dafe34Smrg # or/and link against static libraries 549386dafe34Smrg newdependency_libs="$deplib $newdependency_libs" 549486dafe34Smrg fi 549586dafe34Smrg if $opt_duplicate_deps ; then 549686dafe34Smrg case "$tmp_libs " in 549786dafe34Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 549886dafe34Smrg esac 549986dafe34Smrg fi 550086dafe34Smrg tmp_libs="$tmp_libs $deplib" 550186dafe34Smrg done # for deplib 550286dafe34Smrg continue 550386dafe34Smrg fi # $linkmode = prog... 550486dafe34Smrg 550586dafe34Smrg if test "$linkmode,$pass" = "prog,link"; then 550686dafe34Smrg if test -n "$library_names" && 550786dafe34Smrg { { test "$prefer_static_libs" = no || 550886dafe34Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 550986dafe34Smrg test -z "$old_library"; }; then 551086dafe34Smrg # We need to hardcode the library path 551186dafe34Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 551286dafe34Smrg # Make sure the rpath contains only unique directories. 551386dafe34Smrg case "$temp_rpath:" in 551486dafe34Smrg *"$absdir:"*) ;; 551586dafe34Smrg *) temp_rpath="$temp_rpath$absdir:" ;; 551686dafe34Smrg esac 551786dafe34Smrg fi 551886dafe34Smrg 551986dafe34Smrg # Hardcode the library path. 552086dafe34Smrg # Skip directories that are in the system default run-time 552186dafe34Smrg # search path. 552286dafe34Smrg case " $sys_lib_dlsearch_path " in 552386dafe34Smrg *" $absdir "*) ;; 552486dafe34Smrg *) 552586dafe34Smrg case "$compile_rpath " in 552686dafe34Smrg *" $absdir "*) ;; 552786dafe34Smrg *) compile_rpath="$compile_rpath $absdir" 552886dafe34Smrg esac 552986dafe34Smrg ;; 553086dafe34Smrg esac 553186dafe34Smrg case " $sys_lib_dlsearch_path " in 553286dafe34Smrg *" $libdir "*) ;; 553386dafe34Smrg *) 553486dafe34Smrg case "$finalize_rpath " in 553586dafe34Smrg *" $libdir "*) ;; 553686dafe34Smrg *) finalize_rpath="$finalize_rpath $libdir" 553786dafe34Smrg esac 553886dafe34Smrg ;; 553986dafe34Smrg esac 554086dafe34Smrg fi # $linkmode,$pass = prog,link... 554186dafe34Smrg 554286dafe34Smrg if test "$alldeplibs" = yes && 554386dafe34Smrg { test "$deplibs_check_method" = pass_all || 554486dafe34Smrg { test "$build_libtool_libs" = yes && 554586dafe34Smrg test -n "$library_names"; }; }; then 554686dafe34Smrg # We only need to search for static libraries 554786dafe34Smrg continue 554886dafe34Smrg fi 554986dafe34Smrg fi 555086dafe34Smrg 555186dafe34Smrg link_static=no # Whether the deplib will be linked statically 555286dafe34Smrg use_static_libs=$prefer_static_libs 555386dafe34Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 555486dafe34Smrg use_static_libs=no 555586dafe34Smrg fi 555686dafe34Smrg if test -n "$library_names" && 555786dafe34Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 555886dafe34Smrg case $host in 555986dafe34Smrg *cygwin* | *mingw* | *cegcc*) 556086dafe34Smrg # No point in relinking DLLs because paths are not encoded 556186dafe34Smrg notinst_deplibs="$notinst_deplibs $lib" 556286dafe34Smrg need_relink=no 556386dafe34Smrg ;; 556486dafe34Smrg *) 556586dafe34Smrg if test "$installed" = no; then 556686dafe34Smrg notinst_deplibs="$notinst_deplibs $lib" 556786dafe34Smrg need_relink=yes 556886dafe34Smrg fi 556986dafe34Smrg ;; 557086dafe34Smrg esac 557186dafe34Smrg # This is a shared library 557286dafe34Smrg 557386dafe34Smrg # Warn about portability, can't link against -module's on some 557486dafe34Smrg # systems (darwin). Don't bleat about dlopened modules though! 557586dafe34Smrg dlopenmodule="" 557686dafe34Smrg for dlpremoduletest in $dlprefiles; do 557786dafe34Smrg if test "X$dlpremoduletest" = "X$lib"; then 557886dafe34Smrg dlopenmodule="$dlpremoduletest" 557986dafe34Smrg break 558086dafe34Smrg fi 558186dafe34Smrg done 558286dafe34Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 558386dafe34Smrg $ECHO 558486dafe34Smrg if test "$linkmode" = prog; then 558586dafe34Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 558686dafe34Smrg else 558786dafe34Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 558886dafe34Smrg fi 558986dafe34Smrg $ECHO "*** $linklib is not portable!" 559086dafe34Smrg fi 559186dafe34Smrg if test "$linkmode" = lib && 559286dafe34Smrg test "$hardcode_into_libs" = yes; then 559386dafe34Smrg # Hardcode the library path. 559486dafe34Smrg # Skip directories that are in the system default run-time 559586dafe34Smrg # search path. 559686dafe34Smrg case " $sys_lib_dlsearch_path " in 559786dafe34Smrg *" $absdir "*) ;; 559886dafe34Smrg *) 559986dafe34Smrg case "$compile_rpath " in 560086dafe34Smrg *" $absdir "*) ;; 560186dafe34Smrg *) compile_rpath="$compile_rpath $absdir" 560286dafe34Smrg esac 560386dafe34Smrg ;; 560486dafe34Smrg esac 560586dafe34Smrg case " $sys_lib_dlsearch_path " in 560686dafe34Smrg *" $libdir "*) ;; 560786dafe34Smrg *) 560886dafe34Smrg case "$finalize_rpath " in 560986dafe34Smrg *" $libdir "*) ;; 561086dafe34Smrg *) finalize_rpath="$finalize_rpath $libdir" 561186dafe34Smrg esac 561286dafe34Smrg ;; 561386dafe34Smrg esac 561486dafe34Smrg fi 561586dafe34Smrg 561686dafe34Smrg if test -n "$old_archive_from_expsyms_cmds"; then 561786dafe34Smrg # figure out the soname 561886dafe34Smrg set dummy $library_names 561986dafe34Smrg shift 562086dafe34Smrg realname="$1" 562186dafe34Smrg shift 562286dafe34Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 562386dafe34Smrg # use dlname if we got it. it's perfectly good, no? 562486dafe34Smrg if test -n "$dlname"; then 562586dafe34Smrg soname="$dlname" 562686dafe34Smrg elif test -n "$soname_spec"; then 562786dafe34Smrg # bleh windows 562886dafe34Smrg case $host in 562986dafe34Smrg *cygwin* | mingw* | *cegcc*) 563086dafe34Smrg func_arith $current - $age 563186dafe34Smrg major=$func_arith_result 563286dafe34Smrg versuffix="-$major" 563386dafe34Smrg ;; 563486dafe34Smrg esac 563586dafe34Smrg eval soname=\"$soname_spec\" 563686dafe34Smrg else 563786dafe34Smrg soname="$realname" 563886dafe34Smrg fi 563986dafe34Smrg 564086dafe34Smrg # Make a new name for the extract_expsyms_cmds to use 564186dafe34Smrg soroot="$soname" 564286dafe34Smrg func_basename "$soroot" 564386dafe34Smrg soname="$func_basename_result" 564486dafe34Smrg func_stripname 'lib' '.dll' "$soname" 564586dafe34Smrg newlib=libimp-$func_stripname_result.a 564686dafe34Smrg 564786dafe34Smrg # If the library has no export list, then create one now 564886dafe34Smrg if test -f "$output_objdir/$soname-def"; then : 564986dafe34Smrg else 565086dafe34Smrg func_verbose "extracting exported symbol list from \`$soname'" 565186dafe34Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 565286dafe34Smrg fi 565386dafe34Smrg 565486dafe34Smrg # Create $newlib 565586dafe34Smrg if test -f "$output_objdir/$newlib"; then :; else 565686dafe34Smrg func_verbose "generating import library for \`$soname'" 565786dafe34Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 565886dafe34Smrg fi 565986dafe34Smrg # make sure the library variables are pointing to the new library 566086dafe34Smrg dir=$output_objdir 566186dafe34Smrg linklib=$newlib 566286dafe34Smrg fi # test -n "$old_archive_from_expsyms_cmds" 566386dafe34Smrg 566486dafe34Smrg if test "$linkmode" = prog || test "$mode" != relink; then 566586dafe34Smrg add_shlibpath= 566686dafe34Smrg add_dir= 566786dafe34Smrg add= 566886dafe34Smrg lib_linked=yes 566986dafe34Smrg case $hardcode_action in 567086dafe34Smrg immediate | unsupported) 567186dafe34Smrg if test "$hardcode_direct" = no; then 567286dafe34Smrg add="$dir/$linklib" 567386dafe34Smrg case $host in 567486dafe34Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 567586dafe34Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 567686dafe34Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 567786dafe34Smrg *-*-unixware7*) add_dir="-L$dir" ;; 567886dafe34Smrg *-*-darwin* ) 567986dafe34Smrg # if the lib is a (non-dlopened) module then we can not 568086dafe34Smrg # link against it, someone is ignoring the earlier warnings 568186dafe34Smrg if /usr/bin/file -L $add 2> /dev/null | 568286dafe34Smrg $GREP ": [^:]* bundle" >/dev/null ; then 568386dafe34Smrg if test "X$dlopenmodule" != "X$lib"; then 568486dafe34Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 568586dafe34Smrg if test -z "$old_library" ; then 568686dafe34Smrg $ECHO 568786dafe34Smrg $ECHO "*** And there doesn't seem to be a static archive available" 568886dafe34Smrg $ECHO "*** The link will probably fail, sorry" 568986dafe34Smrg else 569086dafe34Smrg add="$dir/$old_library" 569186dafe34Smrg fi 569286dafe34Smrg elif test -n "$old_library"; then 569386dafe34Smrg add="$dir/$old_library" 569486dafe34Smrg fi 569586dafe34Smrg fi 569686dafe34Smrg esac 569786dafe34Smrg elif test "$hardcode_minus_L" = no; then 569886dafe34Smrg case $host in 569986dafe34Smrg *-*-sunos*) add_shlibpath="$dir" ;; 570086dafe34Smrg esac 570186dafe34Smrg add_dir="-L$dir" 570286dafe34Smrg add="-l$name" 570386dafe34Smrg elif test "$hardcode_shlibpath_var" = no; then 570486dafe34Smrg add_shlibpath="$dir" 570586dafe34Smrg add="-l$name" 570686dafe34Smrg else 570786dafe34Smrg lib_linked=no 570886dafe34Smrg fi 570986dafe34Smrg ;; 571086dafe34Smrg relink) 571186dafe34Smrg if test "$hardcode_direct" = yes && 571286dafe34Smrg test "$hardcode_direct_absolute" = no; then 571386dafe34Smrg add="$dir/$linklib" 571486dafe34Smrg elif test "$hardcode_minus_L" = yes; then 571586dafe34Smrg add_dir="-L$dir" 571686dafe34Smrg # Try looking first in the location we're being installed to. 571786dafe34Smrg if test -n "$inst_prefix_dir"; then 571886dafe34Smrg case $libdir in 571986dafe34Smrg [\\/]*) 572086dafe34Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 572186dafe34Smrg ;; 572286dafe34Smrg esac 572386dafe34Smrg fi 572486dafe34Smrg add="-l$name" 572586dafe34Smrg elif test "$hardcode_shlibpath_var" = yes; then 572686dafe34Smrg add_shlibpath="$dir" 572786dafe34Smrg add="-l$name" 572886dafe34Smrg else 572986dafe34Smrg lib_linked=no 573086dafe34Smrg fi 573186dafe34Smrg ;; 573286dafe34Smrg *) lib_linked=no ;; 573386dafe34Smrg esac 573486dafe34Smrg 573586dafe34Smrg if test "$lib_linked" != yes; then 573686dafe34Smrg func_fatal_configuration "unsupported hardcode properties" 573786dafe34Smrg fi 573886dafe34Smrg 573986dafe34Smrg if test -n "$add_shlibpath"; then 574086dafe34Smrg case :$compile_shlibpath: in 574186dafe34Smrg *":$add_shlibpath:"*) ;; 574286dafe34Smrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 574386dafe34Smrg esac 574486dafe34Smrg fi 574586dafe34Smrg if test "$linkmode" = prog; then 574686dafe34Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 574786dafe34Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 574886dafe34Smrg else 574986dafe34Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 575086dafe34Smrg test -n "$add" && deplibs="$add $deplibs" 575186dafe34Smrg if test "$hardcode_direct" != yes && 575286dafe34Smrg test "$hardcode_minus_L" != yes && 575386dafe34Smrg test "$hardcode_shlibpath_var" = yes; then 575486dafe34Smrg case :$finalize_shlibpath: in 575586dafe34Smrg *":$libdir:"*) ;; 575686dafe34Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 575786dafe34Smrg esac 575886dafe34Smrg fi 575986dafe34Smrg fi 576086dafe34Smrg fi 576186dafe34Smrg 576286dafe34Smrg if test "$linkmode" = prog || test "$mode" = relink; then 576386dafe34Smrg add_shlibpath= 576486dafe34Smrg add_dir= 576586dafe34Smrg add= 576686dafe34Smrg # Finalize command for both is simple: just hardcode it. 576786dafe34Smrg if test "$hardcode_direct" = yes && 576886dafe34Smrg test "$hardcode_direct_absolute" = no; then 576986dafe34Smrg add="$libdir/$linklib" 577086dafe34Smrg elif test "$hardcode_minus_L" = yes; then 577186dafe34Smrg add_dir="-L$libdir" 577286dafe34Smrg add="-l$name" 577386dafe34Smrg elif test "$hardcode_shlibpath_var" = yes; then 577486dafe34Smrg case :$finalize_shlibpath: in 577586dafe34Smrg *":$libdir:"*) ;; 577686dafe34Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 577786dafe34Smrg esac 577886dafe34Smrg add="-l$name" 577986dafe34Smrg elif test "$hardcode_automatic" = yes; then 578086dafe34Smrg if test -n "$inst_prefix_dir" && 578186dafe34Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 578286dafe34Smrg add="$inst_prefix_dir$libdir/$linklib" 578386dafe34Smrg else 578486dafe34Smrg add="$libdir/$linklib" 578586dafe34Smrg fi 578686dafe34Smrg else 578786dafe34Smrg # We cannot seem to hardcode it, guess we'll fake it. 578886dafe34Smrg add_dir="-L$libdir" 578986dafe34Smrg # Try looking first in the location we're being installed to. 579086dafe34Smrg if test -n "$inst_prefix_dir"; then 579186dafe34Smrg case $libdir in 579286dafe34Smrg [\\/]*) 579386dafe34Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 579486dafe34Smrg ;; 579586dafe34Smrg esac 579686dafe34Smrg fi 579786dafe34Smrg add="-l$name" 579886dafe34Smrg fi 579986dafe34Smrg 580086dafe34Smrg if test "$linkmode" = prog; then 580186dafe34Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 580286dafe34Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 580386dafe34Smrg else 580486dafe34Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 580586dafe34Smrg test -n "$add" && deplibs="$add $deplibs" 580686dafe34Smrg fi 580786dafe34Smrg fi 580886dafe34Smrg elif test "$linkmode" = prog; then 580986dafe34Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 581086dafe34Smrg # is not unsupported. This is valid on all known static and 581186dafe34Smrg # shared platforms. 581286dafe34Smrg if test "$hardcode_direct" != unsupported; then 581386dafe34Smrg test -n "$old_library" && linklib="$old_library" 581486dafe34Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 581586dafe34Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 581686dafe34Smrg else 581786dafe34Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 581886dafe34Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 581986dafe34Smrg fi 582086dafe34Smrg elif test "$build_libtool_libs" = yes; then 582186dafe34Smrg # Not a shared library 582286dafe34Smrg if test "$deplibs_check_method" != pass_all; then 582386dafe34Smrg # We're trying link a shared library against a static one 582486dafe34Smrg # but the system doesn't support it. 582586dafe34Smrg 582686dafe34Smrg # Just print a warning and add the library to dependency_libs so 582786dafe34Smrg # that the program can be linked against the static library. 582886dafe34Smrg $ECHO 582986dafe34Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 583086dafe34Smrg $ECHO "*** I have the capability to make that library automatically link in when" 583186dafe34Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 583286dafe34Smrg $ECHO "*** shared version of the library, which you do not appear to have." 583386dafe34Smrg if test "$module" = yes; then 583486dafe34Smrg $ECHO "*** But as you try to build a module library, libtool will still create " 583586dafe34Smrg $ECHO "*** a static module, that should work as long as the dlopening application" 583686dafe34Smrg $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." 583786dafe34Smrg if test -z "$global_symbol_pipe"; then 583886dafe34Smrg $ECHO 583986dafe34Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 584086dafe34Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 584186dafe34Smrg $ECHO "*** not find such a program. So, this module is probably useless." 584286dafe34Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 584386dafe34Smrg fi 584486dafe34Smrg if test "$build_old_libs" = no; then 584586dafe34Smrg build_libtool_libs=module 584686dafe34Smrg build_old_libs=yes 584786dafe34Smrg else 584886dafe34Smrg build_libtool_libs=no 584986dafe34Smrg fi 585086dafe34Smrg fi 585186dafe34Smrg else 585286dafe34Smrg deplibs="$dir/$old_library $deplibs" 585386dafe34Smrg link_static=yes 585486dafe34Smrg fi 585586dafe34Smrg fi # link shared/static library? 585686dafe34Smrg 585786dafe34Smrg if test "$linkmode" = lib; then 585886dafe34Smrg if test -n "$dependency_libs" && 585986dafe34Smrg { test "$hardcode_into_libs" != yes || 586086dafe34Smrg test "$build_old_libs" = yes || 586186dafe34Smrg test "$link_static" = yes; }; then 586286dafe34Smrg # Extract -R from dependency_libs 586386dafe34Smrg temp_deplibs= 586486dafe34Smrg for libdir in $dependency_libs; do 586586dafe34Smrg case $libdir in 586686dafe34Smrg -R*) func_stripname '-R' '' "$libdir" 586786dafe34Smrg temp_xrpath=$func_stripname_result 586886dafe34Smrg case " $xrpath " in 586986dafe34Smrg *" $temp_xrpath "*) ;; 587086dafe34Smrg *) xrpath="$xrpath $temp_xrpath";; 587186dafe34Smrg esac;; 587286dafe34Smrg *) temp_deplibs="$temp_deplibs $libdir";; 587386dafe34Smrg esac 587486dafe34Smrg done 587586dafe34Smrg dependency_libs="$temp_deplibs" 587686dafe34Smrg fi 587786dafe34Smrg 587886dafe34Smrg newlib_search_path="$newlib_search_path $absdir" 587986dafe34Smrg # Link against this library 588086dafe34Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 588186dafe34Smrg # ... and its dependency_libs 588286dafe34Smrg tmp_libs= 588386dafe34Smrg for deplib in $dependency_libs; do 588486dafe34Smrg newdependency_libs="$deplib $newdependency_libs" 588586dafe34Smrg if $opt_duplicate_deps ; then 588686dafe34Smrg case "$tmp_libs " in 588786dafe34Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 588886dafe34Smrg esac 588986dafe34Smrg fi 589086dafe34Smrg tmp_libs="$tmp_libs $deplib" 589186dafe34Smrg done 589286dafe34Smrg 589386dafe34Smrg if test "$link_all_deplibs" != no; then 589486dafe34Smrg # Add the search paths of all dependency libraries 589586dafe34Smrg for deplib in $dependency_libs; do 589686dafe34Smrg case $deplib in 589786dafe34Smrg -L*) path="$deplib" ;; 589886dafe34Smrg *.la) 589986dafe34Smrg func_dirname "$deplib" "" "." 590086dafe34Smrg dir="$func_dirname_result" 590186dafe34Smrg # We need an absolute path. 590286dafe34Smrg case $dir in 590386dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 590486dafe34Smrg *) 590586dafe34Smrg absdir=`cd "$dir" && pwd` 590686dafe34Smrg if test -z "$absdir"; then 590786dafe34Smrg func_warning "cannot determine absolute directory name of \`$dir'" 590886dafe34Smrg absdir="$dir" 590986dafe34Smrg fi 591086dafe34Smrg ;; 591186dafe34Smrg esac 591286dafe34Smrg if $GREP "^installed=no" $deplib > /dev/null; then 591386dafe34Smrg case $host in 591486dafe34Smrg *-*-darwin*) 591586dafe34Smrg depdepl= 591686dafe34Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 591786dafe34Smrg if test -n "$deplibrary_names" ; then 591886dafe34Smrg for tmp in $deplibrary_names ; do 591986dafe34Smrg depdepl=$tmp 592086dafe34Smrg done 592186dafe34Smrg if test -f "$absdir/$objdir/$depdepl" ; then 592286dafe34Smrg depdepl="$absdir/$objdir/$depdepl" 592386dafe34Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 592486dafe34Smrg if test -z "$darwin_install_name"; then 592586dafe34Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 592686dafe34Smrg fi 592786dafe34Smrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 592886dafe34Smrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 592986dafe34Smrg path= 593086dafe34Smrg fi 593186dafe34Smrg fi 593286dafe34Smrg ;; 593386dafe34Smrg *) 593486dafe34Smrg path="-L$absdir/$objdir" 593586dafe34Smrg ;; 593686dafe34Smrg esac 593786dafe34Smrg else 593886dafe34Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 593986dafe34Smrg test -z "$libdir" && \ 594086dafe34Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 594186dafe34Smrg test "$absdir" != "$libdir" && \ 594286dafe34Smrg func_warning "\`$deplib' seems to be moved" 594386dafe34Smrg 594486dafe34Smrg path="-L$absdir" 594586dafe34Smrg fi 594686dafe34Smrg ;; 594786dafe34Smrg esac 594886dafe34Smrg case " $deplibs " in 594986dafe34Smrg *" $path "*) ;; 595086dafe34Smrg *) deplibs="$path $deplibs" ;; 595186dafe34Smrg esac 595286dafe34Smrg done 595386dafe34Smrg fi # link_all_deplibs != no 595486dafe34Smrg fi # linkmode = lib 595586dafe34Smrg done # for deplib in $libs 595686dafe34Smrg if test "$pass" = link; then 595786dafe34Smrg if test "$linkmode" = "prog"; then 595886dafe34Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 595986dafe34Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 596086dafe34Smrg else 596186dafe34Smrg compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 596286dafe34Smrg fi 596386dafe34Smrg fi 596486dafe34Smrg dependency_libs="$newdependency_libs" 596586dafe34Smrg if test "$pass" = dlpreopen; then 596686dafe34Smrg # Link the dlpreopened libraries before other libraries 596786dafe34Smrg for deplib in $save_deplibs; do 596886dafe34Smrg deplibs="$deplib $deplibs" 596986dafe34Smrg done 597086dafe34Smrg fi 597186dafe34Smrg if test "$pass" != dlopen; then 597286dafe34Smrg if test "$pass" != conv; then 597386dafe34Smrg # Make sure lib_search_path contains only unique directories. 597486dafe34Smrg lib_search_path= 597586dafe34Smrg for dir in $newlib_search_path; do 597686dafe34Smrg case "$lib_search_path " in 597786dafe34Smrg *" $dir "*) ;; 597886dafe34Smrg *) lib_search_path="$lib_search_path $dir" ;; 597986dafe34Smrg esac 598086dafe34Smrg done 598186dafe34Smrg newlib_search_path= 598286dafe34Smrg fi 598386dafe34Smrg 598486dafe34Smrg if test "$linkmode,$pass" != "prog,link"; then 598586dafe34Smrg vars="deplibs" 598686dafe34Smrg else 598786dafe34Smrg vars="compile_deplibs finalize_deplibs" 598886dafe34Smrg fi 598986dafe34Smrg for var in $vars dependency_libs; do 599086dafe34Smrg # Add libraries to $var in reverse order 599186dafe34Smrg eval tmp_libs=\"\$$var\" 599286dafe34Smrg new_libs= 599386dafe34Smrg for deplib in $tmp_libs; do 599486dafe34Smrg # FIXME: Pedantically, this is the right thing to do, so 599586dafe34Smrg # that some nasty dependency loop isn't accidentally 599686dafe34Smrg # broken: 599786dafe34Smrg #new_libs="$deplib $new_libs" 599886dafe34Smrg # Pragmatically, this seems to cause very few problems in 599986dafe34Smrg # practice: 600086dafe34Smrg case $deplib in 600186dafe34Smrg -L*) new_libs="$deplib $new_libs" ;; 600286dafe34Smrg -R*) ;; 600386dafe34Smrg *) 600486dafe34Smrg # And here is the reason: when a library appears more 600586dafe34Smrg # than once as an explicit dependence of a library, or 600686dafe34Smrg # is implicitly linked in more than once by the 600786dafe34Smrg # compiler, it is considered special, and multiple 600886dafe34Smrg # occurrences thereof are not removed. Compare this 600986dafe34Smrg # with having the same library being listed as a 601086dafe34Smrg # dependency of multiple other libraries: in this case, 601186dafe34Smrg # we know (pedantically, we assume) the library does not 601286dafe34Smrg # need to be listed more than once, so we keep only the 601386dafe34Smrg # last copy. This is not always right, but it is rare 601486dafe34Smrg # enough that we require users that really mean to play 601586dafe34Smrg # such unportable linking tricks to link the library 601686dafe34Smrg # using -Wl,-lname, so that libtool does not consider it 601786dafe34Smrg # for duplicate removal. 601886dafe34Smrg case " $specialdeplibs " in 601986dafe34Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 602086dafe34Smrg *) 602186dafe34Smrg case " $new_libs " in 602286dafe34Smrg *" $deplib "*) ;; 602386dafe34Smrg *) new_libs="$deplib $new_libs" ;; 602486dafe34Smrg esac 602586dafe34Smrg ;; 602686dafe34Smrg esac 602786dafe34Smrg ;; 602886dafe34Smrg esac 602986dafe34Smrg done 603086dafe34Smrg tmp_libs= 603186dafe34Smrg for deplib in $new_libs; do 603286dafe34Smrg case $deplib in 603386dafe34Smrg -L*) 603486dafe34Smrg case " $tmp_libs " in 603586dafe34Smrg *" $deplib "*) ;; 603686dafe34Smrg *) tmp_libs="$tmp_libs $deplib" ;; 603786dafe34Smrg esac 603886dafe34Smrg ;; 603986dafe34Smrg *) tmp_libs="$tmp_libs $deplib" ;; 604086dafe34Smrg esac 604186dafe34Smrg done 604286dafe34Smrg eval $var=\"$tmp_libs\" 604386dafe34Smrg done # for var 604486dafe34Smrg fi 604586dafe34Smrg # Last step: remove runtime libs from dependency_libs 604686dafe34Smrg # (they stay in deplibs) 604786dafe34Smrg tmp_libs= 604886dafe34Smrg for i in $dependency_libs ; do 604986dafe34Smrg case " $predeps $postdeps $compiler_lib_search_path " in 605086dafe34Smrg *" $i "*) 605186dafe34Smrg i="" 605286dafe34Smrg ;; 605386dafe34Smrg esac 605486dafe34Smrg if test -n "$i" ; then 605586dafe34Smrg tmp_libs="$tmp_libs $i" 605686dafe34Smrg fi 605786dafe34Smrg done 605886dafe34Smrg dependency_libs=$tmp_libs 605986dafe34Smrg done # for pass 606086dafe34Smrg if test "$linkmode" = prog; then 606186dafe34Smrg dlfiles="$newdlfiles" 606286dafe34Smrg fi 606386dafe34Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 606486dafe34Smrg dlprefiles="$newdlprefiles" 606586dafe34Smrg fi 606686dafe34Smrg 606786dafe34Smrg case $linkmode in 606886dafe34Smrg oldlib) 606986dafe34Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 607086dafe34Smrg func_warning "\`-dlopen' is ignored for archives" 607186dafe34Smrg fi 607286dafe34Smrg 607386dafe34Smrg case " $deplibs" in 607486dafe34Smrg *\ -l* | *\ -L*) 607586dafe34Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 607686dafe34Smrg esac 607786dafe34Smrg 607886dafe34Smrg test -n "$rpath" && \ 607986dafe34Smrg func_warning "\`-rpath' is ignored for archives" 608086dafe34Smrg 608186dafe34Smrg test -n "$xrpath" && \ 608286dafe34Smrg func_warning "\`-R' is ignored for archives" 608386dafe34Smrg 608486dafe34Smrg test -n "$vinfo" && \ 608586dafe34Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 608686dafe34Smrg 608786dafe34Smrg test -n "$release" && \ 608886dafe34Smrg func_warning "\`-release' is ignored for archives" 608986dafe34Smrg 609086dafe34Smrg test -n "$export_symbols$export_symbols_regex" && \ 609186dafe34Smrg func_warning "\`-export-symbols' is ignored for archives" 609286dafe34Smrg 609386dafe34Smrg # Now set the variables for building old libraries. 609486dafe34Smrg build_libtool_libs=no 609586dafe34Smrg oldlibs="$output" 609686dafe34Smrg objs="$objs$old_deplibs" 609786dafe34Smrg ;; 609886dafe34Smrg 609986dafe34Smrg lib) 610086dafe34Smrg # Make sure we only generate libraries of the form `libNAME.la'. 610186dafe34Smrg case $outputname in 610286dafe34Smrg lib*) 610386dafe34Smrg func_stripname 'lib' '.la' "$outputname" 610486dafe34Smrg name=$func_stripname_result 610586dafe34Smrg eval shared_ext=\"$shrext_cmds\" 610686dafe34Smrg eval libname=\"$libname_spec\" 610786dafe34Smrg ;; 610886dafe34Smrg *) 610986dafe34Smrg test "$module" = no && \ 611086dafe34Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 611186dafe34Smrg 611286dafe34Smrg if test "$need_lib_prefix" != no; then 611386dafe34Smrg # Add the "lib" prefix for modules if required 611486dafe34Smrg func_stripname '' '.la' "$outputname" 611586dafe34Smrg name=$func_stripname_result 611686dafe34Smrg eval shared_ext=\"$shrext_cmds\" 611786dafe34Smrg eval libname=\"$libname_spec\" 611886dafe34Smrg else 611986dafe34Smrg func_stripname '' '.la' "$outputname" 612086dafe34Smrg libname=$func_stripname_result 612186dafe34Smrg fi 612286dafe34Smrg ;; 612386dafe34Smrg esac 612486dafe34Smrg 612586dafe34Smrg if test -n "$objs"; then 612686dafe34Smrg if test "$deplibs_check_method" != pass_all; then 612786dafe34Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 612886dafe34Smrg else 612986dafe34Smrg $ECHO 613086dafe34Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 613186dafe34Smrg $ECHO "*** objects $objs is not portable!" 613286dafe34Smrg libobjs="$libobjs $objs" 613386dafe34Smrg fi 613486dafe34Smrg fi 613586dafe34Smrg 613686dafe34Smrg test "$dlself" != no && \ 613786dafe34Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 613886dafe34Smrg 613986dafe34Smrg set dummy $rpath 614086dafe34Smrg shift 614186dafe34Smrg test "$#" -gt 1 && \ 614286dafe34Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 614386dafe34Smrg 614486dafe34Smrg install_libdir="$1" 614586dafe34Smrg 614686dafe34Smrg oldlibs= 614786dafe34Smrg if test -z "$rpath"; then 614886dafe34Smrg if test "$build_libtool_libs" = yes; then 614986dafe34Smrg # Building a libtool convenience library. 615086dafe34Smrg # Some compilers have problems with a `.al' extension so 615186dafe34Smrg # convenience libraries should have the same extension an 615286dafe34Smrg # archive normally would. 615386dafe34Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 615486dafe34Smrg build_libtool_libs=convenience 615586dafe34Smrg build_old_libs=yes 615686dafe34Smrg fi 615786dafe34Smrg 615886dafe34Smrg test -n "$vinfo" && \ 615986dafe34Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 616086dafe34Smrg 616186dafe34Smrg test -n "$release" && \ 616286dafe34Smrg func_warning "\`-release' is ignored for convenience libraries" 616386dafe34Smrg else 616486dafe34Smrg 616586dafe34Smrg # Parse the version information argument. 616686dafe34Smrg save_ifs="$IFS"; IFS=':' 616786dafe34Smrg set dummy $vinfo 0 0 0 616886dafe34Smrg shift 616986dafe34Smrg IFS="$save_ifs" 617086dafe34Smrg 617186dafe34Smrg test -n "$7" && \ 617286dafe34Smrg func_fatal_help "too many parameters to \`-version-info'" 617386dafe34Smrg 617486dafe34Smrg # convert absolute version numbers to libtool ages 617586dafe34Smrg # this retains compatibility with .la files and attempts 617686dafe34Smrg # to make the code below a bit more comprehensible 617786dafe34Smrg 617886dafe34Smrg case $vinfo_number in 617986dafe34Smrg yes) 618086dafe34Smrg number_major="$1" 618186dafe34Smrg number_minor="$2" 618286dafe34Smrg number_revision="$3" 618386dafe34Smrg # 618486dafe34Smrg # There are really only two kinds -- those that 618586dafe34Smrg # use the current revision as the major version 618686dafe34Smrg # and those that subtract age and use age as 618786dafe34Smrg # a minor version. But, then there is irix 618886dafe34Smrg # which has an extra 1 added just for fun 618986dafe34Smrg # 619086dafe34Smrg case $version_type in 619186dafe34Smrg darwin|linux|osf|windows|none) 619286dafe34Smrg func_arith $number_major + $number_minor 619386dafe34Smrg current=$func_arith_result 619486dafe34Smrg age="$number_minor" 619586dafe34Smrg revision="$number_revision" 619686dafe34Smrg ;; 619786dafe34Smrg freebsd-aout|freebsd-elf|sunos) 619886dafe34Smrg current="$number_major" 619986dafe34Smrg revision="$number_minor" 620086dafe34Smrg age="0" 620186dafe34Smrg ;; 620286dafe34Smrg irix|nonstopux) 620386dafe34Smrg func_arith $number_major + $number_minor 620486dafe34Smrg current=$func_arith_result 620586dafe34Smrg age="$number_minor" 620686dafe34Smrg revision="$number_minor" 620786dafe34Smrg lt_irix_increment=no 620886dafe34Smrg ;; 620986dafe34Smrg esac 621086dafe34Smrg ;; 621186dafe34Smrg no) 621286dafe34Smrg current="$1" 621386dafe34Smrg revision="$2" 621486dafe34Smrg age="$3" 621586dafe34Smrg ;; 621686dafe34Smrg esac 621786dafe34Smrg 621886dafe34Smrg # Check that each of the things are valid numbers. 621986dafe34Smrg case $current in 622086dafe34Smrg 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]) ;; 622186dafe34Smrg *) 622286dafe34Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 622386dafe34Smrg func_fatal_error "\`$vinfo' is not valid version information" 622486dafe34Smrg ;; 622586dafe34Smrg esac 622686dafe34Smrg 622786dafe34Smrg case $revision in 622886dafe34Smrg 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]) ;; 622986dafe34Smrg *) 623086dafe34Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 623186dafe34Smrg func_fatal_error "\`$vinfo' is not valid version information" 623286dafe34Smrg ;; 623386dafe34Smrg esac 623486dafe34Smrg 623586dafe34Smrg case $age in 623686dafe34Smrg 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]) ;; 623786dafe34Smrg *) 623886dafe34Smrg func_error "AGE \`$age' must be a nonnegative integer" 623986dafe34Smrg func_fatal_error "\`$vinfo' is not valid version information" 624086dafe34Smrg ;; 624186dafe34Smrg esac 624286dafe34Smrg 624386dafe34Smrg if test "$age" -gt "$current"; then 624486dafe34Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 624586dafe34Smrg func_fatal_error "\`$vinfo' is not valid version information" 624686dafe34Smrg fi 624786dafe34Smrg 624886dafe34Smrg # Calculate the version variables. 624986dafe34Smrg major= 625086dafe34Smrg versuffix= 625186dafe34Smrg verstring= 625286dafe34Smrg case $version_type in 625386dafe34Smrg none) ;; 625486dafe34Smrg 625586dafe34Smrg darwin) 625686dafe34Smrg # Like Linux, but with the current version available in 625786dafe34Smrg # verstring for coding it into the library header 625886dafe34Smrg func_arith $current - $age 625986dafe34Smrg major=.$func_arith_result 626086dafe34Smrg versuffix="$major.$age.$revision" 626186dafe34Smrg # Darwin ld doesn't like 0 for these options... 626286dafe34Smrg func_arith $current + 1 626386dafe34Smrg minor_current=$func_arith_result 626486dafe34Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 626586dafe34Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 626686dafe34Smrg ;; 626786dafe34Smrg 626886dafe34Smrg freebsd-aout) 626986dafe34Smrg major=".$current" 627086dafe34Smrg versuffix=".$current.$revision"; 627186dafe34Smrg ;; 627286dafe34Smrg 627386dafe34Smrg freebsd-elf) 627486dafe34Smrg major=".$current" 627586dafe34Smrg versuffix=".$current" 627686dafe34Smrg ;; 627786dafe34Smrg 627886dafe34Smrg irix | nonstopux) 627986dafe34Smrg if test "X$lt_irix_increment" = "Xno"; then 628086dafe34Smrg func_arith $current - $age 628186dafe34Smrg else 628286dafe34Smrg func_arith $current - $age + 1 628386dafe34Smrg fi 628486dafe34Smrg major=$func_arith_result 628586dafe34Smrg 628686dafe34Smrg case $version_type in 628786dafe34Smrg nonstopux) verstring_prefix=nonstopux ;; 628886dafe34Smrg *) verstring_prefix=sgi ;; 628986dafe34Smrg esac 629086dafe34Smrg verstring="$verstring_prefix$major.$revision" 629186dafe34Smrg 629286dafe34Smrg # Add in all the interfaces that we are compatible with. 629386dafe34Smrg loop=$revision 629486dafe34Smrg while test "$loop" -ne 0; do 629586dafe34Smrg func_arith $revision - $loop 629686dafe34Smrg iface=$func_arith_result 629786dafe34Smrg func_arith $loop - 1 629886dafe34Smrg loop=$func_arith_result 629986dafe34Smrg verstring="$verstring_prefix$major.$iface:$verstring" 630086dafe34Smrg done 630186dafe34Smrg 630286dafe34Smrg # Before this point, $major must not contain `.'. 630386dafe34Smrg major=.$major 630486dafe34Smrg versuffix="$major.$revision" 630586dafe34Smrg ;; 630686dafe34Smrg 630786dafe34Smrg linux) 630886dafe34Smrg func_arith $current - $age 630986dafe34Smrg major=.$func_arith_result 631086dafe34Smrg versuffix="$major.$age.$revision" 631186dafe34Smrg ;; 631286dafe34Smrg 631386dafe34Smrg osf) 631486dafe34Smrg func_arith $current - $age 631586dafe34Smrg major=.$func_arith_result 631686dafe34Smrg versuffix=".$current.$age.$revision" 631786dafe34Smrg verstring="$current.$age.$revision" 631886dafe34Smrg 631986dafe34Smrg # Add in all the interfaces that we are compatible with. 632086dafe34Smrg loop=$age 632186dafe34Smrg while test "$loop" -ne 0; do 632286dafe34Smrg func_arith $current - $loop 632386dafe34Smrg iface=$func_arith_result 632486dafe34Smrg func_arith $loop - 1 632586dafe34Smrg loop=$func_arith_result 632686dafe34Smrg verstring="$verstring:${iface}.0" 632786dafe34Smrg done 632886dafe34Smrg 632986dafe34Smrg # Make executables depend on our current version. 633086dafe34Smrg verstring="$verstring:${current}.0" 633186dafe34Smrg ;; 633286dafe34Smrg 633386dafe34Smrg qnx) 633486dafe34Smrg major=".$current" 633586dafe34Smrg versuffix=".$current" 633686dafe34Smrg ;; 633786dafe34Smrg 633886dafe34Smrg sunos) 633986dafe34Smrg major=".$current" 634086dafe34Smrg versuffix=".$current.$revision" 634186dafe34Smrg ;; 634286dafe34Smrg 634386dafe34Smrg windows) 634486dafe34Smrg # Use '-' rather than '.', since we only want one 634586dafe34Smrg # extension on DOS 8.3 filesystems. 634686dafe34Smrg func_arith $current - $age 634786dafe34Smrg major=$func_arith_result 634886dafe34Smrg versuffix="-$major" 634986dafe34Smrg ;; 635086dafe34Smrg 635186dafe34Smrg *) 635286dafe34Smrg func_fatal_configuration "unknown library version type \`$version_type'" 635386dafe34Smrg ;; 635486dafe34Smrg esac 635586dafe34Smrg 635686dafe34Smrg # Clear the version info if we defaulted, and they specified a release. 635786dafe34Smrg if test -z "$vinfo" && test -n "$release"; then 635886dafe34Smrg major= 635986dafe34Smrg case $version_type in 636086dafe34Smrg darwin) 636186dafe34Smrg # we can't check for "0.0" in archive_cmds due to quoting 636286dafe34Smrg # problems, so we reset it completely 636386dafe34Smrg verstring= 636486dafe34Smrg ;; 636586dafe34Smrg *) 636686dafe34Smrg verstring="0.0" 636786dafe34Smrg ;; 636886dafe34Smrg esac 636986dafe34Smrg if test "$need_version" = no; then 637086dafe34Smrg versuffix= 637186dafe34Smrg else 637286dafe34Smrg versuffix=".0.0" 637386dafe34Smrg fi 637486dafe34Smrg fi 637586dafe34Smrg 637686dafe34Smrg # Remove version info from name if versioning should be avoided 637786dafe34Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 637886dafe34Smrg major= 637986dafe34Smrg versuffix= 638086dafe34Smrg verstring="" 638186dafe34Smrg fi 638286dafe34Smrg 638386dafe34Smrg # Check to see if the archive will have undefined symbols. 638486dafe34Smrg if test "$allow_undefined" = yes; then 638586dafe34Smrg if test "$allow_undefined_flag" = unsupported; then 638686dafe34Smrg func_warning "undefined symbols not allowed in $host shared libraries" 638786dafe34Smrg build_libtool_libs=no 638886dafe34Smrg build_old_libs=yes 638986dafe34Smrg fi 639086dafe34Smrg else 639186dafe34Smrg # Don't allow undefined symbols. 639286dafe34Smrg allow_undefined_flag="$no_undefined_flag" 639386dafe34Smrg fi 639486dafe34Smrg 639586dafe34Smrg fi 639686dafe34Smrg 639786dafe34Smrg func_generate_dlsyms "$libname" "$libname" "yes" 639886dafe34Smrg libobjs="$libobjs $symfileobj" 639986dafe34Smrg test "X$libobjs" = "X " && libobjs= 640086dafe34Smrg 640186dafe34Smrg if test "$mode" != relink; then 640286dafe34Smrg # Remove our outputs, but don't remove object files since they 640386dafe34Smrg # may have been created when compiling PIC objects. 640486dafe34Smrg removelist= 640586dafe34Smrg tempremovelist=`$ECHO "$output_objdir/*"` 640686dafe34Smrg for p in $tempremovelist; do 640786dafe34Smrg case $p in 640886dafe34Smrg *.$objext | *.gcno) 640986dafe34Smrg ;; 641086dafe34Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 641186dafe34Smrg if test "X$precious_files_regex" != "X"; then 641286dafe34Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 641386dafe34Smrg then 641486dafe34Smrg continue 641586dafe34Smrg fi 641686dafe34Smrg fi 641786dafe34Smrg removelist="$removelist $p" 641886dafe34Smrg ;; 641986dafe34Smrg *) ;; 642086dafe34Smrg esac 642186dafe34Smrg done 642286dafe34Smrg test -n "$removelist" && \ 642386dafe34Smrg func_show_eval "${RM}r \$removelist" 642486dafe34Smrg fi 642586dafe34Smrg 642686dafe34Smrg # Now set the variables for building old libraries. 642786dafe34Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 642886dafe34Smrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 642986dafe34Smrg 643086dafe34Smrg # Transform .lo files to .o files. 643186dafe34Smrg oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 643286dafe34Smrg fi 643386dafe34Smrg 643486dafe34Smrg # Eliminate all temporary directories. 643586dafe34Smrg #for path in $notinst_path; do 643686dafe34Smrg # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` 643786dafe34Smrg # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` 643886dafe34Smrg # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` 643986dafe34Smrg #done 644086dafe34Smrg 644186dafe34Smrg if test -n "$xrpath"; then 644286dafe34Smrg # If the user specified any rpath flags, then add them. 644386dafe34Smrg temp_xrpath= 644486dafe34Smrg for libdir in $xrpath; do 644586dafe34Smrg temp_xrpath="$temp_xrpath -R$libdir" 644686dafe34Smrg case "$finalize_rpath " in 644786dafe34Smrg *" $libdir "*) ;; 644886dafe34Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 644986dafe34Smrg esac 645086dafe34Smrg done 645186dafe34Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 645286dafe34Smrg dependency_libs="$temp_xrpath $dependency_libs" 645386dafe34Smrg fi 645486dafe34Smrg fi 645586dafe34Smrg 645686dafe34Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 645786dafe34Smrg old_dlfiles="$dlfiles" 645886dafe34Smrg dlfiles= 645986dafe34Smrg for lib in $old_dlfiles; do 646086dafe34Smrg case " $dlprefiles $dlfiles " in 646186dafe34Smrg *" $lib "*) ;; 646286dafe34Smrg *) dlfiles="$dlfiles $lib" ;; 646386dafe34Smrg esac 646486dafe34Smrg done 646586dafe34Smrg 646686dafe34Smrg # Make sure dlprefiles contains only unique files 646786dafe34Smrg old_dlprefiles="$dlprefiles" 646886dafe34Smrg dlprefiles= 646986dafe34Smrg for lib in $old_dlprefiles; do 647086dafe34Smrg case "$dlprefiles " in 647186dafe34Smrg *" $lib "*) ;; 647286dafe34Smrg *) dlprefiles="$dlprefiles $lib" ;; 647386dafe34Smrg esac 647486dafe34Smrg done 647586dafe34Smrg 647686dafe34Smrg if test "$build_libtool_libs" = yes; then 647786dafe34Smrg if test -n "$rpath"; then 647886dafe34Smrg case $host in 647986dafe34Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) 648086dafe34Smrg # these systems don't actually have a c library (as such)! 648186dafe34Smrg ;; 648286dafe34Smrg *-*-rhapsody* | *-*-darwin1.[012]) 648386dafe34Smrg # Rhapsody C library is in the System framework 648486dafe34Smrg deplibs="$deplibs System.ltframework" 648586dafe34Smrg ;; 648686dafe34Smrg *-*-netbsd*) 648786dafe34Smrg # Don't link with libc until the a.out ld.so is fixed. 648886dafe34Smrg ;; 648986dafe34Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 649086dafe34Smrg # Do not include libc due to us having libc/libc_r. 649186dafe34Smrg ;; 649286dafe34Smrg *-*-sco3.2v5* | *-*-sco5v6*) 649386dafe34Smrg # Causes problems with __ctype 649486dafe34Smrg ;; 649586dafe34Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 649686dafe34Smrg # Compiler inserts libc in the correct place for threads to work 649786dafe34Smrg ;; 649886dafe34Smrg *) 649986dafe34Smrg # Add libc to deplibs on all other systems if necessary. 650086dafe34Smrg if test "$build_libtool_need_lc" = "yes"; then 650186dafe34Smrg deplibs="$deplibs -lc" 650286dafe34Smrg fi 650386dafe34Smrg ;; 650486dafe34Smrg esac 650586dafe34Smrg fi 650686dafe34Smrg 650786dafe34Smrg # Transform deplibs into only deplibs that can be linked in shared. 650886dafe34Smrg name_save=$name 650986dafe34Smrg libname_save=$libname 651086dafe34Smrg release_save=$release 651186dafe34Smrg versuffix_save=$versuffix 651286dafe34Smrg major_save=$major 651386dafe34Smrg # I'm not sure if I'm treating the release correctly. I think 651486dafe34Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 651586dafe34Smrg # add it in twice. Is that correct? 651686dafe34Smrg release="" 651786dafe34Smrg versuffix="" 651886dafe34Smrg major="" 651986dafe34Smrg newdeplibs= 652086dafe34Smrg droppeddeps=no 652186dafe34Smrg case $deplibs_check_method in 652286dafe34Smrg pass_all) 652386dafe34Smrg # Don't check for shared/static. Everything works. 652486dafe34Smrg # This might be a little naive. We might want to check 652586dafe34Smrg # whether the library exists or not. But this is on 652686dafe34Smrg # osf3 & osf4 and I'm not really sure... Just 652786dafe34Smrg # implementing what was already the behavior. 652886dafe34Smrg newdeplibs=$deplibs 652986dafe34Smrg ;; 653086dafe34Smrg test_compile) 653186dafe34Smrg # This code stresses the "libraries are programs" paradigm to its 653286dafe34Smrg # limits. Maybe even breaks it. We compile a program, linking it 653386dafe34Smrg # against the deplibs as a proxy for the library. Then we can check 653486dafe34Smrg # whether they linked in statically or dynamically with ldd. 653586dafe34Smrg $opt_dry_run || $RM conftest.c 653686dafe34Smrg cat > conftest.c <<EOF 653786dafe34Smrg int main() { return 0; } 653886dafe34SmrgEOF 653986dafe34Smrg $opt_dry_run || $RM conftest 654086dafe34Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 654186dafe34Smrg ldd_output=`ldd conftest` 654286dafe34Smrg for i in $deplibs; do 654386dafe34Smrg case $i in 654486dafe34Smrg -l*) 654586dafe34Smrg func_stripname -l '' "$i" 654686dafe34Smrg name=$func_stripname_result 654786dafe34Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 654886dafe34Smrg case " $predeps $postdeps " in 654986dafe34Smrg *" $i "*) 655086dafe34Smrg newdeplibs="$newdeplibs $i" 655186dafe34Smrg i="" 655286dafe34Smrg ;; 655386dafe34Smrg esac 655486dafe34Smrg fi 655586dafe34Smrg if test -n "$i" ; then 655686dafe34Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 655786dafe34Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 655886dafe34Smrg set dummy $deplib_matches; shift 655986dafe34Smrg deplib_match=$1 656086dafe34Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 656186dafe34Smrg newdeplibs="$newdeplibs $i" 656286dafe34Smrg else 656386dafe34Smrg droppeddeps=yes 656486dafe34Smrg $ECHO 656586dafe34Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 656686dafe34Smrg $ECHO "*** I have the capability to make that library automatically link in when" 656786dafe34Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 656886dafe34Smrg $ECHO "*** shared version of the library, which I believe you do not have" 656986dafe34Smrg $ECHO "*** because a test_compile did reveal that the linker did not use it for" 657086dafe34Smrg $ECHO "*** its dynamic dependency list that programs get resolved with at runtime." 657186dafe34Smrg fi 657286dafe34Smrg fi 657386dafe34Smrg ;; 657486dafe34Smrg *) 657586dafe34Smrg newdeplibs="$newdeplibs $i" 657686dafe34Smrg ;; 657786dafe34Smrg esac 657886dafe34Smrg done 657986dafe34Smrg else 658086dafe34Smrg # Error occurred in the first compile. Let's try to salvage 658186dafe34Smrg # the situation: Compile a separate program for each library. 658286dafe34Smrg for i in $deplibs; do 658386dafe34Smrg case $i in 658486dafe34Smrg -l*) 658586dafe34Smrg func_stripname -l '' "$i" 658686dafe34Smrg name=$func_stripname_result 658786dafe34Smrg $opt_dry_run || $RM conftest 658886dafe34Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 658986dafe34Smrg ldd_output=`ldd conftest` 659086dafe34Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 659186dafe34Smrg case " $predeps $postdeps " in 659286dafe34Smrg *" $i "*) 659386dafe34Smrg newdeplibs="$newdeplibs $i" 659486dafe34Smrg i="" 659586dafe34Smrg ;; 659686dafe34Smrg esac 659786dafe34Smrg fi 659886dafe34Smrg if test -n "$i" ; then 659986dafe34Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 660086dafe34Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 660186dafe34Smrg set dummy $deplib_matches; shift 660286dafe34Smrg deplib_match=$1 660386dafe34Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 660486dafe34Smrg newdeplibs="$newdeplibs $i" 660586dafe34Smrg else 660686dafe34Smrg droppeddeps=yes 660786dafe34Smrg $ECHO 660886dafe34Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 660986dafe34Smrg $ECHO "*** I have the capability to make that library automatically link in when" 661086dafe34Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 661186dafe34Smrg $ECHO "*** shared version of the library, which you do not appear to have" 661286dafe34Smrg $ECHO "*** because a test_compile did reveal that the linker did not use this one" 661386dafe34Smrg $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime." 661486dafe34Smrg fi 661586dafe34Smrg fi 661686dafe34Smrg else 661786dafe34Smrg droppeddeps=yes 661886dafe34Smrg $ECHO 661986dafe34Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 662086dafe34Smrg $ECHO "*** make it link in! You will probably need to install it or some" 662186dafe34Smrg $ECHO "*** library that it depends on before this library will be fully" 662286dafe34Smrg $ECHO "*** functional. Installing it before continuing would be even better." 662386dafe34Smrg fi 662486dafe34Smrg ;; 662586dafe34Smrg *) 662686dafe34Smrg newdeplibs="$newdeplibs $i" 662786dafe34Smrg ;; 662886dafe34Smrg esac 662986dafe34Smrg done 663086dafe34Smrg fi 663186dafe34Smrg ;; 663286dafe34Smrg file_magic*) 663386dafe34Smrg set dummy $deplibs_check_method; shift 663486dafe34Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 663586dafe34Smrg for a_deplib in $deplibs; do 663686dafe34Smrg case $a_deplib in 663786dafe34Smrg -l*) 663886dafe34Smrg func_stripname -l '' "$a_deplib" 663986dafe34Smrg name=$func_stripname_result 664086dafe34Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 664186dafe34Smrg case " $predeps $postdeps " in 664286dafe34Smrg *" $a_deplib "*) 664386dafe34Smrg newdeplibs="$newdeplibs $a_deplib" 664486dafe34Smrg a_deplib="" 664586dafe34Smrg ;; 664686dafe34Smrg esac 664786dafe34Smrg fi 664886dafe34Smrg if test -n "$a_deplib" ; then 664986dafe34Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 665086dafe34Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 665186dafe34Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 665286dafe34Smrg for potent_lib in $potential_libs; do 665386dafe34Smrg # Follow soft links. 665486dafe34Smrg if ls -lLd "$potent_lib" 2>/dev/null | 665586dafe34Smrg $GREP " -> " >/dev/null; then 665686dafe34Smrg continue 665786dafe34Smrg fi 665886dafe34Smrg # The statement above tries to avoid entering an 665986dafe34Smrg # endless loop below, in case of cyclic links. 666086dafe34Smrg # We might still enter an endless loop, since a link 666186dafe34Smrg # loop can be closed while we follow links, 666286dafe34Smrg # but so what? 666386dafe34Smrg potlib="$potent_lib" 666486dafe34Smrg while test -h "$potlib" 2>/dev/null; do 666586dafe34Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 666686dafe34Smrg case $potliblink in 666786dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 666886dafe34Smrg *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 666986dafe34Smrg esac 667086dafe34Smrg done 667186dafe34Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 667286dafe34Smrg $SED -e 10q | 667386dafe34Smrg $EGREP "$file_magic_regex" > /dev/null; then 667486dafe34Smrg newdeplibs="$newdeplibs $a_deplib" 667586dafe34Smrg a_deplib="" 667686dafe34Smrg break 2 667786dafe34Smrg fi 667886dafe34Smrg done 667986dafe34Smrg done 668086dafe34Smrg fi 668186dafe34Smrg if test -n "$a_deplib" ; then 668286dafe34Smrg droppeddeps=yes 668386dafe34Smrg $ECHO 668486dafe34Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 668586dafe34Smrg $ECHO "*** I have the capability to make that library automatically link in when" 668686dafe34Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 668786dafe34Smrg $ECHO "*** shared version of the library, which you do not appear to have" 668886dafe34Smrg $ECHO "*** because I did check the linker path looking for a file starting" 668986dafe34Smrg if test -z "$potlib" ; then 669086dafe34Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 669186dafe34Smrg else 669286dafe34Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 669386dafe34Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 669486dafe34Smrg fi 669586dafe34Smrg fi 669686dafe34Smrg ;; 669786dafe34Smrg *) 669886dafe34Smrg # Add a -L argument. 669986dafe34Smrg newdeplibs="$newdeplibs $a_deplib" 670086dafe34Smrg ;; 670186dafe34Smrg esac 670286dafe34Smrg done # Gone through all deplibs. 670386dafe34Smrg ;; 670486dafe34Smrg match_pattern*) 670586dafe34Smrg set dummy $deplibs_check_method; shift 670686dafe34Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 670786dafe34Smrg for a_deplib in $deplibs; do 670886dafe34Smrg case $a_deplib in 670986dafe34Smrg -l*) 671086dafe34Smrg func_stripname -l '' "$a_deplib" 671186dafe34Smrg name=$func_stripname_result 671286dafe34Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 671386dafe34Smrg case " $predeps $postdeps " in 671486dafe34Smrg *" $a_deplib "*) 671586dafe34Smrg newdeplibs="$newdeplibs $a_deplib" 671686dafe34Smrg a_deplib="" 671786dafe34Smrg ;; 671886dafe34Smrg esac 671986dafe34Smrg fi 672086dafe34Smrg if test -n "$a_deplib" ; then 672186dafe34Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 672286dafe34Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 672386dafe34Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 672486dafe34Smrg for potent_lib in $potential_libs; do 672586dafe34Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 672686dafe34Smrg if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ 672786dafe34Smrg $EGREP "$match_pattern_regex" > /dev/null; then 672886dafe34Smrg newdeplibs="$newdeplibs $a_deplib" 672986dafe34Smrg a_deplib="" 673086dafe34Smrg break 2 673186dafe34Smrg fi 673286dafe34Smrg done 673386dafe34Smrg done 673486dafe34Smrg fi 673586dafe34Smrg if test -n "$a_deplib" ; then 673686dafe34Smrg droppeddeps=yes 673786dafe34Smrg $ECHO 673886dafe34Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 673986dafe34Smrg $ECHO "*** I have the capability to make that library automatically link in when" 674086dafe34Smrg $ECHO "*** you link to this library. But I can only do this if you have a" 674186dafe34Smrg $ECHO "*** shared version of the library, which you do not appear to have" 674286dafe34Smrg $ECHO "*** because I did check the linker path looking for a file starting" 674386dafe34Smrg if test -z "$potlib" ; then 674486dafe34Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 674586dafe34Smrg else 674686dafe34Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 674786dafe34Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 674886dafe34Smrg fi 674986dafe34Smrg fi 675086dafe34Smrg ;; 675186dafe34Smrg *) 675286dafe34Smrg # Add a -L argument. 675386dafe34Smrg newdeplibs="$newdeplibs $a_deplib" 675486dafe34Smrg ;; 675586dafe34Smrg esac 675686dafe34Smrg done # Gone through all deplibs. 675786dafe34Smrg ;; 675886dafe34Smrg none | unknown | *) 675986dafe34Smrg newdeplibs="" 676086dafe34Smrg tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ 676186dafe34Smrg -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` 676286dafe34Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 676386dafe34Smrg for i in $predeps $postdeps ; do 676486dafe34Smrg # can't use Xsed below, because $i might contain '/' 676586dafe34Smrg tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` 676686dafe34Smrg done 676786dafe34Smrg fi 676886dafe34Smrg if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | 676986dafe34Smrg $GREP . >/dev/null; then 677086dafe34Smrg $ECHO 677186dafe34Smrg if test "X$deplibs_check_method" = "Xnone"; then 677286dafe34Smrg $ECHO "*** Warning: inter-library dependencies are not supported in this platform." 677386dafe34Smrg else 677486dafe34Smrg $ECHO "*** Warning: inter-library dependencies are not known to be supported." 677586dafe34Smrg fi 677686dafe34Smrg $ECHO "*** All declared inter-library dependencies are being dropped." 677786dafe34Smrg droppeddeps=yes 677886dafe34Smrg fi 677986dafe34Smrg ;; 678086dafe34Smrg esac 678186dafe34Smrg versuffix=$versuffix_save 678286dafe34Smrg major=$major_save 678386dafe34Smrg release=$release_save 678486dafe34Smrg libname=$libname_save 678586dafe34Smrg name=$name_save 678686dafe34Smrg 678786dafe34Smrg case $host in 678886dafe34Smrg *-*-rhapsody* | *-*-darwin1.[012]) 678986dafe34Smrg # On Rhapsody replace the C library with the System framework 679086dafe34Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 679186dafe34Smrg ;; 679286dafe34Smrg esac 679386dafe34Smrg 679486dafe34Smrg if test "$droppeddeps" = yes; then 679586dafe34Smrg if test "$module" = yes; then 679686dafe34Smrg $ECHO 679786dafe34Smrg $ECHO "*** Warning: libtool could not satisfy all declared inter-library" 679886dafe34Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 679986dafe34Smrg $ECHO "*** a static module, that should work as long as the dlopening" 680086dafe34Smrg $ECHO "*** application is linked with the -dlopen flag." 680186dafe34Smrg if test -z "$global_symbol_pipe"; then 680286dafe34Smrg $ECHO 680386dafe34Smrg $ECHO "*** However, this would only work if libtool was able to extract symbol" 680486dafe34Smrg $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" 680586dafe34Smrg $ECHO "*** not find such a program. So, this module is probably useless." 680686dafe34Smrg $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." 680786dafe34Smrg fi 680886dafe34Smrg if test "$build_old_libs" = no; then 680986dafe34Smrg oldlibs="$output_objdir/$libname.$libext" 681086dafe34Smrg build_libtool_libs=module 681186dafe34Smrg build_old_libs=yes 681286dafe34Smrg else 681386dafe34Smrg build_libtool_libs=no 681486dafe34Smrg fi 681586dafe34Smrg else 681686dafe34Smrg $ECHO "*** The inter-library dependencies that have been dropped here will be" 681786dafe34Smrg $ECHO "*** automatically added whenever a program is linked with this library" 681886dafe34Smrg $ECHO "*** or is declared to -dlopen it." 681986dafe34Smrg 682086dafe34Smrg if test "$allow_undefined" = no; then 682186dafe34Smrg $ECHO 682286dafe34Smrg $ECHO "*** Since this library must not contain undefined symbols," 682386dafe34Smrg $ECHO "*** because either the platform does not support them or" 682486dafe34Smrg $ECHO "*** it was explicitly requested with -no-undefined," 682586dafe34Smrg $ECHO "*** libtool will only create a static version of it." 682686dafe34Smrg if test "$build_old_libs" = no; then 682786dafe34Smrg oldlibs="$output_objdir/$libname.$libext" 682886dafe34Smrg build_libtool_libs=module 682986dafe34Smrg build_old_libs=yes 683086dafe34Smrg else 683186dafe34Smrg build_libtool_libs=no 683286dafe34Smrg fi 683386dafe34Smrg fi 683486dafe34Smrg fi 683586dafe34Smrg fi 683686dafe34Smrg # Done checking deplibs! 683786dafe34Smrg deplibs=$newdeplibs 683886dafe34Smrg fi 683986dafe34Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 684086dafe34Smrg case $host in 684186dafe34Smrg *-*-darwin*) 684286dafe34Smrg newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684386dafe34Smrg new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684486dafe34Smrg deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 684586dafe34Smrg ;; 684686dafe34Smrg esac 684786dafe34Smrg 684886dafe34Smrg # move library search paths that coincide with paths to not yet 684986dafe34Smrg # installed libraries to the beginning of the library search list 685086dafe34Smrg new_libs= 685186dafe34Smrg for path in $notinst_path; do 685286dafe34Smrg case " $new_libs " in 685386dafe34Smrg *" -L$path/$objdir "*) ;; 685486dafe34Smrg *) 685586dafe34Smrg case " $deplibs " in 685686dafe34Smrg *" -L$path/$objdir "*) 685786dafe34Smrg new_libs="$new_libs -L$path/$objdir" ;; 685886dafe34Smrg esac 685986dafe34Smrg ;; 686086dafe34Smrg esac 686186dafe34Smrg done 686286dafe34Smrg for deplib in $deplibs; do 686386dafe34Smrg case $deplib in 686486dafe34Smrg -L*) 686586dafe34Smrg case " $new_libs " in 686686dafe34Smrg *" $deplib "*) ;; 686786dafe34Smrg *) new_libs="$new_libs $deplib" ;; 686886dafe34Smrg esac 686986dafe34Smrg ;; 687086dafe34Smrg *) new_libs="$new_libs $deplib" ;; 687186dafe34Smrg esac 687286dafe34Smrg done 687386dafe34Smrg deplibs="$new_libs" 687486dafe34Smrg 687586dafe34Smrg # All the library-specific variables (install_libdir is set above). 687686dafe34Smrg library_names= 687786dafe34Smrg old_library= 687886dafe34Smrg dlname= 687986dafe34Smrg 688086dafe34Smrg # Test again, we may have decided not to build it any more 688186dafe34Smrg if test "$build_libtool_libs" = yes; then 688286dafe34Smrg if test "$hardcode_into_libs" = yes; then 688386dafe34Smrg # Hardcode the library paths 688486dafe34Smrg hardcode_libdirs= 688586dafe34Smrg dep_rpath= 688686dafe34Smrg rpath="$finalize_rpath" 688786dafe34Smrg test "$mode" != relink && rpath="$compile_rpath$rpath" 688886dafe34Smrg for libdir in $rpath; do 688986dafe34Smrg if test -n "$hardcode_libdir_flag_spec"; then 689086dafe34Smrg if test -n "$hardcode_libdir_separator"; then 689186dafe34Smrg if test -z "$hardcode_libdirs"; then 689286dafe34Smrg hardcode_libdirs="$libdir" 689386dafe34Smrg else 689486dafe34Smrg # Just accumulate the unique libdirs. 689586dafe34Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 689686dafe34Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 689786dafe34Smrg ;; 689886dafe34Smrg *) 689986dafe34Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 690086dafe34Smrg ;; 690186dafe34Smrg esac 690286dafe34Smrg fi 690386dafe34Smrg else 690486dafe34Smrg eval flag=\"$hardcode_libdir_flag_spec\" 690586dafe34Smrg dep_rpath="$dep_rpath $flag" 690686dafe34Smrg fi 690786dafe34Smrg elif test -n "$runpath_var"; then 690886dafe34Smrg case "$perm_rpath " in 690986dafe34Smrg *" $libdir "*) ;; 691086dafe34Smrg *) perm_rpath="$perm_rpath $libdir" ;; 691186dafe34Smrg esac 691286dafe34Smrg fi 691386dafe34Smrg done 691486dafe34Smrg # Substitute the hardcoded libdirs into the rpath. 691586dafe34Smrg if test -n "$hardcode_libdir_separator" && 691686dafe34Smrg test -n "$hardcode_libdirs"; then 691786dafe34Smrg libdir="$hardcode_libdirs" 691886dafe34Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 691986dafe34Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 692086dafe34Smrg else 692186dafe34Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 692286dafe34Smrg fi 692386dafe34Smrg fi 692486dafe34Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 692586dafe34Smrg # We should set the runpath_var. 692686dafe34Smrg rpath= 692786dafe34Smrg for dir in $perm_rpath; do 692886dafe34Smrg rpath="$rpath$dir:" 692986dafe34Smrg done 693086dafe34Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 693186dafe34Smrg fi 693286dafe34Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 693386dafe34Smrg fi 693476888252Smrg 693586dafe34Smrg shlibpath="$finalize_shlibpath" 693686dafe34Smrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 693786dafe34Smrg if test -n "$shlibpath"; then 693886dafe34Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 693986dafe34Smrg fi 694076888252Smrg 694186dafe34Smrg # Get the real and link names of the library. 694286dafe34Smrg eval shared_ext=\"$shrext_cmds\" 694386dafe34Smrg eval library_names=\"$library_names_spec\" 694486dafe34Smrg set dummy $library_names 694586dafe34Smrg shift 694686dafe34Smrg realname="$1" 694786dafe34Smrg shift 694876888252Smrg 694986dafe34Smrg if test -n "$soname_spec"; then 695086dafe34Smrg eval soname=\"$soname_spec\" 695186dafe34Smrg else 695286dafe34Smrg soname="$realname" 695386dafe34Smrg fi 695486dafe34Smrg if test -z "$dlname"; then 695586dafe34Smrg dlname=$soname 695686dafe34Smrg fi 695776888252Smrg 695886dafe34Smrg lib="$output_objdir/$realname" 695986dafe34Smrg linknames= 696086dafe34Smrg for link 696186dafe34Smrg do 696286dafe34Smrg linknames="$linknames $link" 696386dafe34Smrg done 696476888252Smrg 696586dafe34Smrg # Use standard objects if they are pic 696686dafe34Smrg test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 696786dafe34Smrg test "X$libobjs" = "X " && libobjs= 696876888252Smrg 696986dafe34Smrg delfiles= 697086dafe34Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 697186dafe34Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 697286dafe34Smrg export_symbols="$output_objdir/$libname.uexp" 697386dafe34Smrg delfiles="$delfiles $export_symbols" 697486dafe34Smrg fi 697576888252Smrg 697686dafe34Smrg orig_export_symbols= 697786dafe34Smrg case $host_os in 697886dafe34Smrg cygwin* | mingw* | cegcc*) 697986dafe34Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 698086dafe34Smrg # exporting using user supplied symfile 698186dafe34Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 698286dafe34Smrg # and it's NOT already a .def file. Must figure out 698386dafe34Smrg # which of the given symbols are data symbols and tag 698486dafe34Smrg # them as such. So, trigger use of export_symbols_cmds. 698586dafe34Smrg # export_symbols gets reassigned inside the "prepare 698686dafe34Smrg # the list of exported symbols" if statement, so the 698786dafe34Smrg # include_expsyms logic still works. 698886dafe34Smrg orig_export_symbols="$export_symbols" 698986dafe34Smrg export_symbols= 699086dafe34Smrg always_export_symbols=yes 699186dafe34Smrg fi 699286dafe34Smrg fi 699386dafe34Smrg ;; 699486dafe34Smrg esac 699576888252Smrg 699686dafe34Smrg # Prepare the list of exported symbols 699786dafe34Smrg if test -z "$export_symbols"; then 699886dafe34Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 699986dafe34Smrg func_verbose "generating symbol list for \`$libname.la'" 700086dafe34Smrg export_symbols="$output_objdir/$libname.exp" 700186dafe34Smrg $opt_dry_run || $RM $export_symbols 700286dafe34Smrg cmds=$export_symbols_cmds 700386dafe34Smrg save_ifs="$IFS"; IFS='~' 700486dafe34Smrg for cmd in $cmds; do 700586dafe34Smrg IFS="$save_ifs" 700686dafe34Smrg eval cmd=\"$cmd\" 700786dafe34Smrg func_len " $cmd" 700886dafe34Smrg len=$func_len_result 700986dafe34Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 701086dafe34Smrg func_show_eval "$cmd" 'exit $?' 701186dafe34Smrg skipped_export=false 701286dafe34Smrg else 701386dafe34Smrg # The command line is too long to execute in one step. 701486dafe34Smrg func_verbose "using reloadable object file for export list..." 701586dafe34Smrg skipped_export=: 701686dafe34Smrg # Break out early, otherwise skipped_export may be 701786dafe34Smrg # set to false by a later but shorter cmd. 701886dafe34Smrg break 701986dafe34Smrg fi 702086dafe34Smrg done 702186dafe34Smrg IFS="$save_ifs" 702286dafe34Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 702386dafe34Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 702486dafe34Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 702586dafe34Smrg fi 702686dafe34Smrg fi 702786dafe34Smrg fi 702876888252Smrg 702986dafe34Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 703086dafe34Smrg tmp_export_symbols="$export_symbols" 703186dafe34Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 703286dafe34Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 703386dafe34Smrg fi 703476888252Smrg 703586dafe34Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 703686dafe34Smrg # The given exports_symbols file has to be filtered, so filter it. 703786dafe34Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 703886dafe34Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 703986dafe34Smrg # 's' commands which not all seds can handle. GNU sed should be fine 704086dafe34Smrg # though. Also, the filter scales superlinearly with the number of 704186dafe34Smrg # global variables. join(1) would be nice here, but unfortunately 704286dafe34Smrg # isn't a blessed tool. 704386dafe34Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 704486dafe34Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 704586dafe34Smrg export_symbols=$output_objdir/$libname.def 704686dafe34Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 704776888252Smrg fi 704876888252Smrg 704986dafe34Smrg tmp_deplibs= 705086dafe34Smrg for test_deplib in $deplibs; do 705186dafe34Smrg case " $convenience " in 705286dafe34Smrg *" $test_deplib "*) ;; 705386dafe34Smrg *) 705486dafe34Smrg tmp_deplibs="$tmp_deplibs $test_deplib" 705586dafe34Smrg ;; 705686dafe34Smrg esac 705786dafe34Smrg done 705886dafe34Smrg deplibs="$tmp_deplibs" 705976888252Smrg 706086dafe34Smrg if test -n "$convenience"; then 706186dafe34Smrg if test -n "$whole_archive_flag_spec" && 706286dafe34Smrg test "$compiler_needs_object" = yes && 706386dafe34Smrg test -z "$libobjs"; then 706486dafe34Smrg # extract the archives, so we have objects to list. 706586dafe34Smrg # TODO: could optimize this to just extract one archive. 706686dafe34Smrg whole_archive_flag_spec= 706786dafe34Smrg fi 706886dafe34Smrg if test -n "$whole_archive_flag_spec"; then 706986dafe34Smrg save_libobjs=$libobjs 707086dafe34Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 707186dafe34Smrg test "X$libobjs" = "X " && libobjs= 707286dafe34Smrg else 707386dafe34Smrg gentop="$output_objdir/${outputname}x" 707486dafe34Smrg generated="$generated $gentop" 707576888252Smrg 707686dafe34Smrg func_extract_archives $gentop $convenience 707786dafe34Smrg libobjs="$libobjs $func_extract_archives_result" 707886dafe34Smrg test "X$libobjs" = "X " && libobjs= 707986dafe34Smrg fi 708086dafe34Smrg fi 708176888252Smrg 708286dafe34Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 708386dafe34Smrg eval flag=\"$thread_safe_flag_spec\" 708486dafe34Smrg linker_flags="$linker_flags $flag" 708586dafe34Smrg fi 708676888252Smrg 708786dafe34Smrg # Make a backup of the uninstalled library when relinking 708886dafe34Smrg if test "$mode" = relink; then 708986dafe34Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 709076888252Smrg fi 709176888252Smrg 709286dafe34Smrg # Do each of the archive commands. 709386dafe34Smrg if test "$module" = yes && test -n "$module_cmds" ; then 709486dafe34Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 709586dafe34Smrg eval test_cmds=\"$module_expsym_cmds\" 709686dafe34Smrg cmds=$module_expsym_cmds 709786dafe34Smrg else 709886dafe34Smrg eval test_cmds=\"$module_cmds\" 709986dafe34Smrg cmds=$module_cmds 710086dafe34Smrg fi 710186dafe34Smrg else 710286dafe34Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 710386dafe34Smrg eval test_cmds=\"$archive_expsym_cmds\" 710486dafe34Smrg cmds=$archive_expsym_cmds 710586dafe34Smrg else 710686dafe34Smrg eval test_cmds=\"$archive_cmds\" 710786dafe34Smrg cmds=$archive_cmds 710886dafe34Smrg fi 710976888252Smrg fi 711076888252Smrg 711186dafe34Smrg if test "X$skipped_export" != "X:" && 711286dafe34Smrg func_len " $test_cmds" && 711386dafe34Smrg len=$func_len_result && 711486dafe34Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 711586dafe34Smrg : 711686dafe34Smrg else 711786dafe34Smrg # The command line is too long to link in one step, link piecewise 711886dafe34Smrg # or, if using GNU ld and skipped_export is not :, use a linker 711986dafe34Smrg # script. 712076888252Smrg 712186dafe34Smrg # Save the value of $output and $libobjs because we want to 712286dafe34Smrg # use them later. If we have whole_archive_flag_spec, we 712386dafe34Smrg # want to use save_libobjs as it was before 712486dafe34Smrg # whole_archive_flag_spec was expanded, because we can't 712586dafe34Smrg # assume the linker understands whole_archive_flag_spec. 712686dafe34Smrg # This may have to be revisited, in case too many 712786dafe34Smrg # convenience libraries get linked in and end up exceeding 712886dafe34Smrg # the spec. 712986dafe34Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 713086dafe34Smrg save_libobjs=$libobjs 713186dafe34Smrg fi 713286dafe34Smrg save_output=$output 713386dafe34Smrg output_la=`$ECHO "X$output" | $Xsed -e "$basename"` 713476888252Smrg 713586dafe34Smrg # Clear the reloadable object creation command queue and 713686dafe34Smrg # initialize k to one. 713786dafe34Smrg test_cmds= 713886dafe34Smrg concat_cmds= 713986dafe34Smrg objlist= 714086dafe34Smrg last_robj= 714186dafe34Smrg k=1 714276888252Smrg 714386dafe34Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 714486dafe34Smrg output=${output_objdir}/${output_la}.lnkscript 714586dafe34Smrg func_verbose "creating GNU ld script: $output" 714686dafe34Smrg $ECHO 'INPUT (' > $output 714786dafe34Smrg for obj in $save_libobjs 714886dafe34Smrg do 714986dafe34Smrg $ECHO "$obj" >> $output 715086dafe34Smrg done 715186dafe34Smrg $ECHO ')' >> $output 715286dafe34Smrg delfiles="$delfiles $output" 715386dafe34Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 715486dafe34Smrg output=${output_objdir}/${output_la}.lnk 715586dafe34Smrg func_verbose "creating linker input file list: $output" 715686dafe34Smrg : > $output 715786dafe34Smrg set x $save_libobjs 715886dafe34Smrg shift 715986dafe34Smrg firstobj= 716086dafe34Smrg if test "$compiler_needs_object" = yes; then 716186dafe34Smrg firstobj="$1 " 716286dafe34Smrg shift 716386dafe34Smrg fi 716486dafe34Smrg for obj 716586dafe34Smrg do 716686dafe34Smrg $ECHO "$obj" >> $output 716786dafe34Smrg done 716886dafe34Smrg delfiles="$delfiles $output" 716986dafe34Smrg output=$firstobj\"$file_list_spec$output\" 717086dafe34Smrg else 717186dafe34Smrg if test -n "$save_libobjs"; then 717286dafe34Smrg func_verbose "creating reloadable object files..." 717386dafe34Smrg output=$output_objdir/$output_la-${k}.$objext 717486dafe34Smrg eval test_cmds=\"$reload_cmds\" 717586dafe34Smrg func_len " $test_cmds" 717686dafe34Smrg len0=$func_len_result 717786dafe34Smrg len=$len0 717886dafe34Smrg 717986dafe34Smrg # Loop over the list of objects to be linked. 718086dafe34Smrg for obj in $save_libobjs 718186dafe34Smrg do 718286dafe34Smrg func_len " $obj" 718386dafe34Smrg func_arith $len + $func_len_result 718486dafe34Smrg len=$func_arith_result 718586dafe34Smrg if test "X$objlist" = X || 718686dafe34Smrg test "$len" -lt "$max_cmd_len"; then 718786dafe34Smrg func_append objlist " $obj" 718886dafe34Smrg else 718986dafe34Smrg # The command $test_cmds is almost too long, add a 719086dafe34Smrg # command to the queue. 719186dafe34Smrg if test "$k" -eq 1 ; then 719286dafe34Smrg # The first file doesn't have a previous command to add. 719386dafe34Smrg eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 719486dafe34Smrg else 719586dafe34Smrg # All subsequent reloadable object files will link in 719686dafe34Smrg # the last one created. 719786dafe34Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" 719886dafe34Smrg fi 719986dafe34Smrg last_robj=$output_objdir/$output_la-${k}.$objext 720086dafe34Smrg func_arith $k + 1 720186dafe34Smrg k=$func_arith_result 720286dafe34Smrg output=$output_objdir/$output_la-${k}.$objext 720386dafe34Smrg objlist=$obj 720486dafe34Smrg func_len " $last_robj" 720586dafe34Smrg func_arith $len0 + $func_len_result 720686dafe34Smrg len=$func_arith_result 720786dafe34Smrg fi 720886dafe34Smrg done 720986dafe34Smrg # Handle the remaining objects by creating one last 721086dafe34Smrg # reloadable object file. All subsequent reloadable object 721186dafe34Smrg # files will link in the last one created. 721286dafe34Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 721386dafe34Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 721486dafe34Smrg if test -n "$last_robj"; then 721586dafe34Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 721686dafe34Smrg fi 721786dafe34Smrg delfiles="$delfiles $output" 721876888252Smrg 721986dafe34Smrg else 722086dafe34Smrg output= 722186dafe34Smrg fi 722276888252Smrg 722386dafe34Smrg if ${skipped_export-false}; then 722486dafe34Smrg func_verbose "generating symbol list for \`$libname.la'" 722586dafe34Smrg export_symbols="$output_objdir/$libname.exp" 722686dafe34Smrg $opt_dry_run || $RM $export_symbols 722786dafe34Smrg libobjs=$output 722886dafe34Smrg # Append the command to create the export file. 722986dafe34Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 723086dafe34Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 723186dafe34Smrg if test -n "$last_robj"; then 723286dafe34Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 723386dafe34Smrg fi 723486dafe34Smrg fi 723576888252Smrg 723686dafe34Smrg test -n "$save_libobjs" && 723786dafe34Smrg func_verbose "creating a temporary reloadable object file: $output" 723876888252Smrg 723986dafe34Smrg # Loop through the commands generated above and execute them. 724086dafe34Smrg save_ifs="$IFS"; IFS='~' 724186dafe34Smrg for cmd in $concat_cmds; do 724286dafe34Smrg IFS="$save_ifs" 724386dafe34Smrg $opt_silent || { 724486dafe34Smrg func_quote_for_expand "$cmd" 724586dafe34Smrg eval "func_echo $func_quote_for_expand_result" 724686dafe34Smrg } 724786dafe34Smrg $opt_dry_run || eval "$cmd" || { 724886dafe34Smrg lt_exit=$? 724986dafe34Smrg 725086dafe34Smrg # Restore the uninstalled library and exit 725186dafe34Smrg if test "$mode" = relink; then 725286dafe34Smrg ( cd "$output_objdir" && \ 725386dafe34Smrg $RM "${realname}T" && \ 725486dafe34Smrg $MV "${realname}U" "$realname" ) 725586dafe34Smrg fi 725676888252Smrg 725786dafe34Smrg exit $lt_exit 725886dafe34Smrg } 725986dafe34Smrg done 726086dafe34Smrg IFS="$save_ifs" 726186dafe34Smrg 726286dafe34Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 726386dafe34Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 726486dafe34Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 726576888252Smrg fi 726676888252Smrg fi 726776888252Smrg 726886dafe34Smrg if ${skipped_export-false}; then 726986dafe34Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 727086dafe34Smrg tmp_export_symbols="$export_symbols" 727186dafe34Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 727286dafe34Smrg $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' 727386dafe34Smrg fi 727476888252Smrg 727586dafe34Smrg if test -n "$orig_export_symbols"; then 727686dafe34Smrg # The given exports_symbols file has to be filtered, so filter it. 727786dafe34Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 727886dafe34Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 727986dafe34Smrg # 's' commands which not all seds can handle. GNU sed should be fine 728086dafe34Smrg # though. Also, the filter scales superlinearly with the number of 728186dafe34Smrg # global variables. join(1) would be nice here, but unfortunately 728286dafe34Smrg # isn't a blessed tool. 728386dafe34Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 728486dafe34Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 728586dafe34Smrg export_symbols=$output_objdir/$libname.def 728686dafe34Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 728786dafe34Smrg fi 728886dafe34Smrg fi 728976888252Smrg 729086dafe34Smrg libobjs=$output 729186dafe34Smrg # Restore the value of output. 729286dafe34Smrg output=$save_output 729376888252Smrg 729486dafe34Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 729586dafe34Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 729686dafe34Smrg test "X$libobjs" = "X " && libobjs= 729786dafe34Smrg fi 729886dafe34Smrg # Expand the library linking commands again to reset the 729986dafe34Smrg # value of $libobjs for piecewise linking. 730086dafe34Smrg 730186dafe34Smrg # Do each of the archive commands. 730286dafe34Smrg if test "$module" = yes && test -n "$module_cmds" ; then 730386dafe34Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 730486dafe34Smrg cmds=$module_expsym_cmds 730576888252Smrg else 730686dafe34Smrg cmds=$module_cmds 730776888252Smrg fi 730876888252Smrg else 730986dafe34Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 731086dafe34Smrg cmds=$archive_expsym_cmds 731186dafe34Smrg else 731286dafe34Smrg cmds=$archive_cmds 731386dafe34Smrg fi 731476888252Smrg fi 731576888252Smrg fi 731676888252Smrg 731786dafe34Smrg if test -n "$delfiles"; then 731886dafe34Smrg # Append the command to remove temporary files to $cmds. 731986dafe34Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 732086dafe34Smrg fi 732176888252Smrg 732286dafe34Smrg # Add any objects from preloaded convenience libraries 732386dafe34Smrg if test -n "$dlprefiles"; then 732486dafe34Smrg gentop="$output_objdir/${outputname}x" 732586dafe34Smrg generated="$generated $gentop" 732676888252Smrg 732786dafe34Smrg func_extract_archives $gentop $dlprefiles 732886dafe34Smrg libobjs="$libobjs $func_extract_archives_result" 732986dafe34Smrg test "X$libobjs" = "X " && libobjs= 733076888252Smrg fi 733176888252Smrg 733286dafe34Smrg save_ifs="$IFS"; IFS='~' 733386dafe34Smrg for cmd in $cmds; do 733486dafe34Smrg IFS="$save_ifs" 733586dafe34Smrg eval cmd=\"$cmd\" 733686dafe34Smrg $opt_silent || { 733786dafe34Smrg func_quote_for_expand "$cmd" 733886dafe34Smrg eval "func_echo $func_quote_for_expand_result" 733986dafe34Smrg } 734086dafe34Smrg $opt_dry_run || eval "$cmd" || { 734186dafe34Smrg lt_exit=$? 734276888252Smrg 734386dafe34Smrg # Restore the uninstalled library and exit 734486dafe34Smrg if test "$mode" = relink; then 734586dafe34Smrg ( cd "$output_objdir" && \ 734686dafe34Smrg $RM "${realname}T" && \ 734786dafe34Smrg $MV "${realname}U" "$realname" ) 734886dafe34Smrg fi 734986dafe34Smrg 735086dafe34Smrg exit $lt_exit 735186dafe34Smrg } 735286dafe34Smrg done 735386dafe34Smrg IFS="$save_ifs" 735486dafe34Smrg 735586dafe34Smrg # Restore the uninstalled library and exit 735686dafe34Smrg if test "$mode" = relink; then 735786dafe34Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 735886dafe34Smrg 735986dafe34Smrg if test -n "$convenience"; then 736086dafe34Smrg if test -z "$whole_archive_flag_spec"; then 736186dafe34Smrg func_show_eval '${RM}r "$gentop"' 736276888252Smrg fi 736376888252Smrg fi 736476888252Smrg 736586dafe34Smrg exit $EXIT_SUCCESS 736686dafe34Smrg fi 736776888252Smrg 736886dafe34Smrg # Create links to the real library. 736986dafe34Smrg for linkname in $linknames; do 737086dafe34Smrg if test "$realname" != "$linkname"; then 737186dafe34Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 737286dafe34Smrg fi 737386dafe34Smrg done 737486dafe34Smrg 737586dafe34Smrg # If -module or -export-dynamic was specified, set the dlname. 737686dafe34Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 737786dafe34Smrg # On all known operating systems, these are identical. 737886dafe34Smrg dlname="$soname" 737986dafe34Smrg fi 738086dafe34Smrg fi 738186dafe34Smrg ;; 738286dafe34Smrg 738386dafe34Smrg obj) 738486dafe34Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 738586dafe34Smrg func_warning "\`-dlopen' is ignored for objects" 738686dafe34Smrg fi 738786dafe34Smrg 738886dafe34Smrg case " $deplibs" in 738986dafe34Smrg *\ -l* | *\ -L*) 739086dafe34Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 739186dafe34Smrg esac 739286dafe34Smrg 739386dafe34Smrg test -n "$rpath" && \ 739486dafe34Smrg func_warning "\`-rpath' is ignored for objects" 739586dafe34Smrg 739686dafe34Smrg test -n "$xrpath" && \ 739786dafe34Smrg func_warning "\`-R' is ignored for objects" 739886dafe34Smrg 739986dafe34Smrg test -n "$vinfo" && \ 740086dafe34Smrg func_warning "\`-version-info' is ignored for objects" 740186dafe34Smrg 740286dafe34Smrg test -n "$release" && \ 740386dafe34Smrg func_warning "\`-release' is ignored for objects" 740486dafe34Smrg 740586dafe34Smrg case $output in 740686dafe34Smrg *.lo) 740786dafe34Smrg test -n "$objs$old_deplibs" && \ 740886dafe34Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 740986dafe34Smrg 741086dafe34Smrg libobj=$output 741186dafe34Smrg func_lo2o "$libobj" 741286dafe34Smrg obj=$func_lo2o_result 741386dafe34Smrg ;; 741486dafe34Smrg *) 741586dafe34Smrg libobj= 741686dafe34Smrg obj="$output" 741786dafe34Smrg ;; 741886dafe34Smrg esac 741986dafe34Smrg 742086dafe34Smrg # Delete the old objects. 742186dafe34Smrg $opt_dry_run || $RM $obj $libobj 742286dafe34Smrg 742386dafe34Smrg # Objects from convenience libraries. This assumes 742486dafe34Smrg # single-version convenience libraries. Whenever we create 742586dafe34Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 742686dafe34Smrg # the extraction. 742786dafe34Smrg reload_conv_objs= 742886dafe34Smrg gentop= 742986dafe34Smrg # reload_cmds runs $LD directly, so let us get rid of 743086dafe34Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 743186dafe34Smrg # turning comma into space.. 743286dafe34Smrg wl= 743386dafe34Smrg 743486dafe34Smrg if test -n "$convenience"; then 743586dafe34Smrg if test -n "$whole_archive_flag_spec"; then 743686dafe34Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 743786dafe34Smrg reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 743886dafe34Smrg else 743986dafe34Smrg gentop="$output_objdir/${obj}x" 744086dafe34Smrg generated="$generated $gentop" 744186dafe34Smrg 744286dafe34Smrg func_extract_archives $gentop $convenience 744386dafe34Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 744486dafe34Smrg fi 744586dafe34Smrg fi 744676888252Smrg 744786dafe34Smrg # Create the old-style object. 744886dafe34Smrg 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 744976888252Smrg 745086dafe34Smrg output="$obj" 745186dafe34Smrg func_execute_cmds "$reload_cmds" 'exit $?' 745276888252Smrg 745386dafe34Smrg # Exit if we aren't doing a library object file. 745486dafe34Smrg if test -z "$libobj"; then 745586dafe34Smrg if test -n "$gentop"; then 745686dafe34Smrg func_show_eval '${RM}r "$gentop"' 745786dafe34Smrg fi 745876888252Smrg 745986dafe34Smrg exit $EXIT_SUCCESS 746086dafe34Smrg fi 746176888252Smrg 746286dafe34Smrg if test "$build_libtool_libs" != yes; then 746386dafe34Smrg if test -n "$gentop"; then 746486dafe34Smrg func_show_eval '${RM}r "$gentop"' 746586dafe34Smrg fi 746676888252Smrg 746786dafe34Smrg # Create an invalid libtool object if no PIC, so that we don't 746886dafe34Smrg # accidentally link it into a program. 746986dafe34Smrg # $show "echo timestamp > $libobj" 747086dafe34Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 747186dafe34Smrg exit $EXIT_SUCCESS 747286dafe34Smrg fi 747376888252Smrg 747486dafe34Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 747586dafe34Smrg # Only do commands if we really have different PIC objects. 747686dafe34Smrg reload_objs="$libobjs $reload_conv_objs" 747786dafe34Smrg output="$libobj" 747886dafe34Smrg func_execute_cmds "$reload_cmds" 'exit $?' 747976888252Smrg fi 748076888252Smrg 748186dafe34Smrg if test -n "$gentop"; then 748286dafe34Smrg func_show_eval '${RM}r "$gentop"' 748386dafe34Smrg fi 748476888252Smrg 748586dafe34Smrg exit $EXIT_SUCCESS 748686dafe34Smrg ;; 748776888252Smrg 748886dafe34Smrg prog) 748986dafe34Smrg case $host in 749086dafe34Smrg *cygwin*) func_stripname '' '.exe' "$output" 749186dafe34Smrg output=$func_stripname_result.exe;; 749276888252Smrg esac 749386dafe34Smrg test -n "$vinfo" && \ 749486dafe34Smrg func_warning "\`-version-info' is ignored for programs" 749576888252Smrg 749686dafe34Smrg test -n "$release" && \ 749786dafe34Smrg func_warning "\`-release' is ignored for programs" 749876888252Smrg 749986dafe34Smrg test "$preload" = yes \ 750086dafe34Smrg && test "$dlopen_support" = unknown \ 750186dafe34Smrg && test "$dlopen_self" = unknown \ 750286dafe34Smrg && test "$dlopen_self_static" = unknown && \ 750386dafe34Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 750476888252Smrg 750586dafe34Smrg case $host in 750686dafe34Smrg *-*-rhapsody* | *-*-darwin1.[012]) 750786dafe34Smrg # On Rhapsody replace the C library is the System framework 750886dafe34Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 750986dafe34Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` 751076888252Smrg ;; 751176888252Smrg esac 751276888252Smrg 751386dafe34Smrg case $host in 751486dafe34Smrg *-*-darwin*) 751586dafe34Smrg # Don't allow lazy linking, it breaks C++ global constructors 751686dafe34Smrg # But is supposedly fixed on 10.4 or later (yay!). 751786dafe34Smrg if test "$tagname" = CXX ; then 751886dafe34Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 751986dafe34Smrg 10.[0123]) 752086dafe34Smrg compile_command="$compile_command ${wl}-bind_at_load" 752186dafe34Smrg finalize_command="$finalize_command ${wl}-bind_at_load" 752286dafe34Smrg ;; 752386dafe34Smrg esac 752486dafe34Smrg fi 752586dafe34Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 752686dafe34Smrg compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 752786dafe34Smrg finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` 752876888252Smrg ;; 752976888252Smrg esac 753076888252Smrg 753176888252Smrg 753286dafe34Smrg # move library search paths that coincide with paths to not yet 753386dafe34Smrg # installed libraries to the beginning of the library search list 753486dafe34Smrg new_libs= 753586dafe34Smrg for path in $notinst_path; do 753686dafe34Smrg case " $new_libs " in 753786dafe34Smrg *" -L$path/$objdir "*) ;; 753876888252Smrg *) 753986dafe34Smrg case " $compile_deplibs " in 754086dafe34Smrg *" -L$path/$objdir "*) 754186dafe34Smrg new_libs="$new_libs -L$path/$objdir" ;; 754286dafe34Smrg esac 754376888252Smrg ;; 754476888252Smrg esac 754576888252Smrg done 754686dafe34Smrg for deplib in $compile_deplibs; do 754786dafe34Smrg case $deplib in 754886dafe34Smrg -L*) 754986dafe34Smrg case " $new_libs " in 755086dafe34Smrg *" $deplib "*) ;; 755186dafe34Smrg *) new_libs="$new_libs $deplib" ;; 755286dafe34Smrg esac 755386dafe34Smrg ;; 755486dafe34Smrg *) new_libs="$new_libs $deplib" ;; 755586dafe34Smrg esac 755686dafe34Smrg done 755786dafe34Smrg compile_deplibs="$new_libs" 755876888252Smrg 755976888252Smrg 756086dafe34Smrg compile_command="$compile_command $compile_deplibs" 756186dafe34Smrg finalize_command="$finalize_command $finalize_deplibs" 756276888252Smrg 756386dafe34Smrg if test -n "$rpath$xrpath"; then 756486dafe34Smrg # If the user specified any rpath flags, then add them. 756586dafe34Smrg for libdir in $rpath $xrpath; do 756686dafe34Smrg # This is the magic to use -rpath. 756786dafe34Smrg case "$finalize_rpath " in 756886dafe34Smrg *" $libdir "*) ;; 756986dafe34Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 757086dafe34Smrg esac 757186dafe34Smrg done 757286dafe34Smrg fi 757376888252Smrg 757486dafe34Smrg # Now hardcode the library paths 757586dafe34Smrg rpath= 757686dafe34Smrg hardcode_libdirs= 757786dafe34Smrg for libdir in $compile_rpath $finalize_rpath; do 757886dafe34Smrg if test -n "$hardcode_libdir_flag_spec"; then 757986dafe34Smrg if test -n "$hardcode_libdir_separator"; then 758086dafe34Smrg if test -z "$hardcode_libdirs"; then 758186dafe34Smrg hardcode_libdirs="$libdir" 758286dafe34Smrg else 758386dafe34Smrg # Just accumulate the unique libdirs. 758486dafe34Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 758586dafe34Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 758686dafe34Smrg ;; 758786dafe34Smrg *) 758886dafe34Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 758986dafe34Smrg ;; 759086dafe34Smrg esac 759186dafe34Smrg fi 759286dafe34Smrg else 759386dafe34Smrg eval flag=\"$hardcode_libdir_flag_spec\" 759486dafe34Smrg rpath="$rpath $flag" 759586dafe34Smrg fi 759686dafe34Smrg elif test -n "$runpath_var"; then 759786dafe34Smrg case "$perm_rpath " in 759876888252Smrg *" $libdir "*) ;; 759986dafe34Smrg *) perm_rpath="$perm_rpath $libdir" ;; 760076888252Smrg esac 760186dafe34Smrg fi 760286dafe34Smrg case $host in 760386dafe34Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 760486dafe34Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 760586dafe34Smrg case :$dllsearchpath: in 760686dafe34Smrg *":$libdir:"*) ;; 760786dafe34Smrg ::) dllsearchpath=$libdir;; 760886dafe34Smrg *) dllsearchpath="$dllsearchpath:$libdir";; 760986dafe34Smrg esac 761086dafe34Smrg case :$dllsearchpath: in 761186dafe34Smrg *":$testbindir:"*) ;; 761286dafe34Smrg ::) dllsearchpath=$testbindir;; 761386dafe34Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 761486dafe34Smrg esac 761586dafe34Smrg ;; 761686dafe34Smrg esac 761786dafe34Smrg done 761886dafe34Smrg # Substitute the hardcoded libdirs into the rpath. 761986dafe34Smrg if test -n "$hardcode_libdir_separator" && 762086dafe34Smrg test -n "$hardcode_libdirs"; then 762186dafe34Smrg libdir="$hardcode_libdirs" 762286dafe34Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 762386dafe34Smrg fi 762486dafe34Smrg compile_rpath="$rpath" 762586dafe34Smrg 762686dafe34Smrg rpath= 762786dafe34Smrg hardcode_libdirs= 762886dafe34Smrg for libdir in $finalize_rpath; do 762986dafe34Smrg if test -n "$hardcode_libdir_flag_spec"; then 763086dafe34Smrg if test -n "$hardcode_libdir_separator"; then 763186dafe34Smrg if test -z "$hardcode_libdirs"; then 763286dafe34Smrg hardcode_libdirs="$libdir" 763386dafe34Smrg else 763486dafe34Smrg # Just accumulate the unique libdirs. 763586dafe34Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 763686dafe34Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 763786dafe34Smrg ;; 763886dafe34Smrg *) 763986dafe34Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 764086dafe34Smrg ;; 764186dafe34Smrg esac 764286dafe34Smrg fi 764386dafe34Smrg else 764486dafe34Smrg eval flag=\"$hardcode_libdir_flag_spec\" 764586dafe34Smrg rpath="$rpath $flag" 764686dafe34Smrg fi 764786dafe34Smrg elif test -n "$runpath_var"; then 764886dafe34Smrg case "$finalize_perm_rpath " in 764976888252Smrg *" $libdir "*) ;; 765086dafe34Smrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 765176888252Smrg esac 765276888252Smrg fi 765386dafe34Smrg done 765486dafe34Smrg # Substitute the hardcoded libdirs into the rpath. 765586dafe34Smrg if test -n "$hardcode_libdir_separator" && 765686dafe34Smrg test -n "$hardcode_libdirs"; then 765786dafe34Smrg libdir="$hardcode_libdirs" 765886dafe34Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 765986dafe34Smrg fi 766086dafe34Smrg finalize_rpath="$rpath" 766176888252Smrg 766286dafe34Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 766386dafe34Smrg # Transform all the library objects into standard objects. 766486dafe34Smrg compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 766586dafe34Smrg finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 766686dafe34Smrg fi 766776888252Smrg 766886dafe34Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 766976888252Smrg 767086dafe34Smrg # template prelinking step 767186dafe34Smrg if test -n "$prelink_cmds"; then 767286dafe34Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 767386dafe34Smrg fi 767476888252Smrg 767586dafe34Smrg wrappers_required=yes 767686dafe34Smrg case $host in 767786dafe34Smrg *cygwin* | *mingw* ) 767886dafe34Smrg if test "$build_libtool_libs" != yes; then 767986dafe34Smrg wrappers_required=no 768086dafe34Smrg fi 768186dafe34Smrg ;; 768286dafe34Smrg *cegcc) 768386dafe34Smrg # Disable wrappers for cegcc, we are cross compiling anyway. 768486dafe34Smrg wrappers_required=no 768586dafe34Smrg ;; 768686dafe34Smrg *) 768786dafe34Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 768886dafe34Smrg wrappers_required=no 768986dafe34Smrg fi 769086dafe34Smrg ;; 769186dafe34Smrg esac 769286dafe34Smrg if test "$wrappers_required" = no; then 769386dafe34Smrg # Replace the output file specification. 769486dafe34Smrg compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 769586dafe34Smrg link_command="$compile_command$compile_rpath" 769676888252Smrg 769786dafe34Smrg # We have no uninstalled library dependencies, so finalize right now. 769886dafe34Smrg exit_status=0 769986dafe34Smrg func_show_eval "$link_command" 'exit_status=$?' 770076888252Smrg 770186dafe34Smrg # Delete the generated files. 770286dafe34Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 770386dafe34Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 770486dafe34Smrg fi 770576888252Smrg 770686dafe34Smrg exit $exit_status 770786dafe34Smrg fi 770876888252Smrg 770986dafe34Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 771086dafe34Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 771186dafe34Smrg fi 771286dafe34Smrg if test -n "$finalize_shlibpath"; then 771386dafe34Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 771486dafe34Smrg fi 771576888252Smrg 771686dafe34Smrg compile_var= 771786dafe34Smrg finalize_var= 771886dafe34Smrg if test -n "$runpath_var"; then 771986dafe34Smrg if test -n "$perm_rpath"; then 772086dafe34Smrg # We should set the runpath_var. 772186dafe34Smrg rpath= 772286dafe34Smrg for dir in $perm_rpath; do 772386dafe34Smrg rpath="$rpath$dir:" 772476888252Smrg done 772586dafe34Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 772676888252Smrg fi 772786dafe34Smrg if test -n "$finalize_perm_rpath"; then 772886dafe34Smrg # We should set the runpath_var. 772986dafe34Smrg rpath= 773086dafe34Smrg for dir in $finalize_perm_rpath; do 773186dafe34Smrg rpath="$rpath$dir:" 773286dafe34Smrg done 773386dafe34Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 773486dafe34Smrg fi 773586dafe34Smrg fi 773676888252Smrg 773786dafe34Smrg if test "$no_install" = yes; then 773886dafe34Smrg # We don't need to create a wrapper script. 773986dafe34Smrg link_command="$compile_var$compile_command$compile_rpath" 774086dafe34Smrg # Replace the output file specification. 774186dafe34Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 774286dafe34Smrg # Delete the old output file. 774386dafe34Smrg $opt_dry_run || $RM $output 774486dafe34Smrg # Link the executable and exit 774586dafe34Smrg func_show_eval "$link_command" 'exit $?' 774686dafe34Smrg exit $EXIT_SUCCESS 774786dafe34Smrg fi 774876888252Smrg 774986dafe34Smrg if test "$hardcode_action" = relink; then 775086dafe34Smrg # Fast installation is not supported 775186dafe34Smrg link_command="$compile_var$compile_command$compile_rpath" 775286dafe34Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 775376888252Smrg 775486dafe34Smrg func_warning "this platform does not like uninstalled shared libraries" 775586dafe34Smrg func_warning "\`$output' will be relinked during installation" 775686dafe34Smrg else 775786dafe34Smrg if test "$fast_install" != no; then 775886dafe34Smrg link_command="$finalize_var$compile_command$finalize_rpath" 775986dafe34Smrg if test "$fast_install" = yes; then 776086dafe34Smrg relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` 776186dafe34Smrg else 776286dafe34Smrg # fast_install is set to needless 776386dafe34Smrg relink_command= 776486dafe34Smrg fi 776576888252Smrg else 776686dafe34Smrg link_command="$compile_var$compile_command$compile_rpath" 776786dafe34Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 776876888252Smrg fi 776986dafe34Smrg fi 777076888252Smrg 777186dafe34Smrg # Replace the output file specification. 777286dafe34Smrg link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 777376888252Smrg 777486dafe34Smrg # Delete the old output files. 777586dafe34Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 777676888252Smrg 777786dafe34Smrg func_show_eval "$link_command" 'exit $?' 777876888252Smrg 777986dafe34Smrg # Now create the wrapper script. 778086dafe34Smrg func_verbose "creating $output" 778176888252Smrg 778286dafe34Smrg # Quote the relink command for shipping. 778386dafe34Smrg if test -n "$relink_command"; then 778486dafe34Smrg # Preserve any variables that may affect compiler behavior 778586dafe34Smrg for var in $variables_saved_for_relink; do 778686dafe34Smrg if eval test -z \"\${$var+set}\"; then 778786dafe34Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 778886dafe34Smrg elif eval var_value=\$$var; test -z "$var_value"; then 778986dafe34Smrg relink_command="$var=; export $var; $relink_command" 779086dafe34Smrg else 779186dafe34Smrg func_quote_for_eval "$var_value" 779286dafe34Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 779386dafe34Smrg fi 779486dafe34Smrg done 779586dafe34Smrg relink_command="(cd `pwd`; $relink_command)" 779686dafe34Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 779786dafe34Smrg fi 779876888252Smrg 779986dafe34Smrg # Quote $ECHO for shipping. 780086dafe34Smrg if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then 780186dafe34Smrg case $progpath in 780286dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 780386dafe34Smrg *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 780476888252Smrg esac 780586dafe34Smrg qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` 780686dafe34Smrg else 780786dafe34Smrg qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` 780886dafe34Smrg fi 780976888252Smrg 781086dafe34Smrg # Only actually do things if not in dry run mode. 781186dafe34Smrg $opt_dry_run || { 781286dafe34Smrg # win32 will think the script is a binary if it has 781386dafe34Smrg # a .exe suffix, so we strip it off here. 781486dafe34Smrg case $output in 781586dafe34Smrg *.exe) func_stripname '' '.exe' "$output" 781686dafe34Smrg output=$func_stripname_result ;; 781786dafe34Smrg esac 781886dafe34Smrg # test for cygwin because mv fails w/o .exe extensions 781976888252Smrg case $host in 782086dafe34Smrg *cygwin*) 782186dafe34Smrg exeext=.exe 782286dafe34Smrg func_stripname '' '.exe' "$outputname" 782386dafe34Smrg outputname=$func_stripname_result ;; 782486dafe34Smrg *) exeext= ;; 782576888252Smrg esac 782686dafe34Smrg case $host in 782786dafe34Smrg *cygwin* | *mingw* ) 782886dafe34Smrg func_dirname_and_basename "$output" "" "." 782986dafe34Smrg output_name=$func_basename_result 783086dafe34Smrg output_path=$func_dirname_result 783186dafe34Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 783286dafe34Smrg cwrapper="$output_path/$output_name.exe" 783386dafe34Smrg $RM $cwrappersource $cwrapper 783486dafe34Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 783586dafe34Smrg 783686dafe34Smrg func_emit_cwrapperexe_src > $cwrappersource 783786dafe34Smrg 783886dafe34Smrg # The wrapper executable is built using the $host compiler, 783986dafe34Smrg # because it contains $host paths and files. If cross- 784086dafe34Smrg # compiling, it, like the target executable, must be 784186dafe34Smrg # executed on the $host or under an emulation environment. 784286dafe34Smrg $opt_dry_run || { 784386dafe34Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 784486dafe34Smrg $STRIP $cwrapper 784586dafe34Smrg } 784676888252Smrg 784786dafe34Smrg # Now, create the wrapper script for func_source use: 784886dafe34Smrg func_ltwrapper_scriptname $cwrapper 784986dafe34Smrg $RM $func_ltwrapper_scriptname_result 785086dafe34Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 785186dafe34Smrg $opt_dry_run || { 785286dafe34Smrg # note: this script will not be executed, so do not chmod. 785386dafe34Smrg if test "x$build" = "x$host" ; then 785486dafe34Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 785576888252Smrg else 785686dafe34Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 785776888252Smrg fi 785886dafe34Smrg } 785986dafe34Smrg ;; 786086dafe34Smrg * ) 786186dafe34Smrg $RM $output 786286dafe34Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 786376888252Smrg 786486dafe34Smrg func_emit_wrapper no > $output 786586dafe34Smrg chmod +x $output 786676888252Smrg ;; 786776888252Smrg esac 786886dafe34Smrg } 786986dafe34Smrg exit $EXIT_SUCCESS 787086dafe34Smrg ;; 787186dafe34Smrg esac 787276888252Smrg 787386dafe34Smrg # See if we need to build an old-fashioned archive. 787486dafe34Smrg for oldlib in $oldlibs; do 787576888252Smrg 787686dafe34Smrg if test "$build_libtool_libs" = convenience; then 787786dafe34Smrg oldobjs="$libobjs_save $symfileobj" 787886dafe34Smrg addlibs="$convenience" 787986dafe34Smrg build_libtool_libs=no 788086dafe34Smrg else 788186dafe34Smrg if test "$build_libtool_libs" = module; then 788286dafe34Smrg oldobjs="$libobjs_save" 788386dafe34Smrg build_libtool_libs=no 788486dafe34Smrg else 788586dafe34Smrg oldobjs="$old_deplibs $non_pic_objects" 788686dafe34Smrg if test "$preload" = yes && test -f "$symfileobj"; then 788786dafe34Smrg oldobjs="$oldobjs $symfileobj" 788886dafe34Smrg fi 788986dafe34Smrg fi 789086dafe34Smrg addlibs="$old_convenience" 789176888252Smrg fi 789276888252Smrg 789386dafe34Smrg if test -n "$addlibs"; then 789486dafe34Smrg gentop="$output_objdir/${outputname}x" 789586dafe34Smrg generated="$generated $gentop" 789676888252Smrg 789786dafe34Smrg func_extract_archives $gentop $addlibs 789886dafe34Smrg oldobjs="$oldobjs $func_extract_archives_result" 789986dafe34Smrg fi 790076888252Smrg 790186dafe34Smrg # Do each command in the archive commands. 790286dafe34Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 790386dafe34Smrg cmds=$old_archive_from_new_cmds 790486dafe34Smrg else 790576888252Smrg 790686dafe34Smrg # Add any objects from preloaded convenience libraries 790786dafe34Smrg if test -n "$dlprefiles"; then 790886dafe34Smrg gentop="$output_objdir/${outputname}x" 790986dafe34Smrg generated="$generated $gentop" 791076888252Smrg 791186dafe34Smrg func_extract_archives $gentop $dlprefiles 791286dafe34Smrg oldobjs="$oldobjs $func_extract_archives_result" 791386dafe34Smrg fi 791476888252Smrg 791586dafe34Smrg # POSIX demands no paths to be encoded in archives. We have 791686dafe34Smrg # to avoid creating archives with duplicate basenames if we 791786dafe34Smrg # might have to extract them afterwards, e.g., when creating a 791886dafe34Smrg # static archive out of a convenience library, or when linking 791986dafe34Smrg # the entirety of a libtool archive into another (currently 792086dafe34Smrg # not supported by libtool). 792186dafe34Smrg if (for obj in $oldobjs 792286dafe34Smrg do 792386dafe34Smrg func_basename "$obj" 792486dafe34Smrg $ECHO "$func_basename_result" 792586dafe34Smrg done | sort | sort -uc >/dev/null 2>&1); then 792686dafe34Smrg : 792786dafe34Smrg else 792886dafe34Smrg $ECHO "copying selected object files to avoid basename conflicts..." 792986dafe34Smrg gentop="$output_objdir/${outputname}x" 793086dafe34Smrg generated="$generated $gentop" 793186dafe34Smrg func_mkdir_p "$gentop" 793286dafe34Smrg save_oldobjs=$oldobjs 793386dafe34Smrg oldobjs= 793486dafe34Smrg counter=1 793586dafe34Smrg for obj in $save_oldobjs 793686dafe34Smrg do 793786dafe34Smrg func_basename "$obj" 793886dafe34Smrg objbase="$func_basename_result" 793986dafe34Smrg case " $oldobjs " in 794086dafe34Smrg " ") oldobjs=$obj ;; 794186dafe34Smrg *[\ /]"$objbase "*) 794286dafe34Smrg while :; do 794386dafe34Smrg # Make sure we don't pick an alternate name that also 794486dafe34Smrg # overlaps. 794586dafe34Smrg newobj=lt$counter-$objbase 794686dafe34Smrg func_arith $counter + 1 794786dafe34Smrg counter=$func_arith_result 794886dafe34Smrg case " $oldobjs " in 794986dafe34Smrg *[\ /]"$newobj "*) ;; 795086dafe34Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 795186dafe34Smrg esac 795286dafe34Smrg done 795386dafe34Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 795486dafe34Smrg oldobjs="$oldobjs $gentop/$newobj" 795586dafe34Smrg ;; 795686dafe34Smrg *) oldobjs="$oldobjs $obj" ;; 795786dafe34Smrg esac 795876888252Smrg done 795976888252Smrg fi 796086dafe34Smrg eval cmds=\"$old_archive_cmds\" 796176888252Smrg 796286dafe34Smrg func_len " $cmds" 796386dafe34Smrg len=$func_len_result 796486dafe34Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 796586dafe34Smrg cmds=$old_archive_cmds 796686dafe34Smrg else 796786dafe34Smrg # the command line is too long to link in one step, link in parts 796886dafe34Smrg func_verbose "using piecewise archive linking..." 796986dafe34Smrg save_RANLIB=$RANLIB 797086dafe34Smrg RANLIB=: 797186dafe34Smrg objlist= 797286dafe34Smrg concat_cmds= 797386dafe34Smrg save_oldobjs=$oldobjs 797486dafe34Smrg oldobjs= 797586dafe34Smrg # Is there a better way of finding the last object in the list? 797686dafe34Smrg for obj in $save_oldobjs 797786dafe34Smrg do 797886dafe34Smrg last_oldobj=$obj 797986dafe34Smrg done 798086dafe34Smrg eval test_cmds=\"$old_archive_cmds\" 798186dafe34Smrg func_len " $test_cmds" 798286dafe34Smrg len0=$func_len_result 798386dafe34Smrg len=$len0 798486dafe34Smrg for obj in $save_oldobjs 798586dafe34Smrg do 798686dafe34Smrg func_len " $obj" 798786dafe34Smrg func_arith $len + $func_len_result 798886dafe34Smrg len=$func_arith_result 798986dafe34Smrg func_append objlist " $obj" 799086dafe34Smrg if test "$len" -lt "$max_cmd_len"; then 799186dafe34Smrg : 799286dafe34Smrg else 799386dafe34Smrg # the above command should be used before it gets too long 799486dafe34Smrg oldobjs=$objlist 799586dafe34Smrg if test "$obj" = "$last_oldobj" ; then 799686dafe34Smrg RANLIB=$save_RANLIB 799786dafe34Smrg fi 799886dafe34Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 799986dafe34Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 800086dafe34Smrg objlist= 800186dafe34Smrg len=$len0 800286dafe34Smrg fi 800386dafe34Smrg done 800486dafe34Smrg RANLIB=$save_RANLIB 800586dafe34Smrg oldobjs=$objlist 800686dafe34Smrg if test "X$oldobjs" = "X" ; then 800786dafe34Smrg eval cmds=\"\$concat_cmds\" 800886dafe34Smrg else 800986dafe34Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 801086dafe34Smrg fi 801186dafe34Smrg fi 801286dafe34Smrg fi 801386dafe34Smrg func_execute_cmds "$cmds" 'exit $?' 801476888252Smrg done 801576888252Smrg 801686dafe34Smrg test -n "$generated" && \ 801786dafe34Smrg func_show_eval "${RM}r$generated" 801876888252Smrg 801986dafe34Smrg # Now create the libtool archive. 802086dafe34Smrg case $output in 802186dafe34Smrg *.la) 802286dafe34Smrg old_library= 802386dafe34Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 802486dafe34Smrg func_verbose "creating $output" 802576888252Smrg 802686dafe34Smrg # Preserve any variables that may affect compiler behavior 802786dafe34Smrg for var in $variables_saved_for_relink; do 802886dafe34Smrg if eval test -z \"\${$var+set}\"; then 802986dafe34Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 803086dafe34Smrg elif eval var_value=\$$var; test -z "$var_value"; then 803186dafe34Smrg relink_command="$var=; export $var; $relink_command" 803276888252Smrg else 803386dafe34Smrg func_quote_for_eval "$var_value" 803486dafe34Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 803576888252Smrg fi 803686dafe34Smrg done 803786dafe34Smrg # Quote the link command for shipping. 803886dafe34Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 803986dafe34Smrg relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` 804086dafe34Smrg if test "$hardcode_automatic" = yes ; then 804186dafe34Smrg relink_command= 804286dafe34Smrg fi 804376888252Smrg 804486dafe34Smrg # Only create the output if not a dry run. 804586dafe34Smrg $opt_dry_run || { 804686dafe34Smrg for installed in no yes; do 804786dafe34Smrg if test "$installed" = yes; then 804886dafe34Smrg if test -z "$install_libdir"; then 804986dafe34Smrg break 805086dafe34Smrg fi 805186dafe34Smrg output="$output_objdir/$outputname"i 805286dafe34Smrg # Replace all uninstalled libtool libraries with the installed ones 805386dafe34Smrg newdependency_libs= 805486dafe34Smrg for deplib in $dependency_libs; do 805586dafe34Smrg case $deplib in 805686dafe34Smrg *.la) 805786dafe34Smrg func_basename "$deplib" 805886dafe34Smrg name="$func_basename_result" 805986dafe34Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 806086dafe34Smrg test -z "$libdir" && \ 806186dafe34Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 806286dafe34Smrg newdependency_libs="$newdependency_libs $libdir/$name" 806386dafe34Smrg ;; 806486dafe34Smrg *) newdependency_libs="$newdependency_libs $deplib" ;; 806586dafe34Smrg esac 806686dafe34Smrg done 806786dafe34Smrg dependency_libs="$newdependency_libs" 806886dafe34Smrg newdlfiles= 806986dafe34Smrg 807086dafe34Smrg for lib in $dlfiles; do 807186dafe34Smrg case $lib in 807286dafe34Smrg *.la) 807386dafe34Smrg func_basename "$lib" 807486dafe34Smrg name="$func_basename_result" 807586dafe34Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 807686dafe34Smrg test -z "$libdir" && \ 807786dafe34Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 807886dafe34Smrg newdlfiles="$newdlfiles $libdir/$name" 807986dafe34Smrg ;; 808086dafe34Smrg *) newdlfiles="$newdlfiles $lib" ;; 808186dafe34Smrg esac 808286dafe34Smrg done 808386dafe34Smrg dlfiles="$newdlfiles" 808486dafe34Smrg newdlprefiles= 808586dafe34Smrg for lib in $dlprefiles; do 808686dafe34Smrg case $lib in 808786dafe34Smrg *.la) 808886dafe34Smrg # Only pass preopened files to the pseudo-archive (for 808986dafe34Smrg # eventual linking with the app. that links it) if we 809086dafe34Smrg # didn't already link the preopened objects directly into 809186dafe34Smrg # the library: 809286dafe34Smrg func_basename "$lib" 809386dafe34Smrg name="$func_basename_result" 809486dafe34Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 809586dafe34Smrg test -z "$libdir" && \ 809686dafe34Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 809786dafe34Smrg newdlprefiles="$newdlprefiles $libdir/$name" 809886dafe34Smrg ;; 809986dafe34Smrg esac 810086dafe34Smrg done 810186dafe34Smrg dlprefiles="$newdlprefiles" 810286dafe34Smrg else 810386dafe34Smrg newdlfiles= 810486dafe34Smrg for lib in $dlfiles; do 810586dafe34Smrg case $lib in 810686dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 810786dafe34Smrg *) abs=`pwd`"/$lib" ;; 810886dafe34Smrg esac 810986dafe34Smrg newdlfiles="$newdlfiles $abs" 811086dafe34Smrg done 811186dafe34Smrg dlfiles="$newdlfiles" 811286dafe34Smrg newdlprefiles= 811386dafe34Smrg for lib in $dlprefiles; do 811486dafe34Smrg case $lib in 811586dafe34Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 811686dafe34Smrg *) abs=`pwd`"/$lib" ;; 811786dafe34Smrg esac 811886dafe34Smrg newdlprefiles="$newdlprefiles $abs" 811986dafe34Smrg done 812086dafe34Smrg dlprefiles="$newdlprefiles" 812186dafe34Smrg fi 812286dafe34Smrg $RM $output 812386dafe34Smrg # place dlname in correct position for cygwin 812486dafe34Smrg tdlname=$dlname 812586dafe34Smrg case $host,$output,$installed,$module,$dlname in 812686dafe34Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 812786dafe34Smrg esac 812886dafe34Smrg $ECHO > $output "\ 812986dafe34Smrg# $outputname - a libtool library file 813086dafe34Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 813186dafe34Smrg# 813286dafe34Smrg# Please DO NOT delete this file! 813386dafe34Smrg# It is necessary for linking the library. 813476888252Smrg 813586dafe34Smrg# The name that we can dlopen(3). 813686dafe34Smrgdlname='$tdlname' 813776888252Smrg 813886dafe34Smrg# Names of this library. 813986dafe34Smrglibrary_names='$library_names' 814076888252Smrg 814186dafe34Smrg# The name of the static archive. 814286dafe34Smrgold_library='$old_library' 814376888252Smrg 814486dafe34Smrg# Linker flags that can not go in dependency_libs. 814586dafe34Smrginherited_linker_flags='$new_inherited_linker_flags' 814676888252Smrg 814786dafe34Smrg# Libraries that this one depends upon. 814886dafe34Smrgdependency_libs='$dependency_libs' 814976888252Smrg 815086dafe34Smrg# Names of additional weak libraries provided by this library 815186dafe34Smrgweak_library_names='$weak_libs' 815276888252Smrg 815386dafe34Smrg# Version information for $libname. 815486dafe34Smrgcurrent=$current 815586dafe34Smrgage=$age 815686dafe34Smrgrevision=$revision 815776888252Smrg 815886dafe34Smrg# Is this an already installed library? 815986dafe34Smrginstalled=$installed 816076888252Smrg 816186dafe34Smrg# Should we warn about portability when linking against -modules? 816286dafe34Smrgshouldnotlink=$module 816376888252Smrg 816486dafe34Smrg# Files to dlopen/dlpreopen 816586dafe34Smrgdlopen='$dlfiles' 816686dafe34Smrgdlpreopen='$dlprefiles' 816776888252Smrg 816886dafe34Smrg# Directory that this library needs to be installed in: 816986dafe34Smrglibdir='$install_libdir'" 817086dafe34Smrg if test "$installed" = no && test "$need_relink" = yes; then 817186dafe34Smrg $ECHO >> $output "\ 817286dafe34Smrgrelink_command=\"$relink_command\"" 817386dafe34Smrg fi 817486dafe34Smrg done 817586dafe34Smrg } 817676888252Smrg 817786dafe34Smrg # Do a symbolic link so that the libtool archive can be found in 817886dafe34Smrg # LD_LIBRARY_PATH before the program is installed. 817986dafe34Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 818086dafe34Smrg ;; 818186dafe34Smrg esac 818286dafe34Smrg exit $EXIT_SUCCESS 818386dafe34Smrg} 818476888252Smrg 818586dafe34Smrg{ test "$mode" = link || test "$mode" = relink; } && 818686dafe34Smrg func_mode_link ${1+"$@"} 818776888252Smrg 818876888252Smrg 818986dafe34Smrg# func_mode_uninstall arg... 819086dafe34Smrgfunc_mode_uninstall () 819186dafe34Smrg{ 819286dafe34Smrg $opt_debug 819386dafe34Smrg RM="$nonopt" 819476888252Smrg files= 819576888252Smrg rmforce= 819676888252Smrg exit_status=0 819776888252Smrg 819876888252Smrg # This variable tells wrapper scripts just to set variables rather 819976888252Smrg # than running their programs. 820076888252Smrg libtool_install_magic="$magic" 820176888252Smrg 820276888252Smrg for arg 820376888252Smrg do 820476888252Smrg case $arg in 820586dafe34Smrg -f) RM="$RM $arg"; rmforce=yes ;; 820686dafe34Smrg -*) RM="$RM $arg" ;; 820776888252Smrg *) files="$files $arg" ;; 820876888252Smrg esac 820976888252Smrg done 821076888252Smrg 821186dafe34Smrg test -z "$RM" && \ 821286dafe34Smrg func_fatal_help "you must specify an RM program" 821376888252Smrg 821476888252Smrg rmdirs= 821576888252Smrg 821676888252Smrg origobjdir="$objdir" 821776888252Smrg for file in $files; do 821886dafe34Smrg func_dirname "$file" "" "." 821986dafe34Smrg dir="$func_dirname_result" 822086dafe34Smrg if test "X$dir" = X.; then 822176888252Smrg objdir="$origobjdir" 822276888252Smrg else 822376888252Smrg objdir="$dir/$origobjdir" 822476888252Smrg fi 822586dafe34Smrg func_basename "$file" 822686dafe34Smrg name="$func_basename_result" 822776888252Smrg test "$mode" = uninstall && objdir="$dir" 822876888252Smrg 822976888252Smrg # Remember objdir for removal later, being careful to avoid duplicates 823076888252Smrg if test "$mode" = clean; then 823176888252Smrg case " $rmdirs " in 823276888252Smrg *" $objdir "*) ;; 823376888252Smrg *) rmdirs="$rmdirs $objdir" ;; 823476888252Smrg esac 823576888252Smrg fi 823676888252Smrg 823776888252Smrg # Don't error if the file doesn't exist and rm -f was used. 823886dafe34Smrg if { test -L "$file"; } >/dev/null 2>&1 || 823986dafe34Smrg { test -h "$file"; } >/dev/null 2>&1 || 824086dafe34Smrg test -f "$file"; then 824176888252Smrg : 824276888252Smrg elif test -d "$file"; then 824376888252Smrg exit_status=1 824476888252Smrg continue 824576888252Smrg elif test "$rmforce" = yes; then 824676888252Smrg continue 824776888252Smrg fi 824876888252Smrg 824976888252Smrg rmfiles="$file" 825076888252Smrg 825176888252Smrg case $name in 825276888252Smrg *.la) 825376888252Smrg # Possibly a libtool archive, so verify it. 825486dafe34Smrg if func_lalib_p "$file"; then 825586dafe34Smrg func_source $dir/$name 825676888252Smrg 825776888252Smrg # Delete the libtool libraries and symlinks. 825876888252Smrg for n in $library_names; do 825976888252Smrg rmfiles="$rmfiles $objdir/$n" 826076888252Smrg done 826176888252Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 826276888252Smrg 826376888252Smrg case "$mode" in 826476888252Smrg clean) 826576888252Smrg case " $library_names " in 826676888252Smrg # " " in the beginning catches empty $dlname 826776888252Smrg *" $dlname "*) ;; 826876888252Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 826976888252Smrg esac 827086dafe34Smrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 827176888252Smrg ;; 827276888252Smrg uninstall) 827376888252Smrg if test -n "$library_names"; then 827476888252Smrg # Do each command in the postuninstall commands. 827586dafe34Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 827676888252Smrg fi 827776888252Smrg 827876888252Smrg if test -n "$old_library"; then 827976888252Smrg # Do each command in the old_postuninstall commands. 828086dafe34Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 828176888252Smrg fi 828276888252Smrg # FIXME: should reinstall the best remaining shared library. 828376888252Smrg ;; 828476888252Smrg esac 828576888252Smrg fi 828676888252Smrg ;; 828776888252Smrg 828876888252Smrg *.lo) 828976888252Smrg # Possibly a libtool object, so verify it. 829086dafe34Smrg if func_lalib_p "$file"; then 829176888252Smrg 829276888252Smrg # Read the .lo file 829386dafe34Smrg func_source $dir/$name 829476888252Smrg 829576888252Smrg # Add PIC object to the list of files to remove. 829686dafe34Smrg if test -n "$pic_object" && 829786dafe34Smrg test "$pic_object" != none; then 829876888252Smrg rmfiles="$rmfiles $dir/$pic_object" 829976888252Smrg fi 830076888252Smrg 830176888252Smrg # Add non-PIC object to the list of files to remove. 830286dafe34Smrg if test -n "$non_pic_object" && 830386dafe34Smrg test "$non_pic_object" != none; then 830476888252Smrg rmfiles="$rmfiles $dir/$non_pic_object" 830576888252Smrg fi 830676888252Smrg fi 830776888252Smrg ;; 830876888252Smrg 830976888252Smrg *) 831076888252Smrg if test "$mode" = clean ; then 831176888252Smrg noexename=$name 831276888252Smrg case $file in 831376888252Smrg *.exe) 831486dafe34Smrg func_stripname '' '.exe' "$file" 831586dafe34Smrg file=$func_stripname_result 831686dafe34Smrg func_stripname '' '.exe' "$name" 831786dafe34Smrg noexename=$func_stripname_result 831876888252Smrg # $file with .exe has already been added to rmfiles, 831976888252Smrg # add $file without .exe 832076888252Smrg rmfiles="$rmfiles $file" 832176888252Smrg ;; 832276888252Smrg esac 832376888252Smrg # Do a test to see if this is a libtool program. 832486dafe34Smrg if func_ltwrapper_p "$file"; then 832586dafe34Smrg if func_ltwrapper_executable_p "$file"; then 832686dafe34Smrg func_ltwrapper_scriptname "$file" 832786dafe34Smrg relink_command= 832886dafe34Smrg func_source $func_ltwrapper_scriptname_result 832986dafe34Smrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 833086dafe34Smrg else 833186dafe34Smrg relink_command= 833286dafe34Smrg func_source $dir/$noexename 833386dafe34Smrg fi 833476888252Smrg 833576888252Smrg # note $name still contains .exe if it was in $file originally 833676888252Smrg # as does the version of $file that was added into $rmfiles 833776888252Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 833876888252Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 833976888252Smrg rmfiles="$rmfiles $objdir/lt-$name" 834076888252Smrg fi 834176888252Smrg if test "X$noexename" != "X$name" ; then 834276888252Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 834376888252Smrg fi 834476888252Smrg fi 834576888252Smrg fi 834676888252Smrg ;; 834776888252Smrg esac 834886dafe34Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 834976888252Smrg done 835076888252Smrg objdir="$origobjdir" 835176888252Smrg 835276888252Smrg # Try to remove the ${objdir}s in the directories where we deleted files 835376888252Smrg for dir in $rmdirs; do 835476888252Smrg if test -d "$dir"; then 835586dafe34Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 835676888252Smrg fi 835776888252Smrg done 835876888252Smrg 835976888252Smrg exit $exit_status 836086dafe34Smrg} 836176888252Smrg 836286dafe34Smrg{ test "$mode" = uninstall || test "$mode" = clean; } && 836386dafe34Smrg func_mode_uninstall ${1+"$@"} 836476888252Smrg 836586dafe34Smrgtest -z "$mode" && { 836686dafe34Smrg help="$generic_help" 836786dafe34Smrg func_fatal_help "you must specify a MODE" 836886dafe34Smrg} 836986dafe34Smrg 837086dafe34Smrgtest -z "$exec_cmd" && \ 837186dafe34Smrg func_fatal_help "invalid operation mode \`$mode'" 837276888252Smrg 837376888252Smrgif test -n "$exec_cmd"; then 837486dafe34Smrg eval exec "$exec_cmd" 837576888252Smrg exit $EXIT_FAILURE 837676888252Smrgfi 837776888252Smrg 837886dafe34Smrgexit $exit_status 837976888252Smrg 838076888252Smrg 838176888252Smrg# The TAGs below are defined such that we never get into a situation 838276888252Smrg# in which we disable both kinds of libraries. Given conflicting 838376888252Smrg# choices, we go for a static library, that is the most portable, 838476888252Smrg# since we can't tell whether shared libraries were disabled because 838576888252Smrg# the user asked for that or because the platform doesn't support 838676888252Smrg# them. This is particularly important on AIX, because we don't 838776888252Smrg# support having both static and shared libraries enabled at the same 838876888252Smrg# time on that platform, so we default to a shared-only configuration. 838976888252Smrg# If a disable-shared tag is given, we'll fallback to a static-only 839076888252Smrg# configuration. But we'll never go from static-only to shared-only. 839176888252Smrg 839276888252Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 839386dafe34Smrgbuild_libtool_libs=no 839486dafe34Smrgbuild_old_libs=yes 839576888252Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 839676888252Smrg 839776888252Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 839886dafe34Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 839976888252Smrg# ### END LIBTOOL TAG CONFIG: disable-static 840076888252Smrg 840176888252Smrg# Local Variables: 840276888252Smrg# mode:shell-script 840376888252Smrg# sh-indentation:2 840476888252Smrg# End: 840586dafe34Smrg# vi:sw=2 840686dafe34Smrg 8407