#
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.
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
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)
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...]
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
$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
mkdir build
cd build
srcdir=..
- run_make=$MAKE
+ am_make=$MAKE
elif test $try -eq 1; then
# In-tree parallel build.
srcdir=.
*\ -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',
# 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
# 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
: > 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