From: Stefano Lattarini Date: Sun, 22 Jul 2012 06:53:14 +0000 (+0200) Subject: [ng] tests: enhance spy tests on pattern rulesn X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84e3bac6381986e6f2b360213e911813ade3d3e5;p=thirdparty%2Fautomake.git [ng] tests: enhance spy tests on pattern rulesn * 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 one "more specific", i.e., with the shortest target stem, wins. Signed-off-by: Stefano Lattarini --- diff --git a/t/spy-pattern-rules.sh b/t/spy-pattern-rules.sh index c1e0c7926..f95d8f5e8 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 . -# 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 checks are done here: +# - if there are two pattern rules from which the same file (or set of +# files) can be built, and both are applicable, and both results in +# the same target stem, then the first one wins. +# - if there are two pattern rules from which the same file (or set of +# files) can be built, and 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 + :