[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Automake-NG] [FYI] coverage: support for double-colon rules both in Automake and GNU make,
Stefano Lattarini <=