From f3e345c86959d5e6b1f1fe1830f5623b96369df8 Mon Sep 17 00:00:00 2001 From: Dmitry Goncharov Date: Fri, 21 Jan 2022 18:37:44 -0500 Subject: [PATCH] [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. --- tests/scripts/features/double_colon | 14 ++++++++++++++ tests/scripts/features/grouped_targets | 10 ++++++++++ tests/scripts/features/implicit_search | 12 ++++++++++++ tests/scripts/features/patternrules | 12 ++++++++++++ tests/scripts/features/se_implicit | 12 ++++++++++++ tests/scripts/features/statipattrules | 11 ++++++++++- 6 files changed, 70 insertions(+), 1 deletion(-) diff --git a/tests/scripts/features/double_colon b/tests/scripts/features/double_colon index b5b73f70..c4996e73 100644 --- a/tests/scripts/features/double_colon +++ b/tests/scripts/features/double_colon @@ -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'); diff --git a/tests/scripts/features/grouped_targets b/tests/scripts/features/grouped_targets index 131b8c0b..f6a17214 100644 --- a/tests/scripts/features/grouped_targets +++ b/tests/scripts/features/grouped_targets @@ -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'); diff --git a/tests/scripts/features/implicit_search b/tests/scripts/features/implicit_search index 93a212bd..297e3217 100644 --- a/tests/scripts/features/implicit_search +++ b/tests/scripts/features/implicit_search @@ -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. diff --git a/tests/scripts/features/patternrules b/tests/scripts/features/patternrules index 7303df5f..623bb6ed 100644 --- a/tests/scripts/features/patternrules +++ b/tests/scripts/features/patternrules @@ -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. diff --git a/tests/scripts/features/se_implicit b/tests/scripts/features/se_implicit index db6e1683..712f3bfd 100644 --- a/tests/scripts/features/se_implicit +++ b/tests/scripts/features/se_implicit @@ -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'); diff --git a/tests/scripts/features/statipattrules b/tests/scripts/features/statipattrules index 096521ec..378fedc5 100644 --- a/tests/scripts/features/statipattrules +++ b/tests/scripts/features/statipattrules @@ -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;