From 00f5ba15dd91a3d9780fe1fbd06a4df436ae6714 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Thu, 30 Aug 2012 14:13:11 +0200 Subject: tests: detect missing perl at configure runtime * configure.ac (AM_CONDITIONAL): Set the conditional 'HAVE_PERL' to true if the configure-time checks (as run by gl_PERL) have been able to find a working perl. * tests/no-perl: New script, report a diagnostic about "missing perl" and exit with status 77. * tests/Makefile.am (EXTRA_DIST): Distribute it. (TESTSUITE_PERL): New, define to '$(PERL)' if a perl interpreter has been found at configure time (i.e., if the 'HAVE_PERL' automake conditional is true), and to '$(srcdir)/no-perl' otherwise. (LOG_COMPILER): Use $(TESTSUITE_PERL) instead of $(PERL). (XPL_LOG_COMPILER): Likewise. * tests/shell-or-perl: Simplify: no need to actually check whether perl is working. --- configure.ac | 7 +++++++ tests/Makefile.am | 11 +++++++++-- tests/no-perl | 6 ++++++ tests/shell-or-perl | 11 ++--------- 4 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 tests/no-perl diff --git a/configure.ac b/configure.ac index 355dce3db..083fd3491 100644 --- a/configure.ac +++ b/configure.ac @@ -60,6 +60,13 @@ gl_EARLY gl_INIT coreutils_MACROS +# The test suite needs to know if we have a working perl. +# FIXME: this is suboptimal. Ideally, we would be able to call gl_PERL +# with an ACTION-IF-NOT-FOUND argument ... +cu_have_perl=yes +case $PERL in *"/missing ") cu_have_perl=no;; esac +AM_CONDITIONAL([HAVE_PERL], [test $cu_have_perl = yes]) + AC_ARG_ENABLE([gcc-warnings], [AS_HELP_STRING([--enable-gcc-warnings], [turn on lots of GCC warnings (for developers)])], diff --git a/tests/Makefile.am b/tests/Makefile.am index 581f803e7..ff0af8494 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -47,6 +47,12 @@ check_DATA = .built-programs TEST_EXTENSIONS = .xpl +if HAVE_PERL +TESTSUITE_PERL = $(PERL) +else +TESTSUITE_PERL = $(SHELL) $(srcdir)/no-perl +endif + # '$f' is set by the Automake-generated test harness to the path of the # current test script stripped of VPATH components, and is used by the # shell-or-perl script to determine the name of the temporary files to be @@ -55,11 +61,11 @@ TEST_EXTENSIONS = .xpl LOG_COMPILER = \ $(SHELL) $(srcdir)/shell-or-perl \ --test-name "$$f" --srcdir '$(srcdir)' \ - --shell '$(SHELL)' --perl '$(PERL)' -- + --shell '$(SHELL)' --perl '$(TESTSUITE_PERL)' -- # Perl scripts that must be run in tainted mode. XPL_LOG_COMPILER = \ - $(PERL) -wT -I$(srcdir) -MCoreutils -MCuSkip -M"CuTmpdir qw($$f)" + $(TESTSUITE_PERL) -wT -I$(srcdir) -MCoreutils -MCuSkip -M"CuTmpdir qw($$f)" # Note that the first lines are statements. They ensure that environment # variables that can perturb tests are unset or set to expected values. @@ -118,6 +124,7 @@ EXTRA_DIST = \ init.cfg \ init.sh \ lang-default \ + no-perl \ other-fs-tmpdir \ sample-test \ shell-or-perl \ diff --git a/tests/no-perl b/tests/no-perl new file mode 100644 index 000000000..956a82646 --- /dev/null +++ b/tests/no-perl @@ -0,0 +1,6 @@ +#! /bin/sh +# Perl is not available, the test should be considered skipped. +# FD 9 should have been opened by the test suite harness, pointing +# to the original stderr (usually, the user's terminal). +echo "test skipped: no usable version of Perl found" >&9 +exit 77 diff --git a/tests/shell-or-perl b/tests/shell-or-perl index cb80edf67..409db0ee7 100644 --- a/tests/shell-or-perl +++ b/tests/shell-or-perl @@ -94,15 +94,8 @@ read shebang_line < "$test_script" \ case $shebang_line in '#!/usr/bin/perl'*) # The test is a perl script. - if $cu_PERL -e 'use warnings' > /dev/null 2>&1; then - exec $cu_PERL -w -I"$srcdir" -MCoreutils -MCuSkip \ - -M"CuTmpdir qw($test_name)" \ - -- "$test_script" ${1+"$@"} - else - # Perl is not available, skip the test. - echo "$test_name: skip: no usable version of Perl found" - exit 77 - fi + exec $cu_PERL -w -I"$srcdir" -MCoreutils -MCuSkip \ + -M"CuTmpdir qw($test_name)" -- "$test_script" ${1+"$@"} ;; *) # Assume the test is a shell script. -- cgit v1.2.3-70-g09d2