automake-ng
[Top][All Lists]
Advanced

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

[Automake-NG] [FYI] coverage: support for double-colon rules both in Aut


From: Stefano Lattarini
Subject: [Automake-NG] [FYI] coverage: support for double-colon rules both in Automake and GNU make
Date: Fri, 15 Jun 2012 16:39:40 +0200

* t/double-colon-rules.sh: New test.
* t/spy-double-colon.sh: Remove as superseded.

Signed-off-by: Stefano Lattarini <address@hidden>
---
 t/double-colon-rules.sh |  112 +++++++++++++++++++++++++++++++++++++++++++++++
 t/spy-double-colon.sh   |  104 -------------------------------------------
 2 files changed, 112 insertions(+), 104 deletions(-)
 create mode 100755 t/double-colon-rules.sh
 delete mode 100755 t/spy-double-colon.sh

diff --git a/t/double-colon-rules.sh b/t/double-colon-rules.sh
new file mode 100755
index 0000000..ef7c45a
--- /dev/null
+++ b/t/double-colon-rules.sh
@@ -0,0 +1,112 @@
+#! /bin/sh
+# Copyright (C) 2003-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/>.
+
+# Check that double colon rules work.
+# This test not only checks that Automake do not mangle double-colon rules
+# seen in input Makefile.am, but also that GNU make support of double-colon
+# rules is as reliable and well-working as we expect and need.
+
+. ./defs || Exit 1
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+all-local:
+       @echo Please select an explicit target; exit 1
+
+# No space after 'a'.
+a:: b
+       echo rule1 >> $@
+# Deliberate space after 'a'.
+a :: c
+       echo rule2 >> $@
+
+# Overlapping rules should work as well
+a2 :: b2
+       echo rule21 >> $@
+a2 :: c2
+       echo rule22 >> $@
+a2:: b2 c2
+       echo rule23 >> $@
+b2 c2:
+       touch $@
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+grep '::' Makefile.in # For debugging.
+test $(grep -c '^a *:: *b *$' Makefile.in) -eq 1
+test $(grep -c '^a *:: *c *$' Makefile.in) -eq 1
+test $(grep -c '^a2 *:: *b2 *$' Makefile.in) -eq 1
+test $(grep -c '^a2 *:: *c2 *$' Makefile.in) -eq 1
+test $(grep -c '^a2 *:: *b2  *c2 *$' Makefile.in) -eq 1
+
+./configure
+
+# Non-overlapping double-colon rules.
+
+touch b c
+$sleep
+: > a
+$MAKE a
+test ! -s a
+$sleep
+touch b
+$MAKE a
+test "$(cat a)" = rule1
+: > a
+$sleep
+touch c
+$MAKE a
+test "$(cat a)" = rule2
+
+: > a
+$sleep
+touch b c
+$MAKE a
+test "$(sort a)" = "rule1${nl}rule2"
+
+rm -f a b c
+
+# Overlapping double-colon rules.
+
+$MAKE a2
+test -f a2
+test -f b2
+test -f c2
+
+: > a2
+$MAKE a2
+test ! -s a2
+$sleep
+touch b2
+$MAKE a2
+test "$(sort a2)" = "rule21${nl}rule23"
+: > a2
+$sleep
+touch c2
+$MAKE a2
+test "$(sort a2)" = "rule22${nl}rule23"
+
+: > a2
+$sleep
+touch b2 c2
+$MAKE a2
+test "$(sort a2)" = "rule21${nl}rule22${nl}rule23"
+
+:
diff --git a/t/spy-double-colon.sh b/t/spy-double-colon.sh
deleted file mode 100755
index 3530328..0000000
--- a/t/spy-double-colon.sh
+++ /dev/null
@@ -1,104 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2003-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/>.
-
-# Check whether double colon rules work.  The Unix V7 make manual
-# mentions double-colon rules, but POSIX does not.  They seem to be
-# supported by all Make implementation as far as we can tell. This test
-# case is a spy: we want to detect if there exist implementations where
-# 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
-
-cat >Makefile <<\EOF
-a :: b
-       echo rule1 >> $@
-a :: c
-       echo rule2 >> $@
-EOF
-
-touch b c
-$sleep
-: > a
-$MAKE
-test "`cat a`" = ''
-$sleep
-touch b
-$MAKE
-test "`cat a`" = rule1
-: > a
-$sleep
-touch c
-$MAKE
-test "`cat a`" = rule2
-
-# Unfortunately, the following is not portable to FreeBSD/NetBSD/OpenBSD
-# make, see explanation above.
-
-: > a
-$sleep
-touch b c
-$MAKE
-grep rule1 a
-grep rule2 a
-
-:
-- 
1.7.9.5




reply via email to

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