mirror of
https://git.savannah.gnu.org/git/make.git
synced 2025-01-13 09:25:46 +00:00
15a7e3830f
* maintMakefile: Remove the template headers as prerequisites. * tests/scripts/features/jobserver: Only test fifo if enabled. * tests/scripts/variables/INCLUDE_DIRS: On MacOS none of the default directories exist so .INCLUDE_DIRS is empty by default. * tests/scripts/features/se_explicit: Fail via exit. cp will show different error messages on different systems. * tests/scripts/features/se_implicit: Ditto. * tests/scripts/features/se_statpat: Ditto.
232 lines
5.9 KiB
Perl
232 lines
5.9 KiB
Perl
# -*-perl-*-
|
|
$description = "Test second expansion in static pattern rules.";
|
|
|
|
$details = "";
|
|
|
|
# Test #1: automatic variables.
|
|
#
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
.DEFAULT: ; @echo '$@'
|
|
|
|
foo.a foo.b: foo.%: bar.% baz.%
|
|
foo.a foo.b: foo.%: biz.% | buz.%
|
|
|
|
foo.a foo.b: foo.%: $$@.1 \
|
|
$$<.2 \
|
|
$$(addsuffix .3,$$^) \
|
|
$$(addsuffix .4,$$+) \
|
|
$$|.5 \
|
|
$$*.6
|
|
!,
|
|
'', 'bar.a
|
|
baz.a
|
|
biz.a
|
|
buz.a
|
|
foo.a.1
|
|
bar.a.2
|
|
bar.a.3
|
|
baz.a.3
|
|
biz.a.3
|
|
bar.a.4
|
|
baz.a.4
|
|
biz.a.4
|
|
buz.a.5
|
|
a.6
|
|
');
|
|
|
|
|
|
# Test #2: target/pattern -specific variables.
|
|
#
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
.DEFAULT: ; @echo '$@'
|
|
|
|
foo.x foo.y: foo.%: $$(%_a) $$($$*_b)
|
|
|
|
foo.x: x_a := bar
|
|
|
|
%.x: x_b := baz
|
|
!,
|
|
'', "bar\nbaz\n");
|
|
|
|
|
|
# Test #3: order of prerequisites.
|
|
#
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
.DEFAULT: ; @echo '$@'
|
|
|
|
all: foo.a bar.a baz.a
|
|
|
|
# Subtest #1
|
|
foo.a foo.b: foo.%: foo.%.1; @:
|
|
foo.a foo.b: foo.%: foo.%.2
|
|
foo.a foo.b: foo.%: foo.%.3
|
|
|
|
|
|
# Subtest #2
|
|
bar.a bar.b: bar.%: bar.%.2
|
|
bar.a bar.b: bar.%: bar.%.1; @:
|
|
bar.a bar.b: bar.%: bar.%.3
|
|
|
|
|
|
# Subtest #3
|
|
baz.a baz.b: baz.%: baz.%.1
|
|
baz.a baz.b: baz.%: baz.%.2
|
|
baz.a baz.b: ; @:
|
|
!,
|
|
'', 'foo.a.1
|
|
foo.a.2
|
|
foo.a.3
|
|
bar.a.1
|
|
bar.a.2
|
|
bar.a.3
|
|
baz.a.1
|
|
baz.a.2
|
|
');
|
|
|
|
|
|
# Test #4: Make sure stem triple-expansion does not happen.
|
|
#
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
foo$$bar: f%r: % $$*.1 ; @echo '$*'
|
|
|
|
oo$$ba oo$$ba.1: ; @echo '$@'
|
|
!,
|
|
'', 'oo$ba
|
|
oo$ba.1
|
|
oo$ba
|
|
');
|
|
|
|
# sv 62324.
|
|
# Integrity self check.
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
all: bye.x
|
|
bye.x: %.x: $$(firstword %.1;
|
|
!, '', "#MAKEFILE#:4: *** unterminated call to function 'firstword': missing ')'. Stop.", 512);
|
|
|
|
#unlink('hello.tsk', 'bye.tsk', 'hello.o', 'hello.q', 'bye.o');
|
|
|
|
# sv 62706.
|
|
# Test that makes avoids second expanding prerequisites of the targets which
|
|
# are not built.
|
|
# Here, hello.tsk is built and its prerequisites are second expanded.
|
|
# bye.tsk is not built and its prerequisites are not second expanded.
|
|
|
|
# Static pattern rules.
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
hello.tsk: %.tsk: %.o $$(info second expansion of $$@ prereqs); $(info $@ from $<)
|
|
bye.tsk: %.tsk: %.o $$(info second expansion of $$@ prereqs); $(info $@ from $<)
|
|
hello.o: $$(info second expansion of $$@ prereqs); $(info $@)
|
|
bye.o: $$(info second expansion of $$@ prereqs); $(info $@)
|
|
!, 'hello.tsk',
|
|
"second expansion of hello.tsk prereqs
|
|
second expansion of hello.o prereqs
|
|
hello.o
|
|
hello.tsk from hello.o
|
|
#MAKE#: 'hello.tsk' is up to date.\n");
|
|
|
|
# sv 62706.
|
|
# Order only prereqs.
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
hello.tsk: %.tsk:| %.o $$(info second expansion of $$@ prereqs); $(info $@ from $|)
|
|
bye.tsk: %.tsk:| %.o $$(info second expansion of $$@ prereqs); $(info $@ from $|)
|
|
hello.o:| $$(info second expansion of $$@ prereqs); $(info $@)
|
|
bye.o:| $$(info second expansion of $$@ prereqs); $(info $@)
|
|
!, 'hello.tsk',
|
|
"second expansion of hello.tsk prereqs
|
|
second expansion of hello.o prereqs
|
|
hello.o
|
|
hello.tsk from hello.o
|
|
#MAKE#: 'hello.tsk' is up to date.\n");
|
|
|
|
# sv 62706.
|
|
# Double colon. 1 rule per target.
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
hello.tsk:: %.tsk: %.o $$(info second expansion of $$@ prereqs); $(info $@ from $<)
|
|
bye.tsk:: %.tsk: %.o $$(info second expansion of $$@ prereqs); $(info $@ from $<)
|
|
hello.o:: $$(info second expansion of $$@ prereqs); $(info $@)
|
|
bye.o:: $$(info second expansion of $$@ prereqs); $(info $@)
|
|
!, 'hello.tsk',
|
|
"second expansion of hello.tsk prereqs
|
|
second expansion of hello.o prereqs
|
|
hello.o
|
|
hello.tsk from hello.o
|
|
#MAKE#: 'hello.tsk' is up to date.\n");
|
|
|
|
# sv 62706.
|
|
# Double colon. 2 rules per target.
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
hello.tsk:: %.tsk: %.o $$(info 1 second expansion of $$@ prereqs); $(info 1 $@ from $<)
|
|
hello.tsk:: %.tsk: %.o $$(info 2 second expansion of $$@ prereqs); $(info 2 $@ from $<)
|
|
bye.tsk:: %.tsk: %.o $$(info 1 second expansion of $$@ prereqs); $(info 1 $@ from $<)
|
|
bye.tsk:: %.tsk: %.o $$(info 2 second expansion of $$@ prereqs); $(info 2 $@ from $<)
|
|
hello.o:: $$(info 1 second expansion of $$@ prereqs); $(info 1 $@)
|
|
hello.o:: $$(info 2 second expansion of $$@ prereqs); $(info 2 $@)
|
|
bye.o:: $$(info 1 second expansion of $$@ prereqs); $(info 1 $@)
|
|
bye.o:: $$(info 2 second expansion of $$@ prereqs); $(info 2 $@)
|
|
!, 'hello.tsk',
|
|
"1 second expansion of hello.tsk prereqs
|
|
1 second expansion of hello.o prereqs
|
|
1 hello.o
|
|
2 second expansion of hello.o prereqs
|
|
2 hello.o
|
|
1 hello.tsk from hello.o
|
|
2 second expansion of hello.tsk prereqs
|
|
2 hello.tsk from hello.o
|
|
#MAKE#: 'hello.tsk' is up to date.\n");
|
|
|
|
# sv 62706.
|
|
# Test that the prerequisites of 'hello.tsk' are second expanded once.
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
all: hello.tsk hello.q
|
|
hello.tsk: %.tsk: %.o $$(info second expansion of $$@ prereqs); $(info $@ from $^)
|
|
hello.o: $$(info second expansion of $$@ prereqs); $(info $@)
|
|
hello.q: %.q: %.tsk $$(info second expansion of $$@ prereqs); $(info $@ from $^)
|
|
!, '',
|
|
"second expansion of hello.tsk prereqs
|
|
second expansion of hello.o prereqs
|
|
hello.o
|
|
hello.tsk from hello.o
|
|
second expansion of hello.q prereqs
|
|
hello.q from hello.tsk
|
|
#MAKE#: Nothing to be done for 'all'.\n");
|
|
|
|
unlink('hello.1');
|
|
|
|
# sv 62706.
|
|
# No side effects from second expansion of unrelated rules.
|
|
run_make_test(q!
|
|
.SECONDEXPANSION:
|
|
all: hello.tsk
|
|
hello.tsk: %.tsk: %.o; exit 1
|
|
hello.o:;
|
|
bye.tsk: %.tsk: $$(shell touch hello.1);
|
|
!, '',
|
|
"exit 1
|
|
#MAKE#: *** [#MAKEFILE#:4: hello.tsk] Error 1\n", 512);
|
|
|
|
# sv 62706.
|
|
# Second expansion of intermediate prerequisites.
|
|
# The rule to build hello.x is static pattern.
|
|
# .SECONDARY marks hello.x as intermediate.
|
|
# Test that $$(deps) is secondary expanded.
|
|
run_make_test(q!
|
|
deps:=hello.h
|
|
.SECONDEXPANSION:
|
|
.SECONDARY: hello.x
|
|
all: hello.x
|
|
hello.x: %.x: $$(deps); $(info $@)
|
|
hello.h:; $(info $@)
|
|
!, '', "hello.h\nhello.x\n#MAKE#: Nothing to be done for 'all'.\n");
|
|
|
|
# This tells the test driver that the perl test script executed properly.
|
|
1;
|