automake-ng
[Top][All Lists]
Advanced

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

[Automake-NG] [FYI] [ng] tests: enhance spy tests on patter rules


From: Stefano Lattarini
Subject: [Automake-NG] [FYI] [ng] tests: enhance spy tests on patter rules
Date: Sun, 22 Jul 2012 08:57:59 +0200

* t/spy-pattern-rules.sh : Fix heading comments to be more faithful
about what the test really checks.  Add more tests checking that, in
case of overlapping pattern rules, the ones with the shortest stem
wins.

Signed-off-by: Stefano Lattarini <address@hidden>
---
 t/spy-pattern-rules.sh |   43 ++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 40 insertions(+), 3 deletions(-)

diff --git a/t/spy-pattern-rules.sh b/t/spy-pattern-rules.sh
index c1e0c79..ae19d66 100755
--- a/t/spy-pattern-rules.sh
+++ b/t/spy-pattern-rules.sh
@@ -14,15 +14,23 @@
 # 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, if we have two pattern rules from which the same file (or
-# set of files) can be built, and both are applicable, the first one wins.
-# This is used at least in our 'parallel-tests' support.
+# Two check are done here:
+# - if we have two pattern rules from which the same file (or set of
+#   files) can be built, both are applicable, and both results in the
+#   same target stem, then the first one wins.
+# - if we have two pattern rules from which the same file (or set of
+#   files) can be built, both are applicable, but the resulting target
+#   stems are different, then the "most specific" one (i.e., that which
+#   result in the shortest stem) is used.
+# We take advantage of such features at least in our 'parallel-tests'
+# support.
 
 am_create_testdir=empty
 . ./defs || exit 1
 
 cat > Makefile <<'END'
 default:
+       @echo recipe for $@ should not run >&2; exit 1;
 
 %.foo: %
        cp $< $@
@@ -32,11 +40,22 @@ default:
 %.bar: %.x
        cp $< $@
 %.bar: %
+       cp $< $@
 
 %.mu %.fu: %.1
        cp $< $*.mu && cp $< $*.fu
 %.mu %.fu: %.2
        cp $< $*.mu && cp $< $*.fu
+
+%.o: %.c
+       @cp $< $@ && echo TOP >> $@
+lib/%.o: lib/%.c
+       @cp $< $@ && echo LIB >> $@
+
+bar%: foo%
+       echo .$* >$@
+ba%: foo%
+       @echo '$@: longest stem rule selected!' >&2; exit 1
 END
 
 echo one > all
@@ -51,4 +70,22 @@ $MAKE x.mu
 diff x.mu x.1
 diff x.fu x.1
 
+mkdir lib
+echo foo > a.c
+echo bar > lib/a.c
+$MAKE a.o lib/a.o
+test "$(cat a.o)" = "foo${nl}TOP"
+test "$(cat lib/a.o)" = "bar${nl}LIB"
+
+: > foozap
+: > foo-mu
+: > foox
+$MAKE barzap bar-mu
+test "$(cat barzap)" = .zap
+test "$(cat bar-mu)" = .-mu
+
+# Sanity check.
+$MAKE bax && exit 99
+$MAKE bax 2>&1 | grep '^bax: longest stem rule selected!' || exit 99
+
 :
-- 
1.7.10.4




reply via email to

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