make/tests/scripts/features/statipattrules
Dmitry Goncharov f3e345c869 [SV 48643] Add more tests of intermediates and unrelated targets
If a prereq of a pattern is explicitly mentioned as a prereq of an
unrelated rule, it should not be considered an intermediate file.

* tests/scripts/features/double_colon: Add tests mentioning unrelated
explicit targets.
* tests/scripts/features/grouped_targets: Ditto.
* tests/scripts/features/implicit_search: Ditto.
* tests/scripts/features/patternrules: Ditto.
* tests/scripts/features/se_implicit: Ditto.
* tests/scripts/features/statipattrules: Ditto.
2022-02-06 18:46:32 -05:00

142 lines
2.7 KiB
Perl

# -*-perl-*-
$description = "Test handling of static pattern rules.";
$details = "\
The makefile created in this test has three targets. The
filter command is used to get those target names ending in
.o and statically creates a compile command with the target
name and the target name with .c. It also does the same thing
for another target filtered with .elc and creates a command
to emacs a .el file";
&touch('bar.c', 'lose.c');
# TEST #0
# -------
run_make_test('
files = foo.elc bar.o lose.o
$(filter %.o,$(files)): %.o: %.c ; @echo CC -c $(CFLAGS) $< -o $@
$(filter %.elc,$(files)): %.elc: %.el ; @echo emacs $<
',
'',
'CC -c bar.c -o bar.o');
# TEST #1
# -------
run_make_test(undef, 'lose.o', 'CC -c lose.c -o lose.o');
# TEST #2
# -------
&touch("foo.el");
run_make_test(undef, 'foo.elc', 'emacs foo.el');
# Clean up after the first tests.
unlink('foo.el', 'bar.c', 'lose.c');
# TEST #3 -- PR/1670: don't core dump on invalid static pattern rules
# -------
run_make_test('
.DEFAULT: ; @echo $@
foo: foo%: % %.x % % % y.% % ; @echo $@
',
'', ".x\ny.\nfoo");
# TEST #4 -- bug #12180: core dump on a stat pattern rule with an empty
# prerequisite list.
run_make_test('
foo.x bar.x: %.x : ; @echo $@
',
'', 'foo.x');
# TEST #5 -- bug #13881: double colon static pattern rule does not
# substitute %.
run_make_test('
foo.bar:: %.bar: %.baz
foo.baz: ;@:
',
'', '');
# TEST #6: make sure the second stem does not overwrite the first
# perprerequisite's stem (Savannah bug #16053).
#
run_make_test('
all.foo.bar: %.foo.bar: %.one
all.foo.bar: %.bar: %.two
all.foo.bar:
@echo $*
@echo $^
.DEFAULT:;@:
',
'',
'all.foo
all.one all.foo.two');
# TEST #7: make sure the second stem does not overwrite the first
# perprerequisite's stem when second expansion is enabled
# (Savannah bug #16053).
#
run_make_test('
.SECONDEXPANSION:
all.foo.bar: %.foo.bar: %.one $$*-one
all.foo.bar: %.bar: %.two $$*-two
all.foo.bar:
@echo $*
@echo $^
.DEFAULT:;@:
',
'',
'all.foo
all.one all-one all.foo.two all.foo-two');
# Test #8:
# sv 60188.
# Static pattern rules are considered explicit rules: no prerequisite of
# a static pattern rule can ever be considered intermediate.
touch('hello.z');
# subtest 1
run_make_test(q!
hello.z: %.z: %.x ; @echo $@
%.x: ;
!, '', "hello.z\n");
# subtest 2
run_make_test(q!
hello.z: %.z: %.x test.x ; @echo $@
%.x: ;
!, '', "hello.z\n");
# subtest 3
# 'hello.x' is mentioned explicitly on an unrelated rule.
run_make_test(q!
hello.z: %.z: %.x ; @echo $@
%.x: ;
unrelated: hello.x
!, '', "hello.z\n");
unlink('hello.z');
1;