]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: detect missing perl at configure runtime
authorStefano Lattarini <stefano.lattarini@gmail.com>
Thu, 30 Aug 2012 12:13:11 +0000 (14:13 +0200)
committerJim Meyering <meyering@redhat.com>
Thu, 30 Aug 2012 16:55:59 +0000 (18:55 +0200)
* 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
tests/Makefile.am
tests/no-perl [new file with mode: 0644]
tests/shell-or-perl

index 355dce3db30ee645bafd3bc7909bc6112ecb3d50..083fd349104435e6723174f97e9d760879752221 100644 (file)
@@ -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)])],
index 581f803e705d963d19efdd89ee59a6c5fa0af55d..ff0af8494a2ef6b6bc58393652d02a2310f1df6b 100644 (file)
@@ -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 (file)
index 0000000..956a826
--- /dev/null
@@ -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
index cb80edf67580c543f051d2848c92bc7eeb90388d..409db0ee7aa96f6562815bb68dbf5ca2b37e0bc8 100644 (file)
@@ -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.