From: Stefano Lattarini Date: Mon, 24 Jan 2011 10:34:32 +0000 (+0100) Subject: check: new developer-reserved AM_TESTS_SETUP variable X-Git-Tag: ng-0.5a~202^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=95bbdf168467b0aff919f3fdb763a9662ecbf634;p=thirdparty%2Fautomake.git check: new developer-reserved AM_TESTS_SETUP variable For reference, see the discussion at: * lib/am/check.am [%?PARALLEL_TESTS%] (am__check_pre): Pass also $(AM_TESTS_SETUP). Comments updated, and some typos fixed. * doc/automake.texi (Simple Tests using parallel-tests): Document AM_TESTS_SETUP. Reorder some of the existing documentation a bit. * tests/parallel-tests-am_tests_setup.test: New test. From a suggestion by Ralf Wildenhues. --- diff --git a/ChangeLog b/ChangeLog index a126dc2fd..ed1d4aa32 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2011-04-17 Stefano Lattarini + + check: new developer-reserved AM_TESTS_SETUP variable + For reference, see the discussion at: + + * lib/am/check.am [%?PARALLEL_TESTS%] (am__check_pre): Pass also + $(AM_TESTS_SETUP). Comments updated, and some typos fixed. + * doc/automake.texi (Simple Tests using parallel-tests): Document + AM_TESTS_SETUP. Reorder some of the existing documentation a bit. + * tests/parallel-tests-am_tests_setup.test: New test. + From a suggestion by Ralf Wildenhues. + 2011-04-17 Stefano Lattarini depcomp tests: don't reject slower dependency extractors diff --git a/doc/automake.texi b/doc/automake.texi index 3c4bdddc1..6692e7f7d 100644 --- a/doc/automake.texi +++ b/doc/automake.texi @@ -8660,9 +8660,11 @@ allows to specify inter-test dependencies, lazy reruns of tests that have not completed in a prior run, summary and verbose output in @samp{RST} (reStructuredText) and @samp{HTML} format, and hard errors for exceptional failures. Similar to the simple test driver, -@code{TESTS_ENVIRONMENT}, @code{AM_COLOR_TESTS}, @code{XFAIL_TESTS}, and +@code{AM_COLOR_TESTS}, @code{XFAIL_TESTS}, and the @code{check_*} variables are honored, and the environment variable -@env{srcdir} is set during test execution. +@env{srcdir} is set during test execution. Also, @code{TESTS_ENVIRONMENT} +is still honored, but is complemented by a new developer-reserved variable +@code{AM_TESTS_SETUP} (described below). This test driver is still experimental and may undergo changes in order to satisfy additional portability requirements. @@ -8676,6 +8678,16 @@ depends upon log files created for each single test program listed in @code{TESTS}, which in turn contain all output produced by the corresponding tests. +@vindex VERBOSE +As with the simple driver above, by default one status line is printed +per completed test, and a short summary after the suite has completed. +However, standard output and standard error of the test are redirected +to a per-test log file, so that parallel execution does not produce +intermingled output. The output from failed tests is collected in the +@file{test-suite.log} file. If the variable @samp{VERBOSE} is set, this +file is output after the summary. For best results, the tests should be +verbose by default now. + @vindex TEST_EXTENSIONS @vindex TEST_LOGS Each log file is created when the corresponding test has completed. @@ -8724,15 +8736,28 @@ and @samp{./wrapper-script -d baz} to produce @file{foo.log}, @samp{TESTS_ENVIRONMENT} variable is still expanded before the driver, but should be reserved for the user. -@vindex VERBOSE -As with the simple driver above, by default one status line is printed -per completed test, and a short summary after the suite has completed. -However, standard output and standard error of the test are redirected -to a per-test log file, so that parallel execution does not produce -intermingled output. The output from failed tests is collected in the -@file{test-suite.log} file. If the variable @samp{VERBOSE} is set, this -file is output after the summary. For best results, the tests should be -verbose by default now. +@vindex AM_TESTS_SETUP +The @code{AM_TESTS_SETUP} variable can be used to run initialization code +and set environment variables for the tests' runs. The user can still +employ the @code{TESTS_ENVIRONMENT} variable to override settings from +@code{AM_TESTS_SETUP}. Note that, for implementation reasons, if the +@code{AM_TESTS_SETUP} variable is set, its contents @emph{must} be +terminated by a semicolon. + +@example +# The tests below are expected to use the file descriptor passed +# in the environment variable 'warn_fileno' to print warnings +# (e.g., about skipped and failed tests). If this variable were +# to be set to `2' (i.e. default stderr), the warnings would be +# redirected by the automake parallel-tests driver into the .log +# files. But the AM_TESTS_SETUP definition below will cause the +# reasons for skip/failure to be printed to the console instead. +# The user can still override this by setting TESTS_ENVIRONMENT +# to e.g. `warn_fileno=2' at make runtime, which will cause the +# warnings to be sent to the .log files again. +TESTS = test1.sh test2.sh ... +AM_TESTS_SETUP = exec 9>&2; warn_fileno=9; export warn_fileno; +@end example @trindex mostlyclean @trindex check-html diff --git a/lib/Automake/tests/Makefile.in b/lib/Automake/tests/Makefile.in index b4940db79..bea7a8dae 100644 --- a/lib/Automake/tests/Makefile.in +++ b/lib/Automake/tests/Makefile.in @@ -121,9 +121,11 @@ am__text_box = $(AWK) '{ \ am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory -# containing $f, in $tst the test, in $log the log, and passes -# TESTS_ENVIRONMENT. Save and restore TERM around use of -# TESTS_ENVIRONMENT, in case that unsets it. +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_SETUP (if any), and passes +# TESTS_ENVIRONMENT. Saves and restores TERM around uses of +# TESTS_ENVIRONMENT and AM_TESTS_SETUP, in case any of them unsets +# it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ @@ -138,6 +140,7 @@ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ +$(AM_TESTS_SETUP) \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. diff --git a/lib/am/check.am b/lib/am/check.am index 4d10ce901..1827e0114 100644 --- a/lib/am/check.am +++ b/lib/am/check.am @@ -93,9 +93,11 @@ am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory -# containing $f, in $tst the test, in $log the log, and passes -# TESTS_ENVIRONMENT. Save and restore TERM around use of -# TESTS_ENVIRONMENT, in case that unsets it. +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_SETUP (if any), and passes +# TESTS_ENVIRONMENT. Saves and restores TERM around uses of +# TESTS_ENVIRONMENT and AM_TESTS_SETUP, in case any of them unsets +# it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ @@ -110,6 +112,7 @@ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ +$(AM_TESTS_SETUP) \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout diff --git a/tests/Makefile.am b/tests/Makefile.am index b91a02597..c6006e325 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -580,6 +580,7 @@ parallel-tests7.test \ parallel-tests8.test \ parallel-tests9.test \ parallel-tests10.test \ +parallel-tests-am_tests_setup.test \ parallel-tests-unreadable-log.test \ parallel-tests-subdir.test \ parse.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 0cc68548a..40744a4a4 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -124,9 +124,11 @@ am__text_box = $(AWK) '{ \ am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory -# containing $f, in $tst the test, in $log the log, and passes -# TESTS_ENVIRONMENT. Save and restore TERM around use of -# TESTS_ENVIRONMENT, in case that unsets it. +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_SETUP (if any), and passes +# TESTS_ENVIRONMENT. Saves and restores TERM around uses of +# TESTS_ENVIRONMENT and AM_TESTS_SETUP, in case any of them unsets +# it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ @@ -141,6 +143,7 @@ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ +$(AM_TESTS_SETUP) \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. @@ -850,6 +853,7 @@ parallel-tests7.test \ parallel-tests8.test \ parallel-tests9.test \ parallel-tests10.test \ +parallel-tests-am_tests_setup.test \ parallel-tests-unreadable-log.test \ parallel-tests-subdir.test \ parse.test \ diff --git a/tests/parallel-tests-am_tests_setup.test b/tests/parallel-tests-am_tests_setup.test new file mode 100755 index 000000000..bf0d0c64d --- /dev/null +++ b/tests/parallel-tests-am_tests_setup.test @@ -0,0 +1,97 @@ +#! /bin/sh +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# This program 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, or (at your option) +# any later version. +# +# This program 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 this program. If not, see . + +# parallel-tests: check AM_TESTS_SETUP support, and its interaction +# with TESTS_ENVIRONMENT. + +parallel_tests=yes +. ./defs || Exit 1 + +set -e + +cat >> configure.in << 'END' +AC_PROG_MKDIR_P +AC_OUTPUT +END + +cat > Makefile.am << 'END' +TEST_EXTENSIONS = .sh .test +TESTS = foo.test bar.sh +SH_LOG_COMPILER = sh +AM_TESTS_SETUP = $(MKDIR_P) quux.dir; exec 9>&2; fd=9; export fd; +EXTRA_DIST = $(TESTS) +END + +cat > foo.test << 'END' +#! /bin/sh +echo "FOO='$FOO'" +echo "BAR='$BAR'" +test x"$FOO" = x"$BAR" +END +chmod a+x foo.test + +cat > bar.sh << 'END' +: ${fd=2} +eval "echo 'diagnostic message from test bar' >&${fd}" +END + +minicheck () +{ + cat foo.log + cat bar.log + test -d quux.dir +} + +miniclean () +{ + rmdir quux.dir + rm -f foo.log bar.log test-suite.log +} + +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a + +./configure + +FOO=1; export FOO + +TESTS_ENVIRONMENT='BAR=1' $MAKE check || { cat test-suite.log; Exit 1; } +minicheck +miniclean +TESTS_ENVIRONMENT='BAR=2' $MAKE check && { cat test-suite.log; Exit 1; } +minicheck +miniclean + +BAR=$FOO; export BAR + +$MAKE check 2>stderr || { cat stderr >&2; Exit1; } +cat stderr >&2 +minicheck +grep 'diagnostic message from test bar' stderr +grep 'diagnostic message from test bar' bar.log && Exit 1 +miniclean + +TESTS_ENVIRONMENT='fd=2' $MAKE check 2>stderr || { cat stderr >&2; Exit1; } +cat stderr >&2 +minicheck +grep 'diagnostic message from test bar' stderr && Exit 1 +grep 'diagnostic message from test bar' bar.log +miniclean + +$MAKE distcheck + +: