tests: allow to run Perl tests more cleanly
authorJim Meyering <meyering@redhat.com>
Mon, 12 May 2008 12:39:55 +0000 (14:39 +0200)
committerJim Meyering <meyering@redhat.com>
Fri, 16 May 2008 08:10:34 +0000 (10:10 +0200)
Before this change, perl tests were run via a #!/bin/sh script
in which perl was invoked via $(PERL) ... -- - <<\EOF.
That made some stty tests fail due to the way stdin was usurped.
* build-aux/check.mk (am__check_pre): Don't append $(SHELL) to this
nominally automake-internal variable.
* tests/check.mk (TESTS_ENVIRONMENT): Instead, define a shell function
here, and append it to the more user-visible $(TESTS_ENVIRONMENT).

build-aux/check.mk
tests/check.mk

index 9cd1b3397a2c75d4e56bc1ac39d396661756a7cc..165ea366bda5736d2454d38d06f3915aa56fee05 100644 (file)
@@ -113,7 +113,7 @@ if test -f "./$$src"; then dir=./;          \
 elif test -f "$$src"; then dir=;               \
 else dir="$(srcdir)/"; fi;                     \
 __SAVED_TERM=$$TERM;                           \
-$(TESTS_ENVIRONMENT) $(SHELL)
+$(TESTS_ENVIRONMENT)
 
 # To be appended to the command running the test.  Handles the stdout
 # and stderr redirection, and catch the exit status.
index bbf22ed9349dd25145ab0251d86c33dd39b5890c..945d543dc2b752c5295aa092de12f553b8473eb8 100644 (file)
@@ -50,6 +50,20 @@ built_programs = \
 TESTS_ENVIRONMENT =                            \
   . $(top_srcdir)/tests/lang-default;          \
   . $(top_srcdir)/tests/envvar-check;          \
+  shell_or_perl_() {                           \
+    if grep '^\#!/usr/bin/perl' "$$1" > /dev/null; then                \
+      if $(PERL) -e 'use warnings' > /dev/null 2>&1; then      \
+        $(PERL) -w -I$(top_srcdir)/tests -MCoreutils           \
+             -M"CuTmpdir qw($$tst)" -- "$$1";  \
+      else                                     \
+       echo 1>&2 "$$tst: configure did not find a usable version of Perl," \
+         "so skipping this test";              \
+       (exit 77);                              \
+      fi;                                      \
+    else                                       \
+      $(SHELL) "$$1";                          \
+    fi;                                                \
+  };                                           \
   LOCALE_FR='$(LOCALE_FR)'                     \
   abs_top_builddir='$(abs_top_builddir)'       \
   abs_top_srcdir='$(abs_top_srcdir)'           \
@@ -67,7 +81,8 @@ TESTS_ENVIRONMENT =                           \
   PACKAGE_VERSION=$(PACKAGE_VERSION)           \
   PERL='$(PERL)'                               \
   REPLACE_GETCWD=$(REPLACE_GETCWD)             \
-  PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH"
+  PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH" \
+  shell_or_perl_
 
 TEST_LOGS = $(TESTS:=.log)