[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/7] tests: expose bug#12554 (false positives for presence of '-k
From: |
Stefano Lattarini |
Subject: |
[PATCH 1/7] tests: expose bug#12554 (false positives for presence of '-k' make option) |
Date: |
Mon, 29 Apr 2013 23:00:29 +0200 |
The current implementation of the code descending into $(SUBDIRS)
entries uses the following snippet to decide whether make is running
with the '-k' a.k.a. '--keep-going' option, and thus whether a failure
in a subdirectory should prevent the descent in the following ones:
fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done
It's clear that the second pattern in the 'case' construct can possibly
match false positives, for examples in these two cases:
make check TESTS="x.test k.test"
make -I /usr/local/kool-fragments
which are somewhat unusual, but not invalid. So we need a more resilient
implementation, as we did for the detection of the '-n' flag.
But alas, such an implementation seems quite tricky to obtain in portable
make. So for the moment we content ourselves with exposing the bug, with
the hope of being able to fix soon enough.
* t/subdir-keep-going-pr12554.sh: New test.
* t/list-of-tests.mk (handwritten_TESTS, XFAIL_TESTS): Add it.
* THANKS: Update
Reported-by: Michael Daniels <address@hidden>
Signed-off-by: Stefano Lattarini <address@hidden>
---
THANKS | 1 +
t/list-of-tests.mk | 2 ++
t/subdir-keep-going-pr12554.sh | 70 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 73 insertions(+)
create mode 100755 t/subdir-keep-going-pr12554.sh
diff --git a/THANKS b/THANKS
index cf46972..f05d0c4 100644
--- a/THANKS
+++ b/THANKS
@@ -257,6 +257,7 @@ Maxim Sinev address@hidden
Maynard Johnson address@hidden
Merijn de Jonge address@hidden
Michael Brantley address@hidden
+Michael Daniels address@hidden
Michael Hofmann address@hidden
Michael Ploujnikov address@hidden
Michel de Ruiter address@hidden
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index c72a636..fbe2b56 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -41,6 +41,7 @@ t/remake-timing-bug-pr8365.sh \
t/lex-subobj-nodep.sh \
t/remake-am-pr10111.sh \
t/remake-m4-pr10111.sh \
+t/subdir-keep-going-pr12554.sh \
$(perl_fake_XFAIL_TESTS)
perl_TESTS = \
@@ -1015,6 +1016,7 @@ t/subdir-order.sh \
t/subdir-with-slash.sh \
t/subdir-subsub.sh \
t/subdir-distclean.sh \
+t/subdir-keep-going-pr12554.sh \
t/subobj.sh \
t/subobj2.sh \
t/subobj4.sh \
diff --git a/t/subdir-keep-going-pr12554.sh b/t/subdir-keep-going-pr12554.sh
new file mode 100755
index 0000000..03d5cb0
--- /dev/null
+++ b/t/subdir-keep-going-pr12554.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2013 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Check that the Automake-generated recursive rules are resilient against
+# false positives in deciding whether make is running with the '-k'
+# option, and thus whether a failure into one of the $(SUBDIRS) should
+# still prevent recursion in the following $(SUBDIRS) entries. See
+# automake bug#12544.
+
+. test-init.sh
+
+echo nil: | $MAKE -I . -f - || skip_ "$MAKE doesn't support the -I option"
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+mkdir k ./--keep-going sub1 sub2
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub1 sub2
+END
+
+cat > sub1/Makefile.am <<'END'
+all-local:
+ touch ko
+ false
+END
+cat > sub2/Makefile.am <<'END'
+all-local:
+ test -f ../sub1/ko
+ touch ok
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+st=0
+$MAKE -I k -I --keep-going \
+ TESTS='k --keep-going -k' AM_MAKEFLAGS="TESTS='k --keep-going -k'" \
+ || st=$?
+# Don't trust the exit status of "make -k" for non-GNU make.
+if using_gmake; then
+ test $st -gt 0 || exit 1
+fi
+test ! -r sub2/ok
+
+# Sanity check.
+st=0; $MAKE -k || st=$?
+if { using_gmake && test $st -eq 0; } || test ! -f sub2/ok; then
+ fatal_ '"make -k" not working as expected'
+fi
+
+:
--
1.8.2.1.610.g562af5b
- Re: bug#12554: Checking MAKEFLAGS with RECURSIVE_TARGETS, Stefano Lattarini, 2013/04/29
- [PATCH 0/7][PATCH 0/7] Fix automake bug#12554., Stefano Lattarini, 2013/04/29
- [PATCH 2/7] header-vars: new variable $(am__running_with_option), Stefano Lattarini, 2013/04/29
- [PATCH 1/7] tests: expose bug#12554 (false positives for presence of '-k' make option),
Stefano Lattarini <=
- [PATCH 3/7] tests: remove dead code from t/make-dryrun.tap, Stefano Lattarini, 2013/04/29
- [PATCH 4/7] header-vars: simplify how make flags are determined, Stefano Lattarini, 2013/04/29
- [PATCH 5/7] header-vars: recognize more make flags ('-k' in particular), Stefano Lattarini, 2013/04/29
- [PATCH 6/7] subdirs: don't return false positives for the '-k' option's presence, Stefano Lattarini, 2013/04/29
- [PATCH 7/7] tests: avoid a spurious error with Solaris make, Stefano Lattarini, 2013/04/29