diff options
-rw-r--r-- | t/Makefile.inc | 6 | ||||
-rw-r--r-- | t/ax/am-test-lib.sh | 55 | ||||
-rw-r--r-- | t/lisp8.sh | 17 | ||||
-rw-r--r-- | t/parallel-tests-concurrency.sh | 8 | ||||
-rw-r--r-- | t/tap-more.sh | 20 |
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 |