From dd22a197a909477653f5d69230944d2511a7de52 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Tue, 11 Nov 2003 12:07:45 +0000 Subject: [PATCH] * tests/spy.test: Document overlapping ::-rules incompatibilities, and check only non-overlapping ::-rules. --- ChangeLog | 3 ++ tests/spy.test | 82 +++++++++++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index bb9c9fdb..5610a1d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2003-11-11 Alexandre Duret-Lutz + * tests/spy.test: Document overlapping ::-rules incompatibilities, + and check only non-overlapping ::-rules. + * doc/automake.texi (Texinfo): Define MAKEINFO, MAKEINFOHTML, MAKEINFOFLAGS, AM_MAKEINFOFLAGS, AM_MAKEINFOHTMLFLAGS, TEXI2DVI, TEXI2PDF, DVIPS, and TEXINFO_TEX in a table. diff --git a/tests/spy.test b/tests/spy.test index b09a33fb..2acf9423 100755 --- a/tests/spy.test +++ b/tests/spy.test @@ -25,6 +25,52 @@ # these do not work. We might use these rules to simplify the rebuild # rules (instead of the $? hack). +# Tom Tromey write: +# | In the distant past we used :: rules extensively. +# | Fran?ois convinced me to get rid of them: +# | +# | Thu Nov 23 18:02:38 1995 Tom Tromey +# | [ ... ] +# | * subdirs.am: Removed "::" rules +# | * header.am, libraries.am, mans.am, texinfos.am, footer.am: +# | Removed "::" rules +# | * scripts.am, programs.am, libprograms.am: Removed "::" rules +# | +# | +# | I no longer remember the rationale for this. It may have only been a +# | belief that they were unportable. + +# On a related topic, the Autoconf manual has the following text: +# | `VPATH' and double-colon rules +# | Any assignment to `VPATH' causes Sun `make' to only execute +# | the first set of double-colon rules. (This comment has been +# | here since 1994 and the context has been lost. It's probably +# | about SunOS 4. If you can reproduce this, please send us a +# | test case for illustration.) + +# We already know that overlapping ::-rule like +# +# a :: b +# echo rule1 >> $@ +# a :: c +# echo rule2 >> $@ +# a :: b c +# echo rule3 >> $@ +# +# do not work equally on all platforms. It seems that in all cases +# Make attempts to run all matching rules. However at least GNU Make, +# NetBSD Make, and FreeBSD Make will detect that $@ was updated by the +# first matching rule and skip remaining matches (with the above +# example that means that unless `a' was declared PHONY, only "rule1" +# will be appended to `a' if both b and c have changed). Other +# implementations like OSF1 Make and HP-UX Make do not perform such a +# check and execute all matching rules whatever they do ("rule1", +# "rule2", abd "rule3" will all be appended to `a' if b and c have +# changed). + +# So it seems only non-overlapping ::-rule may be portable. This is +# what we check now. + . ./defs || exit 1 set -e @@ -34,41 +80,14 @@ a :: b echo rule1 >> $@ a :: c echo rule2 >> $@ -a :: b c - echo rule3 >> $@ EOF touch b c -$MAKE -test "`cat a`" = rule1 -: > a $sleep -touch b -$MAKE -test "`cat a`" = rule1 : > a -$sleep -touch c $MAKE -test "`cat a`" = rule2 -: > a +test "`cat a`" = '' $sleep -touch b c -$MAKE -test "`cat a`" = rule1 - - -: > a -$sleep -cat >Makefile <<\EOF -a :: b c - echo rule1 >> $@ -a :: c - echo rule2 >> $@ -a :: b - echo rule3 >> $@ -EOF - touch b $MAKE test "`cat a`" = rule1 @@ -76,9 +95,4 @@ test "`cat a`" = rule1 $sleep touch c $MAKE -test "`cat a`" = rule1 -: > a -$sleep -touch b c -$MAKE -test "`cat a`" = rule1 +test "`cat a`" = rule2 -- 2.43.5