Subject: Re: bug#11252: recheck not dependent on all:

From: Stefano Lattarini <[email-masked]>
Date: Wed, 18 Apr 2012 14:59:36 +0200

On 04/18/2012 01:27 PM, Stefano Lattarini wrote:
> tags 11252 + patch
> close 11252
> thanks
> 
> I've applied the attached patch, which should solve the problem.  This
> fix will appear in the next major automake version (1.12).
> 
Oops, I had attached the wrong patch (thanks to Peter Rosin for pointing
that out privately).  Here is the correct patch.

Sorry for the noise,
  Stefano
>From f46359b42790945e42e78a620e651ce66c2b8833 Mon Sep 17 00:00:00 2001
Message-Id: <f46359b42[email-masked]>
From: Stefano Lattarini <[email-masked]>
Date: Wed, 18 Apr 2012 11:40:15 +0200
Subject: [PATCH] parallel-tests: 'recheck' must depend on 'all'

Fixes automake bug#11252.

When a developer experience one or more failures in the testsuite, a good
workflow is for him to modify its program's sources to fix the bug thus
revealed, run "make recheck" to verify that the change has indeed solved
the testsuite failures previously experienced, and then run "make check"
to verify that the change has not introduced any new failure or regression.

Unfortunately, this apparently natural workflow couldn't have worked until
now, since the Automake-provided 'recheck' target (which didn't depend on
'all') wouldn't have causes the program to be recompiled, and the failed
tests would have thus been run with the older, buggy version of the
program, failing the same way as before.

* lib/am/check.am (recheck): Depend on 'all'.
* t/parallel-tests-recheck-depends-on-all.sh: New test.
* t/list-of-tests.mk: Add it.
* NEWS: Update.

Signed-off-by: Stefano Lattarini <[email-masked]>
---
 NEWS                                       |    4 ++
 lib/am/check.am                            |    3 +-
 t/list-of-tests.mk                         |    1 +
 t/parallel-tests-recheck-depends-on-all.sh |   93 ++++++++++++++++++++++++++++
 4 files changed, 100 insertions(+), 1 deletion(-)
 create mode 100755 t/parallel-tests-recheck-depends-on-all.sh

diff --git a/NEWS b/NEWS
index 142f805..bb2480f 100644
--- a/NEWS
+++ b/NEWS
@@ -92,6 +92,10 @@ New in 1.11c:
     testsuite harness.  This is still the default at the moment, but it
     might change in future versions.
 
+  - The 'recheck' target (provided by the parallel testsuite harness) now
+    depends on the 'all' target.  This allows for a better user-experience
+    in test-driven development.  See automake bug#11252.
+
   - Test scripts that exit with status 99 to signal an "hard error" (e.g.,
     and unexpected or internal error, or a failure to set up the test case
     scenario) have their outcome reported as an 'ERROR' now.  Previous
diff --git a/lib/am/check.am b/lib/am/check.am
index 0ce064d..7866570 100644
--- a/lib/am/check.am
+++ b/lib/am/check.am
@@ -367,7 +367,8 @@ check-TESTS recheck:
 	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"
 
 ## Recheck must depend on $(check_SCRIPTS), $(check_PROGRAMS), etc.
-recheck: %CHECK_DEPS%
+## It must also depend on the 'all' target.  See automake bug#11252.
+recheck: all %CHECK_DEPS%
 
 AM_RECURSIVE_TARGETS += check recheck
 
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index ea77bc1..4562828 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -737,6 +737,7 @@ t/parallel-tests6.sh \
 t/parallel-tests8.sh \
 t/parallel-tests9.sh \
 t/parallel-tests10.sh \
+t/parallel-tests-recheck-depends-on-all.sh \
 t/parallel-tests-exeext.sh \
 t/parallel-tests-suffix.sh \
 t/parallel-tests-suffix-prog.sh \
diff --git a/t/parallel-tests-recheck-depends-on-all.sh b/t/parallel-tests-recheck-depends-on-all.sh
new file mode 100755
index 0000000..cec66ae
--- /dev/null
+++ b/t/parallel-tests-recheck-depends-on-all.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2012 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/>.
+
+# The parallel-tests 'recheck' target must depend on the 'all' target.
+# See automake bug#11252.
+
+am_parallel_tests=yes
+required=cc
+. ./defs || Exit 1
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+all-local:
+	test ! -f status || echo okokok > status
+bin_PROGRAMS = foo
+TESTS = a.test b.test c.test
+END
+
+cat > foo.c << 'END'
+#include <stdio.h>
+int main (void)
+{
+  printf ("failure :-(" "\n");
+  return 1;
+}
+END
+
+cat > a.test << 'END'
+#!/bin/sh
+exit 0
+END
+
+cat > b.test << 'END'
+#!/bin/sh
+grep okokok status
+END
+
+cat > c.test << 'END'
+#!/bin/sh
+./foo
+END
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+
+$MAKE check >stdout && { cat stdout; Exit 1; }
+cat stdout
+count_test_results total=3 pass=1 fail=2 skip=0 xfail=0 xpass=0 error=0
+test ! -f status
+
+$sleep
+: > status
+cat > foo.c << 'END'
+#include <stdio.h>
+int main (void)
+{
+  printf ("success :-)" "\n");
+  return 0;
+}
+END
+
+$MAKE recheck >stdout || { cat stdout; Exit 1; }
+cat stdout
+count_test_results total=2 pass=2 fail=0 skip=0 xfail=0 xpass=0 error=0
+grep '^PASS: b\.test$' stdout
+grep '^PASS: c\.test$' stdout
+
+$MAKE recheck >stdout || { cat stdout; Exit 1; }
+cat stdout
+count_test_results total=0 pass=0 fail=0 skip=0 xfail=0 xpass=0 error=0
+
+:
-- 
1.7.9.5