[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.
This commit is contained in:
Dmitry Goncharov 2022-01-21 18:37:44 -05:00 committed by Paul Smith
parent d34f46c1f3
commit f3e345c869
6 changed files with 70 additions and 1 deletions

View file

@ -237,6 +237,20 @@ all: hello.z
!,
'', "#MAKE#: Nothing to be done for 'all'.\n");
# subtest 3
# hello.x is explicitly mentioned on an unrelated rule and thus is not an
# intermediate file.
# Terminal pattern rules do not apply anyway and there is no rule to built
# 'hello.x'.
touch('hello.z');
run_make_test(q!
all: hello.z
%.z:: %.x; touch $@
%.x: ;
unrelated: hello.x
!,
'', "#MAKE#: *** No rule to make target 'hello.x', needed by 'hello.z'. Stop.\n", 512);
unlink('hello.z');

View file

@ -152,6 +152,16 @@ all: hello.z
%.x: ;
!, '', "hello.z hello.q\n");
# subtest 3
# hello.x is explicitly mentioned on an unrelated rule and thus is not an
# intermediate file.
run_make_test(q!
all: hello.z
%.z %.q: %.x; @echo $*.z $*.q
%.x: ;
unrelated: hello.x
!, '', "hello.z hello.q\n");
unlink('hello.z');
unlink('hello.q');

View file

@ -278,6 +278,18 @@ unrelated: hello$s
}
}
# Test that prerequisite 'hello.x' mentioned explicitly on an unrelated rule is
# not considered intermediate.
touch('hello.tsk');
unlink('hello.x');
run_make_test("
all: hello.tsk
%.tsk: %.x; touch hello.tsk
%.x: ;
unrelated: hello.x
", '', "touch hello.tsk\n");
unlink('hello.tsk');
touch ('hello.f');
# Test implicit search of builtin rules.

View file

@ -272,6 +272,18 @@ all: hello.z
!,
'', "touch hello.z");
# subtest 3
# hello.x is explicitly mentioned on an unrelated rule and thus is not an
# intermediate file.
touch('hello.z');
run_make_test(q!
all: hello.z
%.z: %.x; touch $@
%.x: ;
unrelated: hello.x
!,
'', "touch hello.z");
unlink('hello.z');
# sv 60188.

View file

@ -291,6 +291,18 @@ all: hello.z
%.x: ;
!, '', "hello.z\n");
# subtest 3.
# hello.x is explicitly mentioned on an unrelated rule and thus is not an
# intermediate file.
run_make_test(q!
.SECONDEXPANSION:
dep:=hello.x
all: hello.z
%.z: %.x; @echo $@
%.x: ;
unrelated: $$(dep)
!, '', "hello.z\n");
unlink('hello.z');

View file

@ -123,10 +123,19 @@ hello.z: %.z: %.x ; @echo $@
# subtest 2
run_make_test(q!
hello.z: %.z: test.x ; @echo $@
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;