summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--t/Makefile.inc6
-rw-r--r--t/ax/am-test-lib.sh55
-rw-r--r--t/lisp8.sh17
-rw-r--r--t/parallel-tests-concurrency.sh8
-rw-r--r--t/tap-more.sh20
5 files changed, 61 insertions, 45 deletions
diff --git a/t/Makefile.inc b/t/Makefile.inc
index 3634a4be0..b67f3a581 100644
--- a/t/Makefile.inc
+++ b/t/Makefile.inc
@@ -239,6 +239,12 @@ check-cc-no-c-o:
AM_TESTSUITE_SIMULATING_NO_CC_C_O=yes
.PHONY: check-cc-no-c-o
+# Automake-generated Makefiles should work when run with parallel make.
+check-parallel:
+ $(AM_V_GEN)$(MAKE) $(AM_MAKEFLAGS) check \
+ AM_TESTSUITE_MAKE="$${AM_TESTSUITE_MAKE-$${MAKE-make}} -j4"
+.PHONY: check-parallel
+
## Checking the list of tests.
test_subdirs = %D% %D%/pm contrib/%D%
include %D%/CheckListOfTests.am
diff --git a/t/ax/am-test-lib.sh b/t/ax/am-test-lib.sh
index 542bbb52b..53dd27ee5 100644
--- a/t/ax/am-test-lib.sh
+++ b/t/ax/am-test-lib.sh
@@ -184,7 +184,9 @@ is_valid_varname ()
#
run_make ()
{
- am__make_redirect=
+ am__make_redirect_stdout=no
+ am__make_redirect_stderr=no
+ am__make_redirect_stdall=no
am__make_flags=
# Follow-up code might want to analyse these, so don't make them as
# private, nor unset them later.
@@ -194,15 +196,16 @@ run_make ()
while test $# -gt 0; do
case $1 in
-e) am_make_rc_exp=$2; shift;;
- -O) am__make_redirect="$am__make_redirect >stdout";;
- -E) am__make_redirect="$am__make_redirect 2>stderr";;
- -M) am__make_redirect=">output 2>&1";;
+ -O) am__make_redirect_stdout=yes;;
+ -E) am__make_redirect_stderr=yes;;
+ -M) am__make_redirect_stdall=yes;;
--) shift; break;;
*) break;;
esac
shift
done
+ # Use append mode here to avoid dropping output. See automake bug#11413
if using_gmake; then
# We can trust GNU make to correctly pass macro definitions given
# on the command line down to sub-make invocations, and this allow
@@ -247,16 +250,41 @@ run_make ()
unset am__make_flags
fi
- eval "\$MAKE${am__make_redirect}"' ${1+"$@"}' || am_make_rc_got=$?
+ # In redirecting make output below, use append mode, to avoid
+ # dropping output. See automake bug#11413 for details.
+ # The exit status of 253 is a more-or-less random choice, to
+ # help us catch possible errors in redirections and error out
+ # accordingly.
+ (
+ : exec $MAKE ${1+"$@"} # Display traces for future command.
+ set +x # We need to remove them now, not to pollute redirected stderr.
+ if test $am__make_redirect_stdall = yes; then
+ : > output && exec 1>>output 2>&1 || exit 253
+ else
+ if test $am__make_redirect_stdout = yes; then
+ : > stdout && exec 1>>stdout || exit 253
+ fi
+ if test $am__make_redirect_stderr = yes; then
+ : > stderr && exec 2>>stderr || exit 253
+ fi
+ fi
+ exec $MAKE ${1+"$@"}
+ ) || am_make_rc_got=$?
- case $am__make_redirect in
- *output*) cat output;;
- *stderr*stdout*) cat stdout && cat stderr >&2;;
- *stdout*stderr*) cat stdout && cat stderr >&2;;
- *stdout*) cat stdout;;
- *stderr*) cat stderr >&2;;
- esac \
- || fatal_ "displaying make output"
+ if test $am_make_rc_got -eq 253; then
+ fatal_ "run_make: problems in redirecting make output"
+ fi
+
+ if test $am__make_redirect_stdall = yes; then
+ cat output || fatal_ "displaying make output"
+ else
+ if test $am__make_redirect_stdout = yes; then
+ cat stdout || fatal_ "displaying make output"
+ fi
+ if test $am__make_redirect_stderr = yes; then
+ cat stderr >&2 || fatal_ "displaying make output"
+ fi
+ fi
case $am_make_rc_exp in
IGNORE)
@@ -271,7 +299,6 @@ run_make ()
test $am_make_rc_exp -eq $am_make_rc_got || return 1
;;
esac
- unset am__make_redirect
}
# AUTOMAKE_run [-e STATUS] [-d DESCRIPTION] [--] [AUTOMAKE-ARGS...]
diff --git a/t/lisp8.sh b/t/lisp8.sh
index efb785ca1..c42488683 100644
--- a/t/lisp8.sh
+++ b/t/lisp8.sh
@@ -37,26 +37,17 @@ $AUTOCONF
$AUTOMAKE --add-missing
./configure
-# Use append mode here to avoid dropping output. See automake bug#11413.
-# TODO: port this to to run_make(), and rewrite this hunk to use that
-# function ...
-: >stdout
-$MAKE -j >>stdout || { cat stdout; exit 1; }
-cat stdout
+run_make -O -- -j
test -f am-one.elc
test -f am-two.elc
test -f am-three.elc
+# Delete ...
rm -f am-*.elc
-# Use append mode here to avoid dropping output. See automake bug#11413.
-# TODO: port this to to run_make(), and rewrite this hunk to use that
-# function ...
-: >stdout
-$MAKE -j >>stdout || { cat stdout; exit 1; }
-cat stdout
-
+# ... and recover.
+run_make -O -- -j
test -f am-one.elc
test -f am-two.elc
test -f am-three.elc
diff --git a/t/parallel-tests-concurrency.sh b/t/parallel-tests-concurrency.sh
index dd5122581..7fbd20eeb 100644
--- a/t/parallel-tests-concurrency.sh
+++ b/t/parallel-tests-concurrency.sh
@@ -40,7 +40,7 @@ END
if test x"$j" = xNONE; then
skip_ "can't run make in parallel mode"
fi
- $MAKE ${j}2 all >output 2>&1 || continue
+ run_make -M -- ${j}2 all || continue
$EGREP -i "(warning|error):|-j[\"\'\` ]" output && continue
break
done
@@ -92,11 +92,7 @@ cd serial
$MAKE ${j}1 check &
cd ../parallel
$sleep
-# Use append mode here to avoid dropping output. See automake bug#11413.
-# TODO: port this to to run_make(), and rewrite this hunk to use that
-# function ...
-: > stdout
-$MAKE ${j}4 check >> stdout
+run_make -O -- ${j}4 check
cd ..
# Ensure the tests are really being run in parallel mode: if this is
# the case, the serial run of the dummy testsuite started above should
diff --git a/t/tap-more.sh b/t/tap-more.sh
index 14a7918cb..19d2e6115 100644
--- a/t/tap-more.sh
+++ b/t/tap-more.sh
@@ -85,7 +85,7 @@ for try in 0 1; do
mkdir build
cd build
srcdir=..
- run_make=$MAKE
+ am_make=$MAKE
elif test $try -eq 1; then
# In-tree parallel build.
srcdir=.
@@ -93,7 +93,7 @@ for try in 0 1; do
*\ -j*)
# Degree of parallelism already specified by the user: do
# not override it.
- run_make=$MAKE
+ :
;;
*)
# Some make implementations (e.g., HP-UX) don't grok '-j',
@@ -102,10 +102,12 @@ for try in 0 1; do
# space between '-j' and the number of jobs (e.g., Solaris
# dmake). We need a runtime test to see what works.
echo 'all:' > Makefile
- for run_make in "$MAKE -j3" "$MAKE -j 3" "$MAKE"; do
- $run_make && break
+ for am_make in "$MAKE -j3" "$MAKE -j 3" "$MAKE"; do
+ $am_make && break
done
rm -f Makefile
+ MAKE=$am_make
+ unset am_make
;;
esac
else
@@ -117,10 +119,7 @@ for try in 0 1; do
# Success.
- # Use append mode here to avoid dropping output. See automake bug#11413.
- : >stdout
- $run_make check >>stdout || { cat stdout; exit 1; }
- cat stdout
+ run_make -O check
count_test_results total=6 pass=4 fail=0 xpass=0 xfail=1 skip=1 error=0
grep '^PASS: 1\.test 1 - mu$' stdout
grep '^SKIP: 1\.test 2 zardoz # SKIP$' stdout
@@ -137,10 +136,7 @@ for try in 0 1; do
: > not-skip
: > bail-out
- # Use append mode here to avoid dropping output. See automake bug#11413.
- : >stdout
- $run_make check >>stdout && { cat stdout; exit 1; }
- cat stdout
+ run_make -e FAIL -O check
count_test_results total=7 pass=4 fail=1 xpass=0 xfail=1 skip=0 error=1
grep '^PASS: 1\.test 1 - mu$' stdout
grep '^FAIL: 1\.test 2 zardoz$' stdout