* tests/spy.test: Document overlapping ::-rules incompatibilities,
authorAlexandre Duret-Lutz <adl@gnu.org>
Tue, 11 Nov 2003 12:07:46 +0000 (12:07 +0000)
committerAlexandre Duret-Lutz <adl@gnu.org>
Tue, 11 Nov 2003 12:07:46 +0000 (12:07 +0000)
and check only non-overlapping ::-rules.

ChangeLog
tests/spy.test

index bb9c9fd..5610a1d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2003-11-11  Alexandre Duret-Lutz  <adl@gnu.org>
 
+       * 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.
index b09a33f..2acf942 100755 (executable)
 # 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  <tromey@cambric>
+# | [ ... ]
+# |         * 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