mirror of
https://github.com/mirror/make.git
synced 2025-01-09 20:00:28 +08:00
11095a90f1
I decided this feature was too impacting to make the permanent default behavior. This set of changes makes the default behavior of make the old behavior (no second expansion). If you want second expansion, you must define the .SECONDEXPANSION: special target before the first target that needs it. This set of changes ONLY fixes explicit and static pattern rules to work like this. Implicit rules still have second expansion enabled all the time: I'll work on that next. Note that there is still a backward-incompatibility: now to get the old SysV behavior using $$@ etc. in the prerequisites list you need to set .SECONDEXPANSION: as well.
71 lines
1.5 KiB
Perl
71 lines
1.5 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: ;@:
|
|
',
|
|
'', '');
|
|
|
|
1;
|