automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FYI: spy.test for ::-rules


From: Alexandre Duret-Lutz
Subject: Re: FYI: spy.test for ::-rules
Date: Tue, 11 Nov 2003 13:07:31 +0100
User-agent: Gnus/5.1003 (Gnus v5.10.3) Emacs/21.3 (gnu/linux)

>>> "Tom" == Tom Tromey <address@hidden> writes:

 >>>>>> "adl" == Alexandre Duret-Lutz <address@hidden> writes:
 adl> This was discussed in April/May, when Eric Siegerman (IIRC) suggested
 adl> using ::-rules to simplify

 Tom> In the distant past we used :: rules extensively.
 Tom> François convinced me to get rid of them:

 Tom> Thu Nov 23 18:02:38 1995  Tom Tromey  <address@hidden>
 Tom> [ ... ]
 Tom> * subdirs.am: Removed "::" rules
 Tom> * header.am, libraries.am, mans.am, texinfos.am, footer.am:
 Tom> Removed "::" rules
 Tom> * scripts.am, programs.am, libprograms.am: Removed "::" rules

 Tom> I no longer remember the rationale for this.  It may have only been a
 Tom> belief that they were unportable.

Thanks.  Now I see it's even said in the first NEWS entry!

It seems that it will be hard to use these rules to rebuild
Makefile.ins anway.  Eric, the problem with the scheme at
http://mail.gnu.org/archive/html/automake/2003-04/msg00266.html
is that some Make implementations (at least OSF1 and HP-UX) will
run the two rules if both could be fired initially (this happens
when both configure.ac and Makefile.am have been changed, for
instance).  Smarter Makes will run just the first, and detect
that Makefile.in is up-to-date when considering the second.

I'm checking this in.

2003-11-11  Alexandre Duret-Lutz  <address@hidden>

        * tests/spy.test: Document overlapping ::-rules incompatibilities,
        and check only non-overlapping ::-rules.

Index: tests/spy.test
===================================================================
RCS file: /cvs/automake/automake/tests/spy.test,v
retrieving revision 1.1
diff -u -r1.1 spy.test
--- tests/spy.test      10 Nov 2003 21:49:21 -0000      1.1
+++ tests/spy.test      11 Nov 2003 11:39:11 -0000
@@ -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  <address@hidden>
+# | [ ... ]
+# |         * 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 @@
        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 @@
 $sleep
 touch c
 $MAKE
-test "`cat a`" = rule1
-: > a
-$sleep
-touch b c
-$MAKE
-test "`cat a`" = rule1
+test "`cat a`" = rule2


-- 
Alexandre Duret-Lutz





reply via email to

[Prev in Thread] Current Thread [Next in Thread]