From: Stefano Lattarini Date: Tue, 15 May 2012 09:18:17 +0000 (+0200) Subject: [ng] memoize: expose a serious bug (affecting GNU make < 3.83) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34a7d424ae60124f17dc50a18196f7b4876802fb;p=thirdparty%2Fautomake.git [ng] memoize: expose a serious bug (affecting GNU make < 3.83) This is a follow-up to commit v1.12-217-gd55204f of 2012-05-12, "[ng] vars: implement memoization of make variables (new 'am__memoize' func)". So, apparently, all our workarounds aimed at avoiding the subtle GNU make bug affecting variable memoization: have not been enough :-( When trying to use 'am__memoize' in a non-trivial setup (to optimize the new form of the parallel-tests harness implemented by the series http://lists.gnu.org/archive/html/automake-ng/2012-05/msg00015.html), we stumbled upon that bug again. At this point, it's quite clear that there is no safe way to safely avoid it, so we'll have to find a way to enable memoization (that is just an optimization) only with GNU make >= 3.83 (once that is out). Here, we just enhance our testsuite to expose the (re)discovered issue. * t/memoize.tap: Enhance. The new check fails with GNU make <= 3.82, and passes with the development version of GNU make (which should become GNU make 3.83 eventually). Signed-off-by: Stefano Lattarini --- diff --git a/t/memoize.tap b/t/memoize.tap index 516d335fd..8bd56f766 100755 --- a/t/memoize.tap +++ b/t/memoize.tap @@ -19,7 +19,7 @@ am_create_testdir=empty . ./defs || Exit 1 -plan_ 12 +plan_ 13 ocwd=`pwd` || fatal_ "couldn't get current working directory" @@ -223,6 +223,25 @@ END #--------------------------------------------------------------------------- +# This usage has been known to cause problems with GNU make <= 3.82, +# tickling this bug: +# +# + +T "known GNU make issue (https://savannah.gnu.org/patch/?7534)" <<'END' + +setup := $(shell mkdir -p t/pm && : > t/pm/Cond2.pl) + +TESTS = $(wildcard t/pm/Cond2.pl) +memo/am__test_bases = $(TESTS) +$(call am__memoize,am__test_bases) + +test: + test '$(am__test_bases)' = 't/pm/Cond2.pl' +END + +#--------------------------------------------------------------------------- + # Try memoization with variables having a very long content. Our first # (unpublished) memoization implementation didn't work in that case -- it # triggered errors like "*** unterminated variable reference. Stop" when