summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac7
-rw-r--r--tests/Makefile.am11
-rw-r--r--tests/no-perl6
-rw-r--r--tests/shell-or-perl11
4 files changed, 24 insertions, 11 deletions
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.