mirror of
git://git.savannah.gnu.org/libtool.git
synced 2024-12-15 06:49:57 +08:00
7db65ac237
* tests/defs.m4sh: Unset MFLAGS, MAKEFLAGS, MAKELEVEL, __MKLVL__ and MAKE_JOBS_FIFO. * tests/testsuite.at: Likewise. Fixes warnings in test logs when the user uses 'make -jN check' and inner $MAKE invocations can't connect to the job server. Fixes spurious failures of configure-iface.at and of demo-noinst-link tests with BSD and Tru64 make if the user uses 'make -k', as the exit status of the latter is not reliable. Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
370 lines
8.9 KiB
Plaintext
370 lines
8.9 KiB
Plaintext
AS_INIT[]m4_divert_push([HEADER-COPYRIGHT])
|
|
# defs -- Defines for Libtool testing environment.
|
|
#
|
|
# Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software
|
|
# Foundation, Inc.
|
|
# Written by Gord Matzigkeit, 1996
|
|
# Rewritten by Gary V. Vaughan, 2003
|
|
#
|
|
# This file is part of GNU Libtool.
|
|
#
|
|
# GNU Libtool is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation; either version 2 of
|
|
# the License, or (at your option) any later version.
|
|
#
|
|
# GNU Libtool is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with GNU Libtool; see the file COPYING. If not, a copy
|
|
# can be downloaded from http://www.gnu.org/licenses/gpl.html,
|
|
# or obtained by writing to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
####
|
|
|
|
m4_divert_pop
|
|
m4_include([general.m4sh])
|
|
|
|
M4SH_VERBATIM([[
|
|
: ${AUTOCONF="autoconf"}
|
|
: ${AUTORECONF="autoreconf"}
|
|
: ${LIBTOOL="./libtool"}
|
|
|
|
# Sed that helps us avoid accidentally triggering echo(1) options like -n.
|
|
Xsed="$SED -e 1s/^X//"
|
|
|
|
# Disable usage of config.site for autoconf, unless DJGPP is present.
|
|
# The DJGPP port of autoconf requires config.site, to work correctly.
|
|
if test -z "$DJGPP"; then
|
|
CONFIG_SITE=/nonexistent
|
|
fi
|
|
|
|
# How verbose should we be? Default is test output in log file.
|
|
# Setting VERBOSE=debug puts the shell in debug mode.
|
|
opt_debug=:
|
|
case "$VERBOSE" in
|
|
DEBUG | debug )
|
|
opt_debug='set -x'
|
|
$opt_debug
|
|
;;
|
|
esac
|
|
|
|
if test -z "$srcdir"; then
|
|
srcdir=`$ECHO "$0" | $SED "$dirname; s,/tests\$,,"`
|
|
test "$srcdir" = "$0" && srcdir=.
|
|
fi
|
|
|
|
# func_msg arg...
|
|
# Echo message with prefix.
|
|
func_msg ()
|
|
{
|
|
func_echo "=== " ${1+"$@"}
|
|
}
|
|
|
|
# func_skip arg...
|
|
# Echo message to standard error, and skip the rest of this test.
|
|
func_skip ()
|
|
{
|
|
func_error ${1+"$@"}
|
|
exit $EXIT_SKIP
|
|
}
|
|
|
|
# func_fail arg...
|
|
# Echo message to standard error, and fail this test.
|
|
func_fail ()
|
|
{
|
|
func_fatal_error ${1+"$@"}
|
|
}
|
|
|
|
# func_get_config varname_list src [failp] [regex]
|
|
func_get_config ()
|
|
{
|
|
$opt_debug
|
|
my_varname_list="$1"
|
|
my_src="$2"
|
|
my_failp="false"; test -z "$3" || my_failp=:
|
|
my_regex="$4"
|
|
|
|
my_exitp=false
|
|
if test -z "$my_regex"; then
|
|
my_regex="^("
|
|
my_build_regex=:
|
|
else
|
|
my_build_regex=false
|
|
fi
|
|
my_first=:
|
|
|
|
for my_varname in $my_varname_list; do
|
|
if $my_build_regex; then
|
|
$my_first || my_regex="$my_regex|"
|
|
my_first=false
|
|
my_regex="$my_regex$my_varname"
|
|
fi
|
|
eval $my_varname=NONE
|
|
done
|
|
$my_build_regex && my_regex="$my_regex)="
|
|
eval `eval "$my_src" | eval "$EGREP \"$my_regex\""`
|
|
|
|
for my_varname in $my_varname_list; do
|
|
if eval test x\"\$$my_varname\" = xNONE; then
|
|
func_error "$my_varname not set in \`$my_src'"
|
|
$my_failp && my_exitp=:
|
|
fi
|
|
done
|
|
|
|
$my_exitp && exit $EXIT_FAILURE
|
|
}
|
|
|
|
|
|
# Extract some variables from the libtool configuration.
|
|
func_get_config "objext
|
|
objdir
|
|
CC
|
|
host
|
|
host_os
|
|
host_alias
|
|
build
|
|
build_alias" "$LIBTOOL --config" ": fatal"
|
|
|
|
|
|
# func_mkprefixdir
|
|
func_mkprefixdir ()
|
|
{
|
|
$opt_debug
|
|
# An absolute path to a test installation directory.
|
|
func_mkdir_p "$prefix"
|
|
prefix=`cd $prefix && pwd`
|
|
}
|
|
|
|
# func_rmprefixdir
|
|
func_rmprefixdir ()
|
|
{
|
|
$opt_debug
|
|
test -d $prefix && rm -rf $prefix
|
|
prefix=NONE
|
|
}
|
|
|
|
# func_cd dir
|
|
# Make sure a directory exists, and then change to it.
|
|
func_cd ()
|
|
{
|
|
$opt_debug
|
|
my_dir="$1"
|
|
|
|
# Maybe we have a VPATH build, in which case, create a new subdir.
|
|
func_mkdir_p "$my_dir"
|
|
|
|
# Change to our build directory.
|
|
cd "$my_dir" || func_fatal_error "couldn't cd to \`$my_dir'"
|
|
}
|
|
|
|
|
|
# func_require prereq file [...]
|
|
# If FILE does not exist, give a fatal error regarding running PREREQ first.
|
|
func_require ()
|
|
{
|
|
$opt_debug
|
|
my_prereq="$1"; shift
|
|
my_files=${1+"$@"}
|
|
|
|
for my_file in $my_files; do
|
|
test -f "$my_file" \
|
|
|| func_skip "You must run ${my_prereq}.test before running $0"
|
|
done
|
|
}
|
|
|
|
# func_configure_nofail [args ...]
|
|
# Configure the demonstration.
|
|
func_configure_nofail ()
|
|
{
|
|
$opt_debug
|
|
my_args=${1+"$@"}
|
|
func_dirname_and_basename "`pwd`"
|
|
my_dir=$func_basename_result
|
|
my_testdir="$srcdir/tests/$my_dir"
|
|
conf_status=$EXIT_FAILURE
|
|
|
|
test -n "$my_args" && my_args=" $my_args"
|
|
my_args="--srcdir="\""$my_testdir"\"" --prefix="\""$prefix"\""$my_args"
|
|
test -n "$host_alias" && my_args="$my_args --host=\"$host_alias\""
|
|
test -n "$build_alias" && my_args="$my_args --build=\"$build_alias\""
|
|
|
|
func_msg "Configuring in $my_dir"
|
|
|
|
test -f "$my_testdir/configure" || ${AUTORECONF} --force --install $my_testdir
|
|
if test -f "$my_testdir/configure"; then
|
|
|
|
eval func_msg $SHELL "$my_testdir/configure" $my_args
|
|
if eval $SHELL "$my_testdir/configure" $my_args; then
|
|
conf_status=$EXIT_SUCCESS
|
|
else
|
|
func_msg "FAILED: Configuring in $my_testdir"
|
|
ls -ltr $my_testdir
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# func_configure [args ...]
|
|
# Configure the demonstration, fail on error.
|
|
func_configure ()
|
|
{
|
|
func_configure_nofail ${1+"$@"}
|
|
if test "$conf_status" -eq "$EXIT_FAILURE"; then
|
|
exit $EXIT_FAILURE
|
|
fi
|
|
}
|
|
|
|
# func_check_static_shared staticp sharedp
|
|
# Determine whether the generated libtool script is configured properly
|
|
# for the expected STATICP and SHAREDP library building
|
|
func_check_static_shared ()
|
|
{
|
|
$opt_debug
|
|
my_staticp="$1"
|
|
my_sharedp="$2"
|
|
|
|
if func_grep "^build_old_libs=$staticp" libtool &&
|
|
func_grep "^build_libtool_libs=$sharedp" libtool; then :
|
|
else
|
|
rm -f Makefile
|
|
exit $EXIT_FAIL
|
|
fi
|
|
}
|
|
|
|
|
|
# func_make [args ...]
|
|
# Do the actual build.
|
|
func_make ()
|
|
{
|
|
$opt_debug
|
|
my_args=${1+"$@"}
|
|
func_dirname_and_basename "`pwd`"
|
|
func_msg "Running \`$MAKE $my_args' in $func_basename_result"
|
|
|
|
eval $MAKE $my_args || exit $EXIT_FAIL
|
|
}
|
|
|
|
|
|
# func_distclean
|
|
# Possibly clean up the distribution.
|
|
func_make_distclean ()
|
|
{
|
|
$opt_debug
|
|
if test -f Makefile; then
|
|
func_make distclean
|
|
fi
|
|
rm -rf autom4te.cache config.cache
|
|
}
|
|
|
|
|
|
# func_make_uninstall
|
|
# See that there were no files leftover in $prefix.
|
|
# Ignore dotfiles, so that .nfsXXX files don't screw up the test.
|
|
func_make_uninstall ()
|
|
{
|
|
$opt_debug
|
|
func_make uninstall
|
|
|
|
leftovers=`find $prefix ! -type d ! -name '.*' -print`
|
|
if test -n "$leftovers"; then
|
|
func_msg "Leftover after make uninstall:"
|
|
ls -l $leftovers
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
# func_exec_init mode
|
|
func_exec_init ()
|
|
{
|
|
$opt_debug
|
|
func_dirname_and_basename "`pwd`"
|
|
func_msg "Executing $1 programs in $func_basename_result"
|
|
|
|
# Windows hosts search for dlls in the command path
|
|
PATH=$prefix/lib:$PATH
|
|
|
|
exec_status=$EXIT_SUCCESS
|
|
}
|
|
|
|
# func_exec_check program [msg ...]
|
|
# Check to see if PROGRAM was built. If not display MSG.
|
|
func_exec_check ()
|
|
{
|
|
$opt_debug
|
|
my_program="$1"
|
|
|
|
if test -f "$my_program"; then :
|
|
else
|
|
shift
|
|
func_error "$0: $my_program did not build ${1+$@}"
|
|
exec_status=$EXIT_FAILURE
|
|
fi
|
|
}
|
|
|
|
# func_exec program [exp_output] [msg ...]
|
|
# Check to see if PROGRAM really runs, and produces EXP_OUTPUT if given.
|
|
# If not display MSG.
|
|
func_exec ()
|
|
{
|
|
$opt_debug
|
|
my_program="$1"
|
|
my_exp_output="$2"
|
|
func_dirname_and_basename "`pwd`"
|
|
my_dir=$func_basename_result
|
|
|
|
test -n "$my_exp_output" \
|
|
&& my_exp_output="| $EGREP -e "\""$my_exp_output"\"
|
|
|
|
if eval $my_program $my_exp_output; then :
|
|
else
|
|
shift
|
|
test "x$1" = x || shift
|
|
func_error "$0: cannot execute $my_program ${1+$@}"
|
|
|
|
if test "$build" != "$host"; then
|
|
func_msg "This may be ok since you seem to be cross-compiling."
|
|
exec_status=$EXIT_SKIP
|
|
else
|
|
# Simple check to see if they are superuser.
|
|
if test $exec_status = $EXIT_FAILURE || test -w /; then :
|
|
else
|
|
func_msg "You may need to run $0 as the superuser."
|
|
fi
|
|
exec_status=$EXIT_FAILURE
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Shared global variables for test scripts
|
|
prefix=./_inst-`echo "$0" | sed 's,.*/,,; s,-.*,,'`
|
|
srcdir=`cd $srcdir && pwd`
|
|
m4dir=$srcdir/libltdl/m4
|
|
auxdir=$srcdir/libltdl/config
|
|
scripts="$auxdir/ltmain.m4sh $srcdir/libtoolize.m4sh"
|
|
|
|
# Unset some MAKE... variables that may cause $MAKE to act like a
|
|
# recursively invoked sub-make. Any $MAKE invocation in a test is
|
|
# conceptually an independent invocation.
|
|
unset MFLAGS MAKEFLAGS MAKELEVEL __MKLVL__ MAKE_JOBS_FIFO
|
|
|
|
# On AIX, shared libraries remain loaded in memory after use if they
|
|
# are world-readable, until root issues slibclean. On NFS, this causes
|
|
# a testsuite rerun to fail to clean up test group directories. Avoid
|
|
# this with a suitable umask. Do not do this on other systems, for
|
|
# example HP-UX suffers unless shared libraries are mode 555.
|
|
case $host_os in
|
|
aix*) umask o-rwx ;;
|
|
esac
|
|
|
|
func_msg "Running $progname"
|
|
|
|
# Local Variables:
|
|
# mode:shell-script
|
|
# sh-indentation:2
|
|
# End:
|
|
]])
|